nptclのブログ

Common Lisp処理系nptの開発メモです。https://github.com/nptcl/npt

npt

nptでsoファイルを読み込む

npt

前回nptでDLLファイルを読み込む - nptclのブログの続きです。 前の投稿ではnptにDLLファイルを読み込ませましたが、 soファイルもやりたいな、ということでやりました。 個人的にはsoファイルの作成は初めてなので、 いろいろと勉強になりました。 1. nptの…

nptでDLLファイルを読み込む

npt

1. はじめに nptのWindows版で、DLLを読み込む機能を作りました。 FFIでは無いので注意。 npt用にDLLを作成すると読み込めるというものです。 【追記】soも作りました! nptでsoファイルを読み込む - nptclのブログ npt for Windowsは、なんとなくうまく動い…

npt for Windowsのコンパイル方法

npt

以前の投稿でnpt-windowsのバイナリを配布しました。 nptのWindows版を公開します - nptclのブログ ウィルスというか、トロイの木馬報告もされました。 npt64.exeのウィルス検出について - nptclのブログ ここでは手動でnpt-windowsをコンパイルする方法につ…

npt64.exeのウィルス検出について

npt

Microsoft Defenderから脅威が検出されました。 でもトレンドマイクロのオンラインスキャンでは問題なし。 誤動作の可能性があるので報告します。 下記のファイルです。 64bit版実行ファイル https://nptcl.github.io/npt-windows/npt64.exe 検出内容 Trojan…

nptのWindows版を公開します

npt

【注意】セキュリティの脅威が検出されましたのでご確認ください。 【注意】npt64.exeのウィルス検出について - nptclのブログ nptを、Windows上で使いやすいようにした実行ファイルです。 64bit版実行ファイル https://nptcl.github.io/npt-windows/npt64.e…

nptの日本語のドキュメントを移動する

npt

今まではブログにおいてました。 ANSI Common Lisp npt トップページ - nptclのブログ でもちゃんとバージョン管理したいと思っていましたので、 githubに移動することにしました。 移動先はこちら。 ★nptの日本語のドキュメント https://nptcl.github.io/np…

termeの操作関数を作る

npt

以前、readline / editlineの依存から脱出しようと、自前のプロンプトを作成しました。 その機能に、termeモジュールという名前を付けました。 何も考えずにnptをコンパイルすると標準で使えるようになっています。 どうやって実現したのかというと、端末をr…

nptのテストが終わる

npt

ANSI Common Lispの関数仕様に対応するテストケースを一通り完成させました。 以前よりはだいぶましにはなりましたけど、まだバグはいっぱいありますね。 残念ながらこれ以上は開発に時間をかけていられません。 パソコンも半分壊れてて、nptをコンパイルす…

nptをカラフルにしたい

npt

nptに色を付けてみました。 気分転換です。 なんかいいですね。 ただ色が付いただけでわくわくします。 本当は色はおまけでした。 そのうちeditline / readlineを廃止しようと思っており、 代わりとなるプロンプトモジュールを作成していたのですが、 せっか…

load-time-valueを作ろう!

目次 はじめに 使い方 evalの場合 compile-fileの場合 make-load-formの実行 gensymを扱う makefileを使う 1. はじめに load-time-valueという機能を知っていますか? この機能の実装が死ぬほど面倒だったので、 ちゃんと記録に残そうという気持ちになりまし…

npt amalgamationを作り直す

npt

開発のメモです。 npt amalgamationとは、sqliteのamalgamationの考え方をまねて作ったものであり、 nptのソースを1つのファイルに結合するというものです。 現時点でnptのソースは770個くらいですが、amalgamationを使えば lisp.c lisp.h shell.c の3つにな…

nptでPrologを使う

npt

Prologを使いたいのですがどうしたらいいのか。 ちょっと調べてみると、Common Lispで動作するPrologがあるらしく、 有名どころではPAIPROLOGというものがありました。 これはPAIPという有名な本に載っていたものなんだと思います。 自分は見たことが無いの…

バイナリストリームの実装

npt

nptでstring-streamのbyteバージョンを作りました。 Common Lispでは、文字列をストリームに対応させた input-stream, output-streamというものが存在しますが、 characterではなく(unsigned-byte 8)に対応したという話です。 あらかじめ言っておくと、npt以…

Common Lispのソースで日本語を使う

