Re[20]: Размышления о типизаторе для Н2
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.06.11 15:59
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Что тогда можно назвать другим языком?

WH>Формальное определение в студию.

Язык который нельзя выразить в терминах исходного языка. Все остальное — синтаксические расширения.

Например, MSIL или asm явно другой язык по сравнению с Nemerle, так как в Nemerle нет таких понятий как стек, безусловные переходы и т.п.

Одно из важных требований "другого языка" — он не может использовать терминов из исходного. А вот PegGrammar этим занимается. Он наполовину его обработчики, сам класс) — это намерл.

Саму грамматику можно рассматривать как "другой язык". Но в этом нет особого смысла и это явно приведет к проблемам (совмещать другой язык и части исходного будет трудно).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Размышления о типизаторе для Н2
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.06.11 17:12
Оценка:
Здравствуйте, WolfHound, Вы писали:

VD>>Вот это куда более интересно вопрос что называть языком или синтаксическим анализом.

WH>На который я уже дал ответ, но ты докопался до цвета пуговиц и даже не попытался понять суть.

Очень в твоем стиле. Бессмысленно и не конструктивно.

Если ты чего-то говорил, то дай ссылку. Ты так много говоришь, что не трудно и пропустить интересную мысль.

Лично для меня этот вопрос не праздный. По поводу управления типами у меня пока что четкого представления не сформировалось.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Размышления о типизаторе для Н2
От: gbear Россия  
Дата: 29.06.11 03:43
Оценка:
Здравствуйте, VladD2, Вы писали:

G>>"Не требуются новые понятия" значит. Они _[не]новые_ относительно чего?

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

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

И опять же, тот факт что выражения "жаргона" можно выразить на исходном языке, ничего не меняет. В естественных языках жаргоны (и т.п. вещи) не рассматриваются как отдельные _языки_ по одной простой причине. Они не имеют собственной грамматической системы, заимствуя её от исходного языка. Синтаксические макросы — имеют свою грамматику.

G>>Пусть сколь угодно малый и простой. Пусть.

VD>А кому нужно такое определение? Оно так же полезно как определение синтаксиса по WolfHound. То есть — никак.

Какое "такое"?! Я не давал никаких _новых_ определений. Просто для меня очевидно, что синтаксический макрос, с т.з. ТФЯ — определяет _язык_. Язык — ровно в том же смысле, в котором, например, Nemerle — это _язык_.

G>>Но, таки, _новый_ (т.е. _другой_) язык.

VD>О! Супер! "Новый" и "другой" у нас уже разные вещи.

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

G>>Выражений этого языка — их просто не существует в исходном. Вот и всё.

VD>Вот у нас есть термин "программирование". Когда-то этого термина в языке не было. Какое-то время люди использовали фразу вроде "процесс создания компьютерных программ". Потом им это надоело и они ввели термин "программирование". Ну, и что? У нас появился новый русский язык? Однозначно — нет. Мы получили другой язык? Право смешно. Ну, так а почему макросы, переписываемые в терминах исходного языка, должны порождать новый язык?

Влад, _термин_ и _выражение_ это все таки тоже _разные_ вещи. Ведь так?

G>>А то, что выражения этого языка (определенного синтаксическим макросом) отображаются в выражения исходного языка — того, для которого этот "макрос" создан — абсолютно ничего не меняет.

VD>Это для трепачей-теоретиков ничего не меняет. Хотя даже теоретику ясно, что трансформация одного языка в другой язык и замена терминов на их определения — это разные вещи.

Послушай. Все очень просто. Т.к. синтаксический макрос (любой) таки определяет _язык_ (пусть и сколь угодно простой), то, как таковой, замены "терминов на их определения" — просто не существует. Просто в некоторых случаях (и, если ты будешь утверждать, что в _большинстве_ случаев — я соглашусь с тобой) специально представлять выражения вводимые языком такого макроса в виде отдельного АСТ, и только потом выполнять трансформацию "одного языка в другой язык" — сильно избыточно. В этих случаях, АСТ "константное", и этапом его построения можно пренебречь. Всё что остается — это описать ф-цию преобразования АСТ выражений такого макроса в АСТ выражений исходного языка. Причем, такая ф-ция будет написана с учетом того, что АСТ выражений макроса у нас _всегда_ "такое". Это сделать легко, когда мощность множества выражений задающихся таким макросом мала. Только и всего.

Как только мощность выражений такого макроса начнет расти, такой способ станет не удобным. Это примерно как... ну вот до какого-то уровня сложности языка, можно (и даже наверное удобнее) работать с ним на уровне "сырого" текста. Но ты же не будешь спорить с тем, что, вообще говоря, "правильно" работать на уровне АСТ?


