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でもいいですけど、
ここにコメントで書きなぐってもらっても構いません。
ただし開発時間があまりとれなくなったため、対応に時間がかかるとは思います。