Re[26]: Языки общего назначения не имеют смысла!
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.04.12 00:38
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Если ты описал эту грамматику в КС-форме, то я её сразу отношу к регулярным (у которых нет рекурсии в правилах или все рекурсии одного вида), т.е. ты описал исходный недетерминированный автомат регулярной грамматики. Согласно твоего же определения A и B неразличимы. Т.е. в этой регулярной грамматике даже конфликтов нет и она эквивалентна после минимизации такой: S->a.


Я правильно понял, что ты утверждаешь, что БНФ описывает парсер?

Приведенный ниже пример является корректным описанием с точки зрения БНФ?
E = E + E;
E = E * E;
E = '1';


Если — да, то какой парсер он описывает? Если нет, то почему?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Языки общего назначения не имеют смысла!
От: vdimas Россия  
Дата: 26.04.12 01:45
Оценка:
Здравствуйте, WolfHound, Вы писали:

V>>Если правильно пользоваться терминологией и определениями, а не твоей свободной интерпретацией (типа неодноначности БНФ), то никакого бреда нет. Скорее всего, тебе просто нечего ответить.

WH>У меня с терминологией все в порядке.
WH>А вот ты не понимаешь, что БНФ может задать неоднозначную грамматику.

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


WH>Но разбирающие грамматики (PEG, TDOP,...) проектируют так, чтобы задать неоднозначную грамматику было бы не возможно по построению.


Дык, никто не спорит. Все пока больше спрашивают. Очевидно же, что ПЕГ задает лишь некий подкласс грамматик и навскидку можно насочинять полно мест, где будет хромать (твой же пример с if/else). В общем, есть сомнения, бо реализовал порядка пяти разных "взрослых" парсеров в разное время и есть вопросы, ответы на которые никогда еще не видел. Ты ведь так и не ответил на вопрос про скобки С++.


V>>Да, пример был жесть.

WH>Он просто показал, что БНФ может задать неоднозначную грамматику.
WH>Только и всего.
WH>А твой гон про то, что неоднозначная КС грамматика не является КС грамматикой, просто противоречит всем определениям.

Ёпс... Да это же классика:

(... идет определение неоднозначной грамматики)
Однако это не означает, что язык L(G) обязательно неоднозначный. Определенная нами неоднозначность — это свойство грамматики, а не языка, т.е. для некоторых неоднозначных грамматик существуют эквивалентные им однозначные грамматики. Если грамматика используется для определения языка программирования, то она должна быть однозначной.


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

Более того, мне однажды пришлось писать парсер, где мне НУЖНА была неоднозначность по-условию. Многие алгоритмы выдаются все варианты разбора, я юзал GLR, как самый "оперативный" относительно входной цепочки (т.к. работает без возвратов а цепочка иногда на мегабайты). Поэтому для меня неоднозначность ни разу не проблема, а наоборот — удобное ср-во для написания парсера для КС-части КЗ-грамматики, т.к. не надо искусственно ресолвить неоднозначности на этапе разработки через нетерминалы-заместители и потом их дополнительно раскручивать.

И ты дважды проигнорировал напоминание про процедуру приведения грамматики, на этапе которой отсекаются мертвые ветки и можно найти неоднозначности. БНФ ведь хороша своей симметричностью. Т.е. можно производить мн-во операций над системой правил, оставляя всю систему валидной. И все операции это аболютно реверсивны и результат заведомо известен. Поэтому обработку правил в БНФ можно (и нужно) автоматизировать. А в случае автоматизации очень многое из обсуждаемого малость до фени, сорри.

Вот ПЕГ ты особо не преобразуешь (кроме тривиальных прямых подстановок заведомо промежуточных нетерминалов).


WH>А еще я понимаю что то что приходится делать с БНФ для того чтобы скормить его генератору парсеров маразм.

WH>А те генераторы, что жрут любую КС грамматику тормоза.

ПЕГ жрет не любую. GRL тормозит только там, в грамматике существенные неоднозначности (большое кол-во несклеиваемых промежуточных нетерминалов), т.е. вызванные природой грамматики, т.е. на этой грамматике любой парсер будет требовать либо время, либо память. Но когда уровень неоднозначности в пределах нормы, то он довольно шустро разбирает ВЕСЬ класс КС-грамматик. Напротив, TDOP, насколько я помню — это простой способ парсить арифметические выражения и плохо подходит под произвольный синтаксис. Т.е. DSL в рамках TDOP будет заведомо обладать ограничениями.


WH>Они однозначны по построению. Ты просто не сможешь задать неоднозначную разбирающую грамматику.

WH>И работают как есть без всяких факторизаций.

Ты всерьез считаешь, что никто тебя до сих пор не услышал? На самом деле пара примеров реальных DSL для реальной работы, с полным исходным кодом всего того, что потребовалось написать "сверху" имеющегося фреймворка, рассказало бы о всех плюсах и минусах лучше любого оратора на форуме.


WH>Вся вина разбирающих грамматик в том, что они просты как пробка. И там исследовать нечего. Они просто работают. И как следствие на них не защитить диссертацию. Поэтому их научное сообщество и игнорирует.


Нет, их игнорируют потому, что они задают обратный процесс написания языка: сначала его программирование, а потом что получилось — то и спецификация!
Но читабельность человеком и читабельность программой — это две большие разницы. Определенно разрыв шаблона еще в том, что при разработке языка предлагается отталкиваться не от потребительских его кач-в, а от легкости написания его парсера... Не боишься, что разработанная тобой DSL потеряет значительную долю смысла, заложенную в сам факт ее существования? Чтобы заставить потом остальных программистов юзать DSL вместо милого их сердцу ЯВУ, синтаксис DSL должен быть ух и ах. Иначе усилия пропадут даром. Тут уже правильно говорили, что сама разработка DSL — сложная задача. Парсер — это уже так... В крайнем случае берется один из автоматических построителей — и копать отсюда и до обеда, в пару вечеров уложиться с первым работающим макетом парсера вполне можно...


WH>То ли дело БНФ. Тут тебе и факторизации. И привидения. И построение разбирающих алгоритмов на основе порождающих правил. И куча тому подобного бреда.


Автоматизируется. Кстати, я тут одну DSL постепенно пилю для своего хобби... надо попробовать испытать на вашей схеме... Но там явное КЗ-нарисовывается, иначе синтаксис придется резко урезать, а не хочется. Я же не могу, при всем своем уважении к себе споткнуться об парсер, правда? Тут как бы об саму DSL не споткнуться, а парсер — дело десятое или даже сотое.


WH>Самое сложное, что тут происходит это превращение литералов в ДКА.


Это как раз не самое сложное. Это я еще в дипломной работе делал черти сколько лет назад...

Самое сложное в таком преобразовании — это отделить промежуточные нетерминалы от нецелевых и не потерять целевые при построении ДКА. Если происходит потеря, то строить надо не одноуровневый восходящий разбор (автоматный лексер), а многоуровневый, например LR(1). Он на участках, описываемых автоматной грамматикой, работает в точности со скоростью ДКА-сканера. Я уже когда-то вам советовал... жаль, что упоминание восходящего разбора на этом участке превратило всё обсуждение в срач. (Из-за того, что сам-то ПЕГ нисходящий).


WH>
...
WH>


Посмотрел. С явными приоритетами чуть проще запись. Но дык, приоритеты операций в БНФ элегантно расписываются через промежуточные нетерминалы... Кто мешает генерить одно из другого?

WH>Она понимает левую рекурсию, приоритеты и ассоциативность из коробки.

WH>Она поддерживает n-арные операторы. ChoiceTokenRule и SequenceTokenRule.
WH>Она поддерживает изменение грамматики во время разбора. Например, встретили "using syntax Xml;". Получили поддержку ХМЛ внутри C#. Область видимости закончилась синтаксис ХМЛ отключился.

Не увидел как для C++ отличить умножение от символа указателя '*'.


WH>Зачастую? Тебе придется очень постараться, чтобы найти КС язык программирования. (Они конечно есть. Я даже регулярные знаю.) Ибо если у нас есть требование объявить перед использованием то это сразу минимум КЗ.


Если семантика зависит от значения идентификатора — то всегда КЗ. А оно в удобных языках всегда зависит, бо над одними сущностями языка определены одни операции, над другими — другие, а кол-во символов-знаков ограниченно. Отсюда дублирование синтаксиса для разных семантик. Даже в моем разрабатываемом DSL такая же беда, но это выглядит совершенно ЕСТЕСТВЕННО. А интересует, как ты понял, именно как оно выглядит и ничего более.
Re[27]: Языки общего назначения не имеют смысла!
От: vdimas Россия  
Дата: 26.04.12 01:56
Оценка:
Здравствуйте, VladD2, Вы писали:


V>>Если ты описал эту грамматику в КС-форме, то я её сразу отношу к регулярным (у которых нет рекурсии в правилах или все рекурсии одного вида), т.е. ты описал исходный недетерминированный автомат регулярной грамматики. Согласно твоего же определения A и B неразличимы. Т.е. в этой регулярной грамматике даже конфликтов нет и она эквивалентна после минимизации такой: S->a.


VD>Я правильно понял, что ты утверждаешь, что БНФ описывает парсер?


БНФ описывает грамматику. Просто я распознал класс грамматики согласно ее определения.

VD>Приведенный ниже пример является корректным описанием с точки зрения БНФ?

VD>
VD>E = E + E;
VD>E = E * E;
VD>E = '1';
VD>


Вполне, если речь о нотации.

VD>Если — да, то какой парсер он описывает? Если нет, то почему?


При чем тут парсер? Парсер выполняется по какой-то технике, а БНФ заведомо нейтральна к любой технике. Это просто нотация КС-грамматик и ничего более. И задачи у парсеров могут быть разные. Если стоит задача дать любую удачную ветку разбора, то построить такой парсер по твоей грамматике не проблема. Если стоит задача написать парсер ЯП, то сам язык должен быть заведомо однозначным.
Re[31]: Языки общего назначения не имеют смысла!
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 26.04.12 07:16
Оценка:
Здравствуйте, WolfHound, Вы писали:

I>>С когнитивной тз она сложнее, например потому что юзер не в курсе про то что такое солнце. Для него солнце это шарик на синем небе. шарик и небо ему понятны. А все остальное он не может пощупать. Соответсвенно гелиоцентричекую ты такому юзеру в голову не вобьёшь до тех пор, пока он не потрогает все руками.

WH>И как же мне это еще в детском саду объяснили то?