VD>На практике же разница очень значительна. Если не вводятся новые базовые возможности, то переписывание является простым и безопасным процессом, который можно доверить относительно неопытному программисту (прикладнику). При такой трансформации в результирующем коде могут появляться любые конструкции этого же языка (в том числе и та что раскрывается).


Извини, но с моей т.з., разница совсем не в этом. Я её попытался объяснить тебе чуть выше.

VD>При преобразовании в другой язык, напротив, в результате должна появиться иерархия другого языка. В этой иерархии не должно быть вхождений исходного языка. Из этого следует, что трансформация "язык -> язык" должна быть пакетной операцией.


Погодь! Вот это: "должна появиться иерархия другого языка" что означает? Если можно, "на пальцах".

VD>Кроме того, так как при подобных трансформациях мы имеем дело не с синтаксическим сахаром, может случиться так (и обязательно случится), что невозможно будет заменить одну ветку исходного языка на одну или более целевого (что нормально для макросов). Обязательно будут случаи когда нужно преобразовывать набор ветвей исходного языка. И тут подход макросов попросту не подойдет.


Влад, ну вот просто попробуй представить, что ну хоть тот же макрос forech — задает таки _язык_. Да, этот язык будет весьма примитивный. Но это же не означает, что выражения этого языка нельзя представить в виде отдельного АСТ! Другое дело, что для этого конкретного языка это, наверное, имеет мало смысла. Но таки можно. И если я тебя правильно понял, то даже в этом случае у нас будет именно "набор ветвей". Ведь так?

Или что ты понимаешь под "набором ветвей"?
Re[21]: Размышления о типизаторе для Н2
От: gbear Россия  
Дата: 29.06.11 04:51
Оценка:
Здравствуйте, VladD2, Вы писали:

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


WH>>Что тогда можно назвать другим языком?

WH>>Формальное определение в студию.

VD>Язык который нельзя выразить в терминах исходного языка. Все остальное — синтаксические расширения.

VD>Например, MSIL или asm явно другой язык по сравнению с Nemerle, так как в Nemerle нет таких понятий как стек, безусловные переходы и т.п.

Если расширять твою аналогию с естественными языками, то, то, что ты описал выше — это всего лишь лексическая лакунарность. Различать языки по наличию/отсутствию лакунарности — глупо.
Вот ты говоришь: "MSIL или asm явно другой язык по сравнению с Nemerle" — и с этим трудно не согласиться. Но означает ли это, что с твоей точки зрения MSIL и asm это один и тот же язык?

VD>Одно из важных требований "другого языка" — он не может использовать терминов из исходного. А вот PegGrammar этим занимается. Он наполовину его обработчики, сам класс) — это намерл.


Вообще "терминов из исходного"? Или _только_ "терминов из исходного"? А то ведь некоторые "термины" они... скажем так, получили очень уж широкое распространение

VD>Саму грамматику можно рассматривать как "другой язык". Но в этом нет особого смысла и это явно приведет к проблемам (совмещать другой язык и части исходного будет трудно).

А вот по моему глубокому мнению, как раз разница _грамматик_, в первую очередь, и указывает на разницу языков. И мне совершенно не понятны к каким таким особенным "проблемам" при "совмещении" это приведет. Как раз наоборот. Мухи будут отдельно, а котлеты — отдельно.

Понимаешь, даже если бы мы тут рассуждали о схожей проблеме в поле естественных языков — о машинном переводе. Даже при этом, понять мне тебя тоже было бы сложно. Просто, потому что и там проблемы лежат отнюдь не в области грамматических трансформаций. Грамматика, она и в естественных языках весьма формальна. В отличие от семантики, например. Но формальные языки — семантически пусты. В том смысле, что вся их семантика _однозначно_ определена их синтаксисом.

Другая, уже упомянутая выше, проблема — лексическая лакунарность. В рамках формальных языков решается ровно точно так же как и в естественных. То что в языке нет какого-либо "термина", совсем не означает, что этот "термин" не возможно на этом языке описать.

P.S. Про языки с разным "вычислительным базисом", тут вроде как договорились не говорить.
Re[22]: Размышления о типизаторе для Н2
От: WolfHound  
Дата: 29.06.11 09:32
Оценка:
Здравствуйте, gbear, Вы писали:

G>P.S. Про языки с разным "вычислительным базисом", тут вроде как договорились не говорить.

Это Влад про них говорить не хочет. Ибо в этом случае его слив станет очевидным.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.