Re[2]: Универсальный синтаксис для языков программирования
От: Andrei F.  
Дата: 20.10.08 04:08
Оценка:
Здравствуйте, ., Вы писали:

.>Подумай, чем бы ты мог заменить язык регулярных выражений, скажем?


Регэксы — это хороший пример. Совершенно пакостный write-only синтаксис
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[6]: Универсальный синтаксис для языков программирования
От: mkizub Литва http://symade.tigris.org
Дата: 20.10.08 08:25
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>AST строится на основании грамматических правил с учётом семантических ограничений. Это вспомогательная конcтрукция, а не целевая. Понимаешь? Задача компилятора — вовсе не AST сгенерировать, а выдать исполняемый код. AST — только промежуточная форма представления, подчиняющаяся тем правилам, которые отражены в синтаксисе исходного языка. Синтаксические правила, в свою очередь, тесно связаны с семантикой конструкций языка. Разные языки — разные AST.


Это всё правильно и неправильно одновременно.
Скажи, байткод — это промежуточная форма представления или целевая? Байткод ведь можно интерпретировать непосредственно, а можно скомпилировать в нэйтивный код, а можно создать процессор, который будет на аппаратном уровне поддерживать исполнения байткода. Так как он — целевая или промежуточная форма?
С AST аналогично. Фактически, после того, как AST был слинкован (символьные имены были resolved) и верифицирован — его можно исполнять, интерпретировать. Или можно продолжать его трансляцию (перевод) на другой язык — на язык байткода, на язык нэйтивных инструкций и т.п. В этом смысле AST ничем от байткода или нэйтивного кода не отличается. А с точки зрения программиста — отличается. Потому как AST (особенно если под S понимать семантику, а не синтаксис) и есть его программа. Потом эту программу можно транслировать для разных backend-ов, с разной степенью оптимизации, разным ABI — но это будет всё та-же программа.

C>>После того, как дерево построено, про исходный синтаксис можно забыть. Он больше не оказывает влияние на дальнейший процесс компиляции и исполнение программы.


ГВ>Угу. Но это дерево не может быть абы каким. Оно (его структура) тоже подчиняется жёстким правилам, заданным языком.


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

ГВ>Остаётся задать вполне логичный вопрос: а кто, и главное, как будет компилировать это самое "какое угодно" AST? Вот тебе AST, сформулированное на Lisp:


ГВ>
(node-a (construct1 a b) (construct2 c d))


ГВ>Дальше что вы намерены делать?


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

ГВ>Верно, само дерево описать не сложно. Вопрос в том, повторюсь, какое именно это должно быть дерево. То есть ключевой момент — семантика узлов AST.


"Семантика" будет определятся либо на этапе декларации узла (для "макросов"), либо внешними плагинами (tree transformation), либо она будет "встроенной" в бэкенд(ы).

ГВ>Можно задать такой набора правил, что структура узлов даного XML-дерева будет сильно похожа на AST C#. Даже эквивалентна. Но человеку оперировать такими конструкциями дико неудобно. Сокращаем до уровня удобства — получаем обратно C# или язык, эквивалентный C# с точностью до вида лексем. Ну, сможем заменить class на, скажем, XSetDescription какой-нибудь.


Посмотри на XL — с одной стороны достаточно гибкий, по мощности не уступающий лиспу. С другой стороны — по выразительности (краткости) не уступающий C#.
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
Re[6]: Универсальный синтаксис для языков программирования
От: Chrome  
Дата: 20.10.08 09:35
Оценка:
MC>Так что Вы хотите получить в итоге? Метаязык, подмножеством которого будут другие языки? Как XML, только более пригодный для человекописания?

Как XML, только более пригодный для человекописания? — Примерно так, но очень упрощенно. Что стоит позаимствовать у xml:
1) тривиальный и понятный лексический анализатор — то есть первый уровень корректности оформления программы можно оценить даже не загружая грамматику (xml schema)
2) единообразие конструкций
3) возможность расширять грамматику на самом XML
Конечно, человек не потерпит огромной избыточности, присущей XML описанию или прямой кальки с него.
То есть компилятору придется проводить некоторые вычисления для прояснения умолчаний, подобно тому, как современные языки производят вывод типов.

