Archive for the ‘リリカル’ Category

リリカルLisp ver1.6

木曜日, 3月 29th, 2012

リリカルLisp ver1.6を公開しました。
約7ヶ月ぶりの更新です。

今回の変更点は高速化です。
今まで評価した引数をリストにつないでいた(いわゆるevlisを使っていた)ものを、
スタックに積む(つまり普通の手法)ものに書き換えました。
速さと引換に伝統的なLispインタプリタらしさが失われた感じです。
ちなみに、環境はいまだに連想リストで表現しているので、まだまだ速くできます。

ベンチマークとしてfib関数
(define(fib n)(if (<= n 1)1(+(fib(- n 1))(fib(- n 2)))))
(fib 12) を評価したところ、以下のような結果となりました。

バージョン 実行時間(秒) GC回数
1.5 55.855 3
1.6 46.512 1

ヒープへのアロケーションが減った結果、GC回数が削減され、実行時間も短縮されました。
GCが発生しないプログラムでも速くなる(ことがある)ことを確認しています。

何でもかんでもスタックに置くと、apply関係で面倒な事もあるのですが、
まあ、リリカルLispで非常に長いリストを作ることもないだろうと考え、
特に工夫はしないことにしました。

--

リリカルLispを作り始めたのは、私zickが学部1回生のときですが、
気がつけば修士2回生になっており、この3月で学生生活も終わりです。
今後どうなるかはわかりませんが、
可能な範囲でリリカルLispのメンテは続けていこうと思います。
githubで公開しても、誰もメンテしてくれないしね。

リリカルLisp ver1.5

火曜日, 8月 23rd, 2011

リリカルLisp ver1.5を公開しました。
約半年ぶりの更新です。

今回の変更点は、エラーのチェックです。
今までのバージョンでは、実引数が仮引数より多かろうが、少なかろうが、
未束縛の変数を使おうが、シンボルの足し算を行おうが、
どんな無茶をしても、(大抵の場合、意味のない)値が返ってきました。
それが、今回の変更で「エラーです」と通知する機能が付きました。

> x
エラー:top-levelにおいて、xは未束縛です
> (cons 1)
エラー:consに与える引数が少なすぎます
> (+ 'a 'b)
エラー:+において、aは数ではありません
> (let 3 4)
エラー:letの使い方が間違っています

大体こんな感じです。
日本語を選ぶのに苦労しました。

プログラミング言語の学習(した気分になる)ソフトなのだから、
このような機能は付いていて当たり前だとは思うのですが、
最初のバージョンでは時間の関係から付けることができませんでした。
そして、その後は、
「今更、そんなものつけてもなー」
という思いからずっと放置されてきました。

今になってエラーのチェックを付けた理由は、
次のようなメールがきたからです。

I can’t get past lesson 2. When I type
(define x 4)
the result is x
Then, when I type
(* (x+3) 4)
the result is -2358896
I thought it should be 28

なんというか、ごめんなさい。
もう放置しても誰も困らないだろうと思っていたけど、
そんなことはなかったみたいです。

余談ですが、
リリカルLispのソースをgithubで公開してからちょうど1年が過ぎました。
誰も触ってくれないだろうなと思っていたけど、
ほんとに誰も触ってくれませんでした。
ショックですっ ><

リリカルLisp ver1.4.1

木曜日, 7月 28th, 2011

こんなメールがきた。

I get an error using Lyrical Lisp with the latest NScripter.
“グローバル変数設定に写える数字大きすぎます。”
Do you know the cause?

で、実際にNScripterを最新のものに差し替えて実行したら、
確かにエラーメッセージが表示されました。
そんなわけで修正を加えたバージョン、
ver1.4.1を作ったんですが、この変更を嬉しがる人も少なそうなので、
zipで固めたものは作らず、スクリプトファイルだけを置いときます。

nscript.dat (ver1.4.1)
(2011/09/03 追記)
新しいバージョンがリリースされましたので、こちらをご利用ください。

必要な方は、リリカルLisp ver1.4のnscript.datとこれを差し替えてください。

リリカルLispの起動が速くなりました

金曜日, 2月 18th, 2011

リリカルLisp ver1.4を公開しました。
今回の主な変更点は起動の高速化です。
結論から言うと、ver1.4はver1.3より約2.5倍も起動が速くなりました。

一見凄いことをしたように見えますが、
元のコードがシンボル生成の際にメモリを無駄に舐め回す、
アホな作りになっていただけ。ごめんなさい。
そこを普通のコード(?)に変えるだけで馬鹿みたいに速くなりました。

実は、その箇所を変更した時点で起動時間はver1.3の約9倍速くなりました。
しかし、「起動が速すぎてリリカルLispらしくない」という思いから、
なんとか起動時間を引き伸ばせないかと考え、

ver1.3以前ではフリーモードでしか使えなかった関数を、
どこでも使えるように修正しました。

フリーモードでしか使えなかった関数というのは、ここのcaar以下の関数です。
これらの関数はSchemeで書いてあり
使うためにはまずそれらの定義を評価する必要がありますが、
残念なことに、それらの評価にはそれなりに時間がかかってしまいます。

