Python触り始めたと思いきやNuitka
かなり長い間このBlog放置しちゃいました。始めた当初は日々触れた技術寄りの事柄を英語・日本語で投稿するつもりでしたけど、三日坊主で終わりました。
小中高では日記をつける事が出来たのに困ったもんですね。日々のドキュメンテーションが必要だ…と思い知らされる機会が結構有るのでまた戻ってきました。今度こそやってみせる…!
というわけで、Pythonについて触れて行きましょう。
Pythonに触れる事になった経緯ですが、実は Blender だったりします。Blenderはフリーの3Dモデリング・エディタで、各種内部データを操作するためにPython APIが用意されています。
ちょっとした野暮用でロボット・シミュレーションの3Dアニメーションを作る事に成ったのですが、テキストファイルに記述されたシミュレーション結果をパースし、3Dモデルに姿勢を取らせる…そういった各種ロジック面の記述でPythonに触れる事に成りました。
自分はC/C++で主に書いてる人間なので、C/C++側からPythonを見ると、結構利点があります:
C++でもBoostライブラリや次期規格であるC++11で上記の利点のほとんどを享受できる様になるんでしょうけど、Boostはちょっと約束事が多いしC++11は実装が未完成という理由で自分の中ではPythonのほうに分がありますね。
HelloWorldサンプルと、モジュールを使ったサンプルをNuitkaでコンパイルした所のスクリーンショットを以下に載せます。
小中高では日記をつける事が出来たのに困ったもんですね。日々のドキュメンテーションが必要だ…と思い知らされる機会が結構有るのでまた戻ってきました。今度こそやってみせる…!
というわけで、Pythonについて触れて行きましょう。
Pythonに触れる事になった経緯ですが、実は Blender だったりします。Blenderはフリーの3Dモデリング・エディタで、各種内部データを操作するためにPython APIが用意されています。
ちょっとした野暮用でロボット・シミュレーションの3Dアニメーションを作る事に成ったのですが、テキストファイルに記述されたシミュレーション結果をパースし、3Dモデルに姿勢を取らせる…そういった各種ロジック面の記述でPythonに触れる事に成りました。
自分はC/C++で主に書いてる人間なので、C/C++側からPythonを見ると、結構利点があります:
- リスト・タプル・辞書が簡単に定義できる。
- 反復処理の記述(ループ
for elem in list:
やリスト作成[2*elem for elem in list]
など)が楽。 - 最初から提供されているモジュールが豊富。
- lambda式を使える。
C++でもBoostライブラリや次期規格であるC++11で上記の利点のほとんどを享受できる様になるんでしょうけど、Boostはちょっと約束事が多いしC++11は実装が未完成という理由で自分の中ではPythonのほうに分がありますね。
ただ、今までC/C++でプログラムを組んできた身としては、Pythonの記述力を讃えこそすれ、コードの実行にPythonインタプリタを必要とする事に関しては「汎用性損なってるな」と少しマイナス点を出してます。
そんなことを言ったらC/C++はインタプリタ上で動かないじゃないか、ということでC/C++にもマイナス点なんですが、どうせならコンパイル・インタプリット両対応で実行できてほしい、というのが自分の希望。
そして、「Pythonをコンパイルできないかなー」と、ググってみたらさっくり苦労せず Nuitka というのが出てきました。細かい解説は省いて、要は「Nuitkaを使えばPythonをコンバイルできる」ってことです。
HelloWorldサンプルと、モジュールを使ったサンプルをNuitkaでコンパイルした所のスクリーンショットを以下に載せます。
![]() |
HelloWorldサンプルのコンパイル |
![]() |
モジュールを使ったサンプルのコンパイル |
これは極々簡単な例。Pythonには沢山モジュールがあるし、例えばC/C++で作った共有オブジェクト(.so、.dll、.pyd拡張子のファイルとか)がモジュールとして使われていたり、ctypeモジュールで読み込まれて使われている場合はどうなるんだろう、とか気にはなりますが。まあ、Nuitkaが巧くやってくれるんでしょう。
Pythonが手に馴染んできた丁度良いところでNuitkaを見つけた事だし、これを機にPythonでプロトタイピングや本コーディングをやってみるのも良いかな、とか思ってます。
Comments
Post a Comment