LINUX.ORG.RU
Ответ на: комментарий от anonymous

Это что? «вот вам тема, потролльтесь сами»?

нет, вполне серьезная тема. На чем лучше создавать DSL.
Говорят, Common Lisp хорош, но я пока новичок в нем.

Progressive
() автор топика
Ответ на: комментарий от stevejobs

причем второй «выстрелил» ажно на семь страниц:

то ли еще будет. Я ЛОР читаю лет 5

Progressive
() автор топика

худший - С++

Именно по этой причине на нем написаны сотни применяемых на практике DSLей.

лучший - не знаю.

Ну, наверное, тот, на котором написаны сотни применяемых на практике DSLей, нет?

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

Кому очевидно? apt-get <что> мне надо сказать, чтобы установить сотни написаных на скобкоте DSLей?

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

Boost::Spirit

Это выкидыш от DSL.
Собственно, я и имел в виду создание DSL на C++ c помощью шаблонов. Откровенно неудачная семантика, но люди плачут и продолжают создавать вещи вроде Spirit.

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

я и имел в виду создание DSL на C++ c помощью шаблонов.

То есть ты про eDSL в частности а не про DSL вообще говоришь, так?

Есть мнение, что eDSL это плохо, а DSL это хорошо.

anonymous
()

так ведь по-моему язык не важен, главное инструментарий, типа bison или antlr

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

Пролистал, не понравилось. Эта ваша автомагическая расстановка скобок — это просто ад.

Manhunt ★★★★★
()

худший - С++

Нет. Если ты, про eDSL, то кресты далеко не самые убогие (скорее от безрыбья).

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

Собственно, я и имел в виду создание DSL на C++ c помощью шаблонов.

Это eDSL.

Откровенно неудачная семантика, но люди плачут и продолжают создавать вещи вроде Spirit.

Типо хаскелля.

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

Типо хаскелля.

Я не против функциональных языков. Я про то, что шаблоны - инструмент, отлично подходящий для контейнеров, но не для метапрограммирования. Писать кучу специализаций лишь для организации листов, и вытаскивать значения через enum (ну, до constexpr) и typedef - это звездец.

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

http://core.tcl.tk/

можешь глянуть тухлость как самого языка так и сопутствующих ему библиотек.

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

нет, вполне серьезная тема. На чем лучше создавать DSL. Говорят, Common Lisp хорош, но я пока новичок в нем.

На нём их (eDSL с лиспообразным синтаксисом) вообще легко клепать. С любым другим синтаксисом тоже несложно, но надо парсер в s-выражения или самому написать, или генератор какой-нибудь использовать. А как в лисп перевёл, тот сидишь себе и трансформируешь, как хочется.

mv ★★★★★
()

Может и есть языки созданные специально для написания dslей, но в лиспе ты имеешь из dsl доступ к самому лиспу и всем его возможностям. Плюс не надо заморачиваться синтакисом.

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

Может и есть языки созданные специально для написания dslей, но в C++ ты имеешь из dsl доступ к самому C++ и всем его возможностям. Плюс не надо заморачиваться синтакисом.

Пофиксил. Казалось бы, ну и в чем разница?

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

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

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

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

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

Как минимум тебя надо будет иметь парсер

Чем не угодил парсер, встроенный в компилятор С++?

Ты же в своем лисп-овом DSL не собираешься отказываться от упоротой скобчатой мудянки? Ну так и я в своем C++-ном DLS не буду оказываться от плюсового синтаксиса.

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

Неподготовленные люди воспринимают эти ваши s-expressions именно так :)

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

Ну вот, например, возьмем markdown. Попробуй загнать его в s-expressions, и что от былой выразительности и наглядности останется?

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

мм так я новый синтаксис макросами введу, а тебе придется парсить код чтобы это сделать.

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

Ты просто неправильно смотришь http://blog.ppenev.com/parens.png

Детский сад какой-то.

так я новый синтаксис макросами введу

Новый синтаксис со старыми убогими скобочками? :D Это не засчитывается, я уже написал, почему.