Метаязык, подмножеством которого будут другие языки — нет — подмножеством они не будут, то есть ни в коем случае нельзя будет вставить фрагмент кода на исходном языке с сохранением оригинального синтаксиса, но можно будет написать эквивалентный фрагмент при помощи универсального синтаксиса.

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

И этот метаязык не имеет за душой никаких намерений, кроме построения по этим правилам типизированного дерева (DOM)
Это дерево затем передается компилятору(или нескольким), который смотрит на него как на AST
Это же дерево доступно программе в Runtime — она использует его как данные.

Что бы импортировать "язык программирования" необходимо подключить(#include) модуль с описанием конструкций языка на самом метаязыке и добавить к компилятору модуль трансляции дерева DOM в дерево для back end компилятора.
Re[2]: Универсальный синтаксис для языков программирования
От: Mr.Cat  
Дата: 20.10.08 09:51
Оценка:
Здравствуйте, ., Вы писали:
.>Подумай, чем бы ты мог заменить язык регулярных выражений, скажем?

Ну вот boost::xpressive гляньте. Вполне адекватная замена для небольших выражений.
Re[7]: Универсальный синтаксис для языков программирования
От: Mr.Cat  
Дата: 20.10.08 09:52
Оценка:
Ну что ж. Идея ясна, хотя профит от такой затеи мне кажется сомнительным. Когда ждать набросков языка?
Re[8]: Универсальный синтаксис для языков программирования
От: Chrome  
Дата: 20.10.08 10:15
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Ну что ж. Идея ясна, хотя профит от такой затеи мне кажется сомнительным. Когда ждать набросков языка?


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

Универсальный синтаксис — значит универсальная качесвенная среда разработки,
устранение границ между вселенными разных языков — подключил модуль, изучил концепции другого языка и можешь начинать писать, вместо того что бы ставить отдельную IDE
Отсутсвует синтаксический шок при изучении другого языка.
Создание своего языка упрощается — вы не пишете лексический анализатор, гораздо проще создать грамматику, и то не целиком, а только уникальную часть
ну и т д.

Или все же сомнения в возможности реализации?
Re[7]: на основе си-подобных языков со встроенным xml?
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.10.08 10:29
Оценка:
Здравствуйте, x-code, Вы писали:

VD>>Вообще-то это было бы удобно. Только грамотнее был бы не вводить один конкретный (хотя и очень распространённый формат), а предоставить некое средство для описания преобразования из строки в граф объектов. Тогда можно было бы очень для многого сделать хорошую поддержку инициализации (и не только).


XC>Еще более абстрактное чем XML? Интересно, как это могло-бы выглядеть?


Прочти еще раз мои слова, но более внимательно. Речь не идет о введении формата (ни нового, ни старого).
Речь идет о предоставлении программистам некого АПИ (или слоглашений) которые позволят расширять компилятор.

Скажем описываем функцию:
ststic class Initializers
{
  [Initializer]
  public static Expression[Fun[XElement]] XXml(string input, CompilerContext compilerContext)
  {
     ... // парсим ХМЛ из строки и преборазуем его в Expression генерирующий (после преобразования в код) XElement.
  }
}

Компилятор находит фунции помеченные атрибутом Initializer и проверяет можно ли скомплировать ее в отельную сборку. Если нельзя, выдает сообщение об ошибке. Если можно, помещает ее в сборку инициализаторов и вызывает когда в коде встртит выражение вида:
XElement elem = XXml(@"<teg></teg>");

XXml распарсивает ХМЛ и возвращает Expression (т.е. дерево выражений из C# 3.0) описывающий функцию генерирующую требуемый граф объектов типа XElement.
Далее компилятор преобразует Expression в MSIL и помещает вместо вызова XXml.

В итоге в файле оказывается код аналогичный прямому описанию ХМЛ-я в виде объектов. При этом в коде мы описываем только текст ХМЛ-я. Это соответствует тому что мы имеем в Васике, но формат (ХМЛ в данном случае) не пришит гвоздями к языку. Любой программист сможет сделать свой инициализатор для своих нужды.

Вот только XXml — это ни что иное как макрос. А их так боится Хейлсберг.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Универсальный синтаксис для языков программирования
От: . Великобритания  
Дата: 20.10.08 12:10
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>>>Для C++ уже есть — частично в GCC-XML, частично в LLVM.

MC>>Почитав про gcc-xml, понял, что идея с универсальным синтаксисом не так уж нереальна. Только синтаксис этот — как gcc-xml — не для людей предназначен будет.
C>Да, именно. Любой синтаксис в итоге превращается в дерево. Дерево можно представить по желанию в виде XML, S-выражений LISPа, и т.п.
Вообще-то в граф превращается. В дерево он нередко со скрипом лезет.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[9]: Универсальный синтаксис для языков программирования
От: Beam Россия  
Дата: 20.10.08 12:30
Оценка: 1 (1)
Добавлю и я свои пять копеек.

Здравствуйте, Chrome, Вы писали:

C>Но почему кажется сомнительным профит от затеи? Для меня это неожиданно.

C>Универсальный синтаксис — значит универсальная качесвенная среда разработки,

Связь не очевидна. Функции IDE сильно зависят от семантики языка (рефакторинг и множество других вещей)
Поэтому про универсальность, основанной только на синтаксисе говорить не приходится.
Хотя в IDE можно использовать плагины, которые решили бы эту проблему.
Как следствие, здесь качественная IDE = качественные плагины.

C>устранение границ между вселенными разных языков — подключил модуль, изучил концепции другого языка и можешь начинать писать, вместо того что бы ставить отдельную IDE


Предлагается использовать одновременно несколько концепций (языков) в проекте?
Тогда здесь встает проблема взаимодействия этих языков. Допустим на "вход" языка работы с матрицами должны подаваться массивы определенного вида, что совсем не очевидно для "выхода" языка "как С++". Т.е. все равно необходима некая, пусть и минимальная, семантика.

C>Отсутсвует синтаксический шок при изучении другого языка.


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

C>Создание своего языка упрощается — вы не пишете лексический анализатор, гораздо проще создать грамматику, и то не целиком, а только уникальную часть

C>ну и т д.

И здесь тоже согласен.
Более того, считаю что это самый важный плюс такого универсального синтаксиса. Уверен, что без разработки и использования различных DSL программирование далеко не уедет.

C>Или все же сомнения в возможности реализации?


Это смотря что понимать под реализацией. Все зависит от требований "человечности" такого языка.

Вон тот же XML и Lisp (что в плане синтаксиса почти одно и то же) — реализованы (шепотом: нечеловечны).
Или другая крайность. Всю программу рассматривать просто как последовательность слов (привет FORTH), и пусть "язык" сам разберется, что к чему. Но тогда пользы от такого синтаксиса ноль. Такое, например, можно сделать на LISP — сделать программу из одного большого списка операторов практически с любым синтаксисом, а затем анализировать его и исполнять.

Кстати сейчас появляются инструменты, позволяющие писать код прямо в AST. Как следствие, можно описать любой язык не задумываясь об его текстовом представлении. Если не ошибаюсь, такие средства (думаю в зачаточном состоянии) есть в Visual Studio и Intellij IDEA. Microsoft занимался (занимается?) Intentional Programming, mkizub — SymADE

Теперь о более конструктивных вещах. Если описывать синтаксис, незначительно касаясь семантики, то вот некоторые вещи которые можно было бы использовать:
— отступы (как в Python)
— инфиксные операторы с приоритетами и пр. настройками (Haskell, Prolog)
— игры с именами идентификаторов (начальные буквы или символы #, _, $ и пр.) (Erlang, Prolog, Haskell, Smalltalk, PHP)
— списки (Lisp) — группа чего-то
— порядок слов (в Smalltalk первым в предложении стоит объект, в Haskell, Lisp — функция, затем аргументы)
— описание (ключ:значение) (опять Smalltalk — сообщения с несколькими параметрами)
— предопределенные операторы, знаки пунктуации (например, точка как взятие части от целого или как окончание предложения, [] как описание группы, точка с запятой как ... ну не знаю я )
— ну и самое сложное и интересное — разнесение слов универсального языка к "частям речи" (привет J) и задание правил построения предложений. Ну чтобы AST формировался как разбор предложения естественного языка: HashMap — что? класс (существительное), какой? public (прилагательное), какой? static (тоже прилагательное). Так же с глаголами и наречиями.

Могу по-подробнее расписать, если непонятно выразился.
Вот как-то так...
Best regards, Буравчик
Re[7]: Универсальный синтаксис для языков программирования
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 20.10.08 12:41
Оценка:
Здравствуйте, Chrome, Вы писали:

C>Как XML, только более пригодный для человекописания? — Примерно так, но очень упрощенно. Что стоит позаимствовать у xml:

C>1) тривиальный и понятный лексический анализатор — то есть первый уровень корректности оформления программы можно оценить даже не загружая грамматику (xml schema)
C>2) единообразие конструкций
C>3) возможность расширять грамматику на самом XML
C>Конечно, человек не потерпит огромной избыточности, присущей XML описанию или прямой кальки с него.
C>То есть компилятору придется проводить некоторые вычисления для прояснения умолчаний, подобно тому, как современные языки производят вывод типов.

