配列・STMのくだりを見ているときに思ったがSQLが配列・アドレスを追放しようとしたことを思い出した。なんだろう、並の言語が、後から解決しようとしている問題を先に解決する代わりに、並みの言語が最初にする課題を、よい言語は制限された手段で解決することで、自由を手に入れようとするトレードオフが見える。言語を設計するっていうときのトレードオフ。
guidoがpythonでした、「indentが文法の一部」というcoding styleに関する判断はすばらしかった。使えるコーディングスタイルは制限されたが、破滅的なコーディングスタイルを撃滅できたし、コーディングスタイルに関する宗教論争にさかれるエネルギーを節約できて、ライブラリは誰でも読めるものになったことで、創造的に時間を使う自由を得た。
***
phpヤバス
全力で逃げよう。phpをつかった何かは使わないようにしよう。危険性は、読みにくいコードをかけるperlの比ではない。しかしなんであとからあとから人を陥れるための言語が出てくるのかね?
真新しい紙を触っていると手を切ることがあるが、ここまでくると割れたガラスの破片の上で裸でのた打ち回っているような感じだな。
おそらく社会における知識の「劣化コピー現象」だな。わけもわからずまねしたが、わけわからず不完全にまねしたので、出来上がったものはひどいものだ。
****
コードは短いほどいい。Forthがいいといってるのではない。そういう議論じゃなくて
svgfigの開発史をみてみると
Realizing that simplicity is key, I re-wrote everything again, relying on SVG to encode the graphics (4000 lines). In the process of development, this SVG-based version became a little messy and overstructured, so I purified it, maintaining functionality. The present version, renamed SVGFig, is only 2300 lines.
とのこと。
シンプルに短くかくためには、同じことを2書くようなことはできない。字面での圧縮ではなく概念での圧縮が必要になる。概念での圧縮を無理なくするためには、概念の階層が必要で、階層は仕様(抽象化)・実装のペアの積み重ねになる。また操作自体への操作が必要になる。
用途に適したミニ言語をつくる作業だな。すくなくとも特定のジャンルではそれ専用の「語彙」がとくに発達している。たとえば刀鍛冶は加熱された鉄の色を表現する語彙が豊富だ。ということは、プログラミング言語にはプログラマが抽象度の高い記述に必要な語彙を作り出す作業をうまく助けることができる必要がある。言い換えると「頭のいい人は、難しい概念も簡単に説明できるはずだ」というようなことになってくる。よい実装は、必然的に平明になるはずだ。
これを何とかするには、lispのマクロが特にそうだろうが、一般に言うと名前空間のようなものとと関数を引数に取れる関数の機構が必要なのではないかと思う。
変数名は、計算の立場からは自由に置き換えられる。(α-変換)人間は名前に現実的世界の意味を見出す。(Obfuscated code、記憶という環境にbindされるともいえる。記憶にないと、外のスコープであるgoogleに聞きに行く、ちなみに情報理論じゃなくて計算論ね。)
プログラムとは機能をもった文章なので、作成過程で推敲が必須で、それを機能面でテストしながら進めていきましょうよってのがunittestありのtest drivenで、そのような推敲をリファクタリングと呼んでいると思っているのだが。
常に一般化される方向に書き直されるかというとそうでもなくて、いいたいことがあって文章を書くわけだから、必要以上の一般論に触れる必要もないわけで、これはコードに関しても同じで、必要以上の一般化も不要である。(YAGNI(You Aren't Going to Need It=それは将来必要にならない)の原則)
RibyOnRails(もう古いか?)でconventionのほうがconfigurationにまさるといっていたが、conventionとかconfigurationって外部の値をプログラムに取り込む、プログラムの変数に値(意味)を束縛することにほかならないからなぁ。
2 件のコメント:
http://www.infoq.com/jp/news/2008/03/powerful-programming-languages
http://www.infoq.com/jp/news/2007/12/does-lines-of-code-kill
コメントを投稿