人気ブログランキング | 話題のタグを見る

C#の仕様

『C#によるプログラミング入門』のサンプルコードを入力して動作確認しながら読んでいたが、体力的に到底無理な感じがしたので、サンプルコードを実行せずに、C#の仕様を一通り読むだけ読んでみた。

読んでみて感じたのは、仕様の説明を過去にやったRubyのプログラム例に置き換えて読んでみると仕様の意味がよくわかるということだ。コンパイル、実行をしないので、細かい記法の注意点は頭に残らないが、その記法で何をやろうとしているのかは分かる。しかし、同じことをやるのに、Ruby の記法のほうが直感的に理解しやすかったような気がする。

一読した印象は、C#の現在の仕様は、Rubyで行っていることをC言語で行えるようにしたという感じだ。ただ、その後の機能拡張を見ていると、データベース処理や、関数型言語の特徴まで取り入れようとしているらしい。したがって、仕様は肥大化していっている。この傾向が良いものかどうかは分からない。

オブジェクト指向のプログラミングスタイルとイベント駆動型のプログラミングはGUIの発達とともに洗練されてきた。しかし、オブジェクト指向のプログラミングとイベント駆動型のプログラミングは同じGUIに使われているが、技術としては別のものだ。手続き型のプログラミングスタイルと、関数型のプログラミングスタイルも特徴はかなり違っている。データベース検索言語のそれも特異な位置づけを保っている。これらを包含する大きな言語が果たして可能なのだろうかと思われる。

Gtk-2.0 に見られるように、C言語を使っていても、オブジェクト指向的でイベント駆動的なツールキットを作ることができる。Gtk-2.0を使ってプログラミングしているときは、C言語で書いていても、関数と関数をつなぐ糊の役割を果たしているだけで、全く別の言語を使ってプログラミングしている気がする。

C言語の仕様が比較的小さく、IO処理やその他の処理をすべて関数やライブラリで実現するようにしたのは卓見だったような気がする。ライブラリの性質は時代とともに変化していったが、C言語の仕様はほとんど変化していない。

むしろ、言語の仕様よりも、ライブラリで何を実現しようとしているかの方が大切なのではないだろうか。言語の役割はそれらのライブラリを効率的につなぎ合わせることのような気がする。Gtk-2.0のように巧妙なライブラリがあれば、プログラミングはどの言語を使ってもそう変わらないものになる。

かといって、オブジェクト指向プログラムを記述するのには、RubyやC#を使った方がわかりやすいし、プログラム言語の記法の重要さは明白だ。

しかし、もっと大事なのは、RubyでもC#でも、もっというとC言語でも同じことをやっているというプログラミングの抽象性の方ではないだろうか。ループはどの言語でも同じことをやっているし、オブジェクトのメソッド呼び出しはRubyでもPythonでもPerl5でも同じことをやっている。実際のプログラミングの中に現れてくるこの、データの抽象性に注目していけば、より簡潔な記法で同じことを行えるプログラミング言語を発見できるかもしれない。

さらに、手続き型の言語と関数型の言語のように混在させると不都合なほど仕様が混乱する可能性もある。このような場合は、無理に統一的にひとつの言語で記述するというのではなく、データを介する両者のインターフェースの方法を工夫した方がいいのではないかと思う。SWIGなどを見ていると、スクリプト言語とC言語プログラムの自動的なインターフェースを作ることが、どんなに現場の人間にとってありがたいかが分かる。

まあ、いろいろな考え方はあるかもしれないが、C#がC言語を取り入れた上に、簡潔な記法でオブジェクト指向プログラムを作ることができるというのは事実だし、さらに、.NET Framework という強力なツールを使うために設計されているという事情を考えると、覚える労力を払う価値は十分あるのではないかと思う。
by tnomura9 | 2009-12-30 21:45 | C# | Comments(0)
<< プログラム言語とプログラム C# 練習プログラム >>