nptclのブログ

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

npt-amalgamationの作成

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

npt-amalgamation
https://github.com/nptcl/npt-amalgamation

npt-amalgamationとは、nptソースコードをまとめて数個のソースファイルにしたものです。
テストケースは除外されていますが、本体のnptと同じようにコンパイルできます。
現段階では下記の3つのファイルにまとめました。

  • lisp.c
  • lisp.h
  • shell.c

実行例を示しますが、次のように適当にコンパイルしても何となく動いてしまいます。

$ cc lisp.c shell.c -lm
$ ./a.out
(defun aaa (x) (if (<= x 1) 1 (* x (aaa (1- x)))))
AAA
(aaa 111)
1762952551090244663872161047107075788761409536026565516041574063347346955087248316436555574598462315773196047662837978913145847497199871623320096254145331200000000000000000000000000
^D
$

C言語のモジュールとして使うためのインターフェイスは何も整備されていませんが、 そのうちどうにかしたいです。