KH-FDPL に関するメモ-0008
KH-FDPLの特徴(4) - 自己拡張可能型の文法
- (4-1) たとえばC言語で、Pythonみたいにインデントでループ範囲を指定できたらいいのにと誰かが考えたとします。もしくは反対にPythonで、インデントによらず中カッコでループ範囲が指定できたらいいのにと思ったとしましょう。そんなときに、オリジナルの文法を考えて、そのオリジナルのソースからC言語のソースを生成するソースコンバータ(コンパイラ?)を作るという方法があります。要するにいきなりアセンブラや機械語を出力するのではなくて、新言語を既知の言語に変換するだけでいいのです。
- この方法は、オリジナルのプログラミング言語を一から作るよりもずっと易しいです。
- この方法をKH-FDPLでは全面的に支援することにしました。つまり文法をどんどん改良していけるし、既存文法との併用も可能にしています。いわば、KH-FDPLはスクリプト言語を大量生産できる基盤になることを目指していて、とりあえず提供される基本の言語仕様についてはかなり気が抜けた便利ではない内容になっています。使いやすくなくても、とにかく一通りの機能があればよい、という感じです。
- この方式だと、実行時エラーの扱いが少し難しくなります。コンパイル時エラーならいいのです、どこが原因かを簡単に示せるので。しかし実行時エラーになるとそれが元のソースのどこに対応しているのかが分かりにくくなるのが普通です。・・・KH-FDPLではこの問題を解決するために、支援する機能を持っています。
- プログラミング言語は、もっとたくさん生まれるべきですし、もっとたくさん滅びるべきです。競争や淘汰が行われないといいものは残らないと思います。そして本当に良い言語仕様が生き残ってきたら、そのときにはそれをネイティブに実行できる高速な言語処理系を作ればいいいでしょう。それより前にがんばってもきっと空回りです。
- KH-FDPLは高速ではありませんし、メモリ効率もよくはありません。しかし文法拡張が多層になっても、あまり遅くならない仕組みを持っています(後述)。つまりこれは中速な言語処理系なのです。
- (4-2) KH-FDPLはcompile命令を持ちます。これはいわゆるeval命令に似ていますが、違うのは最下層処理系のバイトコードまでは変換するけれど、実行まではやらない、というところです。それを実行するのはexecute命令です。
- (4-3) 一つのソース内で言語を切り替えて使うことはできるでしょうか。それはもちろんできると思います。イメージとしてはC言語のインラインアセンブラみたいな感じです。
- 仮にもしこの機能が使いにくければ、使いやすくなるようなプログラミング言語を作ってしまえば解決です。
- もちろんcompile関数を記述する際にも複数の言語を切り替えて使えます。
- (4-4) KH-FDPLはcompile命令やexecute命令を持つので、「プログラムがプログラムを作る」みたいなことが簡単にできます。
- 実行中のプログラムが、自分を構成する関数を再定義してしまうことも可能です。つまり自己書き換えみたいなこともできるわけです。これは何の役にも立たないかもしれませんが、もしかしたら新しいプログラミングテクニックが生まれるかもしれません。
こめんと欄
|