Не объяснили, а раccказали как сказку и с этим балластом ты ничего не мог сделать до тех пор, пока накопил нужные знания и опыт, т.е. примерно до тех пор, где учитель физики или астрономии внятно объясняет по наглядной модели, которую, ВНИМАНИЕ !, можно пощупать.

WH>>>Нет. Годы я потратил на то чтобы перекопать мегатонны навоза и понять, как правильно делать.

I>>Ну то есть ты напрочь отрицаешь ценность практики ?
WH>Нет. Я говорю, что создание компиляторов на много проще чем принято думать.

Твои рассуждения не интересны по той причине, что ты через пост обвиняешь всех в тупости.

WH>>>А самое страшное для тебя это то, что я эту самую простоту передаю всем, кто хочешь слушать.

I>>Это иллюзия. Эти люди работают вместе с тобой над одной целью. Потому и происходит переход. В виде формулы — не выйдет.
WH>Какой еще формулы?

Любой. Ты потратил скажем десять лет и выдал все понимание одной-двумя строчками текста на русском языке. Любой кто умеет читать по русски внезапно становится способным создавать ДСЛ.

WH>Какие люди?

WH>Ты действительно думаешь, что все кто заходит в форму по немерле пишут компилятор немерла? Или тем более работают над Н2?

Туда много кто заходит, например и я Люди про которых я говорю интересуются именно этим направлением и работают возможно не над немерле, а над своими проектами, где все это применяют. Вот потому и возможно распространение опыта.

I>>Мне как бы понятно было по дракону и по вирту Лично я вижу в ДСЛ только инструмент для решения хорошо формализованых задач в конкретной области. У меня как то маловато таких

WH>Ох. Сколько еще раз повторить, что то, что написано в драконе не пригодно для практического применения?

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

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


Да ладно, хорош гнать то. Давай проверим. Напиши компилятор модула за 1 час с нуля. Студенты по вирту делают это где то за две недели.

WH>Все что ты мог вынести из дракона это: Компиляторы это сложно.


Я как минимум представляю какой минимальный набор знаний и умений необходим для того, что бы родить простецкий ДСЛ. И этот набор много больше того, который требуется для решения большинства бизнес-задач.

WH>И именно это ты и вынес. И пытаешься мне это втирать. Но я знаю, что это не так.


С твоей верой я не собираюсь спорить

I>>Тебе не кажется, что ты вещаешь про мировой заговор ? Я говорю про факты — должный уровень практики дают от силы десяток вузов. А у тебя какое то уникальное объяснение

WH>Нет. Я вещаю про мировую глупость.

Это такое же конспироложенство, как и мировой заговор. Кушай сам.

I>>Если все мерить колмгоровской сложностью, то да, парадокс не разрешим

WH>Ох. В драконе когнитивная сложность тоже зашкаливает. Попробуй, объясни человеку что такое конфликт сдвиг/свертка.

Очевидно, с нуля это в принципе невозможно.

WH>При этом разбирающие грамматики можно объяснить за пять минут на пальцах.


Кому объяснить, тебе, мне, или тому, кто FizzBuzz не может родить на собеседовании ?

I>>Для кого просто, для тебя, для меня, для того, кто работает столько же сколько и ты, или для того, кто еле справляется с FizzBuzz ?

WH>Те, кто не может осилить FizzBuzz программы писать не должены.
WH>Совсем.
WH>Даже если больше никого нет.
WH>Ибо они просто физически не в состоянии это делать.

Твое мнение идет вразрез с наблюдаемой действительностью.

WH>Способность к программированию она как музыкальный слух. Если она есть ее можно развить. Если ее нет, то хоть ты что делай. Человек программы писать не

сможет.

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

I>>C# уже лет 5-6 как не новость для студентов. Где то 2й или 3й курс от силы.

WH>Ну, так и зачем нужны Виртовские поделки?

Я уже внятно ответил. найди тот ответ и спрашивай что в ём неясно.

I>>Начинать надо с качества абитуриентов. Мне уже не смешно, когда в программисты идут даже те, кто не сложение дробей не мог осилить.

I>>У тебя что, есть волшебная палочка, которая сделает из такого абитуариента адского специалиста ?
WH>Их нужно просто выкидывать из профессии. Прямо в институте.

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

WH>А тем, кто может писать нужно дать инструменты, которые повысят их производительность.


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

I>>Никаких конкретных выкладок у тебя нет на эту тему ? Покажи ты такие выкладки, тебе в любой конторе-гиганте дадут не только стол и стул, но и целое подразделение да еще и девок пучок.

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

Прототип это ровно ничего.
Что бы получить выкладки вроде тех, про которые ты говоришь, нужно внедрить инструмент в реальный проект и выкатить несколько версий. потом считаешь издержки и говоришь — вот, всё классно.
Если хочешь доказать, что твои инструменты уменьшают зависимость от ЧФ, снова ровно то же, только проект должен сменить несколько команд исполнитлей.
Снова считаешь издержки и снова показываешь результат.
Кроме того, в бизнесе тебя обязательно спросят про обратную совместимость. Смотри, не облажайся, как Немерле. Здесь тоже нужны выкладки

WH>Ты что этим доказать то хочешь?

WH>То, что есть идиоты, которые берут на работу тех, кто писать не может?
WH>Не надо. Я и так знаю, что они есть.

Ты знаешь, но не понимаешь почему они там есть.

I>>Вот-вот. А этих людей подавляющее большинство и это я еще про китайцев и индусов не говорил.

WH>То-то сначала туда все ломанулись, а потом поняли что себе дороже. Это я про тех, кто продукт делает, а не бабло пилит.

Я то про продукты, а ты про что ? Продукты это рынок, а что у тебя, разовые заказики ?

I>>Теперь жду внятных объяснений, как такому контингенту влить в голову грамматики, любые, какие тебе только нравятся.

WH>Никак. Их нужно разогнать.
WH>Совсем.
WH>Ибо им в голову вообще ничего "влить" нельзя. У них просто нет нужного раздела головного мозга.

А между тем они решают задачи бизнеса. Это факт. И пока это не изменится, никто их не выбросит.

I>>Ликбез. Бюджет разработки хорошо если 10% от той суммы что приносит продукт. А если продукт это не софт, то разработка и вовсе меньше 1%.

I>>Скажи, кто в своём уме будет оптимизировать ничтожно малое ?
WH>Ох. И почему же в машинных кодах то не пишут?

Потому что разработка в машинных кодах на несколько порядков сложнее. То есть затраты на разработку вырастут на порядки.

WH>А по тому, что в машинных кодах просто ничего не напишешь. Люди такое не осилят.


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

WH>Но и у ЯВУ есть свой придел сложности после которого в проект приходит жирная полярная лисичка.

WH>Поднять предел сложности проекта можно только еще сильнее повысив уровень инструмента.

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

I>>Это снова теория заговора. С т.з. бизнеса наилучшие работники это

I>>1. понимающие специфику бизнеса
I>>2. направленые на результат
I>>3. ответственные,дисциплинированые, предсказуемые
WH>Не могущие написать FizzBuzz но упорно идущие к цели...

Это уже не важно. Есть результат — есть профит.

I>>Для написания фремворка не нужна глубокая формализация.

WH>Ты не поверишь. Для ДСЛ тоже.

Не поверю. Для фремворка можно вообще для начала ничего не формализовывать а просто кидать любой код который удовляетворяет требованиям. То есть берем любую более менее подходящую вычислительную модель и кидаем код который закрывает требования.
Фремворк появится позжде, после нескольких циклов рефакторинга, если это понадобится.

WH>>>В случае с ДСЛ нам нужно решить только первую.

I>>Прграммисты годами тренируются кодить. Соотвесвенно формализация проблемы закончится ровно с записью решения в виде кода. Самое главное преимущество — фремворк не надо выпиливать заранее. Можно наговнокодить а через два года как появится потребность, отрефакторить, покрыть тестами и сделать фремфорк.
WH>Так с ДСЛ все тоже самое.

Покажи пример, только не поделки на вольную тему, а решение бизнес-задачи.

WH>И его предка, из которого я его итерациями переделал.

WH>https://github.com/rsdn/nemerle/tree/4855110cb34aa16ea6c5f481ee479bfe6513b706/snippets/peg-parser

А где тот бизнес который делал приёмку ?

I>>Кроме того, для ДСЛ нужно заранее думать про оптимизации и все нюансы использования.

WH>Не нужно.
WH>Это все допиливается по ходу дела.

Где тот бизнес который делал приёмку ?

WH>Особенно оптимизации.

WH>Которые возможно вообще делать не придется. Если и так производительности хватает.

Да ёе в общем случае никогда не хватает.

WH>Типа с ДСЛ это не так.

WH>Я же говорю, ты испорчен драконом.
WH>Все то, что ты говоришь можно и ДСЛем. Причем намного проще и быстрее.

где тот бизнес который делал приёмку ?

I>>А где ж ты их наберёшь ? Думаешь если абитуриенты не умеют дроби складывать, то став преподавателями, они автоматом получат божественный интеллект ?

WH>Я уже сто раз повторил. Выгонять не первой же сессии. Или еще лучше на вступительных экзаменах.

То есть, пока их никто не выгонит, твоя теория остаётся теорией ?
Re[29]: Языки общего назначения не имеют смысла!
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 26.04.12 08:28
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Код генерируется по принципу, что вижу, то пою. Без трансформаций. Ручных или машинных.

WH>Самое сложное, что тут происходит это превращение литералов в ДКА.

Попробуй изыскать минимальный набор знаний-умений которые необходимы ЦА для использования твоей пульки ну и проверить это дело. Узнаешь много нового.
Re[30]: Языки общего назначения не имеют смысла!
От: WolfHound  
Дата: 26.04.12 09:44
Оценка: -1
Здравствуйте, vdimas, Вы писали:

V>БНФ задает ВЕСЬ класс контекстно свободных грамматик, который самый важный на сегодня.

То-то чуть менее чем все языки КЗ.
А для некоторых типа С++ даже нельзя построить адекватное КС надмножество.

V>В любом случае нужна нотация, нейтральная к способу разбора.

Зачем?

V>Дык, никто не спорит. Все пока больше спрашивают. Очевидно же, что ПЕГ задает лишь некий подкласс грамматик и навскидку можно насочинять полно мест, где будет хромать (твой же пример с if/else).

Чего?

V>В общем, есть сомнения, бо реализовал порядка пяти разных "взрослых" парсеров в разное время и есть вопросы, ответы на которые никогда еще не видел. Ты ведь так и не ответил на вопрос про скобки С++.

Какие скобки? Ты про a < b > c; ?
Так его никакой БНФный парсер не разберет.
А вот разбирающие грамматики можно подкрутить так чтобы разбирали.

