Поиск хорошей встроенной и хостинговой языковой пары

Я ищу два (один?) Языка. Одним из них будет хост, способный запускать некоторую "среду", а вторым - сценарий "агентов", действующих в этой среде.

Некоторые детали:

  1. Хост должен быть способен запускать несколько "агентов" (потоков встроенного языка), идеально подходящих для ограничения количества инструкций, выполняемых каждым потоком за раз (хотя приветствуются более сложные способы управления)

  2. встроенные потоки должны иметь доступ только к объектам, явно предоставленным хостом

  3. встроенные темы должны быть изолированы. Нет общей памяти, все общение происходит через хост

  4. встроенный язык должен быть довольно простым, с динамической типизацией

  5. язык хостинга должен быть достаточно высокого уровня

  6. производительность не является основной проблемой

Я думал о том, что Python - это хост, встраивающий Lua, например, Lunatic Python или некоторую пару языков JVM (Scala / Groovy?), Но я не уверен в возможности реальной изоляции встроенных потоков (см. 2, 3). Поэтому я ищу любые идеи, рамки, успешные реализации и т.д...

5 ответов

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

Поэтому моя самая важная рекомендация - выбирать языки, которые предполагаемым пользователям понравятся больше всего.

Есть несколько способов приблизиться к этому. Если вы решите начать выбирать язык хоста, то я думаю, что у вас есть следующие варианты:

C/C++: если вы хотите иметь больше свободы выбора для языка потоков, то наличие хоста C или C++ предоставит вам больше возможностей, так как большинство интерпретируемых языков сценариев написаны на C/C++ и имеют простые механизмы для встраивания в приложения C/C++. Выбор потоковых языков может быть Lua, Javascript, Python, Ruby, PHP, Basic, Scheme, Pascal, Lisp и многие другие.

Java: с Java в качестве основного языка у вас есть небольшое количество языков сценариев, которые являются дружественными для встраивания. Вот список.

.NET: Я бы пошел с этим, только если вы собираетесь работать на Windows и ничего больше, если нет, я бы избежал этого. Как и в Java, вы найдете список интерпретаторов, которые могут быть встроены в приложение.NET.

Что-то еще: если вам не нравится C/C++ или Java в качестве основного языка, вам придется решить, какой тип основного языка вы предпочитаете, но независимо от выбора у вас будет очень ограниченный набор опций для встроенный язык. Вы предложили Python в качестве возможного основного языка, который я считаю достойным выбором. Я бы посоветовал не использовать Lua поверх Python, но это может стать кошмаром для отладки, если вам когда-нибудь понадобится отладка на уровне языковой виртуальной машины. Вместо этого я могу предложить два предложения: (1) также использовать Python для языка потоков, тогда у вас будет хороший унифицированный язык по всей системе; (2) найти язык сценариев, у которого есть собственный интерпретатор, написанный на Python (я знаю не так много). Вместо Python вы можете использовать Ruby, PHP или любой другой основной язык сценариев для хоста, но во всех случаях у вас будет не так много вариантов для встроенного языка.

Теперь вместо поиска основного языка вы можете сначала выбрать встроенный язык, а затем найти основной язык, который может встраивать этот язык. Вы предложили Lua в качестве встроенного языка, что также является очень хорошим вариантом. Если вы настроены на использование Lua, то я думаю, что C или C++ должны быть вашим языком хоста, так как это даст вам лучший опыт встраивания.

Подводя итог, я рекомендую один из двух следующих подходов к выбору пары языков:

(а) выбрать пару языков, в которых встроенный интерпретатор языка реализован на языке хоста. Примеры: Lua и C++, Javascript и C++, Python и C++, Scheme и C++, Jython и Java, JRuby и Java, Rhino и Java и т. Д.

или же

(б) выбрать один и тот же язык сценариев высокого уровня для хоста и потоков и работать на единой платформе без встроенных сценариев. Примеры: Python и Python, Lua и Lua, Ruby и Ruby и т. Д.

Удачи в вашем поиске!

Вы также можете использовать Common Lisp, в частности, через его реализацию SBCL.

Использование javascript/v8 в качестве встроенного языка и C++ в качестве основного языка может быть хорошим решением. Посмотрите, как встраивать.

V8 предоставляет контексты, каждый из которых имеет свой собственный контекст безопасности. Это позволяет вам создавать несколько отдельных потоков для разных клиентов, каждый из которых находится в своей собственной песочнице.

Другой альтернативой является java/javascript(носорог), который также позволяет встраивать. Ограничить доступ к другим объектам будет сложнее в java (вы должны использовать менеджер безопасности), но вы можете ограничить время, которое разрешено выполнять сценарию, см. Пример в javadocs здесь.

Я знаю, что этому вопросу уже пару лет, но я бы порекомендовал язык ObjectScript.

ObjectScript, для краткости ОС, является новым языком программирования. Это бесплатный, кроссплатформенный, легкий, встраиваемый и с открытым исходным кодом. Он сочетает в себе преимущества нескольких языков, в том числе: JavaScript, Lua, Ruby, Python и PHP. ОС имеет синтаксис Javascripts, функцию "множественных результатов" от lua, синтаксический шугар из Ruby, а также магические методы из PHP и Ruby - и даже больше!

Хорошим примером здесь является SnapScript, который можно запустить в любой среде, совместимой с Java. В дополнение к стандартному JRE он также может работать на Android (Dalvik и ART) без каких-либо модификаций.

IDE фактически управляет пулом агентов для горячего выполнения.

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