powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / встраиваемый язык для программного доступа к объектам приложений
16 сообщений из 16, страница 1 из 1
встраиваемый язык для программного доступа к объектам приложений
    #39034572
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.

Моё приложение имеет API, написанный на C++. Реализована возможность использования произвольно загружаемых расширений (C++), написанных с использованием этого API. Однако я хочу, чтобы присутствовала возможность создавать расширения не только на C++, но и на JavaScript, .Net, Lisp и Haskell.

На данный момент реализация этого видится мне так: для достижения обозначенной цели потребуется вручную писать wrappers (обёртки) для базового API, написанного на C++ под каждый из этих языков (ну, или почти под каждый, если не удастся воспользоваться чем-то вроде SWIG . Это достаточно трудоёмкий процесс... Однако мне хотелось бы, чтобы оболочки получались как можно более общими и абстрактными, дабы сводить к минимуму необходимость их редактирования после каждого изменения базового API. Т.е. чтобы из оболочек можно было бы вызывать любую функция базового API по её имени. В этом случае при добавлении новый функций в базовый API они автоматически становились бы доступны и обёрткам.

Например, программа AutoCAD имеет базовый API, написанный на C++, но расширения для этого приложения можно писать и на др. языках (LISP, VBA, .NET, JavaScript), т.к. под них присутствуют дополнительные API, реализованные (как я понимаю) в виде обёрток над базовым API).

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

Спасибо.
...
Рейтинг: 0 / 0
встраиваемый язык для программного доступа к объектам приложений
    #39034609
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum,

можно скачать исходники blender - и посмотреть как там сделана увязка с python
...
Рейтинг: 0 / 0
встраиваемый язык для программного доступа к объектам приложений
    #39034666
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть два метода это сделать.

- Многие реализации скриптовых языков уже умеют встраиваться. Надо брать документацию на транслятор желаемого языка и читать как это делать.
http://perldoc.perl.org/perlembed.html
https://docs.python.org/2/extending/embedding.html
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/How_to_embed_the_JavaScript_engine
и тд. Искать по словам <language> embed
В плюсах: это очень легко делается и ты получаешь полную, правильную реализацию этого языка. В минусах это отдельная реализация которую ты можешь только частично контролировать (читай макро-вирусы). И тебе придется таскать за собой весь транслятор этого языка. Последнее не важно если ты используешь wscript на винде или перл/питон на никсах, но....