V>>>Да, пример был жесть.

WH>>Он просто показал, что БНФ может задать неоднозначную грамматику.
WH>>Только и всего.
WH>>А твой гон про то, что неоднозначная КС грамматика не является КС грамматикой, просто противоречит всем определениям.
V>Ёпс... Да это же классика:
Какая еще классика?
Как то что написал относится к этому утверждению?

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


V>Т.е. мне вообще трудно подбирать слова для обсуждения того, что на мой взгляд обсуждения не требует. Ну не может язык содержать неоднозначности. Точка. КС-грамматика может, ес-но.

И зачем использовать для описания однозначных языков инструменты, которые могут описывать неоднозначности?
Это же не имеет смысла.

V>Более того, мне однажды пришлось писать парсер, где мне НУЖНА была неоднозначность по-условию.

Зачем?

V>И ты дважды проигнорировал напоминание про процедуру приведения грамматики, на этапе которой отсекаются мертвые ветки и можно найти неоднозначности.

Вот только разбирающим грамматикам это не нужно.
Они как есть работают.

V>Вот ПЕГ ты особо не преобразуешь (кроме тривиальных прямых подстановок заведомо промежуточных нетерминалов).

Еще раз. Разбирающим грамматикам преобразования не нужны.
Они создаются так, чтобы работать как есть.

WH>>А те генераторы, что жрут любую КС грамматику тормоза.

V>ПЕГ жрет не любую.
ПЕГ чтоб ты знал, вообще в иерархию Хомского не вписывается.
Ибо он с одной стороны жрет не все КС. С другой стороны жрет некоторые КЗ. Чистый ПЕГ. Без расширений.

V>Напротив, TDOP, насколько я помню — это простой способ парсить арифметические выражения и плохо подходит под произвольный синтаксис. Т.е. DSL в рамках TDOP будет заведомо обладать ограничениями.

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

WH>>Они однозначны по построению. Ты просто не сможешь задать неоднозначную разбирающую грамматику.

WH>>И работают как есть без всяких факторизаций.
V>Ты всерьез считаешь, что никто тебя до сих пор не услышал?
Да. Ибо ты упорно продолжаешь твердить про всякие преобразования.

V>Нет, их игнорируют потому, что они задают обратный процесс написания языка: сначала его программирование, а потом что получилось — то и спецификация!

V>Но читабельность человеком и читабельность программой — это две большие разницы. Определенно разрыв шаблона еще в том, что при разработке языка предлагается отталкиваться не от потребительских его кач-в, а от легкости написания его парсера... Не боишься, что разработанная тобой DSL потеряет значительную долю смысла, заложенную в сам факт ее существования? Чтобы заставить потом остальных программистов юзать DSL вместо милого их сердцу ЯВУ, синтаксис DSL должен быть ух и ах. Иначе усилия пропадут даром. Тут уже правильно говорили, что сама разработка DSL — сложная задача. Парсер — это уже так... В крайнем случае берется один из автоматических построителей — и копать отсюда и до обеда, в пару вечеров уложиться с первым работающим макетом парсера вполне можно...
Бреееед!
Мой построитель парсеров намного проще, гибче и мощнее всех БНФных поделок.
Им можно легко разобрать то на чем БНФные поделки сдуются. Ибо он уже умеет КЗ. А скоро я туда еще возможностей для КЗ добавлю. Так что он С++ будет на раз разбирать.
Так что я могу задать такой синтаксис, какой захочу.
И описать его сразу.
Без преобразований.
И получить равно такой АСТ какой нужно.

WH>>То ли дело БНФ. Тут тебе и факторизации. И привидения. И построение разбирающих алгоритмов на основе порождающих правил. И куча тому подобного бреда.

V>Автоматизируется.
Что автоматизируется? И какой АСТ он после этого сгенерирует?

V>Кстати, я тут одну DSL постепенно пилю для своего хобби... надо попробовать испытать на вашей схеме... Но там явное КЗ-нарисовывается, иначе синтаксис придется резко урезать, а не хочется. Я же не могу, при всем своем уважении к себе споткнуться об парсер, правда? Тут как бы об саму DSL не споткнуться, а парсер — дело десятое или даже сотое.

Пример в студию.
Да и как ты собрался разбирать КЗ БНФом? Он же строго КС.

WH>>Самое сложное, что тут происходит это превращение литералов в ДКА.

V>Это как раз не самое сложное. Это я еще в дипломной работе делал черти сколько лет назад...
О чем я и говорю.
Разбирающие грамматики просты как пробка.
Диссеры на них не защитить.

V>Самое сложное в таком преобразовании — это отделить промежуточные нетерминалы от нецелевых и не потерять целевые при построении ДКА.

А нету у меня этого преобразования. Ибо не нужно.
Я просто дал пользователю возможность самому задать целевые терминалы.
И все.
Это решило сразу массу проблем. Включая адекватные сообщения об ошибках.

V>Посмотрел. С явными приоритетами чуть проще запись. Но дык, приоритеты операций в БНФ элегантно расписываются через промежуточные нетерминалы... Кто мешает генерить одно из другого?

Элегантно?

Я бьюсь в истерике.
А если нужно заточить грамматику под определенный построитель парсеров то там такая элегантность начинается...
А уж получить из этой элегантности адекватный АСТ и сообщения об ошибках...

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

WH>>Она понимает левую рекурсию, приоритеты и ассоциативность из коробки.

WH>>Она поддерживает n-арные операторы. ChoiceTokenRule и SequenceTokenRule.
WH>>Она поддерживает изменение грамматики во время разбора. Например, встретили "using syntax Xml;". Получили поддержку ХМЛ внутри C#. Область видимости закончилась синтаксис ХМЛ отключился.
V>Не увидел как для C++ отличить умножение от символа указателя '*'.
Сразу после того как ты покажешь как с этим справится БНФная поделка. Хоть GLR. Хоть Ерли. Не важно. Без расширений, заглядывающих в таблицу символов. Ибо таблица символов сразу делает парсер КЗ.

И не соскакивай с вопроса. Покажи мне БНФную поделку, которая во время парсинга умеет грамматику менять.
Не до начала разбора, а именно во время разбора загрузить ДЛЛ и получить оттуда новые правила.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[30]: Языки общего назначения не имеют смысла!
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 26.04.12 10:29
Оценка: :)
Здравствуйте, vdimas, Вы писали:

V>Ты всерьез считаешь, что никто тебя до сих пор не услышал? На самом деле пара примеров реальных DSL для реальной работы, с полным исходным кодом всего того, что потребовалось написать "сверху" имеющегося фреймворка, рассказало бы о всех плюсах и минусах лучше любого оратора на форуме.


Лет через пять может и покажут, а до того будет ной и плак : "Их нужно просто выкидывать из профессии." @ Wolfhound.
Re[32]: Языки общего назначения не имеют смысла!
От: WolfHound  
Дата: 26.04.12 10:34
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Твои рассуждения не интересны по той причине, что ты через пост обвиняешь всех в тупости.

Не всех. А тех кто FizzBuzz осилить не может. Если ты себя причисляешь к ним то извини.

I>Любой. Ты потратил скажем десять лет и выдал все понимание одной-двумя строчками текста на русском языке. Любой кто умеет читать по русски внезапно становится способным создавать ДСЛ.

Конечно не в пару строк. Но в несколько страниц уместить можно.
И конечно не любой, а тот, кто способен писать программы.

I>Туда много кто заходит, например и я Люди про которых я говорю интересуются именно этим направлением и работают возможно не над немерле, а над своими проектами, где все это применяют. Вот потому и возможно распространение опыта.

На моей памяти таких было пара человек.
Остальные темой интересуются исключительно с прикладной точки зрения.
Хотя конечно то, что они слушают, то, что им говорят и это дает им возможность понять, то что им говорят.
Ты же веришь что создание ДСЛ это что-то сложное.
И эта вера запрещает тебе слушать то, что тебе говорят.

WH>>Ох. Сколько еще раз повторить, что то, что написано в драконе не пригодно для практического применения?

I>Ты мне напоминаешь студентов-двоечников, которые повторяют, что знать матан не обязательно, ибо надо всего то деньги считать уметь.
Ох. Жертва дракона.

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

I>Да ладно, хорош гнать то. Давай проверим. Напиши компилятор модула за 1 час с нуля. Студенты по вирту делают это где то за две недели.
Когда доделаю инструменты, думаю, за день справлюсь.
Причем будет и ИДЕ сравнимая с решарпером. И отладка. И оптимизации.

Студенты же за две недели осиливают компилятор без оптимизаций и с хреновыми сообщениями об ошибках.
Про ИДЕ и отладку можно даже не вспоминать.

I>Я как минимум представляю какой минимальный набор знаний и умений необходим для того, что бы родить простецкий ДСЛ. И этот набор много больше того, который требуется для решения большинства бизнес-задач.

Не представляешь. Ты опираешься на дракона. А там все сложнее, чем нужно.

WH>>И именно это ты и вынес. И пытаешься мне это втирать. Но я знаю, что это не так.

I>С твоей верой я не собираюсь спорить
У меня знания. У тебя вера.

I>>>Если все мерить колмгоровской сложностью, то да, парадокс не разрешим

WH>>Ох. В драконе когнитивная сложность тоже зашкаливает. Попробуй, объясни человеку что такое конфликт сдвиг/свертка.
I>Очевидно, с нуля это в принципе невозможно.
А у меня всего этого нет. И как следствие объяснять не придется.

WH>>При этом разбирающие грамматики можно объяснить за пять минут на пальцах.

I>Кому объяснить, тебе, мне, или тому, кто FizzBuzz не может родить на собеседовании ?
Тому, кто не может FizzBuzz вообще ничего объяснить нельзя.
Никогда.
Он даже на жабке писать не сможет.

WH>>Ибо они просто физически не в состоянии это делать.

I>Твое мнение идет вразрез с наблюдаемой действительностью.
Чего? Каждый раз. В 100% случаев. Когда брали такого человека. После его увольнения переписывали весь его код. Кода становилось в десятки, раз меньше и он начинал работать намного быстрее и без ошибок.
Вот это наблюдаемая реальность.

WH>>Способность к программированию она как музыкальный слух. Если она есть ее можно развить. Если ее нет, то хоть ты что делай. Человек программы писать не

I>сможет.
Не подтверждается практикой.
Они конечно могут написать кучу операторов. Только эта куча будет тормозить и глючить, а не работать.

I>>>C# уже лет 5-6 как не новость для студентов. Где то 2й или 3й курс от силы.

