Выбор встроенного языка - PullRequest
7 голосов
/ 20 января 2010

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

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

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

Ответы [ 7 ]

10 голосов
/ 20 января 2010

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

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

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

Embedded Tcl

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

Код для вставки Perl

Встроить JavaScript

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

9 голосов
/ 10 февраля 2011

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

5 голосов
/ 20 января 2010

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

3 голосов
/ 20 января 2010

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

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

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

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

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

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

2 голосов
/ 20 января 2010

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

1 голос
/ 20 января 2010

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

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

0 голосов
/ 20 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...