Я пока не понял, чем требуемое отличается от Лиспа. То же AST дерево в компактной записи, тоже есть возможности расширения (макросы)..
Re[10]: Универсальный синтаксис для языков программирования
От: Chrome  
Дата: 20.10.08 13:52
Оценка:
B>Связь не очевидна. Функции IDE сильно зависят от семантики языка (рефакторинг и множество других вещей)
B>Поэтому про универсальность, основанной только на синтаксисе говорить не приходится.
B>Хотя в IDE можно использовать плагины, которые решили бы эту проблему.
B>Как следствие, здесь качественная IDE = качественные плагины.

Проведем аналогию — Текстовый формат vs XML
для первого IDE — это notepad или отдельно написанный специализированный редактор
для XML — независимо от семантики, автоматически умеем строить outline дерева программы, базовая подсветка синтаксиса, после подключения схемы еще и intellisence, все без всякого знания предметной области

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

B>Предлагается использовать одновременно несколько концепций (языков) в проекте?

B>Тогда здесь встает проблема взаимодействия этих языков. Допустим на "вход" языка работы с матрицами должны подаваться массивы определенного вида, что совсем не очевидно для "выхода" языка "как С++". Т.е. все равно необходима некая, пусть и минимальная, семантика.

— согласен, трудности существуют.

