まつもとゆきひろの「プログラミング言語論」

アンテナにも設定しているMatzさんことまつもとゆきひろさんの記事。なるほどと思った内容を上げてみる。

しかし,面白いことに次の世代に影響を与えた言語は,生き残ったFORTRANCOBOLではなく,どちらかというと消え去ってしまった言語の方でした。

FORTRANCOBOLは「まじめな」言語、消え去ってしまった言語は「ふまじめな」言語だと思う。ふまじめな言語は概念としておもしろくて、言語が好きな人を引きつけたのだけれど、言語を仕事として使う人には見向きもされなかったのだと思う。
だから、

そのような冒険をしない姿勢もJavaの長所と言えるかもしれません。私個人はプログラミング言語としてのJavaにはあまり魅力を感じないのですが,ビジネスの素材としてのJavaは大成功していることを認めざるをえません。

Javaは「まじめな」言語だと思う。

正確に言えば,コンパイラ型かインタプリタ型かというのは言語処理系の性質であって,言語そのものの性質ではありません。

なるほど。たしかにそうですね。

 JavaVM仮想マシン)という一種のインタプリタを使うことで,同じプログラムがどこでも動くこと(Write Once,Run Anywhere)をスローガンにしていますが,このVMというアイデアSmalltalkなどで既に採用されていた「枯れた」アイデアです。

知りませんでした。「例外処理」もSmalltalkが起源なのだそうです。

「動的な型」とはプログラムの字面上には型情報がなく,データの型は実行時にだけ決まることです。動的な型のプログラミング言語ではデータ自身が自分の型についての情報を持っています。このタイプの言語では型の不整合はコンパイル時には見つからず,実行時にはじめて明らかになります。

ただ、静的な型の言語でもキャストをするとこのエラーが発生することが多くあって、私はよく引っかかります。というよりも、オブジェクト指向言語ってやっぱり動的な型の言語の方がいいかもとか思ってしまいます。JavaのCollectionなんかObject型なので、ダウンキャストは必須ですしね。

プログラムの構成がクラスやオブジェクトを単位とするだけで,処理そのものは手続き型と大差ありません。

そのとおり!なにか特別なものと思われるのが困りますね。

コンピュータ好きの中には物事の裏側の仕組みに興味を持つタイプの人間が多いような気がします。子供のときに時計を分解して仕組みを確かめようとしたタイプですね。たいてい元に戻せなくなってしまうのですが。私もそうなんですが,そのようなタイプはコンピュータを使っていても,それを走らせるソフトウェアの仕組みに興味を感じて,ひいてはソフトウェアを作る側に回ることになります。

確かに小さい頃、よくものを壊して怒られていたっけ。ということはこれは運命なのか。

中には,それだけではあきたらず,ただソフトウェアを作るだけではなく,ソフトウェアを作るためのソフトウェア(プログラミング・ツールやライブラリなど)に手を染めたりと,どんどん仕組みの奥底の方に潜っていく人たちがいます。そういう人たちはどんどん潜っていって自分のバランスのちょうどいいところで留まるんですが,私の見るところ,その究極の行き先はハードウェアかOSか,プログラミング言語のいずれかのようです。

これは京都の講演でも聴いたような気がします。そうかやはり基盤系にいきつくのかなぁ。って俺もなんか少し足を踏み出しそうなんだけれど。