WH>>Ну, так и зачем нужны Виртовские поделки?
I>Я уже внятно ответил. найди тот ответ и спрашивай что в ём неясно.
Понятно. Не знаешь.

WH>>Их нужно просто выкидывать из профессии. Прямо в институте.

I>Если их выкинуть, тебе придется делать за них всю чОрную работу.
Если их выкинуть и остальным дать нормальные инструменты, то черная работа исчезнет.

WH>>А тем, кто может писать нужно дать инструменты, которые повысят их производительность.

I>чОрную работу пока невозможно исключить, потому что нет инструментов для автоматизации всех и вся.
Ее можно сгенерировать.
Факт.

I>Прототип это ровно ничего.

I>Что бы получить выкладки вроде тех, про которые ты говоришь, нужно внедрить инструмент в реальный проект и выкатить несколько версий. потом считаешь издержки и говоришь — вот, всё классно.
I>Если хочешь доказать, что твои инструменты уменьшают зависимость от ЧФ, снова ровно то же, только проект должен сменить несколько команд исполнитлей.
I>Снова считаешь издержки и снова показываешь результат.
Да-да-да. Я просто этих считателей с рыка выдавлю и все.

I>Кроме того, в бизнесе тебя обязательно спросят про обратную совместимость. Смотри, не облажайся, как Немерле. Здесь тоже нужны выкладки

Ты про что? Н2 это новый проект. К немерле отношения не имеет.
А ломающие изменения есть даже у мелкософта.
Пруфлинк.
https://www.google.ru/?q=site:msdn.microsoft.com+breaking+changes#hl=ru&amp;newwindow=1&amp;output=search&amp;sclient=psy-ab&amp;q=site:msdn.microsoft.com+breaking+changes&amp;oq=&amp;aq=&amp;aqi=&amp;aql=&amp;gs_nf=&amp;gs_l=&amp;pbx=1&amp;bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&amp;fp=79961699fc8b503f&amp;biw=1110&amp;bih=629
И это только документированные.

WH>>Ты что этим доказать то хочешь?

WH>>То, что есть идиоты, которые берут на работу тех, кто писать не может?
WH>>Не надо. Я и так знаю, что они есть.
I>Ты знаешь, но не понимаешь почему они там есть.
В компаниях нацеленных на результат по глупости. И долго они там не задерживаются.
А там где пилят бабло руководству на продукт пофиг. Им бы лишь бы подешевле "работников" нанять. Чтобы создать вид бурной деятельности.

I>А между тем они решают задачи бизнеса. Это факт. И пока это не изменится, никто их не выбросит.

Ни разу не видел чтобы такой человек что-то решил.

I>Потому что разработка в машинных кодах на несколько порядков сложнее. То есть затраты на разработку вырастут на порядки.

Так вот что я тебе скажу.
На заре разработки, когда все было в машинных кодах.
Соотношения были ровно теми же.
Но от машинных кодов ушли.

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

Так технологии, которые ты защищаешь и есть древние.
Только ты этого еще не понял.

I>Теоретически это так. Подавляющему большинству проектов до этого порога как до небес. Понижать стоимость можно и другими способами, а ты их отказываешься даже рассматривать.

I>Например самый простой способ — купить недостающие компоненты.
I>Еще способ — нанять специалиста, который закроет критичную проблему.
I>Еще способ — вообще отказаться от самостоятельной разработки и купить готовый софт.
I>С тз бизнеса нет разницы, главное что профит есть.
Первый и третий это отказ от разработки. Но мы обсуждаем именно разработку.
Что касается второго, так как он будет закрывать проблему? А если у проблемы придел сложности выше, чем способности человека, у которого только жабка в руках?

WH>>Не могущие написать FizzBuzz но упорно идущие к цели...

I>Это уже не важно. Есть результат — есть профит.
Нет результата. Я ни разу не видел.
Попил бабла не рассматриваем.

I>Не поверю.

И зря.

I>Для фремворка можно вообще для начала ничего не формализовывать а просто кидать любой код который удовляетворяет требованиям. То есть берем любую более менее подходящую вычислительную модель и кидаем код который закрывает требования.

I>Фремворк появится позжде, после нескольких циклов рефакторинга, если это понадобится.
Так с ДСЛем тоже самое.
Только проще.
Ибо не нужно думать, как натянуть нашу вычислительную модель на язык.

WH>>Так с ДСЛ все тоже самое.

I>Покажи пример, только не поделки на вольную тему, а решение бизнес-задачи.
Что значит бизнес-задачи?
Они, вообще говоря, очень разные бывают.

I>А где тот бизнес который делал приёмку ?

У меня есть закрытые проекты, где бизнес делал приемку.
Показать их я ессно не могу.
И разработка там велась именно итерациями.
Дальше что?
Будешь утверждать, что я вру?

WH>>Особенно оптимизации.

WH>>Которые возможно вообще делать не придется. Если и так производительности хватает.
I>Да ёе в общем случае никогда не хватает.
В общем да. В конкретных обычно с большим запасом. Или все утыкается в ввод/вывод.

WH>>Я уже сто раз повторил. Выгонять не первой же сессии. Или еще лучше на вступительных экзаменах.

I>То есть, пока их никто не выгонит, твоя теория остаётся теорией ?
Нет. Я просто с ними дел иметь не буду и все.
Они не моя целевая аудитория.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[31]: Языки общего назначения не имеют смысла!
От: vdimas Россия  
Дата: 26.04.12 10:42
Оценка:
Здравствуйте, WolfHound, Вы писали:


V>>БНФ задает ВЕСЬ класс контекстно свободных грамматик, который самый важный на сегодня.

WH>То-то чуть менее чем все языки КЗ.
WH>А для некоторых типа С++ даже нельзя построить адекватное КС надмножество.

Как раз в С++ конфликты совсем детские и решаются еще до парсинга, на этапе лексера + таблицы символов. Без отдельного этапа пост-обработки после парсинга.


V>>В любом случае нужна нотация, нейтральная к способу разбора.

WH>Зачем?

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


V>>Дык, никто не спорит. Все пока больше спрашивают. Очевидно же, что ПЕГ задает лишь некий подкласс грамматик и навскидку можно насочинять полно мест, где будет хромать (твой же пример с if/else).

WH>Чего?

Какой else к какому if относится.


WH>Какие скобки? Ты про a < b > c; ?

WH>Так его никакой БНФный парсер не разберет.
WH>А вот разбирающие грамматики можно подкрутить так чтобы разбирали.

