最近のプログラミング言語事情

ちょっと違うけれども、今日と明日のMicrosoftTechdaysで、この日記の表題と似たような感じのタイトルのセッションがある。
少し興味あるなと思っていたら、1週間前ぐらいに上司から、あれはタイトルとかけ離れた内容らしいよと言われた。(そしてオススメだから、ぜひ聞きにいけ、と)
そして上司の説明を聞いてみた所、私の想像通りの話だったので、ああ、それはタイトル通りの内容ですねぇと思った。


言語っていくつか流れがあって、コンパイル系言語では先に静的型付け言語が発展した。逆にインタプリタ系言語では先に動的型付け言語が発展した。
ところが、静的片付け言語と動的型付け言語は、それぞれにメリットがあるものなので、昨今はお互いに踏みよって、コンパイル系言語でも動的型付けのメリット(より抽象化して書きやすい、とか)を言語に取り入れつつあり、はたまたインタプリタ系言語でも静的型付けのメリット(動かさずに型チェックができる、とか)を言語に取り入れつつある。


更に、手続き型言語オブジェクト指向言語を含む。C言語、Java等)は状態を持つが、純粋関数型言語は状態を持たない。
たぶん多くのプログラマにとって馴染み深いのは、状態を持つ言語の方だろう。
ただこれも、状態を持つことのメリット(変数なしでプログラミングするのは大変やで〜!)と持たないことのメリット(処理が副作用を持たないので、処理の並列化がやりやすい)があって、互いのメリットを取り入れようとする傾向にある。
メニーコアの時代がやってきてからは特に、状態を持つ言語でも効果的に並列化する手法が研究されてきている。.net4.0では、状態を持つ言語の中で、Linqという状態を持たない言語(と、asParallel)を呼び出すことで、その処理の間だけは副作用がない様にして、その部分だけは自動的に並列処理化できる様にしている。(インライン純粋関数型言語というか、なんというか)
逆に純粋関数型言語の需要も高まってきている。Haskelのモナドとか、昔は純粋関数型言語では難しいとされてきた入出力やシーケンスの処理を、純粋関数型言語のメリットを損なわずに実現する手法などがある。


ともかく、プログラミング言語っていうのは言語単独で存在してるわけじゃなくて、用途やスタイルに合わせて作られてるものなので、用途やスタイルが変われば言語は変化していくし、僕らは半永久的に新しい言語を学び続けなければならない。
100年後にブームになる言語は、今からでは想像もつけようがないものなわけだ。
きっと、もはや数式を手書きで紙に書いてスキャナで取り込めば、その計算を行うプログラムが自動的に作られたりなんてことは、当たり前の様になっているんじゃないかなと思う。
しかしまぁ、100年後であっても、C言語系列(C++、Java、D言語、C#)の言語が相変わらず使われてる様な気はする。


ああ、そうそう、だから。リフレクション系の話とか並列化の話は、言語と切っても切れない問題なので、件のセッションのタイトルは、内容をよく表してるタイトルだと個人的には思うわけです。