2012-03-29 16 views
6

私のアルゴリズムが実行可能かどうかをテストするために、よくMATLAB/Pythonでコードを書いています(&実際に動作します)。私は、コード全体をC言語に変換する必要があります。また、FORTRAN90言語で変換する必要があります。ある言語から別の言語にコードを手動で翻訳する

中規模のコードをある言語から別の言語に手動で変換するにはどうすればよいですか?

私が試みた:

  • が他に一方からコード全体を変換し、それをテストします。 (たまにはエラーやバグがなくなるだけで、エラーの原因を見つけることが問題になることがあります)

  • 数行ごとに出力の一貫性をチェックします。 (時間がかかる)

  • f2cのようなコンバータを使用してください。

また,:

  • 私はとかなり精通しています(私の経験では、彼らは非常に恐ろしいです。私は、異なる機能を持つライブラリの多くへのリンクがCおよびFortranを求めて)私が扱うプログラミング言語なので、マニュアルやリファレンスガイドは必要ありません(つまり、構文を知っています)。

  • 私はMATLABとCについてこの質問を特に翻訳パラダイムとして求めていません。

  • サイズに関しては、コードは100行未満です。

  • ある言語のコードを別の言語に呼びたいとは思わない。それを提案しないでください。

+1

最初のオプションは最も論理的です。変換とテスト。しかし、変換は単位テストと刻々と交錯する必要があります。 – ja72

答えて

7

異なる言語では異なるパラダイムが必要です。あなたは間違いなくと同じようにコードを書いたり設計したりしないでください。 Matlab、Python、C#またはC++。オブジェクトの階層さえも言語によって大きく変わるでしょう。

あなたのコードがいくつかの相互接続されたプロシージャで構成されている場合は、行ごとに直接変換することができます(すべての言語で、2つまたは3つの相互接続された関数を書くことができます)。しかし、これは最も単純なプログラムの場合にのみ当てはまります。その後、ハイレベル言語で

プロトタイピングと「生産」の言語で堅牢かつクリーンな方法で同じアイデアを実装することは非常に良い習慣ですが、2つの非常に異なるものが含まれます。

  1. プロトタイプ何であなたが望む言語。テストし、実験し、そのアイデアが機能することを自分自身に確かめます。大きな画像に注意を払い、パフォーマンスに集中するのではなく、高いレベルのアイデアに注目してください。ステップ2でもう一度直面するので、実装する際に遭遇する困難にも注意してください。
  2. 生産環境の言語Xのアイデアをゼロから実装します。プロトタイピングステージを実行しなかった場合よりも速くなります。これは、ステージ1で困難のほとんどが満たされているためです。イディオムXを使用し、 。コーナーケース、一般的な堅牢性に注意を払い、一度正しく動作するとパフォーマンスが向上します。あなたのコードのおよそ半分は、1には現れなかった新しいもの(例えば、エラーチェック、コーナーケース処理、入出力、ユニットテストなど)で作られています。

あなたはラインの翻訳でその行を見ることができますが、同じプログラムに変換しないので、明らかにない良いアイデアです。

また、試作していないときは、最初のバージョンを捨てて、私が好きな別のバージョンを作る、つまり、私は自分自身がプロトタイプを見つけました!同じことを2回実装することは時間の損失ではなく、通常の開発フローです。

1

ソースをpsuedo-codeで入力/プロセス/出力で分割し、その仕様に合うように新しいコードベースを書いてください。

2

複数のバックエンド(例:Matlab、C、Fortran)で上位レベルのドメイン固有の言語を使用し、ターゲット言語ごとにクリーンで慣用的なコードを作成することをお勧めします。問題のドメインが狭く、すべてのコードが多かれ少なかれば、そのようなDSLを設計して実装するのはかなり簡単です。

+0

それが存在しない場合は、自分でロールを張ってください。それは最初から完璧ではありません。しかし、コードを手動で翻訳する1時間だけではなく、むしろ数時間か週末を費やすことになります。 10%の努力で、ソリューションの90%を得ることを覚えておいてください。 – Ingo

+0

@Ingo、もちろん、私は別格の自家製DSLを意味しました。あなたのニーズに合わせて特別に用意されたものを使用する準備ができていません。 –

+0

おそらくそうではないかもしれません。 OTOH、あなたは今日知らない。 – Ingo

関連する問題