Ну так я уже который раз спрашиваю... Именно, на уровне грамматики — никак. А на уровне конструкции парсера и спецификации языка всё решается более чем элементарно. Для С++ существенно то, что задается строгий порядок: сначала объявление типа и лишь потом его использование (в отличие от C#). Даже внутри классов: сначала надо объявить типы, потом их использовать, в отличие от мемберов (!!!). Это позволяет со 100% точностью отличить типы от не типов во время парсинга и правильно распознать угловые скобки, или другие символы, типа *, &, ^. Т.е. вот лексер во время разбора тебе выдает нетерминал "Идентификатор", а ты его ищешь в таблице типов и подменяешь нетерминалами "ИдентификаторТип" или "ИдентификаторЗначение". Т.е. вставляешь м/у лексером и парсером эдакий "КЗ-фильтр", но на уровне подмножества КС-грамматики языка, по которой работает парсер, ты уже имеешь совершенно бесконфликтную схему (по крайней мере относительно этих значков). Примитивщина же.

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


WH>Какая еще классика?

WH>Как то что написал относится к этому утверждению?
WH>

WH>Это так, только если контекстно-свободная грамматика является неоднозначной. Т.е. если она не является на самом деле контекстно-свободной и мы располагаем лишь подмножеством контекстно-свободных правил из полной системы правил грамматики.


Блин, столько возни вокруг банальности... Я написал это, т.к. вижу во всей ветке, что не различается в спорах, где полная грамматика языка, а где грамматика некоего парсера. Ключевое всегда то, что практически-полезный язык, который мы собираемся парсить, не может быть неоднозначным. Грамматику этого языка я называю "полной". Поэтому, чтобы спор не превратился в бессмысленный, надо всегда помнить, что целевой язык может быть однозначным или никаким. Но, в БНФ по-определению можно записать только КС-правила из этой полной грамматики. Об этом я и пытался напомнить без подробностей в многа букф.

К тому же, без указания, какие нетерминалы являются целевыми, а какие промежуточные, невозможно было утверждать про неоднозначность в твоем примере. Считай, что я с так лихо обошелся с твоим примером, чтобы тоже напомнить кое-что из БНФ... потому как вы слишком буквально воспринимаете правила редукции. Не обязано каждое правило в БНФ соответствовать 1:1 конечному АСТ, это тоже принципиально и тоже часто упускается, создавая трудности на ровном месте. Ты же наверняка многократно приводил недетерминированный автомат лексера к детерминировану, так? И тебя же не смущало, что в исходной записи в БНФ (если перейти от регулярных выражений к БНФ) он был бы точно такой же неоднозначной грамматикой в общем случае? Просто промежуточные нетерминалы, которые ты должен был бы ввести в систему уравнений БНФ для возможности записи исходной грамматики, склеиваются затем в один, если существует преобразование НКА->ДКА, или выдается конфликт состояний, если для пребразования в ДКА надо склеить различимые нетерминалы. Именно это я и показал на твоем примере.

============
На остальное потом.
Re[28]: Языки общего назначения не имеют смысла!
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.04.12 10:55
Оценка:
Здравствуйте, vdimas, Вы писали:

VD>>Я правильно понял, что ты утверждаешь, что БНФ описывает парсер?


V>БНФ описывает грамматику. Просто я распознал класс грамматики согласно ее определения.


А грамматика это что? Что она описывает? Варианты ответа:
1. Описывает правила порождения (генерации) строк языка.
2. Правила разбора строк принадлежащих к языку.

VD>>Приведенный ниже пример является корректным описанием с точки зрения БНФ?

VD>>
VD>>E = E + E;
VD>>E = E * E;
VD>>E = '1';
VD>>


V>Вполне


ОК, раз описывает, то является ли данная грамматика однозначной?

V>, если речь о нотации.


Можно подробнее об "если"? О чем еще может идти речь?

VD>>Если — да, то какой парсер он описывает? Если нет, то почему?


V>При чем тут парсер?


ОК, заменим слово "парсер" на более нейтральное "разбор строки принадлежащей языку". Так грамматика в формате BNF описывает то как можно разобрать строку принадлежащую языку? Иными словами, можно ли, в общем случае, имея BNF-грамматику построить по ней парсер (без дополнительной информации)?

V>Парсер выполняется по какой-то технике,


+1

V>а БНФ заведомо нейтральна к любой технике.


-1

И ты это поймешь сам как только правильно ответишь на заданные мной выше вопросы.

V> Это просто нотация КС-грамматик и ничего более.


Нет не просто... ОК, я дам тебе подсказку. А то ты там еще долго будешь кругами ходить.

Грамматики бывают порождающие и разбирающие.

Теперь, внимание, вопрос! Какого типа грамматики описывает BNF?

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

V> И задачи у парсеров могут быть разные. Если стоит задача дать любую удачную ветку разбора, то построить такой парсер по твоей грамматике не проблема.


У парсера есть только одна задача — разобрать строку принадлежащую языку и выдать дерево разбора (в том или ином виде) описывающее распознанные конструкции.

V>Если стоит задача написать парсер ЯП, то сам язык должен быть заведомо однозначным.


Все ЯП заведомо однозначны. Иначе на них нельзя было бы писать программы. Так что должно быть однозначным, чтобы можно было разобрать код на ЯП?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[33]: Языки общего назначения не имеют смысла!
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 26.04.12 11:22
Оценка:
Здравствуйте, WolfHound, Вы писали:

I>>Твои рассуждения не интересны по той причине, что ты через пост обвиняешь всех в тупости.

WH>Не всех. А тех кто FizzBuzz осилить не может. Если ты себя причисляешь к ним то извини.

Какой минимальный уровень квалификации необходим для того, что бы сочинить и реализовать ДСЛ ?

I>>Любой. Ты потратил скажем десять лет и выдал все понимание одной-двумя строчками текста на русском языке. Любой кто умеет читать по русски внезапно становится способным создавать ДСЛ.

WH>Конечно не в пару строк. Но в несколько страниц уместить можно.
WH>И конечно не любой, а тот, кто способен писать программы.

Точнее — какой уровень квалификации нужен для этого ?

Я утверждаю следующее — любой, кто не может осилить свой свобственный фреймворк с помощью которого можно решать задачи в декларативном виде не способен рожать ни ДСЛ, ни работать с грамматиками, компиляторами.

Т.е. ориентировочный уровень для работы с ДСЛ это примерно лет 5 опыта в индустрии _после_ универа.

WH>Остальные темой интересуются исключительно с прикладной точки зрения.


Это совершенно не важно. Главное что они работу делают.

WH>Хотя конечно то, что они слушают, то, что им говорят и это дает им возможность понять, то что им говорят.


Главное в том, что они работают в конкретном направлении.

WH>Ты же веришь что создание ДСЛ это что-то сложное.

WH>И эта вера запрещает тебе слушать то, что тебе говорят.

Порожняк мне не нужен. Мне нужны обоснование "простоты" о которой вы все говорите.

I>>Да ладно, хорош гнать то. Давай проверим. Напиши компилятор модула за 1 час с нуля. Студенты по вирту делают это где то за две недели.

WH>Когда доделаю инструменты, думаю, за день справлюсь.

За день- не интересно. Нужно за час. Студенты 3го курса. Производительность у них почти что нулевая, да и работают по "сложному Вирту и драконщине".

WH>Студенты же за две недели осиливают компилятор без оптимизаций и с хреновыми сообщениями об ошибках.

WH>Про ИДЕ и отладку можно даже не вспоминать.

Консольный компилер, без изысков.

I>>Я как минимум представляю какой минимальный набор знаний и умений необходим для того, что бы родить простецкий ДСЛ. И этот набор много больше того, который требуется для решения большинства бизнес-задач.

WH>Не представляешь. Ты опираешься на дракона. А там все сложнее, чем нужно.

Покажи, как ты вычислил минимальный уровень подготовки

WH>>>Ох. В драконе когнитивная сложность тоже зашкаливает. Попробуй, объясни человеку что такое конфликт сдвиг/свертка.

I>>Очевидно, с нуля это в принципе невозможно.
WH>А у меня всего этого нет. И как следствие объяснять не придется.

У тебя тоже чтото есть. все понятия прокачиваются, а не копируются из головы в голову. Это что, так сложно понять ?

I>>Кому объяснить, тебе, мне, или тому, кто FizzBuzz не может родить на собеседовании ?

WH>Тому, кто не может FizzBuzz вообще ничего объяснить нельзя.

А кому можно ? Где минимальный уровень ? Где взять специалистов с этим минимальным уровнем ?
Я, кстати, задаю этот вопрос всем немерлистам уже года три кряду и ответа до сих пор нет.

WH>Он даже на жабке писать не сможет.


Может.

WH>Чего? Каждый раз. В 100% случаев. Когда брали такого человека. После его увольнения переписывали весь его код. Кода становилось в десятки, раз меньше и он начинал работать намного быстрее и без ошибок.

WH>Вот это наблюдаемая реальность.

А откуда уверенность, что вся индустрия работает с такими задачами как у вас ?

WH>>>Способность к программированию она как музыкальный слух. Если она есть ее можно развить. Если ее нет, то хоть ты что делай. Человек программы писать не

I>>сможет.
WH>Не подтверждается практикой.
WH>Они конечно могут написать кучу операторов. Только эта куча будет тормозить и глючить, а не работать.

На каких задачах ? На ваших, на моих или на тех что в большинстве контор софтверных ?

I>>Если их выкинуть, тебе придется делать за них всю чОрную работу.

WH>Если их выкинуть и остальным дать нормальные инструменты, то черная работа исчезнет.

На примере AVK ты почему то застрял Там что, код сложный ? Всех умений — ооп на уровне 3-5 лет опыта + специфика бизнеса. Всё.

I>>чОрную работу пока невозможно исключить, потому что нет инструментов для автоматизации всех и вся.

WH>Ее можно сгенерировать.
WH>Факт.

Тогда у тебя должен быть ДСЛ для примера AVK.

I>>Если хочешь доказать, что твои инструменты уменьшают зависимость от ЧФ, снова ровно то же, только проект должен сменить несколько команд исполнитлей.

I>>Снова считаешь издержки и снова показываешь результат.
WH>Да-да-да. Я просто этих считателей с рыка выдавлю и все.

Нет, ты будешь ныть и плакать "Их нужно просто выкидывать из профессии" еще лет пять или десять, а может и больше.

I>>Кроме того, в бизнесе тебя обязательно спросят про обратную совместимость. Смотри, не облажайся, как Немерле. Здесь тоже нужны выкладки

WH>Ты про что? Н2 это новый проект. К немерле отношения не имеет.

Про первую версию Немерле.

WH>А ломающие изменения есть даже у мелкософта.

WH>Пруфлинк.
WH>https://www.google.ru/?q=site:msdn.microsoft.com+breaking+changes#hl=ru&amp;newwindow=1&amp;output=search&amp;sclient=psy-ab&amp;q=site:msdn.microsoft.com+breaking+changes&amp;oq=&amp;aq=&amp;aqi=&amp;aql=&amp;gs_nf=&amp;gs_l=&amp;pbx=1&amp;bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&amp;fp=79961699fc8b503f&amp;biw=1110&amp;bih=629
WH>И это только документированные.

Забудь С++, это уже не мейнстрим. В мейнстриме у МС только один прокол это похороны J#.

I>>Ты знаешь, но не понимаешь почему они там есть.

WH>В компаниях нацеленных на результат по глупости. И долго они там не задерживаются.

Работают годами и прокачиваются в специфике бизнеса что самое важное.

WH>А там где пилят бабло руководству на продукт пофиг. Им бы лишь бы подешевле "работников" нанять. Чтобы создать вид бурной деятельности.


Покажи свой продукт.

I>>А между тем они решают задачи бизнеса. Это факт. И пока это не изменится, никто их не выбросит.

WH>Ни разу не видел чтобы такой человек что-то решил.

Вот я тебе это же и говорю — ты рассужаешь о том, чего не видел.

WH>Так вот что я тебе скажу.

WH>На заре разработки, когда все было в машинных кодах.
WH>Соотношения были ровно теми же.

Были. Задачи изменились. История лиспа тебя ничему не научила ?

WH>Но от машинных кодов ушли.


Ушли сначала в ассемблеры, потом в Си и причие фортраны . Лисп тот же не прижился — ОПАНЬКИ ЗАГОВОР !!!!!!!!!!!!

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

WH>Так технологии, которые ты защищаешь и есть древние.

Я жду когда они будут опробованы на ком то другом, а не на мне. Я не люблю на себе испытывать поделки, которые после первой беты забивают на обратную совместимость.

I>>С тз бизнеса нет разницы, главное что профит есть.

WH>Первый и третий это отказ от разработки. Но мы обсуждаем именно разработку.

Это тебе удобно сводить все к разработке. Именно бизнес определяет где будет разработка, а где нет.

WH>Что касается второго, так как он будет закрывать проблему? А если у проблемы придел сложности выше, чем способности человека, у которого только жабка в руках?


Ты похоже хочешь сказать простую вещи, что человек будет неспособен решить проблему в той области, в которой он является экспертом ?

WH>>>Не могущие написать FizzBuzz но упорно идущие к цели...

I>>Это уже не важно. Есть результат — есть профит.
WH>Нет результата. Я ни разу не видел.

Так это твои проблемы.

WH>Попил бабла не рассматриваем.


Первый раз слышу, что продукты являются попилом.

WH>Только проще.

WH>Ибо не нужно думать, как натянуть нашу вычислительную модель на язык.

Ты что, весь код с нуля пишешь ?

I>>Покажи пример, только не поделки на вольную тему, а решение бизнес-задачи.

WH>Что значит бизнес-задачи?
WH>Они, вообще говоря, очень разные бывают.

Так в том то и дело. AVK дал хороший пример. Я могу еще пару таких подкинуть, это ж не сложно.

I>>А где тот бизнес который делал приёмку ?

WH>У меня есть закрытые проекты, где бизнес делал приемку.

То есть не продукты ? До свидания.

WH>Показать их я ессно не могу.

WH>И разработка там велась именно итерациями.
WH>Дальше что?
WH>Будешь утверждать, что я вру?

Неинтересно. Покажи продукт.

I>>Да ёе в общем случае никогда не хватает.

WH>В общем да. В конкретных обычно с большим запасом. Или все утыкается в ввод/вывод.

А еще в ресурсы.

I>>То есть, пока их никто не выгонит, твоя теория остаётся теорией ?

WH>Нет. Я просто с ними дел иметь не буду и все.
WH>Они не моя целевая аудитория.

Ну и хорошо. Тогда в мейнстриме тебе делать вообще нечего да и в проектах где целая пачка технологий тоже.
Re[32]: Языки общего назначения не имеют смысла!
От: WolfHound  
Дата: 26.04.12 11:38
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Как раз в С++ конфликты совсем детские и решаются еще до парсинга, на этапе лексера + таблицы символов. Без отдельного этапа пост-обработки после парсинга.

Только это уже КЗ.
Просто по определению.

V>Хотя бы, чтобы иметь возможность переность грамматику без изменений от парсера к парсеру и сравнивать результаты.

1)Зачем?
2)Попробуй, перенеси грамматику из АНТЛР в yacc.

