Webデベロッパの祭典in札幌 A-2 まつもとゆきひろ Rubyを語る
2009年のRuby
1.9.1 がリリースされる
今までひろく使われてきた1.8系の直系にあたる
現在の最新バージョン:1.8.7
通称「Matzのインタプリタ」
去年の暮れ、1.9.0がリリース
(1.9系のテスト版)
1年ほどテストされてきた
安定版→1.9.1を近くリリース
2009年1〜2月リリースを予定
#今年のクリスマスに出したかったが、
#yuguriYuguiさんに「間に合わない」といわれたので来年1月を予定
#それでもまだ延期かかるかも
1.9.1の仕様について
仕様はほとんどかわらない
何が起きるか?
YARV
Yet
Another
Ruby
Virtual Machine
#参考:wikipedia:YARV,http://www.atdot.net/yarv/
仕様がややこしい
かんたんなVMはできるが、きちんと完成度高めるのがたいへん
→だいたいみんな作りこむ途中で挫折した
→唯一残ったものがこれ
だから"Yet Another"
M17N
Multilingualization
多言語化
「文字」単位の処理ができる
複数エンコーディング対応
UTF-8,UTF-16,EUC-JP,S-JIS,Little Endian,Big Endian・・・
その他、全83エンコーディングに対応
インド、中国、ベトナムなど
文字コード変換なしで処理ができる
- 他の言語
- 読み込むときに変換を行う
- Ruby1.9
- そのまま処理できる
変換・・コストかかりまくり
正しく設定しないと化けまくる
ex."\"とバックスラッシュ*1
改行がどこだかわからなくなったりする
それらのストレスから解放される
単一エンコーディングであれば最強だけど、複数が混じりまくるとずたずた
S-JIS→UNICODE→S-JISとか
日本・・・たくさんの文字コードがある
それらの処理を行ってきて、経験を積んできている
欧米圏はそれをあまりやってきていない
複数の文字コードをUnicodeにして戻す
今までの文字コード変換のやりかたもできる
UCS(Universal Character)
スーパーセットにあたるので実現可能
encodingメソッド
自分自身に文字コードをもてる
文字列の属性・・・それぞれが持っている
それをもとにコード変換が可能
壊れたデータをちゃんと読むこともできる
EUC-JPなのに間違ってS-JISで読み込んで化けまくった
→正しく読めるようにできる
改行のOSによる体系の違い
#いやがらせか?!
これらをどう処理するかも指定可能
Ruby Gemsが 標準添付される
RubyGem(通称gem):Rubyのライブラリを簡単にインストールするツール
Gemでパッケージにしてネットで配る
コンパイルまでやってくれる
Railsやその後継もGemで入れられる
"require"が不要になる
Fiber
新機能
スレッドに似た感じ
同期型並列実行
子ルーチン
スレッドより軽い
メモリも小さい
他への受け渡しも軽い
Fiber-Fiberという受け渡しができる
スレッド−並行実行して変になることがある
Fiber−明示的にタイミングをかける
ユーザレベルの実装
マルチコアでは活用できない→そういうものではない
扱いやすい
同時実行はしない
複数実装
JRuby
http://www.thinkit.co.jp/free/article/0709/4/1/
RubyのJava実装
JVMのclassに変換してくれる
Sunがスポンサー
#Ruby1.8より遅かったらバグレポートあげていいといってる
IronRuby
http://journal.mycom.co.jp/articles/2007/07/27/ironruby/index.html
Rubyの.NET実装
Micorsoftが開発しているオープンソース
.NET Frameworkにアクセスできる
複数実装のひとつの基準・・・Ruby on Railsが動くかどうか
→IronRubyは動いた
1.9もうごく
しかもけっこういい
Maglev
http://www.infoq.com/jp/news/2008/06/MagLevAtRailsConf
"magnetic levitation"(リニアモーターカーのこと)
GemStone
http://www.infoq.com/jp/news/2008/05/maglev-gemstone-builds-ruby
商用提供
社名でありシステム名
分散オブジェクトデータベースつき
60倍高速とかいう噂
C++とあまりかわらないとも
ただし、
オープンソースではない
完成度もまだ低い
→完成度があがってきたらどうなるか。今後の展開に注目
Ruby Enterprise Edition
http://journal.mycom.co.jp/news/2008/12/09/019/index.html
Web上へ最適化する
Phusion Passenger向け
http://journal.mycom.co.jp/news/2008/08/19/034/index.html
カスタムメモリ管理
ではベンチマークは?
※Ruby1.8.7(from source)が基準の1
数値が多ければよく、少なければ悪い
名前 | 数値 | 備考 |
Ruby 1.8.7(from source) | 1.0 | 基準値 |
Ruby 1.8.6(Windows Vista) | 0.5前後 | RubyはWinと相性が悪いため値もよくない |
Rubinius | 0.7前後 | − |
JRuby 1.1.6 RC1 | 1.9前後 | − |
Ruby Enterprice edhition | 1.0 | − |
Ruby 1.9.1 | 2.5 | ※最速#公称 |
Ruby 1.8.7(apt-get) | 0.5 | − |
- JRubyの異常な速さ
- ガベージコレクション
- Git
これをSunで何百人がかりでやってる
JVMをいかにうまく動かすか
実際には、前述のとおり、ネットワークやDBのI/Oでめちゃくちゃひっぱられるので、ここまで極端な差にはならない
Ruby on Rails
keyword:Ruby on Rails
Version 2.2
スレッドセーフ
JRuby→スレッド性能いい
Railsと組むといろいろよい
I18N(Internationalization)
国際化
国によってアプリが異なる
- メッセージ言語の切り替え
- 通貨、カレンダーの記述、カンマとピリオド等のロケールの問題
などなど。
I18Nはメッセージ変換が主
今まではプラグインだった
→標準対応されるようになった
1.9 Ready
アプリサーバ
Webrick
http://www.webrick.org/
keyword:Webrick
もともと使ってきた
Rubyのhttpサーバ
全部Rubyなので遅い
Phusion Passenger
http://www.infoq.com/jp/news/2008/05/phusion-passenger-mod-rails-gc
オランダのOSS
Apacheモジュール
別プロセスとして扱っている
海外では評価が高い
Glassfish+JRuby
http://www.sophia-it.com/content/GlassFish
※事例*3
Oracleが作ったSNSアプリ
マーティン・ファウラーの会社でRRで6週間で作った
→あろうことかデータセンターがreject
「Rubyなんてもんで作ったもんのせられるか」
→JRuby使ってのっけた
#えー
ポストRails
他言語でもばりばり意識している
Railsであるだけで優位性を保てる時代は終わった
リフレクション機能使いまくり
Merb
http://www.itmedia.co.jp/enterprise/articles/0810/15/news106.html
パブリックAPIとか検討している
規模は小さい
性能が高い
テンプレートエンジン
ORマッパさしかえる
#選択肢が多いとかえってお客さんは困っちゃうけど
Ramaze
keyword:Ramaze
http://mono.kmc.gr.jp/~yhara/ramaze/
Webアプリケーションフレームワーク
作った人・・・日本人じゃないけど日本にいる
Sinatra
http://www.infoq.com/jp/news/2007/11/forgotten-ruby-web-frameworks
分野限定の言語
Rails-Webアプリに特化
→それをさらにすすめて、もっと特化した
生産性はひじょうに高い
クラウドコンピューティング
コンピュータとネットワーク
集中<=>分散のいったりきたりの歴史
汎用機・・・集中
ネット・・・分散
ネットがある程度広まるとまた集中化
とか。
何万台ものマシンの管理をどうするか?