SlideShare a Scribd company logo
СОЕДИНЯЕМ C++ И PYTHON
ИГОРЬ САДЧЕНКО
IGOR.SADCHENKO@GMAIL.COM
МОТИВАЦИЯ
2
Использование как предметно-ориентированный язык для
конкретной области применения(DSL)
Высокоуровневая разработка(VHLL)
Быстрое разработка и прототипирование приложений(RAD)
Встраивание интерактивной среды (REPL)
Разработка графического интерфейса пользователя (GUI)
Тестирование
C++ COREHARD WINTER 2017 // МОТИВАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
ЗАЧЕМ
3
Extensions. Написание расширений для Python на С++
• улучшение производительности
• портирование существующих библиотек
• интеграция различных компонентов
Embedding. Встраивание Python в С++ программы
• упрощение разработки
• дополнительных возможности
C++ COREHARD WINTER 2017 // МОТИВАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
СПОСОБЫ
4
C++ COREHARD WINTER 2017 // МОТИВАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
НАШ ПУТЬ
О PYTHON
6
Python — это свободный интерпретируемый объектно-ориентированный
расширяемый встраиваемый язык программирования очень высокого уровня.
• свободный — все исходные тексты интерпретатора и библиотек доступны для
любого, включая коммерческое, использования;
• интерпретируемый — поэтому кроссплатформенный, имеет рефлексию;
• объектно-ориентированный — классическая OO модель, включая
множественное наследование;
• расширяемый — имеет API для создания модулей, типов и классов на C, C++;
• встраиваемый — имеет API для встраивания интерпретатора в другие
программы;
• очень высокого уровня — динамическая типизация, встроенные типы данных
высокого уровня, классы, модули, механизм исключений.
C++ COREHARD WINTER 2017 // МОТИВАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
СПРАВКА
7
Python ориентирован на повышение производительности
разработчика и читаемости кода.
В Python есть дзен (import this), описывающий общие подходы к
разработке.
Синтаксис ядра Python минималистичен. В то же время
стандартная библиотека включает большой объём полезных
функций.
Python активно развивается и имеет огромное community.
К недостаткам относят низкую производительность и отсутствие
реальной многопоточности(GIL)
C++ COREHARD WINTER 2017 // МОТИВАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
СПРАВКА
8
Python — язык универсальный, он широко используется во всем
мире для самых разных целей — базы данных и обработка
текстов, встраивание интерпретатора в игры, программирование
GUI и быстрая разработка приложений(RAD).
И, конечно же, Python используется для программирования web-
приложений — серверных, клиентских, web-серверов и серверов
приложений.
Python и приложения, написанные на нем, используют самые
известные и крупные фирмы — IBM, Yahoo!, Google.com, Hewlett
Packard, NASA, Red Hat, Microsoft.
C++ COREHARD WINTER 2017 // МОТИВАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
СПРАВКА
9
C++ Python
компиляция интерпретация
статическая типизация динамическая типизация
строгая типизация строгая типизация
сложный для изучения? лёгкий для изучения?
эффективное управление памятью сборщик мусора
есть стандартная библиотека мощная стандартная библиотека
С++xx…;) рефлексия и интроспекция
высокая производительность кода высокая производительность
разработчика
C++ COREHARD WINTER 2017 // МОТИВАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
СРАВНЕНИЕ C++ и PYTHON
10
C++ COREHARD WINTER 2017 // МОТИВАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
СРАВНЕНИЕ C++ И PYTHON
11
C++ COREHARD WINTER 2017 // МОТИВАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
ПОЛОЖИТЕЛЬНЫЕ СТОРОНЫ
1. С++:
a. Производительность
b. Эффективная работа с ресурсами
2. Python:
a. Скорость разработки
b. Разнообразие доступных решений
c. Лёгкость изучения
12
C++ COREHARD WINTER 2017 // МОТИВАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
ИНТЕГРАЦИЯ
14
C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
РЕШЕНИЯ
Python
• ctypes – библиотека Python для импорта функций из внешних
библиотек
• cffi(C Foreign Function Interface) - механизм для импорта
функций из внешних библиотек, основанный использовании
на C-подобных деклараций
15
C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
РЕШЕНИЯ
Не совсем Python
• Cython- преобразуется в С/С++ код для последующей
компиляции и впоследствии может использоваться как
расширение стандартного Python или как независимое
приложение со встроенной библиотекой выполнения Cython.
• RPython (Restricted Python) - ограниченное подмножество
Python, статически типизирован, транслируется в языки С,
Java, CIL
16
C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
РЕШЕНИЯ
SWIG(Simplified Wrapper and Interface Generator)
• Без зависимостей (для запуска нужен один .exe), не нужны
целевые языки
• Доступен на многих платформах
• Поддерживает структуры С и классы С++
17
C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
РЕШЕНИЯ
18
C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
РЕШЕНИЯ
С & C++
• Python C API
• Boost.Python
• Pybind11
19
C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
Python C API
• Самая тесная интеграция с Python из всех возможных
• Лучшая производительность
• Нужно все время считать ссылки
• Нужно хорошо знать C
• Хорошо документирован
• Объемный
• Опасно использовать не понимая
20
C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
Python C API (пример)
21
C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
Python C API (пример)
22
C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
Python C API (встраивание)
23
C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
Boost.Python
• Позволяет небольшими усилиями экспортировать типы из C++
в Python
• Без сторонних утилит, только С++ компилятор
• Подходит для оборачивания сторонних библиотек без
изменения их кода)
• Extensions and embedding
24
C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
Boost.Python (пример)
char const* greet(){
return "hello, world";}
#include <boost/python.hpp>
BOOST_PYTHON_MODULE(hello_ext) {
using namespace boost::python;
def("greet", greet);
}
>>> import hello_ext
>>> print hello_ext.greet()
hello, world
25
C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
Boost.Python (пример)
struct World {
World(std::string msg): msg(msg) {} // added constructor
void set(std::string msg_) { this->msg = msg_; }
std::string greet() { return msg; }
std::string msg;
};
class_<World>("World", init<std::string>())
.def(init<double, double>())
.def("greet", &World::greet)
.def("set", &World::set);
26
C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
Pybind11
• Аналог Boost.Python
• Поддерживает STL и callback
• header only
27
C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
Pybind11
• Аналог Boost.Python
• Активно развивается
• Поддерживает STL и callback
• header only
28
C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
pybind11
ВЫВОДЫ
30
C++ COREHARD WINTER 2017 // ВЫВОДЫ
IGOR SADCHENKO // C++ COREHARD // 12.02.17
ВЫВОДЫ
• Python можно расширять С++ модулями для увеличения
производительности
• Python можно встраивать в С++ программы для упрощения
разработки
• Существует библиотеки для выполнения этих действий
СПАСИБО ЗА ВНИМАНИЕ!
IGOR SADCHENKO
software developer
+375 33 642 92 91
https://www.facebook.com/WargamingMinsk
ANY QUESTIONS?
igor.sadchenko@gmail.com
wargaming.com
https://www.linkedin.com/company/wargaming-net
Ad

