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

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

パステルステッチ

パステルステッチの仕様です。気が向いたときに書きます。実装は思いのほか進んでいます。

従属ページ


  1. アドレス退避(この提案は発展的に解消しました)
  2. オブジェクトコードの書式]]
  3. プログラムの役割分担
  4. 文字の分類(内容が古いです)
  5. グローバル変数の隠匿
  6. 解消した問題(2008年5月3日版まで)
  7. 解消した問題(Amenityまで)
  8. [[解消した問題(Bakeryまで)

開発の方針


そろそろ言語仕様が確定するんじゃないかと思い始めてからが長いです。

作業の現状と予定


非局所制御のメモ化の方式が全面改訂されました。それから長らくリリースされませんでした。

バグと問題点


無限集合の演算にメモリリークがあります。

あちこちで int 型がオーバーフローする危険があります。単純な算術演算であれば知らないふりをしていればいいのですが、メモリ管理とかかわってくると超危険です。現状では、ゼロクリア、インクリメント、realloc タイプのアルゴリズムについてはオーバーフロー検出を組み込んでいます。ベクトル演算はややこしいので後回し。strlen を使っている部分もちょっと不明です。

不正なインストラクション・アレイを与えると、いとも簡単にセグルトします。動的環境を構成するたくさんのスタック類が NULL である場合のチェックをまじめにやっていません。チェックをしていてもエラーを出していない場所があります。

サンプルプログラムの [cota] にコンティニュエーションが入っていない気がします。

特設:プリプロセッサ強化コーナー


statement_block の仕様がいろいろとだめです。

せっかく付けたアポストロフィエスケープがあまり生かされていません。

is_close 関数で eof を判定しているのが謎です。

プリプロセッサに微妙なバグを見つけました。倒置テキストが存在する状態で、引数に読み出し演算子を使うと、内側の読み出し演算子の方に倒置テキストを挿入しようとして落ちます。

スクウェアブラケットを表す特殊テキスト ^{ と ^} は廃止されます。1文字テキスト _[ と _] を使ってください。この他に特殊テキストは ^! と ^& がありますね。

将来的には、領域開始語、領域終了語(end)、そして疑似領域語(codeとclose)は代用表記になるかもしれません。ハット^で始まるトークンです。あと間接領域開始語 ^begin も必要ですね。

機能の取捨選択


objectification 割り込みは廃止しようかと思います。

EXIT インストラクションは exit^(system) プリミティブ演算があるときそれに従います。なければ C の exit 関数を呼びます。

「基底」を表す名前を募集中です。

いろいろあって、コンパイラを仮想マシンと同じ実行バイナリに入れたいです。

手続きを登録する過程で非局所制御を禁止すべきかどうか議論です。

convert演算が二項演算子になるかもしれません。

名前に数字を入れるのを禁止し、数値定数を中括弧 {} で囲むようになるかもしれません。

読み出し演算のメモ化は常に有効で、write 命令を使うとクリアされるようにしようかと思います。もしくは indeirect 構造体が 1 個でもあれば有効?

難しくない機能についてのメモ


ファイル入出力そのものは行いませんが、バイナリファイルを扱うための命令として、type of rational と type of float をオクテットに分けてアクセスするものを作ります。オクテットは分母が1、分子が0からの有理数です。

ベクトルの第1項の基底を長さ1のベクトルとして取り出す命令を作ります。どの項が「第1項」であるかは不確定ですが、ループを組めばすべての項を取り出すことができます。これを使えばベクトルのテキスト化をパステルステッチのプログラムとして組むことができます。ええっと、第1項の基底番号から数値や名前(あれば)を取り出す命令も必要ですね。

発展的な機能についてのメモ


記憶装置を直接読む命令 read storage の発展として、プリミティブ演算を直接実行する命令を作ります。述語部は引数 verb です。同様に手続きを実行するものもできて、名前はそれぞれ execute primitive と execute procedure です。

コンティニュエーションを使ってエラーを捕捉する機構を作ります。もっとも、あまり需要があるとも思えないので、実装するのは遠い将来です。まずは仕様書に記載するのを先にしましょう。

プログラムを実行中にロードできたら楽しいです。後ろに追加するのだったら平気かも。ただし何に使うのか自分でもわかりません。

テキストは有理数の配列です。標準では分子の下位8ビットだけを富豪的に使います。UCS-4の31ビット空間にも使うことができます。

underwrite系列のコンパイルを整理したいです。具体的には、メモ化の開始と終了を一度で済むようにしたい。

[binary selection: if () then () else ()] は、コンパイル時に展開されるおそらく唯一の(独立した文ではない)読み出し演算です。もしかしたら ^and や ^or がこれに展開されるかもとれません。


  • 最終更新:2009-05-27 12:36:31