А для более-менее нормального DSL тебе придётся нахреначить полноценный парсер (например, PEG с мемоизацией), и подцепить к нему нетривиальный бэкенд (например, кодогенератор). В таком случае вставка фрагментиков LISP/C++ кода в новый язычок будет наименьшей из проблем, и от деланья всего этого именно макросами никакого заметного профита нет. В конце концов, фрагментики LISP/C++ кода придётся как-то обрамлять на уровне DSL-синтаксиса, так что в синтаксис самих фрагментиков парсеру можно и не вникать. Бездумно выкусит эти фрагментики (т.е. всё, что находится внутри обрамления), и натравит на них нормальный компилятор C++.

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

Ну вот, например, возьмем markdown. Попробуй загнать его в s-expressions, и что от былой выразительности и наглядности останется?

Да все останется как было, только скобки добавятся.

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

Так секспры как раз и удовлетворяют условию минимальности, нет?

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

Чем не угодил парсер, встроенный в компилятор С++?

Тем, что парсер в компиляторе работает вне плюсового рантайма программы.

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

А для более-менее нормального DSL

Ты можешь привести пример более-менее нормального НЕ скобочного дсл?

тебе придётся нахреначить полноценный парсер

Нужен только токенайзер (который пишется тривиально)

и подцепить к нему нетривиальный бэкенд (например, кодогенератор).

Зачем? Код генерируется макросами. Нахрена тебе кодогенератор?

и от деланья всего этого именно макросами никакого заметного профита нет.

Профит в том, что ты используешь инфраструктуру имеющегося компилятора, в результате чего объем работы сокращается на порядок. При этом сам компилятор и его АПИ изначально сделан удобным для решения подобных задач.

Бездумно выкусит эти фрагментики (т.е. всё, что находится внутри обрамления), и натравит на них нормальный компилятор C++.

А если фрагментики надо выполнить на этапе компиляции?

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

Ты можешь привести пример более-менее нормального НЕ скобочного дсл?

Markdown. Мне этот язык кажется примером просто идеального DSL: синтакис и семантика до предела прогнуты под предметную область и под нужды специалистов из предметной области. Легко писать, легко читать, легко предсказать результат работы, всё очень наглядно, не отвлекает внимание пользователя для удовлетворения своих технических нужд.

И этот пример как раз демонстрирует всю убогость попыток выдать скобчатый/плюсовый/любой-другой-general-purpose синтаксис за DSL.

Профит в том, что ты используешь инфраструктуру имеющегося компилятора, в результате чего объем работы сокращается на порядок. При этом сам компилятор и его АПИ изначально сделан удобным для решения подобных задач.

Ну так и для С++ кода можно использовать инфраструктуру имеющегося компилятора, если зачем-то понадобилось инлайнить внутрь DSL куски кода на general-purpose языке.

А если фрагментики надо выполнить на этапе компиляции?

Ну и выполняй, в чем проблема? Никогда не видел JIT на C++?

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

Markdown.

В каком месте он нескобочный? Там все конструкции можно изоморфно поменять на скобки.

Ну так и для С++ кода можно использовать инфраструктуру имеющегося компилятора

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

Ну и выполняй, в чем проблема?

Ну так нету ни одной реализации, которая бы позволяла делать подобные вещи.

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

Ты издеваешься?

Нет. Приведи дсл в котором синтаксис минимальнее секспров. Сразу скажу, что Markdown не подходит - там синтаксис более загруженный и если переделать его на скобочный, то он упростится.

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

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

Посмотри на ракетку — там прологоподобный DSL есть из коробки. Без скобок. И можно бесшовно использовать в ракетных войсках проектах.

Правда не знаю, корректно ли это называть DSL.

habamax ★★★
()

Похэпэ убер аллес!

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

Там все конструкции можно изоморфно поменять на скобки.

Можно, если сперва эти конструкции распарсить (если что, грамматика там — тип 0 по иерархии хомского). А можно из буханки хлеба сделать троллейбус. Только вменяемым DSL эта изоморфная форма уже не будет.

В каком месте он нескобочный?

В таком, что секспровых скобок в нем нет.

Ну так нету ни одной реализации, которая бы позволяла делать подобные вещи.

http://llvm.org/devmtg/2008-08/Begeman_EfficientJIT.pdf

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

Приведи дсл в котором синтаксис минимальнее секспров. Сразу скажу, что Markdown не подходит - там синтаксис более загруженный

define «загруженный»

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

Markdown говно, референсная реализация - помойка на регэкспах, которую уже даже сами авторы (кто жив остался) не понимают.

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