More Related Content

Viewers also liked (16)

Диаграммы состояний и c++
Диаграммы состояний и c++Диаграммы состояний и c++
Диаграммы состояний и c++
corehard_by
 
C++ refelection and cats
C++ refelection and catsC++ refelection and cats
C++ refelection and cats
corehard_by
 
C++ references
C++ referencesC++ references
C++ references
corehard_by
 
Повседневный С++: алгоритмы и итераторы
Повседневный С++: алгоритмы и итераторы Повседневный С++: алгоритмы и итераторы
Повседневный С++: алгоритмы и итераторы
corehard_by
 
Oxygine 2 d objects,events,debug and resources
Oxygine 2 d objects,events,debug and resourcesOxygine 2 d objects,events,debug and resources
Oxygine 2 d objects,events,debug and resources
corehard_by
 
модели акторов в с++ миф или реальность
модели акторов в с++ миф или реальностьмодели акторов в с++ миф или реальность
модели акторов в с++ миф или реальность
corehard_by
 
Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++
Sergey Platonov
 
строим Microkernel architecture на базе паттерна pipes and filters
строим Microkernel architecture на базе паттерна pipes and filtersстроим Microkernel architecture на базе паттерна pipes and filters
строим Microkernel architecture на базе паттерна pipes and filters
corehard_by
 
