Выбор встроенного языка

Я создаю приложение, которое анализирует одну или несколько серий данных с использованием нескольких разных алгоритмов (агентов). Я пришел к мысли, что каждый из этих агентов может быть реализован в виде отдельных скриптов Python, которые я запускаю с помощью Python C API или Boost.Python в моем приложении.

Меня немного беспокоят накладные расходы времени выполнения TBH, так как я выполняю довольно тяжелую обработку данных, и я не хочу ждать несколько минут для каждой симуляции. Обычно я делаю сотни тысяч, если не миллионы, итераций, в которых я вызываю внешние «агенты»; мне лучше просто жестко все кодировать в приложении, или падение производительности будет терпимым?

Кроме того, есть ли другие интерпретируемые языки, которые я могу использовать, кроме Python?


person Rune Aamodt    schedule 20.01.2010    source источник
comment
Используйте API Python / C. Я без сожаления использую его в своем приложении.   -  person Nathan Osman    schedule 20.01.2010


Ответы (7)


Да, тонны. Lua и Python кажутся самыми популярными:

Встраивание Lua

Встраивание Python

Встраивание Tcl

Встраивание Ruby

Встроить Perl

Встроить JavaScript

Существуют десятки движков JavaScript, это всего лишь пример. Некоторые из них также пугающе быстрые.

person Community    schedule 20.01.2010
comment
На мой взгляд, Lua, вероятно, является наиболее хорошо документированным языком для встраиваемых систем, это своего рода стандарт де-факто для разработки игр. - person Paul Nathan; 20.01.2010
comment
Действительно, все очень просто. Я сам не встраивал его, но использовал его в пользовательском модуле Garry's Mod и использовал C API для передачи данных. Это было достаточно просто для моего 15-летнего мозга (который обладал вычислительной способностью губки). - person Skurmedel; 20.01.2010
comment
Tcl может бросить вызов Lua как наиболее хорошо документированному языку, хотя это субъективно. Он также существует дольше, чем Lua. Это не так жарко, как lua, но, по крайней мере, не хуже. - person Bryan Oakley; 20.01.2010
comment
Не стесняйтесь добавлять его в список. - person Skurmedel; 20.01.2010
comment
Интерпретатор Lua меньше интерпретатора Python, но изначально был создан для выполнения конфигураций, поэтому Python менее подвержен ошибкам и имеет более надежный синтаксис. NumPy также очень полезен для обработки чисел, хотя добавление подобных внешних модулей также делает встраивание Python более сложной задачей. - person KingRadical; 20.01.2010

Lua и так довольно быстр. Если вам нужно больше скорости, попробуйте LuaJIT, и это отличный вариант.

person lhf    schedule 09.02.2011

Tcl изначально разрабатывался как встраиваемый язык.

person Bryan Oakley    schedule 20.01.2010
comment
Тот же ответ, что и мой, пока я редактировал. +1 за явный гений. :-) - person T.E.D.; 20.01.2010
comment
Lua также изначально разрабатывался как встраиваемый язык. - person lhf; 10.02.2011
comment
@lhf: да, есть несколько языков, которые были разработаны с нуля для встраивания. - person Bryan Oakley; 10.02.2011
comment
Какие еще языки были разработаны с нуля для встраивания? - person Vortico; 15.06.2013

Обычно я делаю сотни тысяч, если не миллионы, итераций, в которых я вызываю внешние «агенты».

Падение производительности будет заметным, возможно, болезненным. Если вы можете помещать данные в массивы и обрабатывать их партиями с помощью NumPy, это должно быть намного быстрее.

NumPy упрощает выполнение любых арифметических операций миллион раз подряд. Например, возведение каждого элемента массива в квадрат выглядит следующим образом:

>>> x = numpy.array([1, 2, 3, 4, 5, 6, 7])
>>> x**2
array([1, 4, 9, 16, 25, 36, 49])

Очень просто, а жесткий внутренний цикл здесь фактически реализован на C.

Конечно, NumPy также может выполнять более сложную обработку чисел.

person Jason Orendorff    schedule 20.01.2010

Я считаю, что tcl и Rexx были предназначены для этой цели.

person T.E.D.    schedule 20.01.2010

Для миллионов вызовов (из я предполагаю, что c ++, потому что вы упомянули boost) в python, да: вы заметите снижение производительности. Это может быть, а может и не быть значительным - возможно, прирост скорости при испытании новых «агентов» будет больше, чем попадание. В Python есть быстрые числовые библиотеки (например, numpy), которые могут помочь, но вы по-прежнему будете нести накладные расходы на маршалинг данных, вызовы python, gil и т. Д.

Да, вы можете встроить много других языков: посмотрите lua. Также посетите swig.org, который может подключаться ко многим другим языкам, помимо python.

person Colin    schedule 20.01.2010

вы, вероятно, могли бы создать встроенный язык, используя шаблоны C ++ и перегрузку операторов, см., например, языки ublas или ftensor matrix. Я не думаю, что Python или другие интерпретируемые языки подходят для обработки чисел / обработки данных.

person Anycorn    schedule 20.01.2010