Let's start Scheme

2015-03-27

R6RS protobuf

仕事でprotobufを使っている部分があることに気づき、そういえばR6RS用のライブラリがあったということを思い出す。これ:r6rs-protobuf

っで、早速使ってみたのだが、まともに動かない。プロジェクトも1年近く更新がないし、バグ報告するよりは自分で直した方が早いという結論にいたりforkする。これ:ktakashi/r6rs-protobuf

とりあえず直したバグと機能追加
  • /* */形式のコメントのサポート
  • トップレベルのoptionで例外を投げない(無視する)
  • ネストしたmessage/enumのサポート
  • レコードコンストラクタの引数違いの修正
  • generate-temporariesで作られた識別子からのシンボル生成
    • 処理系によってはポータブルじゃないシンボルが作られるので
  • (srfi :13)と(rnrs)でぶつかる束縛の修正
  • レコード型名の使用
    • Psyntax系の処理系だとマクロとして定義されている
    • record-type-descriptorマクロを使用するようにする
  • テストケースの修正
    • 不正なimport文
    • evalにdefine等を渡す
  • テストケースの追加
  • contrib/sagittarius/protoc-scmの追加
  • 処理系毎のpretty-printの追加(Mosh、Sagittarius、Vicareのみ)
プロジェクトページを見るとGuileでは動いているみたいなのだが、にわかには信じられない話であるというレベルのバグり具合だった。ものすごく単純なデータ構造のみなのかもしれない。

とりあえず、本家Googleのexampleにあるaddressbook.protoは動くようになった。一応開発者用MLに投げたので取り込まれるかもしれないし、僕のリポジトリが本流になるかもしれない(流行のゾンビOSS化してたらの話)予定。MLで即日返信が来てたので、近いうちに取り込まれると思われる。

個人的には(今のところ)関係ないのだが、(protobuf private)ライブラリだけはLGPLにしておいてほしかったなぁと思う。 Sagittarius用のライブラリを生成する際に、スタンドアローンでいけるオプションをつけたのだが、このライブラリがGPLv3なライセンスなので生成されるライブラリも(全部ひっくるめて一個のファイルにするので)必然的にGPLv3になってしまうという。個人的にProtobufを仕事用のスクリプト以外につかうことはないとは思うので(自分で何か作るならmsgpackとかあるし、自作のr6rs-msgpackはMIT互換の2項BSDライセンスなのでかなり自由だし)、どうでもいい話なのかもしれないが。

No comments:

Post a Comment