解消した問題(Bakeryまで)
バグではありませんが、アンカー・インストラクションを実行しようとすると何が起きるのか不明です。正しい仕様は「何もしない」もしくは「アンカーが正しいかどうか確認する」くらいでしょうか。(この問題は発展的に解消しました。読み込み時ではなく実行時にアンカーを設定します)
文字の安全性についての判定は「テキスト文字」と「名前文字」という2種類のみをすべてのプログラムで共有します。その他は各プログラムに任せます。0 文字の名前およびテキストは許すべきではないですが、まだ着手していません。(この提案は実現しました。ディクションと load.cpp は 0 文字の名前およびテキストをはじきます。なお、charactor_for 関数族は文字の安全性を確認するため だ け に使うべきで、文字のクラスの分類に使ってはいけません。なぜなら、不正な文字を入力するとうっとうしいエラーメッセージを吐くからです。)
いろいろ考えた結果、静的環境はスタティック変数としてプログラムに1個だけ存在することにします。動的環境はプログラムへのポインタを(さしあたって)1個だけ持ちます。(この提案は実現しました。construct_dynamic_environment, construct_static_environment, virtual_machine, resume のインターフェイスが簡単になりました。ついでに、これらの extern プロトタイプを patsch.h に入れておきました。)
ターシャリーで前置詞形引数と直接目的語を混ぜられるようにします。(この提案は棄却されました)
オブジェクトコードの推奨する拡張子は elst です。(この提案はおそらく採用されません)
プリミティブ演算を1個ずつ追加する関数を作ります。基底言語が C であるとして、関数へのポインタをとります。(この提案は実現しました。construct_false を書かなくて済むことが多くなりました)
アドレス変換の結果がベクトルでなくなったときがまずいようです。正しい仕様は、アドレス変換イメージをもとに戻して続行、です。現状ではすべての読み出し演算を破壊して phantom を出します。(この問題は解消しました。アドレス変換を行う非局所制御でアドレスイメージがベクトルでなくなりそうなときには、その非局所制御を無視します)
SINGULAR_SET_I という名前が無限集合のように誤解されそうですが、これは集合がクラス I, II, III に分類される予定だったころの名残です。そのうち置換します。(この問題は解消しました。機械的な置換でうまくいきます)
テキストに対する演算のうち、基底言語Cに依存しない部分を決めておきます。もっとも、C以外の基底言語で実装する予定はほとんどありません。現時点で、結合、先頭削り、同一性、先頭からの包含が存在します。ほかに「検索分割」という演算を作ります。これは、テキストからテキストを検索して、一致した場所よりも前の部分を返すものです。先頭でいきなり見つかったときは空テキスト、見つからなかったときとめちゃくちゃなときは false を返します。(この提案は実現しました。strstrよりもむしろstrncpyにしてやられました。終端のヌル文字をつけてくれません)
ターシャリーが生成する operation 文は制御構文にします。そのため非局所制御による制御ができなくなります。がんばれば and と or を左辺だけ見てジャンプにできます。(この提案は発展的に解消してしまいました)
非局所制御に from と content を同時に与えたときの動作が不明です。そんなものに正しい動作などない! と言ってしまえばそれまでですが。(これらを同時に指定したときは、警告を出した上で content だけが有効になります)
detect type 命令のかわりに、相当する2項演算子を導入します。名前は未定ですが、組版ではイプシロンのような見た目になります。(この提案は実現しました)
テキストは積集合に相当する演算が実装されていないようです。別にしなくてもいいと思います。あと、積集合は ^intersection になるのでしょうか。現状は ^ins です。(思えば長い道のりでしたが、^intersection に落ち着きました)
lessthan と lessequal でテキストを辞書式に比較していることを思い出しました。(そうみたいですね)
- 最終更新:2008-08-05 22:12:40
