Здравствуйте, vdimas, Вы писали:
V>Вообще-то, там твой напарник выделил FSM полностью по классике.
Это в одном мелком случае. А в 5 других он послал классику в одно широко известно место и написал свой алгоритм который работает в десятки раз быстрее оригинала. Онигинал, правда, линейную скорость гарантировал, но линейно низкую. А алгоритм Вольфхаунда линейность не ганартирует, но на реальных языках показывает общую скорость на уровне и привышающую рукописные парсеры.
V>Регулярная грамматика растет только вправо за счет терминалов. Он даже реализовал т.н. расширенную нотацию регулярных грамматик, без которой выделение регулярного подмножества не было бы полным. Поэтому ты не прав, все очень даже по науке. Это не только слова.
Да, тут он сработал по науке. Только чтобы эту науку прикрутить в нужное место, он где-то месяц или два голову ломал. В двух словах дело было так. Я сделал предположение, что для некоторых подграмматик (а это PEG, значит лексера нет!) можно генерить ДКА и за счет этого улучшить производительность (до этого в шипко научных работах считалось что Пакрат (реализация пега) вообще не пригоден для распознавания ключевых слов, так как это шибко медленно). Он подергался и первая реализация получилась никакая. Ускорения она не давала. Тогда он начал ломать голову на счет того как улучшить встраивание ДКА в безлексерный пасрер, и как ускорить код генерируемый по этому ДКА. В итоге он добился очень значительных успехов. В принципе, одно это уже на дисер тянет.
В общем, между научной работой и реально пригодным для использования продуктом стоит пропасть. Талкнуть общую идею не сложно. А вот творчиски воплотить ее в жизнь — это задачка не беручка.
И как не странно основная проблема тут — это сложность. Заслуга Вольфхаунда в основном состоит в том, что он сумел сохранить эту сложность в разумных пределах.
Выделение отдельных стадий и есть способ держать сложность в разумных пределах. Ведь сложность имеет привычку перемножаться. Засунь оптимизацию в парсер и кирдык. А кроме оптимизации есть еще куча стадий обработки.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Что вас останавливает от изучения нового языка?
Здравствуйте, Ziaw, Вы писали:
Z>Это один из немногих постов в дискуссии в котором не обсасывается в тысячный раз то, что я уже читал тут. Это не бред, а, вероятно, ошибочная теория, но практически все остальные посты треда не несут конструктива вообще.
Они еще и офтоп.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Что вас останавливает от изучения нового языка?
Здравствуйте, alexeiz, Вы писали:
A>И поверь мне, макросы никто писать не хочет. Использовать готовые — пожалуйста. На это и нужно давить. Создавать библиотеку макросов общего назначения для облегчения написания кода, который обычно доставляет сложности (например в C#). Без такой библиотеки Немерле — не более чем еще один функциональный язык со странным синтаксисом.
Дык я согласен. Только макросы должны писать те кто ими пользуется. Тогда они хорошими будут.
И таких макросов не мало. PegGrammar, ComputationExpressions, втоматизация паттернов...
A>PS: зашёл на сайт Boo недавно. Захотелось что-нибудь на нём написать. С чего бы это?
Не знаю, но в любом случае хорошо. Попиши, потом расскажешь.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Что вас останавливает от изучения нового языка?
Здравствуйте, alexeiz, Вы писали:
VD>>Прямо в стандартной библиотеке. Вот здесь есть описание.
A>Это скорее статья на тему "смотрите какие в принципе есть возможности". Но никак не готовая к использованию библиотека.
Там же примеры даны
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Что вас останавливает от изучения нового языка?
Здравствуйте, Ziaw, Вы писали:
VD>>На самом деле делать АлгТД в виде единого блока данных (вэлью-типа если по дотнетному) можно даже если АлгТД рекурсивный. МЛ именно так и поступает, если я не ошибаюсь.
Z>А поле типа самого себя становится ссылкой?
В МЛ сам вариант помещается в кучу. В дотнете это тоже возможно. Любой вэлью-тип можно забоксисть и получить ссылку. В С++ это сделать можно. Но вот при этом уже совсем не ясно в чем цимис от использования вэлью-типа .
Z>Оффтоп: я бы вообще запретил мутабельность в вариантах (пока писал, понял, что сам ее ни разу не юзал, даже засомневался, есть ли она на самом деле).
Ну, в общем — да. Польза не часто от этого появляется. Но в жизни разные случаи бывают.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Что вас останавливает от изучения нового языка?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, gandjustas, Вы писали:
VD>>>На уровне не на уровне, то оная присутствует. G>>Кроме синтаксиса языка есть еще семантика, а она там не описана.
VD>Семантику можно узнать из многочисленных туториалов и статей. Кроме того она в массе свой очень близка к Шарпу. Те кто пробовал язык на практике ни разу не жаловались на трудности. Если что можно всегда спросит на форуме. Вот только спрашивают очень редко, так как проблем особо не возникает.
То есть единого источника к которому можно обратиться за справкой таки нет.
G>>>>2)Когда появится Nemerle Team Blog или что-то в этом роде, где будут свежие новости, примеры, анонсы итп? VD>>>Вместо него http://www.rsdn.ru/forum/nemerle/ G>>Форум и блог — совершенно разные вещи. VD>Это ты себе сам эту мысль навязал. Меж тем разницы нет никакой. Цель — информирование о новых возможностях и практике применения — достигается.
Ну конечно, отличие только в том что мусора в форуме на несколько порядков больше и найти информацию там труднее.
G>>>>4)Когда появится хотябы одна книга или учебный курс по Nemerle?
VD>>>Они появились лет пять назад: VD>>>http://nemerle.org/wiki/Tutorials VD>>>http://nemerle.org/wiki/Courses
G>>Второе стоило бы включить в "спецификацию", первое вообще говоря на обучающий материал не тянет никак — несколько ссылок на банальные статьи и на svn, который уже неактуален.
VD>Это ты тоже придумал. На практике по этим курсам учат студентов в польском институте.
Я так понимаю что обучали те, кто писал nemerle. Ксттаи не поленись и попробуй прощелкать все ссылки, половина ведут вникуда.
VD>>>Плюс: http://www.rsdn.ru/summary/3766.xml G>>Сравни с http://msdn.microsoft.com/en-us/fsharp/cc835246 VD>А что мне сравнивать то? У МС бабла немеренно. С ними тягаться трудно. И тем не менее факт остается фактом. Человек с сишным опытом осваиваем Немерл за время от 3-х дней до двух месяцев, а F# обычно не осваивает вовсе (бросает). Потому как сколько бы материалов не было, а для его изучения нужен перелом мозга заработать.
Отличная позиция чтобы не заниматься популяризацией.
G>>>>5)Когда будет справка по библиотеке nemerle и макросов на уровне MSDN?
VD>>>Библиотеки как таковой нет. Nemerle использует .Net Framework. Ну, а описание той мелочи что есть в Nemerle.dll можно наблюдать в ObjectBrouser в VS. Как раз очень близко к МСДН-овскому описанию. В прочем, знание либы не требуется для испльзования языка. G>>Самая важная часть в MSDN это секция remarks, её в object browser нету.
VD>То что есть в док-коментах этого за глаза достаточно для понимания сути функции. Библоиотека немерла очень мала, проста и понятна. Там нет каких-то многоэтажных наворотов. Обычно это функции суть которых понятна из названия и сигнатуры.
Ты что-то сильно путаешь. Ты считаешь что библиотека компилятора проста и понятна?
G>>>>Кстати если вы изобретаете свои фреймворки "независимые от asp.net\ado.net\что_то_там_net, то все указанное выше касается и этих фреймворков тоже.
VD>>>Ну, тут до релиза пока далеко. А так, конечно обязательно будет описание. VD>>>Вот пример описания
к одному из мощнейших макросов созданных на немерле на сегодня — PegGrammar. G>>Это я видел. Снова та же проблема, есть описание "что", но абсолютно не написано "зачем" и "как мне это поможет".
VD>Зачем как раз написано. Просто у нас видимо разное понимание этого слова. Для меня "зачем" описывается назначением продукта. Раз сказано парсер компьютерных языков, то их список я и сам могу представить. VD>А вот что ты вкладываешь в "зачем" я понять не могу. VD>Если тебе нужен пример применения, то опять же гугль в твоем распоряжении (например). Да и из статьи ссылки есть.
Твое понимание не имеет никакого значения. Подавляющее большинство программистов не занимаются созданием парсеров. Для них эта фича не нужна.
VD>ЗЫ VD>В общем, похоже на то, что ты ищешь причины обосновывающие почему тебе надо не изучать что-то новое. А это исходно не конструктивная позиция. Типа "заинтересуйте меня, тогда может я проявлю милость и погляжу одним глазом". Те кому интересно осваивают язык без проблем. Материалов более чем достаточно. Ну, а те кому не надо (по причинам которые они не озвучивают) ищут псевдо-причины чтобы это не делать.
Я фигею. То что писал выше говорю уже два года. Адекватного материала для обучения как не было, так и нет. Твоя позиция типа "всего хватает, вы сам уроды" не то что неконструктивная, а в корне деструктивная.
Откройте наконец блог, твиттер. В идеале сделайте сам блог на мегафреймворке. Разместите большей статей с примерами решения более приземленных задач, чем создание парсеров. Например есть computational workflows, слабайте хотя бы такой пример.
Re[3]: Что вас останавливает от изучения нового языка?
Здравствуйте, VladD2, Вы писали:
C>>а не все ли равно на чем писать? VD>Нет конечно. Иначе все бы писали на ассемблерах или хотя бы на Фортране 77.
я не это имел ввиду.
C>>а если так, то зачем учить очередной язык пока он не понадобился? VD>А как ты поймешь что что-то тебе нужно, если ты даже не знаешь что там внутри и что это тебе может дать?
А для того чтобы понять что там внутри не надо язык изучать, обычно достаточно прочитать какой нибуть обзор или полистать домашнюю страничку. C>>понадобится, потрачу неделю чтобы выучить синтаксис и примерно прикинуть как семантика ложится на известные мне концепции и всех делов. VD>Попробуй заменить в своей логике язык на телевизор. Скажем ты пользуешься радио. VD>Тебе говорят, что есть же телевизор. И что он как радио, то только лучше. А ты в ответ — "понадобится, потрачу неделю чтобы понять что это такое".
нет, такой ответ последует если мне предложат радио новой модели которое принимает сигнал улавливая нейтрино.
а на телевизор я согласен.
Re[4]: Что вас останавливает от изучения нового языка?
Здравствуйте, alpha21264, Вы писали:
A>Я обьясню это через придуманную мною алегорию. A>Можно купить машину с очень мощным мотором. A>Но стоять в пробке она будет примерно с той же скоростью как Запорожец. A>Потому что движение лимитурует другой фактор.
Поэтому ты предпочитаешь запорожец? Мне нравится твоя аллегория. Она какбе намекает, что помимо скорости езды есть ещё какой-то важный фактор, так что даже в таком случае запорожец — не вариант.
Re[17]: Что вас останавливает от изучения нового языка?
Здравствуйте, dimgel, Вы писали:
D>Здравствуйте, FR, Вы писали:
WH>>>Тесты гонять? FR>>Да. WH>>>А где гарантия, что покрытие 100%? FR>>100% гарантии теперь даже в банках не дают.
D>Демагогия detected. Система типов именно что даёт математически доказанные гарантии.
Разве что в системах с зависимыми типами. Назовешь пяток таких популярных промышленных языков?
Re[21]: Что вас останавливает от изучения нового языка?
Здравствуйте, dimgel, Вы писали:
D>Это демагогия, а не аргументы. Практика у всех своя. Практика дельфистов говорит, что дельфи — самый лучший из языков. Практика PHP-ников с восемью классами среднего образования говорит, что на PHP можно написать всё что угодно. Аргументы-то где?
Дык если и правда можно, то PHP хороший язык. Но на практике почему-то не пишут.
Re[18]: Что вас останавливает от изучения нового языка?
Здравствуйте, Undying, Вы писали:
U>Пример со string.Join показывал, что очень часто проблема мусорности кода может быть решена средствами имеющегося языка. Но в силу привычки думать заученными конструкциями программисты просто не замечают, что данный код является мусорным, и соответственно не ищут способа избавиться от этого мусорного кода.
Здравствуйте, FR, Вы писали:
FR>Здравствуйте, alpha21264, Вы писали:
DR>>>В языках с поддержкой метапрограммирования, вроде Немерле, макрос оперирует не текстом, а языковыми конструкциями.
A>>Это как?
FR>Оперирует уже распарсеным текстом обычно в виде AST
FR>Есть даже препроцессоры, но не текстовые как в Си/С++ а синтаксические например http://en.wikipedia.org/wiki/Camlp4 FR>которые также оперируют AST.
На первый взгляд штука могучая, но... Она только на один язык заточена?
Могу я эти макросы для произвольного (например русского) языка применить?
Течёт вода Кубань-реки куда велят большевики.
Re[5]: Что вас останавливает от изучения нового языка?
Здравствуйте, VoidEx, Вы писали:
VE>Здравствуйте, alpha21264, Вы писали:
A>>Я обьясню это через придуманную мною алегорию. A>>Можно купить машину с очень мощным мотором. A>>Но стоять в пробке она будет примерно с той же скоростью как Запорожец. A>>Потому что движение лимитурует другой фактор.
VE>Поэтому ты предпочитаешь запорожец? Мне нравится твоя аллегория. Она какбе намекает, что помимо скорости езды есть ещё какой-то важный фактор, так что даже в таком случае запорожец — не вариант.
Потому что если нет разницы, то зачем платить больше?
Как говорил мой великий и мудрый шеф (отмеченый орденами и медалями)
Был бы хороший алгоритм. А реализуем мы его хоть на хинди.
Понятно? Алгоритм важнее, чем язык.
Так было до того, как программисты превратились в обезьян.
Ну а сейчас имеем то, что имеем.
Течёт вода Кубань-реки куда велят большевики.
Re[29]: Что вас останавливает от изучения нового языка?
Здравствуйте, vdimas, Вы писали:
V>Причем предпоследнее — это скорее классификация имеющихся знаний, чем что-то новое. А последнее — тем более, довольно-таки прикладной репорт на основе имеющегося материала. В общем, что-то скорее нафталиновое, чем передовое.
1)Они даже этого не знают.
2)Теория типов в чистом виде на практике бесполезна. Я же тыкаю их носом в статьи 20хх годов. Где описаны практически работающие подходы.
V>Да и есть ML-языки, которые пытаются реализовать эти наработки. И что эти яыки из себя представляют мы прекрасно знаем: неудобство для общеприкладных задач и тормозной получаемый код, требующих дохрена памяти. Был бы этот сыр бесплатный, весь этот материал давно был бы в мейнстриме.
Ну то что ученые не осилили оптимизатор ни о чем не говорит.
Немерле вполне себе МЛ и проблем нет.
V>Ну и опять же. Про узость самой области исследований языков ты похоже не въезжаешь абсолютно.
Эти люди учат языкам!
Они должны быть в курсе дела.
V>Ну и по последнему писку моды тоже хватае тпроблем и они известны. Для зависимых типов — это ввод значений, требующий в общем случае техники суперкомпиляции (а не того подобия техники динамического приведения, что ты когда-то предлагал),
Чего?
V>а uniqueness типы имеют проблемы в многопоточном окружении.
А я то наивный думал, что они как раз решают проблемы с многопоточностью. http://lamp.epfl.ch/~phaller/uniquerefs/capabilities_for_uniqueness_TR.pdf
Ты вообще в курсе, о чем пишешь?
V>Дык, Немерле ведь от всего вышеупомянутого страшно далек, ты его сюда не приписывай.
Там макросы. И Лаптев о них не в курсе.
Совсем.
Ни разу.
Иначе бы не пропагандировал текстовый препроцессор как последний писк моды.
V>А что не так с С? Отличная абстракция ассемблера.
Кода в десятки раз больше чем нужно. А так никаких проблем.
V>Настоящий нейтив во-плоти, без встроенных фокусов (если сравнивать с Паскалем, например). Что получится в итоге известно фактически до бит, что и требуется для ПО, непосредственно общающегося с кодом. С этого языка "взлетают" все современные аппаратные платформы, и уже поверх него работают все эти джавы, дотнеты и прочие экзотичности. Поверх него — т.е. поверх кода, созданного компилятором С. Фактически весь современный нейтивный код написан на С/С++, от операционок, офиса и БД, до дотнета и игрушек.
Но должны взлетать вот с этого: Verve: типобезопасная ОС от MS Research
Там все известно еще лучше и что характерно все верифицировано.
V>Например, ты прямо сейчас способен обосновать, почему нерекурсивные алгебраические типы представлены ссылочными типами, хотя дотнет позволяет оперировать value-type? А ведь ML-языки умеют делать такие оптимизации уже черти сколько лет. Пяток подобных вопросов без убедительных ответов, и можно идти допиливать диссер, а лучше сам язык.
По тому что .НЕТ.
В немерле куча проблем из-за того что мелкософты сделали тупую ВМ.
Вот тебе ответ на все твои "вопросы".
V>Для императивных — Фортран/С/Паскаль.
А фортран то нахрена? Чтобы людям жизнь поломать?
V>Функциональный — Лисп,
Он слишком императивен чтобы преподавать на нем функциональщину.
Видел я как на нем люди пишут после императивных языков.
Императив императивом.
Тут нужно брать хаскель. Без вариантов. Ибо он вывернет руки но заставит писать функционально.
V>логический — Пролог.
Он очень грязный.
Лучше уж http://en.wikipedia.org/wiki/Mercury_%28programming_language%29
V>Отличные языки для изучения парадигм. Почему отличные? — а ничего лишнего, никаких понтов, шелухи и синтаксического сахара.
"Отличные они по тому", что ты других не знаешь.
WH>>Неординарные? Ты имеешь в виду лапшу? V>Define "лапшу"?
Ну те сишный препроцессор?
Лапша лапшой.
V>А вот и оно, спасибо. Типичный индусокод. Ни малейшего понятия о декомпозиции и тестопригодности. Развязаться через независимые ф-ии видно не судьба.
А зачем? Эта функция решает строго одну задачу. И только ее.
V>Насчет тестопригодности. Ты должен будешь на один метод завязать как кучу низкоуровневых независимых тестов по проверке каждого отдельного вычисления, так и комплексные тесты, проверяющие их комбинации. А это залёт, курсант.
У меня на этот метод вообще тестов нет.
И ошибок в нем ни разу не было.
Ибо простой как пробка.
V>В факте предпросмотра на один уровень вперед (тоже самое тут: Fsm(a)::Fsm(b)::rest)? Да еще через ж... динамическую типизацию в реализации Nemerle? Издеваешься или как?
Нет там никакой динамической типизации.
А то, что твориться в скомпилированном коде никого не волнует.
V>В общем, декомпозируй решение, и на любом языке это будет смотреться очень похоже. Ни в какие 20 раз и близко разницы не будет.
Код в студию!
V>Если энергичные, то в топку, бо многопроходность, а оно вполне решаемо за один проход.
Типа меня волнует производительность этого куска.
Тем более что при желании можно сделать оптимизатор, который эти проблемы устранит.
V>Тоже самое с Sequence(rules). Заметь, на плюсах тут вполне можно было обобщить на шаблонах оба случая. Но на немерле или C# — это надо было бы городить огород из паттерна "Стратегия" для целей обобщения, и овчинка выделки не стоила бы.
1)Код в студию.
2)Это сейчас код похож. Раньше он был разным. И потом он тоже станет разным.
Так что обобщение тут, мягко говоря, противопоказано.
V>Далее. Есть предложение для обоих случаев насчет возможности построения оптимизированного варианта сразу, по мере парсинга правил, а не "потом", за вот этот проход оптимизации.
Ой лол. Там такая лапша получится что
Причем на любом языке.
А если вспомнить про инлайн
Я теперь понимаю твоих коллег. И почему они говорят, что у тебя говнокод.
V>Это как разница в подходах построения ДКА — сначала можно строить по регулярным выражениям НКА, приводить его к ДКА, а затем минимизировать, но ведь можно строить сразу минимизированный ДКА — это порой на порядок быстрее, т.к. на каждом шаге обработке подвергается множество меньшей мощности.
Ссылку на работу в студию.
Ни один из известных мне алгоритмов минимальный ДКА в общем случае не строит.
V>В общем, подкинь что-нить посущественнее, что ли...
Ты с этим хотя бы разберись.
V>Кое в чем буков будет больше, кое в чем меньше. Разницы в разы не будет.
Будет.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[18]: Что вас останавливает от изучения нового языка?
Здравствуйте, VoidEx, Вы писали:
VE>Разве что в системах с зависимыми типами. Назовешь пяток таких популярных промышленных языков?
Любая система типов дает математические гарантии.
Вопрос лишь в том, что именно она гарантирует.
Обычные типы дают довольно мало гарантий. Зависимые существенно больше.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[9]: Что вас останавливает от изучения нового языка?
Здравствуйте, VladD2, Вы писали:
VD>Я тебе сейчас переведу этот код. Вот как это будет выглядеть на доступных для тебя языках:
Плохо переводишь. Неаккуратно. Можно как-нибудь так:
match (r, types(typeof(Not), typeof(Not)), rule => ... ));
С учётом написания not = typeof(Not) и другого boilerplate в 2-3 строки код станет не сильно хуже изначальной лапши.
Частные случаи, которые под этот вариант не подпадут, уж никак 20-кратного отставания не принесут.
Re[6]: Что вас останавливает от изучения нового языка?
Здравствуйте, alpha21264, Вы писали:
A>Здравствуйте, VoidEx, Вы писали:
VE>>Здравствуйте, alpha21264, Вы писали:
A>>>Я обьясню это через придуманную мною алегорию. A>>>Можно купить машину с очень мощным мотором. A>>>Но стоять в пробке она будет примерно с той же скоростью как Запорожец. A>>>Потому что движение лимитурует другой фактор.
VE>>Поэтому ты предпочитаешь запорожец? Мне нравится твоя аллегория. Она какбе намекает, что помимо скорости езды есть ещё какой-то важный фактор, так что даже в таком случае запорожец — не вариант.
A>Потому что если нет разницы, то зачем платить больше? A>Как говорил мой великий и мудрый шеф (отмеченый орденами и медалями) A>Был бы хороший алгоритм. А реализуем мы его хоть на хинди.
Ты утверждаешь, что нет разницы между запорожцем и Бугурти?
Re[19]: Что вас останавливает от изучения нового языка?
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, VoidEx, Вы писали:
VE>>Разве что в системах с зависимыми типами. Назовешь пяток таких популярных промышленных языков? WH>Любая система типов дает математические гарантии. WH>Вопрос лишь в том, что именно она гарантирует. WH>Обычные типы дают довольно мало гарантий. Зависимые существенно больше.
Именно об этом и речь. И я отвечал на вполне конкретный комментарий о покрытии тестами.
Гарантия "на int и string функция вернет Boo" не сильно круче, чем "на 2 аргумента верну 1", а даже примитивные проверки NotNull в большинстве статически-типизируемых прикручиваются теми же тестами и ассертами.
В этом контексте
D>Демагогия detected. Система типов именно что даёт математически доказанные гарантии.