V>>>Дык, никто не спорит. Все пока больше спрашивают. Очевидно же, что ПЕГ задает лишь некий подкласс грамматик и навскидку можно насочинять полно мест, где будет хромать (твой же пример с if/else).

WH>>Чего?
V>Какой else к какому if относится.
И где проблема?
else всегда относится к ближайшему if . Другие правила невозможно даже сформулировать так чтобы их можно было однозначно разобрать.

WH>>Какие скобки? Ты про a < b > c; ?

WH>>Так его никакой БНФный парсер не разберет.
WH>>А вот разбирающие грамматики можно подкрутить так чтобы разбирали.
V>Ну так я уже который раз спрашиваю...
Что спрашиваешь?

V>Именно, на уровне грамматики — никак.

На уровне БНФ никак. Но на БНФ свет клином не сошёлся.

V>Блин, столько возни вокруг банальности... Я написал это, т.к. вижу во всей ветке, что не различается в спорах, где полная грамматика языка, а где грамматика некоего парсера. Ключевое всегда то, что практически-полезный язык, который мы собираемся парсить, не может быть неоднозначным. Грамматику этого языка я называю "полной". Поэтому, чтобы спор не превратился в бессмысленный, надо всегда помнить, что целевой язык может быть однозначным или никаким. Но, в БНФ по-определению можно записать только КС-правила из этой полной грамматики. Об этом я и пытался напомнить без подробностей в многа букф.

Только ты сказал как обычно какойто бред из серии что некоторые КС грамматики восве не КС.

V>К тому же, без указания, какие нетерминалы являются целевыми, а какие промежуточные, невозможно было утверждать про неоднозначность в твоем примере.

Что характерно моей грамматике промежуточные нетерминалы не нужны.

V>Считай, что я с так лихо обошелся с твоим примером, чтобы тоже напомнить кое-что из БНФ... потому как вы слишком буквально воспринимаете правила редукции. Не обязано каждое правило в БНФ соответствовать 1:1 конечному АСТ, это тоже принципиально и тоже часто упускается, создавая трудности на ровном месте.

Ага. Трудности на ровном месте.
И все ради чего?
Ради БНФ?

V>Ты же наверняка многократно приводил недетерминированный автомат лексера к детерминировану, так? И тебя же не смущало, что в исходной записи в БНФ (если перейти от регулярных выражений к БНФ) он был бы точно такой же неоднозначной грамматикой в общем случае? Просто промежуточные нетерминалы, которые ты должен был бы ввести в систему уравнений БНФ для возможности записи исходной грамматики, склеиваются затем в один, если существует преобразование НКА->ДКА, или выдается конфликт состояний, если для пребразования в ДКА надо склеить различимые нетерминалы. Именно это я и показал на твоем примере.

Меня это не смущает по тому, что мне не нужно ничего различать.
Токены атомарны.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[34]: Языки общего назначения не имеют смысла!
От: WolfHound  
Дата: 26.04.12 12:07
Оценка: -1
Здравствуйте, Ikemefula, Вы писали:

WH>>Не всех. А тех кто FizzBuzz осилить не может. Если ты себя причисляешь к ним то извини.

I>Какой минимальный уровень квалификации необходим для того, что бы сочинить и реализовать ДСЛ ?
Если человек в состоянии написать библиотеку этого достаточно.
Остальному можно научить за пару дней максимум.

I>Я утверждаю следующее — любой, кто не может осилить свой свобственный фреймворк с помощью которого можно решать задачи в декларативном виде не способен рожать ни ДСЛ, ни работать с грамматиками, компиляторами.

А я утверждаю, что ДСЛи намного проще.
Ибо не нужно натягивать модель ДСЛ на модель языка.

WH>>Остальные темой интересуются исключительно с прикладной точки зрения.

I>Это совершенно не важно. Главное что они работу делают.
Контекст беседы вспомни.

WH>>Хотя конечно то, что они слушают, то, что им говорят и это дает им возможность понять, то что им говорят.

I>Главное в том, что они работают в конкретном направлении.
В каком? Они не создают инструменты для создания ДСЛ.
Они создают ДСЛ.

I>Порожняк мне не нужен. Мне нужны обоснование "простоты" о которой вы все говорите.

Я тебе уже несколько раз сказал.
Но ты не слушаешь.

I>>>Да ладно, хорош гнать то. Давай проверим. Напиши компилятор модула за 1 час с нуля. Студенты по вирту делают это где то за две недели.

WH>>Когда доделаю инструменты, думаю, за день справлюсь.
I>За день- не интересно. Нужно за час. Студенты 3го курса. Производительность у них почти что нулевая, да и работают по "сложному Вирту и драконщине".
Какая классная резьба по цитате.
Так держать. Может быть, даже сможешь убедить себя.

WH>>Студенты же за две недели осиливают компилятор без оптимизаций и с хреновыми сообщениями об ошибках.

WH>>Про ИДЕ и отладку можно даже не вспоминать.
I>Консольный компилер, без изысков.
А я что написал?

WH>>Тому, кто не может FizzBuzz вообще ничего объяснить нельзя.

I>А кому можно ? Где минимальный уровень ? Где взять специалистов с этим минимальным уровнем ?
FizzBuzz это минимальный уровень после, которого можно пытаться человека учить.

I> Я, кстати, задаю этот вопрос всем немерлистам уже года три кряду и ответа до сих пор нет.

Ты его постоянно игнорируешь.
На немерле может писать любой кто осилил C#.

WH>>Он даже на жабке писать не сможет.

I>Может.
Не может. Проверено.

I>А откуда уверенность, что вся индустрия работает с такими задачами как у вас ?

У меня уверенность в том что абсолютно любая бизнеслогика минимум на порядок сложнее чем FizzBuzz.

I>На каких задачах ? На ваших, на моих или на тех что в большинстве контор софтверных ?

На любых.

I>На примере AVK ты почему то застрял Там что, код сложный ? Всех умений — ооп на уровне 3-5 лет опыта + специфика бизнеса. Всё.

AVK ничего не сказал.
Все попытки прояснить ситуацию закончились отбрёхами в стиле: Это не важно. То не нужно.
Нельзя проектировать, не зная задачи.
AVK и сам не сможет по тому куску восстановить архитектуру.
Он все понимает только по тому, что все спроектировал.

I>Тогда у тебя должен быть ДСЛ для примера AVK.

После того как AVK удосужится нормально ответить на вопросы.

I>>>Кроме того, в бизнесе тебя обязательно спросят про обратную совместимость. Смотри, не облажайся, как Немерле. Здесь тоже нужны выкладки

WH>>Ты про что? Н2 это новый проект. К немерле отношения не имеет.
I>Про первую версию Немерле.
А что с ней?

I>Забудь С++, это уже не мейнстрим. В мейнстриме у МС только один прокол это похороны J#.

Причем тут С++?
Там 10 тысяч ссылок.
Но можно и вот так.
https://www.google.ru/?q=site:msdn.microsoft.com+breaking+changes#hl=ru&amp;newwindow=1&amp;sclient=psy-ab&amp;q=site:msdn.microsoft.com+breaking+changes+C%23&amp;oq=site:msdn.microsoft.com+breaking+changes+C%23&amp;aq=f&amp;aqi=&amp;aql=&amp;gs_nf=1&amp;gs_l=serp.3...2208.3757.1.4060.4.4.0.0.0.1.214.700.0j3j1.4.0.kkY47QoiF0M&amp;pbx=1&amp;bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&amp;fp=79961699fc8b503f&amp;biw=1110&amp;bih=629
Ты полистай выдачу.

I>>>А между тем они решают задачи бизнеса. Это факт. И пока это не изменится, никто их не выбросит.

WH>>Ни разу не видел чтобы такой человек что-то решил.
I>Вот я тебе это же и говорю — ты рассужаешь о том, чего не видел.
Я видел таких людей.
Даже пытался с ними работать.

I>Были. Задачи изменились. История лиспа тебя ничему не научила ?

А чему она должна научить?
Лисп, динамически типизированный язык без синтаксиса.
Это само по себе огромные проблемы.

I>Я жду когда они будут опробованы на ком то другом, а не на мне. Я не люблю на себе испытывать поделки, которые после первой беты забивают на обратную совместимость.

Не пользуйся C#.

I>Это тебе удобно сводить все к разработке. Именно бизнес определяет где будет разработка, а где нет.

Но мы-то говорим про разработку.

I>Ты похоже хочешь сказать простую вещи, что человек будет неспособен решить проблему в той области, в которой он является экспертом ?

Я спрашиваю как он ее собирается решать?
Ибо таки люди обычно приносят с собой кучу инструментов.
Включая компиляторы своих язычков.

WH>>Ибо не нужно думать, как натянуть нашу вычислительную модель на язык.

I>Ты что, весь код с нуля пишешь ?
Откуда такой вывод?

I>Так в том то и дело. AVK дал хороший пример. Я могу еще пару таких подкинуть, это ж не сложно.

Попробуй, подкинь.
Только как AVK в молчанку с умным видом не играй.

I>>>А где тот бизнес который делал приёмку ?

WH>>У меня есть закрытые проекты, где бизнес делал приемку.
I>То есть не продукты ? До свидания.
Что значит не продукты?
Еще, какие продукты. Они работают. И приносят деньги.
А то, что это не вписывается в твою картину мира это твои проблемы.

I>Ну и хорошо. Тогда в мейнстриме тебе делать вообще нечего да и в проектах где целая пачка технологий тоже.

Откуда такой вывод?

И еще более интересно, откуда вера в то, что человек не способный написать FizzBuzz может написать на порядок более сложную бизнеслогику?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[35]: Языки общего назначения не имеют смысла!
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 26.04.12 14:23
Оценка: -1 :)
Здравствуйте, WolfHound, Вы писали:

WH>>>Не всех. А тех кто FizzBuzz осилить не может. Если ты себя причисляешь к ним то извини.

I>>Какой минимальный уровень квалификации необходим для того, что бы сочинить и реализовать ДСЛ ?
WH>Если человек в состоянии написать библиотеку этого достаточно.
WH>Остальному можно научить за пару дней максимум.