あまり考えたことが無かったのですけど、 Unicodeに対応している処理系だと、 symbolに日本語が使えます。 次のコードを例に挙げます。 (defun 何回か乗算する (回数 値) (let ((答え 1)) (dotimes (無視 回数 答え) (setq 答え (* 答え 値))))) (何回か乗算…

lambda式で関数生成しない場合を考える

最近知ったのですが、lambda式はクロージャーが値を捕捉していない場合は 実行するたびにいちいち関数生成なんてしないで、 グローバルの関数を返却すればいいんだそうです。 どういうことかというと、例えば次の関数を考えてみます。 (defun aaa () (lambda…

nptのバグが多すぎる

npt

少し前にnptを一通り完成させたと書きました。 現時点でバグは大量にあるだろうと思っていたのですが、 とりあえずConsesのテストケースを一通り実施したものの、 予想をはるかに上回り、大半がバグありという結果になりました。 ちょっとひどすぎる。 ほと…

(setf getf)の定義が難しかった

getfはplistの値を操作するアクセス関数です。 取得する方の構文は、 (getf plist indicator &optional default) みたいな感じです。 設定の方はこんな感じ。 (setf (getf place indicator &optional default) new-value) 説明では、setfでgetfを使うときにd…

nptついて気が済むまで書いていくことにする

npt

nptの使い方についてちゃんと書いていかないとなと思っていたのですが、 どうやって実現して行けばいいものやら悩んでいました。 あまりいい方法も思いつかないので、 本ブログ全体を説明書みたいにしていこうと思います。 まずnptのトップページが無いので…

ANSI Common Lisp 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にそ…

ANSI Common Lisp Helloの開発

npt

たまにはバカな投稿でもします。 今日はエイプリールフールじゃないんだぞ、ということでちゃんと開発はしますよ。 nptのソースコードを使って、あなただけのCommon Lispを作りましょう。 nptは名前が変更されることを前提として開発されています。 名前を表…

ANSI Common Lisp npt version 1.0.0 になりました

ようやくできた! やったー!! 長かった。 ひたすら長かった。 以前の投稿Npt Lispの紹介 - nptclのブログでは、 ANSI Common Lispの関数を全部実装できたら 不完全であっても強制的にv1.0.0にすると言いました。 ついにそのときがやって来ました。 今まで…

lexical変数のことが分かったような気がする

lexical変数の設計を色々やってみて、最終的に落ち着いたものについて話します。 たぶんこれが正解に近いのかと。 少しでも速度改善したいと、clispのdisassembleでも見てみようかと思ったときのことです。 速度測定によく使っていたmk.eastasian.lispのextr…

少し早くなったので諦める

npt

以前の結果はこれで、 $ 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 半分以上早くなっていますね。 わりとい…

nptの速度が出ない

npt

前回の投稿では下記の通り、 悪い方向に26倍の速度差を叩き出しました。 ・clisp real 0m2.291s ・npt real 1m1.046s nptが遅すぎる。 これだとnptが遅すぎて使い物にならないという結論です。 しかし高速化はいくつかの案があったので、 それなりに速度差は…

一年が経ちました

npt

早いもので一年が経過しました。 nptの開発のために立ち上げたブログですが、 思ったより進んだような気がします。 ブログを書き始めた当時なんて、絶対作れないと思ってたんですが、 あと残り3つの関数を作成できれば完成です。 ただ、ここからが長いかもし…

試しにC言語でCommon Lispを使う

nptの開発は結構進んでおり、 あとはcompile-file, load, stepだけとなりました。 まあバグを含め問題盛りだくさんなんですけどね。 nptの開発目的の一つとして、C言語に組み込んで使うという考えがあります。 だからわざわざnpt-amalgamationという訳の分か…

Nptで把握している問題点

npt

いま現在問題と思っていることを列挙します。 書いておかないと本人が忘れるので。 これは、問題と確定しているわけではなく、 問題があるかどうか調査することから必要があるものです。 標準入出力のリダイレクトが非常に遅いのはなぜか調べる。 例えばこん…

Nptの開発状況

今まで開発に注力してきましたが、そろそろ時間が取れなくなってきたので、 現時点の完成度をまとめます。 loopマクロの開発が終わってv0.1.13をcommitした時点では、 ANSI Common Lispの関数やらマクロやらが 全996個中 919完成 (92%作成) となります。 …

npt-amalgamationの作成

私はnptというCommon Lisp処理系を細々と開発しています。 まだ目標であるANSI Common Lispの機能は完成していませんが、 以前紹介したときに言った「sqlite3みたいにamalgamationをやってみたい」 というのが先にできたので公開します。 npt-amalgamation h…

Npt Lispの紹介

Nptとは小さいLisp処理系です。 現在開発中です。 https://github.com/nptcl/npt 本ブログは、NptというLispの開発をするにあたり、 難しかったり引っかかった部分をブログに記載して行くことで、 実装の確認をあらためてしていこうという目的がありました。…