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

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

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

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

7 ответов

Решение

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

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

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

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

Встраивание рубина

Вставить Perl

Вставить JavaScript

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

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

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

Обычно я буду делать сотни тысяч, если не миллионы, итераций, в которых я буду вызывать внешних "агентов"

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам