タグ

C++とpythonに関するWackyのブックマーク (29)

  • C/C++ に Pyhton  を 組み込み  パート1 ( Embedding Python in C/C++: Part I ) - とある社員のチラシ裏

    オリジナル 下記の内容の記事を翻訳しました。 記事もライセンスがCPOLなので、公開できると考え公開しています。 元記事 : http://www.codeproject.com/KB/cpp/embedpython_1.aspx CPOL : http://www.codeproject.com/info/cpol10.aspx イントロダクション "Embedding Python in Multi-Threaded C/C++ Applications" (Linux Journal)に刺激をうけ、私はPythonの組み込みをもっと広範囲にカバーする必要を感じました。 私は二つの目標を持って、この記事を書いていました。 PythonよりC/C++の経験が豊富なプログラマーに向けて(この記事を)書いて、チュートリアルは具体的なアプローチを提供し、理論的な議論はすべて排除した。 組み込み

    C/C++ に Pyhton  を 組み込み  パート1 ( Embedding Python in C/C++: Part I ) - とある社員のチラシ裏
  • PythonコードをC++に変換して高速化をはかる·Shed Skin MOONGIFT

    Shed SkinはPythonのコードをC++に変換するコンパイラ。 Shed SkinはPython製のオープンソース・ソフトウェア。プログラミング言語というのは世の中にたくさん存在する。コンパイルする言語もあれば、スクリプトとして実行されるものもある。どれが好きかはプログラマー次第だが、仕様によって言語の選定がしぼられることも多い。 変換処理 そうした言語間の垣根を越える技術もたくさん登場している。言わばランタイムを実装する系統のやり方だが、もう一つ別な言語に置き換えてしまうものもある。その一つ、PythonC++にしてしまうShed Skinを紹介しよう。 Shed Skinはまだまだ開発中であり実用レベルという訳ではない。だが幾つかのプログラムでは実際に変換ができるようになっている。Pythonでは変数は特定の型を宣言しないため、Shed Skinでは型推論を用いている。また、

    PythonコードをC++に変換して高速化をはかる·Shed Skin MOONGIFT
  • Pythonを高速化しよう! - gumi Engineer’s Blog

    はじめまして、gumiの津村です。 現在は解析系の仕事をしたり、ツールを作ったりしています。 今回の話は高速化についてです。 結構長めの文章です。 目次 実行速度の高速化 Python/C API ctypes Pyrex Cython SWIG その他 纏め 実行速度の高速化 高速化といっても色々ありますが、今回は実行速度の高速化についてです。 弊社ではPythonを全面的に採用していますが、そもそもLLは実行速度が遅い言語です。特にC言語のようなコンパイラ系の言語と比べると非常に遅いです。 それでもLL系の言語がここまで使われるようになったのは、開発効率が良いからです。 もはや常識ですね。 しかし、それでも特定の領域ではどうしてもPythonのようなLL系言語では厳しい部分も出てきます。 アルゴリズムを変更しても、ハードウエアを変えても、無理な物は無理です。 速度に問題がある場合の最適

    Pythonを高速化しよう! - gumi Engineer’s Blog
    Wacky
    Wacky 2010/11/19
    Python/C API,ctypes,Pyrex,Cython,SWIG
  • 「Boost.Python で C++ から Python の関数オブジェクトをコールする」より簡便な方法 - moriyoshiの日記

    http://d.hatena.ne.jp/ousttrue/20100204/1265291359 たまたま目にしたので。 生の PyObject* を触らなくとも、 #include <boost/python.hpp> void call_python_func(boost::python::object func) { func(123); } BOOST_PYTHON_MODULE(calling_python_func) { boost::python::def("call_python_func", &call_python_func); } これだけで OK ですよ。 実行結果: Python 2.5.1 (r251:54863, Feb 6 2009, 19:02:12) [GCC 4.0.1 (Apple Inc. build 5465)] on darwin Type

    「Boost.Python で C++ から Python の関数オブジェクトをコールする」より簡便な方法 - moriyoshiの日記
  • boost.pythonでC++からpythonの関数オブジェクトをコールする。 - 三次元日誌

    boost.pythonのFAQにはこんなの http://www.boost.org/doc/libs/1_41_0/libs/python/doc/v2/faq.html#funcptr が載っているがそりゃ無理だろうとw そうじゃなくて、普通にpythonのオブジェクトを取り出してコールする方法について。 #include <boost/python.hpp> #include <iostream> void pyExec(PyObject *func) { std::cout << "## pyExec ##" << std::endl; if (PyCallable_Check(func)) { PyEval_CallObject(func, NULL); } else{ std::cout << "not callable" << std::endl; } } BOOST_PY

    boost.pythonでC++からpythonの関数オブジェクトをコールする。 - 三次元日誌
  • swigでpython bindingのメモ - 三次元日誌

    ポリゴン読み込みライブラリのswigを使ったpythonバインディング実験が完了した。 これを使ってBlenderのmqo, pmd, vmdのインポータのデータ読み取り部分を置き換えての動作も確認できたので、今回は予定通りswigを採用することにする。使ってみて気付いたことなどをメモ。 遅くなってしまった フルpythonで書いていたインポータより遅くなった。C++で書いているのでデータの読み込みは一瞬で終わるのだが、読み込んだデータをpythonとやりとりするのが遅い。 たぶん、 %template(VertexVector) std::vector<meshio::pmd::Vertex>; こういうのがよろしくない。 これをpython側でfor文で回したときに意図しないnewとかが呼ばれている気がする。 ポインタじゃなくて実体の入った巨大vector(頂点配列やモーションで使う)

    swigでpython bindingのメモ - 三次元日誌
  • メソッド追加 - 三次元日誌

    元となるc++のソースを改造せずにswigクラスのみにメソッドを追加する。 いくつか方法がある。 c++で追加する http://blog.ssktkr.com/swig-jp/_/Python.html#n43 pythonで追加する http://old.nabble.com/Python:-Adding-Pure-Python-Methods-to-Shadow-Class-td22923954.html pythonで既存メソッドを置き換える・呼び出し前後に処理を追加する %feature("shadow"), %feature("pythonprepend"), %feature("pythonappend") http://www.swig.org/Doc1.3/Python.html#Python_nn43

    メソッド追加 - 三次元日誌
    Wacky
    Wacky 2010/05/11
    元となるc++のソースを改造せずにswigクラスのみにメソッドを追加する。
  • std::vectorがどうなっているか - 三次元日誌

    vertices.h #include <vector> struct Vertex { float x; float y; float z; }; struct Container { std::vector<Vertex> vertices; }; に対してswigインターフェース vertices.i %module vertices %{ #include "vertices.h" %} %include "vertices.h" %include "std_vector.i" %template(VertexVector) std::vector<Vertex>; とした時にVertexVectorがどんな実装になるか。 とりあえず $ swig -python -c++ vertices.i $ ls vertices* vertices.h vertices.i vertic

    std::vectorがどうなっているか - 三次元日誌
  • python3の文字列 - 三次元日誌

    python2から3で unicode -> str str -> bytesに変わってswigでのstd::stringの中身がutf-8決め打ちになっている。 http://docs.python.org/py3k/c-api/unicode.html swigのhoge_wrap.cpp #if PY_VERSION_HEX >= 0x03000000 return PyUnicode_FromStringAndSize(carray, static_cast< int >(size)); #else return PyString_FromStringAndSize(carray, static_cast< int >(size)); #endif cp932を生で持たせて後で何とかする手が使えない。 typemapか。

    python3の文字列 - 三次元日誌
    Wacky
    Wacky 2010/05/11
    python2から3でswigでのstd::stringの中身がutf-8決め打ちになっている
  • swig(python編) - 三次元日誌

    とりあえずpython2から。 VC9ExpressEditionで家のcpythonバージョン2.6向けのモジュールをビルドしたメモ。 swigは最初cygwinのものを使ったが、バージョンが1.3.38とちょっと古かったのでswigのサイトでwindows向けビルド(1.3.40)を落としてきた。ついでなので2つのswigの出力結果を比べてみたところわりと違った。たぶん改行コードの違いとバージョンの違いが主だと思うが、最新版のWindowsビルドを使うほうが無難な気がする。 後で使う予定のポリゴンローダを模した練習用のC++コード main.cpp #include "loader.h" #include <iostream> int main(int argc, char **argv) { Loader l; if(!l.read(argv[1])){ return 1; } s

    swig(python編) - 三次元日誌
  • Boost.CoroutineとBoost.OptionalとBoost.Pythonを使って、C++クラスの内部イテレータをPythonの外部イテレータとして見せる - moriyoshiの日記

    追記: うっかり戻り値ポリシーのところで boost::python::return_internal_reference<> を使ってしまい、メモリリークを引き起こしていたので修正しました。 Stackless Python であれば continuation が使えるので、Python 側で C++ をまたぐ外部イテレータと内部イテレータの反転が可能なんだけど、通常の Python ではやはり Boost.Coroutine に頼るほかない。 以下のサンプルでは、よくある Visitor パタンに従って実装されたクラスを想定していて、Visitor が visit されるたびに、Python 側に処理が戻るというフローを実現している。 container クラスの戻り値は新たに new されたオブジェクトなので、boost::python::return_value_policy を使

    Boost.CoroutineとBoost.OptionalとBoost.Pythonを使って、C++クラスの内部イテレータをPythonの外部イテレータとして見せる - moriyoshiの日記
  • Boost.Python の機能をざっと紹介してみる - moriyoshiの日記

    Boost の一部ながらも「実用的」すぎるため、とかくテンプレートメタプログラミングを愛好する諸兄から黙殺されてきた不幸のライブラリ、Boost.Python。Boost.勉強会でこいつの魅力を伝えようと思ったのだけど、時間の都合で無理だったので、簡単に紹介してみたい。 Boost.Python の基礎 Boost.PythonC++ のクラスや関数をラップする Python モジュールを恐ろしく簡単に書けるようにする、強力なライブラリである。 特に、Pyrex や Cython と比べて何がうれしいのかというと、 Python側にいちいちラッパ関数を書かなくてよい (テンプレートにより自動的に定義される) コンバータを登録することで、PythonC++の型の透過的な変換が容易にできる C++ のクラスを分かりやすい形で Python のクラスとして見せることが可能 といった点が挙

    Boost.Python の機能をざっと紹介してみる - moriyoshiの日記
    Wacky
    Wacky 2009/12/21
    Boost.Python は C++ のクラスや関数をラップする Python モジュールを恐ろしく簡単に書けるようにする、強力なライブラリである。
  • Thriftを使おう(2) - みずぴー日記

    30分プログラム、その374。Thriftを使ってみよう、その2。 インストールについては、Thriftを使おう(1) - みずぴー日記を参照。 IDLを書こう fact.thrift service fact{ i32 fact(1: i32 n) } スケルトン生成 $ thrift --gen cpp --gen py fact.thrift Pythonじゃなくてpyなのが、ちょっとだけ気にくわない。 C++(サーバ) fact_server.skelton.cppを適当に編集する。 class factHandler : virtual public factIf { public: factHandler() { // Your initialization goes here } int32_t fact(const int32_t n) { // Your implemen

    Thriftを使おう(2) - みずぴー日記
  • Adobe高速JavaScript実装、バイトコードにForthを採用 | エンタープライズ | マイコミジャーナル

    A Quick Introduction to Tamarin Tracing - by Chris Double氏 Webシステム開発用の言語としてJavaScriptが日に日に重要な位置を獲得しつつある。複雑なシステムを開発するとなるとその実行速度が問題視されるJavaScriptだが、コンパイル技術の導入やJITの導入で状況は改善されようとしている。特にFirefox 4で導入が予定されているAdobe Systemsから寄贈されたTamarinはJavaScriptの実行速度を劇的に向上させることになる。 Chris Double氏が3日(米国時間)、同氏のブログにおいてA Quick Introduction to Tamarin Tracingのタイトルのもと興味深いドキュメントを公開た。同氏は同ドキュメントで"tracing jit"と呼ばれる技術を活用した実装"Tamari

    Wacky
    Wacky 2008/02/07
    特にバイトコードにForthを採用したことは注目に値する。ほかのスクリプト言語への応用も踏まえてかなり興味深いプロダクトだ。
  • mitsunari@cybozu labs: xbyak アーカイブ

    LL魂2007(LLSpirit)のライトニングトークで発表したときに使ったデモのコード(Python+Xbyak)を公開します. download 使い方は添付のreadme.txtを参照してください. ベンチマーク結果をあげておきます. 速度比(小さいほど速い) ループ回数 実行時間(sec) 処理時間比(Xを1とする) Xbyak(可変) 100000 12.14 1 python(可変) 100 10.73 894 psyco(可変) 1000 40.8 340 python(固定) 1000 42.55 354 psyco(固定) 10000 32.91 27.4 C++(固定) 100000 13.94 1.16 修正python* + Xbyak 100000 8.75 0.72(参考値) psycoはPythonのJIT実行環境です.Xbyakはこれの特別版と考えればよいで

  • Python Extensions In C Using SWIG

    'Ozempic babies' are surprising women taking weight loss drugs

    Python Extensions In C Using SWIG
  • swig std string

    スクリプト言語から C のライブラリを使うためのラッパを作るなら SWIG です。使ってみると、これが思っている以上に強力でエレガントにラップしてくれることに気づきます。 SWIG のすごさというのは、各言語の最大公約数の部分をうまく共通化させてくれるところだ。たとえば、現代的な言語はどれもクラス、文字列型、配列、例外機構といったものを備えているわけだから、それらを自動で相互に変換して欲しい。class は別言語のクラスに、std::vector は配列に、std::string は文字列に自動で読み替えて欲しい。もちろん、それ以外に表現方法があるのはわかるんだけど、他言語とのインターフェースという限られた用途に最適性を求めるのは不毛だろう。 http://python.matrix.jp/tips/cpp_extension.html いろんな人が言及しているので、二番三番煎じなんですが

    swig std string
  • 2006-04-01

    きっかけは、 「ピストンコラージュのファイルをPythonで聴けるようにしたいなー」 と思ったことからでした。 (※ピストンコラージュの再生エンジンはDLLで提供されている) ただ、DLLやら分っていないことが多く、 調査開始から3日間もかかってしまいましたがー。 そんなこんなで苦労して得た情報を惜しげもなく公開します。 よくあるエラー kenmoがハマったエラーはこんな感じです。 fatal error LNK1104: コンパイラは、ファイル 'python23_d.lib' を開くことができません。 ビルドの構成が「Debug」だと、デバッグ用のlibを見にに行くためこのようなエラーが出るみたいです。 なのでビルドの構成を「Release」にすれば解決です。 あと、ビルドはできたものの動かないケース。 Traceback (most recent call last): File "

    2006-04-01
    Wacky
    Wacky 2006/04/08
    Pythonで動くDLLをVCでビルドする方法
  • PythonMatrix:C++とPythonのコラボレーション

    【1】   概要 「SWIG」というC/C++コードを各種言語から 利用できるようにするラッパージェネレータがあるのをご存知でしょうか? ホームサイト: http://www.swig.org/ Allegro CL C# Chicken Guile Java Modula-3 Mzscheme OCAML Perl PHP python Ruby Tcl といった多彩なジェネレート出力が得られます。 このページでは当然Pythonからの利用を解説しますが、 実はPython標準ディストリビューションには SWIGとの連携をサポートする機能が最初から組み込み済みです。 つまり、他の言語利用よりもPythonとSWIGの組み合わせが最も親和性が高いといえます。 PythonとSWIGの連携実績は以下のように非常に有名なプロジェクトがあることもポイン

  • ソースコード共有ポータルサイト byteMyCode 2.0 | エンタープライズ | マイコミジャーナル

    BlueCrestStudiosは13日(米国時間)、開発者向けのポータルサイトであるbyteMyCode version 2.0の運用を開始した。byteMyCode version 2.0は開発者がソースコードを共有することを目的としたポータルサイト。初心者から上級者まで多くの開発者が言語の種類によらずソースコードを共有することを目的としている。 今のところ、PHPJavaScriptJavaC++、C#、CSS、VB.NETなどに関するソースコードがコミットされている。投稿されている記事は、特定の処理を目的とする短めのソースコードと、簡単な説明で構成されている。この短めのソースコードは「code snippet(コードの小片、抜粋)」と呼ばれている。記事はディレクトリ分類されているほか、タグによる分類も可能。メンバーとして登録してある場合、プライベートチームを新規作成し使用する

    Wacky
    Wacky 2006/02/18
    PHP、JavaScript、Java、C++、C#、CSS、VB.NETなどに関するソースコードがコミットされている。投稿されている記事は、特定の処理を目的とする短めのソースコードと、簡単な説明で構成されている