Mosh 0.0.5 をリリースしました

Mosh 0.0.5 をリリースしました。(ダウンロード
R6RS ライブラリの仕組み(import/export/library)や syntax-case, syntax-rules などが利用できるようになりました。
これにより、本格的な R6RS プログラム 書けるようになりました。


追加、変更点は以下の通りです。

R6RS batch モード

R6RS batch モード "-b" オプションが追加され本格的な R6RS プログラムが動作するようになりました。(これは後述の psyntax を利用したものです)
このモードでは

  • library, import, export などの R6RS のライブラリの仕組み
  • syntax-case、syntax-rules などの R6RS マクロ

を使用してプログラムを書くことができます。

例えば Mosh で書かれた Lambda Wiki のトップレベルプログラムは

#!/usr/local/bin/mosh -b
(import (prefix (lambda wiki) wiki:)
        (rnrs))

(wiki:main '((data-dir . "/Users/taro/repos-mosh/trunk/r6rs-examples/wikidata/")
             (top-url  . "http://127.0.0.1:8001/wiki")))

のように外で定義されているライブラリをインポートする形で書きます。


いくつかの簡単なサンプルが mosh/r6rs-examples にあるので

% cd r6rs-examples
% mosh -b hello.scm

のようにお試しください。
ライブラリ名とソースファイルのマッピングは (lambda wiki) => lambda/wiki.ss のような形になっています。

psyntax ライブラリの移植

Abdulaziz Ghuloum と Kent Dybvig による The portable R6RS library and syntax-case system を移植し取り込みました。
このライブラリの移植により R6RS 準拠度が大幅にアップし、より堅牢で柔軟なプログラムが書けるようになりました。


現時点では psyntax.scm をロードするという形を取っているため若干起動時間が遅くなっています。
これは次バージョン以降で改善される予定です。

SRFI 98 の先行実装

私が中心となって提案している http://srfi.schemers.org/srfi-98/srfi-98.html の仕様をいち早く実装しました。
以下のように (system) ライブラリが get-environment-variable/get-environment-variables を export しています。

(import (rnrs) (system))
(display (get-environment-variable "PATH"))
(display (get-environment-variables))

-l オプションの追加

起動時にユーザーが指定したファイルを読む込む -l オプションを追加しました。
ユーザーが独自に定義した手続きなどを、起動直後から使用することができます。
この機能は id:g000001 さんの要望により実装いたしました。ご提案ありがとうございました。

手続きの追加

SRFI 1 を中心に多くの手続きを追加しました。
追加された手続きは以下の通りです。

  • call-process vector? string string->lines filter-map map-with-index
  • car+cdr take drop take! take-right drop-right drop-right! integer?
  • fifth sixth seventh eighth ninth tenth xcons make-list list-tabulate
  • list-copy list= split-at split-at! not-pair? last-pair last circular-list
  • proper-list? circular-list? dotted-list?

内部的な改善

psyntax の移植に関連して多くの内部的な改善をしました。

謝辞

今回のリリースまでに多くの方のアドバイス、不具合報告をいただきました。
みなさんありがとうございました。

不具合報告

不具合報告までお願いします。
もし面倒であれば、ここのコメント欄に書いていただくのでもかまいません。