このWIKIを編集するにはパスワード入力が必要です

認証パスワード
RSSフィード

Diaryまでの解消した問題

関数が複数のソースコードに散らばっていてわけがわかりません。プロトタイプ宣言も extern だったり、ソースコードの途中だったりとめちゃくちゃです。(少しはましになりましたが、あまり良くありません)

パステルステッチの正式な表記は「パステルステッチ」で、英語圏では pastel stitch です。patsch という表記は目立つところには使わないことにしようと思います。あと、最近ステッチは stetch ではなく stitch であることが判明しました。(patsch.h を pastel_stitch.h に改名して解決しました)

いままでプリミティブ演算 operation に入れられていたテキストと浮動小数点数を分離して、非局所制御を経由して使うようにします。プリミティブ演算は必須データ型だけにします。(この提案は部分的に採用されました。有理数と浮動小数点数の混合演算はプリミティブではサポートされません)

stdio.h と stdlib.h、場合によっては float.h とか limit.h あたりを patsch.h に入れてしまおうと思います。あと、今さらですが patsch.h は名前についての議論。(この提案は採用されました。ヘッダのファイル名は pastel_stitch.h, pastel_stitch_instruction.h, pastel_stitch_charactor.h になりました)

数値定数に非常に問題があります。(おそらく解決しました。convert 命令では16進数も使えます)

C の scanf 関数族において、浮動小数点数に対応する変換指定である f, e, g, E, a はすべて同じものだそうです。文字列から浮動小数点数への変換については、そもそも考える余地がありません。(convert 命令では指数部を表記できます)

レベル制の非局所制御を導入してすっかり気を良くしていましたが、手続きにレベル制をたぶん付けていません。(付けました。ついでに procedure 非局所制御ではタブーリストを使わなくなりました)

ドメイン分配がたしかおかしなことになっています。(直しました)

意外にもタブーリストが廃止されるかもしれません。なんかレベル制と相性が良くないのです。同一アドレスへのアドレス変換に起因する無限ループを検知しないこととの一貫性もあれだ。(タブーリストは廃止されません。-write 系列の from, content 引数でのみ使用されます)

手続き定義に when と level を入れるかどうか。level は必須ですが、when は、気が向いたらということで。(どちらも入れておきました。ついでに to 引数もあります。意味は直接目的語と同じ。object と to がどちらもある場合は to だけが有効です)

プログラムの名前は parp, pasco, patty になるかもしれません。推奨する拡張子は ast (abstract syntax tree) と ia (instruction array) になりそうです。(とりあえず現状の Makefile はそうなっています)

ファイル入出力を作り始めました。fprintf (ただし文字列のみ), fgetc, fgets, fopen, fclose の互換命令ができました。あとは fputc, ungetc, fseek, ftell, rewind を作ります。(作り終わりました)

非局所制御の引数で読み出し演算を使うと、とんでもなく遅くなる問題が、解決されたようで、一般的な場合にはだめです。(たぶん解決しています。それでも遅い気がしますが、そんなもんです)

さらに直接は関係ありませんが、有理数から分子と分母を取り出すものを作ります。(作りました)

もうそろそろファイル入出力を作っていいころかもしれません。とりあえず最低限のことができればいいです。(最低限のことはできます。戻り値とエラーコードは捨ててます)

紆余曲折を経て、[operation: operator () left () right ()] の人は [multiply operation: left () right ()] の形式にしたいです。(だめです)

意外と難しい、コマンドライン引数と環境変数をなんとかします。(簡単でした)

手続き定義 (procedure ブロック) は、読み出し演算で解決するのではなく、実行開始時にテーブルに登録します。むかし単独データに手続き型を入れようとしていたときに同じことを考えていましたね。登録アドレスの計算には、すべての非局所制御と、メインルーチンのコンテキスト、それに、先行して定義されている手続きを使用できます。(実現しました)

ローカル化継承は、#offsetコンテキストが指すベクトルではなく、サブルーチンの起動時に作成される無名ベクトルに対して起こります。そのほうが、コンテキストホルダーとローカル化ベクトルとの対応が明確になるからです。さらに、実行中のサブルーチンおよびその(再帰的な)親ルーチンでなくても、ローカル化継承が発生するようにします。(だいたいこんな感じになりました)

内部的には、非局所制御の対象となるベクトルの各項を見て、係数が 1 かつ基底がローカル化オフセットであるならばローカル化継承を行います。ただし、この条件にあてはまる項が複数ある場合には、曖昧であるとみなし、ローカル化継承を行いません。基底ベクトルの番号表には、ローカル化ベクトルの参照カウンタのほか、親ルーチンのローカル化ベクトルへの参照を保存します。(あまり採用されませんでした)

無名ベクトルの制御に使う命令が gismo, forget, hold, free, static hold と大増殖しています。最後の static hold は機能の取捨選択に載せておきます。サブルーチンコンテキストのローカル化ベクトルの機構は内部的にこれらを利用していますが、プリミティブ演算としては実装されていません。(gismo, orget, remember, free そして hold になりました)

forget buffer の要求は「記憶領域解放のあと基底番号解放」の順で、これらを別個に要求してはいけません。現状ではそうなっているようです。ついでに、forget buffer の解決を open sequence の最後に入れたいです。(この提案は実現しました)

有理数演算は、計算の途中での約分が徹底していない気がします。(たぶん治っています)

simplify rational に身も毛もよだつ大バグを見つけてしまいました。(たぶん治っています)

simplify domain もバグっていました。(たぶん治っています)

テキストの最後部に一致する検索を作ります。(作りました)


  • 最終更新:2008-12-29 21:43:06