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

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

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

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

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

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

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

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

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

フリーソフトウェアは良いものなのか

正直いって私もわからないというのが本音です。

今現在、フリーソフトウェアオープンソースソフトウェアを抜きにIT産業は成り立たないほど存在感はあります。しかし、長い目でみてそれが社会つまり人類のために良いことだったのかはわかりません。

ただ、私は自分がプログラミングするうえで、多くのスゴイ人たちのコードを読んで勉強したし、”私には”都合が良いというのが本心です。往々にしてタダで手に入りますし。

RMSという強烈な個性と才能を持ったプログラマーがソフトウェアはそうあるべきだと考え・感じFSFを立ち上げた(私は、感情90%理性10%くらいだったと思っています)結果としてすべてが始まったのだろうと思います。

RMS(リチャード・ストールマン Richard Matthew Stallman)のこと

数十年前読んだインタビュー座談会記事で、日本が誇るLispハッカーの竹内郁雄先生がRMSに日本に来ないかと誘った場面があって、それに対してRMSは「日本では自分の居場所はないと思う」みたいなことを返す場面がありました。(竹内先生が話しかけてもRMSはカニ喰うのに必死でガン無視とかありましたw)

私も、日本でFSFみたいなことをやったら、経済的テロリズムであるとして徹底的に弾圧されたり誹謗中傷を受けていたと思います(実際、私のある友人はそういう反応でした)。まぁ、アメリカでも企業はいろいろなFUD攻撃をしました(fear, uncertainty, doubt)。

ちょっと、ISLisp処理系KISSをもうすこし本腰いれて開発するかなという気分になって思ったことを書いてみました。いずれ加筆するかもしれません。

 

コンピュータ(CPU)でなぜ負の整数の表現として2の補数を使うか

2の補数というのは何かという説明はWikipediaに譲るとします。

結論から言うと、CPU(ハードウェア)的には単なる符号なし整数の加算・減算を行っているだけなのに、人間側の解釈の仕方だけで正負の数の加算・減算を扱えるようにするためです。

いまCPUレジスタ1バイト長であるとします。で、16進数で符号なし整数0xFF(十進数で255)に1を足します。そうすると桁あふれが起こって結果としてこのレジスタの値は0(ゼロ)になります。

0xFF(255) + 1 = 0x100(256) = 0x00  [レジスタは1バイト長固定]

ここでです、もし、人間側が勝手に”1バイト長でのレジスタの値0xFFを-1という意味としよう”と決めたとします。なぜそんなことをするかといえば、そう解釈すると、

0xFF(-1) + 1 = 0

となり、都合が良いからです。

この調子で、0xFEを-2と勝手に解釈すれば…

0xFE(-2) + 2 =  0

おお~、よいですね。

では、符号なし整数で0xFE(254) + 1 = 0xFF(255)ですが、我々の符号付の解釈では…

0xFF(-2) + 1 = 0xFF(-1)

うまくいく!

とまぁ、こんな風に、符号付の計算だけのためのハードウェアをわざわざ用意しなくても、人間側の解釈だけで正負の数が表せるのが2の補数表現のうまみです。