今週のmosh

0.2.6に向けて着実に更新中。

REPLでの多値の表示

nmoshとpsyntax-moshのREPLは多値を返す手続きを評価した場合に全ての値を表示するようになった。nmoshのREPLは従来0値を返す手続き(moshのdisplayや(values)の呼び出し)の値としてunspecifiedを表示していたが、無くなった。

nmosh> (values)
nmosh> (values 1)
1
nmosh> (values 1 2)
1
2
nmosh> 

この多値表示フォーマットはGaucheに由来する。

backtraceの要約


新しいオプション--guru-modeを追加し、これを指定しない限りexpanderのスタックは表示しないように変更。
あと、何故か今までsyntax error発生元の行番号情報を表示していなかったので対応。ただし行番号は今のところかなり不正確で、reader側で対応が必要。

nmosh FFIの追加


GLUTを使ってWindowを表示したところ。
nmosh固有のFFI機能を追加。現状の実装はR6RS上で行っているので(mosh ffi)との違いはほぼ無し。ただ、そのうちexpander側での実装に切り替え、共有ライブラリのバージョン選択やoverrideのような機能を追加する予定。
現状ではdarwinのdyldとFrameworkに対応。

(library (ext api glut)
         (export glutInit
                 glutCreateWindow
                 glutDisplayFunc
                 glutMainLoop)
         (import (nmosh ext))
         (import-ext
           (darwin-framework "GLUT"))
(c-function void glutInit void* void*)
(c-function int glutCreateWindow char*)
(c-function void glutDisplayFunc callback)
(c-function void glutMainLoop))
 
(import (nmosh) (mosh ffi) (ext api glut))
(define zero (malloc 16))
(define NULL (integer->pointer 0))
(define callback
  (c-callback
    void
    ()
    (^[] #f)))

(pointer-set-c-uint64! zero 0 0)
(glutInit zero NULL)
(glutCreateWindow "test window")
(glutDisplayFunc callback)
(glutMainLoop)