B>Теперь о более конструктивных вещах. Если описывать синтаксис, незначительно касаясь семантики, то вот некоторые вещи которые можно было бы использовать:

B>- отступы (как в Python)
B>- инфиксные операторы с приоритетами и пр. настройками (Haskell, Prolog)
B>- игры с именами идентификаторов (начальные буквы или символы #, _, $ и пр.) (Erlang, Prolog, Haskell, Smalltalk, PHP)
B>- списки (Lisp) — группа чего-то
B>- порядок слов (в Smalltalk первым в предложении стоит объект, в Haskell, Lisp — функция, затем аргументы)
B>- описание (ключ:значение) (опять Smalltalk — сообщения с несколькими параметрами)
B>- предопределенные операторы, знаки пунктуации (например, точка как взятие части от целого или как окончание предложения, [] как описание группы, точка с запятой как ... ну не знаю я )
B>- ну и самое сложное и интересное — разнесение слов универсального языка к "частям речи" (привет J) и задание правил построения предложений. Ну чтобы AST формировался как разбор предложения естественного языка: HashMap — что? класс (существительное), какой? public (прилагательное), какой? static (тоже прилагательное). Так же с глаголами и наречиями.

B>Могу по-подробнее расписать, если непонятно выразился.


эта часть мне очень понравилась, спасибо.
Как раз размышляю над выразительными средствами синтаксиса.
отступы мне нравятся, но это дело вкуса
инфиксные операторы думаю обобщить как эквивалентную запись бинарной функции, от приоритетов думаю отказаться.
использовать регистр букв мне не нравится, не знаю почему, есть аргументы в их защиту? Вероятно это следствие русской культуры, вот для немцев — это в крови, у них все существительные с заглавных букв, а глаголы в конце предложения
ключ: значение — не очень знаком, посмотрю, ключи это имена параметров? может ввести предлоги? copy FROM src TO dest

в общем, если напишите еще на эту тему или дадите ссылки на интересные статьи, буду благодарен.
Re[7]: Универсальный синтаксис для языков программирования
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 20.10.08 15:42
Оценка:
Здравствуйте, mkizub, Вы писали:

ГВ>>AST строится на основании грамматических правил с учётом семантических ограничений. Это вспомогательная конcтрукция, а не целевая. Понимаешь? Задача компилятора — вовсе не AST сгенерировать, а выдать исполняемый код. AST — только промежуточная форма представления, подчиняющаяся тем правилам, которые отражены в синтаксисе исходного языка. Синтаксические правила, в свою очередь, тесно связаны с семантикой конструкций языка. Разные языки — разные AST.


M>Это всё правильно и неправильно одновременно.

M>Скажи, байткод — это промежуточная форма представления или целевая? Байткод ведь можно интерпретировать непосредственно, а можно скомпилировать в нэйтивный код, а можно создать процессор, который будет на аппаратном уровне поддерживать исполнения байткода. Так как он — целевая или промежуточная форма?

В корне неправильно рассуждаешь. "Можно сделать" всё со всем. В даном случае дискуссия завелась вокруг вполне определённых вещей — абстракции синтаксиса и компактного описания этого самого абстрактного синтаксиса. В данном случае есть вполне устоявшийся смысл термина AST — промежуточное представление синтаксических конструкций исходного языка программирования. В общем-то, его необходимость продиктована сугубо прагматическими соображениями удобства перевода одних описаний в другие.

C>>>После того, как дерево построено, про исходный синтаксис можно забыть. Он больше не оказывает влияние на дальнейший процесс компиляции и исполнение программы.


ГВ>>Угу. Но это дерево не может быть абы каким. Оно (его структура) тоже подчиняется жёстким правилам, заданным языком.


M>Опять-же правильно, но не до конца. Скажем, есть такое понятие как синтаксический сахар. Эти конструкции могут транслироваться в фиксированный набор семантических понятий поддерживаемых данным языком, но в семантике языка не представленные. То есть дерево может быть в достаточной степени "абы каким", лишь бы эти дополнительные части могли быть выражены через поддерживаемые в языке семантические понятия.


Гы. То есть критерий достаточности "абыкаковости" — возможность выразить новые конструкции через уже имеющиеся. Но именно об этом я и говорю. Только не обобщаю такие высказывания до "всевыразимости вообще". Выразить — можно. Больше того, всё, что умеет один Тьюринг-полный язык, сумеет и другой. Всё дело в цене таких выражений.

ГВ>>Остаётся задать вполне логичный вопрос: а кто, и главное, как будет компилировать это самое "какое угодно" AST? Вот тебе AST, сформулированное на Lisp:

ГВ>>
(node-a (construct1 a b) (construct2 c d))

ГВ>>Дальше что вы намерены делать?

M>Рискну предположить, что дальше это будет компилировать компьютер. На основе определений данных при декларации node-a (то есть эта декларация является макросом), или же на основе внешних подключаемых к компилятору плагинов, которые будут преобразовывать узлы типа node-a.


Да-да.

ГВ>>Верно, само дерево описать не сложно. Вопрос в том, повторюсь, какое именно это должно быть дерево. То есть ключевой момент — семантика узлов AST.


M>"Семантика" будет определятся либо на этапе декларации узла (для "макросов"), либо внешними плагинами (tree transformation), либо она будет "встроенной" в бэкенд(ы).


Правильно. Я об этом и говорю — есть некий первоначальный набор структур, который будет использоваться в качестве инструментального. А теперь попробуй прикинуть, как и почему этот самый первоначальный набор будет влиять на всё, что с его помощью порождается.

M>Посмотри на XL — с одной стороны достаточно гибкий, по мощности не уступающий лиспу. С другой стороны — по выразительности (краткости) не уступающий C#.


Спасибо, посмотрю.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[10]: Универсальный синтаксис для языков программирования
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.10.08 17:46
Оценка:
Здравствуйте, Beam, Вы писали:

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


Бог ты мой.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[6]: Универсальный синтаксис для языков программирования
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.10.08 17:46
Оценка: +1
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Разные языки — разные AST.


Более того — для разных целей в рамках одного языка тоже нужны разные AST, и AST для дизайн-тайма в IDE и AST для компиляторат обычно сильно отличаются.
Но и это еще не все — нередко сам компилятор в процессе компиляции использует несколько разных AST на разных этапах компиляции.
Поэтому говорить об универсальной AST для разных языков
Вобщем, как обычно, все скатилось на универсальные парсеры и хранение исходников в AST.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[7]: на основе си-подобных языков со встроенным xml?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.10.08 17:53
Оценка: +1 :))
Здравствуйте, x-code, Вы писали:

