えぇ、正直浮かれてました。
事の発端はこちらのブログ
R7RS実装のポイント(改) - .mjtの日記復帰計画
なぜ浮かれたか、Sagittariusの名前が載ってたから。
っで、キーワードのことについて触れてたので、頑張ればポータブルに書ける旨をコメントしたのだが、3回くらい記事を読み返しておかしいことに気づいた。
(コメントを消す機能はないみたいなので、頓珍漢なコメントはインターネットに残り続ける・・・orz)
多分、R6RS処理系全体でポータブルなR7RSのライブラリを書くということなんだと思う。(国語苦手だったんです)
もしそうなら、こんな超マイナー処理系まで考慮に入れていただいて大変ありがたいです。moshを散々disってすいません。でも、moshには負けません(何の勝負?)
こんなとこ読んでないとは思うけど、一応言い訳・・・
ここからは上記のブログを読んで思ったこと。
キーワードはすごく便利なのだが、デフォルトでオンにしておく必要はないかなぁとも思ってきた。ちょっとしたスクリプトを書くときに「なんでもありあり」にしておくといろいろな選択肢があって便利なのだが、他のライブラリを使おうと考えると多少不便かもと思うときがある。
(でも、キーワード問題は結局デフォルトオンだろうがオフだろうが発生するんだよね。SRFI-42を取り入れたときに感じた。当然だけど、利便性とポータビリティのトレードオフって感じ)
以下はgithubのソースを眺めて思ったこと。
上記の方が作ってらっしゃるR7RS-bridgeを見て気づいたこと。weak-vectorsってScheme側から使えないのね。忘れてた。0.2.3では追加しよう。loadはあるけど、ドキュメントに書いてなかったかな?それともR7RSの挙動とは違うのかな?
コメント見るとSRFI-9が使えないのはやはり面倒っぽい。サポートしたいけど、これってマクロ展開の問題だったかな?exportの問題だったかな?面倒になって諦めた記憶が・・・orz
surfageのSRFI-9は動くらしい。要チェックや・・・
チェックしてみたらmoshのやつだった。動くのこれ?いろんなバグフィックスにまぎれて直ったのか?
・・・直ってなかった。そして思い出した、identifier=?が厳しすぎる問題だ。多分、名前、環境、ライブラリの比較だけでいいのに、オブジェクトの同値を見てるやつだ。簡単に直せそうなら0.2.3に含めよう。
見た感じ、define-library等の構文はサポートしてなさそう。R7RSがR6RSとほぼ同じimport、exportをサポートすると仮定して(確か微妙に違った気がするが)、Sagittariusなら単に
(define library define-library)
と書いてどこかで読み込めばいけるはず。Vivaほぼ全部ファーストクラスオブジェクト!(でもlibrary内のimportとexportは単なる記号なんだよね・・・)
(sagittarius time)を使ってるなぁ。SRFI-19用意してあるのに(転送するだけだが・・・)
どうでもいいことなのだが、どのプラットフォームで動作確認したんだろう?Linuxだったらすごくうれしい(自分で確認してないから、コンパイルすら通るか怪しいという意味で・・・Cygwinがメインだから大丈夫だとは思うけど・・・)
2 comments:
中の人です。
動作確認はCygwinです。
SRFI-9はCLOS?のようなネイティブで持つ機能に(R6RS Recordを経由せず)マップするのが良いかな。と。
R7RS-bridgeはまだほとんどテストされていません。今chibi-schemeのテストを移植しているところです。
キーワードはデフォルトONのほうが個人的には便利だと思います。Gaucheを使っていた頃は便利に使っていたので。。
おぉ、まさかレスポンスがあるとは思ってませんでした。
SRFI-9はsyntax-case使わなければ何とかなりそうではあるんですけど、ちょっと悩み中です。
あの機能は廃止したいなぁと思っていたりもするので、単に実装が気に入らないというのと、どうせやるならCLOSにすればいいじゃんという理由ですが。
キーワードやっぱり便利ですよね。デフォルトオンにしておこう。
Post a Comment