npt
前回nptでDLLファイルを読み込む - nptclのブログの続きです。 前の投稿ではnptにDLLファイルを読み込ませましたが、 soファイルもやりたいな、ということでやりました。 個人的にはsoファイルの作成は初めてなので、 いろいろと勉強になりました。 1. nptの…
1. はじめに nptのWindows版で、DLLを読み込む機能を作りました。 FFIでは無いので注意。 npt用にDLLを作成すると読み込めるというものです。 【追記】soも作りました! nptでsoファイルを読み込む - nptclのブログ npt for Windowsは、なんとなくうまく動い…
以前の投稿でnpt-windowsのバイナリを配布しました。 nptのWindows版を公開します - nptclのブログ ウィルスというか、トロイの木馬報告もされました。 npt64.exeのウィルス検出について - nptclのブログ ここでは手動でnpt-windowsをコンパイルする方法につ…
Microsoft Defenderから脅威が検出されました。 でもトレンドマイクロのオンラインスキャンでは問題なし。 誤動作の可能性があるので報告します。 下記のファイルです。 64bit版実行ファイル https://nptcl.github.io/npt-windows/npt64.exe 検出内容 Trojan…
【注意】セキュリティの脅威が検出されましたのでご確認ください。 【注意】npt64.exeのウィルス検出について - nptclのブログ nptを、Windows上で使いやすいようにした実行ファイルです。 64bit版実行ファイル https://nptcl.github.io/npt-windows/npt64.e…
今まではブログにおいてました。 ANSI Common Lisp npt トップページ - nptclのブログ でもちゃんとバージョン管理したいと思っていましたので、 githubに移動することにしました。 移動先はこちら。 ★nptの日本語のドキュメント https://nptcl.github.io/np…
以前、readline / editlineの依存から脱出しようと、自前のプロンプトを作成しました。 その機能に、termeモジュールという名前を付けました。 何も考えずにnptをコンパイルすると標準で使えるようになっています。 どうやって実現したのかというと、端末をr…
ANSI Common Lispの関数仕様に対応するテストケースを一通り完成させました。 以前よりはだいぶましにはなりましたけど、まだバグはいっぱいありますね。 残念ながらこれ以上は開発に時間をかけていられません。 パソコンも半分壊れてて、nptをコンパイルす…
nptに色を付けてみました。 気分転換です。 なんかいいですね。 ただ色が付いただけでわくわくします。 本当は色はおまけでした。 そのうちeditline / readlineを廃止しようと思っており、 代わりとなるプロンプトモジュールを作成していたのですが、 せっか…
目次 はじめに 使い方 evalの場合 compile-fileの場合 make-load-formの実行 gensymを扱う makefileを使う 1. はじめに load-time-valueという機能を知っていますか? この機能の実装が死ぬほど面倒だったので、 ちゃんと記録に残そうという気持ちになりまし…
開発のメモです。 npt amalgamationとは、sqliteのamalgamationの考え方をまねて作ったものであり、 nptのソースを1つのファイルに結合するというものです。 現時点でnptのソースは770個くらいですが、amalgamationを使えば lisp.c lisp.h shell.c の3つにな…
Prologを使いたいのですがどうしたらいいのか。 ちょっと調べてみると、Common Lispで動作するPrologがあるらしく、 有名どころではPAIPROLOGというものがありました。 これはPAIPという有名な本に載っていたものなんだと思います。 自分は見たことが無いの…
nptでstring-streamのbyteバージョンを作りました。 Common Lispでは、文字列をストリームに対応させた input-stream, output-streamというものが存在しますが、 characterではなく(unsigned-byte 8)に対応したという話です。 あらかじめ言っておくと、npt以…
あまり考えたことが無かったのですけど、 Unicodeに対応している処理系だと、 symbolに日本語が使えます。 次のコードを例に挙げます。 (defun 何回か乗算する (回数 値) (let ((答え 1)) (dotimes (無視 回数 答え) (setq 答え (* 答え 値))))) (何回か乗算…
最近知ったのですが、lambda式はクロージャーが値を捕捉していない場合は 実行するたびにいちいち関数生成なんてしないで、 グローバルの関数を返却すればいいんだそうです。 どういうことかというと、例えば次の関数を考えてみます。 (defun aaa () (lambda…
少し前にnptを一通り完成させたと書きました。 現時点でバグは大量にあるだろうと思っていたのですが、 とりあえずConsesのテストケースを一通り実施したものの、 予想をはるかに上回り、大半がバグありという結果になりました。 ちょっとひどすぎる。 ほと…
getfはplistの値を操作するアクセス関数です。 取得する方の構文は、 (getf plist indicator &optional default) みたいな感じです。 設定の方はこんな感じ。 (setf (getf place indicator &optional default) new-value) 説明では、setfでgetfを使うときにd…
nptの使い方についてちゃんと書いていかないとなと思っていたのですが、 どうやって実現して行けばいいものやら悩んでいました。 あまりいい方法も思いつかないので、 本ブログ全体を説明書みたいにしていこうと思います。 まずnptのトップページが無いので…
下記に移動しました。 ★nptの日本語のドキュメント https://nptcl.github.io/npt-japanese/docs/npt/index.html https://nptcl.github.io/npt-japanese/md/npt/index.html https://github.com/nptcl/npt-japanese 英語版のドキュメントは今まで通り、nptにそ…
たまにはバカな投稿でもします。 今日はエイプリールフールじゃないんだぞ、ということでちゃんと開発はしますよ。 nptのソースコードを使って、あなただけのCommon Lispを作りましょう。 nptは名前が変更されることを前提として開発されています。 名前を表…
ようやくできた! やったー!! 長かった。 ひたすら長かった。 以前の投稿Npt Lispの紹介 - nptclのブログでは、 ANSI Common Lispの関数を全部実装できたら 不完全であっても強制的にv1.0.0にすると言いました。 ついにそのときがやって来ました。 今まで…
lexical変数の設計を色々やってみて、最終的に落ち着いたものについて話します。 たぶんこれが正解に近いのかと。 少しでも速度改善したいと、clispのdisassembleでも見てみようかと思ったときのことです。 速度測定によく使っていたmk.eastasian.lispのextr…
以前の結果はこれで、 $ time npt --script mk.eastasian.lisp real 0m57.098s user 0m56.853s sys 0m0.233s 今回の結果はこれ。 $ time npt --script mk.eastasian.lisp real 0m23.119s user 0m22.831s sys 0m0.283s 半分以上早くなっていますね。 わりとい…
前回の投稿では下記の通り、 悪い方向に26倍の速度差を叩き出しました。 ・clisp real 0m2.291s ・npt real 1m1.046s nptが遅すぎる。 これだとnptが遅すぎて使い物にならないという結論です。 しかし高速化はいくつかの案があったので、 それなりに速度差は…
早いもので一年が経過しました。 nptの開発のために立ち上げたブログですが、 思ったより進んだような気がします。 ブログを書き始めた当時なんて、絶対作れないと思ってたんですが、 あと残り3つの関数を作成できれば完成です。 ただ、ここからが長いかもし…
nptの開発は結構進んでおり、 あとはcompile-file, load, stepだけとなりました。 まあバグを含め問題盛りだくさんなんですけどね。 nptの開発目的の一つとして、C言語に組み込んで使うという考えがあります。 だからわざわざnpt-amalgamationという訳の分か…
いま現在問題と思っていることを列挙します。 書いておかないと本人が忘れるので。 これは、問題と確定しているわけではなく、 問題があるかどうか調査することから必要があるものです。 標準入出力のリダイレクトが非常に遅いのはなぜか調べる。 例えばこん…
今まで開発に注力してきましたが、そろそろ時間が取れなくなってきたので、 現時点の完成度をまとめます。 loopマクロの開発が終わってv0.1.13をcommitした時点では、 ANSI Common Lispの関数やらマクロやらが 全996個中 919完成 (92%作成) となります。 …
私はnptというCommon Lisp処理系を細々と開発しています。 まだ目標であるANSI Common Lispの機能は完成していませんが、 以前紹介したときに言った「sqlite3みたいにamalgamationをやってみたい」 というのが先にできたので公開します。 npt-amalgamation h…
Nptとは小さいLisp処理系です。 現在開発中です。 https://github.com/nptcl/npt 本ブログは、NptというLispの開発をするにあたり、 難しかったり引っかかった部分をブログに記載して行くことで、 実装の確認をあらためてしていこうという目的がありました。…