XC>Еще более абстрактное чем XML? Интересно, как это могло-бы выглядеть?


Я тебя научу. Если речь о Владе, то выглядеть это (и не только это) могло бы исключительно как Немерле, и никак иначе
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[7]: Универсальный синтаксис для языков программирования
От: Beam Россия  
Дата: 20.10.08 18:13
Оценка: :)
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Геннадий Васильев, Вы писали:


ГВ>>Разные языки — разные AST.


AVK>Вобщем, как обычно, все скатилось на универсальные парсеры и хранение исходников в AST.


А резве не такая цель стояла?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Best regards, Буравчик
Re[11]: Универсальный синтаксис для языков программирования
От: Beam Россия  
Дата: 20.10.08 18:21
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Beam, Вы писали:


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


AVK>Бог ты мой.


Вот только давайте не будем придираться к словам. Я думаю, Вы прекрасно понимаете о чем я говорю.
Но если все-таки нет, то вот (из первого попавшегося): A Language Workbench in Action &mdash; MPS
Сам такое не пробовал, но выглядит вполне симпатично.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Best regards, Буравчик
Re[12]: Универсальный синтаксис для языков программирования
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.10.08 18:27
Оценка:
Здравствуйте, Beam, Вы писали:

B>Вот только давайте не будем придираться к словам. Я думаю, Вы прекрасно понимаете о чем я говорю.


