これはなんでやめておいたんだっけ。コードに書かれていると動かない。CRuby/JRubyではもちろん必要なファイルはrequireされなければならないので、次善の策としてCRuby/JRuby側でのみ読まれるファイル*4に必要なすべてのファイルをrequireするように書いてしまった。いうディレクトリがある。粒度のテストを書きたいときにちょっときびしい。すればCRubyで普通に走る。CRubyとmrubyの互換性が保たれている限りは、これでも問題ないだろう。外部のRubyスクリプトを読んでそこに定義してある処理を実行する、という機能が存在する。必要とするためmrubyでは実行できない。これをどうやって実現するか......正確にはこの機能を実現しているコードをそのままmrubyで動かすか、ということをちょっと考える必要があった。そんなに難しくはない。外部スクリプトが読まれていたら存在するはずの定数を確認してみて、それを条件に分岐するだけ。このコードは正確にはランタイム(CRubyとmruby)で分岐しているわけではないけど、逆に言うと、サポートされている機能で分岐したいならこれで充分、ということ。ハマったこと順調にはいかなくて、ハマったこともいろいろ。みたいなコードをひさしぶりに書いた。documentはあるんだけど、なんかちょいちょい抜けてることがある。あと普通のRubyのつもりで書いてたらうっかりサポートされてなかったりとか。みたいなのを確認できないのはちょっと困る。今となっては、最終的にはコードを毎回見てる。以下に展開されてるのでコードを読みにいく手間が少なくて便利。すればいいんだけど、YARDがまったくわからなくて......どうなってるのこれ。クロスコンパイルがぜんぜんうまくいかない。試行錯誤してたんだけど、あまりにも不毛だったんで諦めた。(ピコーン!)で、書いた。ついでにJSONのフォーマッタも書いた。実はこのトラブルのせいだけでもなくて、他にもエラーハンドリング向上のためにストリームフォーマッタ*5が欲しかったので、どっちにしろそのうち書く必要はあったのだった。ファイルに定義されてるクラスが見付からねーぞ、というもの。ビルド対象(?)のファイルを明示的に指定するようにしたらうまくいくようになった。指定を足す(デフォルトでは存在しない)。言われてビルドに失敗する。mrblib/msgpack-inspect.rb")に無いといけないようだ。理由はちゃんと調べてなくてわからない......。使わずに明示的にファイルのリストを並べることにした。mrubyでの文字コードの扱いmrubyはM17N(多言語文字コード)をサポートしていない。Stringオブジェクトはかならずどれかの文字コードということになって、これはmrubyのビルド時に決定される。なければバイナリになる。これはなかなか困ったことで、エンコーディング操作は普通にCRubyのコードだとあちこちに埋まってるので、そのたびごとに実装ごとの呼び出し切り替えみたいなのをするのもちょっと面倒くさい。向けのエントリポイントになるファイルに追加してしまった。endendRubyだからこういうこともやってしまえる。まとめちょいちょいハマる部分があったが、なんとかやっつけられた。CRubyとmrubyの両方で動かせる状態になると、とりあえず試すならバイナリをダウンロードして実行、複雑な機能を使いたい場合にはrubygem版を入れて他のスクリプトと連携、みたいなことを選択的にできるようになるのでだいぶ便利だと思う。みんなもぜひ真似して他のハマりポイントを潰して回ろう。いうツールを作ろうかと思ったのだが、この名前は既にrubygems.orgで取られていたのでやる気を失った。以下を持っていきわすれて一度盛大にハマった*3:ように自分は理解している、が、理解が不十分な気はしている。(というかmsgpack)は動きませんこのチケット(既にclosed)の関連なんだけど。»プロフィールid:tagomorisコードとかその他の話とか。記事本文および記事中のコード片は引用および特記あるものを除いてすべて修正BSDライセンスとします。月別アーカイブはてなブログをはじめよう!tagomorisさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。