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

Route 477



2009-03-10

[ramaze] 新しいRamazeのWikiを翻訳する方法

Ramazeの公式サイトが新しくなって、Wikiも多言語化されたんだけど、 あいにく日本語ページは真っ白のまま。

翻訳するにはどうしたらいい?とメールで尋ねたら、githubのプロジェクトをforkしろと。なんと。

とりあえずforkしてみた。

みんなもとりあえずforkするといいよ!

そういえば旧Wikiを翻訳されてた方がいたと思うんだけど…、どうなったんだろ。 Wikiの内容は旧Wikiとそんなに変わってないので結構使えると思われ。

[scheme] R6RSのsyntax-caseが抱える?問題点

まだちゃんと分かってないけどメモ程度に書く。

Scheme知らない人向けにいうと、syntax-caseというevalみたいなもんがあって、それを使うと 別モジュールの名前空間の変数を参照したり変更したりできてしまってまずいんじゃない?という話。

まあRubyとか触ってると、別クラスの定数を動的に参照・追加とか普通にできるしそんなもんじゃねと思うけど、 R6RSの件は「それを分かった上でこういう仕様になってるのか」が不明確だからどっちなの?ということらしい。

という話をShibuya.lisp TT#2のときにfujita-yさんから聞いた。

こっからはScheme知ってる人向け。

R5RSにはsyntax-rulesというマクロシステムがあって、これはパターンにマッチした部分を置き換えていく感じで動的なコード生成を行う。 このパターン言語はそれ自信でチューリング完全なんだそうで、理論的にはマクロ展開時にどんな計算もできるんだけど、 Schemeのコードがそのまま書けるわけではないので、複雑なことをしようとするとマクロを書くのが大変になる。 あと、symbol-appendみたいなものがないので動的に新しい名前の関数とかを定義できなかった。

そこでR6RSにはsyntax-caseという、より強力なマクロシステムが入っている。こいつはマクロ展開時に普通の Schemeのコードを書けるので、マクロ定義にmapとか使い放題。あと、datum->syntaxってやつがあって、これを使うと 「マクロ展開時のシンボル」を、「実行時されるコード」に変換できるらしい。だからマクロ展開時にシンボルを連結して、 それをdatum->syntaxで埋め込んでやれば、関数名の動的生成とかも可能なわけだ。

だけど、datum->syntaxで作った名前はそのライブラリ内の名前空間を参照するから、 下手なマクロを作ると、ライブラリの外側からライブラリ内をいじくれてしまうということらしい。

本日のツッコミ(全2件) [ツッコミを入れる]
repeatedly (2009-03-11 01:37)

お久しぶりです,多分私のことかなと.公式サイトがリニューアルされて,そっちの方はwatchしてたんですけど,Wikiの方は頭から抜けてました^^;<br>確かにWikiの方は結構使えそうなので,forkしてある分だけ反映させようかなと思います.

yhara (2009-03-11 19:55)

おお、良いですね。よろしくお願いします。