C# (C Sharp) は Microsoft が開発したマルチパラダイムなプログラミング言語です。C# のプログラムは、同じく Microsoft が開発したフレームワーク .NET Framework の共通中間言語 (CLI) にコンパイルされて、共通言語ランタイム (CLR) 上で実行されます。
C# の実行には .NET Framework が必要になるため、Windows 以外の環境では動作しないと思われる方がいるかもしれませんが、実はそうではありません。C# や CLI は Ecma や ISO によって標準化されており、JIS 規格にも採用されています。Microsoft 以外のサードパーティーが C# コンパイラや .NET Framework 互換の環境を開発することもできるのです。その中で有名なオープンソースプロジェクトが「Mono」です。
Mono は Windows, Mac OS, Linux などマルチプラットフォームで動作する .NET Framework 互換の環境です。公式サイト からダウンロードして簡単にインストールすることができます。Ubuntu 系の OS であれば、次のコマンドでもインストールすることができます。
$ sudo apt-get install monodevelop
ただし、これは最新バージョンではないようなので、本ページでは Windows 版を使うことにします。
MonoDevelop は統合開発環境ですが、本ページではそれを使わずに、エディタとコンパイラで簡単なプログラムを作りながら、C# の基本を勉強していくことにします。なにぶんにも初心者が作るページなので、勘違いや間違いがあると思います。何かお気づきの点がありましたら、メールでご指摘いただけると助かります。本ページは C# に関する M.Hiroi の「覚え書」にすぎませんが、よろしければお付き合いくださいませ。
Mono の場合、C# のコンパイルには mcs を使います。たとえば、hello, C#!! を表示するプログラムは次のようになります。
リスト ; hello, C#!! (hello.cs) using System; class Test { static void Main() { Console.WriteLine("hello, C#!!"); } }
ソースファイルの拡張子は .cs になります。msc hello.cs でソースファイルをコンパイルすると、実行ファイル hello.exe が生成されます。それを実行すると hello, C#!! と表示されます。
C>mcs hello.cs C>dir /b hello.* hello.cs hello.exe C>hello Hello C#!
ところで、Mono で C# を学習する場合、csharp というツールを使うと便利です。csharp は Mono の配布パッケージに含まれています。csharp を起動すると、メッセージとプロンプトが表示されて、対話モードで C# が起動されます。その状態で C# の式を入力して簡単に実行することができます。
C>csharp Mono C# Shell, type "help;" for help Enter statements below. csharp> quit; C>
終了する場合は quit; (または Ctrl-D) を入力してください。
さて、肝心な C# (Mono) の実行速度ですが、いつものように「たらいまわし関数」を使って調べてみました。
リスト:たらいまわし関数 (tarai.cs) using System; class Tak { static int tak(int x, int y, int z) { if (x <= y) return z; return tak(tak(x - 1, y, z), tak(y - 1, z, x), tak(z - 1, x, y)); } static void Main() { DateTime s = DateTime.Now; Console.WriteLine("{0}", tak(22, 11, 0)); DateTime e = DateTime.Now; Console.WriteLine("{0}", e - s); } }
それでは実行結果を示します。tak(22, 11, 0) を計算しました。他のプログラミング言語との比較を下表に示します。
処理系 | 秒 |
---|---|
Python (ver 2.7.3) | 91.9 |
PyPy (ver 4.0.1) | 17.9 |
SBCL (ver 1.0.55) | 5.85 |
SML/NJ (ver 110.74) | 3.48 |
GCC -O (ver 4.5.3) | 2.37 |
Julia (ver 0.4.1) | 2.31 |
C# (msc ver 4.4.2.0) | 2.18 |
SBCL (最適化) | 2.01 |
Go (ver 1.2) | 1.98 |
C# (最適化) | 1.98 |
GHC -O (ver 7.4.1) | 1.92 |
GCC -O2 (ver 4.5.3) | 1.89 |
Scala (ver 2.11.1) | 1.79 |
Java (ver 1.8.0_05) | 1.09 |
ocamlopt (ver 3.12.1) | 1.09 |
C# (Mono) は Python や PyPy とは次元の異なる速さで、ネイティブコードにコンパイルするプログラミング言語に匹敵する結果になりました。この結果には M.Hiroi も大変驚きました。Mono の JIT コンパイラはとても優秀なようです。興味のある方はいろいろ試してみてください。
『お気楽C#プログラミング超入門』の著作権は筆者「広井誠 (Makoto Hiroi) 」が保持します。無断使用や無断転載は禁止いたします。『お気楽C#プログラミング超入門』で作成したプログラムはフリーソフトウェアとします。ご自由にお使いください。プログラムの改造や配布もご自由にどうぞ。その際は出典を明記してくださるようお願いいたします。
ただし、ドキュメントの内容とプログラムは無保証であり、利用したことにより生じた損害について、作者「広井誠 (Makoto Hiroi) 」 は一切の責任を負いません。また、これらのプログラムを販売することで利益を得るといった商行為は禁止いたします。