LINUX.ORG.RU

Язык выражений для встраивания в приложения

 , , ,


0

2

Привет, ЛОР.

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

Важно, чтобы он удовлетворял следующим свойствам:


  • Декларативность
  • Возможность средствами статического анализа на 100% определить корректность выражения, в т.ч. с т.з. семантики (как я понимаю, отсюда следует сильная типизация)
  • Возможность прокинуть в контекст выполнения выражения произвольные объекты из приложения и операции над ними
  • Результатом работы выражений должно быть булево значение (либо, в идеале, произвольный объект)
  • Чем проще синтаксис – тем лучше. Если это будет просто AST в виде JSON-объекта/S-выражения – уже здорово. Полноценный язык не нужен, сложная логика должна выноситься в отдельные операции, описанные на стороне приложения
  • Лицензия, позволяющая модификацию и использование в коммерческих проектах (если такое понятие вообще применимо к языку, а не реализации)


Интересует прежде всего язык, даже если нет готовой реализации под JS, но язык простой – я могу написать её.
Лично я себе это представляю как примерный аналог ElasticSearch Query DSL (решает схожую задачу) или чего-то подобного.

★★★

Только не называй свое JSON-говно «языком».

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

1. Предложи другое название для сущности, которая описывает произвольные выражения
2. JSON – всего лишь примитивный формат для описания структур данных, в том числе, деревьев, в том числе, выражающих структуру выражений. Если есть варианты лучше – я с радостью их рассмотрю.

unikoid ★★★ ()

1) вводишь понятие функции:

fName(arg: type): type

2) пишешь к парсер умеет разбирать шутки вида:

a(b($(«one»), c()), $(«two»))

// вложенные вызовы функций и строки // $(«two») -получениепеременной «two» // =(«two», «someValue») - присвоение значения переменной // +($(«one»), $(«two»)) - ну ты понял

3) все

4) ну еще потом можн будет добавить сахару

subwoofer ★★★★★ ()
Последнее исправление: subwoofer (всего исправлений: 1)
Ответ на: комментарий от unikoid

Предложи другое название для сущности, которая описывает произвольные выражения

Предложить название для JSON? Хм... «JSON» подойдет?

Если есть варианты лучше – я с радостью их рассмотрю

Любая форма записи вызова функции - S-выражение, M-выражениe, pattern matching любого ФП-языка, да тупо вызов процедур.

tailgunner ★★★★★ ()

Интересует прежде всего язык, даже если нет готовой реализации под JS, но язык простой – я могу написать её.

Так создай свою простенькую формальную грамматику, с помощи которой сможешь решать свою задачу. Это довольно просто. А чтоб готовое решение, но при этом простенькое, да под неизвестную задачу Х ... Как то противоречиво звучит.

PHPFan ()

Тяжёлый вариант, но есть всё перечисленное: http://doc.qt.io/qt-5/qqmlexpression.html

Язык выражений JS. Произвольные объекты пробрасываются через контекст. Результатом выражения могут быть как простые типы, так и объекты JS. Лицензия LGPL.

Dendy ★★★★★ ()

Кстати да, никто до сих пор не посоветовал Elm, хотя он функциональный и статически типизированный. Не знаю насколько легко к нему можно подключить имеющийся жс код, но стоит глянуть.

loz ★★★★★ ()
Ответ на: комментарий от subwoofer

Йоу. Я слышал, ты любишь Javascript. Так мы встроили QmlExpression в твой Javascript, чтобы ты мог писать на Javascript, пока пишешь на Javascript.

i-rinat ★★★★★ ()
Ответ на: комментарий от tailgunner

Только не называй свое JSON-говно «языком»
Предложить название для JSON? Хм... «JSON» подойдет?
Любая форма записи вызова функции - S-выражение,

Ну и какая разница между

(hello-world 42)

и

{"call": ["hello-world", 42]}

Почему первое можно назвать не просто S-выражением, а LISP-ом, а второе должно непременно остаться JSON? Что json, что sexp—просто алфавиты в данном случае.

Хоть бы на месте ТС я и нахерачил лисп, но это не от большого ума, а потому что упоротый до него.

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

Ну и какая разница между

Одно - JSON, второе - S-exp // К.О.

Языком не является ни то, ни другое.

Почему первое можно назвать не просто S-выражением, а LISP-ом

Почему можно? Нельзя.

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

Языком не является ни то, ни другое.

Ну здрасьте. Оно языками не является, если в нем нет семантики (если рассматривать это просто как поток данных например). С семантической нагрузкой это самые обычные DSL-и.

staseg ★★★★★ ()
Ответ на: комментарий от i-rinat

Я слышал, ты любишь Javascript.

Ты меня с кемто путаешь.

subwoofer ★★★★★ ()
Ответ на: комментарий от staseg

{«call»: [«hello-world», 42]}

Ну емае, тыж лиспер, пиши так:

[«hello-world», 42]

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

Лисп на джейсоне слишком очевиден в этом плане. Да и первый вариант записи дает больше простых рычагов ограничения языка.

staseg ★★★★★ ()

Сгенерировать свой парсер на peg.js?

Vit ★★★★★ ()

В чем проблема написать класс для конструирования выражений на жс и потом прикрутить к нему типизацию (из TypeScript или FlowType)?

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

{«call»: [«hello-world», 42]}

Ну емае, тыж лиспер, пиши так: [«hello-world», 42]

ну, ё-моё, лиспер же:

{"call": {
           "hello-world": [ "42" ]
         }
}
anonymous ()
Ответ на: комментарий от tailgunner

Перечитай ещё раз исходное сообщение и подумай может быть ты ослеп и тебе плохо?

anonymous ()

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

anonymous ()

Некропостинг, 80lv

unikoid, пишу тут потому что твоя старая тема уже закрыта, про поиск Marc A. Pullen. Я тоже долго искал и в итоге на неё и вышел. Найти его по прежнему нереально, торренты он ещё не открыл похоже, но выкладывает всё в lossless на soundclouds, качать оттуда тоже жопа, но я свершил этот подвиг и даже теги все прописал, в общем лови ништяк, 25 альбомов. Хотел сначала на торрент положить, но там такие требования к релизерам что ну их лесом, кому надо тут найдут, удалять пока не стану. Дискография Marc A. Pullen 1999-2016 flac

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