Nptで把握している問題点
いま現在問題と思っていることを列挙します。
書いておかないと本人が忘れるので。
これは、問題と確定しているわけではなく、
問題があるかどうか調査することから必要があるものです。
標準入出力のリダイレクトが非常に遅いのはなぜか調べる。 例えばこんな感じ
$ npt --script file.lisp > zzz
。 標準I/Oはキャッシュオフにしているせいだと思うがどうすればいいか考える。defstruct
で:type vector
にしたacessor
関数が、LISPTYPE_VECTOR
のみ対応しているが、LISPTYPE_ARRAY
に対応させる必要がある。defstruct
で:type
がlist
,vector
のとき、slot-makunbound
をすると、 オブジェクトの内容がunbound
になってしまうのでそれをやめる。defstruct
で:type vector
がspecialized arrayなら生成するオブジェクトも specializedにするべきなのでは?deftype
で標準のtype
を設定したらエラーになるか調べる。 例えば(deftype integer ...)
でエラーになるべきでは?deftype
で指定したsymbolがreadonlyの場合はエラーになるか調べる。 例えば(deftype :hello ...)
はエラーになるべきでは?その場合
car
とかいう名前のdeftype
はどうなる?Common Lispパッケージのsymbolをreadonlyにする必要がある。 もうなっているかも?
type-function
の第三引数のテストケースを追加。 型(function 第1 第2 第3)
の第三引数は内部用で表に出てこない。typep
でsatisfies
の実行割り込みreturn 1
に対応させる。 つまりsatisfies
の関数内でreturn-from
やthrow
が発生したときを考慮する。subtypep
でsatisfies
の実行割り込みreturn 1
に対応させる。 つまりsatisfies
の関数内でreturn-from
やthrow
が発生したときを考慮する。 でもこれは無いかも。fmte
,fmtw
を実行割り込みreturn 1
に対応させる。 つまり関数内でreturn-from
やthrow
が発生したときを考慮する。RefLispDecl
,GetLispDecl
を使用しているコードでNOTが考慮されているか調べる。 これなんだったか忘れたので調べなおす。strarray
のcharactertype
はおかしいかもしれない。strarray-base-p
関数を使うこと。 これなんだったか忘れたので調べなおす。subtypep
の引数にclos
を指定すると、not
で正しく出力されない。 これは規格自体に問題がある可能性があるため、他の処理系と合わせる。 現在、TODO
と書かれているはず。:allow-other-keys
が対応していない。
全体的に見直す必要がある、とても作業量が多くなるかも。 引数が(&rest args &key)
の場合、&allow-other-keys
が自動的に付与されるべきなのか?&key &allow-other-keys
のとき、key-value
のペアのチェックが行われていない? 一般の関数でも:allow-other-keys t
が使用できる(★&ではなく:)。 現時点だと:allow-other-keys
がt
ならたぶんeval
時点でwarning
が起こるはず。fmakunbound
で型も削除function
オブジェクトのname
にあるcallname
がsetf
になっていない。defun
で型を登録するdefun
の型をもとにeval
情報に型を登録function-lambda-expression
のためにlambda-expression
をfunction
に登録する。fasl
再作成fixnum-local
オブジェクトをcache
できるか考えるcode_macro_function
にname
を渡して処理する。 戻り値とdocumentation
がどうなるかを調査する。macro-lambda
のallow-other-keys
判定は必要だが、ordinary-lambda
には不要。 ただし、:allow-other-keys
の実装によっていろいろ変わるかも。macro
の型チェックをどうするか調査。 現状、他の処理系では型チェックしているが、npt
では一切していない。common-arrays
でtype
チェックしているにもかかわらず、 手動で型のチェックをしている所が結構あるので削除する。(integer 0 *)
をSIZE_MAX
にすることでgetindex_integer
を簡略化できる。型
index
やSIZE_MAX
はfixnum
にしてしまった方が早くてよいのでは?adjust-array
の試験を追加する。普段は
GetArrayXX
ではなくgetarray
を使うように変更、type-array
など。function
型チェックの都合上type-or
,and
,not
のasterisk
を許容したが、typep
コマンドでちゃんとエラーになることを確認するstart-end
のend
は標準でUnbound
ではなくNil
が正解。sxhash
はもう少しちゃんとできないか考える。open
は8bit以外のbinary
入出力をサポート、(unsigned-byte 16)
など。:direction :io
でread
->write
が切り替わるときにunread
を破棄する:direction :io
をもう少し何とかする。ANSI-C
モードのopen
をもう少し何とかする。全ての
stream
にてclose
された状態を考慮していないので見直す。Uniocdeのencodeをもう少し何とかする。 例えばBOMの扱いなど、Lispの
strjis
モジュール開発でわかったことを反映する。浮動小数点の出力がおかしい
most-positive-short-float
。 これなんだったか覚えてないので調べる。closの情報取得関数にデバッグの型チェックを入れる
コードに
TODO
と埋め込まれている部分が結構あるので片づける。*LOAD-TRUENAME*
で絶対パス名を入れる必要があるか考える(snmsts様、ご協力ありがとうございました)loop
マクロでtermination-testあたりがtype-spec
を無視しているので見直す。top-levelで
setf
によりlogical-pathname
を設定したら認識しなかったが、 たぶん間違いなので調査すること。
結構ありますね。
そしてもっとあると思います。
もし何かバグやら問題を見つけましたら、githubのissuesでもいいですけど、
ここにコメントで書きなぐってもらっても構いません。
ただし開発時間があまりとれなくなったため、対応に時間がかかるとは思います。