ということで、ver1.3以前は起動時間のさらなる増加を避けるため、
起動時にはそれらの関数定義の評価を行わず、
フリーモードを動かしたときに評価を行うようにしていました。
しかし、今回起動時間が速くなったので、
ver1.4では起動時にこれらの関数定義の評価を行うよう変更しました。

これにより、起動時間が延びて安心
以前より多く関数が本編で使えるようになり便利になったはずです。

私の手元での起動時間 (10回計測の中間値)

ver1.3 (シンボルの生成でアホなことをしていた) 4657ms
未公開版 (シンボルの生成のコードを修正) 515ms
ver1.4 (関数定義を起動時に行う) 1825ms

また、地味な変更点として、シンボルのもつ文字列に対するGCの追加があります。
ver1.3以前では、シンボルを一度つくると、それの文字列は、
シンボル自体が回収されても放置されていたのですが、
今回、Copying GCでそれを回収するようにしました。
(Copying GCにしたのは、もとの実装を極力変更したくなかったため)
今のところシンボルを生成するような関数 (string->symbolなど) は提供していないので、
恐らくこのGCが呼ばれることはないでしょうが。

次世代のリリカルLispを作るのはあなたです

日曜日, 8月 22nd, 2010

先日、COMFRK vol. 1を買いに来た方が
「リリカルLispは拡張したりしないんですか」
と質問されたそうです。

私にはもうリリカルLispのソースを触る元気は残っていません。
githubにソースを置いておいたので、自由に改造して下さい。

http://github.com/zick/Magical-Language-Lyrical-Lisp

流行に乗ってgitとか使ってみたけど、さっぱりわかない。
commitとpushってどう違うんだ。

NScLisper 一周年

土曜日, 1月 12th, 2008

zickです。
なんと今日でNScLisperをつくり始めてから1年(と1日)が経ちました!
わーい わーい
去年、どんな心境でNScLisperをつくったのか。
それがどういう形でリリカルLispに繋がったのか。
当時の貴重な資料(といっても私の日記ですが)が見つかったので公開します。

あどばんすど NScLisper オフィシャルガイド

土曜日, 12月 29th, 2007

zickです。
リリカル☆Lispの通販特典としていた
『あどばんすど NScLisper オフィシャルガイド』
を一般公開しようかと思います。
こちらからご自由にお持ち帰り下さい。
内容はNScripterでのLispインタプリタの作り方をかなり大雑把に書いてあるという感じです。
テキトーなことを書いてあるので鵜呑みにしないようにしてください(笑)

リリカル☆Lisp ver1.1公開

水曜日, 11月 7th, 2007

いつもzickですが、今回もzickです。
昨日NANRIさんという方が、なんとxyzzyからリリカルLispに文字を入力できる
『xyzzy lyrical-mode』を書いてくれました。
ここからダウンロードできます。
付属しているlyrical.lに使い方が載っているので、それに沿って準備をしました。
まず、リリカルLispとxyzzyを起動。

xyzzy側で M-x lyrical-lisp と入力。リリカルモードになります。
xyzzyにフォーカスをあわせ、評価したい式を入力

式の最後にカーソルを合わせ、 C-j を入力。
リリカルLispのフォームの方に式がコピーされます。

これで、楽にリリカルLispに式を入力できるようになりました。
xyzzyにフォーカスが合わないときはEnterを押すとうまくいくようです。
もともと、ver1.0でも動作したんですが、ver1.0ではパーサが
空白としてスペースしか考えておらず、タブと改行を無視していました。
ver1.1ではこれをちゃんと空白として認識するようにしたため、
xyzzy lyrical-modeを使って自由に式を入力できるようになりました。
NANRIさん、本当にありがとうございました。

リリカル☆Lispソース公開

火曜日, 10月 16th, 2007

zickです。
先日リリカルLispをフリー公開しましたが、
リリカル☆Lisp(ときどきの雑記帖 リターンズ)

ソースコード公開ってわけぢゃないのね。しょぼーん。

という反応があったため、ソースも公開することにしました。
こちらから好きなだけダウンロードしてください。
一部、疲れているときに書いた奇妙なコメントがありますが、気にしないでください。

フリー公開しました

木曜日, 10月 11th, 2007

こんばんは。
zickです。
この度、リリカル☆Lispをフリーで公開しました。
もう思い残すことはありません。
今なら空も飛べそうです。
フリー版での変更点は、
- 任意のタイミングでインタプリタが起動できるようになった
- 一部のグラフィックの変更
この二点のみです。
従来のものとほとんど変わりません。
思えば、NScLisperのソースを書き始めたのが今年の1/11。
今日でちょうど9ヶ月、本当に色々ありました。
あとで思い返すと「若き日の過ち」のように感じるのかもしれませんが、
全て十代のうちにしたことなんで、きっと許してもらえるでしょう(笑)
開発に協力してくれた皆様、応援してくれた皆様、
手に取ってくれた皆様、購入してくれた皆様、
本当にありがとうございました。