Какую библиотеку? Библиотеки они разные. Даже на одну задачу можно найти под сотню самых разных библиотек.

I>>Я утверждаю следующее — любой, кто не может осилить свой свобственный фреймворк с помощью которого можно решать задачи в декларативном виде не способен рожать ни ДСЛ, ни работать с грамматиками, компиляторами.

WH>А я утверждаю, что ДСЛи намного проще.
WH>Ибо не нужно натягивать модель ДСЛ на модель языка.

WH>>>Остальные темой интересуются исключительно с прикладной точки зрения.

I>>Это совершенно не важно. Главное что они работу делают.
WH>Контекст беседы вспомни.

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

WH>>>Хотя конечно то, что они слушают, то, что им говорят и это дает им возможность понять, то что им говорят.

I>>Главное в том, что они работают в конкретном направлении.
WH>В каком? Они не создают инструменты для создания ДСЛ.
WH>Они создают ДСЛ.

Это абсолютно неважно.

I>>Порожняк мне не нужен. Мне нужны обоснование "простоты" о которой вы все говорите.

WH>Я тебе уже несколько раз сказал.
WH>Но ты не слушаешь.

Все что ты выдал, это какая то абстрактная "библиотека". Любой набор функций под конкретную задачу написаный с любым количеством ошибок в т.ч. ошибок проектирования и тд будет библиотекой.

WH>>>Студенты же за две недели осиливают компилятор без оптимизаций и с хреновыми сообщениями об ошибках.

WH>>>Про ИДЕ и отладку можно даже не вспоминать.
I>>Консольный компилер, без изысков.
WH>А я что написал?

Я предлагаю тебе взять да оценить. Не надо придуриваться, сравнивать нужно сравнимое, а не табурет с бегемотом.

I>>А кому можно ? Где минимальный уровень ? Где взять специалистов с этим минимальным уровнем ?

WH>FizzBuzz это минимальный уровень после, которого можно пытаться человека учить.

Спасибо, капитан. А что за абстрактная библиотека из фразы выше ?

I>> Я, кстати, задаю этот вопрос всем немерлистам уже года три кряду и ответа до сих пор нет.

WH>Ты его постоянно игнорируешь.
WH>На немерле может писать любой кто осилил C#.

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

I>>Может.

WH>Не может. Проверено.

Они даже библиотеки пишут

I>>А откуда уверенность, что вся индустрия работает с такими задачами как у вас ?

WH>У меня уверенность в том что абсолютно любая бизнеслогика минимум на порядок сложнее чем FizzBuzz.

Правильно. Только сложность там специфике бизнеса и совершенно необязательно код должен быть таким же сложным.

I>>На каких задачах ? На ваших, на моих или на тех что в большинстве контор софтверных ?

WH>На любых.

Чушь.

I>>На примере AVK ты почему то застрял Там что, код сложный ? Всех умений — ооп на уровне 3-5 лет опыта + специфика бизнеса. Всё.

WH>AVK ничего не сказал.

Он дал все необходимые пояснения.

WH>Все попытки прояснить ситуацию закончились отбрёхами в стиле: Это не важно. То не нужно.


Да ладно, типа я не видел, ага.

I>>Тогда у тебя должен быть ДСЛ для примера AVK.

WH>После того как AVK удосужится нормально ответить на вопросы.

Если ты не занимался инвентаризацией тебе все будет бесполезно.

I>>Про первую версию Немерле.

WH>А что с ней?

Все хорошо, отдохни.

WH>https://www.google.ru/?q=site:msdn.microsoft.com+breaking+changes#hl=ru&amp;newwindow=1&amp;sclient=psy-ab&amp;q=site:msdn.microsoft.com+breaking+changes+C%23&amp;oq=site:msdn.microsoft.com+breaking+changes+C%23&amp;aq=f&amp;aqi=&amp;aql=&amp;gs_nf=1&amp;gs_l=serp.3...2208.3757.1.4060.4.4.0.0.0.1.214.700.0j3j1.4.0.kkY47QoiF0M&amp;pbx=1&amp;bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&amp;fp=79961699fc8b503f&amp;biw=1110&amp;bih=629

WH>Ты полистай выдачу.

Это пурга. У нас ветка продуктов в сумме потянет мегов 150 кода который писался на 1.0 и перекочевал в 3.5, сейчас будет переводиться на 4.0. Там заюзаны практически все фичи языка. Не было ни одной проблемы.

WH>>>Ни разу не видел чтобы такой человек что-то решил.

I>>Вот я тебе это же и говорю — ты рассужаешь о том, чего не видел.
WH>Я видел таких людей.
WH>Даже пытался с ними работать.

Мне кажется у тебя хронические проблемы в общении с людьми которые хоть в чем то знают меньше тебя

I>>Были. Задачи изменились. История лиспа тебя ничему не научила ?

WH>А чему она должна научить?
WH>Лисп, динамически типизированный язык без синтаксиса.
WH>Это само по себе огромные проблемы.

Хорошая отмазка

I>>Я жду когда они будут опробованы на ком то другом, а не на мне. Я не люблю на себе испытывать поделки, которые после первой беты забивают на обратную совместимость.

WH>Не пользуйся C#.

С C# все хорошо. А вот с немерле — не очень. Я забил когда в очередной версии перестал компилиться старый код и выбросил эту поделку на помойку.

I>>Это тебе удобно сводить все к разработке. Именно бизнес определяет где будет разработка, а где нет.

WH>Но мы-то говорим про разработку.

О чем я и говорю — разработка отдельно от бизнеса никому не интересна. Кони в вакууме не нужны.

I>>Ты похоже хочешь сказать простую вещи, что человек будет неспособен решить проблему в той области, в которой он является экспертом ?

WH>Я спрашиваю как он ее собирается решать?
WH>Ибо таки люди обычно приносят с собой кучу инструментов.
WH>Включая компиляторы своих язычков.

Необязательно компилятор. У него обязатеьлно будут наработки в любой форме. Мб даже готовый фремворк.

WH>>>Ибо не нужно думать, как натянуть нашу вычислительную модель на язык.

I>>Ты что, весь код с нуля пишешь ?
WH>Откуда такой вывод?

Да ты все акцентируешь внимание на этом натягивании. Я вот не могу этого понять, как ни кручу, а решение задачи занимает много больше времени чем запись решения. Может ты не теми задачами занимаешься ?

I>>Так в том то и дело. AVK дал хороший пример. Я могу еще пару таких подкинуть, это ж не сложно.

WH>Попробуй, подкинь.
WH>Только как AVK в молчанку с умным видом не играй.

Вот смотри. У юзеров есть тонны своих файлов в экселе которые он хочет засунуть в нашу прогу.
Нужен дсл что бы натягивать одну структуру на другую. Каждый файлик содержит штук 10-15 закладок и там данные разных типов.
Файлики он редактирует руками, что накладывает кучу ограничений. При импорте кое какие объекты нужно удалять, кое какие — создавать, в некоторых случаях обновление вообще нельзя выполнять. Например так — строчка в xls-файле это создание около десятка сущностей при выполнении ряда условий или же поиск-модификация этого десятка сущностей при выполнении ряда условий. Естественно, может быть все вместе — и создание и поиск и удаление и модификация и тд.
Нужно логировать все ошибки в структуре, все проблемы и тд и тд.
Вские констреинты накладываются на файлик, на создаваемый объект, на строчку, на операцию импорта, на закладку.
Никаких глобальных уникальных идентификаторов нет, т.к. файлик редактируется юзером. Уникальность объекта по имени в пределах объека на уровень выше(на два, на три) и тд.
нужно проверять, кучу вской всячины. например можно ли нулем перезатирать старое значение или нет и тд и тд.

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


I>>То есть не продукты ? До свидания.

WH>Что значит не продукты?
WH>Еще, какие продукты. Они работают. И приносят деньги.

Если продукты, то почему не можешь дать ссылку ?

I>>Ну и хорошо. Тогда в мейнстриме тебе делать вообще нечего да и в проектах где целая пачка технологий тоже.

WH>Откуда такой вывод?

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

WH>И еще более интересно, откуда вера в то, что человек не способный написать FizzBuzz может написать на порядок более сложную бизнеслогику?


У тебя все или черное, или белое. Если человек может решить бизнес-задачу, то ему достаточно минимальных навыков в программировании что бы записать решение в лоб. Возможно он сделает в десять раз дольше чем я. Это ничего не значит. Мне переключиться на его задачу и решить её самому всё равно много дороже.

Ты похоже меряешь способности к решению задач исключительно в понятиях программирования.
Re[36]: Языки общего назначения не имеют смысла!
От: WolfHound  
Дата: 26.04.12 16:13
Оценка:
Здравствуйте, Ikemefula, Вы писали:

WH>>>>Студенты же за две недели осиливают компилятор без оптимизаций и с хреновыми сообщениями об ошибках.

WH>>>>Про ИДЕ и отладку можно даже не вспоминать.
I>>>Консольный компилер, без изысков.
WH>>А я что написал?
I>Я предлагаю тебе взять да оценить. Не надо придуриваться, сравнивать нужно сравнимое, а не табурет с бегемотом.
Что оценить?
Ты, похоже, просто что-то пишешь даже не утруждая себя чтением.

I>На чистом немерле без ваших императивных костылей сильно вряд ли. А если взять макросы, то совершенно очевидно, что не любой. Тебе просто удобно игнорировать сообщения тех, кто попробовал и забил.

А мне совершенно очевидно обратное.

WH>>У меня уверенность в том что абсолютно любая бизнеслогика минимум на порядок сложнее чем FizzBuzz.

I>Правильно. Только сложность там специфике бизнеса и совершенно необязательно код должен быть таким же сложным.
Каким сложным? Ты хоть знаешь что такое FizzBuzz?
Вот условие:

Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово «Fizz», а вместо чисел, кратных пяти — слово «Buzz». Если число кратно и 3, и 5, то программа должна выводить слово «FizzBuzz»

Если человек не может FizzBuzz то он вообще писать не может.
Никак.

I>>>На примере AVK ты почему то застрял Там что, код сложный ? Всех умений — ооп на уровне 3-5 лет опыта + специфика бизнеса. Всё.

WH>>AVK ничего не сказал.
I>Он дал все необходимые пояснения.
Не дал. На чуть менее чем все вопросы он ответил "не важно".

WH>>Все попытки прояснить ситуацию закончились отбрёхами в стиле: Это не важно. То не нужно.

I>Да ладно, типа я не видел, ага.
Похоже, что не видел.

