2010-11-16
■ [ruby] Seattle.rb推奨の「gem名の命名規則」
- 基本的にアンダースコアで単語を区切る
- 既存のgemに機能を追加するもの(autotest-growlとか)の場合のみ、ハイフンで区切る
- 大文字は使わない(case-insensitiveなOSのため)
最後の理由は、例えばWindows上だとrequire 'ZenTest'をrequire 'zentest'と書いても通っちゃうみたいに、初心者が意図せずプラットフォーム依存なコードを書いてしまう危険性があるからとのこと。
Rubyの標準添付ライブラリも、そろそろ命名規則を統一した方がいいんじゃないかと思ったりもする(tempfileとtmpdirとか)。
■ [golang][book] 「はじめてのGo言語」を読んだ
4777515591
Googleから公開されたプログラミング言語「Go」の、日本初(世界初?)の解説本。Goの言語機能について 一通り書いてある模様。
著者が若いこともあって*1、文章が分かりにくかったり記述が怪しいところもあるけど、 Go言語の概要を手っ取り早く知りたいという向きには良いだろう。 特にGoはC言語に似ているようで、いろんなところが微妙にリファインされていたり、例外機能が独特だったりするので、 英語文書を読む前に日本語で概要を眺められるのは有り難い。
あと、Effective Go(和訳)みたいに「シグネチャ」「リエントラント」とか小難しい単語が出てこない分、 授業でC言語を習ったばかりの学生さんとかにはかえって読みやすいかも知れない。
Go言語の感想
一言でいうと、「C言語を作り直して、並列機能を入れたもの」という感じ。
用途としては、ハードウェアに近いところを触って性能を出さないといけないようなものになるんだろうなぁと思う。 性能が要らないならスクリプト言語でいいわけだし。Webサーバとか、動画エンコーダとか?
Cから良くなった点:
- セミコロンが省略可能
- if,forの括弧も不要
- 宣言と代入が別演算子
- ポインタ演算はできない
- えらいswitch
- デフォルトでfallthroughせず、breakが不要
- caseに値を複数書ける
- 式なしswitchがある(Rubyの式なしcaseみたいな)
便利そうだった点:
- 複数の値を返せる
- 多重代入
- 辞書型
あとちょっと面白いのは、「オブジェクト指向のようなもの」があるところ。オブジェクト指向といってもクラスベースではなくて、 *2 構造体を第一引数に取る関数を「メソッド」と呼んでいる感じ。データとその操作が分かれていると考えるとCLOSとかHaskellを連想するけど、 Goのメソッドはobj.Func()のような書き方ができるのでそこだけ普通っぽい。
並列機能(Goroutine)は、Erlangみたいなやつですねという感想(短い)。
気になったところとか
正誤表が見つからないのでとりあえずここに書く。
- null(p.39)とnilがどういうものなのか書いていない(ってかnullは誤記ですね)
- 実行結果の冒頭に「>」(例:p.93)とか「>>」が付いているものがある(何も付けないほうがいいと思う。付けるなら最初の章で説明すべき)
- 「レシーバ」と「メソッド」を間違えている箇所がある(例:p.78)
- 人工的な例が多いので、PointとかAnimalとかFruitsとかでも良いから、意味のあるプログラム例だと良かった。そうすると3-2とかはずっと読みやすくなると思う。適切な例を考えるのは難しいけどね。
- p.73のプログラム例はfuga.Add()が抜けているのでは?
- p.67 occordという英単語はない(occurred?) *3
- 「表わす」は「表す」の方が一般的かなと思う(間違いではないようだけど)
出版前に誰かに見てもらいたいときは、ネットでレビュアーを募るのも手です。 WEB+DB PRESSのRuby連載は、今のところ@tsuyoshikawaさん(第一回/Sinatra)、@nalshさん(第二回/Ruby 1.9)、@mat_akiさん(第三回/Heroku)に 見てもらっています。ご協力に感謝。
あとこれは出版社側の話だけど
- ソースコード中の「_」のフォントがおかしい
- ソースコード中の「fl」「fi」は合字にすべきでない