Встраивание языка программирования в программу

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

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

Я также хотел бы получить доступ к любым типам данных, которые возвращают мне те функции, также изнутри.

Есть ли у кого-нибудь какие-либо предложения относительно использования API/библиотеки, которые были бы легкими, относительно полнофункциональными и с относительно простой в использовании или простой для понимания библиотекой C?

Спасибо!

Ответ 1

Возможно, вы захотите посмотреть SpiderMonkey, что позволит вам встроить механизм Javascript в вашу программу C.

Ответ 2

Lua является популярным выбором.

Ответ 3

Большинство языков сценариев имеют хорошие интерфейсы с C. Я на самом деле взглянул на Perl, Python и Lua. Если ваши пользователи не являются серьезными программистами, я бы посоветовал передать Perl мисс. Если они являются серьезными игроками World of Warcraft, они могут уже быть знакомы с Lua и писать код Lua для взаимодействия с скомпилированной программой, поэтому это может быть хорошим выбором.

Ответ 4

Вы всегда можете использовать 'c' с помощью ch toolkit.
Как вы сказали, python хорош, особенно если вы можете использовать обертку boost:: python.
Другим популярным выбором является Javascript, который используется системой сценариев Qt.

Ответ 5

Луа и сленг были изобретены именно для этого. У Lua есть некоторые опрятные функции для кода песочницы, поэтому, если пользователи могут предоставить код, вы можете попытаться ограничить их способность стрелять в ногу.

Для этого использовались ароматы lisp (классно в gnu emacs).

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

Ответ 6

GUILE - это GNU Ubiquitous Intelligent Language для расширения. Это диалект Схемы (диалект LISP). Прежде чем вы начнете кричать о LISP, считайте, что AutoCAD использовал LISP в качестве языка расширения, и по крайней мере одна крупная секретарская система обработки текстов использовала его, и секретари не испытывали никаких проблем при написании расширений для своих конкретных задач. (Похоже, что люди не понимают, что программирование должно быть жестким, если вы не скажете им, что они занимаются программированием.)

Ответ 7

Самым распространенным хорошо известным языком является javascript. Есть несколько хороших и простых (ну не так просто, насколько это возможно, если сравнить их с Lua, например), чтобы внедрить переводчики Javascript там.

Вы ничего не говорили о внешних библиотеках. Подобно Lua, эти javascript-системы голые. Существует не так много средств для общения с внешним словом. Это в отличие от ruby ​​и python, где вы получаете систему с включенными батареями с функциями zillions из библиотеки времени выполнения.

Начните с чтения этого:

Зачем встраивать JavaScript?

Как встроить движок JavaScript