I>>>Про первую версию Немерле.

WH>>А что с ней?
I>Все хорошо, отдохни.
Давай конкретно.

WH>>https://www.google.ru/?q=site:msdn.microsoft.com+breaking+changes#hl=ru&amp;newwindow=1&amp;sclient=psy-ab&amp;q=site:msdn.microsoft.com+breaking+changes+C%23&amp;oq=site:msdn.microsoft.com+breaking+changes+C%23&amp;aq=f&amp;aqi=&amp;aql=&amp;gs_nf=1&amp;gs_l=serp.3...2208.3757.1.4060.4.4.0.0.0.1.214.700.0j3j1.4.0.kkY47QoiF0M&amp;pbx=1&amp;bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&amp;fp=79961699fc8b503f&amp;biw=1110&amp;bih=629

WH>>Ты полистай выдачу.

I>Это пурга.

Это не пурга. Это факты.
Причем признанные самим мелкософтом.
Ты посмотри, по какому домену поиск происходит.
msdn.microsoft.com

I>У нас ветка продуктов в сумме потянет мегов 150 кода который писался на 1.0 и перекочевал в 3.5, сейчас будет переводиться на 4.0. Там заюзаны практически все фичи языка. Не было ни одной проблемы.

А я помню перевод 10 метров с первого на второй. Было несколько проблем.
Они конечно решились в течении дня но они были.

I>Мне кажется у тебя хронические проблемы в общении с людьми которые хоть в чем то знают меньше тебя

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

I>>>Были. Задачи изменились. История лиспа тебя ничему не научила ?

WH>>А чему она должна научить?
WH>>Лисп, динамически типизированный язык без синтаксиса.
WH>>Это само по себе огромные проблемы.
I>Хорошая отмазка
Это не отмазка.
Это причины по которым я его не использую.

I>С C# все хорошо. А вот с немерле — не очень. Я забил когда в очередной версии перестал компилиться старый код и выбросил эту поделку на помойку.

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

I>Да ты все акцентируешь внимание на этом натягивании. Я вот не могу этого понять, как ни кручу, а решение задачи занимает много больше времени чем запись решения. Может ты не теми задачами занимаешься ?

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

I>Вот смотри.

Я буду по ходу дела комментировать и задавать вопросы.

I>У юзеров есть тонны своих файлов в экселе которые он хочет засунуть в нашу прогу.

Те нужно написать парсер эксельных документов.
И конвертер во внутренний формат вашей проги.
Какой формат внутри вашей проги?
Что за данные?

I>Файлики он редактирует руками, что накладывает кучу ограничений.

Ты это рассказываешь человеку который компиляторы пишет?

I>При импорте кое какие объекты нужно удалять, кое какие — создавать, в некоторых случаях обновление вообще нельзя выполнять. Например так — строчка в xls-файле это создание около десятка сущностей при выполнении ряда условий или же поиск-модификация этого десятка сущностей при выполнении ряда условий. Естественно, может быть все вместе — и создание и поиск и удаление и модификация и тд.

Примеры правил можно?

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

Всё ещё мало информации.

I>Если продукты, то почему не можешь дать ссылку ?

90% программистов не могут дать ссылку на то, что они делают.
Это означает то, что они ничего не делают?
Или то, что они не работают на бизнес?

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

Для стандартных задачек будут стандартные ДСЛ.
А самое веселое в том, что то же AVK как раз технологии и создает.

I>Ты похоже меряешь способности к решению задач исключительно в понятиях программирования.

Ох. Человек, который не может FizzBuzz писать не может совсем.
Условие этого самого FizzBuzz я привел выше.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[32]: Языки общего назначения не имеют смысла!
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.04.12 19:26
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Как раз в С++ конфликты совсем детские и решаются еще до парсинга, на этапе лексера + таблицы символов. Без отдельного этапа пост-обработки после парсинга.


Опять ерунду говоришь. Конфликты там решаются на стадии парсинга. В таблицу символов нужно добавлять информацию о типах описанных выше. Иначе нельзя различить банального "x * y?". Если "x" тип — это определение переменной, если — нет, то это умножение.

Короче, на стадии лексера там ничего разрешить нельзя.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Языки общего назначения не имеют смысла!
От: vdimas Россия  
Дата: 26.04.12 19:49
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>А грамматика это что? Что она описывает? Варианты ответа:

VD>1. Описывает правила порождения (генерации) строк языка.
VD>2. Правила разбора строк принадлежащих к языку.

Вариант 3, правильный: система уравнений, которой должна удовлетворять цепочка символов. Считай, что при распознавании ты дополняешь это уравнение еще одной строкой — фактической входной цепочкой:
S -> 'abcdef...'
И ищешь все решения уравнения. А при генерации ты производишь тривиальную последовательную подстановку переменных, точно так же как в системе линейных уравнений, имеющей бесконечное кол-во решений, для выбора одного из решений ты задаешь произвольный базис части переменных и находишь остальные через подстановки.

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

VD>>>Приведенный ниже пример является корректным описанием с точки зрения БНФ?

...
V>>Вполне
VD>ОК, раз описывает, то является ли данная грамматика однозначной?

Если это была БНФ, ес-но нет.

V>>, если речь о нотации.

VD>Можно подробнее об "если"? О чем еще может идти речь?

Потому что это не классичесская БНФ нотация, т.е. это могла быть нотация чего угодно... но придираться не буду. Это я подстраховался на случай потенциальных каверзных вопросов, заведомо неинтересных по этой теме.


VD>>>Если — да, то какой парсер он описывает? Если нет, то почему?

V>>При чем тут парсер?
VD>ОК, заменим слово "парсер" на более нейтральное "разбор строки принадлежащей языку".

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


VD>Так грамматика в формате BNF описывает то как можно разобрать строку принадлежащую языку?


Ес-но нет и не должна. Обобщенный разбор по БНФ-грамматике, независимо — нисходящий он или восходящий, потенциально рекурсивный и бесконечный, требует автомат с бесконечной магазинной памятью (Тюринга), поэтому ес-но БНФ не описывает как ее разобрать. Но так же как для разных классов математических уравнений есть методы решения (напр: линейные, гармонические, ДИ, квадратичные и т.д.), так же есть методы решения и для разных подклассов КС-грамматик, описываемых БНФ.


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


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


V>>Парсер выполняется по какой-то технике,

VD>+1

V>>а БНФ заведомо нейтральна к любой технике.

VD>-1

VD>И ты это поймешь сам как только правильно ответишь на заданные мной выше вопросы.


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


V>> Это просто нотация КС-грамматик и ничего более.

VD>Нет не просто... ОК, я дам тебе подсказку. А то ты там еще долго будешь кругами ходить.
VD>Грамматики бывают порождающие и разбирающие.
VD>Теперь, внимание, вопрос! Какого типа грамматики описывает BNF?
VD>В ответе на этот вопрос кроется ответ на все остальные вопросы, а стало быть понимание того что так долго пытается донести до тебя Вольфхаунд.

Тю, блин. Сравнивать аналитические и порождающие грамматики — это как сравнивать спецификацию и алгоритм. Конечно, БНФ используется как спецификация, поэтому она столь распространена. Но по спецификации (если она непротиворечива) можно составить алгоритм.

А почему же непосредственный алгоритм не очень хорош в кач-ве спецификаций? Наверно из-за теоремы:

Никакое нетривиальное свойство вычисляемых функций не является алгоритмически разрешимым.
Смысл этой теоремы в том, что по описанию алгоритма, т.е. Машины Тьюринга, ничего нельзя узнать о свойствах функции, которую он вычисляет.

Это то, что я уже десяток раз, если не больше, говорил о ПЕГ. Это как сравнивать функциональное и императивное программирование. Т.е. мне даже лень рассуждать, сравнивали на этом сайте уже многократно. БНФ — декларатив, ПЕГ — императив.

V>> И задачи у парсеров могут быть разные. Если стоит задача дать любую удачную ветку разбора, то построить такой парсер по твоей грамматике не проблема.

VD>У парсера есть только одна задача — разобрать строку принадлежащую языку и выдать дерево разбора (в том или ином виде) описывающее распознанные конструкции.

Это если парсер ЯВУ. А то ведь вовсе не факт, например валидатор какой-нить может что-то валидировать по сильно упрощенной схеме, без знания полной семантики. Так оно и есть в EDI или утилитах проверки орфографии.


V>>Если стоит задача написать парсер ЯП, то сам язык должен быть заведомо однозначным.

VD>Все ЯП заведомо однозначны.

Это от багов спецификации языка зависит.

VD>Иначе на них нельзя было бы писать программы.


Можно. Но получать на разных реализациях разное поведение. Что и наблюдается периодически.

VD>Так что должно быть однозначным, чтобы можно было разобрать код на ЯП?


Спецификация должна быть непротиворечивой. А с помощью БНФ можно описать лишь ничтожную часть этой спецификации — отдельные элементы синтаксиса. БНФ себя проявляет во всей красе именно как спецификация грамматики для человека из-за удобной декомпозиции своих определений. Это хорошо ложится на то, как человек разбирает материал — от общего к частному.
Re[33]: Языки общего назначения не имеют смысла!
От: vdimas Россия  
Дата: 26.04.12 19:51
Оценка:
Здравствуйте, VladD2, Вы писали:

V>>Как раз в С++ конфликты совсем детские и решаются еще до парсинга, на этапе лексера + таблицы символов. Без отдельного этапа пост-обработки после парсинга.


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


VD>Короче, на стадии лексера там ничего разрешить нельзя.


Ниже в том же посте я более подробно пояснил. Да, м/у лексером и парсером обратная связь через таблицу идентификаторов. Но конфликты упомянутых значков действительно решаются еще ПЕРЕД подачей нетерминалов на парсер. В парсере уже никаких конфликтов.
Re[34]: Языки общего назначения не имеют смысла!
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.04.12 20:35
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Ниже в том же посте я более подробно пояснил. Да, м/у лексером и парсером обратная связь через таблицу идентификаторов. Но конфликты упомянутых значков действительно решаются еще ПЕРЕД подачей нетерминалов на парсер. В парсере уже никаких конфликтов.


Это не на стадии лексера, а на стадии парсинга все же. Другое дело, что они еще хачат лексер.

Нам это делать ненадо. У нас тупо будут предикаты которые смогут использовать таблицу символов.

Ну, лексера у нас отдельного не будет. Все правила носят свои лексеры с собой.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Языки общего назначения не имеют смысла!
От: WolfHound  
Дата: 26.04.12 21:51
Оценка: :)
Здравствуйте, vdimas, Вы писали:

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

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