著作一覧 |
なんか、Cっておもしろいなぁとつくづく思うできごとがあったのだが、なぜかというとプリプロセッサマクロがあるからだ。
つまり、マクロはおもしろい、ということなのだろう。
で、ふと気付くが、外部DSLって、つまりはマクロだな。
CSSも、マクロと言えなくないな。
ということは、XSLTもマクロだな。
と、考えると、別にマクロはおもしろいわけではない。ということは、Cがおもしろいのだろう。
やっと簡単なやつが動いた。
何が問題だったか?
組み込みRubyではruby_script(const char*)を呼び出して$0を設定できる。別に設定しなくとも良いはず。
で、GRScriptは$0が存在するので当然設定したのだが、RScriptは何もしていなかった。
そこで例外が起きる。
このとき、vmがスタックトレースを取ろうと動き出す。ここがインライン展開されていることに気づかず、コードとソースが一致しなくて最初、戸惑ったが、結局のところ
ary = vm_backtrace_each(th, RUBY_VM_NEXT_CONTROL_FRAME(cfp), top_of_cfp, RSTRING_PTR(th->vm->progname), 0, ary);
で、th->vm_prognameがQnil(ではなくNULL)なのでそこで、PTRを取ろうとしてSEGVしていた。
で、ruby_script関数を忘れていたので、次のパッチを作って、あわやruby-devへ投稿かというときに、ruby_script関数を思い出して決着。
ary = vm_backtrace_each(th, RUBY_VM_NEXT_CONTROL_FRAME(cfp), top_of_cfp, StringValuePtr(th->vm->progname), 0, ary);(でも、他でも組み込みRubyを使っていれば、ありそうな問題ではあるので、書いておいた)
ジェズイットを見習え |
Curlもアセンブラも、マクロ楽しかったです。<br>言語を拡張できる感じが楽しい気がします。<br>CSSとXSLTは、本体の拡張にはならないところが違うんじゃないでしょうか?
CSSはマクロというには非力すぎますかねぇ。(変数くらい使わせてくれ)<br>XSLT は言語というには冗長すぎますよね。(Lisp に対する Emacs みたいな、XML エディタと組み合わせたら違う世界が見えるのかもしれない)
やっぱそういう感じですね。>拡張できる、非力(ではない)<br>とすると、下のほうのDSL以下がパワー不足なのが問題で、マクロはおもしろい、でいいのかな。