Автор Тема: Сопоставление с образцом  (Прочитано 42856 раз)

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Сопоставление с образцом
« Ответ #75 : Сентябрь 25, 2012, 04:38:21 am »
Уже горел народ на том, что брал из А2 "глючащие" алгоритмы. Что-то было то ли сетевое, то ли PNG, то ли сжатие... Глючило как раз из такого многоэтажного ужаса с выходами из середины. Когда перепроектировали цикл как положено, всё стало нормально.
Во-первых, все мы люди, ми склонны к ошибкам, во-вторых, далеко не все в А2 написано мэтрами, много чего и студентами, в третьих, если мы пишем для диссертации, для книги, ведем исследовтельскую работу, то стиль будет один, а если все это реализуем в реальной работе, то совсем другой, и здесь от RETURN'ов из середины глупо отказываться, если это увеличит эффективность алгоритма, в четвертых, относительно данной конкретной процедуры, то там же написано - "простая", и предназначена она для конкретного применения, которое полностью покрывает, естественно, она не обязана учитывать монструозные конструкции типа "***?*?***?*?***", потому что это, на самом деле, неправильно составленный образец, зачем там 3 звезды подряд?
С другой стороны, встречаются действительно глупые ошибки, и если бы А2, как и вообще Обероны, были бы чуточку популярнее, в том смысле, что их бы кто-нибудь в реальной работе использовал,  то пользователи непременно бы обнаружили ошибки и заставили разработчиков поработать над их устранением. Сейчас же это не более чем концепт, а учитывая, что она в обучении используется (или использовалась), то может и ошибки там сознательно висят, а студиозусы на спецкурсах их находят и исправляют.  У этой процедуры есть неоспоримое преимущество - она очень маленькая, простая и понятная. Для студентов самое то, а сколько возможностей для творчества...

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Сопоставление с образцом
« Ответ #76 : Сентябрь 25, 2012, 05:41:13 am »
Щас набежит info21 и назовет разработчиков A2 мейнстримщиками, а Active Oberon неправильным обероном.

Ведь у правильных оберонщиков все работает правильно "сразу и без отладки"  ;D

Уже горел народ на том, что брал из А2 "глючащие" алгоритмы. Что-то было то ли сетевое, то ли PNG, то ли сжатие... Глючило как раз из такого многоэтажного ужаса с выходами из середины. Когда перепроектировали цикл как положено, всё стало нормально.

То есть программирование на Обероне отнюдь не гарантирует качества софта.
Что и требовалось доказать...  :P
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Сопоставление с образцом
« Ответ #77 : Сентябрь 25, 2012, 05:43:42 am »
2. Разработчик и постановщик задачи одно лицо. Когда тебе ставит задачу другой человек (обычно не знающий программирования), то сложность возрастает на порядки.
3. Практически отсутствует сопротивление среды (требования не меняются каждый день; нет нужды реагировать на вопли пользователей)

т.е. Оберон не считается, т.к. это тепличное растение.
Это не имеет отношения к Оберону, это особенности прикладной автоматизации... Хорошо известные.
Если автоматизатор - крупная компания, то она часто выделяет подразделение, которое занимается программированием "общего знаменателя" для своих проектов (библиотек, инструментов). И у этого подразделения будут тоже "тепличные условия".

А про циклы - какие там нах супер-формальные методы, коллега? Написать цикл аккуратно без выхода из середины - это супер-сложно? Легче наклепать и иметь 20% брака?

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Сопоставление с образцом
« Ответ #78 : Сентябрь 25, 2012, 05:50:21 am »
У этой процедуры есть неоспоримое преимущество - она очень маленькая, простая и понятная. Для студентов самое то, а сколько возможностей для творчества...

Процедуру с 4 EXIT-ами из середины Вы называете понятной? Да я её даже читать не буду, сразу выкину. :) Я не собираюсь изображать из себя процессор и гонять в уме построчно все варианты. Если я не могу проверить логически, не-императивно, то фтопку..

Заходил к нам когда-то на форум компиляторщик из XDS - и в грудь ся ударял, что у них там такие циклы, которые без выхода из середины ну никак.
И вот шо из этого вышло:
http://oberoncore.ru/wiki/%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%BC%D1%8B%D1%88%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D1%86%D0%B8%D0%BA%D0%BB%D0%B0

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Сопоставление с образцом
« Ответ #79 : Сентябрь 25, 2012, 05:58:29 am »
Мне вот любопытно. А существует ли система, которая написана грамотно? Где посмотреть на это чудо?

Ну т.е. циклы "построенные под доказательство" и все такое...

