Boost.python

2,970 views
2,732 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,970
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
7
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Boost.python

  1. 1. Boost.Pythonの有能性<br />
  2. 2.
  3. 3. 目次<br />自己紹介<br />Pythonについて<br /> Pythonとは<br />Boost::Pythonの使い方<br />C++からPythonへ<br />PythonからC++へ<br />Boost::Pythonの有能性<br />まとめ<br />
  4. 4. 自己紹介<br />Twitter ID: fate_fox<br />本名:安江 直樹<br />職業:高校3年生<br />主な言語:C ,C++ , Python etc… <br />興味がある分野:自然言語処理,人工知能,グリッドコンピューティング,クラウド,並列処理 etc….<br />
  5. 5. 今回の発表を提案してくださったのは、<br />Bleis氏デス!<br />このアイコン⇒<br />
  6. 6. Pythonについて<br />
  7. 7. Pythonとはなにか<br />
  8. 8. 撫子<br />
  9. 9. というのは私の妄想です。<br />
  10. 10. 正しくはこちら ⇛<br />
  11. 11. Pythonの歴史<br />Python(パイソン)は、オランダ人のグイド・ヴァンロッサムが作ったオープンソースのプログラミング言語。オブジェクト指向スクリプト言語の一種であり、Perlとともに欧米で広く普及している。イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・パイソン』にちなんで名付けられた。Pythonは英語で爬虫類のニシキヘビの意味で、Python言語のマスコットやアイコンとして使われることがある。Pythonは汎用の高水準言語である。プログラマの生産性とコードの信頼性を重視して設計されており、核となるシンタックスおよびセマンティクスは必要最小限に抑えられている反面、利便性の高い大規模な標準ライブラリを備えている。Unicodeによる文字列操作をサポートしており、日本語処理も標準で可能である。 多くのプラットフォームをサポートしており(動作するプラットフォーム)、また、豊富なドキュメント、豊富なライブラリがあることから、産業界でも利用が増えつつある。….<br />
  12. 12. By Wiki<br />
  13. 13. 要点を纏めると<br />
  14. 14. Pythonを知らない人のために<br />Pythonは<br />覚えやすく使いやすい!<br />覚えやすいように文法がシンプル!<br />曖昧さをなくすためにインデントなどにうるさい!<br />豊富なライブラリやモジュールで機能を拡張できる!<br />Guidovan Rossum氏が開発したインタプリタ言語!<br />ソースが読みやすい!<br />他言語より予約語(31語)が少ない!「Python2.6より」<br />
  15. 15. Pythonで有名な物<br />Google App Enginen<br />Googleが提供するWebアプリケーション開発環境<br />Xen<br />Pythonが使われた1台で複数台のOSが稼働できる有名な仮想ソフトウェア(OCamlも使われてるらしい さすが関数型帝国!)<br />MAYA<br />CGを作るアプリケーション 機能などの拡張にPythonを使用<br />Zope/Plone<br />Webアプリケーション鯖 Pythonで書かれてます。<br />Django<br />Webフレームワーク Zopeと似てる<br />
  16. 16. それでは本題<br />
  17. 17. Boost::Pythonの使い方<br />
  18. 18. Boost::Pythonを使うには<br />自分の環境では、 Boost-1.42.0 を利用してます。<br />言い訳:1.46.0などでやろうとしたんですが、Boost自体がうまくビルドが、<br /> できないのかわからないんですが 全然利用できなくて 1.42.0あたりが安定してる模様なのでお勧め(最新バージョンが一番いいんですがね)<br />色々と言い訳を連ねたいですがこれ以上続けると ⇛<br />
  19. 19.
  20. 20. と,“なのは”さんからSLBあたりをブッパされそうな気がするのd(ry<br />
  21. 21. はじめに<br />
  22. 22. C++からPythonへ<br />C++で書かれた関数やクラスの資源をPythonの資源<br />として利用するために、<br />拡張モジュールとして、<br />コンパイルする方法。<br />
  23. 23. C++でBoost.Pythonをincludeする。<br />C++で関数やクラスを書く。<br />マクロを使ってその関数やクラスをラッピングする。<br />コンパイルする(私はVCのコンパイラでコンパイルしました(真っ黒い画面で))<br />.pydっていう未知の生命体が出てくる。<br />その未知の生命体をC:python27DLLs に投下<br />インタラクティブシェルを起動<br />Import <br />利用できた!<br />
  24. 24.  実践<br />
  25. 25. // sample1.cpp //関数のラッピング<br />#define BOOST_PYTHON_STATIC_LIB<br /> // Boost.Pythonライブラリを静的にリンクする<br />#include <string><br />#include <boost/python.hpp><br />std::string hello_world(void)<br />{<br /> return "Hellow, world!";<br />}<br />BOOST_PYTHON_MODULE(sample1) <br />// sample1はpython拡張Moduleの名前になる<br />{<br /> // C++のhello_world関数を、" hello_world_python"という名前でPythonに公開する<br />boost::python::def ("hello_world_python", &hello_world);<br />}<br />
  26. 26. Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32<br />Type "help", "copyright", "credits" or "license" for more information.<br />>>> import sample1<br />>>> dir (sample1)<br />['__doc__', '__file__', '__name__', '__package__', 'hello_world_python']<br />>>> sample1.hello_world_python<br /><Boost.Python.function object at 0x00E43990><br />>>> sample1.hello_world_python()<br />'Hellow, world!'<br />>>> print sample1.hello_world_python()<br />Hellow, world!<br />>>><br />
  27. 27. // sample2.cpp  //クラスのラッピング<br />#define BOOST_PYTHON_STATIC_LIB / / Boost.Pythonライブラリを静的にリンクする <br />#include <boost/python.hpp> <br />structCValue<br />{ <br /> intgetValue(void) const { return value; } <br />  void setValue(int value) { this->value = value; } <br /> <br />  int value; <br />}; <br />BOOST_PYTHON_MODULE(sample2) // sample2はpython拡張モジュールの名前になる <br />{ <br /> // C++のCValueクラス(構造体)を、”PValue”という名前で pythonに公開する <br />boost::python::class_<CValue>("PValue") <br /> .def(“get”, &CValue::getValue) ; <br /> // getValueメンバ関数を、”get”という名前のメソッド として公開する <br />.def("set", &CValue::setValue); <br /> // setValueメンバ関数を、”set”という名前のメソッド として公開する <br />} <br />
  28. 28. // sample3.cpp  //C++のアクセサをPythonのプロパティに公開<br />#define BOOST_PYTHON_STATIC_LIB // Boost.Pythonライブラリを静的にリンクする <br />#include <boost/python.hpp> <br />structCValue<br />{ <br />intgetValue(void) const { return value; } <br /> void setValue(int value) { this->value = value; } <br />int value; <br />}; <br />BOOST_PYTHON_MODULE(sample3) // sample3は python拡張モジュールの名前になる <br />{ <br />// C++のCValueクラス(構造体)を、”PValue”という名前で pythonに公開する <br />boost::python::class_<CValue>("PValue") <br />//“value”プロパティは読み書き可 <br />.add_property("value", &CValue::getValue, &CValue::setValue) <br />//“rvalue”プロパティは読み取り専用 <br />.add_property("rvalue", &CValue::getValue); <br />}<br />
  29. 29. PythonからC++へ<br />Pythonのコード資源を直接C++のコード資源に投げ込みます。詳細的には実践で説明します。<br />
  30. 30. 実  践<br />
  31. 31. // sample4.cpp  //C++上でPythonインタプリタの実行<br />#define BOOST_PYTHON_STATIC_LIB // Boost.Pythonライブラリを静的にリンクする <br />#include <iostream> <br />#include <boost/python.hpp> <br />void c_plus_plus(void) <br />{ <br /> std::cout << "C++" << std::endl; <br />} <br />int main() <br />{ <br /> // Pythonインタプリタを初期化する <br />Py_Initialize(); <br /> // "__main__"モジュールをインポートする <br />boost::python::object module = boost::python::import("__main__"); <br /> // "__main__"モジュールの名前空間でコードを実行する <br />boost::python::object ns = module.attr("__dict__"); <br /> // "cpp"という名前で Pythonのインタプリタから呼び出す <br />ns["cpp"] = &c_plus_plus; <br /> // Pythonのインタプリタを実行する <br />boost::python::exec( <br /> "print('Hello, World!')n" <br /> "cpp() n" <br /> "value=2**20n" , ns); <br /> // "__main__"モジュールの名前空間で定義した変数の値を取り出す <br />int v = boost::python::extract<int>(ns["value"]); <br /> std::cout << v << std::endl; <br /> // Pythonインタプリタの終了処理を行う <br />Py_Finalize(); <br />} <br />
  32. 32. Boost::Pythonの有能性<br />
  33. 33. C++から見たメリット<br />C++で書かれた関数やクラスの資源をラッピングできる。<br />拡張モジュールとしてファイルを出力できる。<br />そのままPythonにimportできるから、Pythonへの実装が容易<br />
  34. 34. Pythonから見たメリット<br />C++のコードにそのままPythonのコードを書ける。<br />C++上でPythonインタプリタが実行出来る。<br />
  35. 35.  要点を     纏めると(2回目)<br />
  36. 36. とても実用的!!<br />⇑みんなの願望と夢<br />
  37. 37. ということで<br />
  38. 38. 僕と契約して<br />Boost.Pythonerに<br />なってよ!<br />
  39. 39. ご清聴<br />ありがとうございました!<br />

×