2010-08-18 2 views
10

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

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

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

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

Спасибо!

+2

Я помню, что я видел что-то о моде Garry, используя Lua. Это возможность? –

ответ

5

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

+0

Это потрясающе, спасибо! Начал оглядываться по документации JSAPI, и это неплохо! – FreeMemory

3

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

2

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

+0

C, а не C++. Нет повышения. – nmichaels

1

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

Вы ничего не говорили о внешних библиотеках. Подобно Lua, эти javascript-системы голые. Существует не так много средств для общения с внешним словом. То есть, в отличие от Ruby и Python, где вы получите батареи в комплекте системы с несметными функций из библиотеки времени выполнения

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

Why embed JavaScript?

How to embed the JavaScript engine

+0

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

2

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

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

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

2

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

Смежные вопросы