Не знаю, насколько грамотно, но таки с доказательствами -- это микроядро seL4 (7500 строк кода с доказательством в 200,000 строк),  верифицированный компилятор подмножества Си Compcert.
Наверняка ещё что-то есть...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

DIzer

  • Гость
Re: Сопоставление с образцом
« Ответ #80 : Сентябрь 25, 2012, 06:52:12 am »


То есть программирование на Обероне отнюдь не гарантирует качества софта.
Что и требовалось доказать...  :P
УУУУ провокатор, однако  :)

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Сопоставление с образцом
« Ответ #81 : Сентябрь 25, 2012, 09:10:50 am »
Процедуру с 4 EXIT-ами из середины Вы называете понятной? Да я её даже читать не буду, сразу выкину. :) Я не собираюсь изображать из себя процессор и гонять в уме построчно все варианты. Если я не могу проверить логически, не-императивно, то фтопку..
Самое забавное, что если посмотреть исходники А2, ЧЯ, я даже подозреваю, что и Виртовский Оберон, то там такого кода вагон и огромадная телега, вдвойне забано, что написано это Тру-Оберонщики, самими "отцами-создатели".
Заходил к нам когда-то на форум компиляторщик из XDS - и в грудь ся ударял, что у них там такие циклы, которые без выхода из середины ну никак.
И вот шо из этого вышло:
http://oberoncore.ru/wiki/%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%BC%D1%8B%D1%88%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D1%86%D0%B8%D0%BA%D0%BB%D0%B0
Да кто спорит, что нельзя, конечно можно, но вот нужно ли всегда? Потому что в итоге может получиться не менее монструозная конструкция. Видимо учитывая это и Тру-Оберонщики из альма-матер идут другим путем.

Berserker

  • Sr. Member
  • ****
  • Сообщений: 254
    • Просмотр профиля
Re: Сопоставление с образцом
« Ответ #82 : Сентябрь 25, 2012, 12:00:08 pm »
Можно. Достаточно структурировать мозги, то бишь дать установку. Через неделю старый код и фобии покажутся страшным сном. Я никаких проблем не испытываю на любых ЯП, с которыми приходится работать. А вот верифицировать, даже приблизительно, конструкции с прыжками - это насилие над разумом.

Касаемо ** - это корректный шаблон. Спецификация: "*" стоит вместо нуля или более символов.

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Сопоставление с образцом
« Ответ #83 : Сентябрь 25, 2012, 01:26:55 pm »
Можно. Достаточно структурировать мозги, то бишь дать установку. Через неделю старый код и фобии покажутся страшным сном. Я никаких проблем не испытываю на любых ЯП, с которыми приходится работать. А вот верифицировать, даже приблизительно, конструкции с прыжками - это насилие над разумом.
Если это ко мне, то это несколтко не ко мне ))) Я писал и на этом форуме, что не люблю GOTO, BREAK'и, EXIT'ы, RETURN'ы, и предпочитаю более структурированные подходы, но без монструозных десятиэтажных условий. Но их (return'ов, exit'ов...) наличие меня в ступор не вводит. Что касается процедуры А2, да и моей тоже, в которой еще больше ретурнов получилось, то там таки не прыжки, а выходы из процедуры по достижению условий с возвратом результата. Хотя для кого-то это одн и тоже, маразм и прочая и прочая. Спорить даже не буду, как только человек начинает писать что-то под микроконтроллеры или системы с ограниченными ресурсами, то наступает понимание, что не всё так просто и однозначно. Если, к примеру, посмотреть код Вирта, то становится очевидным, что его стиль программирования сформировался в условиях недостатка вычислительных ресурсов. Можено сказать, что такой код ужасен, малочитабелен и совершенно непонимаем без "словаря"-таблиц соответствий, но он учитывает определенные реалии, которые, естественно, далеки от "мейнстрима".
Касаемо ** - это корректный шаблон. Спецификация: "*" стоит вместо нуля или более символов.
Не знаю, но как по мне, так ** абсолютно бессмысленный шаблон

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Сопоставление с образцом
« Ответ #84 : Сентябрь 25, 2012, 03:20:04 pm »
Да кто спорит, что нельзя, конечно можно, но вот нужно ли всегда? Потому что в итоге может получиться не менее монструозная конструкция.
Из моих 12 лет в программировании 5 я писал, не заморачиваясь и не зная про "правильные циклы". (И про Оберон тоже).
for и break для поиска - да как делать нечего.
Потом попробовал стиль "правильных циклов". Это другой уровень алгоритмического "ощущения", вплоть до того, как ты "чувствуешь" алгоритм в голове. Так шо все эти рассуждения "нужно ли всегда", прикрывающие лень заставить себя изменить метод и попробовать... просто отговорки.

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Сопоставление с образцом
« Ответ #85 : Сентябрь 25, 2012, 03:24:25 pm »
Я писал и на этом форуме, что не люблю GOTO, BREAK'и, EXIT'ы, RETURN'ы, и предпочитаю более структурированные подходы, но без монструозных десятиэтажных условий.
Я не могу знать про Вас, но в большинстве случаев, когда человек утверждает "я тоже не люблю и предпочитаю структурное...", он пишет что-нибудь с булевскими признаками в условии, заменяя ими и присваиванием внутри цикла явный break...
"Правильные циклы" - это не когда избавились от break. А когда само принятие решения "продолжать или нет" полностью сконцентрировано в условии цикла (или условиях многоветочного цикла).

