今週のmosh

0.2.6のリリースは絶賛遅延ちゅう。。
ypsilonの足音も聞こえてきたので方向性も考えつつ。。(新作が来週らしい - http://lwpinball.wordpress.com/2010/10/02/%E3%83%9E%E3%83%83%E3%83%89%E3%83%80%E3%82%A4%E3%83%80%E3%83%AD%E3%82%B9pv/ )

Win64対応

とりあえずFFIを除いてWin64に対応。MinGWはまだ。R6RS test suiteや手元のR6RSアプリケーションはかなり健全に動く。
ただ、いくつか問題があって、Win64LLP64モデルに対応していない箇所がそれなりにあるのでその辺を修正するためにリリースを延期中。。
Win64は今後Tier1プラットフォームとしてサポートしていく予定なので、Scheme実装としてはそれなりに珍しい存在になるかもしれない。(Chezすらサポートしてない!)

pluginブランチを開始

従来nmosh pffiとして開発していたものをnmosh pluginと改名して統合作業の開始。
これは簡単にはClang+LLVMを内蔵したnmoshを作るため(配布しやすくするため)にやっていて、Gaucheのcgenとc-wrapperに相当することを、Windows上で直接的に実現したい。もっとも、C++で書いたコードをmoshに統合するのは地味に細心の注意が必要なので、最初はCでどうにか。
今後はstubの類を自動生成にする予定。

yuni構文の導入開始

pluginブランチや新expander(= yuni)で必要なので、yuniのcore構文をmergeできるようにしつつある。まだdefine-packetのようなyuniを特徴づける構文が入っていない。

(define-composite point-2d (x y))

(define a-point (make point-2d (x 0) (y 0)))                                                

(touch! a-point
        (x (+ x 1))
        (y (+ y 1)))

(let-with a-point (x y)
          (display (list x y)))(newline)

define-compositeは構造体を定義するための構文。nmosh上のpacketはこのcompositeをバックエンドとして実装される予定。修論のときはmacroで完全に展開していたので、保守性に難があった。。
makeはcompositeを生成するための構文。サンプルではxとyの両方に0を代入してpoint-2dを生成している。
let-withはcompositeの一部をbindする構文。letに似ている。touch!はcompositeを破壊的に変更するための構文で、let-withの機能も同時に持っている。
compositeという回りくどい名前は、classと似ていて、かつclassで無い名前を探した結果。。classと付けるとCLOSのような機能を期待されてしまう気がしたので。aggregateという案も有ったが、LLVMのaggregateと紛らわしいので回避した。