色々知らなかった事や気になった事

k.inabaさんのd.y.d経由で以下のサイトを読んで色々知らなかったことをメモ。

http://alohakun.blog7.fc2.com/blog-entry-731.html

  • Haskellなどの純粋関数型言語は、オブジェクトの値を変更できないので、別の状態を表すにはオブジェクトを新たに作るしかない。
  • Schemeなどの継続の機能で全ての制御構造を表現可能(try〜catchが可能というのは知っていた)。


あと、気になったのが、

んでまぁ,一般にうれしいのは,最初のプロトタイプは人間が不必要なことまで考えなくても動いてくれて,後々必要になってきたらボトルネック部分に情報を追加してあげると,さらに最適なコードが出る,ということをインクリメンタルにやっていけるようなモデルだと思う.

というのは具体的にイメージが沸かないが、どういうことだろう?

C#IronPythonJavaJRubyなど同一言語で組み合わせるとか、.NETやCOMなどのライブラリの共通化や、.NETで言うところのアセンブリ同士をつなぐというのはうまくいくと思うが、一般的に言語を組み合わせるのは難しいような気がする。ライブラリレベルの機能の置き換えや、言語を組み合わせるということではなく、言語のコアの機能(例えばGCなど)を自分で作成したものと置き換える機能があるというイメージだろうか?


私は、プログラミングの品質を上げるための問題を以下の2つに切り分けできると思う。

  • パフォーマンスを良くする
  • 保守性を上げる(その内の一つとして非本質的な部分を減らす)


2つ目の非本質的な部分とは、例えばC++のメモリ管理や複雑な構文などである。私は、1つ目のパフォーマンスに関しては楽観的である。つまり、スクリプトならJIT技術の進歩やハードウェアのスペックの向上が解決してくれる。

しかし、現実的にはパフォーマンスにも目をつむれないのが現状である。上記の議論は、それをいかに克服するかということだと思うが、私は良く言われているような高級言語と低級言語を組み合わせるという考え方は保守性を著しく下げるのであまり好きではない。パフォーマンスは奥が深く難しいが、私はどちらかと言えば保守性を上げることに興味がある。