ついにbootstrap不能になる

追記: 結局workaroundした。 https://github.com/okuoku/mosh/commit/9b694f84bd9bda3891914c2fdf0ffe153d81d332
git HEADのGaucheだとbootstrap不能なようだ。いつか来るとは思っていたが。。
VMgaucheとvanilla-moshのある種polygotになっており、vanilla-moshのbootstrapのためにはGaucheを要求している。
これは純粋に歴史的事情(元々はScheme on SchemeVMから出発している)で、今や(それなりに)matureな処理系なわけでGaucheに頼る理由はあまりない。ただ、基本的にnmoshはvanilla-moshに手を入れるのは御法度で開発してきたので単純に手付かずになっていた。(Win32 signalのように絶対にVMに仕込みがないと実現できないものは別として)
どうするかは悩ましいところ。

  • yuniの対応を通して大分Gauche力(りょく)を蓄えたので、今のGaucheで動くように直す → 昔のバージョンのGaucheでどうやってcheckすんのか問題
  • VMコンパイラのバグを直してnmoshでbootstrapする → nmoshを入れていない人はbootstrapできない

以前nmosh化はちょっとやってみたが部分的に動かないところがあって諦めた記憶がある。コンパイラ部のAOTC等を考えると多少努力しておいた方が良いように思える。

gosh vm.scm compile-file-with-macro baselib.scm > baselib.scmc
*** ERROR: invalid application: (#<macro first> ((procedure . #<closure #f>) (step init var) ((#:G543 #:G544 #:G545))))
Stack Trace:
_______________________________________
  0  (first args)
        At line 42 of "./vm.scm"
  1  (apply (procedure-body a) (stack->pair-args stack sp args-num))
        At line 461 of "./vm.scm"
  2  (vm/apply (cdr it) args)
        At line 1340 of "./compiler-vm.scm"
  3  (pass1/expand (vm/apply (cdr it) args))
        [unknown location]
  4  (f (car l) (null? (cdr l)))
        At line 132 of "./compiler-vm.scm"
  5  ($map1-with-tail (lambda (b t?) (pass1/sexp->iform (pass1/expand b
        At line 1131 of "./compiler-vm.scm"
  6  (pass1/body->iform body (append this-lvars lvars) #t)
        At line 1169 of "./compiler-vm.scm"
  7  (pass1/sexp->iform ss '() #f)
        At line 4839 of "./compiler-vm.scm"
  8  (pass2/optimize (pass1/sexp->iform ss '() #f) '())
        At line 4838 of "./compiler-vm.scm"
  9  (pass3 (and (pass2/optimize (pass1/sexp->iform ss '() #f) '())))
        At line 4838 of "./compiler-vm.scm"
 10  (merge-insn (pass3 (and (pass2/optimize (pass1/sexp->iform ss '()
        At line 4837 of "./compiler-vm.scm"
 11  (list->vector (merge-insn (pass3 (and (pass2/optimize (pass1/sexp-
        At line 4836 of "./compiler-vm.scm"
 12  (pass4/fixup-labels (list->vector (merge-insn (pass3 (and (pass2/o
        At line 4835 of "./compiler-vm.scm"
 13  (compile-partial `(lambda ,(cdadr sexp) ,(third sexp)))
        At line 1541 of "./compiler-vm.scm"
 14  (alist-cons (caadr sexp) (compile-partial `(lambda ,(cdadr sexp) ,
        At line 1539 of "./compiler-vm.scm"
 15  (pass1/sexp->iform ss '() #f)
        At line 4839 of "./compiler-vm.scm"
 16  (pass2/optimize (pass1/sexp->iform ss '() #f) '())
        At line 4838 of "./compiler-vm.scm"
 17  (pass3 (and (pass2/optimize (pass1/sexp->iform ss '() #f) '())))
        At line 4838 of "./compiler-vm.scm"
 18  (merge-insn (pass3 (and (pass2/optimize (pass1/sexp->iform ss '()
        At line 4837 of "./compiler-vm.scm"
 19  (list->vector (merge-insn (pass3 (and (pass2/optimize (pass1/sexp-
        At line 4836 of "./compiler-vm.scm"
 20  (pass4/fixup-labels (list->vector (merge-insn (pass3 (and (pass2/o
        At line 4835 of "./compiler-vm.scm"
 21  (compile-partial obj)
        At line 1641 of "./vm.scm"
 22  (compile-file-with-macro (third args) #t)
        At line 1679 of "./vm.scm"
 23  (write (compile-file-with-macro (third args) #t))
        At line 1679 of "./vm.scm"
make: *** [baselib.scmc] Error 70