とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

プログラム言語を考える (3)

「ハード」を弄るためにコードを書くわけだが,「ハード」を細分化して,そのハードを弄るためにすでに使われている言語を挙げてみよう。

  • CPU
  • メモリ
  • 他のシステム・ソフトウェア
  • ディスプレイなどの周辺機器。本来のハードウェア
  • 人間

CPU

メモリ

ソフトウェア

他言語で書かれたライブラリを呼び出せたり,OS/VM/FrameworkなどのAPIを呼べるような言語すべて。

本来のハードウェア

CPUとかメモリとの境界線が曖昧だが。

人間

言語そのものが人間の知的好奇心を満たすものが挙げられる。

まとめる努力の痕跡

上に挙げた言語は結果として人間を幸せにするものだ。そして,結果を出すためのレイヤーがあり,各レイヤーにあった(もっとも人間を幸せにする)言語が使われていると考えられる。
であれば,最強の言語を考えるときできるだけ多くの人が幸せになる必要があるので,うまく幅広いレイヤーをサポートできれば良いのではないだろうか?事実,問題が広く知られているC言語はその点で成功しているからこそ今でも現役であり続けている。
層から外れたレイヤー(奇妙な表現だ)に属する,人間を直接弄る言語がある。これはちょっと特殊なケースだが,楽<知的好奇心 が成り立つために,楽を意図的に捨てている言語である。これらの言語も幸せを生み出すが,言語を使用した人以外の幸せは生み出さない。生み出せないわけではないが,楽<知的好奇心 の式が崩れる事が分かっているから,ほとんどの人は生み出さない。最強の言語を考えるとき,できるだけ多くの人が幸せになる必要があるので人間を直接叩く言語の形を取っている必要はない。
もちろん,幸せが大きくなるのであればそのタイプもおもしろい。私は最近 Scheme を始めたが,非常に新鮮だ。関数型言語である故に幸せになれるのかもしれないが,あの括弧の並びは知的好奇心をくすぐる。結果も出せる(幅広いハードをたたける)し,プログラマ自身の好奇心も満たす(人間というハードもたたける)。すばらしい。最強の言語にはこういう特徴があってもいいのではないか。
ああ,そうだ,もう一つのレイヤーについても触れなければ。CPUを直接いじれる実用的な言語はアセンブリしかないって事だ。ってことは,最強の言語はアセンブリの範疇もサポートする必要がありそうだ。しかし,CPUにはたくさん種類があるし,一般化できるのだろうか? 某Knuth先生のMIXはどうなんだ?最小のCPUの命令セットを考えればいいのか?よく分からない。めんどくさいから,今のところ処理系定義のインラインアセンブラを持たせればいいかな。投げやりだが。