Pygin — Python adapter
Python adapter
Latest post of the previous page:
Лог запуска в appverif.exe - . Наверное, нужны символы для pygin, чтобы нарыть больше инфы?- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Python adapter
Как выяснилось, у них там местами весьма своеобразное понимание того, что такое reference counting.
Баг исправлен, аттач в шапке обновлён.
Баг исправлен, аттач в шапке обновлён.
Python adapter
у меня показывает "Latest post of the previous page:" первым сообщением на странице вместо шапки топика.
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Python adapter
У меня продолжает подгорать от увиденного, поэтому напишу подробнее.
Как работает resource management в общем случае? Вы получаете от рантайма объект и однократно сигнализируете, когда он вам не нужен (malloc...free, new...delete, open...close etc.), после чего объект больше не жилец.
Как работает reference counting в общем случае?
Да примерно так же, только вы дополнительно сигнализируете, когда на этот объект начинает и прекращает ссылаться кто-то ещё. Объект в этом случае больше не жилец тогда, когда он не нужен никому.
Всё это отлично ложится на идиому RAII в C++: в конструкторе/операторе копирования увеличиваем счетчик, в деструкторе уменьшаем, после чего object lifetime становится проблемой индейцев и можно думать о более насущных вещах.
В C же, где RAII нет, полезных ископаемых нет, воды нет, растительности нет, населена роботами обо всем, увы, надо сигнализировать ручками.
Дядя Гвидо, похоже, проникся проблемой индейцев сишников и решил немного сократить им копипасту: если они хотят получить объект, которым явно владеет кто-то ещё - зачем утруждать несчастных? Дадим им объект, не увеличивая счетчик, все равно предыдущий владелец никуда же не денется, да? Зачем счетчик дёргать, да? И назовем это borrowed reference, шоп красиво было.
А некоторые функции (но не все) пусть сами уменьшают счетчик переданных им объектов, потому что ну кому те объекты потом нужны, да? И назовем это stealing a reference, шоп красиво было.
Как это выглядит с точки зрения здравого смысла?
А так, что время жизни объекта зависит не от его типа, а от того, какая функция вам его вернула и куда вы его потом передали.
Иными словами, чтобы получить статически корректную программу, недостаточно убедиться в отсутствии голых, необернутых в smart pointerы указателей в коде - надо полностью инкапсулировать всю эту сишную авгиеву конюшню и писать обертку для каждой Py*-функции, периодически расставляя в них костыли-инкременты.
Python adapter
Крутяк. =) Я начал читать, но "ниасилил" продраться сквозь текст и кучу других вкладок, требующих внимания.
Я вот не понял - можно ли в API вставить имена для параметров в функцию, из которых будет ясно, функция берёт ссылку взаймы (borrowed, счётчик не увеличен, и пока родитель висит и ждёт в стеке, функция может делать с объектом всё что угодно) или крадёт (stealing, родитель или может отстрелиться или уже отстрелился, поэтому функции надо самой думать, как избавиться от референса).
В третьем питоне дядя Гвидо не сильно старался прикладываться, но там много чего делалось для алгоритмической оптимизации производительности - замена всего и вся на непонятные для простых смертных генераторы, и т.п. Возможно это необходимо для поддержки таких вот конструкций. Ты не хочешь запостить это в python-dev@ ? https://mail.python.org/mailman/listinfo/python-dev Я думаю многим было бы интересно прочитать ответ. Могу помочь с переводом на инглиш, если что.
Полезным эффектом будет дополнить документацию понятным объяснением зачем это нужно, в дополнение к тому, как это работает..
Я вот не понял - можно ли в API вставить имена для параметров в функцию, из которых будет ясно, функция берёт ссылку взаймы (borrowed, счётчик не увеличен, и пока родитель висит и ждёт в стеке, функция может делать с объектом всё что угодно) или крадёт (stealing, родитель или может отстрелиться или уже отстрелился, поэтому функции надо самой думать, как избавиться от референса).
В третьем питоне дядя Гвидо не сильно старался прикладываться, но там много чего делалось для алгоритмической оптимизации производительности - замена всего и вся на непонятные для простых смертных генераторы, и т.п. Возможно это необходимо для поддержки таких вот конструкций. Ты не хочешь запостить это в python-dev@ ? https://mail.python.org/mailman/listinfo/python-dev Я думаю многим было бы интересно прочитать ответ. Могу помочь с переводом на инглиш, если что.
Полезным эффектом будет дополнить документацию понятным объяснением зачем это нужно, в дополнение к тому, как это работает..
А так, что время жизни объекта зависит не от его типа, а от того, какая функция вам его вернула и куда вы его потом передали.
- HaRT
- Moderator
- Posts: 10867
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Python adapter
Можно, наверное. Правда, в нормальном обществе это принято просто делать разными типами, делая ошибку невозможной в принципе.
Так думать вообще ни о чём не надо - переданный объект содержит счетчик ссылок и будет жить пока он не 0. Если он функции нужен после выхода - инкремент. Владеет ли им кто-то ещё - не её дело.функция берёт ссылку взаймы ... или крадёт (...функции надо самой думать, как избавиться от референса).
Borrowed reference экономит пару тактов процессора и одну строку в C-коде, но, учитывая, что это 1) питон и 2) апи для интеграции с другим языком, это экономия даже не на спичках, а на атомах.
Это как ехать за границу на машине и даже зная, что впереди многочасовая пробка и таможня, все равно лезть на красный, чтобы сэкономить 30 секунд.
Это так аж с cамого начала.В третьем питоне ... много чего делалось для алгоритмической оптимизации производительности
Всё куда прозаичнее:Возможно это необходимо для поддержки таких вот конструкций.
- т. е. чтобы однострочники на сишечке проще ваять было.These functions were designed to steal a reference because of a common idiom for populating a tuple or list with newly created objects
А толку? Менять это уже 20 лет как поздно, а ответ и так известен - это C, тут так заведено.Ты не хочешь запостить это в python-dev@ ?
Здесь считаем ссылки, здесь не считаем, здесь рыбу заворачивали.
Python adapter
Ещё было бы удобно для сортировки версий поменять имена архивов с pygin_89f1868_090517.7z на pygin_170509_89f1868.7z
Python adapter
А что за магия такая - `import __hello__` - это питоновский код или С?
И вот это вот весьма странно:
Лучше, если плагин объявит класс `hello_world_plugin(farapi.Plugin)`, и Far автоматом его пнёт после импорта плагина. Типа высокоуровневый API. https://stackoverflow.com/questions/588 ... m-this-one
И вот это вот весьма странно:
Code: Select all
def GetGlobalInfoW(info):
global Plugin
Plugin = hello_world_plugin(info)
Python adapter
Что-то не видно его.
Code: Select all
import farapi
NameError: name 'farapi' is not defined
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Python adapter
Это такой встроенный хелловорлд.
Я думал об этом, но кто этот высокоуровневый API потом будет документировать?Лучше, если плагин объявит класс `hello_world_plugin(farapi.Plugin)`, и Far автоматом его пнёт после импорта плагина. Типа высокоуровневый API.
А так оно более-менее похоже на то, что на api.farmanager.com.
Написано же - динамический. Он не импортируется, а приходит в SetStartupInfoW.Что-то не видно его.