3

プロジェクトのために Ruby に変換する必要がある膨大な量のレガシー C コードを抱えています。

Ruby から C へのトランスレータをオンラインで見たことがありますが、その逆はありません。この特定の問題にアプローチする簡単な方法はありますか?

4

5 に答える 5

7

C から Ruby へのトランスレータを作成する必要がありますが、これは可能ですが、その労力は正当化できない可能性があります。または、最初のステップとして、Ruby ラッパーを作成できる小さなモジュールに C コードを分割することもできます。それらがすべて Ruby でラップされ、主要な制御フローが Ruby で完了したら、テスト ハーネスを作成し (置き換えコードの正確性を検証し、リバース エンジニアリングを支援するため)、C モジュールを Ruby モジュールに置き換え始めることができます。

モジュールをネイティブ拡張として使用する場合、分割統治アプローチは通常の Ruby で機能するはずですが、ランタイム環境として JRuby のようなものをターゲットにしている場合、これは明らかにさらなる問題を引き起こします。コメントに従ってJRubyで同様のことをしたい場合は、CモジュールをJNIでラップし、その方法でJVMから呼び出すことを検討しています。どちらの方法でも、C コードが Ruby コードと対話できるようになりますが、2 つのアプローチは互換性がありません。

どちらのアプローチも迅速ではなく、どちらも大変な作業になります。

于 2010-04-02T10:43:57.373 に答える
0

CでのプログラミングとRubyでのプログラミングは、まったく異なるプログラミングパラダイムを持っています。したがって、Fortran(またはこの場合はC)コードを任意の言語で記述できるという古い言い方は真実ですが、機械翻訳によって最終的に取得されるRubyコードは、構文を除いて、Rubyではありません。

したがって、IMHOは、手動以外の方法(および熟練したRubyistによって行われる、私が付け加えるかもしれません)は不可能であるか、少なくともまったく役に立たないでしょう。

于 2010-04-02T11:22:08.440 に答える
0

あなたは出来る:

  1. Ruby で C インタープリターを作成します (非常に難しい)。
  2. コンパイルされた C コードを SWIG などでラップします (はるかに簡単です)。
于 2010-04-02T10:30:25.283 に答える
0

多分あなたはこれを試すことができますhttps://github.com/jackieju/CPP2Ruby/ cppにとっては新鮮ですが、cからrubyまではより長く存在していました

于 2019-07-10T12:55:45.163 に答える