- Сделать свою собственную версию языка.
Читай Драконью Книгу. И если у тебя хост на С++, то изучай bison.
Это намного более трудный путь, но в итоге он дает более лучший результат. Больший контроль над пользовательским кодом, возможность слегка (или не слегка) отступить от стандартного синтаксиса если он идет в разрез с нуждами основного приложения.
...
Рейтинг: 0 / 0
встраиваемый язык для программного доступа к объектам приложений
    #39034804
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благодарю за ответы! Буду читать.
...
Рейтинг: 0 / 0
встраиваемый язык для программного доступа к объектам приложений
    #39035301
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На прошедшей FPCONF был доклад о том, как на Haskell свой EDSL замутить. И упоминалось, что на Hackage можно поискать реализации для JavaScript и прочего.
...
Рейтинг: 0 / 0
встраиваемый язык для программного доступа к объектам приложений
    #39035563
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CompositumНа данный момент реализация этого видится мне так: для достижения обозначенной цели потребуется вручную писать wrappers (обёртки) для базового API, написанного на C++ под каждый из этих языков (ну, или почти под каждый, если не удастся воспользоваться чем-то вроде SWIG . Это достаточно трудоёмкий процесс... Однако мне хотелось бы, чтобы оболочки получались как можно более общими и абстрактными, дабы сводить к минимуму необходимость их редактирования после каждого изменения базового API. Т.е. чтобы из оболочек можно было бы вызывать любую функция базового API по её имени. В этом случае при добавлении новый функций в базовый API они автоматически становились бы доступны и обёрткам.
Я-бы рассмотрел такой вариант. Wrappers API описывается на собственном DSL(типа JSON). Далее для каждого языка или платформера или протокола формируются свои "переходники" в зависимости от контента DSL. Я не знаю как работает SWIG.
Нечитал. Возможно он это реализует. Но вобщем в задаче могут быть нюансы (тысячи их) способные похоронить заживо
любой DSL или SWIG просто в силу специфики процесса сборки. Или в силу того что команда или разработчик не в состоянии
(или не мотивированы) поддерживать многочисленные DSL-плагины. Вобщем всё это ситуативно и тут и треда не хватит
чтобы обговорить и обгрызть все нюансы. Надо смотреть на макете.
...
Рейтинг: 0 / 0
встраиваемый язык для программного доступа к объектам приложений
    #39035735
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ-бы рассмотрел такой вариант. Wrappers API описывается на собственном DSL(типа JSON).ээээ? Единственная расшифровка DSL (EDSL) которая подходит в тему топика это (Embedded) Domain Specific Language. Это просто определение семейства языков. Что у него общего с JSON (который есть формат хранения данных)?

maytonИли в силу того что команда или разработчик не в состоянии (или не мотивированы) поддерживать многочисленные DSL-плагины.А зачем разработчикам их поддерживать??? Это юзера делают себе плагины и сами их поддерживают. Разработчики то тут зачем?
...
Рейтинг: 0 / 0
встраиваемый язык для программного доступа к объектам приложений
    #39035764
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl, я не буду спорить. Тут нет спора. Есть просто более широкое или более узкое толкование DSL или JSON.
...
Рейтинг: 0 / 0
встраиваемый язык для программного доступа к объектам приложений
    #39035857
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonWhite Owl, я не буду спорить. Тут нет спора. Есть просто более широкое или более узкое толкование DSL или JSON.Так я разве прошу спорить? Я прошу объяснить.
Я довольно много работал со встраиваемыми языками. И использовал их и себе встраивал. Но я ни разу не использовал JSON для этой задачи. И вообще я не очень хорошо понял твой пост. Может я пропустил какой-то пласт этой проблемы?
...
Рейтинг: 0 / 0
встраиваемый язык для программного доступа к объектам приложений
    #39035869
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее я пропустил какой-то идейный аспект. Ты пишешь
авторЧто у него общего с JSON (который есть формат хранения данных)?
Да я не против того что JSON - это формат хранения данных.

Теперь по поводу DSL. Давай дадим определение DSL и проведём границу. Отметим где заканчивается
DSL и начинается хранилище данных. Для меня это затруднительно. Я не могу провести такую границу.
...
Рейтинг: 0 / 0
встраиваемый язык для программного доступа к объектам приложений
    #39035895
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТеперь по поводу DSL. Давай дадим определение DSL и проведём границу. Отметим где заканчивается
DSL и начинается хранилище данных. Для меня это затруднительно. Я не могу провести такую границу.
ааааа.... понял.... почти.... я не знаю о каком DSL ты думал, но:
DSL - Domain Specific Language - язык рассчитанных на какую-то узкую задачу.
По существу это не отдельный язык, это группа языков. Вот есть языки общего назначения, а есть специализированные языки. Вот эти специализированные и обозначают иногда как "DSL".

Причем почти все узкоспециализированные языки первоначально изобретенные для обработки какого-то конкретного типа данных или алгоритмов в последствии расширялись и становились языками общего назначения. Классический пример - Perl, придуман для обработки текстов, стал применяться везде. Есть и обратные тенденции: Lua - придуман как язык общего назначения, но используется почти исключительно как макро-язык.
Но в общем случае DSL это просто краткое обозначение специализированных языков. Это не грамматика и не формат, и уж тем более это не конкретный метод создания языка.


Слегка возвращаясь к теме топика: У Compositum уже есть некая программа которая решает какую-то конкретную задачу при этом манипулируя какими-то конкретными объектами. Он хочет дать конечным пользователям возможность управлять этими объектами не только по алгоритмам которые он уже как разработчик придумал, а по алгоритмам придуманных самими пользователями.
Самое простое и удобное в этом случае - встроить в главную программу средства управлять объектами программы посредством какого-либо внешнего языка, не требующего полной пересборки главной программы. Вывод: Compositum либо встроит в свою программу один из языков общего назначения, либо придумает на их основе свой собственный язык. Целью и единственными возможностями этого языка будет оперирование объектами основной программы. В этом случае, язык который Compositum придумает можно будет считать за DSL, с доменом - эта самая основная программа. Хотя если быть совсем точным, то в этом случае язык который придумает Compositum надо будет называть EDSL (Embeded - встроенный).


Можно ли хранить программу на DSL в JSON? Конечно можно. Можно ли хранить ее виде простого текстового файла? Да кончено. Можно ли написать пару компилятор-линкер конкретно для этого специализированного языка и загружать в основную программу бинарные файлы? Да запросто!

Вот это и есть граница между DSL и JSON - это совершенно разные, независимые и непересекающиеся вещи.
...
Рейтинг: 0 / 0
встраиваемый язык для программного доступа к объектам приложений
    #39035899
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlлибо встроит в свою программу один из языков общего назначения
Это был бы самый предпочтительный вариант.
...
Рейтинг: 0 / 0
встраиваемый язык для программного доступа к объектам приложений
    #39035928
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL мы все применяем. Так што... все понемногу DSL-щики.
...
Рейтинг: 0 / 0
встраиваемый язык для программного доступа к объектам приложений
    #39035933
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonSQL мы все применяем. Так што... все понемногу DSL-щики.Да.
Практически все языки или были когда-то или есть узко специализированные. Си был языком для разработки одной конкретной операционной системы. С++ был языком призванным заменить Си. Паскаль - для обучения студентов. Дельфи для разработки клиентов к базе данных на Оракле.... И так далее и так далее...
По существу каждый новый язык разрабатывается для какой-то конкретной ниши. Существующие языки в данной конкретной нише показались человеку неудобными - он берет и придумывает новый ЯП.
...
Рейтинг: 0 / 0
встраиваемый язык для программного доступа к объектам приложений
    #39035937
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlДельфи для разработки клиентов к базе данных на Оракле....
Знатоки говорят-де был Oracle Forms непревзойденным. Я видел его в эксплуатации. Но сам не кодил.
Поэтому не могу особо ничего добавить.
...
Рейтинг: 0 / 0
встраиваемый язык для программного доступа к объектам приложений
    #39035953
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CompositumWhite Owlлибо встроит в свою программу один из языков общего назначения
Это был бы самый предпочтительный вариант.
ну так выбирай наиболее подходящий и встраивай
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / встраиваемый язык для программного доступа к объектам приложений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]