デファクトスタンダードでフリーなバーチャルマシンの必要性

まぁ、私が必要としているというだけのことですが(笑)…

バーチャルマシンというと、Java VMが思い浮かびますが、あれはSUNからOracleに権利が移っているようで、どうも…という…

で、オープンソース界隈ではエイプリールフールねただったPerl6のParrotがどうにかなるのかなとおもったら、それほど話を聞かないし…

ここで大切なのは、JITコンパイラが各種CPUに対して、すでに存在するというのが非常に重要です。

(そういうのが出てくれば、Emacsのバイトコードもそれになるでしょうから高速化されますね…)

で、LLVMがそういうやつなのかなという感じがしていますが、どうなんでしょう…

とは言え、Lisp to C translatorで、型推論とかするコードはターゲットをLLVMのビットコードとしても、意味を持つのでまぁ、時代の流れに合わせます…

私はノイマン型コンピュータをバーチャルマシンとしてソフトウェア的に抽象化することに賛成です。

LispからCへのトランスレート

Lisp, Ruby, Pythonなどのダイナミックな型の言語をCへトランスレートするときに実行速度を気にするなら、いかに型推論をうまくやるかがキモだと思われます。

で、私は型推論に関してはまったくの初心者です(笑)

数十年前にMLかHaskellのチュートリアルをネットで読んで、これはいいものだなと思いました。

当時から思っていたことは、

「人間がコーディング中に考えて、型を特定してオプティマイズできるということは、そういう判断基準がこの世に存在するということ(あとはそれをコードにすればいいだけ)」

です。(そういう判断をするコードは計算量のオーダーが…という意見には、ゲリラ的に解決します!と答えます…)

で、そういうLisp to C translatorを書けたら私は成仏するんだと思います(笑)

KISSのILOS実装は決定打までやるか?

ISLispのオブジェクトシステムILOSのオブジェクトのスロットをC言語のレベルでの構造体のメンバーにじかにするとO(C)レベルでのアクセスが可能ですが、ILOSは制限付き多重継承を許しているので、その前のスロット位置の計算にまたでかいO(C)レベルの計算量(ハッシュテーブル? シンボルに書き込む?)がたぶん必要になります。

………スロットはplistでいいだろ……(どうしようかな…)

———————————-
午後に気が付いたんですが、C言語へのトランスレートを視野にいれると、トランスレート時にスロットの位置は確定しますね… ILOSはCommon LispのCLOSとちがってクラスの動的な再定義はなしです。

多重継承を許しているC++がコンパイル時にそういうことやってるんだから当然ですね…勘が鈍っている…

———————————-
翌日ですけど、そういえば、C++のメソッドにはvtableがあってとか少しずつふわっと思い出してきました。

KISS is not dead

また、まったりとISLisp処理系KISSの開発をはじめるかなと思っています。

とりあえず、ILOSの実装をplistからちゃんとしたC言語レベルでの構造体にしようと思っています。まぁ、実行速度的にどれほど意味があるのかわからないんですが、美意識ですね、なんちゃって…

私はのめりこみやすい分、さめると一向に集中できなくなるので雑念が入らないようにしながらゆっくり楽しみながらやろうと思っています。

ISLispHyperDraftのタグ付けがだいたい終わりました

ISLispHyperDraftとは、プログラミング言語Lispの国際規格であるISLispの規格草案をHTML化したものです。

作業を始めてから、みなさんからのサポートや助言をいただきながら、すべての章のタグ付けが終わりました。いろいろとお世話様でした。

これからも、手を入れていく予定ですが、最初に私が望んだ見た目にはなったので、とりあえずは一段落したという感じです。

github.ioで閲覧できます。(リポジトリ)

それではみなさんハッピー・ハッキング!


ISLispHyperDraft is an html version of ISLisp specification draft.

ISLisp is a programming language Lisp standardized by ISO.

Almost all the tagging is done now.

I still intend to touch up here and there but for the time being, this is it.

You can browse it at github.io. (the repository is here)

Happy hacking!




2017年9月 ISLisp処理系KISS開発進捗状況

みなさん、おはようございます。

ISLisp処理系KISSですが、最近けっこう集中的に開発をしていて、色々な進展がありました。

・GC可能な全Lispオブジェクト構造体に、以前はポインタ2つ分のメンバを使っていたんですが、いまはGC用ポインタ1つだけにしました。GCで使うフラグはこのポインタ内の1ビットを使うようにしました。

・Lispオブジェクトを指し示すポインタ内部にいわゆるFixnumとFixcharを詰め込みました。これにより、普通の整数や文字の生成ではヒープからメモリ確保しなくてよくなりました。

・GNU MP数学ライブラリを使うことで、いわゆるBignumが使えるようになりました。

・rlwrapというGNU Readlineライブラリのラッパーコマンドを教えていただいたおかげで、コマンドラインでカッコの入力がやりやすくなりました。対応するカッコがブリンクするんですね。(./kis)

・C言語のinline関数を使い始めました。リスト操作系のほとんどすべての関数をインライン関数としてヘッダファイルkiss.hに移しました。

・C言語でのLisp用関数の実装で、使い捨てのLispオブジェクトは、できるだけconsしないように、つまり、スタックにLispオブジェクトを確保するようにし始めました。

・hash-tableを実装して、Symbol管理に使い始めました。


今後の作業予定は…

・テストコードをもっと書く。

・オブジェクトシステム(ILOS)のデータ構造を良くする。クラス専用のC構造体の用意とか。ただスロットの継承関係の表現で依然としてスロットはリストで表現するのが分かりやすいと判断しました(午後追記、ベクタにするいい方法を思いついたのでベクタにします)。

・ジェネリックファンクションも良いデータ構造を用意する。引数のクラスによるメソッド呼び出し用キャッシュとか…

・インタープリタとしてISLispとしてほぼ納得できるものにしてから、Cへのトランスレータを書く。

それではみなさん、Happy Hacking!

あ、あとISLisp規格ドラフトのHTMLバージョンをいろいろいじっています。

 




Introducing hyperdraft.el

This package is an adaptation of Erik Naggum’s hyperspec.el to ISLisp.
Enter `M-x islisp-hyperdraft’ and the name of ISLisp items(functions, variables, etc).
Then the default web browser shows that part of ISLispHyperDraft (ISO ISLisp specification draft).

Happy Hacking

https://github.com/nenbutsu/islelisp




Almost finished general-array* implementation

Howdy guys!

I’m just finishing general-array* implementation of ISLisp processor KISS.

Also, I just started ISLispHyperDraft project. The point is, I want ISLisp equivalent of Lispworks’ Common Lisp HyperSpec . The current state is you can view the draft but it lacks hyper links.

Visit my github