トップスポーツチームの監督に教わる秘訣
この論文では、氏が発見した原則を要約し、その原則をいかにしてソフトウェア開発に応用するかを説明します。
作者 Werner Schuster, 翻訳者 白石 俊平 投稿日 2007年9月2日 午後9時12分
JRubyにおけるStringの本質は、これまで難しいトピックだった。Rubyはバイト列を使用するのに対し、JavaはStringに対して完全なUnicodeのサポートを行い、内部的にはUTF-16で表現する。Charles O. Nutterが述べている ように、RubyとJRubyでコードを走らせると、微妙な差異として問題はすぐに表面化する。
APIがRubyアプリケーションの期待するところと異なり、個々の文字に対して16ビットの値を頻繁に返してそれを8ビットキャラクタにエンコードできないため、文字列のバイト長が正しくないというエラーがよく報告されます。Rubyのコードと関わる部分で、これはエラーになります。
彼がJRuby 1.0で行った解決策は次のようなものだと述べている。
- Ruby文字列はbyte[]とし、Ruby文字列のセマンティクスに合わせる。
- Java文字列がRubyに渡されるところではUTF-8にエンコードされる。これはつまり、文字列を受け取る側はそれをUTF-8のバイト配列として取り扱う必要があるということです。
- Ruby文字列がRubyを超えてJavaライブラリに渡されるとき、UTF-8であると仮定されます。Java側から戻される文字列もその仮定に従います。
文字エンコーディングの問題を解決しても、それはRubyとの最適な互換性というゴールに達するまでに必要な多くの小さな、つまらないステップの一つでしかない。関連した問題として、Rubyがサポートしている正規表現をJRubyでどうするかという問題がある。簡単な解決策は、長らく使われてきたが、Rubyの正規表現を処理するためにJavaに搭載されている正規表現ライブラリであるjava.util.regexを単純に使用するということである。しかし、微妙な振舞いの違いや他の問題からくるバグレポートが入ってき続け、より良い解決策が必要なのは明らかだった。 java.util.regexのパフォーマンス問題は知られており、Ruby文字列を内部的にバイト配列で表現するという決断によりパフォーマンスはさらに悪くなり得る(java.util.regexはバイト配列に対しては動作しないので、Ruby文字列を扱うためには変換する必要があります)。
そのため、JRubyのコアチームメンバーであるOla Biniは困難に耐え、解決策を列挙して作業に取り掛かることを決断した 。JRegexを使用するという一時的な解決策をとった後に、彼はREJに取り組んでいる。Ola Biniはこのように述べている。
REJは私が始めたプロジェクトで、MRI 1.8.6正規表現エンジンを直接移植するつもりです。これに関して重要なのは、JRubyが必要としているセマンティクスはMRLに非常に近いということです。我々はUTF-8、SJIS、EUCの正規表現にマッチさせることができ、MRI特有の挙動をまねることもできます(そうした挙動に依存するべきではないとしても)。
2007年5月から、これらを含むさらなる変更が実施される。JRuby 1.0は可能な限りRubyに近づくことはほぼ確実だろう。
(原文は2007年4月10日にリリースされた記事です)
InfoQ Japanはコンポーネントスクエアが運営しています
ITマネージャ必聴!IT活用セミナー 勝ち残りの法則~管理・統合化スペシャル~
【無償】「Google Apps 企業向けソリューションセミナー」のご案内
この記事では、私達がどのようにして大規模(240人月、10万行強)でインドとオランダの開発者も参加したスクラム・プロジェクトを成功させたのかを示しています。
Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。参加者はカンファレンスで各々の発表や、各セッションへの参加、諸外国のエンジニアとの出会い、ステージ上で DearXPを熱演などの様々な思い出を抱えて、無事日本に戻ってきました。
マイクロソフトのRobert Bellが、SilverlightとJavaを使用したインターオペラビリティのシナリオを紹介し、サンプルコードを例にとってアーキテクチャの手引きを提供します。
Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。サブミッションが選択された人、そうでない人も含めて、個々の目的意識の確認、膨大なプログラムから聞きたいセッションの選択、旅行の準備、プレゼンテーションの準備の期間を終えて、無事当日を迎えました。
筆者はアジャイルソフトウェア開発についての年に一度の国際会議であるAgile2008に初めて参加してきました。今年の日本からの参加者の数は14名にも及び、発表者は5名、受け持ったセッションは8つに及び、例年にない活躍を見せました。なぜ今年のAgile2008では、これほど多くの日本人が参加し発表に至ったのか? そのレポートをお届けします。
エスエムジーでは、Java全般を対象にしたトラブルシューティングサービス「JaTS」を提供しています。この記事では、前回に引き続き、JaTSにて蓄積したトラブル事例とその解決ノウハウの一部をお送りしている「Javaトラブルシューティングメールマガジン」(JTSMM)の総集編として、過去2ヶ月のトラブル事例と追加情報をダイジェストとして提供いたします。
この記事では、モデル駆動アプローチがうまく機能しない、または機能しなくなることによって期待した結果が実現できなくなる 8 つの理由について書きたいと思います。
No comments
返信