ネタつつき27-言語仕様拡張の難しさ
一つ目は実装について書きます。普通の人の感覚では実装は関係ないと考えるでしょう。しかし、実際にコンパイラを作ってみるとわかりますが、言語に構文を追加すると思わぬ問題が生じます。例えば、演算子を言語仕様に追加したとします。この時よく考えないと、想像もつかないほどの問題が生じます。演算子を追加すると言う事は、過去のプログラムの演算結果が変化してはならないことを意味します。そうしないと、再コンパイル時にテスト済みのソフトがバグってしまいます!嗚呼、何ということでしょう!匠に相談しなければなりません。
二つ目の要素は時間です。言語仕様は時間が経てば経つほど、過去のしがらみが発生します。何故ならば、仕様策定後に世界中でソフトウェアが作られているからです。それら既存のプログラムに対する重大な責任がありますので、過去のプログラムが動かなくなるようなものは仕様として追加できません!
最後の要素は環境です。これはOSやプロセッサをイメージしてもらえばいいかと思います。今のところ、SQLの様にレベルわけされている言語もありますが、基本的に多くの言語は環境を特定していません。という事は、PC用のOSも、パームトップ型のプロセッサも、さらには医療用ナノマシン用にもその言語は使えなくてはなりません。言語仕様に関わる人は大変ですね。
これはあくまでも大まかな問題です。もっとマイナーなAPIやABIに関わる問題もありますし、ヒューマン的な問題もあります。この互換性的な問題の影響は非常に大きく、多くの人が使っているx86の仕様が複雑なのもそれが原因です。x86は評判どおり汚い部分もありますので、口が悪い人達は「知恵遅れまで継承している」なんて酷評されています。しかし、プロセッサの仕様を変えてしまえばOSすらも動かなくなる事を考えると私はIntelを責められません。
このように言語一つ拡張するのも大変ですが現実はどうでしょうか?「最近の若い者は言葉使いがなっとらん!」と古代エジプト時代から言われておりますが、人間同士は何とか通じ合っています。その差は一体何なのでしょう?私が思うに抽象度が影響しているのではないでしょうか?ハードウェアとソフトウェアが変更に弱いのは予め動的なものとして考えられていないのが原因だと思います。言語は決して静的なものではありません。使えば使うほど進化していきます。これを考慮して、ビャーネ氏は出来るだけライブラリ(語彙)を追加する方向を勧めているのでしょう。過去の情報処理技術を考えるとそれは合理的な考え方です。しかし今のままでは不便な点が数多く存在しますので、情報処理技術を愛し無限の進化を求める私としては不満です。
ではどうすればいいのかと申しますと、これはあくまでも未熟な私の個人的見解なのですが、言語のライフサイクルそのものを一つの情報集合として考え直すしかないでしょう。これは複雑な問題であり、昨日今日解決できる問題はありません。言語策定プロセスそのものを分析してプログラミングするべき時期に来ているのではないでしょうか?