шишки, набитые за 15 лет использования акторов в c++ v.001.3
шишки, набитые за 15 лет использования акторов в c++ v.001.3шишки, набитые за 15 лет использования акторов в c++ v.001.3
шишки, набитые за 15 лет использования акторов в c++ v.001.3
corehard_by
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
corehard_by
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Sergey Platonov
 
Антон Бикинеев, Reflection in C++Next
Антон Бикинеев,  Reflection in C++NextАнтон Бикинеев,  Reflection in C++Next
Антон Бикинеев, Reflection in C++Next
Sergey Platonov
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines
Sergey Zubkov
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Sergey Platonov
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Sergey Platonov
 
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against itEvgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
Sergey Platonov
 
Диаграммы состояний и c++
Диаграммы состояний и c++Диаграммы состояний и c++
Диаграммы состояний и c++
corehard_by
 
C++ refelection and cats
C++ refelection and catsC++ refelection and cats
C++ refelection and cats
corehard_by
 
Повседневный С++: алгоритмы и итераторы
Повседневный С++: алгоритмы и итераторы Повседневный С++: алгоритмы и итераторы
Повседневный С++: алгоритмы и итераторы
corehard_by
 
Oxygine 2 d objects,events,debug and resources
Oxygine 2 d objects,events,debug and resourcesOxygine 2 d objects,events,debug and resources
Oxygine 2 d objects,events,debug and resources
corehard_by
 
модели акторов в с++ миф или реальность
модели акторов в с++ миф или реальностьмодели акторов в с++ миф или реальность
модели акторов в с++ миф или реальность
corehard_by
 
Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++
Sergey Platonov
 
строим Microkernel architecture на базе паттерна pipes and filters
строим Microkernel architecture на базе паттерна pipes and filtersстроим Microkernel architecture на базе паттерна pipes and filters
строим Microkernel architecture на базе паттерна pipes and filters
corehard_by
 
шишки, набитые за 15 лет использования акторов в c++ v.001.3
шишки, набитые за 15 лет использования акторов в c++ v.001.3шишки, набитые за 15 лет использования акторов в c++ v.001.3
шишки, набитые за 15 лет использования акторов в c++ v.001.3
corehard_by
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
corehard_by
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Sergey Platonov
 
Антон Бикинеев, Reflection in C++Next
Антон Бикинеев,  Reflection in C++NextАнтон Бикинеев,  Reflection in C++Next
Антон Бикинеев, Reflection in C++Next
Sergey Platonov
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines
Sergey Zubkov
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Sergey Platonov
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Sergey Platonov
 
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against itEvgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
Sergey Platonov
 

Similar to Mixing c++ and python (20)

[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)
Alexander Bausk
 
Отладка в Python: 2016 edition
Отладка в Python: 2016 editionОтладка в Python: 2016 edition
Отладка в Python: 2016 edition
Кирилл Борисов
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
Python Meetup
 
Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016
Nikita Baksalyar
 
Наиболее интересные технологические нововведения IBM i
Наиболее интересные технологические нововведения IBM iНаиболее интересные технологические нововведения IBM i
Наиболее интересные технологические нововведения IBM i
Aliaksei Hlinski
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
Alexander Granin
 
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest
 
Platypus platform ivbit
Platypus platform ivbitPlatypus platform ivbit
Platypus platform ivbit
jskonst
 
ekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
ekbpy'2012 - Марк Коренберг - Системное программирование на Питонеekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
ekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
it-people
 
DevOps для 1С
DevOps для 1СDevOps для 1С
DevOps для 1С
Alexey Lustin
 
[Add 4] crossplatform .net
[Add 4] crossplatform .net[Add 4] crossplatform .net
[Add 4] crossplatform .net
Stanislav Sidristy
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Anthony Marchenko
 
