Нет. Тот текст, который юзается в современных языках -- низкоуровневый. Словесное неформальное описание алгоритма зачастую в 3-10 раз короче его описания на языке программирования.
> И вообще, с чего вы взяли, что программить надо в тексте?
>Словесное неформальное описание алгоритма зачастую в 3-10 раз короче его описания на языке программирования.
но при выдаётся не вся инфа ;) а вообще это тут не при чём. Я про то, что кода я трансформирую модель одну в другую (а они могут быть сильно не похожи), я хочу _структурную_ трансформацию. А не заботиться как там и как тут строчки кодируются, как списки, и разделитиели какие. это всё ненужные мне мелочи.
Я знаю что употребляю термин несколько не поназначению. Уповаю на то, что вы меня поймёте. А формальное определение КС знаю, просто удобно так говорить)
Нет. В с++ (особенно если говоритьо без препроцессора, но и с ним ессно тоже), глядя на текст программы, вы поёмете что он делает. как компилятор понимает. в МПС - нет. Визульная часть там - далеко не всё.
> Я знаю что употребляю термин несколько не поназначению. Уповаю на то, что вы меня поймёте.
Не несколько, а совершенно не по назначению (КС грамматика позволяет терминал выводить из совершенно разных нетерминалов, что и позволит его употреблять контекстно зависимо). И не понимаю (может потому, что болею чуть-чуть, а может потому что ты меня не понимаешь, и поэтому я не могу сделать твердый вывод, что я тебя понимаю).
В общем, предлагаю термин КонтекстноЗависимый и предлагаю тут тебе в общих чертах (но полно) определить его в контексте МПС.
> я хочу _структурную_ трансформацию. А не заботиться как там и как тут строчки кодируются, как списки, и разделитиели какие. это всё ненужные мне мелочи.
Собственно и я хочу, и меня мелочи в определенных случаях мало волнуют,
но структурная трансформация уже сто лет^W^W пятьдесят лет делается через парсеры, а не редакторы, загоняющие меня насильно в структуру.
Когда я говорю про контекстно-свободность, я имею ввиду то, что парсер использует семантику(типы переменных, где они располжены, и.т.д), что бы распознать тип лексемы. До некторой степени конечно можно играться лексером. По работе писал парсер с семантико-зависимым лексером: автор языка подумал что удобно писать ObjectPropertyName вместо Object.Property.Name =) Вот такой изврат я считаю не КС. просто использую "простой" смысл "контекстно-свободная", тоесть синтаксис не зависит от семантики. расплывчато, но надеюсь достаточно)
Структурная трансформация делается через трансформаторы =) при чём здесь парсеры и редакторы? Или вы про то что там нет command line утлиты, которая по .mps файлам генерила .xxx?
> Или вы про то что там нет command line утлиты, которая по .mps файлам генерила .xxx?
Из того, что я поковырял (т.е. туториал и примеры), все таки одного не понял. - вот я хочу допустим использовать это у себя (к стати, с лицензией не понятно, что там apache, а что будет за деньги), дык вот, хочу я использовать допустим для языка отчетов. И получается, что mpc мне не подходит, т.к. нету такого генератора - txt -> нечто(например java).? И любое редактирование требует mpc среды?
> Теперь Лисп перестал быть единственным игроком в этой области.
Да никогда он там не был "единственным игроком". Решений куча, от прагматичных "звёзд-с-неба-не-хватающих" bison/yacc, до экзотики типа REBOL.
Просто Лисп среди них всех выделяется наибольшей е*анутостью - как синтаксиса, так и его адептов. По сути являясь среди них одновременно самым примитивным (по возможностям) и сложным (в использовании).
Невменяемость синтаксиса и снискала Лиспу ложную славу языка якобы элитарного, доступного единицам, Первоязыка. Подобное же впечатление оставляют звуколожцы (аудиофилы) - любители "тёплого лампового звука", которые считают, что быдлу этого не понять, а сами не отличают на слух как звучит кабель из бескислородной меди за $900 и разогнутая проволочная вешалка.
Я это не выяснил. Вполне возможно они нас хотят залочить на свою среду.
Но в нормальном случае может быть так: иерархическая струтура программы хранится в человеко-плохочитаемом формате (например, XML). И редактировать ее можно в том же формате.
Это - полноценный language workbench, среда для разработки языка и разработки на языке. Обеспечивает полный цикл разработки, включая визуальную отладку и профайлинг на самом DSL'е. Это само по себе уникальное явление, да ещё и помноженное на бенефиты JVM и Java-рантайма.
Конечно, лиспари вам скажут, что это всё не нужно. Что лучшая на свете IDE - это REPL (напомню, это такая текстовая консолька, в которую вводят команды, без возможности хождения по хистори, элементарных комплишенов и зачастую без банального редактирования). Но рекомендую не принимать всерьёз эту сектантскую чепуху. У тех, кто занимается делом, а не дрочит, извиняюсь, на скобки, подобный бред вызывает лишь недоуменную ухмылку, да желание покрутить пальцем у виска.
Если забыть про абсурдность самой задачи (я даже не представляю, в каком изменённом состоянии сознания Вам пришла в голову такая нелепая идея - поставить всё с ног на голову: не реализовывать DSL на Лиспе, а реализовывать Лисп как DSL!), то я не вижу принципиальных проблем, по которым нельзя было бы реализовать на MPS Лисп, пусть минимальный, но даже с полноценными макрами.
> Я никому ничего не обязан доказывать. Если Вас интересует проблема, займитесь ею.
Ага, этим и занимаюсь -- изучаю возможности МПС.
> Я с удовольствием выслушаю мнение более зрячего (но, увы, менее вежливого) коллеги
Я себя не позиционирую как более зрячего (и менее вежливого :-) но DSL framework как минимум должен уметь eval & apply. Пафос мне претит. А мысль сравнить МПС с лиспом -- интересна.
Попытка сделать DSL framework весьма интересна, и при этом надо обратить внимание не на отстутсвие истории в каком-нить лиспе, а на возможноные дефекты МПС... так как лисп я применять не собираюсь, а вот что-то похожее на МПС -- вполне.
>Вот сначала реализуй лисп из 10 функций как DSL, а потом разводи тут пафос.
Есть аналог MPS symade.com (svn и symade.org кудато провалился) - отдельный подобный проект от автора kiev compiler. Так вот AFAIK последний kiev compiler реализован на нем - это расширеная жаба которая в частности имеет встроеный в язык prolog engine.
То есть не знаю как на счет MPS но в подобном ему symade подобне штуки делаются.
>Я это не выяснил. Вполне возможно они нас хотят залочить на свою среду.
Дело не в этом. Одна из основных целей подхода - кроме DSL создавать одновременно IDE для DSL. symade при полной своей независимости от mps тоже выглядит подобным образом.
Сам по себе МПС ничего не умеет. Это же генеративнй подохо. Как вариант - написать на МПС в качестве нихзкого уровня язык лисп, а поверх него генерить уже что то доменноспецепфично, с евалами, блекджеком и шлюхами.
>иерархическая струтура программы хранится в человеко-плохочитаемом формате (например, XML). Можно править ксмэльные файлы в которых вся структура. мне даже приходилось такое делать, когда МПС поттупливал :) но в чистом виде это тяжко, конечно.
>То есть не знаю как на счет MPS но в подобном ему symade подобне штуки делаются.
В МПС на раз-два) Сам МПС написан на МПСе. Там для поддержки системы типов введён специальное декларативное расширение базового языка, на котором можно писать кучу равенств и не равенств типов, а он сам выводит:
typeof(assignmennt.leftPart) :>=: typeof(assignment.rightPart)
typeof(stringLiteral) :==: <string>
> Это как раз флекс и бизон может осилить каждый. А вот идею МПС не понял почти никто в этом треде. Что обидно, хотелось обсудить, ибо тема интересная. А срач начался уже с первой страницы =/
я правильно понял что если раньше для домено-специфичных было модно предоставлять формочки и визуальные 2D-рисовалки, то теперь наконец доперли что текст будет все-таки поудобнее?
А какова мощность у этих домено-специфичных языков? Парсер, говорите, предоставляется... вот если у меня домен - HTML, как, сойдет? валидность за меня оно сможет проверить?
по теме редактора dsl-языка - штука вообще полезная и приятная, если не злоупотреблять. подсвечивалку синтаксиса для emacs/vim сможете сгенерировать?
>Было модно предоставлять формочки и визуальные 2D-рисовалки, то теперь наконец доперли что текст будет все-таки поудобнее?
Для кого и чего удобнее? Чбоы программить - да, удобнее. А что бы создавать доменно спецефичны языки _моделирования_ - не удобнее. Есть подозрение на программизм головного мозга.
>HTML, как, сойдет?
Да. Но сам по себе хтмл в МПС - бессмысленен. Ибо в стурктурном редакторе не удобен, ибо почти plain text. Но нужен же не сам ХТМЛ, а более высокоруовневые конструкции поверх него, так что сойдёт.
>>Было модно предоставлять формочки и визуальные 2D-рисовалки, то теперь наконец доперли что текст будет все-таки поудобнее?
>Для кого и чего удобнее? Чбоы программить - да, удобнее. А что бы создавать доменно спецефичны языки _моделирования_ - не удобнее. Есть подозрение на программизм головного мозга.
не программизм мозга, а наличие оного. Текстовое представление всегда удобнее - его можно говорить, комментировать в почте и тд. Разницу между двумя версиями текста легко увидеть. А вот разница между двумя, например, pdf-ками как? Открыть 2 окна рядом и сколлить вверх-вниз??
>>HTML, как, сойдет? > Да. Но сам по себе хтмл в МПС - бессмысленен. Ибо в стурктурном редакторе не удобен, ибо почти plain text. Но нужен же не сам ХТМЛ, а более высокоруовневые конструкции поверх него, так что сойдёт.
итого, нас интересуют только предметные области где текст имеет высокую структуру (уши формочек уже видны), и его много. То есть там много однотипных элементов. Тут встает вопрос - текст во время жизни системы наверняка будет меняться, и не одним человеком. Не значит ли это, что его на самом деле следует хранить в БД (и тогда структурный редактор - только для редактирования) ?
>А вот разница между двумя, например, pdf-ками как? Открыть 2 окна рядом и сколлить вверх-вниз??
То что некторые фичи, проще _реализовать_ для плйн текста ещё ни о чём не говорит. Хотите - подстраивайтесь под компьютер. Но мне читать пдф удобнее, чем разметченный тех. И потому дифф хочу видеть тоже для ПДФ а не для текста (да, я знаю что для ПДФ его не сделать нормально, но это не повод говорить, что его не сделать _нигде_). Именно это я и называю ПГМ. Извените, но мне читать проще ПДФ, чем тех-овский маркап. А системы пишуется в первую очередь для людей, а не для компов (если это конечно не халтурка на неделю).
>(и тогда структурный редактор - только для редактирования)
Простите, не понял - а зачем ещё редакторы, как не для реактирования? о_О
>итого, нас интересуют только предметные области где текст имеет высокую структуру (уши формочек уже видны)
Да, если я проектирую 'электросхемы, мне удобнее эти схемы рисовать, а не описывать в dot стиле. Нагляднее както. А это как раз Domain Specific Modeling language.
>>(и тогда структурный редактор - только для редактирования)
>Простите, не понял - а зачем ещё редакторы, как не для реактирования? о_О
я имею ввиду что в случае хранения данных модели в БД скорее всего редактировать надо будет один элемент за раз, и тогда ваш размеченный редактор мало чем отличается от нарисованной в VB формы..
>итого, нас интересуют только предметные области где текст имеет высокую структуру (уши формочек уже видны)
> Да, если я проектирую 'электросхемы, мне удобнее эти схемы рисовать, а не описывать в dot стиле. Нагляднее както. А это как раз Domain Specific Modeling language.
ну, не всегда... там тоже VHDL и прочие похожие языки есть... хотя вообще - согласен - есть области деятельности где наиболее естественное представление - не текстовое. Но мы сейчас ведь MPS обсуждаем и о них не говорим, правильно?
>ну, не всегда... там тоже VHDL и прочие похожие языки есть... хотя вообще - согласен - есть области деятельности где наиболее естественное представление - не текстовое. Но мы сейчас ведь MPS обсуждаем и о них не говорим, правильно?
Ну это же вы ехидничали на "формочками"?
>я имею ввиду что в случае хранения данных модели в БД скорее всего редактировать надо будет один элемент за раз, и тогда ваш размеченный редактор мало чем отличается от нарисованной в VB формы..
Расскажу. Когда содержание этих "форм" достаточно сложное. Приведу конкретный пример из МПС: http://www.jetbrains.com/mps/docs/tutorial/image103.png Да, в какмо то смысле это формочка, но с достаточно сложным контентом (Например поле такой формы - это полноценное выражение на каком то ДСЛ, который достаточно знает про те данные которыми оперирует, и имеет для их обработки удобные конструкции.
З.Ы. Если вы смотрели тутор, то там вообще java реализована в качестве базового языка. Какие формочки?
w.l.o.r.> Они предложили новый язык строго внутри своей IDE или с возможностью расширять их макросы/шаблоны посторонней командно-строчной тулзой > а чем людям flex и bison не угодили?
В двух словах, он утверждает, что внешний DSL "на flex/bison" -- это плохо, потому что нет интеграции с другими языками приложения; и eDSL это плохо тоже, потому что "не понимает семантики" -- валидаторы на проверку типов, и т.п. В MPS, например, в поле "expression" нельзя ввести что-то не expression. Плюс MPS IDE кагбе говорит нам, какого типа очередные вводимые элементы, и ввода чего оно ждёт.
> Если все возможности МПС только генеративны, его можно закопать прямо сейчас. Я полагал, что у МПС есть применение типа как у шаблонов, т.е. если надо что-то генерить в зависимости от типа или проверять инфу основанную на типе.
посмотри туториал с калькулятором и подумай ещё раз. Там как раз это и сделано. Заодно посмотри, во что превращается сгенерированный код на яве (раздел про генераторы). Смысл MPS и Language Workbench, как я понимаю, именно в явном выделении метаописания создаваемого языка, и интегрируемости языка в IDE: автоматическое применение валидаторов описанных полей, completion в IDE, и т.п.
> Они привинтили к своей МПС комплешен, которого у бизона из коробки нет.
ну, комплишен "из коробки" есть и у vim (если собрать теги вроде ctags и дополнять по ним). Только он не понимает семантику, и будет пытаться дополнять чем не надо в данном контексте.
>и у меня в частности есть такой вопрос: изменение парсинга исходного текста в зависимости от типов данных -- это хорошо или извращение? >Ну например изменение приоритета операторов в зависимости от типов, но не только это.
зачем? какая практическая с того польза?
второй пример напоминает анекдот:
"- доктор, когда я делаю вот так, у меня рука болит.
- А вы "вот так" не делайте."
вообще в форте имхо так можно. Но зачем? Имитируем кавычку в лисповых макрах?
> - не согласен, что редатировать надо *иерархический объект*. Редактировать надо текст, внутри которого, когда это возможно, распознан иерархический объект, и операции редактирования текста расширены операциями редактирования этого объекта.
редактировать надо *структурный* объект, на уровне структуры. В том же vim есть команды перемещения/работы с разными единицами: буква/слово/предложение/абзац, или в случае языков программирования буква/лексема/statement/функция.