поиск хорошей встраиваемой и хостинговой языковой пары - PullRequest
3 голосов
/ 21 октября 2011

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

Некоторые подробности:

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

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

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

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

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

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

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

Ответы [ 5 ]

4 голосов
/ 25 октября 2011

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

Так что мой самый важныйРекомендуется выбрать языки, которые намеченным пользователям понравятся больше всего .

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

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 ++ должен быть вашим языком хоста, так как это даст вам лучший опыт встраивания.

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

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

или

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

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

1 голос
/ 24 октября 2011

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

1 голос
/ 24 октября 2011

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

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

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

0 голосов
/ 19 марта 2017

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

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

0 голосов
/ 03 декабря 2014

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

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

...