1.8と1.9の互換性をMultirubyで確認

1678 ワード

Rubyクラスライブラリやアプリケーションの開発者は、異なるRubyバージョン間のコードの互換性を確保する新しいタスクを持っています.様々なオプションのRuby実装が原因の1つであるが,それらの共通の目標はMRIの動作方式と一致することである.しかし、Ruby 1.9がリリースされた後、状況は変化しました.Ruby 1.9は互換性のない変化があったり、少なくともいくつかのコードを修正したりしました.
例えば、1.9以前にRubyブロック内のローカル変数に問題があった.
 a = 1
 foo.do_something {|a|
 a = 42
 }
 puts a
Ruby 1.8では、ブロック変数aと含まれるドメインのaが変数であるため、このコードは「42」を印刷する.Ruby 1.9はこの問題を解決し,ブロックの挙動は人々の予想と一致し,すなわち「1」を印刷した.したがって,あるクラスライブラリやアプリケーションのコードが古い動作に依存している場合,Ruby 1.9での表現は異なるに違いない.
ZentestパッケージのMultirubyは、この問題を回避するのに役立ちます.Zentestの作成者Ryan DavisはRuby 1.8と1.9をMultiruubyでどのように処理するかを説明した.
今では1.9がありますが、Multirubyでマルチバージョンテストを行う方法について議論しましょう.MultirubyのZentestファミリーでの知名度はあまり高くありません.複数のrubyバージョンが自動的に構築され、内部にインストールされ、すべてのバージョンに複数のコマンドが送信されます.これにより、複数のrubyバージョンを同時に貫通してテストを実行できます.
Zentestのインストールは簡単です.
gem install ZenTest 
Multirubyの動作メカニズムは次のとおりです.
  • Rubyバージョン(1.8と1.9など)をダウンロードし、
  • をコンパイルします.
    その後、
  • は、利用可能なRubyバージョンごとにパラメータ
  • を実行する.multirubyこのコマンドは、与えられたすべてのパラメータをRubyバイナリファイルに渡します.上記のコード例を実行すると、次のような出力が得られます.
    VERSION = 1.8.6-p111
     42
    RESULT = 0

    VERSION = 1.9.0-0
     1
    RESULT = 0

    TOTAL RESULT = 0
     failures out of 2

    Passed: 1.8.6-p111, 1.9.0-0
    Failed:
    には1.8が見られる.x上の出力結果は「42」であったが、1.9上では「1」となった(上の「RESULT」はRuby解釈器の脱退コードである).
    通常、Multirubyはほとんどのコードでのみ使用されます.
    テストで上書きされた場合に問題点を特定します.しかし、Rubyは英雄が輩出した時代であり、JRuby 1.0と1.1、IronRuby、そしてRubiniusのように雨後のタケノコのように次々と現れ、クロスタイムテストを簡素化できるツールが急務である.
    あなたはすでにRuby 1.9にあなたのアプリケーションを移植し始めたか、少なくともRuby 1.9でクラスライブラリやアプリケーションをテストし始めましたか?
    Checking 1.8 vs 1.9 compatibility with Multiruby