CodeFest 2014. Коновалов А., Шкурко Д. — Разработка и оптимизация приложений ...
CodeFest 2014. Коновалов А., Шкурко Д. — Разработка и оптимизация приложений ...CodeFest 2014. Коновалов А., Шкурко Д. — Разработка и оптимизация приложений ...
CodeFest 2014. Коновалов А., Шкурко Д. — Разработка и оптимизация приложений ...
CodeFest
 
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
IT Event
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON
 
2016-09-17 02 Игорь Гончаровский. Техническая и программная сторона VoIP
2016-09-17 02 Игорь Гончаровский. Техническая и программная сторона VoIP2016-09-17 02 Игорь Гончаровский. Техническая и программная сторона VoIP
2016-09-17 02 Игорь Гончаровский. Техническая и программная сторона VoIP
Омские ИТ-субботники
 
Hunting for a C++ package manager
Hunting for a C++ package managerHunting for a C++ package manager
Hunting for a C++ package manager
corehard_by
 
Акторы на C++: стоило ли оно того?
Акторы на C++: стоило ли оно того?Акторы на C++: стоило ли оно того?
Акторы на C++: стоило ли оно того?
Yauheni Akhotnikau
 
Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)
IT-Доминанта
 
Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...
Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...
Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...
Tech Talks @NSU
 
[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)
Alexander Bausk
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
Python Meetup
 
Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016
Nikita Baksalyar
 
Наиболее интересные технологические нововведения IBM i
Наиболее интересные технологические нововведения IBM iНаиболее интересные технологические нововведения IBM i
Наиболее интересные технологические нововведения IBM i
Aliaksei Hlinski
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
Alexander Granin
 
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest
 
Platypus platform ivbit
Platypus platform ivbitPlatypus platform ivbit
Platypus platform ivbit
jskonst
 
ekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
ekbpy'2012 - Марк Коренберг - Системное программирование на Питонеekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
ekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
it-people
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Anthony Marchenko
 
CodeFest 2014. Коновалов А., Шкурко Д. — Разработка и оптимизация приложений ...
CodeFest 2014. Коновалов А., Шкурко Д. — Разработка и оптимизация приложений ...CodeFest 2014. Коновалов А., Шкурко Д. — Разработка и оптимизация приложений ...
CodeFest 2014. Коновалов А., Шкурко Д. — Разработка и оптимизация приложений ...
CodeFest
 
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
IT Event
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON
 
2016-09-17 02 Игорь Гончаровский. Техническая и программная сторона VoIP
2016-09-17 02 Игорь Гончаровский. Техническая и программная сторона VoIP2016-09-17 02 Игорь Гончаровский. Техническая и программная сторона VoIP
2016-09-17 02 Игорь Гончаровский. Техническая и программная сторона VoIP
Омские ИТ-субботники
 
Hunting for a C++ package manager
Hunting for a C++ package managerHunting for a C++ package manager
Hunting for a C++ package manager
corehard_by
 
Акторы на C++: стоило ли оно того?
Акторы на C++: стоило ли оно того?Акторы на C++: стоило ли оно того?
Акторы на C++: стоило ли оно того?
Yauheni Akhotnikau
 
Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)
IT-Доминанта
 
Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...
Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...
Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...
Tech Talks @NSU
 
Ad

More from corehard_by (20)

C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
corehard_by
 
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...
corehard_by
 
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотников
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений ОхотниковC++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотников
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотников
corehard_by
 
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титов
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр ТитовC++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титов
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титов
corehard_by
 
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
corehard_by
 
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
corehard_by
 
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
corehard_by
 
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
corehard_by
 
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
corehard_by
 
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
corehard_by
 
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
corehard_by
 
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
corehard_by
 
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филонов
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел ФилоновC++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филонов
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филонов
corehard_by
 
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukić
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan ČukićC++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukić
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukić
corehard_by
 
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia KazakovaC++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
corehard_by
 
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон ПолухинC++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
corehard_by
 
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
corehard_by
 
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
corehard_by
 
