Re[6]: Универсальный синтаксис для языков программирования
От: Cyberax Марс  
Дата: 16.10.08 22:53
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

C>>Испугался! А если я сейчас ещё напишу библиотеку, которая будет переводить регэксы в такую форму?

MC>Мряк. Зато, млин, универсальный синтаксис. Осталось разработать xml-схемы для sql и C++.
Для C++ уже есть — частично в GCC-XML, частично в LLVM.
Sapienti sat!
Re: Универсальный синтаксис для языков программирования
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 16.10.08 23:15
Оценка: -1 :)
Здравствуйте, Chrome, Вы писали:

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

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

Это слишком узко. Давай уж проще — напишем программу автоматизации всего. По логике вещей программа автоматизации всего не потребует языка, поскольку будет автоматизировать, в числе прочих, задачу выражения мыслей человека в машиночитаемом представлении.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[7]: Универсальный синтаксис для языков программирования
От: Mr.Cat  
Дата: 17.10.08 07:51
Оценка:
Здравствуйте, Cyberax, Вы писали:
C>Для C++ уже есть — частично в GCC-XML, частично в LLVM.

Почитав про gcc-xml, понял, что идея с универсальным синтаксисом не так уж нереальна. Только синтаксис этот — как gcc-xml — не для людей предназначен будет.
Re[2]: Универсальный синтаксис для языков программирования
От: Chrome  
Дата: 17.10.08 09:30
Оценка:
ГВ>Это слишком узко. Давай уж проще — напишем программу автоматизации всего. По логике вещей программа автоматизации всего не потребует языка, поскольку будет автоматизировать, в числе прочих, задачу выражения мыслей человека в машиночитаемом представлении.

В нашей школе, к сожалению, риторику не преподавали.
Я догадываюсь, что существуют различные фигуры речи вроде иронии, сарказма,
но не слишком силен в их интерпретации.
Про кнопку "Сделать чтоб все работало" мне в одном из первых ответов отписали )

Так что давайте по теме.

Универсальный синтаксис для языков программирования существует, и не один.
Но они весма многословны и неудобны для человека.
Я пытаюсь понять, может его можно подсократить, избавившись от избыточности и сделать приемлемым для человека.
Все же синтаксис языка программирования — это некий адаптер между человеком и концептами языка программирования
Концепты в языках разные, но человек в данной связке величина постоянная.
Синтаксис делается для удобства именно человека, так что есть надежда найти некий инвариант, независимый от конкретного языка.
Re[3]: Универсальный синтаксис для языков программирования
От: LaptevVV Россия  
Дата: 17.10.08 11:55
Оценка:
Здравствуйте, Chrome, Вы писали:

C>Универсальный синтаксис для языков программирования существует, и не один.

Например?
C>Но они весма многословны и неудобны для человека.
C>Я пытаюсь понять, может его можно подсократить, избавившись от избыточности и сделать приемлемым для человека.
C>Все же синтаксис языка программирования — это некий адаптер между человеком и концептами языка программирования
C>Концепты в языках разные, но человек в данной связке величина постоянная.
C>Синтаксис делается для удобства именно человека, так что есть надежда найти некий инвариант, независимый от конкретного языка.
ИМХО, инвариантами являются как раз концепты, а синтаксис — это средство обозначения таких концептов. Стол — он везде стол, но обозначается синтаксически по-разному в разных языках.
Вот явным образом формализовать семантику концептов — это сложная задачка. Во всяком случае с ней пока не справились на том же уровне, что и формализация синтаксиса.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Универсальный синтаксис для языков программирования
От: Mr.Cat  
Дата: 17.10.08 12:28
Оценка: 1 (1) -1
Здравствуйте, Chrome, Вы писали:
C>Так что давайте по теме.

Я считаю, что Вы пытаетесь решить не ту проблему. Поверьте, при изучении языка изучение собственно синтаксиса занимает ничтожно малое количество времени по сравнением с изучением семантики языка и основных приемов программирования. Например, в одном языке оператор неподвижной точки можно записать вот так:
Y f = f (Y f)

А в другом — нельзя, и главным для программиста будет именно этот факт, а не то, как именно эта конструкция выглядит.
--Так...
Y f = f (Y f)

;так...
(define (Y f) (f (Y f)))

<!-- ...или так -->
<function name="Y">
  <param bind="f"/>
  <returns>
    <call function="f">
      <param><call function="Y"><param>f</param></call></param>
    </call>
  </returns>
</funtion>


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

Я не согласен с логикой Ваших рассуждений. Вот цитата из Вашего исходгного сообщения:

Потребность в синтаксисе не связанном с семантикой зачастую возникает в рамках программирования на любом языке.
Когда в программу на C# или C++ нужно вставить какое нибудь дерево, типа XML, HTML, SQL и т д

