C#の由来を知る

C#って実は食わず嫌いでずっと触ったことがありませんでした.しかしWeb関連のプロジェクトでWebSocketによるサーバーとの通信をやらなければならなくなりました.クライアント側は当たり前のようにJava Scriptになります.仮想的にサーバー側をWindows上でどう作ろうか調べました.ところがVisual Studioでは、ASP.NET Core Web Applicationのテンプレートの存在する言語はC#かF#しかないのです.つまりVisual Basicは使えない.F#ってとっても魅力的ですが、まだまだ使える実力がありません.という訳でC#に弟子入りすることになりました.

まあ正直歳をとって新しい言語を覚えるのも大変なんですが、しかし必要となれば文句は言っていられません.まずは入門書から探そうと、Amazonを見てみると結構な数の本があります.私は変に凝る方なのであんまりというか1個しか書評のついていない、川俣晶さんの「楽しいC#入門」を買いました.さすがに今時の本で、Kindleオンリーです.

川俣さんはずっと昔からWebでVBXMLの連載記事をやっていて、ご本人にはお会いしたことはありませんが、いままでに幾度となくその丁寧で(ちょっと)オタクっぽい解説にお世話になっていましたので、内容は押して知るべしでした.

私が最初に本を見て驚いたのは以下のC#の最初の解説です.C#の元はBolandのDelphiだったんです.

C#はアンダース・ヘルスバーグらによって、米マイクロソフト社で開発されたプログラミング言語です。公開されたのは2000年です。つまり、C#は誕生してからすでに10年以上が経過しており、けして新しい言語ではありません。 では、C#のルーツはどこまで遡れるのでしょうか。 C#のルーツはDelphiという言語にあります。Delphiとは、C#を産み出したアンダース・ヘルスバーグがマイクロソフト社に移籍する前に、ボーランド社で開発したプログラミング言語です。その母体は、それ以前にアンダース・ヘルスバーグが開発したTurboPascalという開発言語にあります。TurboPascalは、Pascalというプログラミング言語を拡張した統合開発環境で、1980年代のヒット開発言語の1つです。では、Pascalとは何でしょう? それはニクラウス・ヴィルトが1970年に発表し、1970年代にパソコンの次世代の主力開発言語の座をC言語の争ったライバル言語なのです。最終的にC言語が勝利するまでは次世代プログラミング言語の本命の二強と言われた2つのプログラミング言語の一つです。
川俣 晶. 楽しいC#入門: .NET 5 RC1対応版 (COOL C# CREW Series) (Kindle の位置No.757-767). Kabusikigaisha pi-de-. Kindle 版.


実はBolandのDelphiは1.0の時から買っていて、2.0が出てからこれでどのくらいプログラムを作ったかわかりません.なぜDelphiなんか好きだったかというと、大学の研究室で卒論を書くときに作ったプログラムは当時のDEC(Digital Equipment Corporation)のPDP-11というマシンのPascalだったからです.ここで構造化プログラミングというのに初めて接しました.就職してからはCOBOLアセンブラばかりでしたので、Delphiが出たときは、「Bolandよくぞやってくれた!」という気持ちで自費購入して勉強していたのです.

ところがBolandはいろいろごたごたがあって、アンダース・ヘルスバーグはMicrosoftに移ってからC#を発表しました.当時BolandからMicrosoftに移ると給料も10倍になったとか言われていて、どうもその成り筋に自分の気持ち的に納得がゆかず、C#には触ることもなかったのです.後になって、アンダース・ヘルスバーグが移籍した理由は主にBolandの決定的な方針転換についてゆきようがなくなった技術者がみんな移ったと知って誤解とわかりました.Wikipediaを見るとC#の開発にはDelphiの開発者も多く加わっていたとのことです.

開発にはボーランドのTurbo PascalDelphiを開発したアンダース・ヘルスバーグを筆頭に多数のDelphi開発陣が参加している。
From https://ja.wikipedia.org/wiki/c_sharp


また川俣さんの本には

注意することが1つあります。 C#は歴史的経緯によりC言語風の文法を持っていますが、ルーツはC言語のライバルPascalにあります。そのため、細かい部分でC言語の常識に沿って動作しない仕様を含みます。表面的に似ているからと言って、C言語やほぼ上位互換のC++と一緒に学ぶことはお勧めではありません。
川俣晶.楽しいC#入門:.NET5RC1対応版(COOLC#CREWSeries)(Kindleの位置No.771-774).Kabusikigaishapi-de-.Kindle版.


とあってルーツはC++ではなく、あくまでObject Pascal(== Delphi)なんですね.それならはるかに親近感が湧きました.

さて、はじめて作ったC#のプログラムはMSDNのサンプルから改造したものです.

ASP.NET CoreでのWebsocketのサポート
https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/websockets?view=aspnetcore-2.1

ソースコード
https://github.com/dotnet/AspNetCore.Docs/tree/master/aspnetcore/fundamentals/websockets/samples/2.x/WebSocketsSample

このプログラムはクライアントの入力文字列を単にエコーするだけなんですが、実際にはこれを改造して一定の手順でJSONをやりとりしながら、サーバー側の情報を定期的に得るものを作りました.

こういうのがいわゆる今時のWebものなのでしょうね.初心者であってもC#Visual Studioの手厚いサポートでコーディング/デバッグはスゴク楽、あとクライアントのJavaScriptVisual Studio Code+ブラウザのF12でのデバッグでなんとかなりました.