Как помочь и как помешать компилятору. Андрей Олейников ➠ CoreHard Autumn 2019
Как помочь и как помешать компилятору. Андрей Олейников ➠  CoreHard Autumn 2019Как помочь и как помешать компилятору. Андрей Олейников ➠  CoreHard Autumn 2019
Как помочь и как помешать компилятору. Андрей Олейников ➠ CoreHard Autumn 2019
corehard_by
 
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
corehard_by
 
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
corehard_by
 
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...
corehard_by
 
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотников
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений ОхотниковC++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотников
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотников
corehard_by
 
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титов
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр ТитовC++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титов
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титов
corehard_by
 
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
corehard_by
 
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
corehard_by
 
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
corehard_by
 
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
corehard_by
 
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
corehard_by
 
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
corehard_by
 
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
corehard_by
 
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
corehard_by
 
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филонов
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел ФилоновC++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филонов
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филонов
corehard_by
 
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukić
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan ČukićC++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukić
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukić
corehard_by
 
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia KazakovaC++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
corehard_by
 
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон ПолухинC++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
corehard_by
 
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
corehard_by
 
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
corehard_by
 
Как помочь и как помешать компилятору. Андрей Олейников ➠ CoreHard Autumn 2019
Как помочь и как помешать компилятору. Андрей Олейников ➠  CoreHard Autumn 2019Как помочь и как помешать компилятору. Андрей Олейников ➠  CoreHard Autumn 2019
Как помочь и как помешать компилятору. Андрей Олейников ➠ CoreHard Autumn 2019
corehard_by
 
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
corehard_by
 
Ad

