SSブログ

ざっくりRuby2.0 & Rails4 [徒然]

この雑誌↓の要約です。
それとよくわからなかった所はググってリンクを付けておく予定。


WEB+DB PRESS Vol.73

WEB+DB PRESS Vol.73

  • 作者: 設樂 洋爾
  • 出版社/メーカー: 技術評論社
  • 発売日: 2013/02/23
  • メディア: 大型本


今回は、Rails4とRuby2が載っているので、手早く的確な情報が得られそうだな、と手に取りました。量販店の書籍は少しでもポイントが付くから、貧乏性の私にはうれしいですね。アフィとかでもいいんだけど、なかなか払い込みしてくれる閾値まで遠かったりするし。技術系の書籍は、高い場合が多いので余計に気になる。会社で買ってくれるなら見つけた途端に買うけどね。


 
Rails4はRuby1.9以上対応で、Ruby1.8系は捨てられるらしい。あぁRailsに限らず、1.8系は2.0が出たらサポートがされないっぽい。今の時期は、Rubyは端境期になるわけですね。JRubyはどうなるんだろうな。CRubyは上記のようなんだけど。

 http://www.ruby-lang.org/ja/news/2013/02/24/ruby-2-0-0-p0-is-released/

正式にリリースされていますね。Ubuntuでは、

aptitude show ruby
aptitude search ruby2

とかしても、まだソフトウェアリポジトリには入ってない。まぁ当然か。あと一ヶ月くらいはかかるかもね。APTが対応したら入れようと思う。あとRailsはRubyGem対応で入れる。色々苦労したくない。


上の公式サイトの要約は、すぐに分かって気になったのは、

・UTF-8がデフォになって、文字エンコーディングを指定しなくても良くなった。
・鬼雲という新しい正規表現エンジンになった
・非同期例外の新API
・DTrace、TracePointでデバッグ
・各種最適化で、動作速度アップ

結局のところ、Ruby1.9との互換性はわりとあるみたいです。Rails4も2.0.0 の Release Candidate 版で動作するようにしてあるって書いてあるので、サポートも各Linuxディストロのリポジトリに入るくらいには、メジャーなバグはなくなっていることでしょう。ベータとかじゃなくいきなり安定版投入してるんで、安心して使ってくれと言ってるけど、いきなり実戦投入は出来ないだろうしねぇ。でも、1.9よりは始まりはいいぜってことらしい。

ドキュメント不足と言ってますが、rdocってよく知りません。大体Webドキュメントしか見てないから、どう使うかも知らない。ちょっと調べておくか。

ri ruby:syntax

って何だ? 1.8では上のコマンドがダメだったな。ん~riってコマンドがよく知らないからman。クラス、モジュール、メソッドが検索できるものらしいね。Rubyは日本人が多いから、英語ドキュメント書いてくれる奇特な人が少ないんだろうな。書く以前に辞書なしに読めない人も多いし。大学行ってない人も、受験英語くらいは出来るようになったほうがいいよ。ザックリにでも読めないと、技術者としてドツボにはまる。というか、機械翻訳とか文体もクソもなくてマジありえないんですが。

まぁドキュメントが増える分には悪いことはない。嘘さえ書いていなければ、多いほどいいよね。riはダックタイピングが信条なLLには親和性があるかもですね。動的言語とサジェストとかしにくいらしいし。


非互換は大きなもので5つあるって書いてあるけど、使ってなければ移植の時に気をつければいいね。メソッドが返す型が違うとかは、以前のコードが根本的に動かなくなりそう。細かい所は、非互換というより新しい仕様として考えるべきかもしれません。



ええと、本の方を見ていきます。

インスコはいいや。どうせAPTで入れるんだろうし、それまで使わん。

・キーワード引数の正式サポート

見た目わかりやすくなった。


・遅延リストの操作 Enumerator::lazy

遅延という概念がアレなんですが、無限に結果があるものに対して、その結果を操作する場合を前提としてください。全部結果を出そうとして結果を返さないメソッドに関して、lazyをmapやselectに噛ませて使うと、無限リストを遅延したまま操作できるらしいです。

あと、どデカいファイルを処理するときにも使えるらしい。これも結果を全部先に出さずに留保して、その先の作業時に一緒に行うことによって処理を効率的にできるみたい。探すときの中間オブジェクトが数GBになるとか、現実的じゃない無限に近い範囲になる場合は、無限リストを遅延させるのと同じ方法でやると効率的みたい。例は、本買って読んでね。


・モンキーパッチを文法化 Module::prepend

Rubyはライブラリを使うだけで、あんまり作ったことないんだよなぁ。説明も怪しいです。すんません。

includeでクラスにmoduleの性質を付加できるのは今までと同じ。C++的には単に継承してオーバーライドみたいなもの? なんかRubyであんまりクラスとか自分で作ったことないので、見当違いなこと言ってるかもしれないけど、そういうふうにしか理解できてないんだけど。

superを使うとmoduleで付加する前のクラスやモジュールにアクセスできるっていうのは、他のオブジェクト言語と同じで、includeでmoduleを入れると、そのクラスのインスタンスメソッドが読まれた次に、moduleのメソッドを使うことになる。そのクラスで定義されていなければ、他のクラスを継承していても、moduleのメソッドが使われるわけだ。でも、定義されていれば、includeしたmoduleは使わないで、自分のクラスのインスタンスメソッドを使うことになると思う。

prependをクラスに使う場合は、入れ込んだクラスより先にmoduleのメソッドを使ってくれる。参照の順番が変わる。モンキーパッチという方法自体初耳なのですが、それまではprependがなかったので、クラスに直接ハードライトして対応するやり方があったらしい。でも、それだと今までの状態を崩しかねないので、あんまり嬉しくない気がする。それに元々あったクラスはsuperで参照できるようになるので、更に利便性は上る。そもそも、モンキーパッチじゃ配られているライブラリとか、機能付加した時とかハードライトで書き換えちゃダメだろ、と思う。

気になったのは、普通に継承してオーバーライドすればいい気もするんだけど、それはmoduleの使い方をわかってないんだろうな。ちょっと勉強しておく。とにかく、そこで使ったmoduleを他のクラスにも流用できるので、便利ということらしい。Javaのimplimentとかどんなんだったっけ? 似てなかったっけ?(すげ~てきとう)


・Refinement

これは実験的な実装なのでスルー。モンキーパッチ対策らしい。
クラス内でスコープを作っている感じなのかな? 緩すぎる自由な状況に、何か制限を加えてきちんとする方法っぽい。まぁ正式採用されるようになってからでも遅くないな。その前に、クラス周りのわけがわかってないので、そっちを理解するのが先ということで。


・その他変更点

UTF-8がデフォルトになったとか、syck, iconvがなくなったとか、返り値が変わったメソッドがあるとか、公式サイトの記述とおんなじことが書いてありますね。

あ、拡張ライブラリはリビルドしないといけないって書いてあります。ABIと言うらしい。なんかARMのLinuxの時に聞いた気がするんだけど、同じ事なのかな? gemは大抵大丈夫だそうで、Railsでプロジェクトを新しく作る分には問題ないとか、そういうレベルのことなのかな? なんか疑問ばっかりですいません。おいおい、解決していくことになりそうです。とりあえず必要になる時までペンディングで。



Rails4も読んでいこうと思ったんだけど、時間がない。それもおいおい対応。まぁすぐに読みますよ、気になるから。

タグ:Ruby Rails4
nice!(0)  コメント(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。