Из того, что программисту иногда одновременно требуется оперировать конструкциями с различными синтаксисом и семантикой еще не следует, что для этого необходим общий синтаксис языков программирования. В большинстве случаев очень неплохо смотрятся решения, не выходящие (или почти не выходящие) за рамки основного используемого языка — т.е. создание библиотек, макросов или некоторое расширение самого языка. Для примера возьмем регулярные выражения. Вполне себе отдельный язык, который вполне успешно применяется внутри программ на других языках, причем безо всякого там общего синтаксиса: программист задает регулярное выражение либо как строку (и использует библиотеки, навроде pcre), либо как сущность самого языка (как это сделано в boost::xpressive). Если же речь идет о приближающемся к равному проценте кода на обоих языках — стоит подумать о специализированных средствах. Для примера можно взять html-шаблонизаторы. Они склеивают логически связанный код на двух языках, при этом не требуя модификации самих языков и смешивания кода в одном файле. Такой подход вполне удобен.
Re[3]: Универсальный синтаксис для языков программирования
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 18.10.08 01:52
Оценка:
Здравствуйте, Chrome, Вы писали:

C>Универсальный синтаксис для языков программирования существует, и не один.

C>Но они весма многословны и неудобны для человека.

Присоединюсь к предыдущим ораторам: можно пальцем в какой-нибудь универсальный синтаксис?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[4]: Универсальный синтаксис для языков программирования
От: maggot  
Дата: 18.10.08 06:49
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

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


C>>Универсальный синтаксис для языков программирования существует, и не один.

C>>Но они весма многословны и неудобны для человека.

ГВ>Присоединюсь к предыдущим ораторам: можно пальцем в какой-нибудь универсальный синтаксис?


XML?
Re: на основе си-подобных языков со встроенным xml?
От: x-code  
Дата: 18.10.08 08:51
Оценка:
Здравствуйте, Chrome, Вы писали:

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

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

