LINUX.ORG.RU

Какой язык взять для такой задачи или проще придумать свой простенький?


0

0

Задача такая: есть самодельная среда проектирования сетей из модулей. То есть это такая среда/студия, где ты из библиотеки берёшь модули и соединяешь их всяко, потом всю получившуюся штуку запускаешь. Принцип, используемый в тыще разных виртуальных лабораториях, синтезаторах и т.п. Модуль - это чёрный ящик с M входами и N выходами. Всё это сделано на C++ и сейчас есть API, позволяющее взять С++, GCC и родить плагин, который "студия" увидит как модуль. И этот модуль появится в библиотеке "студии" и крутые перцы потом смогут его юзать в своих проектах, кладя его на холст и соединяя с другими. Вся студия - это всего-навсего реализация универсального интерфейса передачи пакетов между чёрными ящиками.

Собственно, вопрос касается разработки модулей. Существующий подход имеет недостатки:
1. Код всех модулей выполняется в контексте одного процесса. И если в каком-то модуле наколбасили гавнеца, то рухнет вся студия.
2. С++ как язык слишком суров для таких быдлокодерских нужд, как создание модуля.

В общем, два этих вопроса заставляют задуматься над тем, а не поменять ли парадигму модуля - не пускать создателей модуля в контекст процесса студии и заодно предоставить им что-то попроще, чем С++.

Поэтому, сидя в туалете я мечтаю поиметь интерпретатор какого-нибудь javascript в студии и чтобы модули люди писали на чём-нибудь таком.


не буду оригинален. lisp для плагинов/модулей не пойдет ? сделать свой диалект (как в autocad), и вперед. ну или какой-нить tcl/tk.

isden ★★★★★
()

Python? Lua? Вроде и как интерпретатор пойдет. И к С++ прикручивается и сети (графы) легко делать.

mst_72
()

Python, Ruby, Tcl, Perl - тормоза жуткие. Бери Lisp и как-то его модифицируй. Многие Лиспы (например Scheme) хорошо интегрируются с Си.

xTERM ★★
()

любой высокоуровневый язык со встраиваемой реализацией и удобным FFI. остальное - по вкусу. писать свой язык смысла не вижу

jtootf ★★★★★
()

а почему бы и не ecmascript? в qt есть еще qtscript (если уж о с++ говорим)

bik ★★
()

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

Не буду оригинален. В такой ситуации я бы всё (ядро + модули) по умолчанию писал такое на java, просто потому, что знаю этот язык и полагаю, что он неплохо подойдёт.

В качестве варианта - любые популярные (а значит, с хорошо оптимизированными VM) современные языки с аналогом байт-кода - думаю, они также достаточно быстры, и не менее универсальны. С другой стороны, не думаю, что для твоих задач нужны динамические типы.

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

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

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

Кроме того, есть ещё такой параметр для выбора - какая компиляция предполагается для модулей между их написанием и запуском? Без компиляции? Компиляция в некий безопасный байт-код? Компиляция в небезопасный нативный код?

alexsaa
()

>Поэтому, сидя в туалете я мечтаю поиметь интерпретатор какого-нибудь javascript в студии и чтобы модули люди писали на чём-нибудь таком.

ну и возьми spidermonkey, вполне себе

volh ★★
()

Java. Её и встраивать легко, и callback-и легко делать, и рефлекшн есть (как понимаю, вы его на С++ имитируете), и ничего не рухнет, и язык не знает только ленивый, и куча отличных IDE, и проверенное годами решение, и производительность на уровне, и кроссплатформенный.

anonymous
()
Ответ на: комментарий от anonymous

Да, жабофобы смогут писать на Groovy/Scala/Scheme/..., они бинарно совместимы.

anonymous
()
Ответ на: комментарий от alexsaa

Раза в 4 это хороший компилятор С/С++ и первокурсники, сдающие лабы на ассемблере. Таки раз в 15-20.

anonymous
()
Ответ на: комментарий от anonymous

afaik, современный компилятор C на i686 - раза в 2 медленнее хорошего асм-кода (это по слухам), а sun jvm 1.5 - ещё в 2 раза медленнее (это уже из личного опыта).

Вот лет 5 или 10 назад, вероятно, было примерно как ты говоришь.

Что пишут первокурсники в лабах на асме сейчас - не представляю, но почему-то кажется, что g++ даст код лучше, чем эти первокурсники. NB: НЕ ПРОВЕРЯЛ.

PS. если хочешь, предлагай тестовую задачу. Могу попробовать написать на яве, неохотно - на C, но на асме писать не буду. Впрочем, буду благодарен и ссылкам на готовые замеры.

alexsaa
()
Ответ на: комментарий от alexsaa

Нет ссылок, опять же личные впечатления. Компиляторы, конечно, умные, но оптимизировать руками можно много, вплоть до оптимального заполнения конвеера и кеша первого, которые могут дать сильный выигрыш, а компиляторы тупят. Времени конечно это отнимает уйму.

anonymous
()

>интерпретатор какого-нибудь javascript

Lua?

anonymous
()

Ты бы сначала требования к языку этому сформулировал как-нибудь по конретнее. Сразу станет понятно что надо, а что нет.

Burbaka ★★
()

можно взять например, Эйфель. Он довольно легко интегрируется с С++ (или транслируется в него). При этом там настоящий ОО, общий подход Design by Contract хорошо подходит для написания "чёрных ящиков". Можно взять готовый С++ код, начать его переписывать на Эйфеле, добавлять юнит-тесты, контракты. Потом прозрачно заменить С++ модули на эйфелевские (+получив при этом "на халяву" набор тестов)

Хотя может быть, сюда сравнительно легко подойдут и конечные автоматы, и тогда весь вопрос, как их относительно легко генерировать из этого языка (а не писать руками). Посмотрите про SWITCH-технологию. Язык реализации может быть любой, всё равно на нём будет исполняться корректный верифицированный КА из модели, из этого мини-языка.

Озвучьте требования к "модулям", расставьте приоритеты:

1. Верифицируемость, возможность проверки корректности "модулей".
2. "Понятность" кода, нужна ли возможность расширить язык
3. Интегрируемость
4. Производительность.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.