こんにちは、hachi8833です。
前回のGoby: Rubyライクな言語(1)Gobyを動かしてみるから時間が空いてしまいました。久方ぶりのGoby記事です。
- リポジトリ: goby-lang/goby
- 公式サイト: https://goby-lang.org/
スライド「Goby ← Golang + Ruby」
「Gobyとは何ぞや」をまとめたスライドを趣味で作りました(47ページ)。
実はこのスライド、明日開催のGo Conference 2018 Springに応募したものの選に漏れた後にそのまま作り始めたのですが、やっているうちにだんだんムキになってきてついつい手を入れまくってしまいました。
Gobyコントリビュータにも評判がよく、BPS社内勉強会でもお披露目したので、ここに公開いたします。
英語ベースですが見ればだいたいおわかりいただけると思います。どうしても日本語で見たい方は以下の日本語版スライドもついでに作りましたのでどうぞ。ただ英語の方がフォントやレイアウトがきれいにキマるんですよね...
Gobyの理念というかキャッチコピーは私が@st0012さんとのやりとりで得たことを元にそれっぽいのを考えましたが、日本語にしようがないのでそこだけ英ママです。
スライドを作ってみて
こうしてまとめてみると、Gobyは(自分にとってはですが)手のひらサイズというか謎が割りと少ない言語だなぁとしみじみ思ったりなんかしました。人によっては物足りないと思うのかもしれません。
私にとって謎の多くは、未実装の部分とドキュメント化されてない部分と私がまだ@st0012さんに質問していない部分、そして私がRubyの方でまだわかってない部分だったりするので、そこは自分たちの今後の楽しみということで。
あ、VMに手を入れたことがあるのはまだ@st0012さんしかいなかった💦。VMが自分にとってボスキャラですね。
昨年5月頃に参加してから今日この日までの1年間、気がつくまでもなく日本でほぼほぼ唯一Gobyに通じている私ですが、このスライドを公開したが最後、来月にはあっという間に他の方々に追い抜かれるでしょう。
さようなら、つかの間の日本一。
参考: 日本語版
たぶん今後は英語版スライドしか更新しないと思います。
最近のGoby
前回の記事を出した後、Gobyもいろいろ変わってきました。
バージョン0.1.3から0.1.9へ
詳しくはリリースノートをどうぞ。
4/9に★2600超え
プラグインがmacOSでも動いた
スライドにも載せましたが、Gobyの「プラグインシステム」(Goパッケージを動的に直接読み込んで動かすという野心的な試み)が当初Linux環境でしか動かなかったのが、いつの間にかmacOSでも動くようになってました。プルリク(#634)もらうまでメンテナーの誰も気づいてなくてびっくりでした。
Windowsはどうなんだろう...
get_block
キーワード
get_block
という特殊なキーワードがGobyに追加されました。動きからしてメソッドでは実現不可能っぽいですね。Rubyの&block
パラメータの代わりにこれを使えます。@0012さんもどっちがいいか迷った(まだちょい迷ってる)そうです。記号を使わない分好ましいかなと個人的には思っています。
def bar(block)
block.call + get_block.call # ブロックを2つ取っている
end
def foo
bar(get_block) do
20
end
end
foo do
10
end
第1回Gobyビデオカンファレンス開催
先週4/7の日本時間深夜1:00に、Gobyコントリビュータの面々(総勢5名)が初めてGoogle Hangoutsで顔見せしました。
台湾、ベルリンなどさまざまな地域の人々が一同に会し、@st0012さんが頑張って「VMを今後レクチャーしたい」など所信を述べ、終わった後でSlackが懇談会のごとく盛り上がりました。
記念にスクショをいくつか撮ったのですが、スクショなのにボケボケになってしまいました。やっぱり写真下手だわ自分...
シンタックスハイライト増やし中
Rubyのシンタックスハイライトがだいたいそのまま使えますが、やっぱり欲しいですよね。
会議の後盛り上がった勢いで、あっという間にVim用とSublime Text 3用のシンタックスハイライトができてしまいました。ありがたや!
こうなるとJetBrainsのIDEとかVSCodeでも欲しくなっちゃいますね(チラッチラッ
「xxメソッド/クラスがないよ!」
標準で足りないクラスやメソッドはいろいろありますが、欲しかったら足しゃぁいいんですw
Go言語で書けるのはもちろんですが、速度がそれほど重要でない派生的なメソッドならたとえばlib/
にGobyで書くこともできます。ここに置いた外部ファイルのコードはオートロードされるので、プルリクして通ればもうそれが標準メソッドです。もちろんプロジェクトローカルに書いてrequire_relative
することもできます。
考えてみたらGo言語でもRuby言語でも好きな方で書けるも同然ですね。Gobyは「メタプログラミングは基本取り入れない」としつつ、クラスの再定義(モンキーパッチ)は許容していますが、きっとこのためだったんだなと今理解しました。
参考: Gobyの組み込みクラスにメソッドを追加する方法 - Qiita -- 先越されちゃいましたが、hanachinさんが昨年書いてくださった記事です。
忙しい方ならGobyのDocker imageを取ってくるのが一番楽だと思います。
※ 思い思いにメソッドやクラスを増やすと散らかりそうなので(つか散らかりつつある...?)、そろそろネイティブクラスと標準ローダブルライブラリの交通整理というか編成の方針を決めないといけないのかな?と今思いました。相談しよう、そうしよう。