mrubyを読む準備
mrubyコードリーディングが楽しいので準備から考えたこと、調べたことを纏めていきたいと思います。
まず、準備とmrubyの周囲についてを纏めてみました。
きっかけ
大学が春休みになった("14/3/1時点~)。あと、OSSだった。
プログラミングできないのがつらいから出来る人のコードを読みたかった。
こういう記事を書いたら後戻りできなくなるかなと思った。(続けるために)
呟く
mruby コードリーディングな記事。ないな。ないか。
— keizo (@keizo_bookman) March 6, 2014
するとね
@keizo_bookman こんなのどうでしょう? http://t.co/XgaoOKZUU0
— Yukihiro Matsumoto (@yukihiro_matz) March 6, 2014
@keizo_bookman このような記事もありますね。残念ながら止まっちゃってますが http://t.co/8fxS28Q2Ws
— Miura Hideki (@miura1729) March 6, 2014
教えてくださった方々、ありがとうございます。
取っ掛かりが手に入ったので、やらねば損だと思った次第です。
始める
教えてもらった参考URL
mruby Complete
mrubyを読む - Code Reading Wiki
あと、Rubyそのもののリーディング記事も役に立ちます。
Rubyソースコード完全解説
ソースコードはここ
mruby/mruby · GitHub
githubで管理されています。
リリースがmruby v1.0.0 が存在していますが開発がガンガン行こうぜと進んでいるので
変化がすさまじいです。重要なデータ構造が変わったり(互換性あり)、Enumが実装されたり。
その辺のcommit logを書いている方もいます。
mruby master changesを始めます - mruby-master-changes
iijさんが不具合の修正のみをまとめた安定版リリースをしていたりするのでそっちをみたりするのも楽しい。
Releases · iij/mruby · GitHub
mruby周りのあれやこれや
名前の話
mrubyは組み込み用のrubyです。なんでMの頭文字が付いてるかは
GithubのWikiに書いてあります。
曰く
Embeddableのm
mimimal implementationのm
まつもとゆきひろ(Matz)のm
また、mrubyの初期コミッターになぜかまつもとさんがたくさんいるから(2人+Matz)
イニシャルにMが付く人であればmrubyv1.0.0の時点で
団体を除くほぼ全員にMが付いています、すごい。
luaとの話
世の中にはLuaというOOPかつ軽量なスクリプトな言語が既に存在しています。
大雑把に言えば、mrubyとluaやっていることが一緒です。
それなのになんで?みたいな話も説明している方がいます。
Getting started with mruby - Matt Aimonetti
Wht not Lua?と分かりやすい問いかけです。
Luaのポジションを目指すのではなく、DSLを簡単に書けるRubyがあれば開発が楽しく
素早く出来てうれしい!みたいなことが書いてあります。
Twitterを見ている感じだと、メモリ等の制約が緩い組み込み環境が今後10年くらいで増えていくから
そのような場でC/C++に固執したりシンプルすぎるLuaでキリキリするよりRubyでふんわりできたらいいな。
みたいなニュアンスを感じました。
また、Webアプリケーションの開発に一部mrubyを使い、requirement にRubyを必要とせず
Rubyを使う使い方もあると思います。
ちなみにライセンスはMITLです。気楽にWebアプリと纏めて配布できます。
mrubyの推進団体もあるようです。
特定非営利法人軽量Rubyフォーラム
正直、どういうものなのか自分はよくわかっていない。
情報源
主にTwitterです。各コミッターのTwitterやmrubyで検索掛けて眺めたり、コミッターのブログを見たり。
まだ、ドキュメント的なものが存在していないようです。githubを眺めていれば分かる
去年のmruby advent calendar も大変参考になります。
mruby Advent Calendar 2013 - Qiita
mrbgemはgithubのmrbgem-list に一覧があります。動かないものも割と存在しているそうです。
NeoBundleLazy の設定をしてみた
golang , scala など、vim の標準にまだ syntax がない言語を触り始めました。
もちろんvim でやるために syntax などをNeoBundle してもってきていますが、
だんだんと vim が重くなってきてvim を開くのにワンテンポ遅れるようになりました。
これはいけないと neobundle.vim の機能に遅延ロードなるものがあったような気がしたのでちょちょいといじって使ってみます。その備忘録。
NeoBundleLazy
調べてみますと、NeoBundleLazy をすれば特定条件でのみ読み込み するようにできるらしいです。ちょっとやっていましょう。
NeoBundleLazy 'mattn/emmet-vim',{ \"autoload" : {"filetypes" :[ "html" ]} \} NeoBundleLazy 'vim-jp/cpp-vim',{ \"autoload" : {"filetypes" :[ "cpp" ]} \} NeoBundleLazy 'derekwyatt/vim-scala',{ \"autoload" : {"filetypes" :["scala"]} \} NeoBundleLazy 'jnwhiteh/vim-golang',{ \ "autoload" : {"filetypes" : ["go"]} \}
とりあえず、自分の使っているプラグインで使うタイミングが限られるやつだけをNeoBundleLazyしました。体感的に少し開くのが早くなったような気がします。
vim --startuptime を使えば比較できるのでしょうが、ちょっとめんどくさいのでまた今度、結果だけ貼っつけます。
正直、 vim --startuptime したファイルの読み方がよくわからんとです。
一番遅くなる原因は calendar.vim なんだけどね!
参考
NeoBundle バンドルの更新とファイルタイプ別バンドル読み込み - 断章10100
neobundle.vim でプラグインの遅延読み込み - C++でゲームプログラミング
:help NeoBundleLazy
NeoBundleどんだけ便利なんだと思いつつ、Shougo氏の githubにある vimrc を見てみると他にも使いようがあるみたいでなかなか奥が深いです NeoBundle.vim 、
というか Neo 系vim プラグイン。
FreeBSD 9 にopenjdkを入れたかった...
FreeBSDにopenjdkを入れようとして入らなかった話。
本題
そも、openjdkを入れたかった理由はportsからscalaを入れようとしたところ、
「javaVMないから先にこっち入れなよ」(意訳)と言われたせいでありました。
しかし、openjdkを入れようとするとTriggering a nasty FreeBSD bug. (きたねえFreeBSDになっちゃうよ!)からアカンとError Code を吐き出します。
応急処置的に
Makefile のFORBIDDEN を消すとエラーをはかなくなる、と言うかエラーじゃないよ。 と誤認させることができたのでコメントアウトしました。すると入った気配。しかし、最善の方法ではないので他の方法を調べておきたいところです。