プログラムの構文木を直接入力する総合開発環境

http://www.programmers-paradise.com/tdiary/?date=20060218#p01より。
どのプログラミング言語でもソースコードコンパイルしちゃえば構文木になるんだから、そもそも構文木を直接入力しようよ、それでもって、構文木の表示形式をユーザが選択できるGUIつけちゃえば入力もしやすくて良いんじゃないの?というお話。

おおむね「それってなんてLisp?」という感想。既存のLisp処理系にGUIがあるかどうかは知らない。便利かな。便利かもしれないな。でも、何箇所か違和感がある。

構文として正しい入力しか行えないため、コンパイルエラーが発生しない。

入力の利便性を取るならエラーは実行時に先送りされるだけだろうし、「構文」の段階で、できる限りエラー出さないように入力(構文木)を制約するなら、かなり入力が不便になるだろう。
コンパイラ構文解析するだけじゃないよね。教科書的には、コンパイラには構文解析の後に、意味解析というフェイズがあって、正しい構文木の意味的な解析を行う。典型的なのは型チェック。つまり普通の処理系*1だと、構文木が正しくてもコンパイルエラーにならないことは保証されてない。
ここでいってる「構文」と「コンパイルエラー」の範囲がどこまで含むのかわかんないので、文法規則しか検査しないコンパイラ、とか、意味情報も含んだ構文木、なんてのが想定されていたら書かれてる通りにはなると思う。でも、前者はエラーを無くしてるわけじゃなくて、実行時まで先送りしてるだけだし、後者は、構文で判定したいエラーの範囲を広げれば広げるほど、構文木に含まれる意味情報が増え、構文の定義(制約)自体がどんどんややこしくなっていく。
「エラーを実行時まで先送り」ってのは、一般的に「コンパイル不要」と呼ばれる動的型付きの言語やインタプリタによるある風景なので、そういうのをイメージしてるのかな。それと、意味まで含んだ構文木ってのは「スキーマに妥当なXML文書」に近いのかなあ。でも最初から、妥当なXML文書しか入力できないエディタ*2って使いにくいんだよね。
結局、構文木を入力として与えるとしても、「その構文木が妥当かどうか?」という判定をしなきゃいけないわけだし、それってほとんどコンパイルなんじゃないかなあ。入力の先に判定しちゃうのか、後に判定しちゃうのかの違いで。で個人的には、入力を途中で邪魔されて「それは駄目です」と言われるよりも、入力してから「ここがこう駄目です」とわかりやすく表示されるほうが良い気がする。

*1:特に静的型付けな言語

*2:その昔、IBMが妥当性にうるさいXMLエディタを出してた。プロトタイプみたいなおもちゃだったけど