Встраивание python в мобильные приложения – нюансы...
TRANSCRIPT
![Page 1: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/1.jpg)
Встраивание Python в мобильныеприложения
нюансы interoperation, новые приемы разработки
Никита Лесников
![Page 2: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/2.jpg)
Дисклеймер
I Доклад носит общий характер, без нюансовотдельных платформ
I Все описанные решения не “коробочные”, чтобывелосипед поехал, надо существеннопоработать напильником
I В простых случаях, где нетмногоплатформенности или серверной части,многие описанные решения будут оверкилльны
I Не смущает вышесказанное? Тогда поехали...
![Page 3: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/3.jpg)
Дисклеймер
I Доклад носит общий характер, без нюансовотдельных платформ
I Все описанные решения не “коробочные”, чтобывелосипед поехал, надо существеннопоработать напильником
I В простых случаях, где нетмногоплатформенности или серверной части,многие описанные решения будут оверкилльны
I Не смущает вышесказанное? Тогда поехали...
![Page 4: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/4.jpg)
Дисклеймер
I Доклад носит общий характер, без нюансовотдельных платформ
I Все описанные решения не “коробочные”, чтобывелосипед поехал, надо существеннопоработать напильником
I В простых случаях, где нетмногоплатформенности или серверной части,многие описанные решения будут оверкилльны
I Не смущает вышесказанное? Тогда поехали...
![Page 5: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/5.jpg)
Дисклеймер
I Доклад носит общий характер, без нюансовотдельных платформ
I Все описанные решения не “коробочные”, чтобывелосипед поехал, надо существеннопоработать напильником
I В простых случаях, где нетмногоплатформенности или серверной части,многие описанные решения будут оверкилльны
I Не смущает вышесказанное? Тогда поехали...
![Page 6: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/6.jpg)
Зоопарк ЯП
I Языки программирования не являются “вещью всебе”
I Часто область применения определяет больше,нежели синтаксис или дисциплина типизации
I В отдельных областях de facto сложилисьрешения, от которых отойти нельзя при всехкажущихся недостатках
![Page 7: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/7.jpg)
Зоопарк ЯП
I Языки программирования не являются “вещью всебе”
I Часто область применения определяет больше,нежели синтаксис или дисциплина типизации
I В отдельных областях de facto сложилисьрешения, от которых отойти нельзя при всехкажущихся недостатках
![Page 8: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/8.jpg)
Зоопарк ЯП
I Языки программирования не являются “вещью всебе”
I Часто область применения определяет больше,нежели синтаксис или дисциплина типизации
I В отдельных областях de facto сложилисьрешения, от которых отойти нельзя при всехкажущихся недостатках
![Page 9: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/9.jpg)
Web - классический пример
I Сколько языков необходимо, чтобы создатьтипичное веб-приложение?
I Попробуем посчитать:
1. HTML - разметка страниц2. CSS - стилизация страниц3. JavaScript - клиентское скриптование4. Что угодно еще - серверная часть
I Четыре языка для описания одной сущности!I Организационный кошмарI Повторное использование кода невозможно
![Page 10: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/10.jpg)
Web - классический пример
I Сколько языков необходимо, чтобы создатьтипичное веб-приложение?
I Попробуем посчитать:
1. HTML - разметка страниц2. CSS - стилизация страниц3. JavaScript - клиентское скриптование4. Что угодно еще - серверная часть
I Четыре языка для описания одной сущности!I Организационный кошмарI Повторное использование кода невозможно
![Page 11: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/11.jpg)
Web - классический пример
I Сколько языков необходимо, чтобы создатьтипичное веб-приложение?
I Попробуем посчитать:1. HTML - разметка страниц
2. CSS - стилизация страниц3. JavaScript - клиентское скриптование4. Что угодно еще - серверная часть
I Четыре языка для описания одной сущности!I Организационный кошмарI Повторное использование кода невозможно
![Page 12: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/12.jpg)
Web - классический пример
I Сколько языков необходимо, чтобы создатьтипичное веб-приложение?
I Попробуем посчитать:1. HTML - разметка страниц2. CSS - стилизация страниц
3. JavaScript - клиентское скриптование4. Что угодно еще - серверная часть
I Четыре языка для описания одной сущности!I Организационный кошмарI Повторное использование кода невозможно
![Page 13: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/13.jpg)
Web - классический пример
I Сколько языков необходимо, чтобы создатьтипичное веб-приложение?
I Попробуем посчитать:1. HTML - разметка страниц2. CSS - стилизация страниц3. JavaScript - клиентское скриптование
4. Что угодно еще - серверная частьI Четыре языка для описания одной сущности!I Организационный кошмарI Повторное использование кода невозможно
![Page 14: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/14.jpg)
Web - классический пример
I Сколько языков необходимо, чтобы создатьтипичное веб-приложение?
I Попробуем посчитать:1. HTML - разметка страниц2. CSS - стилизация страниц3. JavaScript - клиентское скриптование4. Что угодно еще - серверная часть
I Четыре языка для описания одной сущности!I Организационный кошмарI Повторное использование кода невозможно
![Page 15: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/15.jpg)
Web - классический пример
I Сколько языков необходимо, чтобы создатьтипичное веб-приложение?
I Попробуем посчитать:1. HTML - разметка страниц2. CSS - стилизация страниц3. JavaScript - клиентское скриптование4. Что угодно еще - серверная часть
I Четыре языка для описания одной сущности!
I Организационный кошмарI Повторное использование кода невозможно
![Page 16: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/16.jpg)
Web - классический пример
I Сколько языков необходимо, чтобы создатьтипичное веб-приложение?
I Попробуем посчитать:1. HTML - разметка страниц2. CSS - стилизация страниц3. JavaScript - клиентское скриптование4. Что угодно еще - серверная часть
I Четыре языка для описания одной сущности!I Организационный кошмар
I Повторное использование кода невозможно
![Page 17: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/17.jpg)
Web - классический пример
I Сколько языков необходимо, чтобы создатьтипичное веб-приложение?
I Попробуем посчитать:1. HTML - разметка страниц2. CSS - стилизация страниц3. JavaScript - клиентское скриптование4. Что угодно еще - серверная часть
I Четыре языка для описания одной сущности!I Организационный кошмарI Повторное использование кода невозможно
![Page 18: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/18.jpg)
Web - попытки решить проблему
I node.js - возможность разработки сервернойлогики на JavaScript (позволяет code reuseмежду клиентской и серверной частями)
I шаблонизаторы - отделяют HTML-код страницыот ее логического представления, делаявозможным смену представления без правкибизнес-логики
I Объективные качества упомянутых подходовлежат за рамками этого доклада
![Page 19: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/19.jpg)
Web - попытки решить проблему
I node.js - возможность разработки сервернойлогики на JavaScript (позволяет code reuseмежду клиентской и серверной частями)
I шаблонизаторы - отделяют HTML-код страницыот ее логического представления, делаявозможным смену представления без правкибизнес-логики
I Объективные качества упомянутых подходовлежат за рамками этого доклада
![Page 20: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/20.jpg)
Web - попытки решить проблему
I node.js - возможность разработки сервернойлогики на JavaScript (позволяет code reuseмежду клиентской и серверной частями)
I шаблонизаторы - отделяют HTML-код страницыот ее логического представления, делаявозможным смену представления без правкибизнес-логики
I Объективные качества упомянутых подходовлежат за рамками этого доклада
![Page 21: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/21.jpg)
Мобильная разработка чем-то похожа...I Авторы кроссплатформенных приложений длямобильных платформ сталкиваются с (почти тойже) проблемой
I Разве что код надо переписывать один и тот жена разных языках, а не компоновать единыйпроект из разнородных кусочков
I Java, Objective-C и C++ достаточно различны,чтобы сделать автоматическое портированиедостаточно нетривиальным
I Даже поддержка native code многого негарантирует - Objective-C++ не совместим науровне лексера с C++03, на Androidnon-POSIX-compliant-libc
I Если у проекта есть серверная часть,добавляются “языковые проблемы веба”
![Page 22: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/22.jpg)
Мобильная разработка чем-то похожа...I Авторы кроссплатформенных приложений длямобильных платформ сталкиваются с (почти тойже) проблемой
I Разве что код надо переписывать один и тот жена разных языках, а не компоновать единыйпроект из разнородных кусочков
I Java, Objective-C и C++ достаточно различны,чтобы сделать автоматическое портированиедостаточно нетривиальным
I Даже поддержка native code многого негарантирует - Objective-C++ не совместим науровне лексера с C++03, на Androidnon-POSIX-compliant-libc
I Если у проекта есть серверная часть,добавляются “языковые проблемы веба”
![Page 23: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/23.jpg)
Мобильная разработка чем-то похожа...I Авторы кроссплатформенных приложений длямобильных платформ сталкиваются с (почти тойже) проблемой
I Разве что код надо переписывать один и тот жена разных языках, а не компоновать единыйпроект из разнородных кусочков
I Java, Objective-C и C++ достаточно различны,чтобы сделать автоматическое портированиедостаточно нетривиальным
I Даже поддержка native code многого негарантирует - Objective-C++ не совместим науровне лексера с C++03, на Androidnon-POSIX-compliant-libc
I Если у проекта есть серверная часть,добавляются “языковые проблемы веба”
![Page 24: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/24.jpg)
Мобильная разработка чем-то похожа...I Авторы кроссплатформенных приложений длямобильных платформ сталкиваются с (почти тойже) проблемой
I Разве что код надо переписывать один и тот жена разных языках, а не компоновать единыйпроект из разнородных кусочков
I Java, Objective-C и C++ достаточно различны,чтобы сделать автоматическое портированиедостаточно нетривиальным
I Даже поддержка native code многого негарантирует - Objective-C++ не совместим науровне лексера с C++03, на Androidnon-POSIX-compliant-libc
I Если у проекта есть серверная часть,добавляются “языковые проблемы веба”
![Page 25: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/25.jpg)
Мобильная разработка чем-то похожа...I Авторы кроссплатформенных приложений длямобильных платформ сталкиваются с (почти тойже) проблемой
I Разве что код надо переписывать один и тот жена разных языках, а не компоновать единыйпроект из разнородных кусочков
I Java, Objective-C и C++ достаточно различны,чтобы сделать автоматическое портированиедостаточно нетривиальным
I Даже поддержка native code многого негарантирует - Objective-C++ не совместим науровне лексера с C++03, на Androidnon-POSIX-compliant-libc
I Если у проекта есть серверная часть,добавляются “языковые проблемы веба”
![Page 26: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/26.jpg)
...однако и чем-то различна
I У всех платформ современных смартфонов, заисключением Windows Phone 7, есть-таки общаячерта
I Как ни странно, это ANSI CI Objective-C является его прямымнадмножеством, у Android с C изначально всехорошо
I Разве что как язык C не слишкомвоодушевляющ - подсчет битов являетсяпоследним делом, которым хочется заниматьсяв большом кроссплатформенном проекте с и такограниченными ресурсами
I Особенно, когда “высвободившаяся”производительность изначально не нужна
![Page 27: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/27.jpg)
...однако и чем-то различна
I У всех платформ современных смартфонов, заисключением Windows Phone 7, есть-таки общаячерта
I Как ни странно, это ANSI C
I Objective-C является его прямымнадмножеством, у Android с C изначально всехорошо
I Разве что как язык C не слишкомвоодушевляющ - подсчет битов являетсяпоследним делом, которым хочется заниматьсяв большом кроссплатформенном проекте с и такограниченными ресурсами
I Особенно, когда “высвободившаяся”производительность изначально не нужна
![Page 28: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/28.jpg)
...однако и чем-то различна
I У всех платформ современных смартфонов, заисключением Windows Phone 7, есть-таки общаячерта
I Как ни странно, это ANSI CI Objective-C является его прямымнадмножеством, у Android с C изначально всехорошо
I Разве что как язык C не слишкомвоодушевляющ - подсчет битов являетсяпоследним делом, которым хочется заниматьсяв большом кроссплатформенном проекте с и такограниченными ресурсами
I Особенно, когда “высвободившаяся”производительность изначально не нужна
![Page 29: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/29.jpg)
...однако и чем-то различна
I У всех платформ современных смартфонов, заисключением Windows Phone 7, есть-таки общаячерта
I Как ни странно, это ANSI CI Objective-C является его прямымнадмножеством, у Android с C изначально всехорошо
I Разве что как язык C не слишкомвоодушевляющ - подсчет битов являетсяпоследним делом, которым хочется заниматьсяв большом кроссплатформенном проекте с и такограниченными ресурсами
I Особенно, когда “высвободившаяся”производительность изначально не нужна
![Page 30: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/30.jpg)
...однако и чем-то различна
I У всех платформ современных смартфонов, заисключением Windows Phone 7, есть-таки общаячерта
I Как ни странно, это ANSI CI Objective-C является его прямымнадмножеством, у Android с C изначально всехорошо
I Разве что как язык C не слишкомвоодушевляющ - подсчет битов являетсяпоследним делом, которым хочется заниматьсяв большом кроссплатформенном проекте с и такограниченными ресурсами
I Особенно, когда “высвободившаяся”производительность изначально не нужна
![Page 31: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/31.jpg)
Казалось бы, причем тут Python?
I Python - интерпретируемый высокоуровневыйязык с динамической типизацией
I ООП, интроспекция, метапрограммирование -все в наличии
I Куча крутых библиотек, в том числе в базовойпоставке (что отражено в девизе - batteriesincluded)
I Простой API для C, что автоматически означаетпростой API для чего угодно
I Весь рантайм также написан на С ипредставляет из себя самодостаточную системудля разработки, отладки и выполнения кода
I Этот самый “весь рантайм” можно сделатьчастью вашего приложения
![Page 32: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/32.jpg)
Казалось бы, причем тут Python?
I Python - интерпретируемый высокоуровневыйязык с динамической типизацией
I ООП, интроспекция, метапрограммирование -все в наличии
I Куча крутых библиотек, в том числе в базовойпоставке (что отражено в девизе - batteriesincluded)
I Простой API для C, что автоматически означаетпростой API для чего угодно
I Весь рантайм также написан на С ипредставляет из себя самодостаточную системудля разработки, отладки и выполнения кода
I Этот самый “весь рантайм” можно сделатьчастью вашего приложения
![Page 33: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/33.jpg)
Казалось бы, причем тут Python?
I Python - интерпретируемый высокоуровневыйязык с динамической типизацией
I ООП, интроспекция, метапрограммирование -все в наличии
I Куча крутых библиотек, в том числе в базовойпоставке (что отражено в девизе - batteriesincluded)
I Простой API для C, что автоматически означаетпростой API для чего угодно
I Весь рантайм также написан на С ипредставляет из себя самодостаточную системудля разработки, отладки и выполнения кода
I Этот самый “весь рантайм” можно сделатьчастью вашего приложения
![Page 34: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/34.jpg)
Казалось бы, причем тут Python?
I Python - интерпретируемый высокоуровневыйязык с динамической типизацией
I ООП, интроспекция, метапрограммирование -все в наличии
I Куча крутых библиотек, в том числе в базовойпоставке (что отражено в девизе - batteriesincluded)
I Простой API для C, что автоматически означаетпростой API для чего угодно
I Весь рантайм также написан на С ипредставляет из себя самодостаточную системудля разработки, отладки и выполнения кода
I Этот самый “весь рантайм” можно сделатьчастью вашего приложения
![Page 35: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/35.jpg)
Казалось бы, причем тут Python?
I Python - интерпретируемый высокоуровневыйязык с динамической типизацией
I ООП, интроспекция, метапрограммирование -все в наличии
I Куча крутых библиотек, в том числе в базовойпоставке (что отражено в девизе - batteriesincluded)
I Простой API для C, что автоматически означаетпростой API для чего угодно
I Весь рантайм также написан на С ипредставляет из себя самодостаточную системудля разработки, отладки и выполнения кода
I Этот самый “весь рантайм” можно сделатьчастью вашего приложения
![Page 36: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/36.jpg)
Казалось бы, причем тут Python?
I Python - интерпретируемый высокоуровневыйязык с динамической типизацией
I ООП, интроспекция, метапрограммирование -все в наличии
I Куча крутых библиотек, в том числе в базовойпоставке (что отражено в девизе - batteriesincluded)
I Простой API для C, что автоматически означаетпростой API для чего угодно
I Весь рантайм также написан на С ипредставляет из себя самодостаточную системудля разработки, отладки и выполнения кода
I Этот самый “весь рантайм” можно сделатьчастью вашего приложения
![Page 37: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/37.jpg)
Как это можно использовать?
I Писать на Python большую частьслабокритичного к платформенным нюансам ипроизводительности кода
I Как следствие, нативная и/илиплатформозависимая часть сократится
I Общее количество кода станет сильно меньше,что всегда хорошо
I При адекватном подходе производительностьбудет более чем приемлимой
![Page 38: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/38.jpg)
Как это можно использовать?
I Писать на Python большую частьслабокритичного к платформенным нюансам ипроизводительности кода
I Как следствие, нативная и/илиплатформозависимая часть сократится
I Общее количество кода станет сильно меньше,что всегда хорошо
I При адекватном подходе производительностьбудет более чем приемлимой
![Page 39: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/39.jpg)
Как это можно использовать?
I Писать на Python большую частьслабокритичного к платформенным нюансам ипроизводительности кода
I Как следствие, нативная и/илиплатформозависимая часть сократится
I Общее количество кода станет сильно меньше,что всегда хорошо
I При адекватном подходе производительностьбудет более чем приемлимой
![Page 40: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/40.jpg)
Как это можно использовать?
I Писать на Python большую частьслабокритичного к платформенным нюансам ипроизводительности кода
I Как следствие, нативная и/илиплатформозависимая часть сократится
I Общее количество кода станет сильно меньше,что всегда хорошо
I При адекватном подходе производительностьбудет более чем приемлимой
![Page 41: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/41.jpg)
Почему именно Python?I Больше вопрос вкуса
I Хорошая альтернатива - Lua, легчевстраивается, но и стандартная библитекапоменьше (“из коробки” ее фактически нет)
I Python очень консистентен и предсказуем -“неожиданностей” не бывает почти никогда придолжном понимании основных концепций
I “Должное понимание” - не некое абстрактноепонятие, как, например, мифическое “хорошеезнание C++”, оно вполне достижимо за оченьограниченный срок
I По опыту wargaming.net, программисты безпрежнего знания Python, но с сильнымбэкграундом в других областях, осваиваются засчитанные дни
![Page 42: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/42.jpg)
Почему именно Python?I Больше вопрос вкусаI Хорошая альтернатива - Lua, легчевстраивается, но и стандартная библитекапоменьше (“из коробки” ее фактически нет)
I Python очень консистентен и предсказуем -“неожиданностей” не бывает почти никогда придолжном понимании основных концепций
I “Должное понимание” - не некое абстрактноепонятие, как, например, мифическое “хорошеезнание C++”, оно вполне достижимо за оченьограниченный срок
I По опыту wargaming.net, программисты безпрежнего знания Python, но с сильнымбэкграундом в других областях, осваиваются засчитанные дни
![Page 43: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/43.jpg)
Почему именно Python?I Больше вопрос вкусаI Хорошая альтернатива - Lua, легчевстраивается, но и стандартная библитекапоменьше (“из коробки” ее фактически нет)
I Python очень консистентен и предсказуем -“неожиданностей” не бывает почти никогда придолжном понимании основных концепций
I “Должное понимание” - не некое абстрактноепонятие, как, например, мифическое “хорошеезнание C++”, оно вполне достижимо за оченьограниченный срок
I По опыту wargaming.net, программисты безпрежнего знания Python, но с сильнымбэкграундом в других областях, осваиваются засчитанные дни
![Page 44: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/44.jpg)
Почему именно Python?I Больше вопрос вкусаI Хорошая альтернатива - Lua, легчевстраивается, но и стандартная библитекапоменьше (“из коробки” ее фактически нет)
I Python очень консистентен и предсказуем -“неожиданностей” не бывает почти никогда придолжном понимании основных концепций
I “Должное понимание” - не некое абстрактноепонятие, как, например, мифическое “хорошеезнание C++”, оно вполне достижимо за оченьограниченный срок
I По опыту wargaming.net, программисты безпрежнего знания Python, но с сильнымбэкграундом в других областях, осваиваются засчитанные дни
![Page 45: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/45.jpg)
Почему именно Python?I Больше вопрос вкусаI Хорошая альтернатива - Lua, легчевстраивается, но и стандартная библитекапоменьше (“из коробки” ее фактически нет)
I Python очень консистентен и предсказуем -“неожиданностей” не бывает почти никогда придолжном понимании основных концепций
I “Должное понимание” - не некое абстрактноепонятие, как, например, мифическое “хорошеезнание C++”, оно вполне достижимо за оченьограниченный срок
I По опыту wargaming.net, программисты безпрежнего знания Python, но с сильнымбэкграундом в других областях, осваиваются засчитанные дни
![Page 46: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/46.jpg)
О чем я расскажу
I Цель - не перечислить написать referencemanual по embedding API, а показать одно извозможных решений целого спектра проблем
I Не знаете Python? Это не страшно, его знаниетут некритично - повествование больше науровне идей
I Мне тоже по ходу можно (и нужно) задаватьвопросы, если что-то непонятно
![Page 47: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/47.jpg)
О чем я расскажу
I Цель - не перечислить написать referencemanual по embedding API, а показать одно извозможных решений целого спектра проблем
I Не знаете Python? Это не страшно, его знаниетут некритично - повествование больше науровне идей
I Мне тоже по ходу можно (и нужно) задаватьвопросы, если что-то непонятно
![Page 48: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/48.jpg)
О чем я расскажу
I Цель - не перечислить написать referencemanual по embedding API, а показать одно извозможных решений целого спектра проблем
I Не знаете Python? Это не страшно, его знаниетут некритично - повествование больше науровне идей
I Мне тоже по ходу можно (и нужно) задаватьвопросы, если что-то непонятно
![Page 49: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/49.jpg)
Собственно по теме доклада :)I Берем source distribution c исходниками Python
I Собираем статическую библиотеку, отключиввсе ненужное
I “Все ненужное” - это почти все. И чем болеепочти, тем безболезненнее проходит сборка -core python собирается при помощи autotools икомпилятора C, без внешних зависимостейвообще
I Проблемы могут быть, но все решается быстрымпоиском по core development документации,stackoverflow и подобным ресурсам
I Большинство проблем лечатся ключами кconfigure
I Даже core сборка содержит много крутыхвещей (коллекции, регэкспы, хеши, даты,сериализацию, адекватный Unicode)
I Это всегда допустимый fallback
![Page 50: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/50.jpg)
Собственно по теме доклада :)I Берем source distribution c исходниками PythonI Собираем статическую библиотеку, отключиввсе ненужное
I “Все ненужное” - это почти все. И чем болеепочти, тем безболезненнее проходит сборка -core python собирается при помощи autotools икомпилятора C, без внешних зависимостейвообще
I Проблемы могут быть, но все решается быстрымпоиском по core development документации,stackoverflow и подобным ресурсам
I Большинство проблем лечатся ключами кconfigure
I Даже core сборка содержит много крутыхвещей (коллекции, регэкспы, хеши, даты,сериализацию, адекватный Unicode)
I Это всегда допустимый fallback
![Page 51: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/51.jpg)
Собственно по теме доклада :)I Берем source distribution c исходниками PythonI Собираем статическую библиотеку, отключиввсе ненужное
I “Все ненужное” - это почти все. И чем болеепочти, тем безболезненнее проходит сборка -core python собирается при помощи autotools икомпилятора C, без внешних зависимостейвообще
I Проблемы могут быть, но все решается быстрымпоиском по core development документации,stackoverflow и подобным ресурсам
I Большинство проблем лечатся ключами кconfigure
I Даже core сборка содержит много крутыхвещей (коллекции, регэкспы, хеши, даты,сериализацию, адекватный Unicode)
I Это всегда допустимый fallback
![Page 52: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/52.jpg)
Собственно по теме доклада :)I Берем source distribution c исходниками PythonI Собираем статическую библиотеку, отключиввсе ненужное
I “Все ненужное” - это почти все. И чем болеепочти, тем безболезненнее проходит сборка -core python собирается при помощи autotools икомпилятора C, без внешних зависимостейвообще
I Проблемы могут быть, но все решается быстрымпоиском по core development документации,stackoverflow и подобным ресурсам
I Большинство проблем лечатся ключами кconfigure
I Даже core сборка содержит много крутыхвещей (коллекции, регэкспы, хеши, даты,сериализацию, адекватный Unicode)
I Это всегда допустимый fallback
![Page 53: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/53.jpg)
Собственно по теме доклада :)I Берем source distribution c исходниками PythonI Собираем статическую библиотеку, отключиввсе ненужное
I “Все ненужное” - это почти все. И чем болеепочти, тем безболезненнее проходит сборка -core python собирается при помощи autotools икомпилятора C, без внешних зависимостейвообще
I Проблемы могут быть, но все решается быстрымпоиском по core development документации,stackoverflow и подобным ресурсам
I Большинство проблем лечатся ключами кconfigure
I Даже core сборка содержит много крутыхвещей (коллекции, регэкспы, хеши, даты,сериализацию, адекватный Unicode)
I Это всегда допустимый fallback
![Page 54: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/54.jpg)
Собственно по теме доклада :)I Берем source distribution c исходниками PythonI Собираем статическую библиотеку, отключиввсе ненужное
I “Все ненужное” - это почти все. И чем болеепочти, тем безболезненнее проходит сборка -core python собирается при помощи autotools икомпилятора C, без внешних зависимостейвообще
I Проблемы могут быть, но все решается быстрымпоиском по core development документации,stackoverflow и подобным ресурсам
I Большинство проблем лечатся ключами кconfigure
I Даже core сборка содержит много крутыхвещей (коллекции, регэкспы, хеши, даты,сериализацию, адекватный Unicode)
I Это всегда допустимый fallback
![Page 55: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/55.jpg)
Собственно по теме доклада :)I Берем source distribution c исходниками PythonI Собираем статическую библиотеку, отключиввсе ненужное
I “Все ненужное” - это почти все. И чем болеепочти, тем безболезненнее проходит сборка -core python собирается при помощи autotools икомпилятора C, без внешних зависимостейвообще
I Проблемы могут быть, но все решается быстрымпоиском по core development документации,stackoverflow и подобным ресурсам
I Большинство проблем лечатся ключами кconfigure
I Даже core сборка содержит много крутыхвещей (коллекции, регэкспы, хеши, даты,сериализацию, адекватный Unicode)
I Это всегда допустимый fallback
![Page 56: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/56.jpg)
libPython.a есть? идем дальше
I Настраиваем линковку с этим блобом
I Делаем вот так:#include <Python .h>
void execute_python_code ( ){
Py_ In i t ia l i ze ( ) ;PyRun_SimpleString ( "python_code_here" ) ;Py_Finalize ( ) ;
}
I Все, мы исполнили код на Python
![Page 57: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/57.jpg)
libPython.a есть? идем дальше
I Настраиваем линковку с этим блобомI Делаем вот так:#include <Python .h>
void execute_python_code ( ){
Py_ In i t ia l i ze ( ) ;PyRun_SimpleString ( "python_code_here" ) ;Py_Finalize ( ) ;
}
I Все, мы исполнили код на Python
![Page 58: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/58.jpg)
libPython.a есть? идем дальше
I Настраиваем линковку с этим блобомI Делаем вот так:#include <Python .h>
void execute_python_code ( ){
Py_ In i t ia l i ze ( ) ;PyRun_SimpleString ( "python_code_here" ) ;Py_Finalize ( ) ;
}
I Все, мы исполнили код на Python
![Page 59: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/59.jpg)
Как-то слишком просто?
I Ну, это самый “высокоуровневый” вариант
I Годится, например, для Python-консоли временивыполнения
I Есть более тонкие инструментыI Но суть та же:
1. Если в другом потоке, лочим мутекс стейта2. Манипулируем состоянием, вызываем методы3. Концептуально, все вызовы “в один конец” - из C
в Python
![Page 60: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/60.jpg)
Как-то слишком просто?
I Ну, это самый “высокоуровневый” вариантI Годится, например, для Python-консоли временивыполнения
I Есть более тонкие инструментыI Но суть та же:
1. Если в другом потоке, лочим мутекс стейта2. Манипулируем состоянием, вызываем методы3. Концептуально, все вызовы “в один конец” - из C
в Python
![Page 61: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/61.jpg)
Как-то слишком просто?
I Ну, это самый “высокоуровневый” вариантI Годится, например, для Python-консоли временивыполнения
I Есть более тонкие инструменты
I Но суть та же:
1. Если в другом потоке, лочим мутекс стейта2. Манипулируем состоянием, вызываем методы3. Концептуально, все вызовы “в один конец” - из C
в Python
![Page 62: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/62.jpg)
Как-то слишком просто?
I Ну, это самый “высокоуровневый” вариантI Годится, например, для Python-консоли временивыполнения
I Есть более тонкие инструментыI Но суть та же:
1. Если в другом потоке, лочим мутекс стейта2. Манипулируем состоянием, вызываем методы3. Концептуально, все вызовы “в один конец” - из C
в Python
![Page 63: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/63.jpg)
Как-то слишком просто?
I Ну, это самый “высокоуровневый” вариантI Годится, например, для Python-консоли временивыполнения
I Есть более тонкие инструментыI Но суть та же:
1. Если в другом потоке, лочим мутекс стейта
2. Манипулируем состоянием, вызываем методы3. Концептуально, все вызовы “в один конец” - из C
в Python
![Page 64: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/64.jpg)
Как-то слишком просто?
I Ну, это самый “высокоуровневый” вариантI Годится, например, для Python-консоли временивыполнения
I Есть более тонкие инструментыI Но суть та же:
1. Если в другом потоке, лочим мутекс стейта2. Манипулируем состоянием, вызываем методы
3. Концептуально, все вызовы “в один конец” - из Cв Python
![Page 65: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/65.jpg)
Как-то слишком просто?
I Ну, это самый “высокоуровневый” вариантI Годится, например, для Python-консоли временивыполнения
I Есть более тонкие инструментыI Но суть та же:
1. Если в другом потоке, лочим мутекс стейта2. Манипулируем состоянием, вызываем методы3. Концептуально, все вызовы “в один конец” - из C
в Python
![Page 66: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/66.jpg)
А в обратную сторону как?
I Core python может не осилить реализациюмногих компонент приложения, ибо там особыеинтерфейсы, имеющиеся в нативном коде, но“прозрачно” недоступные
I Плохо, писать много “скучного” кода на Python -наша цель
I Да и спускать критичные по скорости ботлнекив C/C++ тоже хотелось бы для спокойствия
I Это решается написанием модулей расширения
![Page 67: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/67.jpg)
А в обратную сторону как?
I Core python может не осилить реализациюмногих компонент приложения, ибо там особыеинтерфейсы, имеющиеся в нативном коде, но“прозрачно” недоступные
I Плохо, писать много “скучного” кода на Python -наша цель
I Да и спускать критичные по скорости ботлнекив C/C++ тоже хотелось бы для спокойствия
I Это решается написанием модулей расширения
![Page 68: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/68.jpg)
А в обратную сторону как?
I Core python может не осилить реализациюмногих компонент приложения, ибо там особыеинтерфейсы, имеющиеся в нативном коде, но“прозрачно” недоступные
I Плохо, писать много “скучного” кода на Python -наша цель
I Да и спускать критичные по скорости ботлнекив C/C++ тоже хотелось бы для спокойствия
I Это решается написанием модулей расширения
![Page 69: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/69.jpg)
А в обратную сторону как?
I Core python может не осилить реализациюмногих компонент приложения, ибо там особыеинтерфейсы, имеющиеся в нативном коде, но“прозрачно” недоступные
I Плохо, писать много “скучного” кода на Python -наша цель
I Да и спускать критичные по скорости ботлнекив C/C++ тоже хотелось бы для спокойствия
I Это решается написанием модулей расширения
![Page 70: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/70.jpg)
Некоторые деталиI Придумываем для каждой сущности аналог врантайме Python
I Пишем унылые функции-передергивалки,которые возьмут на себя bookkeepingреференс-каунтинга, маршаллинга объектовPython в С и обратно
I Заполняем сишную структуру, которая задастинтерпретатору интерфейс модуля
I Вызовем функцию-инициализатор модуля послестарта интерпретатора
I Все, можно вызывать нативные функции изкода на Python.
I В детали не буду вдаваться из-за регламента,но поверьте, там все дуболомно просто, развечто очень много бойлерплейта
![Page 71: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/71.jpg)
Некоторые деталиI Придумываем для каждой сущности аналог врантайме Python
I Пишем унылые функции-передергивалки,которые возьмут на себя bookkeepingреференс-каунтинга, маршаллинга объектовPython в С и обратно
I Заполняем сишную структуру, которая задастинтерпретатору интерфейс модуля
I Вызовем функцию-инициализатор модуля послестарта интерпретатора
I Все, можно вызывать нативные функции изкода на Python.
I В детали не буду вдаваться из-за регламента,но поверьте, там все дуболомно просто, развечто очень много бойлерплейта
![Page 72: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/72.jpg)
Некоторые деталиI Придумываем для каждой сущности аналог врантайме Python
I Пишем унылые функции-передергивалки,которые возьмут на себя bookkeepingреференс-каунтинга, маршаллинга объектовPython в С и обратно
I Заполняем сишную структуру, которая задастинтерпретатору интерфейс модуля
I Вызовем функцию-инициализатор модуля послестарта интерпретатора
I Все, можно вызывать нативные функции изкода на Python.
I В детали не буду вдаваться из-за регламента,но поверьте, там все дуболомно просто, развечто очень много бойлерплейта
![Page 73: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/73.jpg)
Некоторые деталиI Придумываем для каждой сущности аналог врантайме Python
I Пишем унылые функции-передергивалки,которые возьмут на себя bookkeepingреференс-каунтинга, маршаллинга объектовPython в С и обратно
I Заполняем сишную структуру, которая задастинтерпретатору интерфейс модуля
I Вызовем функцию-инициализатор модуля послестарта интерпретатора
I Все, можно вызывать нативные функции изкода на Python.
I В детали не буду вдаваться из-за регламента,но поверьте, там все дуболомно просто, развечто очень много бойлерплейта
![Page 74: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/74.jpg)
Некоторые деталиI Придумываем для каждой сущности аналог врантайме Python
I Пишем унылые функции-передергивалки,которые возьмут на себя bookkeepingреференс-каунтинга, маршаллинга объектовPython в С и обратно
I Заполняем сишную структуру, которая задастинтерпретатору интерфейс модуля
I Вызовем функцию-инициализатор модуля послестарта интерпретатора
I Все, можно вызывать нативные функции изкода на Python.
I В детали не буду вдаваться из-за регламента,но поверьте, там все дуболомно просто, развечто очень много бойлерплейта
![Page 75: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/75.jpg)
Некоторые деталиI Придумываем для каждой сущности аналог врантайме Python
I Пишем унылые функции-передергивалки,которые возьмут на себя bookkeepingреференс-каунтинга, маршаллинга объектовPython в С и обратно
I Заполняем сишную структуру, которая задастинтерпретатору интерфейс модуля
I Вызовем функцию-инициализатор модуля послестарта интерпретатора
I Все, можно вызывать нативные функции изкода на Python.
I В детали не буду вдаваться из-за регламента,но поверьте, там все дуболомно просто, развечто очень много бойлерплейта
![Page 76: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/76.jpg)
Сторонние модулиI То же самое касается чужих модулей,распространяемых в исходниках
I Во “взрослых” применениях они обычнособираются в shared library (.dll, .so, .dylib),однако никто не мешает слинковаться с нимистатически и вызвать функцию-инициализаторвручную
I Не стоит стесняться так делатьI Идеальная на мой взгляд ситуация - когда кодсразу вызывает питоновский аналог main, илишь самые низкоуровневые вызовы приходятобратно на нативный уровень
I Нативный уровень уменьшается по максимуму,и портировать его намного проще (код наPython ведь переписывать не нужно)
![Page 77: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/77.jpg)
Сторонние модулиI То же самое касается чужих модулей,распространяемых в исходниках
I Во “взрослых” применениях они обычнособираются в shared library (.dll, .so, .dylib),однако никто не мешает слинковаться с нимистатически и вызвать функцию-инициализаторвручную
I Не стоит стесняться так делатьI Идеальная на мой взгляд ситуация - когда кодсразу вызывает питоновский аналог main, илишь самые низкоуровневые вызовы приходятобратно на нативный уровень
I Нативный уровень уменьшается по максимуму,и портировать его намного проще (код наPython ведь переписывать не нужно)
![Page 78: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/78.jpg)
Сторонние модулиI То же самое касается чужих модулей,распространяемых в исходниках
I Во “взрослых” применениях они обычнособираются в shared library (.dll, .so, .dylib),однако никто не мешает слинковаться с нимистатически и вызвать функцию-инициализаторвручную
I Не стоит стесняться так делать
I Идеальная на мой взгляд ситуация - когда кодсразу вызывает питоновский аналог main, илишь самые низкоуровневые вызовы приходятобратно на нативный уровень
I Нативный уровень уменьшается по максимуму,и портировать его намного проще (код наPython ведь переписывать не нужно)
![Page 79: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/79.jpg)
Сторонние модулиI То же самое касается чужих модулей,распространяемых в исходниках
I Во “взрослых” применениях они обычнособираются в shared library (.dll, .so, .dylib),однако никто не мешает слинковаться с нимистатически и вызвать функцию-инициализаторвручную
I Не стоит стесняться так делатьI Идеальная на мой взгляд ситуация - когда кодсразу вызывает питоновский аналог main, илишь самые низкоуровневые вызовы приходятобратно на нативный уровень
I Нативный уровень уменьшается по максимуму,и портировать его намного проще (код наPython ведь переписывать не нужно)
![Page 80: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/80.jpg)
Сторонние модулиI То же самое касается чужих модулей,распространяемых в исходниках
I Во “взрослых” применениях они обычнособираются в shared library (.dll, .so, .dylib),однако никто не мешает слинковаться с нимистатически и вызвать функцию-инициализаторвручную
I Не стоит стесняться так делатьI Идеальная на мой взгляд ситуация - когда кодсразу вызывает питоновский аналог main, илишь самые низкоуровневые вызовы приходятобратно на нативный уровень
I Нативный уровень уменьшается по максимуму,и портировать его намного проще (код наPython ведь переписывать не нужно)
![Page 81: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/81.jpg)
GameDev - чуть ли не идеальный случай
I Интерфейсов мало - OpenGL, OpenAL, тач,несколько дополнительных ивентов
I Хранилище ресурсов, сеть, UI - можно частошарить, ведь они все равно “свои”
I Тяжелые вещи вроде AI и поиска путейспускаются в нативные модули
![Page 82: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/82.jpg)
GameDev - чуть ли не идеальный случай
I Интерфейсов мало - OpenGL, OpenAL, тач,несколько дополнительных ивентов
I Хранилище ресурсов, сеть, UI - можно частошарить, ведь они все равно “свои”
I Тяжелые вещи вроде AI и поиска путейспускаются в нативные модули
![Page 83: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/83.jpg)
GameDev - чуть ли не идеальный случай
I Интерфейсов мало - OpenGL, OpenAL, тач,несколько дополнительных ивентов
I Хранилище ресурсов, сеть, UI - можно частошарить, ведь они все равно “свои”
I Тяжелые вещи вроде AI и поиска путейспускаются в нативные модули
![Page 84: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/84.jpg)
SWIG - пишем обвязку проще
I SWIG - генератор связующего кода по слегкаразмеченному “файлу интерфейса” для кода наC/C++.
I Фактически способен по .h файлусгенерировать для сишных функций полныйаналог, с адекватным сопоставлением типов(вроде превращения int* в список чисел)
I С memory policy тоже все хорошо - сишныеобъекты наследуют поведение reference countedобъектов Python.
I Умеет “зеркалировать” и иерархии классов C++I Радикально снимает вопрос написания кодавзаимодействия Python-C
![Page 85: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/85.jpg)
SWIG - пишем обвязку проще
I SWIG - генератор связующего кода по слегкаразмеченному “файлу интерфейса” для кода наC/C++.
I Фактически способен по .h файлусгенерировать для сишных функций полныйаналог, с адекватным сопоставлением типов(вроде превращения int* в список чисел)
I С memory policy тоже все хорошо - сишныеобъекты наследуют поведение reference countedобъектов Python.
I Умеет “зеркалировать” и иерархии классов C++I Радикально снимает вопрос написания кодавзаимодействия Python-C
![Page 86: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/86.jpg)
SWIG - пишем обвязку проще
I SWIG - генератор связующего кода по слегкаразмеченному “файлу интерфейса” для кода наC/C++.
I Фактически способен по .h файлусгенерировать для сишных функций полныйаналог, с адекватным сопоставлением типов(вроде превращения int* в список чисел)
I С memory policy тоже все хорошо - сишныеобъекты наследуют поведение reference countedобъектов Python.
I Умеет “зеркалировать” и иерархии классов C++I Радикально снимает вопрос написания кодавзаимодействия Python-C
![Page 87: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/87.jpg)
SWIG - пишем обвязку проще
I SWIG - генератор связующего кода по слегкаразмеченному “файлу интерфейса” для кода наC/C++.
I Фактически способен по .h файлусгенерировать для сишных функций полныйаналог, с адекватным сопоставлением типов(вроде превращения int* в список чисел)
I С memory policy тоже все хорошо - сишныеобъекты наследуют поведение reference countedобъектов Python.
I Умеет “зеркалировать” и иерархии классов C++
I Радикально снимает вопрос написания кодавзаимодействия Python-C
![Page 88: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/88.jpg)
SWIG - пишем обвязку проще
I SWIG - генератор связующего кода по слегкаразмеченному “файлу интерфейса” для кода наC/C++.
I Фактически способен по .h файлусгенерировать для сишных функций полныйаналог, с адекватным сопоставлением типов(вроде превращения int* в список чисел)
I С memory policy тоже все хорошо - сишныеобъекты наследуют поведение reference countedобъектов Python.
I Умеет “зеркалировать” и иерархии классов C++I Радикально снимает вопрос написания кодавзаимодействия Python-C
![Page 89: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/89.jpg)
SWIG - пример
example.i%module native_code%{int * heavy_func(char* p) ;%}example.pyimport native_codes = sum(native_code . heavy_func( " test " ) )
![Page 90: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/90.jpg)
boost::python
I Темплейтная библиотека для C++,добивающаяся аналогичных целей
I По целям аналогична SWIG, но достигает ихдругим способом
I Может быть удобнее, когда зависимость отboost не пугает, а усложнение процесса сборкиеще одной утилитой (SWIG) нежелательно
I Интерфейсы задаются макросамипрепроцессора в коде
I В отличие от SWIG позволяет пользоватьсяфункциями embedding API напрямую, что можетбыть важно (SWIG, впрочем, не запрещает тоже,однако править сгенерированный кодметодологически неправильно)
![Page 91: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/91.jpg)
boost::python
I Темплейтная библиотека для C++,добивающаяся аналогичных целей
I По целям аналогична SWIG, но достигает ихдругим способом
I Может быть удобнее, когда зависимость отboost не пугает, а усложнение процесса сборкиеще одной утилитой (SWIG) нежелательно
I Интерфейсы задаются макросамипрепроцессора в коде
I В отличие от SWIG позволяет пользоватьсяфункциями embedding API напрямую, что можетбыть важно (SWIG, впрочем, не запрещает тоже,однако править сгенерированный кодметодологически неправильно)
![Page 92: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/92.jpg)
boost::python
I Темплейтная библиотека для C++,добивающаяся аналогичных целей
I По целям аналогична SWIG, но достигает ихдругим способом
I Может быть удобнее, когда зависимость отboost не пугает, а усложнение процесса сборкиеще одной утилитой (SWIG) нежелательно
I Интерфейсы задаются макросамипрепроцессора в коде
I В отличие от SWIG позволяет пользоватьсяфункциями embedding API напрямую, что можетбыть важно (SWIG, впрочем, не запрещает тоже,однако править сгенерированный кодметодологически неправильно)
![Page 93: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/93.jpg)
boost::python
I Темплейтная библиотека для C++,добивающаяся аналогичных целей
I По целям аналогична SWIG, но достигает ихдругим способом
I Может быть удобнее, когда зависимость отboost не пугает, а усложнение процесса сборкиеще одной утилитой (SWIG) нежелательно
I Интерфейсы задаются макросамипрепроцессора в коде
I В отличие от SWIG позволяет пользоватьсяфункциями embedding API напрямую, что можетбыть важно (SWIG, впрочем, не запрещает тоже,однако править сгенерированный кодметодологически неправильно)
![Page 94: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/94.jpg)
boost::python
I Темплейтная библиотека для C++,добивающаяся аналогичных целей
I По целям аналогична SWIG, но достигает ихдругим способом
I Может быть удобнее, когда зависимость отboost не пугает, а усложнение процесса сборкиеще одной утилитой (SWIG) нежелательно
I Интерфейсы задаются макросамипрепроцессора в коде
I В отличие от SWIG позволяет пользоватьсяфункциями embedding API напрямую, что можетбыть важно (SWIG, впрочем, не запрещает тоже,однако править сгенерированный кодметодологически неправильно)
![Page 95: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/95.jpg)
Производительность
I Зная способы размещения кода как в нативной,так и в скриптовой части приложения, надоуметь прикидывать, какую подсистему кудаотнести
I Следует представлять себе запросы скриптов кпамяти и процессорному времени
I Там все очень плохо
![Page 96: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/96.jpg)
Производительность
I Зная способы размещения кода как в нативной,так и в скриптовой части приложения, надоуметь прикидывать, какую подсистему кудаотнести
I Следует представлять себе запросы скриптов кпамяти и процессорному времени
I Там все очень плохо
![Page 97: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/97.jpg)
Производительность
I Зная способы размещения кода как в нативной,так и в скриптовой части приложения, надоуметь прикидывать, какую подсистему кудаотнести
I Следует представлять себе запросы скриптов кпамяти и процессорному времени
I Там все очень плохо
![Page 98: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/98.jpg)
"Все плохо"-1, память
I В зависимости от разрядности интерпретатораи наличия отладочных опций при сборке размеробъекта Python может сильно плавать, но всеравно не может быть меньше двух указателей
I В Python все - объектI int размером 30 байт - это нормальноI Инстансы классов (насколько это понятиеприменимо к Python) - часто от 300 байт
![Page 99: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/99.jpg)
"Все плохо"-1, память
I В зависимости от разрядности интерпретатораи наличия отладочных опций при сборке размеробъекта Python может сильно плавать, но всеравно не может быть меньше двух указателей
I В Python все - объект
I int размером 30 байт - это нормальноI Инстансы классов (насколько это понятиеприменимо к Python) - часто от 300 байт
![Page 100: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/100.jpg)
"Все плохо"-1, память
I В зависимости от разрядности интерпретатораи наличия отладочных опций при сборке размеробъекта Python может сильно плавать, но всеравно не может быть меньше двух указателей
I В Python все - объектI int размером 30 байт - это нормально
I Инстансы классов (насколько это понятиеприменимо к Python) - часто от 300 байт
![Page 101: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/101.jpg)
"Все плохо"-1, память
I В зависимости от разрядности интерпретатораи наличия отладочных опций при сборке размеробъекта Python может сильно плавать, но всеравно не может быть меньше двух указателей
I В Python все - объектI int размером 30 байт - это нормальноI Инстансы классов (насколько это понятиеприменимо к Python) - часто от 300 байт
![Page 102: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/102.jpg)
"Все плохо"-2, скорость
I Динамическая типизация - проверка типов накаждой операции
I Reference counting - постоянные cache missesиз-за нелокального обращения к памяти
I Каждый вызов метода - обращение к диктунеймспейса с запросом соответствующегоключа (поиск в хеше)
I Тяжелая структура фреймов стека и замыканий- долгие прологи и эпилоги на входах/выходах вметоды и по раскрутке исключений
I В клинических случаях доводилось видетьускорение в 50 раз после переписывания на C
![Page 103: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/103.jpg)
"Все плохо"-2, скорость
I Динамическая типизация - проверка типов накаждой операции
I Reference counting - постоянные cache missesиз-за нелокального обращения к памяти
I Каждый вызов метода - обращение к диктунеймспейса с запросом соответствующегоключа (поиск в хеше)
I Тяжелая структура фреймов стека и замыканий- долгие прологи и эпилоги на входах/выходах вметоды и по раскрутке исключений
I В клинических случаях доводилось видетьускорение в 50 раз после переписывания на C
![Page 104: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/104.jpg)
"Все плохо"-2, скорость
I Динамическая типизация - проверка типов накаждой операции
I Reference counting - постоянные cache missesиз-за нелокального обращения к памяти
I Каждый вызов метода - обращение к диктунеймспейса с запросом соответствующегоключа (поиск в хеше)
I Тяжелая структура фреймов стека и замыканий- долгие прологи и эпилоги на входах/выходах вметоды и по раскрутке исключений
I В клинических случаях доводилось видетьускорение в 50 раз после переписывания на C
![Page 105: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/105.jpg)
"Все плохо"-2, скорость
I Динамическая типизация - проверка типов накаждой операции
I Reference counting - постоянные cache missesиз-за нелокального обращения к памяти
I Каждый вызов метода - обращение к диктунеймспейса с запросом соответствующегоключа (поиск в хеше)
I Тяжелая структура фреймов стека и замыканий- долгие прологи и эпилоги на входах/выходах вметоды и по раскрутке исключений
I В клинических случаях доводилось видетьускорение в 50 раз после переписывания на C
![Page 106: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/106.jpg)
"Все плохо"-2, скорость
I Динамическая типизация - проверка типов накаждой операции
I Reference counting - постоянные cache missesиз-за нелокального обращения к памяти
I Каждый вызов метода - обращение к диктунеймспейса с запросом соответствующегоключа (поиск в хеше)
I Тяжелая структура фреймов стека и замыканий- долгие прологи и эпилоги на входах/выходах вметоды и по раскрутке исключений
I В клинических случаях доводилось видетьускорение в 50 раз после переписывания на C
![Page 107: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/107.jpg)
"Все плохо"-3, latency
I Stop-the-world garbage collector - на большиххипах задержка GC сверху не ограничена
I GIL (глобальный мутекс на доступ к состояниюинтерпретатора для всех потоков) - ростзадержек при выполнении тяжелой логикидругими потоками
![Page 108: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/108.jpg)
"Все плохо"-3, latency
I Stop-the-world garbage collector - на большиххипах задержка GC сверху не ограничена
I GIL (глобальный мутекс на доступ к состояниюинтерпретатора для всех потоков) - ростзадержек при выполнении тяжелой логикидругими потоками
![Page 109: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/109.jpg)
Так ли все плохо?
I Правило 80/20 - в 20 процентах кода проводится80 процентов времени, и эти 20 процентовможно писать на C/C++
I Для остальных 80 процентов даже клиническоезамедление в 50 раз (редко наблюдаемое напрактике) часто допустимо - например, 0.01 среакции на событие для пользователянеотличимы от 0.0002 с
I Памяти на современных смартфонах довольномного, и если пользоваться правильнымиинструментами (например, sqlite вместо“велосипедных” хранилищ и форматов), торазница в потреблении памяти составляетединицы мегабайт и более чем приемлима
![Page 110: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/110.jpg)
Так ли все плохо?
I Правило 80/20 - в 20 процентах кода проводится80 процентов времени, и эти 20 процентовможно писать на C/C++
I Для остальных 80 процентов даже клиническоезамедление в 50 раз (редко наблюдаемое напрактике) часто допустимо - например, 0.01 среакции на событие для пользователянеотличимы от 0.0002 с
I Памяти на современных смартфонах довольномного, и если пользоваться правильнымиинструментами (например, sqlite вместо“велосипедных” хранилищ и форматов), торазница в потреблении памяти составляетединицы мегабайт и более чем приемлима
![Page 111: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/111.jpg)
Так ли все плохо?
I Правило 80/20 - в 20 процентах кода проводится80 процентов времени, и эти 20 процентовможно писать на C/C++
I Для остальных 80 процентов даже клиническоезамедление в 50 раз (редко наблюдаемое напрактике) часто допустимо - например, 0.01 среакции на событие для пользователянеотличимы от 0.0002 с
I Памяти на современных смартфонах довольномного, и если пользоваться правильнымиинструментами (например, sqlite вместо“велосипедных” хранилищ и форматов), торазница в потреблении памяти составляетединицы мегабайт и более чем приемлима
![Page 112: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/112.jpg)
Так ли все плохо?
I Вопрос действительно больших хипов насмартфонах пока не стоит
I В действительно плохих случаях наличиеreference counting позволяет отключать GC вкритичные моменты - останутся только меморилики от циклических ссылок
I При должной культуре программированияможно избавиться и от них, используя слабыессылки, и при этом работать без GC
I Это не так нереально, как может показаться напервый взгляд - именно таким образомреализована серверная часть World of Tanks
I Причем число мест, где понадобились слабыессылки, можно пересчитать по пальцам
![Page 113: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/113.jpg)
Так ли все плохо?
I Вопрос действительно больших хипов насмартфонах пока не стоит
I В действительно плохих случаях наличиеreference counting позволяет отключать GC вкритичные моменты - останутся только меморилики от циклических ссылок
I При должной культуре программированияможно избавиться и от них, используя слабыессылки, и при этом работать без GC
I Это не так нереально, как может показаться напервый взгляд - именно таким образомреализована серверная часть World of Tanks
I Причем число мест, где понадобились слабыессылки, можно пересчитать по пальцам
![Page 114: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/114.jpg)
Так ли все плохо?
I Вопрос действительно больших хипов насмартфонах пока не стоит
I В действительно плохих случаях наличиеreference counting позволяет отключать GC вкритичные моменты - останутся только меморилики от циклических ссылок
I При должной культуре программированияможно избавиться и от них, используя слабыессылки, и при этом работать без GC
I Это не так нереально, как может показаться напервый взгляд - именно таким образомреализована серверная часть World of Tanks
I Причем число мест, где понадобились слабыессылки, можно пересчитать по пальцам
![Page 115: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/115.jpg)
Так ли все плохо?
I Вопрос действительно больших хипов насмартфонах пока не стоит
I В действительно плохих случаях наличиеreference counting позволяет отключать GC вкритичные моменты - останутся только меморилики от циклических ссылок
I При должной культуре программированияможно избавиться и от них, используя слабыессылки, и при этом работать без GC
I Это не так нереально, как может показаться напервый взгляд - именно таким образомреализована серверная часть World of Tanks
I Причем число мест, где понадобились слабыессылки, можно пересчитать по пальцам
![Page 116: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/116.jpg)
Так ли все плохо?
I Вопрос действительно больших хипов насмартфонах пока не стоит
I В действительно плохих случаях наличиеreference counting позволяет отключать GC вкритичные моменты - останутся только меморилики от циклических ссылок
I При должной культуре программированияможно избавиться и от них, используя слабыессылки, и при этом работать без GC
I Это не так нереально, как может показаться напервый взгляд - именно таким образомреализована серверная часть World of Tanks
I Причем число мест, где понадобились слабыессылки, можно пересчитать по пальцам
![Page 117: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/117.jpg)
Так ли все плохо?
I Вопрос же задержки решается довольнокардинально - для Python очень многоасинхронных библиотек, где проблемасинхронизации потоков не стоит вообще
I Подробнее - чуть позже
![Page 118: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/118.jpg)
Так ли все плохо?
I Вопрос же задержки решается довольнокардинально - для Python очень многоасинхронных библиотек, где проблемасинхронизации потоков не стоит вообще
I Подробнее - чуть позже
![Page 119: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/119.jpg)
Похоже, что все-таки терпимо
I Однако о названных особенностях забывать нестоит
I И ни в коем случае не заниматьсяпреждевременной оптимизацией!
I В случае динамических языков хитросплетениефакторов весьма сложно, и без грамотногопрофайлинга можно сделать только хуже
I Благо, для грамотного профайлинга есть всенеобходимое
![Page 120: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/120.jpg)
Похоже, что все-таки терпимо
I Однако о названных особенностях забывать нестоит
I И ни в коем случае не заниматьсяпреждевременной оптимизацией!
I В случае динамических языков хитросплетениефакторов весьма сложно, и без грамотногопрофайлинга можно сделать только хуже
I Благо, для грамотного профайлинга есть всенеобходимое
![Page 121: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/121.jpg)
Похоже, что все-таки терпимо
I Однако о названных особенностях забывать нестоит
I И ни в коем случае не заниматьсяпреждевременной оптимизацией!
I В случае динамических языков хитросплетениефакторов весьма сложно, и без грамотногопрофайлинга можно сделать только хуже
I Благо, для грамотного профайлинга есть всенеобходимое
![Page 122: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/122.jpg)
Похоже, что все-таки терпимо
I Однако о названных особенностях забывать нестоит
I И ни в коем случае не заниматьсяпреждевременной оптимизацией!
I В случае динамических языков хитросплетениефакторов весьма сложно, и без грамотногопрофайлинга можно сделать только хуже
I Благо, для грамотного профайлинга есть всенеобходимое
![Page 123: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/123.jpg)
Зачем так жить?
I Пока что из плюсов только code reuse междуплатформами
I И может быть сервером (это если он есть)I Но при этом надо заниматься интеграцией, ибояться плохой производительности
![Page 124: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/124.jpg)
Зачем так жить?
I Пока что из плюсов только code reuse междуплатформами
I И может быть сервером (это если он есть)
I Но при этом надо заниматься интеграцией, ибояться плохой производительности
![Page 125: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/125.jpg)
Зачем так жить?
I Пока что из плюсов только code reuse междуплатформами
I И может быть сервером (это если он есть)I Но при этом надо заниматься интеграцией, ибояться плохой производительности
![Page 126: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/126.jpg)
Зачем так жить?
I Библиотека у Python приятная, ровно как и онсам как язык, но этим трудно удивить людей,знакомых с managed платформами
I Попробую дать дополнительные доводы впользу подхода, которые, на мой взгляд,оправдывают его не очень эффективнуюреализацию
![Page 127: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/127.jpg)
Зачем так жить?
I Библиотека у Python приятная, ровно как и онсам как язык, но этим трудно удивить людей,знакомых с managed платформами
I Попробую дать дополнительные доводы впользу подхода, которые, на мой взгляд,оправдывают его не очень эффективнуюреализацию
![Page 128: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/128.jpg)
Интерпретируемость
I Байткод Python для него такие же данные, как ивсе остальное
I Его можно хранить в ресурсах, присылать посети, компоновать из него классы
I Можно слегка подправить у пользователя ссервера расположение элементов UI, логикутаймаутов, или нечто подобное, на что обычножалко тратить целый апдейт
I Естественно, нельзя забывать про возможныеуязвимости и адекватный сендбоксинг
![Page 129: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/129.jpg)
Интерпретируемость
I Байткод Python для него такие же данные, как ивсе остальное
I Его можно хранить в ресурсах, присылать посети, компоновать из него классы
I Можно слегка подправить у пользователя ссервера расположение элементов UI, логикутаймаутов, или нечто подобное, на что обычножалко тратить целый апдейт
I Естественно, нельзя забывать про возможныеуязвимости и адекватный сендбоксинг
![Page 130: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/130.jpg)
Интерпретируемость
I Байткод Python для него такие же данные, как ивсе остальное
I Его можно хранить в ресурсах, присылать посети, компоновать из него классы
I Можно слегка подправить у пользователя ссервера расположение элементов UI, логикутаймаутов, или нечто подобное, на что обычножалко тратить целый апдейт
I Естественно, нельзя забывать про возможныеуязвимости и адекватный сендбоксинг
![Page 131: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/131.jpg)
Интерпретируемость
I Байткод Python для него такие же данные, как ивсе остальное
I Его можно хранить в ресурсах, присылать посети, компоновать из него классы
I Можно слегка подправить у пользователя ссервера расположение элементов UI, логикутаймаутов, или нечто подобное, на что обычножалко тратить целый апдейт
I Естественно, нельзя забывать про возможныеуязвимости и адекватный сендбоксинг
![Page 132: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/132.jpg)
Интроспекция
I Иерархию классов, определения методов,любые значения можно менять в рантайме
I Очень полезно при отладке и первичнойнастройке
I Сильно сокращает compile/run/eval циклI Минимальная реализация - консоль черезRunSimpleString
I Возможность манкипатчинга кода на лету безрестарта порою очень кстати
I Может заменить львиную долю одноразовыхлогов и “админок”
![Page 133: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/133.jpg)
Интроспекция
I Иерархию классов, определения методов,любые значения можно менять в рантайме
I Очень полезно при отладке и первичнойнастройке
I Сильно сокращает compile/run/eval циклI Минимальная реализация - консоль черезRunSimpleString
I Возможность манкипатчинга кода на лету безрестарта порою очень кстати
I Может заменить львиную долю одноразовыхлогов и “админок”
![Page 134: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/134.jpg)
Интроспекция
I Иерархию классов, определения методов,любые значения можно менять в рантайме
I Очень полезно при отладке и первичнойнастройке
I Сильно сокращает compile/run/eval цикл
I Минимальная реализация - консоль черезRunSimpleString
I Возможность манкипатчинга кода на лету безрестарта порою очень кстати
I Может заменить львиную долю одноразовыхлогов и “админок”
![Page 135: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/135.jpg)
Интроспекция
I Иерархию классов, определения методов,любые значения можно менять в рантайме
I Очень полезно при отладке и первичнойнастройке
I Сильно сокращает compile/run/eval циклI Минимальная реализация - консоль черезRunSimpleString
I Возможность манкипатчинга кода на лету безрестарта порою очень кстати
I Может заменить львиную долю одноразовыхлогов и “админок”
![Page 136: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/136.jpg)
Интроспекция
I Иерархию классов, определения методов,любые значения можно менять в рантайме
I Очень полезно при отладке и первичнойнастройке
I Сильно сокращает compile/run/eval циклI Минимальная реализация - консоль черезRunSimpleString
I Возможность манкипатчинга кода на лету безрестарта порою очень кстати
I Может заменить львиную долю одноразовыхлогов и “админок”
![Page 137: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/137.jpg)
Интроспекция
I Иерархию классов, определения методов,любые значения можно менять в рантайме
I Очень полезно при отладке и первичнойнастройке
I Сильно сокращает compile/run/eval циклI Минимальная реализация - консоль черезRunSimpleString
I Возможность манкипатчинга кода на лету безрестарта порою очень кстати
I Может заменить львиную долю одноразовыхлогов и “админок”
![Page 138: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/138.jpg)
Отладка и профайлинг
I Можно потребовать оттрейсить нескольковызовов определенного метода
I Можно запросить подробную информацию овремени выполнения всех кодовых путей
I Все это - на хосте (в нашем случае - насмартфоне)
I Причем в произвольный момент, и без рестартаприложения
![Page 139: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/139.jpg)
Отладка и профайлинг
I Можно потребовать оттрейсить нескольковызовов определенного метода
I Можно запросить подробную информацию овремени выполнения всех кодовых путей
I Все это - на хосте (в нашем случае - насмартфоне)
I Причем в произвольный момент, и без рестартаприложения
![Page 140: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/140.jpg)
Отладка и профайлинг
I Можно потребовать оттрейсить нескольковызовов определенного метода
I Можно запросить подробную информацию овремени выполнения всех кодовых путей
I Все это - на хосте (в нашем случае - насмартфоне)
I Причем в произвольный момент, и без рестартаприложения
![Page 141: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/141.jpg)
Отладка и профайлинг
I Можно потребовать оттрейсить нескольковызовов определенного метода
I Можно запросить подробную информацию овремени выполнения всех кодовых путей
I Все это - на хосте (в нашем случае - насмартфоне)
I Причем в произвольный момент, и без рестартаприложения
![Page 142: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/142.jpg)
Pickle - универсальная сериализация
I Все объекты Python могут быть сериализованы вединый формат - pickle
I Формат можно расширить на типы модулейрасширения
I Код сериализации писать не надо - все есть врантайме
I Циклические ссылки не являются проблемой
![Page 143: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/143.jpg)
Pickle - универсальная сериализация
I Все объекты Python могут быть сериализованы вединый формат - pickle
I Формат можно расширить на типы модулейрасширения
I Код сериализации писать не надо - все есть врантайме
I Циклические ссылки не являются проблемой
![Page 144: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/144.jpg)
Pickle - универсальная сериализация
I Все объекты Python могут быть сериализованы вединый формат - pickle
I Формат можно расширить на типы модулейрасширения
I Код сериализации писать не надо - все есть врантайме
I Циклические ссылки не являются проблемой
![Page 145: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/145.jpg)
Pickle - универсальная сериализация
I Все объекты Python могут быть сериализованы вединый формат - pickle
I Формат можно расширить на типы модулейрасширения
I Код сериализации писать не надо - все есть врантайме
I Циклические ссылки не являются проблемой
![Page 146: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/146.jpg)
Гибкое состояние
I Интерпретатор позволяет управлять своимсостоянием в широких пределах
I Через системные классы - стеком, сборщикоммусора, исключениями
I Через специальные методы - поведениемобъектов
I Remote procedure call, работающий полностьюпрозрачно - реальность, реализуемая за оченьконечное время
I Ровно как и green threads, реализованныебиблиотекой
![Page 147: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/147.jpg)
Гибкое состояние
I Интерпретатор позволяет управлять своимсостоянием в широких пределах
I Через системные классы - стеком, сборщикоммусора, исключениями
I Через специальные методы - поведениемобъектов
I Remote procedure call, работающий полностьюпрозрачно - реальность, реализуемая за оченьконечное время
I Ровно как и green threads, реализованныебиблиотекой
![Page 148: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/148.jpg)
Гибкое состояние
I Интерпретатор позволяет управлять своимсостоянием в широких пределах
I Через системные классы - стеком, сборщикоммусора, исключениями
I Через специальные методы - поведениемобъектов
I Remote procedure call, работающий полностьюпрозрачно - реальность, реализуемая за оченьконечное время
I Ровно как и green threads, реализованныебиблиотекой
![Page 149: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/149.jpg)
Гибкое состояние
I Интерпретатор позволяет управлять своимсостоянием в широких пределах
I Через системные классы - стеком, сборщикоммусора, исключениями
I Через специальные методы - поведениемобъектов
I Remote procedure call, работающий полностьюпрозрачно - реальность, реализуемая за оченьконечное время
I Ровно как и green threads, реализованныебиблиотекой
![Page 150: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/150.jpg)
Гибкое состояние
I Интерпретатор позволяет управлять своимсостоянием в широких пределах
I Через системные классы - стеком, сборщикоммусора, исключениями
I Через специальные методы - поведениемобъектов
I Remote procedure call, работающий полностьюпрозрачно - реальность, реализуемая за оченьконечное время
I Ровно как и green threads, реализованныебиблиотекой
![Page 151: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/151.jpg)
Greenlet
I Выполнение любой специальным образомзапущенной функции может быть прекращено ивозобновлено в любой момент
I Как следствие, становятся возможнынетривиальные структуры управления
I Например, внешне синхронный интерфейс касинхронным API
![Page 152: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/152.jpg)
Greenlet
I Выполнение любой специальным образомзапущенной функции может быть прекращено ивозобновлено в любой момент
I Как следствие, становятся возможнынетривиальные структуры управления
I Например, внешне синхронный интерфейс касинхронным API
![Page 153: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/153.jpg)
Greenlet
I Выполнение любой специальным образомзапущенной функции может быть прекращено ивозобновлено в любой момент
I Как следствие, становятся возможнынетривиальные структуры управления
I Например, внешне синхронный интерфейс касинхронным API
![Page 154: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/154.jpg)
Gevent
I Хрестоматийный пример - библиотекаасинхронного сетевого взаимодействия Gevent
I Под капотом - event-based API (epoll, kqueue,iocp)
I Внешне же код выглядит, как синхронныйсетевой код в отдельном потоке из учебника
I Каждый поток является “зеленым” (реализованчерез сохранение состояния интерпретатора),его overhead очень мал
![Page 155: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/155.jpg)
Gevent
I Хрестоматийный пример - библиотекаасинхронного сетевого взаимодействия Gevent
I Под капотом - event-based API (epoll, kqueue,iocp)
I Внешне же код выглядит, как синхронныйсетевой код в отдельном потоке из учебника
I Каждый поток является “зеленым” (реализованчерез сохранение состояния интерпретатора),его overhead очень мал
![Page 156: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/156.jpg)
Gevent
I Хрестоматийный пример - библиотекаасинхронного сетевого взаимодействия Gevent
I Под капотом - event-based API (epoll, kqueue,iocp)
I Внешне же код выглядит, как синхронныйсетевой код в отдельном потоке из учебника
I Каждый поток является “зеленым” (реализованчерез сохранение состояния интерпретатора),его overhead очень мал
![Page 157: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/157.jpg)
Gevent
I Хрестоматийный пример - библиотекаасинхронного сетевого взаимодействия Gevent
I Под капотом - event-based API (epoll, kqueue,iocp)
I Внешне же код выглядит, как синхронныйсетевой код в отдельном потоке из учебника
I Каждый поток является “зеленым” (реализованчерез сохранение состояния интерпретатора),его overhead очень мал
![Page 158: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/158.jpg)
Gevent
I Фактически код линейный, синхронный, простой
I Без callbackов и FSMI (хотя под капотом оно именно так и работает)I Это невероятно удобно, особенно в логике, гденадо много ждать - UI, сеть
![Page 159: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/159.jpg)
Gevent
I Фактически код линейный, синхронный, простойI Без callbackов и FSM
I (хотя под капотом оно именно так и работает)I Это невероятно удобно, особенно в логике, гденадо много ждать - UI, сеть
![Page 160: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/160.jpg)
Gevent
I Фактически код линейный, синхронный, простойI Без callbackов и FSMI (хотя под капотом оно именно так и работает)
I Это невероятно удобно, особенно в логике, гденадо много ждать - UI, сеть
![Page 161: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/161.jpg)
Gevent
I Фактически код линейный, синхронный, простойI Без callbackов и FSMI (хотя под капотом оно именно так и работает)I Это невероятно удобно, особенно в логике, гденадо много ждать - UI, сеть
![Page 162: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/162.jpg)
Зеленые потоки - больше примеров
I Таймеры - sleep() просто пробуждает гринлет,вместо того, чтобы объект, нуждающийся втаймауте, сам работал с коллбэками
I Анимации - изменение накапливаемогозначения в цикле со sleep выглядит кудаинтуитивнее логики на коллбэках
I Игровой AI - сложное поведение очень просто“размазать” по тикам игрового мира, и при этомне изуродовать код
![Page 163: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/163.jpg)
Зеленые потоки - больше примеров
I Таймеры - sleep() просто пробуждает гринлет,вместо того, чтобы объект, нуждающийся втаймауте, сам работал с коллбэками
I Анимации - изменение накапливаемогозначения в цикле со sleep выглядит кудаинтуитивнее логики на коллбэках
I Игровой AI - сложное поведение очень просто“размазать” по тикам игрового мира, и при этомне изуродовать код
![Page 164: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/164.jpg)
Зеленые потоки - больше примеров
I Таймеры - sleep() просто пробуждает гринлет,вместо того, чтобы объект, нуждающийся втаймауте, сам работал с коллбэками
I Анимации - изменение накапливаемогозначения в цикле со sleep выглядит кудаинтуитивнее логики на коллбэках
I Игровой AI - сложное поведение очень просто“размазать” по тикам игрового мира, и при этомне изуродовать код
![Page 165: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/165.jpg)
Зеленые потоки - больше примеров
I В литературе по теории языковпрограммирования проблема уродования кодаколлбэками называется inversion of control
I Greenlet ее по большей части решаетI На мой взгляд, одна из особенностей Python,которая дает ему (наряду с Lua, Erlang и новымC#), существенные новые выразительныесредства по сравнению с болееортодоксальными языками
![Page 166: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/166.jpg)
Зеленые потоки - больше примеров
I В литературе по теории языковпрограммирования проблема уродования кодаколлбэками называется inversion of control
I Greenlet ее по большей части решает
I На мой взгляд, одна из особенностей Python,которая дает ему (наряду с Lua, Erlang и новымC#), существенные новые выразительныесредства по сравнению с болееортодоксальными языками
![Page 167: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/167.jpg)
Зеленые потоки - больше примеров
I В литературе по теории языковпрограммирования проблема уродования кодаколлбэками называется inversion of control
I Greenlet ее по большей части решаетI На мой взгляд, одна из особенностей Python,которая дает ему (наряду с Lua, Erlang и новымC#), существенные новые выразительныесредства по сравнению с болееортодоксальными языками
![Page 168: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/168.jpg)
Stackless Python
I Стоит посмотреть этот форк CPython, если идеизеленых потоков вам близки
I Вкратце - Greenlet на стероидахI Есть шедулер, хвостовая рекурсия,возможность переезда зеленых потоков междумашинами (почти Erlang/OTP)
I Success story - MMORPG Eve Online
![Page 169: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/169.jpg)
Stackless Python
I Стоит посмотреть этот форк CPython, если идеизеленых потоков вам близки
I Вкратце - Greenlet на стероидах
I Есть шедулер, хвостовая рекурсия,возможность переезда зеленых потоков междумашинами (почти Erlang/OTP)
I Success story - MMORPG Eve Online
![Page 170: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/170.jpg)
Stackless Python
I Стоит посмотреть этот форк CPython, если идеизеленых потоков вам близки
I Вкратце - Greenlet на стероидахI Есть шедулер, хвостовая рекурсия,возможность переезда зеленых потоков междумашинами (почти Erlang/OTP)
I Success story - MMORPG Eve Online
![Page 171: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/171.jpg)
Stackless Python
I Стоит посмотреть этот форк CPython, если идеизеленых потоков вам близки
I Вкратце - Greenlet на стероидахI Есть шедулер, хвостовая рекурсия,возможность переезда зеленых потоков междумашинами (почти Erlang/OTP)
I Success story - MMORPG Eve Online
![Page 172: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/172.jpg)
Спасибо за внимание
![Page 173: Встраивание Python в мобильные приложения – нюансы interoperation, новые подходы к разработке. Никита Лесников](https://reader033.vdocuments.site/reader033/viewer/2022042515/556bf72cd8b42a6d768b45cd/html5/thumbnails/173.jpg)
Вопросы?