Понимаю конечно. Это и печалит.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[8]: на основе си-подобных языков со встроенным xml?
От: x-code  
Дата: 21.10.08 06:38
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>XXml распарсивает ХМЛ и возвращает Expression (т.е. дерево выражений из C# 3.0) описывающий функцию генерирующую требуемый граф объектов типа XElement.

VD>Далее компилятор преобразует Expression в MSIL и помещает вместо вызова XXml.
VD>В итоге в файле оказывается код аналогичный прямому описанию ХМЛ-я в виде объектов. При этом в коде мы описываем только текст ХМЛ-я. Это соответствует тому что мы имеем в Васике, но формат (ХМЛ в данном случае) не пришит гвоздями к языку. Любой программист сможет сделать свой инициализатор для своих нужды.
VD>Вот только XXml — это ни что иное как макрос. А их так боится Хейлсберг.

Хороший подход Но тогда получается, что и многие конструкции языка можно реализовать таким вот способом... Т.е. с этой точки зрения компилятор — это язык макросов + API к построителю деревьев выражений + генератор кода? А синтаксис — это только какая-то минимальная база (соглашения об именах, скобках, некотором минимуме ключевых слов и т.д.)
Кстати, "язык макросов" — это должен быть тот же язык, что и основной (как я понимаю, так сделано в Nemerle), или что-то другое? Если тот-же, то могут ли макросы использовать макросы, и что делать если для генерации кода макроса1 используется макрос2, а для макроса2 — макрос1, и т.д.?
Если сделать такую систему вне дотнета (например для С++ или D) — каким по Вашему должен быть язык макросов?

Кстати, изначально тема была про универсальный синтаксис, а при таком подходе получается что каждый программист сможет придумать себе какой-то свой синтаксис
Re: Универсальный синтаксис для языков программирования
От: Beam Россия  
Дата: 21.10.08 07:29
Оценка:
Здравствуйте, Chrome, Вы писали:

C>Вопрос такой – возможно ли отделить синтаксис языков программирования от семантики.

C>Возможно ли создать универсальный синтаксис, эффективный для человека и пригодный для описания произвольной семантики современных языков программирования.

А про какую универсальность всё-таки идёт речь?
Про универсальный синтаксис, покрывающий все языки, как таковой? Тогда, считаю, что это невозможно, ну или по крайней мере не удобно.
Если же речь про некую базу, на основе которой можно строить другие языки. То да, это возможно. И нужно.
Best regards, Буравчик
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.