Mayor
Специалист
Offline
|
|
« : 16-06-2009 12:03 » |
|
embed python
насколько сложно встроить интерпретатор питона в с++ приложение?
сколько может занять временить?
кто-нибудь этим занимался?
|
|
|
Записан
|
1n c0de we trust
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #1 : 16-06-2009 14:11 » |
|
Mayor, Я конечно не в курсе последней моды. Но зачем это нужно? Что, уже кто то отменил запуск внешних программ?
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #2 : 16-06-2009 14:18 » |
|
Вить, а почему бы не, если хо?
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Mayor
Специалист
Offline
|
|
« Ответ #3 : 16-06-2009 14:39 » |
|
Mayor, Я конечно не в курсе последней моды. Но зачем это нужно? Что, уже кто то отменил запуск внешних программ?
с внешними программами возни многа и потребуется чем то парсить текст в бинарный код, когда из питона теоретически сразу можно вызвать функции ... ... из соображений быстродействия и скорости написания, просто мне неохота каждый раз перекомпиливать проект, чтобы посмотреть правильно ли я понял мануал или что дает: SceneNode *node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode( "RobotNode" ); и тп
|
|
|
Записан
|
1n c0de we trust
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #4 : 16-06-2009 14:48 » |
|
Mayor, Говориш загадками. Прям аж сфинкс. Насколько я знаю, питон это скриптовый язык. Или мы говорим совсем о разных вешах?
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #5 : 16-06-2009 14:52 » |
|
парсить текст в бинарный код ... из соображений быстродействия и скорости написания, просто мне неохота каждый раз перекомпиливать проект, чтобы посмотреть правильно ли я понял мануал или что дает: SceneNode *node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode( "RobotNode" ); и тп Сколько читаю твоих тем, всякий раз поражаюсь несоответствием активности и знаний. Причём со временем положение не улучшается.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Serg79
|
|
« Ответ #6 : 16-06-2009 15:47 » |
|
с внешними программами возни многа и потребуется чем то парсить текст в бинарный код, когда из питона теоретически сразу можно вызвать функции ...
Mayor, Ты думаешь возни будет намного меньше, если Ты попытаешься в свою программу на 'C++' встроить интерпретатор Python-а?
|
|
|
Записан
|
|
|
|
Mayor
Специалист
Offline
|
|
« Ответ #7 : 17-06-2009 04:02 » |
|
возни я думаю будет не меньше, но зато не придется при каждой итерации проэкт перекомпилировать
ааа димка наконец то появился даже стал отвечать, ты думаешь задача не подъемна или для меня не подъемна? как бы ты оценил расход своего времени, по интеграции интерпретатора питона в проект и написание врапера для вызова из питона 2х десятков сишных библиотечных функций с параметрами и результатом? или бы просто не стал за такое браться?
питон поддерживает компиляцию в байт код, с ускорителем psyco производительность имхо будет где то на уровне джавы\clr, ну если действительно питоновская функция слишком часто будет вызываться я просто ее в с++ код перенесу, если ваще буду писать на нем какие то часто вызываемые функции
|
|
|
Записан
|
1n c0de we trust
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #8 : 17-06-2009 04:18 » |
|
Offtopic: Майора нужно привязать к ближайшей гидротурбине и зарабатывать на продаже дешёвого электричества Поставлю в угол.
|
|
|
Записан
|
|
|
|
Антон (LogRus)
|
|
« Ответ #9 : 17-06-2009 04:42 » |
|
Вообще в мануале всё написано есть целый раздел Extending and Embedding the Python Interpreter если работаешь на винде поставь себе ActivePython там ман хороший и посмотри в сторону языка lua, на нём скрипты к UT писаны
|
|
|
Записан
|
Странно всё это....
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #10 : 17-06-2009 05:21 » |
|
LogRus, на Питоне, к примеру, Battle Field 2 написан - у него все настроечные скрипты по прежнему в исходниках.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Антон (LogRus)
|
|
« Ответ #11 : 17-06-2009 05:48 » |
|
RXL, я ж не спорю, а предлагаю альтернативные решения
|
|
|
Записан
|
Странно всё это....
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #12 : 17-06-2009 07:00 » |
|
ты думаешь задача не подъемна или для меня не подъемна? Это уже комплекс какой-то. Любую задачу мерять по степени её "крутости", а не по практической потребности. Впрочем, вроде бы я это уже говорил давно - дежавю какое-то. питон поддерживает компиляцию в байт код, с ускорителем psyco производительность имхо будет где то на уровне джавы\clr Тут вообще без комментариев. Про JIT-компиляцию ты, похоже не слышал вовсе, а всё туда же - мерять. Ну и про стратегии разработки, учитывающие специфику языков (то, что для разработки компилируемых и интерпретируемых программ, разработки с и без отладчика применяют разные приёмы и иначе строят циклы кодирование-отладка), ты вообще не задумывался - некогда думать, кодить надо.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Mayor
Специалист
Offline
|
|
« Ответ #13 : 17-06-2009 10:04 » |
|
Вообще в мануале всё написано есть целый раздел Extending and Embedding the Python Interpreter если работаешь на винде поставь себе ActivePython там ман хороший и посмотри в сторону языка lua, на нём скрипты к UT писаны
у нас геймдизайнер на прошлом проэкте с питоном работал, одна из причин по которой от луа отказались, вторая причина то что луа один из самых тормазнутых интерпретаторов третья причина у нас нет левел дизайнера-скриптовика который ни на чем кроме луа скриптовать не умеет четвертая причина, у меня создается впечатление что когда зайдет до реализации серьезной логики то я пролечу с луа, как когда то было с перлом пятая причина, есть проэкт который вместо встаивания питона, написал на питоне врапер к интересующей библиотеке, правда скорее всего модифицировав бибилиотеку- может быть потом удасться почерпнуть каких нить идей из него скрипты к ut3 написаны на самопальном языке помеси с++ и джавы, но если есть лимон зеленых на этот движок то проблем с нахождением скриптовиков с опытом работы на нем не бывает актив питон скачать не успел почему-то хватило просто обычной открытой версии питона 3.0.1 с питон орг начал читать Extending and Embedding the Python Interpreter, очень непомятно написано, и отожрет очень много времени на освоение, едиственное что сумел дак это слинковать проэкт с интепретатором питона, проинициализировать его, и выполнить пару простых текстовых команд типа: a="lalala" и из другой сишной функции print(a) в принципе система ввода вывода оказалась замкнута на сишную консоль, и переменные автоматически хранятся между функциями но ни о каком вызове сишных функций и передаче переменных на данный момент не может быть и речи - все общение с++ с питоном идет через консоль
|
|
|
Записан
|
1n c0de we trust
|
|
|
Mayor
Специалист
Offline
|
|
« Ответ #14 : 17-06-2009 10:26 » |
|
ты думаешь задача не подъемна или для меня не подъемна? Это уже комплекс какой-то. Любую задачу мерять по степени её "крутости", а не по практической потребности. Впрочем, вроде бы я это уже говорил давно - дежавю какое-то. практическая потребность реализовать основную часть игровой логики так, чтобы при изменении каждой строички и параметра не требовалось перезапуска приложения, а тем более перекомпиляции, как это принято во всех игровых движках стоимостью более 100к зеленых, да и во многих более дешевых как следствие требуется либо нанять тим лида с большим опытом работы, который поставит эту задачу в рамки четкого тайм-менеджмента с чуть ли не подневным контролем исполнения, либо потихоньку упрощасть задачу до уровня 1 недельной сложности, а дальше : "50% на 50% - либо встречу либо не встречу" (с) что до степени крутости, то я уже давно пообламался на топкодере где нашел куеву тучу кодеров круче меня, просто щас я ищу советов старших товарищей или кодеров с опытом подобной работы для оценки временной сложности исполнения задания - по принципу упрощать еще или не упрощать если дать такую задачу любому местному исполнительному программисту работающему не на яндексе, он скажет без проблемм 3 месяца и все готово, естественно ничего через 3 месяца не будет готово иначе он бы уже давно работал в том же яндексе иже с ними питон поддерживает компиляцию в байт код, с ускорителем psyco производительность имхо будет где то на уровне джавы\clr Тут вообще без комментариев. Про JIT-компиляцию ты, похоже не слышал вовсе, а всё туда же - мерять. тут я про то что питон не интерпретатор, а компилятор, вначале идет байт код есле его уже его до этого не скомпилили, или как ты его называешь jit, а потом уже исполнение http://en.wikipedia.org/wiki/Psyco это вот это байт код байт коду рознь, как и виртуальные машины, если пожертвовать масштабируемостью то можно с успехом тягаться с jit языками Ну и про стратегии разработки, учитывающие специфику языков (то, что для разработки компилируемых и интерпретируемых программ, разработки с и без отладчика применяют разные приёмы и иначе строят циклы кодирование-отладка), ты вообще не задумывался - некогда думать, кодить надо.
из всех стратигей у меня agile и парное пограммирование, просто мозгов не у кого не хватае написать ТЗ и строго его придерживаться до конца проэкта, что до кодинга, то похоже я еще не написал ни строчки кода, который войдет в проэкт, во всяком случае я очень удивлюсь если так окажется
|
|
|
Записан
|
1n c0de we trust
|
|
|
Mayor
Специалист
Offline
|
|
« Ответ #15 : 17-06-2009 10:28 » |
|
RXL, я ж не спорю, а предлагаю альтернативные решения решение то хорошее, мы паралельно подумываем поискать недорогой платный движок, который скорее всего окажется с интеграцией луа
|
|
|
Записан
|
1n c0de we trust
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #16 : 17-06-2009 11:11 » |
|
у меня создается впечатление что когда зайдет до реализации серьезной логики то я пролечу с луа, как когда то было с перлом И на том, и на другом языке можно реализовать логику любого уровня сложности, если руки растут откуда надо. как следствие требуется либо нанять тим лида с большим опытом работы, который поставит эту задачу в рамки четкого тайм-менеджмента с чуть ли не подневным контролем исполнения, либо потихоньку упрощасть задачу до уровня 1 недельной сложности Опытный teamleader тем и отличается, что головой думает ДО того, как его команда начнёт что-то кодить. И вместо того, чтобы делать так, как делают опытные люди, у тебя есть другое предложение - найти и "впендюрить" в проект такое средство, которое разом решит все сложности. из всех стратигей у меня agile и парное пограммирование, просто мозгов не у кого не хватае написать ТЗ и строго его придерживаться до конца проэкта, что до кодинга, то похоже я еще не написал ни строчки кода, который войдет в проэкт, во всяком случае я очень удивлюсь если так окажется Охотно верю. Одно изображение бурной деятельности, манипулирование новомодными аббревиатурами - и за всем этим нулевой результат.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Mayor
Специалист
Offline
|
|
« Ответ #17 : 17-06-2009 16:00 » |
|
И на том, и на другом языке можно реализовать логику любого уровня сложности, если руки растут откуда надо.
для меня будет проще на питоне, чем на луа Опытный teamleader тем и отличается, что головой думает ДО того, как его команда начнёт что-то кодить. И вместо того, чтобы делать так, как делают опытные люди, у тебя есть другое предложение - найти и "впендюрить" в проект такое средство, которое разом решит все сложности.
ну пока что еще никто из тех кто думает головой не отказывались от встроенной виртуальной машины в таких проэктах Охотно верю. Одно изображение бурной деятельности, манипулирование новомодными аббревиатурами - и за всем этим нулевой результат.
ну и какой бы ты результат принял за ненулевой?
|
|
|
Записан
|
1n c0de we trust
|
|
|
Mayor
Специалист
Offline
|
|
« Ответ #18 : 17-06-2009 16:09 » |
|
переговорил с профи: по молодости будучи лидом ему приходилось встраивать в проэкт интерпретатор луа, управился за 2 дня, но естестно он намного способнее меня и луа знал намного лучше, чем я знаю питон сейчас при использовании готовых биндингов это может занять 2 часа
сейчас он такими вещами не замарачивается, просто покупает любой готовый движок, который больше понравится, в текущем проекте в выбраный движок встроен питон - и вроде он всем в нем доволен
в общем, как я понял, стоит поскать готовый биндинг какого нить интепретатора к движку или поискать движок сразу со встроенным интепретатором
|
|
|
Записан
|
1n c0de we trust
|
|
|
Mayor
Специалист
Offline
|
|
« Ответ #19 : 20-06-2009 13:33 » |
|
дали довольно точную характеристику, чем я занимаюсь Is embedding so difficult that only a newbie is dumb enough to try it?
|
|
|
Записан
|
1n c0de we trust
|
|
|
Mayor
Специалист
Offline
|
|
« Ответ #20 : 20-06-2009 17:27 » |
|
фух, типа встроил до уровня вызова функций: // main.cpp #include <boost/python.hpp>
extern "C" void inithello(void); // хз на кой она
int main( int argc, char ** argv ) { using namespace boost::python; PyImport_AppendInittab("hello", &inithello); Py_Initialize(); PyRun_SimpleString( "import hello \n" "print hello.greet(1)\n" ); //Py_Finalize(); return 0; }
// greet.cpp char const* greet(unsigned x) { static char const* const msgs[] = { "hello", "Boost.Python", "world!" }; //if (x > 2) //throw std::range_error("greet: index out of range"); return msgs[x]; }
#include <boost/python.hpp> using namespace boost::python; BOOST_PYTHON_MODULE(hello) { def("greet", greet, "return one of 3 parts of a greeting"); }
придется еще долго изучать: py++ - для автоматизирования процесса экспозирования объектов рендеринга dep: gccxml - парсит с++ хидеры в хмл libboost - бидит питон с с++ относительно прямого использования python c\api - сразу отпадает с моим уровнем знаний, требует экспертных знаний в с++ и питоне, без них возникает чехорда со ссылками на питоновские объекты, утечки памяти, ссылки на удаленные сборщиком мусора объекты ... и просто жуткие требования к обработчикам с++ исключений
|
|
|
Записан
|
1n c0de we trust
|
|
|
Dr2Dk
Новенький
Offline
|
|
« Ответ #21 : 24-12-2010 08:36 » |
|
у меня создается впечатление что когда зайдет до реализации серьезной логики то я пролечу с луа, как когда то было с перлом И на том, и на другом языке можно реализовать логику любого уровня сложности, если руки растут откуда надо. Любого ли? Никогда еще не сталкивались с ситуацией, как задача, по мере усложнения, начинает буксовать? Язык, позволяющей программировать удобным для человека образом сложные сущности - имеет для достаточно сложных задач существенное преимущество. Добавлено через 2 минуты и 14 секунд:из всех стратигей у меня agile и парное пограммирование, просто мозгов не у кого не хватае написать ТЗ и строго его придерживаться до конца проэкта, что до кодинга, то похоже я еще не написал ни строчки кода, который войдет в проэкт, во всяком случае я очень удивлюсь если так окажется
А чего? Никого из опытных в вашей ситуации не принято ставить сверху? В виде руководства?
|
|
« Последнее редактирование: 24-12-2010 08:39 от Dr2Dk »
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #22 : 24-12-2010 10:20 » |
|
Язык, позволяющей программировать удобным для человека образом сложные сущности - имеет для достаточно сложных задач существенное преимущество. Дело не в языке, а в подходе. Самым распространённым в настоящее время является объектно-ориентированный подход, позволяющий инкапсулировать "сложности" внутри объектов и выделять в решении уровни абстракции. И Lua, и Perl позволяют писать достаточно структурированный код, чтобы непосредственно в нём программист мог выразить структуру решения. Никогда еще не сталкивались с ситуацией, как задача, по мере усложнения, начинает буксовать? А причём тут язык программирования?
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
|