"Сишный" синтаксис — самый распространенный в мире (С,C++,C#,Java...)
вполне адекватный для написания программ человеком — компактный, логичный, если не считать некоторых перекосов С++ — вполне простой для парсинга, в том числе и для "быстрого" парсинга в IDE, при построении разных Class View и т.д.
Некоторые вещи вполне можно вынести в "общую" часть — все что касается лесического анализа (комментарии, строки, числа...) Я в свое время написал такой лексический анализатор.
Ну и семантика — построение выражений, распределение функций скобок (круглые — приоритет и параметры объектов, квадратные — индексация и атрибуты, фигурные — коллекции и операторные скобки, угловые — xml), и т.д.
Имеет смысл встроить XML прямо в язык. Как он будет использоваться — дело конкретного языка, но парсер должен понимать xml-вставки в тексте программы (Comega, Scala — уже сделано).
Re[4]: Универсальный синтаксис для языков программирования
От: Chrome  
Дата: 18.10.08 09:01
Оценка:
ГВ>Присоединюсь к предыдущим ораторам: можно пальцем в какой-нибудь универсальный синтаксис?

Я дам критерий, описывающий множество универсальных синтаксисов.
Для этого следуют задуматься, какова роль синтаксиса в языке программирования?
Ответ примерно такой — на основании правил синтаксися компилятор стороит из текста программы дерево AST.
После того, как дерево построено, про исходный синтаксис можно забыть. Он больше не оказывает влияние на дальнейший процесс компиляции и исполнение программы.
(Исключением могут быть языки, которым на этапе исполнения доступен собственный текст в исходном "текстовом" виде.
но это экзотика в современных технологиях.)
Таким образом, любой синтаксис, с помошью правил которого можно собрать эквивалентное дерево AST, можно назвать эквивалентным исходному синтаксису языка,
а такой синтаксис, который позволяет построить какое угодно дерево — можно назвать универсальным.
Примеры — синтаксис лиспа, синтаксис XML, да мало ли нотаций можно приспособить, что бы описывать дерево?
Но для человека они удобны не очень. Моя цель — попытаться построить удобный для человека, краткий, практичный универсальный синтаксис, не уступающий по краткости конкретным синтаксисам современных языков.

PS. Кстати, эквивалентный синтаксис в XML поддерживается некоторыми авторами языков, для С# такой точно существует, еще про что то слышал.
Re: Универсальный синтаксис для языков программирования
От: mkizub Литва http://symade.tigris.org
Дата: 18.10.08 14:19
Оценка: 2 (1)
XL видели?
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
Re[5]: Универсальный синтаксис для языков программирования
От: Mr.Cat  
Дата: 18.10.08 21:01
Оценка:
Здравствуйте, Chrome, Вы писали:
C>Моя цель — попытаться построить удобный для человека, краткий, практичный универсальный синтаксис, не уступающий по краткости конкретным синтаксисам современных языков.

Так что Вы хотите получить в итоге? Метаязык, подмножеством которого будут другие языки? Как XML, только более пригодный для человекописания?
Re[2]: на основе си-подобных языков со встроенным xml?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.10.08 22:59
Оценка:
Здравствуйте, x-code, Вы писали:

XC>(Comega, Scala — уже сделано).


Слава богу что безобразие под названием сиомега не прошло, а вместо него сделали линк.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[3]: на основе си-подобных языков со встроенным xml?
От: x-code  
Дата: 19.10.08 10:06
Оценка:
Здравствуйте, AndrewVK, Вы писали:

XC>>(Comega, Scala — уже сделано).

AVK>Слава богу что безобразие под названием сиомега не прошло, а вместо него сделали линк.

Ну сиомега и не планировалась как рабочий продукт это типа исследовательского языка. А вот почему в C#3.0 не ввели встроенный xml-непонятно в бейсик вроде ввели... хотя мне-то как раз все равно, т.к. я программирую на С++
Re[4]: на основе си-подобных языков со встроенным xml?
От: Mr.Cat  
Дата: 19.10.08 11:32
Оценка: -1
Здравствуйте, x-code, Вы писали:
XC>А вот почему в C#3.0 не ввели встроенный xml-непонятно
Боже мой, зачем оно надо?
Re[5]: на основе си-подобных языков со встроенным xml?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.10.08 15:38
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

XC>>А вот почему в C#3.0 не ввели встроенный xml-непонятно

MC>Боже мой, зачем оно надо?

Вообще-то это было бы удобно. Только грамотнее был бы не вводить один конкретный (хотя и очень распространённый формат), а предоставить некое средство для описания преобразования из строки в граф объектов. Тогда можно было бы очень для многого сделать хорошую поддержку инициализации (и не только).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: на основе си-подобных языков со встроенным xml?
От: x-code  
Дата: 19.10.08 18:53
Оценка:
Здравствуйте, VladD2, Вы писали:

XC>>>А вот почему в C#3.0 не ввели встроенный xml-непонятно

MC>>Боже мой, зачем оно надо?

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


Еще более абстрактное чем XML? Интересно, как это могло-бы выглядеть?
Re[5]: Универсальный синтаксис для языков программирования
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 20.10.08 02:55
Оценка: +2
Здравствуйте, Chrome, Вы писали:

ГВ>>Присоединюсь к предыдущим ораторам: можно пальцем в какой-нибудь универсальный синтаксис?


C>Я дам критерий, описывающий множество универсальных синтаксисов.

C>Для этого следуют задуматься, какова роль синтаксиса в языке программирования?
C>Ответ примерно такой — на основании правил синтаксися компилятор стороит из текста программы дерево AST.

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

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


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

C>(Исключением могут быть языки, которым на этапе исполнения доступен собственный текст в исходном "текстовом" виде.

C>но это экзотика в современных технологиях.)
C>Таким образом, любой синтаксис, с помошью правил которого можно собрать эквивалентное дерево AST, можно назвать эквивалентным исходному синтаксису языка,
C>а такой синтаксис, который позволяет построить какое угодно дерево — можно назвать универсальным.

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

(node-a (construct1 a b) (construct2 c d))


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

C>Примеры — синтаксис лиспа, синтаксис XML, да мало ли нотаций можно приспособить, что бы описывать дерево?


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

C>Но для человека они удобны не очень. Моя цель — попытаться построить удобный для человека, краткий, практичный универсальный синтаксис, не уступающий по краткости конкретным синтаксисам современных языков.


Вот и задумайся: что же ты собираешься описывать?

C>PS. Кстати, эквивалентный синтаксис в XML поддерживается некоторыми авторами языков, для С# такой точно существует, еще про что то слышал.


Можно задать такой набора правил, что структура узлов даного XML-дерева будет сильно похожа на AST C#. Даже эквивалентна. Но человеку оперировать такими конструкциями дико неудобно. Сокращаем до уровня удобства — получаем обратно C# или язык, эквивалентный C# с точностью до вида лексем. Ну, сможем заменить class на, скажем, XSetDescription какой-нибудь.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[4]: Универсальный синтаксис для языков программирования
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.10.08 03:36
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>ИМХО, инвариантами являются как раз концепты, а синтаксис — это средство обозначения таких концептов. Стол — он везде стол, но обозначается синтаксически по-разному в разных языках.

А мне вот как раз кажется, что стол — везде разный.
Потому что мы говорим не о реальном столе, а о его модели. И кто-то рассматривает стол как композицию из ножек и поверхности, кто-то — как частный случай общего понятия "мебель", кто-то — как второго участника действия "положить на".
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: Универсальный синтаксис для языков программирования
От: Cyberax Марс  
Дата: 20.10.08 03:55
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

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

MC>Почитав про gcc-xml, понял, что идея с универсальным синтаксисом не так уж нереальна. Только синтаксис этот — как gcc-xml — не для людей предназначен будет.
Да, именно. Любой синтаксис в итоге превращается в дерево. Дерево можно представить по желанию в виде XML, S-выражений LISPа, и т.п.

Только на практике обычно удобнее работать со специализированым представлением.
Sapienti sat!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.