Mixing c++ and python

  • 1. СОЕДИНЯЕМ C++ И PYTHON ИГОРЬ САДЧЕНКО [email protected]
  • 3. 2 Использование как предметно-ориентированный язык для конкретной области применения(DSL) Высокоуровневая разработка(VHLL) Быстрое разработка и прототипирование приложений(RAD) Встраивание интерактивной среды (REPL) Разработка графического интерфейса пользователя (GUI) Тестирование C++ COREHARD WINTER 2017 // МОТИВАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 ЗАЧЕМ
  • 4. 3 Extensions. Написание расширений для Python на С++ • улучшение производительности • портирование существующих библиотек • интеграция различных компонентов Embedding. Встраивание Python в С++ программы • упрощение разработки • дополнительных возможности C++ COREHARD WINTER 2017 // МОТИВАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 СПОСОБЫ
  • 5. 4 C++ COREHARD WINTER 2017 // МОТИВАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 НАШ ПУТЬ
  • 7. 6 Python — это свободный интерпретируемый объектно-ориентированный расширяемый встраиваемый язык программирования очень высокого уровня. • свободный — все исходные тексты интерпретатора и библиотек доступны для любого, включая коммерческое, использования; • интерпретируемый — поэтому кроссплатформенный, имеет рефлексию; • объектно-ориентированный — классическая OO модель, включая множественное наследование; • расширяемый — имеет API для создания модулей, типов и классов на C, C++; • встраиваемый — имеет API для встраивания интерпретатора в другие программы; • очень высокого уровня — динамическая типизация, встроенные типы данных высокого уровня, классы, модули, механизм исключений. C++ COREHARD WINTER 2017 // МОТИВАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 СПРАВКА
  • 8. 7 Python ориентирован на повышение производительности разработчика и читаемости кода. В Python есть дзен (import this), описывающий общие подходы к разработке. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций. Python активно развивается и имеет огромное community. К недостаткам относят низкую производительность и отсутствие реальной многопоточности(GIL) C++ COREHARD WINTER 2017 // МОТИВАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 СПРАВКА
  • 9. 8 Python — язык универсальный, он широко используется во всем мире для самых разных целей — базы данных и обработка текстов, встраивание интерпретатора в игры, программирование GUI и быстрая разработка приложений(RAD). И, конечно же, Python используется для программирования web- приложений — серверных, клиентских, web-серверов и серверов приложений. Python и приложения, написанные на нем, используют самые известные и крупные фирмы — IBM, Yahoo!, Google.com, Hewlett Packard, NASA, Red Hat, Microsoft. C++ COREHARD WINTER 2017 // МОТИВАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 СПРАВКА
  • 10. 9 C++ Python компиляция интерпретация статическая типизация динамическая типизация строгая типизация строгая типизация сложный для изучения? лёгкий для изучения? эффективное управление памятью сборщик мусора есть стандартная библиотека мощная стандартная библиотека С++xx…;) рефлексия и интроспекция высокая производительность кода высокая производительность разработчика C++ COREHARD WINTER 2017 // МОТИВАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 СРАВНЕНИЕ C++ и PYTHON
  • 11. 10 C++ COREHARD WINTER 2017 // МОТИВАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 СРАВНЕНИЕ C++ И PYTHON
  • 12. 11 C++ COREHARD WINTER 2017 // МОТИВАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 ПОЛОЖИТЕЛЬНЫЕ СТОРОНЫ 1. С++: a. Производительность b. Эффективная работа с ресурсами 2. Python: a. Скорость разработки b. Разнообразие доступных решений c. Лёгкость изучения
  • 13. 12 C++ COREHARD WINTER 2017 // МОТИВАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17
  • 15. 14 C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 РЕШЕНИЯ Python • ctypes – библиотека Python для импорта функций из внешних библиотек • cffi(C Foreign Function Interface) - механизм для импорта функций из внешних библиотек, основанный использовании на C-подобных деклараций
  • 16. 15 C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 РЕШЕНИЯ Не совсем Python • Cython- преобразуется в С/С++ код для последующей компиляции и впоследствии может использоваться как расширение стандартного Python или как независимое приложение со встроенной библиотекой выполнения Cython. • RPython (Restricted Python) - ограниченное подмножество Python, статически типизирован, транслируется в языки С, Java, CIL
  • 17. 16 C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 РЕШЕНИЯ SWIG(Simplified Wrapper and Interface Generator) • Без зависимостей (для запуска нужен один .exe), не нужны целевые языки • Доступен на многих платформах • Поддерживает структуры С и классы С++
  • 18. 17 C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 РЕШЕНИЯ
  • 19. 18 C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 РЕШЕНИЯ С & C++ • Python C API • Boost.Python • Pybind11
  • 20. 19 C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 Python C API • Самая тесная интеграция с Python из всех возможных • Лучшая производительность • Нужно все время считать ссылки • Нужно хорошо знать C • Хорошо документирован • Объемный • Опасно использовать не понимая
  • 21. 20 C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 Python C API (пример)
  • 22. 21 C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 Python C API (пример)
  • 23. 22 C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 Python C API (встраивание)
  • 24. 23 C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 Boost.Python • Позволяет небольшими усилиями экспортировать типы из C++ в Python • Без сторонних утилит, только С++ компилятор • Подходит для оборачивания сторонних библиотек без изменения их кода) • Extensions and embedding
  • 25. 24 C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 Boost.Python (пример) char const* greet(){ return "hello, world";} #include <boost/python.hpp> BOOST_PYTHON_MODULE(hello_ext) { using namespace boost::python; def("greet", greet); } >>> import hello_ext >>> print hello_ext.greet() hello, world
  • 26. 25 C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 Boost.Python (пример) struct World { World(std::string msg): msg(msg) {} // added constructor void set(std::string msg_) { this->msg = msg_; } std::string greet() { return msg; } std::string msg; }; class_<World>("World", init<std::string>()) .def(init<double, double>()) .def("greet", &World::greet) .def("set", &World::set);
  • 27. 26 C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 Pybind11 • Аналог Boost.Python • Поддерживает STL и callback • header only
  • 28. 27 C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 Pybind11 • Аналог Boost.Python • Активно развивается • Поддерживает STL и callback • header only
  • 29. 28 C++ COREHARD WINTER 2017 // ИНТЕГРАЦИЯ IGOR SADCHENKO // C++ COREHARD // 12.02.17 pybind11
  • 31. 30 C++ COREHARD WINTER 2017 // ВЫВОДЫ IGOR SADCHENKO // C++ COREHARD // 12.02.17 ВЫВОДЫ • Python можно расширять С++ модулями для увеличения производительности • Python можно встраивать в С++ программы для упрощения разработки • Существует библиотеки для выполнения этих действий
  • 33. IGOR SADCHENKO software developer +375 33 642 92 91 https://www.facebook.com/WargamingMinsk ANY QUESTIONS? [email protected] wargaming.com https://www.linkedin.com/company/wargaming-net