Может быть, это не о Вас, но об очень многих.

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Сопоставление с образцом
« Ответ #86 : Сентябрь 25, 2012, 03:25:00 pm »
Так шо все эти рассуждения "нужно ли всегда", прикрывающие лень заставить себя изменить метод и попробовать... просто отговорки.
Ясно, видимо в ETHZ низкая культура программирования

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Сопоставление с образцом
« Ответ #87 : Сентябрь 25, 2012, 03:37:04 pm »
"Правильные циклы" - это не когда избавились от break. А когда само принятие решения "продолжать или нет" полностью сконцентрировано в условии цикла (или условиях многоветочного цикла).
Так там выходы из процедуры по достижению результатов, а цикл там постольку-поскольку, как я понимаю, это то же что и у меня - избавление от рекурсии малой кровью, т.е. циклы к этим конкретным процедурам/алгоритмам имеет отношение постольку-поскольку. Если сразу писать с использованием цикла, то ясное дело, получился бы совершенно другой код. Хотя может и нет, учитывая что так написано очень многое в А2 и ЧЯ, сейчас сложно сказать что получилось бы и  у меня, как говорится вышло то, что вышло... кто смжет, пусть сделает лучше

Peter Almazov

  • Sr. Member
  • ****
  • Сообщений: 482
    • Просмотр профиля
Re: Сопоставление с образцом
« Ответ #88 : Сентябрь 25, 2012, 04:14:48 pm »
"Правильные циклы" - это не когда избавились от break. А когда само принятие решения "продолжать или нет" полностью сконцентрировано в условии цикла (или условиях многоветочного цикла).
Я повторюсь, это называется "культ карго":
Цитировать
В наиболее известных культах карго из кокосовых пальм и соломы строятся «точные копии» правильных циклов взлётно-посадочных полос, аэропортов и радиовышек. Члены культа строят их, веря в то, что эти постройки привлекут транспортные самолёты (которые считаются посланниками духов), заполненные грузом (карго). Верующие регулярно проводят строевые учения («муштру») и некое подобие военных маршей, используя ветки вместо винтовок и рисуя на теле ордена и надписи Дейкстра «USA».

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Сопоставление с образцом
« Ответ #89 : Сентябрь 25, 2012, 04:34:58 pm »
Потом попробовал стиль "правильных циклов". Это другой уровень алгоритмического "ощущения", вплоть до того, как ты "чувствуешь" алгоритм в голове. Так шо все эти рассуждения "нужно ли всегда", прикрывающие лень заставить себя изменить метод и попробовать... просто отговорки.

У меня было несколько подходов к "правильным" циклам и прочим ретурнам из середины. Растянулось по времени примерно на год. Каждый раз, когда я возвращался к такому "правильному" коду для чтения - он мне не нравился. Нет, я не пишу break для поиска и не использую continue (да и никогда не злоупотреблял, кроме как на заре в студенческие времена). Но "return по достижению" из середины (как в моем примере в этой теме), в том числе и из цикла - абсолютно нормально и читаемо. Так что у меня больше нет иллюзий. Я вполне допускаю, что в языке ОБЕРОН требование "абсолютной структурности" более жизнеспособно из-за отсутсвия семантики завершения (using/with/finally/деструкторы в других языках). Но только в языке ОБЕРОН. В том же Си эта семантика обеспечивается правильным использованием goto (вместо return из середины).

И еще небольшое замечание про эффективность и реальную жизнь. Я перевел код Peter Almazov (в котором он как раз борется за единственность return) на С++ на предмет посмотреть соптимизится ли хвостовая рекурсия. Оптимизится. Но только при отказе от искусственной переменной возврата и использовании "return из середины". Это конечно ничего не доказывает, но... оно так.