私は、Python プログラムから C プログラムを生成するコード トランスレータを作成するように依頼されました。この問題にどのように取り組むことができるか、それとも可能ですか?
4 に答える
シェドスキン: http://code.google.com/p/shedskin/
ブースト Python: http://www.boost.org/doc/libs/1_42_0/libs/python/doc/index.html
PyCXX: http://cxx.sourceforge.net/
Cython: http://www.cython.org/
http://wiki.python.org/moin/compile%20Python%20to%20Cから、関連プロジェクトのリストがあります。
パイレックス: http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/
サイコ: http://psyco.sourceforge.net/
RPython: http://code.google.com/p/rpython/
ここで根本的な問題があります。基本的に、C をバックエンドとして使用する Python コンパイラを作成する意図なのか、それともプログラムを C に変換し、その後 C を維持する意図なのか?
出力として (本当に醜い) C を生成するコンパイラーを作成することは、おそらく簡単ではありません。コンパイラーがそうであることはめったになく、Python のコードを生成することは、他の多くの言語よりも困難です (特に、動的型付けは困難です)。コンパイルして、少なくとも非常に効率的な出力にします)。OTOH、少なくともパーサーは一部の言語よりもはるかに簡単になります。
「翻訳する」とは、Python を読みやすく保守しやすい C に変換することを意味する場合、それはまったく別の問題です。控えめに言っても、それはかなり難しいことです。現実的には、機械翻訳にそれほどの価値があるとは思えません。適切な機械翻訳が期待できるほど、Python と C で問題にアプローチする方法には、あまりにも大きな違いがあります。
誰も Cython について言及していないとは信じがたいです -- 私の意見では、この種の仕事の事実上の標準です: http://www.cython.org/
シェドスキンをご覧ください。それはまさにそれを行います (まあ、C++ に対して、そして Python とそのモジュールのサブセットに対して)。しかし、この特定の問題にどのようにアプローチするかについて、貴重な洞察を提供できるはずです (ただし、独自の問題を作成することは確かに簡単な作業ではありません)。