トップ «前の日記(2009-02-01) 最新 次の日記(2009-02-03)» 編集

日々の破片

著作一覧

2009-02-02

_ Cはおもしろい

なんか、Cっておもしろいなぁとつくづく思うできごとがあったのだが、なぜかというとプリプロセッサマクロがあるからだ。

つまり、マクロはおもしろい、ということなのだろう。

で、ふと気付くが、外部DSLって、つまりはマクロだな。

CSSも、マクロと言えなくないな。

ということは、XSLTもマクロだな。

と、考えると、別にマクロはおもしろいわけではない。ということは、Cがおもしろいのだろう。

_ ASR for 1.9.1

やっと簡単なやつが動いた。

何が問題だったか?

組み込み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を使っていれば、ありそうな問題ではあるので、書いておいた)
本日のツッコミ(全3件) [ツッコミを入れる]
_ きしだ (2009-02-02 18:12)

Curlもアセンブラも、マクロ楽しかったです。<br>言語を拡張できる感じが楽しい気がします。<br>CSSとXSLTは、本体の拡張にはならないところが違うんじゃないでしょうか?

_ なるせ (2009-02-02 19:10)

CSSはマクロというには非力すぎますかねぇ。(変数くらい使わせてくれ)<br>XSLT は言語というには冗長すぎますよね。(Lisp に対する Emacs みたいな、XML エディタと組み合わせたら違う世界が見えるのかもしれない)

_ arton (2009-02-02 20:31)

やっぱそういう感じですね。>拡張できる、非力(ではない)<br>とすると、下のほうのDSL以下がパワー不足なのが問題で、マクロはおもしろい、でいいのかな。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|12|

ジェズイットを見習え