Entry

プログラミング言語の意味論とコンピュータの制御に直接の関係はないという話

2011年10月22日

ここ数年,プログラムのデバッグをもっぱらアセンブリでするようになったからかもしれないけれど,この頃,プログラミング言語のセマンティックスについて,とんと無頓着になっている感じがしています。アセンブリにしてしまえば,どんなプログラムも等価なわけで,そんなに大騒ぎするような話でもねいな,とかつらつら。

ここでセマンティックスとゆのは「意味論」のこと。例えば,数値1と数値2を足し合わせる二項の加算命令は,大抵のプログラミング言語で,1 + 2 と書くけれど,二項の加算演算子を文字 '+' で表現し,足される数と足す数の間にこの演算子を置く「表現」は,人間が決めたものであってコンピュータで決められた演算表現ではありません。つまるところ,加算命令をどのような表現で「意味付ける」かは,ほとんど言語設計者の設計思想に基づいているわけで,論理必然的なものでもコンピュータアーキテクチャ上の制約でもない。

同様に,クラス概念や高階関数の概念をコンピュータの制御に導入することも,それ自体論理的には目的的(悪く言えば恣意的)な飛躍がある。プログラミング言語の主たる目的がコンピュータを制御することにあるのだとすると,それに必要なセマンティックスは CPU に対して直接発行される機械語命令(※アセンブリでもない)に限られるわけで,それ以外のセマンティックスは,「コンピュータの制御」といった目的に対して補助的な役割しか果たしていないことになります。

で,最近思っているんだけれども,なんつかプログラミング言語のセマンティックスについての議論とゆもんは,何を議論の基盤にしているんだろうと思うところがあります。例えば,先日発効した C++11 の左辺値参照や関数オブジェクトのような概念は,もっぱらプログラマの都合に基づくものであって,これまであった CPU の命令体系やアーキテクチャそれ自体を変えるものではない。

もちろん,高級言語は概してそゆもんだから,それはそれでいいんだけれども,それならば,彼らは議論の良し悪しを何に基づいて判断しているのだろう。彼らが「この言語は良い(あるいは悪い)」と発言するとき,それは何に基づいているのか。この点がとても分からない。

あたしはプログラムで飯を食っているので,セマンティックスの目的論については,どうしても「生産性」や「パフォーマンス」それに「保守性」といった点を重視する傾向があります。特に,「生産性」と「保守性」は重要です。いくら数学的に筋の通る「美しい」セマンティックスだったとしても,生産性が落ちる言語や保守しづらい言語は「ダメな言語」という位置づけになってしまう。反対に,学生さんは,数学的な考え方とシームレスに意味がつながるような言語の方が理解しやすいのかもしれない。単に初めて覚えた言語だから,それしかないと思っているだけなのかもしれない。

つまり,言語の良し悪しに関する判断は,ほとんど開発者の立ち位置と目的に基づいて判断しているのではないか,と。これは当たっていると思う。ま,ちょっと考えれば当たり前の話なんだけれども。

問題は,そうであることについて,発言者がどれだけ自覚的かということです。プロではない学生さんが求める言語と,学生ではなく職業プログラマが求める言語,それにただ趣味で書いている人が求める言語は異なってしかるべきだし,実際に(観察する限り)異なっています。そゆところの折り合いは,純粋に人間系の話なので,理論でどうとかとかいった話ではないのだと思う。

開発言語の良し悪しについて,開発者は不毛すぎるとも言える時間を費やしてきたと思っています。少なくとも,この手の話に参加する向きは,自分の立ち位置について冷静になって考えて,立場を相対化する必要があるんじゃないだろうか。

ま,長々と書いたけれども,結論はそれだけ。

そういえば,どうでもいいけれど,スクリプト言語の場合は,処理系が落ちたときのために,Windows OS 系の処理系に対しては PDB ファイル(デバッグ情報ファイル。Python のデバッガではない)くらいは提供すべきだと思う。つか,そうでないと危なくて使えない(お客さんに処理系の不具合で……なんて説明できないので)。Python は PDB ファイルを提供してくれてるので,自力で処理系をデバッグできるけれども,そうでないとこのは,自分でソースからビルドして PDB ファイルを作る必要がある。自分で世代管理もしなくちゃいけないし,これは大変めんどくさい。

C# は WinDbg が使えるけれど,Java はどうだったっけな。結局,そゆとこのサービスが行き届いているかが,判断の基準になってたりして。職業上のオッサン的な選択としては。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN