Синтаксический оверхед
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 09.06.05 09:33
Оценка: 9 (3) +3 -58 :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))
1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.
2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо (чтобы читающему понятно стало где что написано).

Давайте посчитаем количественно этот перерасход?
Хочется понять на сколько он "минимален", так сказать.




  • Цикл с проверкой условия в начале итерации
    a — условие выполнения итерации
    x — выполняемое действие
    Си-образный синтаксис:
    while(a)
    {
         x();
    }

    Реально необходимый и достаточный синтаксис:
    WHILE a DO x END

    синтаксический оверхед = 10/5 = 2.00
    перерасход строчек кода = 4/1 = 4.00


  • Цикл с проверкой условия в середине итерации
    a — условие завершения
    x, y, z — выполняемые действия
    Си-образный синтаксис:
    while(true)
    {
         x();
         if(a)
         {
              y();
              break;
         }
         z();
    }

    Реально необходимый и достаточный синтаксис:
    LOOP 
      x;
      IF a THEN y; EXIT END;
      z
    END

    синтаксический оверхед = 26/13 = 2.00
    перерасход строчек кода = 10/5 = 2.00


  • Цикл с проверкой условия в конце итерации
    a — условие продолжения
    b — условие завершения
    x — выполняемое действие
    Си-образный синтаксис:
    do
    {
         x();
    }
    while(a);

    Реально необходимый и достаточный синтаксис:
    REPEAT x UNTIL b

    синтаксический оверхед = 12/4 = 3.00
    перерасход строчек кода = 5/1 = 5.00

  • Инструкция выполнения по условию
    a — условие
    x — выполняемое действие
    Си-образный синтаксис:
    if(a)
    {
         x();
    }

    Реально необходимый и достаточный синтаксис:
    IF a THEN x END

    синтаксический оверхед = 10/5 = 2.00
    перерасход строчек кода = 4/1 = 4.00

  • Инструкция выполнения по условию с альтернативой
    a — условие
    x, y — выполняемые действия
    Си-образный синтаксис:
    if(a)
    {
         x();
    }
    else
    {
         y();
    }

    Реально необходимый и достаточный синтаксис:
    IF a THEN x ELSE y END

    синтаксический оверхед = 17/7 = 2.43
    перерасход строчек кода = 8/1 = 8.00

  • Сложная инструкция выполнения по условию
    a, b — условия
    x, y, z — выполняемые действия
    Си-образный синтаксис:
    if(a)
    {
         x();
    }
    else
    {
         if(b)
         {
              y();
         }
         else
         {
              z();
         }
    }

    Реально необходимый и достаточный синтаксис:
    IF a THEN x ELSIF b THEN y ELSE z END

    синтаксический оверхед = 30/11 = 2.73
    перерасход строчек кода = 15/1 = 15.0


  • Инструкция выбора варианта выполнения
    n, a, b — параметры для определения варианта
    x, y, z — выполняемые действия
    Си-образный синтаксис:
    switch(n)
    {
         case a:
              x();
              break;
         case b:
              y();
              break;
         default:
              z();
    }

    Реально необходимый и достаточный синтаксис:
    CASE n OF a: x | b: y ELSE z END

    синтаксический оверхед = 30/13 = 2.31
    перерасход строчек кода = 11/1 = 11.0

  • Усредненные результаты

    Просто усреднённый синтаксический оверхед составляет:
    (2.00 + 2.00 + 3.00 + 2.00 + 2.43 + 2.73 + 2.31) / 7 = 2.35

    Просто усреднённый перерасход строчек кода составляет:
    (4.00 + 2.00 + 5.00 + 4.00 + 8.00 + 15.0 + 11.0) / 7 = 7.00

  • Резюме

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




    09.06.05 15:53: Перенесено из 'Философия программирования'
    08.07.05 14:39: Перенесено модератором из 'Коллеги, улыбнитесь' — Хитрик Денис
    08.07.05 15:12: Перенесено модератором из 'Коллеги, улыбнитесь' — Хитрик Денис
  • Re: Синтаксический оверхед
    От: prVovik Россия  
    Дата: 09.06.05 15:56
    Оценка: 21 (7) +1 :))) :))) :))) :))) :))) :))) :))) :)))
    Здравствуйте, Сергей Губанов, Вы писали:

    А давайте посчитаем оверхед языка в плане его названия!!!!

    Итак, расчитав метрики языков, у меня получился следующий результат:
    -----------------
    Язык      Метрика
    -----------------
    Оберон       6
    -----------------
    С            1
    -----------------


    Итого получаем, что оверхед "оберона" по названию в сравнении с "С" составляет 600% !!!!

    Спрашивается, и как долго это название еще будет существовать?
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[5]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 20.06.05 15:25
    Оценка: 16 (6) +1 :))) :))) :))) :))) :))) :)
    M>>Даешь конкурента Win vs Linux!!

    P>А чего? Если слить весь флейм на эту тему в одну большую ветку, то конкурента, в общем, уже получили. Пока, правда, только в масштабах RSDN, но это поправимо.


    Оооо! Та ведь это ж... *Мечтательно закатывает глаза*

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

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

    Лучшие умы планеты бьются над подсчетами методами Губанова
    Автор: Сергей Губанов
    Дата: 09.06.05
    и Димандта
    Автор: Mamut
    Дата: 15.06.05
    (ака метод Мамута ).

    Microsoft выкидывает миллиарды долларов на исследования читаемости и эффективности языков программирования. Полученный результат ставит в ступор все ученое сообщество, оказывается 2+2=5
    Автор: Cyberax
    Дата: 16.06.05
    (предсказанное еще недрогнувшей рукой Кодта
    Автор: Кодт
    Дата: 16.06.05
    ).

    Нобелевки летят направо, головы — налево. Армия отказывающихся разбивать яйца с краев
    Автор: bopka
    Дата: 15.06.05
    штурмуют штаб-квартиру ООН, которую (по непроверенным сведениям) захватили злобные буратины
    Автор: prVovik
    Дата: 18.06.05


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

    Ядерный Армагеддон. Все умерли



    dmitriid.comGitHubLinkedIn
    Re: Синтаксический оверхед
    От: Кирпа В.А. Украина  
    Дата: 02.09.05 11:32
    Оценка: 3 (1) :))) :))) :))) :))) :))) :))) :)))
    Здравствуйте, Сергей Губанов, Вы писали:

    Предложите разработчикам компиляторов С++ где то на 4-й уровень ворнингов
    вынести предупреждения о синтаксическом оверхеде
    Например

    if (a)
    {
      x();
    }


    бла-бла-бла.cpp (line xxxx) warning СГ17894: syntax overhead, maybe
    if(a)x();
    !0xDEAD
    Re: Синтаксический оверхед
    От: Анатолий Широков СССР  
    Дата: 09.06.05 14:38
    Оценка: 9 (5) +13 :)))
    Вы счастливый человек — у Вас хватает времени на подобную ерунду.
    Re[3]: Синтаксический оверхед
    От: Слава Шевцов Россия http://www.rentaguru.ru/
    Дата: 10.06.05 00:06
    Оценка: 15 (7) +3 :))) :))) :)))
    Здравствуйте, Сергей Губанов, Вы писали:

    К>>Вопрос с ходу — ты всегда будешь циклы и комлексные условия с операциями в 1 строчку писать? И что помешало на сишном синтаксисе сделать также?


    СГ>Я соблюдал общепринятые стандарты кодирования. Хочешь верь, а хочешь нет, но инструкции навроде:


    Я там ниже дописал общепринятые нормы кодирования на С

    СГ>WHILE a DO x END


    while(a) x();

    СГ>REPEAT x UNTIL b


    do x() while(b);

    СГ>IF a THEN x ELSE y END


    a ? x() : y();

    СГ>CASE n OF a: x | b: y ELSE z END


    a ? x() : (b ? y() : z());

    СГ>ну натурально принято писать в одну строчку.


    Ну натурально ваш код длиннее. Этож надо так неэкономно относиться к месту на мониторе
    ----------------------------------------------------------------------------------------------
    Rentaguru
    Re: Синтаксический оверхед
    От: Дарней Россия  
    Дата: 09.06.05 09:48
    Оценка: 7 (3) +4 :))) :))) :))) :)
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Автора в очередной раз подвело незнание предмета (С)
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re: Синтаксический оверхед
    От: GlebZ Россия  
    Дата: 09.06.05 11:27
    Оценка: 2 (1) +2 :))) :))) :))) :))) :))
    Здравствуйте, Сергей Губанов, Вы писали:

    1. Спасибо Сергей. Объявляю от все общественности благодарность. Культуру в массу. Я только сейчас начал ощущать как надо писать на С++. Незнал, что обязательные фигурные скобки есть промышленный стандарт. Но теперь я прозрел. Теперь я просвещенный.
    2. Если мы не будем говорить о "промышленных" стандартах, то С++ программа вполне может записываться в одну строку. Как собственно и многие языки. Только пользы от этого мало. По сети ходят большое количество программ на С++ из раздела угадай что она делает. И во многом их путанность основана именно на этом свойстве языка.
    3. Джентельмены! Мы обсуждаем неправильные языки. Хлопая по клавишам, мы выполняем лишнюю работу. Истинный язык не С++ и даже не великий Оберон. Представляю наиболее гениальный язык. HQ9+. Например опишем в ней программу Hello World.
    H

    Видите насколько это изысканный язык. Как игра мысли! Какая великолепная структурированность. И ведь это не буква H (в переводе Х), это целая программа. Далее дам краткое описание языка:

    The H command prints out "Hello, world!"
    The Q command prints out a copy of the source code of the program (i.e., it's a quine).
    The 9 command prints out the lyrics for 99 Bottles of Beer on the Wall.
    The + command increments the accumulator.

    http://en.wikipedia.org/wiki/HQ9_Plus
    И по объему самого компилятора, он значительно меньше не только С++ с его либами, С# с его Framework. Он меньше чем даже Oberon.

    HQ9+ interpreters are extremely simple to write, so there have been many written. For example, this HQ9+ interpreter was written (in Python) in around five minutes and is only 18 lines long. And, this HQ9+ compiler written in C compiles HQ9+ programs to C code and is only about 40 lines long.


    Все на HQ9+!!! Серебрянная пуля есть!!!

    С уважением, Gleb.
    ЗЫ:
    ... << RSDN@Home 1.1.4 beta 4 rev. 358>>
    Re: Синтаксический оверхед
    От: Sergey Россия  
    Дата: 09.06.05 10:18
    Оценка: 7 (3) +5 :))) :))) :))
    Hello, Сергей!
    You wrote on Thu, 09 Jun 2005 09:33:38 GMT:

    СГ>
  • Цикл с проверкой условия в начале итерации
    СГ> a — условие выполнения итерации
    СГ> x — выполняемое действие
    СГ> Си-образный синтаксис:
    СГ>
     СГ> while(a)
     СГ> {
     СГ>      x();
     СГ> }
     СГ>


    Никто так не пишет Пишут
    while(a) x();

    СГ> Реально необходимый и достаточный синтаксис:

    СГ>
     СГ> WHILE a DO x END
     СГ>

    СГ> синтаксический оверхед = 10/5 = 2.00
    СГ> перерасход строчек кода = 4/1 = 4.00

    Ты раз в сишном варианте скобки не по делу ставишь, в паскалевском пиши
    BEGIN/END И подсчитай оверхед в буквах

    СГ>
  • Цикл с проверкой условия в середине итерации
    СГ> a — условие завершения
    СГ> x, y, z — выполняемые действия
    СГ> Си-образный синтаксис:
    СГ>
     СГ> while(true)
     СГ> {
     СГ>      x();
     СГ>      if(a)
     СГ>      {
     СГ>           y();
     СГ>           break;
     СГ>      }
     СГ>      z();
     СГ> }
     СГ>


    Если yt нравится многословность, будем сокращать. Только чур не обижацца на
    читаемость
    for (; x(), a; z());
    y();


    СГ> Реально необходимый и достаточный синтаксис:

    СГ>
     СГ> LOOP
     СГ>   x;
     СГ>   IF a THEN y; EXIT END;
     СГ>   z
     СГ> END
     СГ>

    СГ> синтаксический оверхед = 26/13 = 2.00
    СГ> перерасход строчек кода = 10/5 = 2.00

    Буквы посчитай Их человек пишет, а лексемы компутер перемалывает, он
    железный, не развалицца

    СГ>
  • Цикл с проверкой условия в конце итерации
    СГ> a — условие продолжения
    СГ> b — условие завершения
    СГ> x — выполняемое действие
    СГ> Си-образный синтаксис:
    СГ>
     СГ> do
     СГ> {
     СГ>      x();
     СГ> }
     СГ> while(a);
     СГ>

    СГ> Реально необходимый и достаточный синтаксис:
    СГ>
     СГ> REPEAT x UNTIL b
     СГ>


    Ну это даже не смешно

    СГ>
  • Инструкция выполнения по условию
    СГ> a — условие
    СГ> x — выполняемое действие
    СГ> Си-образный синтаксис:
    СГ>
     СГ> if(a)
     СГ> {
     СГ>      x();
     СГ> }
     СГ>

    СГ> Реально необходимый и достаточный синтаксис:
    СГ>
     СГ> IF a THEN x END
     СГ>

    СГ> синтаксический оверхед = 10/5 = 2.00
    СГ> перерасход строчек кода = 4/1 = 4.00

    if (a) x();



    СГ>
  • Инструкция выбора варианта выполнения
    СГ> n, a, b — параметры для определения варианта
    СГ> x, y, z — выполняемые действия
    СГ> Си-образный синтаксис:
    СГ>
     СГ> switch(n)
     СГ> {
     СГ>      case a:
     СГ>           x();
     СГ>           break;
     СГ>      case b:
     СГ>           y();
     СГ>           break;
     СГ>      default:
     СГ>           z();
     СГ> }
     СГ>


    Вот свичи в сях действительно дурацкие.

    СГ>
  • Усредненные результаты

    СГ> Просто усреднённый синтаксический оверхед составляет:

    СГ> (2.00 + 2.00 + 3.00 + 2.00 + 2.43 + 2.73 + 2.31) / 7 = 2.35

    СГ> Просто усреднённый перерасход строчек кода составляет:

    СГ> (4.00 + 2.00 + 5.00 + 4.00 + 8.00 + 15.0 + 11.0) / 7 = 7.00

    СГ>
  • Резюме

    СГ> Программа записанная в Си-образном синтаксисе содержит в разы, а не на

    СГ> проценты больше лексем и строчек кода чем это реально необходимо.
    СГ> Спрашивается, и как долго этот синтаксис еще будет существовать?

    Резюме: АМ/КГ. Перерасход лексем аффтаром — 10000%. Мог бы просто сказать —
    ну не нравиццо мне си, си маст дай!

    With best regards, Sergey.
    Posted via RSDN NNTP Server 1.9
  • Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
    Re[3]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 09.06.05 13:43
    Оценка: 5 (3) :))) :))) :))) :)))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Кроткий:

    СГ>
    СГ>IF a THEN x ELSE y END
    СГ>

    СГ>Длинный:
    СГ>
    СГ>IF aabababbabababababbaba THEN 
    СГ>  xqwghcqhbwehqhgwbehjbdcqkjwbefkycgvrqe(wkjehfjke, kwfbwer, kwefb)
    СГ>ELSE
    СГ>  yjwejhdbwjebdhwwhjebhbweb(wefbuiweicfuiuwbnceu, wibecibweibciwwe) 
    СГ>END
    СГ>


    Итого: overhead по строчкам оберона над обероном — 5:1, т.е. в пять раз. Жуткий ацтой этот оберон, с таким overhead'ом.
    Ку...
    Re[14]: Читать всем - статистикаи читаемость
    От: Mamut Швеция http://dmitriid.com
    Дата: 15.06.05 16:21
    Оценка: 30 (13) +1
    M>>Как видим, реальный пример на Обероне ничем не лучше, а даже хуже аналогичного примера на С/С++
    СГ>Как видим, реальный пример на Обероне значительно лучше аналогичного примера на С/С++.

    Кхм. Это было не голословное утверждение. Там дальше было объяснение, почему, я даже не поленился, и привел оба листинга дрг рядом с другом.

    M>> Кстати, вопрос — почему Паскалеподобные языки до сих пор так упорно цепляются за жесткое разделение FUNCTION/PROCEDURE, если разницы в них — практически ноль?


    СГ>Учите матчасть. Слово FUNCTION было только в Паскале 1970 года. В Оберонах его нет.


    Тогда зачем там слово procedure? Оверхед

    M>>И еще вопрос, на засыпку — вопрос о непоследовательности языка. Почему делить — "DIV", а сложить — "+", а не "ADD"?


    СГ>Это Вам, вообще-то, надо обращаться в начальную школу — там где деление проходят. Открою Вам секрет. Оказывается если сложить два целых числа, то результат тоже будет целым числом (поэтому и "+"). В то же самое время, если разделить два целых числа, то результат будет уже вовсе не целым, а рациональным числом (поэтому DIV).


    Кхм. А вы могли бы просто сказать, что DIV — это целочисленное деление? Я бы понял, уверяю.

    M>>В общем, Оберон проиграл — это я невооруженным взглядом говорю И не в лексемах дело, а в ясности и отсутствии лишнего визуального шума.


    СГ>В общем, Оберон победил — это я невооруженным взглядом говорю И не в лексемах дело, а в ясности и отсутствии лишнего визуального шума.



    Ладно, еще раз...

    PROCEDURE (this: QBitArray) Fill(v: BOOLEAN; size: INTEGER): BOOLEAN, NEW;      bool QBitArray::fill( bool v, int size )
    BEGIN                                                                           {
      IF size >= 0 THEN                                                               if ( size >= 0 ) {                                  
        IF ~resize(size) THEN RETURN FALSE END                                          if ( !resize( size ) )
        ELSE                                                                              return FALSE;
            size = this.size();                                                       } else {
        END;                                                                            size = this->size();
        IF size > 0 THEN                                                              }
          IF v THEN                                                                   if ( size > 0 )
            memset(data(), 0FFH, (size + 7) DIV 8);                                     memset( data(), v ? 0xff : 0, (size + 7) / 8 );
          ELSE                                                                        if ( v )
            memset(data(),    0, (size + 7) DIV 8);                                     pad0();
          END;                                                                        return TRUE;
        END;                                                                        }
        IF v THEN pad0 END;
      RETURN TRUE;
    END Fill;


    Итак. Посчитаем (а мы ведь любим считать). В рамках данного исследования я визуальным шумом называю служебные слова и выражения, служебные символы и лексемы. Кодом я называю то, что юзера интересует — переменные, имена функций, цифры. Итак:

    Перед тестом есь текст был выровнян по левому краю и убраны пробелы в конце строчек. Статистика — по MS Word
    Оберон
    Всего тескта: 270 символов (330 — с пробелами)
    Код: 94 символа

    Код/Текст: ~0.35

    C++
    Всего текста: 170 символов (214 — с пробелами)
    Код: 65 символов

    Код/Текст: ~0.38

    Оп-па. Сюрприз-сюрприз! С точки зрения того, что и где писать — пофиг, что Оберон, что С++. Но обратите внимание, _сколько_ надо писать в Обероне.

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

    Все еще не убеждены? Возьмем куски кода сверху и пропустим их через анализатор:

    С++
    Flesch-Kincaid Reading Ease: 62
    Ideally, web page text should be around the 60 to 80 mark on this scale. The higher the score, the more readable the text.

    Flesch-Kincaid Grade Level: 10
    Ideally, web page text should be around the 6 to 7 mark on this scale. The lower the score, the more readable the text.

    Gunning-Fox Index: 17
    Ideally, web page text should be between 11 and 15 on this scale. The lower the score, the more readable the text. (Anything over 22 should be considered the equivalent of post-graduate level text).


    Оберон
    Flesch-Kincaid Reading Ease: -709
    Ideally, web page text should be around the 60 to 80 mark on this scale. The higher the score, the more readable the text.

    Flesch-Kincaid Grade Level: 315
    Ideally, web page text should be around the 6 to 7 mark on this scale. The lower the score, the more readable the text.

    Gunning-Fox Index: 332
    Ideally, web page text should be between 11 and 15 on this scale. The lower the score, the more readable the text. (Anything over 22 should be considered the equivalent of post-graduate level text).


    Как говорят англичане — ouch, it hurts.

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

    Я все больше и больше убеждаюсь в непригодности Оберона к написанию сколько-нибудь длинного кода из-за его вопиющей нечитаемости.

    Тепреь опять оп! Сейчас мне возразат, что если бы се было так плохо, то Оберон не стали бы использовать на атомных станциях Знаете, и на ассемблере можно написать очень серьезные системы (и писали!). Но является ли это знаком того, что это великолепный язык с безупречным синтаксисом? Никак нет.

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

    На данный момент существуют десятки языков, которые позволяют выражать мысли намного эффективнее, чем Оберон (возьмем Perl и манипуляцию стрингами, например). Существуют десятки языков, которые позволяют выражать мысли намного понятнее, чем Оберон (русский, например или С++ — да, С++!). Оберон не хуже и, главное, не лучше этих языков. Он всего лишь один из таких языков со своим, весьма грубым синтаксисом и непонятным будущим. Но делать из него культ? Подсчитывать лексемы? Извините, у многих есть дела поважнее
    Автор: Mr.Chipset
    Дата: 14.06.05


    dmitriid.comGitHubLinkedIn
    Re: Синтаксический оверхед
    От: tarkil Россия http://5209.copi.ru/
    Дата: 09.06.05 10:29
    Оценка: 15 (9) +4
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>1) Известно, что...


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

    СГ>2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо


    Стандарты есть разные, Вы о каком их них?

    СГ>синтаксический оверхед = a/b = c


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

  • Цикл с проверкой условия в начале итерации

    while(a) x();

    Я предпочитаю выносить x() на отдельную строку, чтобы было удобно ставить breakpoint. Для Виртовских языков это тоже актуально, кстати.

  • Цикл с проверкой условия в середине итерации
    Если уж мы взялись оптимизировать кол-во строчек (занятие почти бессмысленное, но тем не менее...), то никто ничего не теряет от помещения открывающей скобки на одну строку с предваряющей конструкцией.

    while(true) {
        x();
        if(a) {
            y();
            break;
        }
        z();
    }


    СГ>
    СГ>LOOP 
    СГ>  x;
    СГ>  IF a THEN y; EXIT END;
    СГ>  z
    СГ>END
    СГ>

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

  • Цикл с проверкой условия в конце итерации

    do x(); while(a);

  • Инструкция выполнения по условию

    if(a) x();

  • Инструкция выполнения по условию с альтернативой

    if(a)
        x();
    else
        y();

  • Сложная инструкция выполнения по условию

    if(a)
        x();
    else if(b)
        y();
    else
        z();

    Здесь я не стал вытягивать оператор в одну строку, но порекомендовал бы и d Обероне разбить его на три. Для наглядности.

  • Инструкция выбора варианта выполнения
    Реально необходимый и достаточный синтаксис:

    CASE n OF
      a: x |
      b: y
      ELSE z
    END

    Давайте всё-таки не будем громоздить спецсимволы один на другой и напишем красиво, тем более, что в реальном коде вместо x, y, z наверняка будет что-то помассивнее. А если записать в пять строк, явно видна асимметрия синтаксиса Оберона: каждая строка завершается по-своему.

    Я везде поубирал в примерах лишние {} и предвижу возражение: мол, если действия будут сложнее x(), y(), z(), то сишный синтаксис потребует лишних скобок, а обероновский — нет. На это я сразу отвечу, что тогда и в Обероне для наглядности потребуется перенос по строчкам, а пара скобочек в массе кода просто визуально потеряется. Пример (скопировал кусок отлаживаемого кода):

    "Сиобразный":

    if(a) {
        ItemIndex.Index = atoi( Buff.POSTINDEX );
        ItemIndex.IndexState = ItemIndex.Index == 0 ? INDEX_UNKNOWN : INDEX_EXACT;
        Syncronize( ItemIndex );
    }
    else {
        ItemIndex.IndexState =
            Buff.FLAGS & ADDR_FLAG_ACTUAL ? INDEXES_DIFFERENT : INDEX_UNKNOWN;
    }
    if( FirstItem ) //...

    "Оберонообразный" (сорри, выражения внутри я не преобразовал, не знаю, как; скажу спасибо, если кто-то это за меня сделает)

    IF a THEN
        ItemIndex.Index = atoi( Buff.POSTINDEX );
        ItemIndex.IndexState = ItemIndex.Index == 0 ? INDEX_UNKNOWN : INDEX_EXACT;
        Syncronize( ItemIndex );
    ELSE
        ItemIndex.IndexState =
            Buff.FLAGS & ADDR_FLAG_ACTUAL ? INDEXES_DIFFERENT : INDEX_UNKNOWN;
    END
    
    IF FirstItem THEN //...

    Что видим? Те же 10 строк.

    Ну и финальный плевок в Оберон — идентификаторы ЗАГЛАВНЫМИ буквами. Вот это напрягает втрое больше, чем все сишные скобочки вместе взятые — ну не ориентированы шрифты на то, чтоб подряд идущие заглавные хорошо читались! Те, кто рисуют шрифты добиваются того, чтобы строчные буквочки плавно взглядом воспринимались, а на заглавных взгляд чтобы наоборот — спотыкался.

    Резюме

    Синтаксис языка C++ (Java, C#...) возможно страдает некоторой избыточностью, но её масштабы сильно преувеличены в исходном сообщении. Вопрос удобочитаемости остаётся открытым — люди, уже знакомые с сишным синтаксисом как правило не испытывают ни малейших затруднений в чтении программ, данных про Оберон не имею, полагаю, ситуация та же. Компактность кода (измеряемая в количестве лексем или символов), как таковая, является сомнительным приоритетом, никак не обосновано то, что буквы надо экономить. Количество строк более обоснованный критерий, ибо когда функция/алгоритм занимаешь меньше места (а особенно, если целиком влазит на экран), он проще понимается, "охватывается одним взглядом". Однако для этого нужно брать какой-то реальный код и сравнивать его (как сделал я в примере выше и который не показал никаких преимуществ Оберона). Отдельные синтаксические конструкции тут роли не играют.

    Берёшься сравнивать — сравнивай добросовестно. Мы технари, а не рекламисты. Imho.
  • --
    wbr, Peter Taran
    Re: Синтаксический оверхед
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 09.06.05 12:21
    Оценка: 7 (3) +10
    Здравствуйте.

    Некто С.Губанов спрашивает у нас:

    СГ>и как долго этот синтаксис еще будет существовать?

    Отвечаем — он значительно переживет вас и нас вместе взятых.


    Если серьезно, то архи глупо измерять код в лексемах (точнее токенами) и даже строках. Они для человека ничего не значат. Человек воспринимает программы скорее ветками AST, т.е. логическими еденицами. Если измерить твои примеры в них, то разница исчезнет.

    Если же начать считать по мелочи, то следует начать считать смволы. И в них твои примеры резко проиграют (особенно если записывать С-шный код без пробелов).
    ... << RSDN@Home 1.1.4 beta 7 rev. 466>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[2]: Синтаксический оверхед
    От: Кодёнок  
    Дата: 10.06.05 08:16
    Оценка: 14 (8) +3 -1
    А>Ты это... убери что-ли "кфмн" из профайла.
    А>Даже неудобно как-то читать подобные сообщения от человека со степенью.

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

    Всем этим может заниматься человек, не отличающий главное от второстепенного. Вот сколько в разработке ПО или языков/компиляторов проблем, но автор озаботился количеством лексем на оператор. Очень важная видать проблема с её решением разрабатывать софт сразу станет легче. Идеал — создать программу, ничего не сделав

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

    Ну серьёзно, неужели количество лексем — одна из важных проблем в разработке ПО? "Во время боя командир автоматически переходит на мат, и результативность возрастает втрое?" Какие выгоды автор надеется получить, уменьшив число лексем на оператор? На сколько % ускорить разработку? Или что?
    Re[6]: Синтаксический оверхед: а смысл-то в чем?
    От: Кодёнок  
    Дата: 10.06.05 07:17
    Оценка: +1 -1 :))) :))) :))
    СГ>>Серьмяжный смысл моего сообщения был в том, что теперь я могу ссылаться
    Автор: Сергей Губанов
    Дата: 09.06.05
    на это сообщение, а не голословно говорить, что Си-образный синтаксис использует больше лексем чем нужно.


    D> Ссылаться на бредовое сообщение? Ой, тогда извини... Ты так и не понял, что не прав?


    Ну так это же ПУБЛИКАЦИЯ. Можно ссылочку потом ставить на то сообщение [1], как в научке принято.

    СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

    1. Губанов С. Синтаксический оверхед / Форум сайта RSDN.RU — http://www.rsdn.ru/Forum/Message.aspx?mid=1214478
    Автор: Сергей Губанов
    Дата: 09.06.05
    — 09.06.2005 16:33 "Сергей Губанов"
    Re: Синтаксический оверхед
    От: Patalog Россия  
    Дата: 10.06.05 07:11
    Оценка: 6 (2) +2 :))) :))
    Здравствуйте, Сергей Губанов, Вы писали:

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

    ЗЫ Читая подобный "креатифф" начинаешь невольно оправдывать существование пАдонкофф. Посему — "аффтар, выпей йаду!"
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Почетный кавалер ордена Совка.
    Re[3]: Синтаксический оверхед
    От: Oyster Украина https://github.com/devoyster
    Дата: 09.06.05 10:17
    Оценка: 3 (1) +1 :))) :))) :)
    Здравствуйте, Сергей Губанов, Вы писали:

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


    O>>Эх... не поленюсь


    СГ>Дык, а лексический оверхед кто за Вас подсчитывать-то будет, Пушкин?


    СГ>У меня получилось 235 процентов, а у Вас?


    Переживаете из-за скобочек?
    Re[3]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 09.06.05 10:03
    Оценка: 2 (2) +7
    Здравствуйте, Сергей Губанов, Вы писали:

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


    К>>Вопрос с ходу — ты всегда будешь циклы и комлексные условия с операциями в 1 строчку писать? И что помешало на сишном синтаксисе сделать также?


    СГ>Я соблюдал общепринятые стандарты кодирования. Хочешь верь, а хочешь нет, но инструкции навроде:


    СГ>WHILE a DO x END


    СГ>REPEAT x UNTIL b


    СГ>IF a THEN x ELSE y END


    СГ>CASE n OF a: x | b: y ELSE z END


    СГ>ну натурально принято писать в одну строчку.


    У тебя всегда тело цикла состоит из вызова функции x?
    И скобки обязательно в сишном стиле так ставить? И вообще обязательно? И строки переводить?
    Напрашивающийся вопрос: ты вообще знаешь синтаксис Си?
    Re[2]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 20.06.05 11:51
    Оценка: -3 :))) :)))
    Здравствуйте, Alex Alexandrov, Вы писали:

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


    Естественно.

    Но вопрос в другом. Точнее их два.

    1) Правильный синтаксис был известен уже в 1979 году (Modula 2). С 1979 года прошло более четверти века. Но почему до сих пор появляются всё новые и новые языки программирования с устаревшим синтаксисом? Почему новые языки Java, C#, D,... (заметьте не обремененные проблемой совместимости с предыдущими версиями) всё равно используют заведомо устаревший синтаксис? Как долго это будет продолжаться? Язык программирования, который появится, например, через десять или через двадцать лет будет с каким синтаксисом? Пока все старые программисты не помрут от старости это и будет что-ли?

    2) Почему сотня-другая ковбоев отметившихся в этой ветке форума вместо того чтобы сказать, мол, да, действительно рудимент этот си-образный синтаксис, атавизм, так сказать, действительно давно было пора его изжить; наоборот пытается его как-то защищать? Вслепую прут против очевидного. Большинство из них пацаны же еще... Загадка... Хотя тут недавно упоминали про принцип "Не пытайся искать злого умысла в том, что объясняется глупостью"... Образования им не хватает, я думаю.
    Re[7]: Синтаксический оверхед
    От: Salex100 Россия  
    Дата: 22.06.05 14:22
    Оценка: +1 :))) :))) :))
    Здравствуйте, Сергей Губанов, Вы писали:

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


    S>>А еще типичная ошибка — вместо "==" в условии поставить "="...


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


    За одно только := паскалеобразные языки не имеют права на существование! Это же 100% оверхед по операции присваивания!
    Жизнь удалась!
    Re: Синтаксический оверхед
    От: Alex Alexandrov США  
    Дата: 19.06.05 07:29
    Оценка: 11 (4) +4
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Читал ветку. Много и долго думал. Думал о том, есть ли смысл высказывать свои мысли, ибо вероятность прочтения твоего сообщения хоть кем-то обратно пропорциональна длине ветки. Но решил все-таки высказать.

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

    Например, я долгое время писал и на Паскале, и на C/C++ (не очень знаком с Обероном, увы). Так вот синтаксис Паскаля действительно более многословен, а синтаксис C++ потенциально более запутан. Но при грамотном написании кода и едином стиле все это нивелируется — например, не понимаю, зачем писать программы на Паскале в верхнем регистре. Проблемы в другом. Например, в Паскале мне катастрофически не хватало автоматически вызываемых деструкторов. Отсутствие возможности писать простые RAII-обертки _существенно_ усложняет логику кода и делает его более подверженным ошибкам. Как с этим в Обероне? А с исключениями?

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

    Или Perl. Хороший пример не самого удачного read-only синтаксиса, во многом унаследованного и принесенного в жертву в угоду похожести на awk, shell, отчасти C. Однако люблю я Perl не за это, а за возможность кратко выражать алгоритмы решения задач обработки текста и данных. И если кто-то предложит мне изучить новый Super-Perl+, в котором кроме усовершенствованного, оптимизированного на N% синтаксиса ничего не будет, то этот кто-то пойдет в сад. Ибо зачем мне это?

    Так что позволю себе громкое заявление: нет ни одного языка, который бы стал популярен в решении практических задач только благодаря синтаксису (простому, или наоборот удобному — без разницы). Хочешь сделать новый язык программирования: думай прежде всего о его семантических свойствах и том, как они могут быть применены для решениия практических задач.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    It's kind of fun to do the impossible (Walt Disney)
    Re: Синтаксический оверхед: а смысл-то в чем?
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 09.06.05 11:19
    Оценка: 7 (3) +5
    Здравствуйте, Сергей Губанов, Вы писали:

    <...прочитано по диагонали из-за невозможности серьезного восприятия...>

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


    Спрашивается, а в чем смысл данного стенания?



    ИМХО: подобная критика не конструктивна. Если тебе не нравится C/C++, то доказывай лучше реальные достоинства Modula/Oberon. Лично мне упертость в продвижении C# Влада (VladD2) импонирует гораздо больше, т.к. она очень часто конструктивна.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[2]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 10.06.05 10:33
    Оценка: 6 (2) +1 :))) :))
    Здравствуйте, DMitay, Вы писали:

    DM>Здравствуйте, Сергей Губанов, Вы писали:


    DM>Сергей, у меня к Вам вопрос! В каком учебном заведении вы защищали свою кандидатскую?


    Я откроя вам тайну, уважаемые незаигнорившие эту ветку из раздела "Коллеги, улыбнитесь"

    Сергей Губанов — видный и перспективный учёный в области психологии IT-специалистов.

    Сейчас он затеял новое исслендование, создал этот топик и наблдает
    за разнообразными реакциями отвечающих. Иногда подогревая спор своими репликами,
    в случаях, когда хочет поподробнее какой нибудь заинтересовавший его феномен.
    А также для маскировки истинной цели своего исследования.
    Re[4]: Идеологически правильный мегарулез
    От: Sergey J. A. Беларусь  
    Дата: 24.06.05 10:26
    Оценка: 6 (2) +3 :)))
    Здравствуйте, Пацак, Вы писали:

    П>Здравствуйте, Hobot Bobot, Вы писали:


    П>Не-е-е-е-е-е-е, стоп!!! ИМХО нас морочат.

    П>Я чот не пойму. Не так давно СГ убеждал всех, что EXIT из while вывести не может и что компилитор не даст соорудить такую инструкцию и вот — на тебе! Этак я тогда из любого while могу то же самое сделать:

    Я приведу компиляющийся код, иначе Серегй объяснит где у вас ошибка в листинге, и уйдёт с гордо поднятой головой, проигнорировав остальное.

      PROCEDURE Test*();
      VAR  i: INTEGER;
      BEGIN
            i:=10;
            LOOP
                WHILE i # 0 DO
                    DEC(i);
                    EXIT;
                END
            END;
      END Test;


    Дааа... какая неожиданность. После WHILE i не равно 0 !
    Я — свихнувшееся сознание Джо.
    Re[2]: Синтаксический оверхед
    От: Privalov  
    Дата: 09.06.05 14:10
    Оценка: 4 (2) +1 -2 :)))
    Здравствуйте, viellsky, Вы писали:

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


    V>Так посчитано то в корне неверно — взяты примеры, находящиеся именно в крайней области избыточности (названия функций минимальны, прочий код отсутсвует). Если взять совокупность кода, составляющую работающую, да еще и продаваемую программу, то там вы получите именно небольшие проценты.



    V>А то, что Вы привели в качестве примера кода — жалкий академизм, не имеющий ничего общего с реальной программой, на которую вы ссылаетесь в "резюме".


    На самом деле академизмом, даже жалким, там и не пахнет. Это больше похоже вот на что:

    С точки зрения банальной эрудиции, каждый индивид способен абстрагироваться от идей материального индустриализма. Поскольку ратифицировать конвенцию о модернизации идентификационной изменчивости возможно при наличии ресурсообеспеченности, неизбежна ревальвация космогонической санации, а также консолидация психофизиологической формации.
    Обращаясь к рационально-апоплексическому анализу дисгармонии фазисов современного апогея, мы эфемерно субъективизируемся в радикально – трансцендентном апофеозе и симбиозе. Антроподинамическая тенденция стабилизации мутогенеза находится на стадии нуклеосинтеза, порождая в свою очередь фальсификацию люминистенции реквизита. Электрофорез и диффектоскопия эпиграфики показали наличие плюрализма и плебисцита в хронологии дидактики.
    Инсоляция биогеоциноза доказала диапозитивное существование питекантропа в мобилизированной модуляции палеозоя. Эпистолографический мораторий политэкономии и беллетристики прерогатива интермедии сепаратизма. Диссертация по вопросу примитивизма в термодинамике и сейсмоведении разрешила проблему глиссирования департамента селекции. Экспроприирование синхрофазотрона позволило завершить тотальной импровизацией аммонификацию и акклиматизацию объекта в арбитраже.
    Кульминацией апелляции является транскрипция неореализма в суппралитораль индуктивности дюраль алюминиевого резистора.


    (c) не мое.
    Re[3]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 10.06.05 09:43
    Оценка: 4 (2) +1 :))) :))
    P>На самом деле академизмом, даже жалким, там и не пахнет. Это больше похоже вот на что:

    P>

    P>С точки зрения банальной эрудиции, каждый индивид способен абстрагироваться от идей материального индустриализма. Поскольку ратифицировать конвенцию о модернизации идентификационной изменчивости возможно при наличии ресурсообеспеченности, неизбежна ревальвация космогонической санации, а также консолидация психофизиологической формации.
    P>Обращаясь к рационально-апоплексическому анализу дисгармонии фазисов современного апогея, мы эфемерно субъективизируемся в радикально – трансцендентном апофеозе и симбиозе. Антроподинамическая тенденция стабилизации мутогенеза находится на стадии нуклеосинтеза, порождая в свою очередь фальсификацию люминистенции реквизита. Электрофорез и диффектоскопия эпиграфики показали наличие плюрализма и плебисцита в хронологии дидактики.


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


    dmitriid.comGitHubLinkedIn
    Re[15]: Читать всем - статистикаи читаемость
    От: Кодт Россия  
    Дата: 15.06.05 16:39
    Оценка: 3 (1) +1 :))) :)))
    Здравствуйте, Mamut, Вы писали:

    СГ>>Это Вам, вообще-то, надо обращаться в начальную школу — там где деление проходят. Открою Вам секрет. Оказывается если сложить два целых числа, то результат тоже будет целым числом (поэтому и "+"). В то же самое время, если разделить два целых числа, то результат будет уже вовсе не целым, а рациональным числом (поэтому DIV).


    M>Кхм. А вы могли бы просто сказать, что DIV — это целочисленное деление? Я бы понял, уверяю.


    А это был пример оверхеда русского языка
    Перекуём баги на фичи!
    Re[5]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 09.06.05 10:13
    Оценка: 2 (2) +2 :))) :)
    Здравствуйте, Сергей Губанов, Вы писали:

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


    К>>У тебя всегда тело цикла состоит из вызова функции x?


    СГ>Только тогда когда тело цикла большое, его можно написать на нескольких строчках.


    К>>И скобки обязательно в сишном стиле так ставить? И вообще обязательно? И строки переводить?


    СГ>В принципе это не обязательно, но если писать промышленный код, то надо следовать стандартам оформления кода, а они таковы, что скобки {} надо писать всегда и на новой строчке.


    Т.е. на паскалеподобном языке не пишут промышленный код?
    Ой держите меня
    Видимо это просто не возможно
    Re[2]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 09.06.05 09:58
    Оценка: -7 :)
    Здравствуйте, Курилка, Вы писали:

    К>Вопрос с ходу — ты всегда будешь циклы и комлексные условия с операциями в 1 строчку писать? И что помешало на сишном синтаксисе сделать также?


    Я соблюдал общепринятые стандарты кодирования. Хочешь верь, а хочешь нет, но инструкции навроде:

    WHILE a DO x END

    REPEAT x UNTIL b

    IF a THEN x ELSE y END

    CASE n OF a: x | b: y ELSE z END

    ну натурально принято писать в одну строчку.
    Re[8]: Oberon - Примеры кода
    От: Mamut Швеция http://dmitriid.com
    Дата: 10.06.05 10:02
    Оценка: 10 (4) +3
    Читал я, читал я эту ветку, но так и не видел кода на Обероне, которые не был бы высосан из пальца. Ладно, Гугль нам в помощь:

    Linked list
    MODULE FigureList; (* tlozza@student.ethz.ch *)
    TYPE
        Figure = OBJECT
            name : System.String;
            next : Figure; (* Reference to the next figure. *)
        END Figure;
    
    VAR
        FigureList, MyFigure, Iterator : Figure;
    
    BEGIN
        NEW(MyFigure); (* Create new figure object/instance. *)
        MyFigure.name := "my favorite";
        FigureList := MyFigure; (* Attach figure to list. *)
        NEW(MyFigure); (* A new figure again. *)
        MyFigure.name := "another one";
        FigureList.next := MyFigure;
        
        (* Print the name of all figures in the list. *)
        Iterator := FigureList; 
        WHILE Iterator # NIL DO
        WRITELN(Iterator.name);
        Iterator := Iterator.next;
        END;
        
    END FigureList.


    Попрошу обратить внимание на следующее:
    Figure = OBJECT
            name : System.String;
            next : Figure; (* Reference to the next figure. *)
    END Figure;

    Сравним с
    struct Figure{
      System::String figure;
      Figure* next;
    }


    и

    WHILE Iterator # NIL DO
        WRITELN(Iterator.name);
        Iterator := Iterator.next;
    END;

    сравним с
    while(Iterator != NULL){
        printf(Iterator.name);
        Iterator = Iterator.next();
    }


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

    Еще не убедились? Ладно, Ordered List with sentinel (at begin):
    MODULE List;
    
    TYPE
      List = POINTER TO ListDesc;
      ListDesc = RECORD
        key: ARRAY 64 OF CHAR;
        next: List;
    END;
    
    VAR root: List;
    
    PROCEDURE Find (key: ARRAY OF CHAR): List;
      VAR p: List;
    BEGIN
      p := root.next;
      WHILE (p # NIL) & (p.key < key) DO p := p.next END;
      IF (p = NIL) OR (p.key > key) THEN RETURN NIL
      ELSE RETURN p
      END
    END Find;
    
    PROCEDURE Insert (key: ARRAY OF CHAR; unique: BOOLEAN);
      VAR p, q: List;
    BEGIN
      p := root;
      WHILE (p.next # NIL) & (p.next.key < key) DO p := p.next END;
      IF unique & (p.next # NIL) & (p.next.key = key) THEN HALT (99) END;
      NEW (q); COPY (key, q.key); q.next := p.next; p.next := q
    END Insert;
    
    PROCEDURE Delete (key: ARRAY OF CHAR);
      VAR p: List;
    BEGIN
      p := root;
      WHILE (p.next # NIL) & (p.next.key < key) DO p := p.next END;
      IF (p.next # NIL) & (p.next.key = key) THEN
      p.next := p.next.next
      END
    END Delete;
    
    PROCEDURE InitList;
      BEGIN NEW (root); root.next := NIL
    END InitList;
    
    END List.


    Во-первых, видим кучи begin-end'ов (так, только не надо мне сейчас говорить, что это не Оберон-5, а МодулаХ9-бета или Зоннон или... Это-Оберон). Во-вторых видим дикий синтаксис в одну строчку. Нечитаемый. Дебагить его тоже невозможно:
    IF (p = NIL) OR (p.key > key) THEN RETURN NIL
    ELSE RETURN p
    END



    Короче. На более-менее реальных примерах Оберон в десятки раз проигрывает в читаемости. Визуального мусора в нем — тонны. И лексем там не меньше, чем в С/С++


    dmitriid.comGitHubLinkedIn
    Re[11]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 15.06.05 14:43
    Оценка: 6 (2) +1 :))) :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Mr. None, Вы писали:


    MN>>perl адназначна... вот где никакого оверхеда ... вот только фиг прочтёшь, что написано...


    СГ>Так ведь, еще Эйнштейн говорил — сделать так просто, как только возможно, но не проще. Но не проще!!!


    Ну, к Оберону это выражение не имеет никакого отношения. Там все усложнено настолько, насколько возможно, но не сложнее


    dmitriid.comGitHubLinkedIn
    Re[8]: Идеологически правильный мегарулез
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 28.06.05 08:46
    Оценка: 6 (2) +2 :)))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Пацак, Вы писали:


    П>>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>>Циклом WHILE или REPEAT называется цикл, который может завершиться только по 1 условию.


    П>>Если не сложно, подсчитайте, пожалуйста, количество условий, по которым может завершиться внутренние WHILE и UNTIL здесь
    Автор: Сергей Губанов
    Дата: 24.06.05
    .


    СГ>Завершится только по одному, прерваться — другой вопрос.


    Мсье неслабый специалист по сферическим коням в вакууме
    Re: Синтаксический оверхед
    От: volk  
    Дата: 28.07.05 13:12
    Оценка: 6 (2) :))) :))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.

    СГ>2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо (чтобы читающему понятно стало где что написано).

    Не менее содержательная дискуссия ведется здесь
    Автор:
    Дата: 21.07.05
    Тот, кто желает, но не делает, распространяет чуму.
    Re: Синтаксический оверхед
    От: CrystaX Россия https://crystax.me/
    Дата: 09.06.05 09:44
    Оценка: +7
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Вообще говоря меня как прграммиста это очень мало волнует. Вот компилятор — он да, наверняка возмущается, когда столько лексем, бедняге, приходится обрабатывать.
    Но компилятор — наш раб, а не наоборот, поэтому все ок.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[2]: Ошибка
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 09.06.05 10:05
    Оценка: +2 -2 :)))
    Здравствуйте, Privalov, Вы писали:

    P>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Реально необходимый и достаточный синтаксис:

    СГ>>
    СГ>>WHILE a DO x END
    СГ>>


    P>А если вставляешь больше одного оператора?


    P>
    P>WHILE a DO 
    P>  BEGIN
    P>     x1;
    P>     x2;
    P>   .....
    P>  END
    P>


    Упомянутый Вами синтаксис устарел более чем двадцать пять лет тому назад.

    Где-то в середине 1970-тых годов был открыт реально необходимый и достаточный синтаксис (Modula-2, 1979 год)
    WHILE a DO x; y; z END

    Обратите внимание: слово "BEGIN" отсутствует вообще во всех инструкциях — оно лишнее.
    Re: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 14.06.05 08:18
    Оценка: +1 :))) :)))
    Здравствуйте, Сергей Губанов, Вы писали:

    О да!!!! Предлагаю присвоить господину Губанову звание почётного Петросяна RSDN!
    Вот только ваши научные умозаключения содержат ряд ошибок в том, что касается необходимости и достаточности конструкций Pascal`я... Вот вам гораздо более компактные конструкции:

  • Цикл с проверкой условия в начале итерации
    l1: call a ; a помещает результат в регистр cx: 0 - если false, 1 - если true
        jcxz l2
        call x
        jmp l1
    l2:


  • Цикл с проверкой условия в середине итерации
    l1: call x
        call a ; a помещает результат в регистр cx: 0 - если false, 1 - если true
        jcxz l2
        jmp l1
    l2:
        call y


  • Цикл с проверкой условия в конце итерации
    l1: call b ;a помещает результат в регистр cx: 1 - если false, 2 - если true
        call x
        loop l1


  • Инструкция выполнения по условию
        call a ;a помещает результат в регистр cx: 0 - если false, 1 - если true
        jcxz l1
        call x
    l1:


  • Инструкция выполнения по условию с альтернативой
        call a ;a помещает результат в регистр cx: 0 - если false, 1 - если true
        jcxz l1
        call x
        jmp l2
    l1: call y
    l2:


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

    Так что как видите паскаль, не самый компактный язык! Вот только с компонентностью в ассемблере вы малость... эээ как бы это по цензурнее выразиться... а вот: ЗАПАРИТЕСЬ!
  • Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[4]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 16.06.05 08:43
    Оценка: -1 :))) :)))
    Здравствуйте, Аноним, Вы писали:

    А> Бред... отлаживать такое крайне неудобно. Есть золотое правило: одна строчка — один оператор.


    Не отлаживать программы надо, а математически строго доказывать их корректность.
    Re[3]: Ошибка
    От: Banch  
    Дата: 09.06.05 10:24
    Оценка: 4 (3) +3
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>
    СГ>WHILE a DO x; y; z END
    СГ>


    Людей, которые пишут так вот в одну строчку я на работу не возьму.
    Потому что прочесть этот код будет невозможно!
    Re[5]: Ошибка
    От: Mamut Швеция http://dmitriid.com
    Дата: 15.06.05 14:42
    Оценка: 3 (1) +5
    СГ>Не постигаю, что такого кроется невозможного прочитать элементарное: WHILE a DO x; y; z END

    Потому что это — высосанный из пальца пример. Ну елки-палки, Сергей, раскройте глаза. Вы сами приводили код (хоть и с моей подачи), который не пишется в одну строчку
    Автор: Сергей Губанов
    Дата: 10.06.05
    . Я приводил примеры кода
    Автор: Mamut
    Дата: 10.06.05
    , из которых видно, что запись в одну строку ухудшает восприятие кода, а большое количество кричащих букв забивает код.

    Нужели Вам самому приятно читать такой вот код:
    PROCEDURE Insert (key: ARRAY OF CHAR; unique: BOOLEAN);
      VAR p, q: List;
    BEGIN
      p := root;
      WHILE (p.next # NIL) & (p.next.key < key) DO p := p.next END;
      IF unique & (p.next # NIL) & (p.next.key = key) THEN HALT (99) END;
      NEW (q); COPY (key, q.key); q.next := p.next; p.next := q
    END Insert;


    Чем, скажите, чем он лучше по восприятию, чем:
    insert(char[] key, bool unique)
    {
      List p = root;
      while(p.next() && (p.next().key() < key))
        p.next();
      if(unique && p.next() && (p.next().key() < key))
        return;
      /*и так далее*/
    }


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

    SQR(x) ADD 2 MUL SQR(y) EQ z



    dmitriid.comGitHubLinkedIn
    Re: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 09.06.05 09:38
    Оценка: 1 (1) +5
    Здравствуйте, Сергей Губанов, Вы писали:

    <skipped/>

    Вопрос с ходу — ты всегда будешь циклы и комлексные условия с операциями в 1 строчку писать? И что помешало на сишном синтаксисе сделать также?
    Re[10]: Идеологически правильный мегарулез
    От: Дарней Россия  
    Дата: 28.06.05 08:52
    Оценка: 1 (1) +5
    Здравствуйте, Сергей Губанов, Вы писали:

    взялся бы ты лучше за функциональные языки, честное слово
    для математического подхода к программированию — самое оно. Уж куда лучше бессмысленного урезания циклов и прочих извращений.
    да и вообще.. предмет намного более благодарный, чем мертворожденные обероны
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[11]: Очередной яркий пример
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 26.07.05 12:21
    Оценка: 1 (1) +2 :)))
    Здравствуйте, Сергей Губанов, Вы писали:

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


    C>>procedure

    C>>function
    C>>var
    C>>do
    C>>to, downto

    F>> А на картинке...


    СГ>Нету их и на картинке.


    Эт как про суслика, но наоборот?
    Re[7]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 14:36
    Оценка: :))) :)))
    M>Ну и где здесь удобство?

    M>Яркий пример — читаем данные с сокета. Некая информация.

    M>
    M>...    
    M>


    M>Что делать будем-то? Ставить флаги в глобальных переменных?


    Никогда не читайте данные с сокета в Оберноне.
    Ибо сокетов не бывает.
    Re[3]: Сон в летнюю ночь
    От: AVC Россия  
    Дата: 21.06.05 23:36
    Оценка: +1 :))) :))
    Здравствуйте, achp, Вы писали:

    AVC>>Когда программист пишет (или, что важнее, читает) на Модуле/Обероне цикл "WHILE p DO ... END" он абсолютно уверен...

    AVC>>...на Си/Си++, он не может быть в этом уверен, т.к. внутри цикла может находиться как оператор break, так и знаменитый goto.

    A>Понимаете, мне кажется, что здесь имеется противоречие между двумя подходами к пониманию структурности.


    A>"Академический" подход ставит структурность в сугубо формальные рамки и заявляет о её самоценности.


    A>"Прагматический" подход рассматривает структурность как средство достижения удобства изложения алгоритма.


    A>"Академический" подход спекулятивен: его сторонник созерцает код и склонен к проведению формальной верификации программ. "Вот у нас есть кусок кода — цикл. Каков его консеквент?"


    A>"Прагматический" подход сугубо конструктивен: его сторонник ставит себе задачу написания кода, и применяет структурирование программы для облегчения её решения. "Напишем-ка цикл... А вот тут выйдем досрочно по break..."


    A>Почему я ставлю кавычки? Теория без практики мертва, а практика без теории слепа. Ни тот, ни другой подход не является оптимальным в чистом виде. Программист должен и создавать, и сопровождать код, значит, хороший программист со спокойной совестью напишет цикл, содержащий break, но обязательно осознавая, каков консеквент цикла он имеет в виду получить, а если цикл получится большой или достаточно сложный, — ещё и задокументирует свои намерения для целей сопровождения.


    A>Каков итог? Ни Оберон, ни Фортран-II популярностью не пользуются, а Си++ — пользуется.


    Я получил большое эстетическое удовольствие от чтения Вашего трактата.
    Правда, мне показалось, что Вы могли достичь желаемого консеквента, и не прибегая к столь спекулятивному антецеденту.
    Достаточно было подсчитать количество ссылок в Гугле (или на заборе, на худой конец), что так любит при всяком удобном случае проделывать наш почтенный коллега Cyberax.
    Но мы-то с Вами жаждем проникнуть в суть вещей, и не можем удовлетвориться выводом на основании голой статистики, не рассмотрев вопрос всесторонне с академической и прагматической точек зрения.
    Приятно и даже умилительно сознавать, что добросовестный программист на Си/Си++ не станет прибегать к брейку, иначе как узрев мысленным взором во всех деталях консеквент цикла. После чего он (я ни секунды в том не сомневаюсь!) поспешит немедленно запечатлеть в лапидарном комментарии необоримую причину, принудившую его прибегнуть против воли к столь крайнему средству. И я уже ясно вижу, как навстречу ему в балетных тапочках и пачке грациозными прыжками приближается другой добросовестный программист, предназначеный судьбою сопровождать этот код сквозь годы тернистых испытаний. И вот он уже приник пытливым взором к исходному тексту, и светлая улыбка понимания озаряет его лицо, чтобы никогда более не покидать его. Слышна тихая музыка...
    А на заднем фоне — сельский пейзаж, пастушок с пастушкой (а пастушок такой молоденький-молоденький)...
    И слышно блеянье многочисленных и тучных барашков...
    И здесь я просыпаюсь.

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re[7]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 22.06.05 12:48
    Оценка: +2 :))) :)
    Здравствуйте, Privalov, Вы писали:

    M>>>Блин. Против этого правила — преферанмная поговорка есть. *Недозаложился (вариант — перезаложился) — залез в совй карман.*

    К>>Естественно. Но рисунок игры с кривым раскладом (повезло: на чистом сталинграде срубил 9 взяток) и с однозначным недозакладом (на девятерной из осторожности или заподлизма заказал сталинград) будет разным.
    P>За 9 на Сталинграде не наказывают. На то он и Сталинград.

    Если б вы знали, как прикольно мне, ни разу не игравшему это читать. Примерно как:

    ...
    — Выстребаны обстряхнутся, — говорил он, — и дутой чернушенькой
    объятно хлюпнут по маргазам. Это уже двадцать длинных хохарей. Марко было
    бы тукнуть по пестрякам. Да хохари облыго ружуют. На том и покалим
    сростень. Это наш примар...
    Дон Рэба пощупал бритый подбородок.
    — Студно туково, — задумчиво сказал он.
    Вага пожал плечами.
    — Таков наш примар. С нами габузиться для вашего оглода не сростно.
    По габарям?
    — По габарям, — решительно сказал министр охраны короны.
    — И пей круг, — произнес Вага, поднимаясь.
    ...


    (с) АБС
    Ку...
    Re[21]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 23.06.05 08:34
    Оценка: +6
    Здравствуйте, Сергей Губанов, Вы писали:

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


    CX>>Ибо синтаксис — вовсе не самое важное в языке.


    СГ>Да не главное, согласен.

    СГ>Но что мешало Sun и Microsoft для Java и для C# избрать правильный синтаксис?

    Так они и выбрали правильный.
    Я — свихнувшееся сознание Джо.
    Re: Теория
    От: Mamut Швеция http://dmitriid.com
    Дата: 29.06.05 15:36
    Оценка: +2 :))) :)
    Наткнулся на следующее выражение в книге "Прорри Гаттер. Двенадцать повигов Сена Аесли. Подвиги 9-12":

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


    Эту фразу можно применить к доброй половине высказываний в этой ветке


    dmitriid.comGitHubLinkedIn
    Re[23]: Яркий пример
    От: Sergey J. A. Беларусь  
    Дата: 24.06.05 07:26
    Оценка: 9 (3) :))
    Здравствуйте, Пацак, Вы писали:

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


    M>>Еще одно доказательство того, что LOOP — это инструкция, Оберону чуждая, привнесенная извне.


    П>Тогда уж IF — тоже:


    П>
    П>IF a DO EXIT END;    =     * a * * * * 
    П>


    П>


    Да что там !

            LOOP
                IF TRUE THEN EXIT END;
            END


    * * * * * * *

    Я — свихнувшееся сознание Джо.
    Re: Синтаксический оверхед
    От: Аноним  
    Дата: 09.06.05 12:59
    Оценка: 6 (2) +1 :))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.

    СГ>2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо (чтобы читающему понятно стало где что написано).


    Очередная серия битвы пчёл против мёда вперемешку с лекцией о влиянии длины волос на брюхе блох на северное сияние.
    Re[13]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 16.06.05 08:43
    Оценка: 6 (2) +1 :))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Вообще-то, у Эйнштейна была немного другая другая формула:


    СГ>G_{ij} = (8 Pi k)/(c^4) T_{ij}


    СГ>где G_{ij} — тензор Эйнштейна (алгебраически выражающийся через тензор кривизны Ричи G_{ij} = R_{ij} — 1/2 g_{ij} R), а T_{ij} — тензор энергии импульса материи.


    "И эти люди запрещают мне ковырять в носу!"
    main(){printf("Try to simplify!");}
    Перекуём баги на фичи!
    Re[2]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 29.06.05 11:12
    Оценка: 4 (2) +2 :)
    Здравствуйте, eandr, Вы писали:

    E>Статья — редкостный бред. Автор либо не понимает, чем стиль записи отличается от синтаксиса, либо занимается сознательной подтасовкой.


    А теперь внимательно смотрим на название форума...
    и заодно, на количество ответов. В общем, опоздали, батенька!
    Перекуём баги на фичи!
    Re[6]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 09.06.05 11:52
    Оценка: 3 (1) -2 :))
    Здравствуйте, Cyberax, Вы писали:

    C>Кстати, если рассуждать о синтаксической избыточности, то зачем в

    C>Обероне/Паскале абсолютно ненужные лексемы:
    C>procedure
    C>function
    C>var
    C>do
    C>to, downto
    C>...
    C>А?

    В Modula/Oberon ни одно из указанных Вами слов не присутсвует. До Паскаля мне дела нет, он устарел давным давно.
    Re: Синтаксический оверхед
    От: achp  
    Дата: 16.06.05 13:34
    Оценка: 3 (1) :))) :)
    Здравствуйте, Сергей Губанов!

    Предлагаю для тем вроде этой создать новый форум под названием "Священные, улыбнитесь!"
    Re[3]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 21.06.05 13:34
    Оценка: 3 (1) :))) :)
    Здравствуйте, Сергей Губанов, Вы писали:

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


    AVC>>В отличие от синтаксиса Модулы/Оберона синтаксис Си/Си++ не соответствует принципам структурного программирования.


    AVC>>
    AVC>>while (p) { ... }
    AVC>>

    AVC>>на Си/Си++, он не может быть в этом уверен, т.к. внутри цикла может находиться как оператор break, так и знаменитый goto.
    AVC>>Соответственно, проверка корректности программы существенно затрудняется.

    СГ>Совершенно согласен. Сам на позапрошлой неделе в своей программе на C# обнаружил, что переменная цикла while после его завершения иногда становилась равной -1 вместо ожидаемого минимального значения 0. Ошибка конечно чрезвычайно глупая и мне за нее стыдно, но дело в том, что на Обероне я бы ее просто НЕ СМОГ бы совершить в принципе!


    Математически доказал, что там -1 вместо 0?
    Re[8]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 23.06.05 06:59
    Оценка: 3 (1) :))) :)
    Здравствуйте, Сергей Губанов, Вы писали:

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


    C>>Угу, поэтому все академические разработки весьма успешно загибаются.


    СГ>Между прочим, Java и .NET есть коммерческие реализации идей опробованных на оберонах.


    Ты про число лексем?
    Re[4]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 14:06
    Оценка: 1 (1) +2 :))
    Здравствуйте, Сергей Губанов, Вы писали:

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


    AVC>>>Когда программист пишет (или, что важнее, читает) на Модуле/Обероне цикл

    AVC>>>
    AVC>>>WHILE p DO ... END
    AVC>>>

    AVC>>>он абсолютно уверен, что перед следующим оператором после выхода из цикла выполняется условие ~p (NOT p).

    P>>EXIT что, отменили?


    СГ>Учите "матчасть", а то языка не знаете, а суетесь.


    P>>В среде Windows программа запускается на выполнение двойным щелчком.


    СГ>Не удержусь от замечания: а в оберонах одинарным! Опять идите учить "матчасть".


    И я не удержуть. от смеха.
    Во-первых это Вам намек — не путайте свойства языка и свойства IDE и других сопутствующих разработке средств.
    А во-вторых — Windows легко настраивается и на один щелчок тоже. Учите матчасть.
    Re[4]: Правила + Предложение
    От: Mamut Швеция http://dmitriid.com
    Дата: 21.06.05 14:23
    Оценка: 1 (1) +3 -1
    AVC>>>он абсолютно уверен, что перед следующим оператором после выхода из цикла выполняется условие ~p (NOT p).

    P>>EXIT что, отменили?

    СГ>Учите "матчасть", а то языка не знаете, а суетесь.

    P>>В среде Windows программа запускается на выполнение двойным щелчком.

    СГ>Не удержусь от замечания: а в оберонах одинарным! Опять идите учить "матчасть".

    Предлагаю показательно забанить Сергея Губанова о следующим пунктам:

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


    А также на основании рекомендации Как правильно задавать вопросы

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

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

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

    Смириться. Это — нормально. На самом деле, это хорошо и целесообразно.
    ...



    Приношу извинения за большую цитату.


    dmitriid.comGitHubLinkedIn
    Re[20]: Яркий пример
    От: Пацак Россия  
    Дата: 23.06.05 13:46
    Оценка: 1 (1) +3 -1
    Здравствуйте, Сергей Губанов, Вы писали:

    П>>И чем же пара BEGIN ... END в объявлении процедуры менее самостоятельна, чем в цикле или условном операторе? Тем, что Вирт не догадался написать что-нибудь типа PROCEDURE .... BEGPROC ... END? Или наоборот IF condition BEGIN END?

    СГ>На этот вопрос ответ уже был дан: http://www.rsdn.ru/Forum/Message.aspx?mid=1216614&amp;only=1
    Автор: Сергей Губанов
    Дата: 10.06.05


    Это не ответ на вопрос. Повторю его, если непонятно: чем использование BEGIN END в подпрограммах и модулях с синтаксической точки зрения отличается от использования его же в управляющих инструкциях? ИМХО — ничем. А в таком случае говорить, что эта связка в обероне не используется — явное лукавство.

    Далее, по поводу звездочек (спустимся с небес на землю):

    REPEAT x:=y() UNTIL b() = c()                             = * x * y * * * b * * * c * *
    WHILE a() DO x := y() END                                 = * a * * * x * y * * *
    IF a = b() THEN x(c(), d()) END                           = * a * b * * * x * c * * * d * * * *
    IF a() and ^b() THEN x:=z() ELSE y:=z() END               = * a * * * * b * * * x * z * * * y * z * * * 
    IF a() THEN x:=k() ELSIF b() THEN y:=k() ELSE z:=k() END  = * a * * * x * k * * * b * * * y * k * * * z * k * * *
    CASE n() OF a(): i:=x() | b(): i:=y() ELSE i:=z() END     = * n * * * a * * * i * x * * * b * * * i * y * * * i * z * * *


    Итого имеем: строгое чередование лексема — звездочка наблюдается только в синтетических простейших случаях, имеющих мало общего с тем, что может встретиться в реальной программе. Ну и стоило ради этого огород городить?
    Ку...
    Re[11]: Идеологически правильный мегарулез
    От: Кодт Россия  
    Дата: 28.06.05 10:44
    Оценка: 1 (1) :))) :)
    Здравствуйте, Дарней, Вы писали:

    Д>Здравствуйте, Сергей Губанов, Вы писали:


    Д>взялся бы ты лучше за функциональные языки, честное слово


    Ужасужасужас. Как сейчас представляю:
    "Эрланг супротив Оберона — сынок, в нём нет статической типизации. Лисп — ваще сынок, там по скобкам оверхед. Джей и Кей — пара братьев-уродцев, совершенно нечитаемый код. А чтобы на Обероне ФП-программы писать, достаточно взять исходники блекбокса и в двадцати местах руками поправить. Делов-то".
    Перекуём баги на фичи!
    Re[6]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 09.06.05 10:20
    Оценка: -2 :)))
    Здравствуйте, Курилка, Вы писали:

    К>Т.е. на паскалеподобном языке не пишут промышленный код?


    1) Не на Паскале подобном (он устарел более чем двадцать пять лет назад), а на Modula/Oberon — подобном.
    2) Для разных языков общепринятые способы оформления текста — разные. Для Си-образного языка, я насчитал оверхед по оформлению в 700 процентов по сравнению с минимально возможным.
    Re[2]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 09.06.05 11:39
    Оценка: :))) :))
    Здравствуйте, tarkil, Вы писали:

    T>В Вашем синтаксисе неясно, что "y" это вызов функции.


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

    "value := y()" — вот это вызов функции.
    "value := y" — вот это присвоение значения переменной value. В том случае если ее тип есть процедурный тип, то присваивается адрес процедуры y. А просто отдельно стоящее "y" безо всего однозначно обозначает только вызов процедуры.

    T>идентификаторы ЗАГЛАВНЫМИ буквами. Вот это напрягает втрое больше, чем все сишные скобочки вместе взятые — ну не ориентированы шрифты на то, чтоб подряд идущие заглавные хорошо читались! Те, кто рисуют шрифты добиваются того, чтобы строчные буквочки плавно взглядом воспринимались, а на заглавных взгляд чтобы наоборот — спотыкался.


    Совершенно согласен с тем, что шрифты семейсва Courier в заглавных буквах смотрятся не очень, а ведь именно они по умолчанию стоят в ряде популярных IDE. Однако, есть другие шрифты, например, Verdana — заглавные буквы выглядят очень красиво. Кстати, я у себя в MS Visual Studio 2003 поставил именно шрифт Verdana — совсем другой вид.

    T>Берёшься сравнивать — сравнивай добросовестно. Мы технари, а не рекламисты. Imho.


    Я добросовестно оформил текст примеров именно так как общепринято оформлять текст на языках Си и Modula/Oberon.
    Re[11]: Горе программисты
    От: Socrat Россия  
    Дата: 10.06.05 11:10
    Оценка: +3 :))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Эх горе программисты повсюду развелись понимаеш-ш-ш-шь...

    СГ>Всё делать самому приходится...

    Так мы с самого начала этого и хотели... Чтобы потом претензий не было.
    Re[13]: Ошибка 3
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 15.06.05 14:38
    Оценка: -3 :))
    Здравствуйте, Mamut, Вы писали:

    M>Как видим, реальный пример на Обероне ничем не лучше, а даже хуже аналогичного примера на С/С++


    Как видим, реальный пример на Обероне значительно лучше аналогичного примера на С/С++.

    M> Кстати, вопрос — почему Паскалеподобные языки до сих пор так упорно цепляются за жесткое разделение FUNCTION/PROCEDURE, если разницы в них — практически ноль?


    Учите матчасть. Слово FUNCTION было только в Паскале 1970 года. В Оберонах его нет.

    M>И еще вопрос, на засыпку — вопрос о непоследовательности языка. Почему делить — "DIV", а сложить — "+", а не "ADD"?


    Это Вам, вообще-то, надо обращаться в начальную школу — там где деление проходят. Открою Вам секрет. Оказывается если сложить два целых числа, то результат тоже будет целым числом (поэтому и "+"). В то же самое время, если разделить два целых числа, то результат будет уже вовсе не целым, а рациональным числом (поэтому DIV).

    M>В общем, Оберон проиграл — это я невооруженным взглядом говорю И не в лексемах дело, а в ясности и отсутствии лишнего визуального шума.


    В общем, Оберон победил — это я невооруженным взглядом говорю И не в лексемах дело, а в ясности и отсутствии лишнего визуального шума.
    Re[9]: Очередной яркий пример
    От: alexku Россия  
    Дата: 22.06.05 12:51
    Оценка: +2 :)))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Например,


    СГ>TYPE Func: PROCEDURE(): Func;


    СГ>VAR a: Func;


    СГ>IF a # NIL THEN ... END

    СГ>это одно (сравнивается значение процедурной переменной "a")

    СГ>IF a() # NIL THEN ... END

    СГ>а это совсем другое (сравнивается значение которое возвращается процедурой с которой связана процедурная переменная "a")

    То есть, забыл скобки — получил глюк.
    -Оберон лучше чем С++!
    -Чем Оберон лучше С++?
    -Тебе же ясно сказано! Чем С++!
    Re[2]: Идеологически правильный мегарулез
    От: Кодт Россия  
    Дата: 25.06.05 11:41
    Оценка: +4 :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Мы можем выйти из нескольких вложенных WHILE/REPEAT циклов. Внешний цикл делаем LOOP-ным, а все вложенные циклы делаем WHILE/REPEAT-ными. Тогда EXIT прервет все циклы сразу. А вот если бы EXIT прерывал бы не только LOOP-ные циклы, но и все остальные, то из нескольких вложенных циклов (без goto или RETURN) выйти было бы (по быстрому) нельзя.

    СГ>
    СГ>LOOP
    СГ>  ...
    СГ>  WHILE...
    СГ>    ...
    СГ>    REPEAT... (* много вложенных WHILE/REPEAT циклов *)
    СГ>      ...
    СГ>      WHILE...
    СГ>        ...
    СГ>        IF c THEN EXIT END; (* выход из всех циклов, на конец текущей LOOP-ной итерации *)
    СГ>        ...          |
    СГ>      END;           |
    СГ>      ...            |
    СГ>    UNTIL...;        |
    СГ>    ...              |
    СГ>  END;               |
    СГ>  ...                |
    СГ>END                  |
    СГ>...---<--------------+
    СГ>

    СГ>Конечно, если вложенные циклы, тоже LOOP-ные, то описанный тут механизм работать не будет (EXIT выведет только на конец ближайшего LOOP-а).

    Это даже не синтаксический сахар. Это синтаксический самогон
    Программа становится офигенно понятной. Уж лучше иметь break с меткой, чтобы явно указывать точку отстрела.
    Перекуём баги на фичи!
    Re[12]: Определение циклов
    От: Sergey J. A. Беларусь  
    Дата: 27.06.05 14:08
    Оценка: +1 :))) :)
    Здравствуйте, Сергей Губанов, Вы писали:

    SJA>> Дайте правила, по которым можно определить — структрная конструкция или нет.


    СГ>Не дам. Тут смысл нужно понимать.


    Ок. Отвественно заявляю, что Оберон ни для чего не пригоден. Доказательств не дам. Тут смысл нужно понимать.
    Я — свихнувшееся сознание Джо.
    Re[7]: Идеологически правильный мегарулез
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.06.05 14:43
    Оценка: -3 :))
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Короче, это уже не смешно.

    SJA>На всякий случай, напомню, что EXIT может выбросить из WHILE или REPEAT по совершенно другому условию, если WHILE находится внутри LOOP.

    Существует разница между завершением и прерыванием цикла.

    EXIT — завершает цикл LOOP, но прерывает вложенные в LOOP другие циклы навроде WHILE/REPEAT

    Прервать циклы WHILE/REPEAT можно несколькими способами: HALT(), ASSERT(FALSE), RETURN, LOOP-ный обертывающий EXIT.

    Но завершить циклы WHILE/REPEAT можно только одним единственным способом.

    Поэтому следующий код корректен
    WHILE отмерено меньше семи раз DO отмерять END;
    Отрезать (* Режем не делая более ни каких проверок.  Мы уже не спрашиваем можно ли отрезать, а просто режем!!! *)
    
    REPEAT узнавать где брод DO узнал END
    Соваться в воду (* Суемся в воду не делая более ни каких проверок. Просто суемся!!! *)

    В Си while/do можно завершить несколькими способами (+break, +goto), поэтому они не могут называться WHILE/REPEAT циклами.
    Для Си код аналогичный вышепреведенному, вообще говоря может быть не корректен, так как причина завершения сишных циклов while/do с break и goto на момент написания и компиляции программы не известна. Истинная причина завершения сишных while/do с break и goto может быть выяснена только динамически во время работы программы.
    while (отмерено меньше семи раз) {отмерять +"break", +"goto"}
    if(отмерено не меньше семи раз) // лишняя проверка
    {
      Отрезать
    }
    else
    {
      Error!!!
    }
    
    do {узнавать где брод +"break", +"goto"} while (не узнал)
    if(узнал) // лишняя проверка
    {
      Соваться в воду 
    }
    else
    {
      Error!!!
    }
    Re[13]: Народ упорно не врубается
    От: Sergey J. A. Беларусь  
    Дата: 28.06.05 14:01
    Оценка: +1 :))) :)
    Здравствуйте, Privalov, Вы писали:

    MN>>Даже смотреть не буду (трафик не резиновый) — уверен, что не помогло !


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


    Я бы даже сказал, структурный подход к лечению
    Re[12]: Народ упорно не врубается
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.06.05 08:45
    Оценка: -4 :)
    Здравствуйте, Mr. None, Вы писали:

    MN>Вы русский язык понимаете вообще? Вам были заданы простейшие вопросы, вы можете на них ответить предельно просто: да или нет.


    Да.

    (В смысле русский язык понимаю)
    Re[14]: Идеологически правильный мегарулез
    От: Sergey J. A. Беларусь  
    Дата: 29.06.05 09:53
    Оценка: +2 :)))
    Здравствуйте, Сергей Губанов, Вы писали:

    SJA>>Да не. break прерывает, а не завершает. Он так и переводится — прервать.


    СГ>Термины "завершение цикла" и "прерывание цикла" я полностью объяснил в своем сообщении
    Автор: Сергей Губанов
    Дата: 28.06.05
    .


    Я тоже уже объяснял, что while это синтаксический сахар над
    LOOP
        WHILE x DO
        END
        (* A *)
    END


    Более того, С-ниый while не даёт программисту вписывать код в точку A. Это предотвращает ошибки. Почему в обероне так не сделано — мне не понятно. Зачем писать лишие LOOP-ы, причём с позможностью ошибится и вставить код в точку A. при этом, если цикл прервётся, то этот код не будет выполнен ! C-шный while такого не позволит ! C-шный while защищает программиста от ошибок, в отличии от Обероновского !
    Я — свихнувшееся сознание Джо.
    Re[5]: Синтаксический оверхед
    От: achp  
    Дата: 29.06.05 15:41
    Оценка: :))) :))
    Здравствуйте, Mamut, Вы писали:

    M>Кстати, а Оберон поддерживает распараллеливание кода?


    Несчастный, да как ты посмел поставить такую скверну рядом со священным именем Оберона?!! Конечно же нет, ведь при параллелизме невозможно обеспечить формального выполнения ложности условия продолжения цикла по его завершении! Как же тогда проводить формальную верификацию программ?
    Re[4]: А эхо в ответ: мать...мать...мать...
    От: Mamut Швеция http://dmitriid.com
    Дата: 21.06.05 14:08
    Оценка: 9 (4)
    M>>Например, здесь показано
    Автор: Mamut
    Дата: 29.10.04
    , что вставка объектов в текст


    СГ>Там показана наглядная демонстрация басни про мартышку и очки — в StdLog написали текст программы.


    Тьфу блин. Я сейчас материться начну. Реально. Вы хотя бы изредка пытаетесь понять то, что вам говорят оппоненты? Там же, далее по ветке:

    здесь
    Автор: Mamut
    Дата: 31.10.04

    СГ>2) Для того чтобы написать свою программу нужно создать новый документ.

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

    СГ>3) Контролы, вообще-то, принято помещать на формы.

    Контролы, вообще-то, не принято вставлять внутрь исходного кода программы.


    И еще раз (раз мы уж скатились в повторение той ветки), скажите мне, что неправильно в высказанных
    здесь
    Автор: Mamut
    Дата: 29.10.04
    идеях.

    И еще раз, зачем упорствовать, если уже доказано
    Автор: Mamut
    Дата: 15.06.05
    , что Оберон не лучше С, и что среда BlackBox — это убожество, накорябанное на коленке (почти вся ветка здесь
    Автор: LaptevVV
    Дата: 20.10.04
    )

    И еще раз, почему ваши оппоненты приводят один факт за другим, в то время как единственные факты, что вы приводите это:

    - вы неправильно написали программу на обероне
    — это не оберон, это модула-2
    — это не модула, это зоннон
    — вы пишите код не туда, куда надо
    — компонентность- это круто
    — gc — это круто
    — паскальный синтаксис — это круто


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

    - Синтаксис Оберона является превосходящим по отношению к С-подобному синтаксису
    — Модульный подход Оберона к написанию програм являтся единственно верным подходом
    — Оберон является языком, превосхожящим С/С++ по гибкости стройности и проч.
    — Среда BlackBox является превосходной системой для написания кода и для изучения в школах


    Объясняю, почему вы не смогли этого доказать:

    1. Синтаксис
    На протяжении всей этой ветки вам неоднократно было показано/доказано/рассказано, что паскальный синтаксис не является оптимальным по одной единственной причине. Программисту налевать на компилятор, тот и сам справится. Программисту надо писать код, читать его и сопровождать. Все это делается намного легче с синтаксисом С, чем с синтаксисом Паскаля

    2. Модульность
    Вы так и не дали определений ни компонентного ни модульного программирования. Не буду сейчас искать тот ответ, где в двух словах было показано, что С# является не менее модульным языком.

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

    - В обероне такого нет.
    — Сборщик мусора с этим справится
    — Система сама разберется
    — Идите учите мат. часть


    3. Язык
    Единственным преимуществом Оберона называлась его модульность и компонентный пожход. См. пункт 2

    4. BlackBox
    Ставятся рядом BlackBox и Visual Studio, можно Express Edition, а также Eclipse и KDevelop, до кучи. У вас могут возникнуть еще какие-нибудь вопросы об убогости BlackBox'а?




    Единственным человеком, что решил отречься от фанатизма, был AVC. В одной из веток он верно отметил, что Оберон предназначен для работы в системе, построенной на нем же. И так же отметил, что BlackBox — это и есть эмлятор такой вот системы. Единственные доступные для изучения системы такого рода, что можно пощупать, — это BlueBottle и BlackBox.

    Что остановило сообщество RSDN от детального изучения этих систем? Отсуствие явного смысла в их изучении. Они не предлагают ничего нового ни в программировании ни в операционных системах, имхо. Если я захочу экстрима, я загружу Smalltalk и мне от этого будет намного больше пользы.

    И вот, наконец-то вопрос.

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

    Синтаксис? Доказано уже, что он не лучше, а во многом и хуже других синтаксисов
    Какие-нибудь новые парадигмы в программировании? Опять же нет.
    Легкость в обучении? Вряд ли
    Легкость в разработке? Опять же нет?

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


    dmitriid.comGitHubLinkedIn
    Re[2]: Синтаксический оверхед
    От: achp  
    Дата: 21.06.05 15:49
    Оценка: 9 (3) +1
    Здравствуйте, AVC, Вы писали:

    AVC>Когда программист пишет (или, что важнее, читает) на Модуле/Обероне цикл "WHILE p DO ... END" он абсолютно уверен...

    AVC>...на Си/Си++, он не может быть в этом уверен, т.к. внутри цикла может находиться как оператор break, так и знаменитый goto.

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

    "Академический" подход ставит структурность в сугубо формальные рамки и заявляет о её самоценности.

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

    "Академический" подход спекулятивен: его сторонник созерцает код и склонен к проведению формальной верификации программ. "Вот у нас есть кусок кода — цикл. Каков его консеквент?"

    "Прагматический" подход сугубо конструктивен: его сторонник ставит себе задачу написания кода, и применяет структурирование программы для облегчения её решения. "Напишем-ка цикл... А вот тут выйдем досрочно по break..."

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

    Каков итог? Ни Оберон, ни Фортран-II популярностью не пользуются, а Си++ — пользуется.
    Re: Синтаксический оверхед
    От: AVC Россия  
    Дата: 21.06.05 10:12
    Оценка: 6 (2) :))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.

    СГ>2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо (чтобы читающему понятно стало где что написано).

    Сергей, Вы затронули интересную тему.
    В отличие от модераторов RSDN, я не считаю ее смешной.
    Но мне кажется, что "количественный" аспект здесь не главный.
    Предлагаю Вам расширить тему и рассмотреть некоторые "качественные" аспекты.
    Эту расширенную тему можно было бы, например, назвать "Исходные тексты в Си/Си++ и Обероне".
    Я набросал несколько несколько наблюдений.
    Получилось примерно следующее.

    1. Собственно синтаксис.

    а) Соответствие структурным принципам.

    В отличие от синтаксиса Модулы/Оберона синтаксис Си/Си++ не соответствует принципам структурного программирования.
    Рассмотрим хотя бы циклы.
    Когда программист пишет (или, что важнее, читает) на Модуле/Обероне цикл
    WHILE p DO ... END

    он абсолютно уверен, что перед следующим оператором после выхода из цикла выполняется условие ~p (NOT p).
    Если программист читает аналогичный цикл
    while (p) { ... }

    на Си/Си++, он не может быть в этом уверен, т.к. внутри цикла может находиться как оператор break, так и знаменитый goto.
    Соответственно, проверка корректности программы существенно затрудняется.
    То же относится к циклам REPEAT UNTIL ~p и do {} whiie (p).

    б) Синтаксический "оверхед".

    Я согласен с Сергеем, что в синтаксисе Си/Си++ заключен значительный "оверхед".
    Но таится он в основном в величине и сложности языка и его описания, а также в некоторых синтаксических деталях.
    Например, в количестве уровней и запутанности приоритетов операторов.
    Скажите честно: многие ли помнят таблицу приоритетов операторов Си/Си++ полностью?
    И сравните это с Обероном, где всего четыре уровня приоритетов:
    1) операция ~ (логическое отрицание);
    2) мультипликативные операции;
    3) аддитивные операции;
    4) сравнения.
    Остается добавить, что операции одного приоритета выполняются слева направо. И все. Что, сложно?

    2. Исходные тексты Си/Си++ и документы Оберона.

    Есть существенное различие в работе с исходными текстами программ на Си/Си++.
    Программа на Си/Си++ — это по-прежнему обыкновенный текст.
    Программа на Обероне — это документ, включающий в себя не только текст, но и множество самых разнообразных объектов.
    (Причем это различие существует еще с 1980-х годов.)
    ИМХО, это существенно сказывается на удобстве разработки.
    Попытаюсь это обосновать.

    а) Документирование программ.

    Вот простой пример.
    При разработке программы со сложным алгоритмом обыкновенно требуется делать ссылки на литературу: ищи пояснения в такой-то книге, на такой-то странице.
    Мне же оказалось достаточно взять требуемые фрагменты (и, что немаловажно, с "картинками" ) из документа, содержащего известную книгу Кормена, Лейзерсона и Ривеста, и вставить как комментарий в программу на Компонентном Паскале прямо перед соотвествующим им кодом.
    Алгоритм теперь читается и понимается легко и даже приятно.
    Кроме того, благодаря тому, что все ключевые слова состоят только из заглавных букв и благодаря этому выделяются сами собой, программист может использовать цвет букв (а также размер и шрифт) по своему усмотрению для выделения особо важных фрагментов кода. Скажем, не уверен в данном коде — пометил его красным: проверить! Это очень эффективная система, т.к. цвет бросается в глаза, и такой участок кода трудно не заметить.
    Напоминаю, что подобные возможности доступны в Обероне с 1980-х.
    А что же Си/Си++?

    б) Тестирование программ.

    Надеюсь, никто не будет спорить, что надо тестировать как программы в целом, так и отдельные компоненты и подпрограммы.
    На Си/Си++ тесты, как правило, хранятся в отдельных файлах и "запускаются" отдельными скриптами, которые тоже хранятся в отдельных файлах. В итоге, хранение этих вспомогательных, но необходимых файлов вырастает в целую проблему.
    (Я уж молчу о той деликатной детали, что многие Си++программисты вообще не хранят тестов. По принципу: протестировал — и забыл. Если не забыл протестировать... )
    На Обероне/Компонентном Паскале тесты могут храниться в самом исходном документе: после точки или в комментарии.
    С помощью команд в обероновской среде можно запускать тесты для отдельных компонентов и даже отдельных подпрограмм. Для этого я помещаю тестовые команды прямо в исходном модуле, а коммандеры с исходными данными для тестов — после точки или в комментарии. Достаточно одного щелчка мыши, чтобы запустить нужный тест.
    После того, как я протестировал модуль, я не убираю тестовые команды в комментарии (и уж, тем более, не удаляю их!), а прячу в складку (fold). Опять же достаточно будет щелчка мыши, чтобы их восстановить.
    Исходный код, спрятанный в складке, не компилируется, поэтому спрятанные тесты ничего не "весят".
    По моему, это удобно.
    А что же Си/Си++?

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re[10]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 10.06.05 11:22
    Оценка: 3 (2) +2
    Здравствуйте, Пацак, Вы писали:

    П>Символы (не считая отступов): 113;


    Пробелы в Обероне являются синтаксически важными элементами. Они разделяют лексемы.
    (пробел — это последовательность пробельных символов, переводов каретки и комментариев).
    Оберон с его голыми ключевыми словами требует вставку разделителей — будь то нейтральные лексемы (скобки и ";") или пробелы.
    IFcTHENtELSEeEND (* неправильно *)
    IF c THEN t ELSE e END (* с пробелами *)
    IF(c)THEN t;ELSE e;END (* с нейтральными лексемами *)
    IF(**)c(**)THEN(**)t(**)ELSE(**)e(**)END (* с пробелами из комментариев *)

    В С++ потребность в пробельных разделителях меньше: гораздо чаще синтаксис явно требует разделительные лексемы.
      if(c)t;elsee; // неправильно
    
    //  v-v-v------v--- обязательные лексемы-разделители
      if(c)t;else e;
    //           ^----- вот здесь пробел потребовался
    Перекуём баги на фичи!
    Re[8]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 16.06.05 12:48
    Оценка: 3 (1) +1 :))
    Pavel Dvorkin wrote:

    > К>Почему сразу алгебру? Начнём с некоммутативных групп и далее в

    > сторону усложнения...
    > К>И почему нельзя? Я привёл два примера, в которых 2+2=2*2=5.
    > Господи, и зачем я про 2*2=5 сказал вообще! Так я и знал, что
    > дискуссия развернется!

    : )

    > Ну раз уж так, а мы все же в "Коллеги, улыбнитесь", предлагаю еще

    > обсудить следующие темы
    > a!=a

    Перегружаем оператор != — и никаких проблем

    > true==false.

    > Может, это тоже когда-то бывает ?

    #define false true


    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[20]: Ошибка 3
    От: Кодт Россия  
    Дата: 17.06.05 10:16
    Оценка: 3 (1) :)))
    Здравствуйте, Sinclair, Вы писали:

    C>>Есть предложение придать этому фильтру звание бритвы, по аналогии с бритвами Оккама и Хэнлона

    S>А это что, простите мне мое невежество?

    Хэнлон: "Не усматривайте злого умысла в том, что вполне объяснимо глупостью".
    Перекуём баги на фичи!
    Re[5]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 20.06.05 13:52
    Оценка: 3 (2) +2
    C>>3. НЕУДОБНО писать ключевые слова большими буквами.

    СГ>Чего в этом не удобного?

    СГ>Читать тоже удобно — зарезервированные слова сразу видно. Именно для этого и было придумано писать служебные слова заглавными буквами. Шрифт, цвет, наклон можно использовать уже для других целей нежели синтаксических.

    Сергей, за вами замечена очень плохая привычка. Как только вам доказывают вашу неправоту, основываясь на фактах, как вы выпадаете из обсуждения или начинаете "докапываться", например, к тому, что ваш оппонент неправильно пишет программы на Обероне.

    Описание того, почему синтаксис Оберона неудобен, и почему он не лучше синтаксиса си я разобрал здесь: Читать всем &mdash; статистика и читаемость
    Автор: Mamut
    Дата: 15.06.05
    .


    dmitriid.comGitHubLinkedIn
    Re[7]: Синтаксический оверхед
    От: CrystaX Россия https://crystax.me/
    Дата: 21.06.05 10:03
    Оценка: 3 (1) +3
    Здравствуйте, Сергей Губанов, Вы писали:

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


    CX>>...минимальное количество лексем?


    СГ>Минимальное для базовых инструкций (IF, CASE, WHILE, ...), но, естественно, не меньше одной лексемы между идентификаторами пользователя.


    Ок, тогда следующий вопрос. На кого направлена эта правильность? Для кого это правильно? Для разработчика компилятора? Несомненно. Говорю об этом как человек, принимавший участие в разработке компилятора perl-like языка.
    А для пользователя этого языка? Согласитесь, Сергей, их несравнимо больше. Ведь вся современная индустрия движется в направлении улучшения usability. Примеров тому огромное множество, причем с IT даже и не связанных. Давайте сравним два участка кода (простейших), написанных на Обероне и на C:

    if(x) a();


    IF x THEN a END


    В первом случае мне понадобилось 10 нажатий клавиш. Во втором — 15. Это не говоря уж о необходимости периодически удерживать SHIFT. То есть да, лексем в первом примере больше (8), чем во втором (5), но вот ведь беда — пользователь мыслит не лексемами, а логическими блоками (узлами AST, если угодно). Так вот, что в первом, что во втором примере таких блоков одинаковое количество. Но первый пример лучше для пользователя, так как меньше нажатий клавиш. Вот вам и критерий правильности синтаксиса с точки зрения пользователя: минимальное количество символов (не лексем!) при сохранении логической ясности.
    Вы спрашиваете, как долго будет существовать такой C-синтаксис? Отвечу Вам — до тех пор, пока не придумают новый, более удачный с точки зрения минимизации символов в типовых конструкциях. Но, боюсь, в скором времени этого еще не произойдет.
    Да, язык C++ с точки зрения разработчика компилятора этого языка ужасен. Но как он удобен множеству его пользователей! Да-да, удобен, иначе он давно уже был бы мертв.
    Это именно то, о чем я писал в самом первом своем сообщении: "компилятор — наш раб, а не наоборот, поэтому все ок". Меня не волнует, сколько лексем придется обработать компилятору, прежде чем он выдаст рабочий код. Меня не волнует, сколько стенаний и потрясаний кулаками произвели разработчики компилятора во время его разработки. Меня волнует один единственный критерий — насколько мне удобно использовать этот язык. А удобство это напрямую проистекает из количества нажатий клавиш. Вот если бы были клавиатуры, на которых каждая клавиша — это готовая лексема, тогда, возможно, что-то изменилось бы.

    Вот, собственно, и все, что захотелось сказать по данному вопросу. Если у Вас будут возражения по существу — добро пожаловать, готов обсудить.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[9]: Синтаксический оверхед
    От: CrystaX Россия https://crystax.me/
    Дата: 22.06.05 16:15
    Оценка: 3 (1) :)))
    Здравствуйте, Кодт, Вы писали:

    К>ZX Spectrum, БК-001, ещё какие-то модели микрош-ириш такой фичей обладали. Одна кнопка — одна лексема васика. У БК и Спектрум они даже подписаны были (соответственно, имели несколько шифт-клавиш ).

    К>МИР (Машина Инженерных Расчётов), насколько я слышал, тоже (свой собственный язык программирования).


    А ты японскую печатную машинку видел? Ту, что для составления совсем официальных документов, которые обязательно нужно на японском писать? Вообще-то они вполне английским обходятся для официальных документов, но есть небольшая категория таких, что только по японски можно.
    Рассказываю: стоит этакий гроб на ножках размером (если сверху смотреть) приблизительно метр на метр. По нему ездит станина со ступенчатой передачей, а по станине в направлении, перпедикулярном направлению движения станины, ездит хреновина килограмма на два весом с рукояткой. Тетка (японская секретарша) сначала выставляет станину на нужный ряд, потом по станине двигает эту байду (не знаю даже как ее назвать) до нужного места, после чего хрясь по рукоятке! Готово, один иероглиф напечатан. Теперь для следующего иероглифа выполняем процедуру с самого начала. Там, конечно, далеко не все иероглифы, только те, что обычно требуются для официального письма. Но все же! Они приблизительно 5х5 мм, следовательно там их помещается ~40000. Я когда это первый раз увидел — охренел просто. И именно тогда я оценил простоту и рациональность латинского и кириллического алфавитов.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[23]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 24.06.05 12:30
    Оценка: 3 (1) :)))
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Вопрос такой: Вы допустили ошибку и посетовали, что Оберон бы такого не допустил. Я взял да и написал аналог на обероне тут
    Автор: Sergey J. A.
    Дата: 23.06.05
    , и допустил такую-же ошибку. Но "оберонистый оберон" не поправил меня. Вот это пожалста и прокоментируйте.


    Чего я могу сказать. Фигово всё это...
    Re[7]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 22.06.05 03:49
    Оценка: 2 (1) +1 :))
    Здравствуйте, Пацак, Вы писали:

    П>Здравствуйте, Сергей Губанов, Вы писали:


    П>>>... то я получу syntax error?

    СГ>>Ну да. Вы получите ошибку времени компиляции. Такая программа не будет скомпилирована. EXIT бывает только внутри LOOP ... END, а внутри WHILE или REPEAT его быть не может.

    П>Угу, ясно. Допустим (совершенно условно):


    П>
    П>while (queue.has_elements()) {
    П>    Elem elem = queue.get_first();
    П>    if (elem.get_state() == ST_FREE) {
    П>        elem.start_processing(...);
    П>        break;
    П>    } else { 
    П>        queue.make_last(elem);
    П>    }
    П>}
    П>


    П>И чо делать?


    Не корректный вопрос... Сударь не позорьте сообщество программистов на C++, а то нас всех обвинят ещё и в некомпетентности . Если следовать доказательству теоремы о структурировании, то поступить надо так:

    bool continueLoop = true;
    while(queue.has_elements() && continueLoop)
    {
        Elem elem = queue.get_first();
        if (elem.get_state() == ST_FREE)
        {
            elem.start_processing(...);
            continueLoop = false;
        }
        else
        {
            queue.make_last(elem);
        }
    }


    Хорошо или плохо — судить не мне, то что алгоритм (точнее реализация) получается сложнее — факт. Оберону эту проблему (усложнения реализации) тоже не решает — там код получится точно такой же. Но это и есть слепое следование принципу программирования без goto, которое, как я уже неоднократно подчёркивал, ни как не связано со структурной парадигмой (точнее структурная парадигма не включает в себя этот принцип).

    Это был не наезд — обидеть не хотел . Просто попытка вас поправить (не всем довелось изучать эту чудную теорему ).
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[7]: Синтаксический оверхед
    От: Socrat Россия  
    Дата: 23.06.05 06:26
    Оценка: 1 (1) +2 :)
    Здравствуйте, Сергей Губанов, Вы писали:

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


    S>>А еще типичная ошибка — вместо "==" в условии поставить "="...


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


    Сравни:

    while (*a++ = *b++);


    и

    LOOP 
      a[i] := b[j]; 
      IF b[j] = 0X THEN EXIT END;
      INC(i); 
      INC(j)
    END


    Язык с таким оверхедом вообще не имеет права существовать.
    Re[8]: Синтаксический оверхед
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 25.06.05 00:51
    Оценка: 1 (1) +2 -1
    Здравствуйте, jazzer, Вы писали:

    J>Скажи честно, тебе самому не надоело еще фигней заниматься?

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

    Вообще наблюдается весьма забавная тенденция. Сергей со своим обероном — не единственный поклонник академических проектов. Есть и другие Что меня забавляет — так это искреннее стремление перенести академические проекты из тепличной почвы мини-задач в современный мейнстрим. И происходит это, имхо, от катастрофического недостатка опыта по написанию настоящих приложений.
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[10]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 26.06.05 18:30
    Оценка: 1 (1) +1 :))
    Здравствуйте, Сергей Губанов, Вы писали:

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


    J>>Потому что он создавался именно для облегчения программирования на С (как и С по отношению к асму, кстати).

    J>>Цель сугубо практическая.
    J>>И обкатывался язык не на теоремах, а в руках действующих программистов на С.
    J>>Почитай D&E.

    СГ>Не надо быть прорицателем, чтобы понять, что реальная цель у аспиранта Страуструпа была защитить диссеру чтобы его взяли на работу.


    По себе судите?
    Если бы в результате моей диссеры появилось нечно подобное C++, я бы считал наполовину выполненным дело совей жизни
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[2]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 09.06.05 10:16
    Оценка: -2 :))
    Здравствуйте, Oyster, Вы писали:

    O>Эх... не поленюсь


    Дык, а лексический оверхед кто за Вас подсчитывать-то будет, Пушкин?

    У меня получилось 235 процентов, а у Вас?
    Re[2]: Синтаксический оверхед
    От: GlebZ Россия  
    Дата: 10.06.05 09:31
    Оценка: :))) :)
    AF>Сергей! Не в даваясь в детали дискуссии (всё что можно и что нельзя сказали без меня ), вы никогда не задумывались — почему Джордано Бруно кончил карьеру не так, как Галилей?
    Оберон все таки вертится?

    С уважением, Gleb.
    Re[2]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 10:26
    Оценка: :))) :)
    Здравствуйте, AndreyFedotov, Вы писали:

    AF>Сергей! Не в даваясь в детали дискуссии (всё что можно и что нельзя сказали без меня ), вы никогда не задумывались — почему Джордано Бруно кончил карьеру не так, как Галилей?


    Тогда не было интернета. Вот если бы все ковбои отметившиеся в этой ветке были бы собраны в одной комнате, то я бы конечно не рискнул войти в эту комнату запереть ее изнутри и сообщить присутсвующим что Си-образный синтаксис оказывается устарел 25 лет назад. А с интернетом, глядишь, по голове не настучат
    Re[9]: Oberon - Примеры кода
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 10:43
    Оценка: -3 :)
    Здравствуйте, Mamut, Вы писали:

    M> Дебагить его тоже невозможно


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

    Лично я, например, в дебагере не сижу вообще:
    1) Использую математически доказуемые алгоритмы.
    2) Если не могу выполнить пункт (1), то делаю так что программа сама сообщает где ошибка.

    M> На более-менее реальных примерах Оберон в десятки раз проигрывает в читаемости.


    А вот тут как на счет читаемости:
    while (x = a() ? b(k[i++]) : c(l[j--]) ) d(x);


    http://www.rsdn.ru/Forum/Message.aspx?mid=1215442&amp;only=1
    Автор: Пацак
    Дата: 09.06.05
    Re[16]: Устаревший блок begin end
    От: moudrick Россия http://community.moudrick.net/
    Дата: 10.06.05 10:51
    Оценка: :))) :)
    Здравствуйте, Mamut, Вы писали:

    СГ>>А еще есть MODULE ... BEGIN ... CLOSE ... END


    СГ>>В данном случае BEGIN END — это не самостоятельный блок, а часть составной инструкции PROCEDURE или MODULE.



    M>Смотрим сюда
    Автор: Mamut
    Дата: 10.06.05
    и видим, что если не BEGIN, то END присутствует в Обероне повсюду. Так, если быстренько посчитать разницу между [BEGIN + ]END ([пять + ]три символа, написанных заглавными буквами) и комбинацию {} (два символа, выделяющих группу), то увидим, что лексемы — побоку, главное — читаемость.


    Я все понял. Чтобы С победил Оберон, надо просто упразднить {
    Re[11]: Oberon - Примеры кода
    От: Трурль  
    Дата: 10.06.05 12:38
    Оценка: :))) :)
    Здравствуйте, Mamut, Вы писали:

    M>
    M> IF v = TRUE 
    M>


    Повбивав би!.
    Re[3]: Синтаксический оверхед
    От: jazzer Россия Skype: enerjazzer
    Дата: 20.06.05 16:39
    Оценка: +4
    Здравствуйте, Сергей Губанов, Вы писали:

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


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


    СГ>Естественно.


    СГ>Но вопрос в другом. Точнее их два.


    СГ>1) Правильный синтаксис был известен уже в 1979 году (Modula 2).


    Правильный синтаксис, минимизирующий количество лексем, никому не интересен.
    Всем интересен синтаксис, минимизирующий количество нажатий кнопок на клавиатуре.

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

    Сергей, ты же теорфизик, тебе ли не понимать важности не отвлекающих внимания обозначений!
    Представь, что все формулы стали записываться без обозначений — вместо них пишутся словами "равно", "в степени" и т.д. — много ты наработаешь?
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[8]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 21.06.05 09:29
    Оценка: :))) :)
    Здравствуйте, Mamut, Вы писали:

    C>>>Для того, чтобы можно было удобно изменять код (менять if/elseif на

    C>>>switch, менять while на if и т.п.).

    СГ>>Должно быть, прикольное занятие. А в чем его смысл?


    M>Вам такое понятие, как refactoring известно? Или вы спазу пишете правильный код, не требующий изменений?


    на обероне онож сразу всё безошибочно выходит, ничего рефакторить ненужно
    Re[10]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 13:47
    Оценка: -3 :)
    Здравствуйте, moudrick, Вы писали:

    M>Здравствуйте, Сергей Губанов, Вы писали:


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


    CX>>> Для кого это правильно?


    СГ>>Вообще. Без относительно к чему-либо. Теорема Пифагора для кого правильна?

    M>Для Евклидового пространства.

    Евклидовое пространство является частью ее формулировки (что такое Сбитень? Это Першин. А что такое Першин? Это сбитень.) Но для кого она правильна?

    M>Поэтому же не считаются и скобки.


    Смотря какие скобки. Скобки в выражении поставленные просто так для наглядности — не считаются. Скобки в инструкции необходимы согласно определению си-образного синтаксиса. Инструкция while написанная без скобок не будет скомпилирована, так как это будет синтаксической ошибкой. В этом случае скобки считаются.
    Re[5]: Необходимые пояснения
    От: Mamut Швеция http://dmitriid.com
    Дата: 21.06.05 14:57
    Оценка: +4
    Во-первых я голодный, а потому и злой.

    Но это не главное. Я привык, чтобы на мои ответы реагировали адекватно. И сам, по мере сил, пытаюсь адекватно реагировать на ответы других.

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

    Ключевое слово в последнем предложении — аргументы.

    Против аргументов, да еще поддержаных фактами, не попрешь. Вернее, попрешь, но с еще более убедительными аргументами.

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

    Причины, по которой я продолжаю участвовать в этой дискуссии, следующие:

    1 (и главное). Здесь участвуют очень интересные люди с большим опытом в программировании, чье мнение я уважаю и ценю. Даже среди того флейма, что мы породили, можно найти инетерсные мысли, куски кода, способы аргументирования и проч.

    2. Я тестирую себя. Хоть поле и неблагодарное, я смотрю, насколько мои собственные аргументы правильны. И, если они неправильны, я отойду в сторону, согласившись со своей неправотой.

    3. Мне интересно понаблюдать за Сергеем. Ага, как в лаборатории. Интересна реакция организма на критику

    Известно, что даже самый главный фанатик RSDNa, Vlad2, имеет право быть таким фанатиком. За его плечами опыт, в его руках очень немаленький проект (я о R#). Он стоит на своем, но стоит с аргументами в руках.

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

    Это все было мое могучее ИМХО и все обо мне, любимом Злой я и голодный


    dmitriid.comGitHubLinkedIn
    Re[9]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 19:38
    Оценка: -2 :))
    Здравствуйте, Пацак, Вы писали:

    П>Ну и где хваленое превышение в разы?


    33/24 = 1.375
    12/9 = 1.3333

    Тоже не хилый оверхедец.
    А если переписать си-образный код так как положено по общепринятым стандартам кодирования в промышленном программировании — фигурные скобки в любом случае и на новой строке, то и без того не хилый оверхедец возрастет еще.
    Re[10]: Яркий пример
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 07:02
    Оценка: +4
    СГ>Не можете написать ни первый ни второй случай. В чем смысл вопроса я не понял. Где костыли (хотя бы один) я тоже не понял.

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


    M>>И еще вопрос. Что удобнее писать:

    M>>
    M>>while(!stream.eof())
    M>>{
    M>>  // code
    M>>}
    M>>

    M>>или
    M>>
    M>>LOOP
    M>>  IF ~stream.end THEN
    M>>    {* code *}
    M>>  END
    M>>END
    M>>

    M>>?

    СГ>Тоже странный вопрос. В первом случае используется цикл с проверкой условия в начале итерации. Во втором случае используется безусловный цикл (исполняющийся вечно)


    Знаете, мне почти не приходилось использовать вечных циклов. Если мне вдруг понадобился вечный цикл, это значит, что я неправильно реализую алгоритм. Далее. Приведенный вами код на Оберонах логически не эквивалентен приведенному мной.

    Мой код: Пока у нас есть данные из сокета, обрабатывай их.
    Ваш код: Крутись бесконечно (?). Читай данные. Проверяй на конец потока. Обрабатывай

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

    Опять же вопрос. Почему нельзя по EXIT выйти ни из while ни из for? Почему эта привилегия оставлена LOOP'у. Ведь очевидно, что LOOP — это вырожденная форма while(true) или for( ; ; ) и не имеет право на самостоятельное существование.

    Более того, все циклы могут быть представлены в виде только while. О, нашел вот такую вот домашнюю работу: PostScript(текст), где while, for, и do-while могут быть переписаны в виде друг друга без потери начального смысла программы. Это позволяет мне, как программисту, выразить свои мысли настолько ясно, насколько я этого хочу.

    И, наконец, Wikipedia:

    Multiple points of exit

    The original structural programming advocated dividing programs into subsections that have single point of entry, and single point of exit. While usually there aren't many reasons to have multiple points of entry, very few programs naturally follow the single point of exit paradigm.

    A typical example of a simple procedure would be reading data from a file and processing it:

    open file;
    while (reading not finished)
    {
      read some data;
      if(error){
        stop the subprogram, inform rest of the program about the error;
        }
    }
    process read data;
    finish the subprogram;

    The "stop and inform" may be achieved by throwing an exception, second return from the procedure, labelled loop break, or even a goto. As the procedure has 2 exit points, it breaks the rules of Dijkstra's structured programming. Coding it in accordance with single point of exit rule would be very cumbersome. If there were more possible error conditions, with different cleanup rules, single exit point procedure would be extremely hard to read and understand, very likely even more so than an unstructured one with control handled by goto statements. On the other hand, structural programming without such a rule would result in very clean and readable code.

    Most languages have adapted the multiple points of exit form of structural programming. C allows multiple paths to a structure's exit (such as "continue", "break", and "return"), newer languages have also "labelled breaks" (similar to the former, but allowing breaking out of more than just the innermost loop) and exceptions.

    While using those abilities may bring both advantages and disadvantages to the readability, providing them is clearly advantageous, as the programmer may use them when they're fit and simply not use them when a single point of exit structure would be more appropriate.


    А Оберон упорствует в своем нежелании признать очевидное — то, что multiple exits нужны во всех циклах, а не только в недокостыле под названием LOOP


    dmitriid.comGitHubLinkedIn
    Re[12]: Синтаксический оверхед
    От: jazzer Россия Skype: enerjazzer
    Дата: 22.06.05 14:14
    Оценка: :))) :)
    Здравствуйте, Mamut, Вы писали:

    M>Можете считать то, что я написал псевдокодом.


    Нельзя, у псевдокода оверхед большой
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[14]: Синтаксический оверхед
    От: Privalov  
    Дата: 22.06.05 14:32
    Оценка: +2 :))
    Здравствуйте, Mamut, Вы писали:

    P>>Это, IMHO, стандартный метод превращения дискуссии во флейм. Вместо ответа по существу — выпячивание мелочей и игнорирование сути.


    M>Какой-то ответ
    Автор: Сергей Губанов
    Дата: 22.06.05
    там все же появился. Советую почитать. Я долго смеялся


    Да, я видел. По-моему, даже отметился. Что-то насчет классиков. Правда, это не поможет...

    P>>P.S. А BEGIN в Обероне существует! А кто-то кричал не своим голосом, что нет и что это устаревший синтаксис.


    M>"А она все же вертится"



    BEGIN видишь? А он есть! (c)
    Re[16]: Яркий пример
    От: alexku Россия  
    Дата: 23.06.05 11:36
    Оценка: +4
    Здравствуйте, AVC, Вы писали:

    AVC>Видели бы вы все себя со стороны!

    AVC>Попробуйте сами объяснить для себя присутствие столь многих и столь заведомо необъективных и даже откровенно злых людей на этом форуме, если эта тема так им неинтересна, если Оберон — такой уж плохой язык?
    AVC>Можете рассматривать это как "открытое письмо".

    Да бог с ними, Оберонами и Сиплюсплюсами. Дело не в них. Дело в том, как автор ветки ведёт дискуссию, какие аргументы приводит и как отвечает на прямо поставленные вопросы. Большинству здесь, ИМХО, не особенн-то интересна разница в этих языках, а оверхед и подавно. Личность автора ветки и его постинги — вот причина присутствия здесь "столь многих и столь заведомо необъективных и даже откровенно злых людей". Так что, обратившись лично к Mamut'у, Вы обратились не по адресу. Именно автор ветки своим неуважительным отношением к собеседникам, некомпетентностью и претензией на абсолютную истину заводит участников форума и заставляет их быть "необъективными и злыми", а не наоборот. Вот и всё объяснение.

    Предложите автору ветки посмотреть на себя со стороны.
    Re[20]: Яркий пример
    От: Sergey J. A. Беларусь  
    Дата: 23.06.05 13:47
    Оценка: +2 -1 :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>

    СГ>2) В, принципе, вместо слов IF, END и т.д. можно изобрести совершенно другие слова. Можно изобрести какую угодно другую семантику, но сам, так сказать, синтаксический скелет:

    СГ>

    СГ>* идентификатор * идентификатор * идентификатор * идентификатор * идентификатор ...
    СГ>


    СГ>имеющий всего лишь один единственный служебный разделитель — универсальная вещь — она не устареет никогда.


    СГ>Не нравится слово BEGIN, ну что-же, придумайте свой язык и используйте любое другое слово, главное сохраните упомянутый выше "синтаксический скелет".


    LOOP
    IF a DO
    EXIT
    END;
    x
    END

    Итак:

    * * a * * * x *

    Ы ?
    Я — свихнувшееся сознание Джо.
    Re[12]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 14:44
    Оценка: +1 -1 :))
    Здравствуйте, merlin.fs, Вы писали:

    MF> не очень понимаю этот спор


    И я тоже. Но каков addict...
    Re: Синтаксический оверхед
    От: McSeem2 США http://www.antigrain.com
    Дата: 24.06.05 06:17
    Оценка: :))) :)
    Здравствуйте, Сергей Губанов, Вы писали:

    [. . .]

    Ниасилил!
    Сергей, все это неимоверно круто, но тема е... ну ты понял. Не раскрыта в общем.
    McSeem
    Я жертва цепи несчастных случайностей. Как и все мы.
    Re: Идеологически правильный мегарулез
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 24.06.05 07:48
    Оценка: -1 :)))
    Данное сообщение посвящено объяснению практической ценности существования EXIT-а только в LOOP, но не в WHILE/REPEAT.

    Пацак здесь
    Автор: Пацак
    Дата: 24.06.05
    сформулировал общее мнение на этот счет:

    ...в обероне вообще до LOOP докатимся, как выяснилось. Можно конечно это рассматривать как идеологически правильный мегарулез, но как-то не воодушевляет...


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

    А вот, например, хотя бы и такую:

    Мы можем выйти из нескольких вложенных WHILE/REPEAT циклов. Внешний цикл делаем LOOP-ным, а все вложенные циклы делаем WHILE/REPEAT-ными. Тогда EXIT прервет все циклы сразу. А вот если бы EXIT прерывал бы не только LOOP-ные циклы, но и все остальные, то из нескольких вложенных циклов (без goto или RETURN) выйти было бы (по быстрому) нельзя.
    LOOP
      ...
      WHILE...
        ...
        REPEAT... (* много вложенных WHILE/REPEAT циклов *)
          ...
          WHILE...
            ...
            IF c THEN EXIT END; (* выход из всех циклов, на конец текущей LOOP-ной итерации *)
            ...          |
          END;           |
          ...            |
        UNTIL...;        |
        ...              |
      END;               |
      ...                |
    END                  |
    ...---<--------------+



    Конечно, если вложенные циклы, тоже LOOP-ные, то описанный тут механизм работать не будет (EXIT выведет только на конец ближайшего LOOP-а).
    Re[10]: Яркий пример
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 24.06.05 08:16
    Оценка: +3 -1
    Здравствуйте, Сергей Губанов, Вы писали:
    СГ>Признаться честно, мне не известны тонкости реализации конвееров. Но то что данные из оперативной памяти грузятся в регистр процессора много тактов всем известный факт. Так вот, очевидно, что для ускорения работы надо "смотреть в перед" и загружать те данные, которые в скором времени понадобятся заранее. Спрашивается как быть процессору если встречается оператор ветвления? Данные из какой ветви загружать заранее? Предпочтение отдается главной ветви (т.е. коду в THEN, а код в ELSE считается исполняемым с меньшей вероятностью. Прошу прощения если не совсем прав, еще раз напоминаю, что мне не известны тонкости реализации конвееров.
    Признаться, я не великий эксперт по написанию компиляторов. Но, имхо, язык, в котором эффективность результирующей программы зависит от порядка веток в IF — студенческая недоделка. Программист на языке высокого уровня должен быть как можно сильнее изолирован от подробностей архитектуры. Потому что эти подробности меняются уж очень часто. И вместо обучения программиста этим подробностям надо обучать компилятор.
    Иначе мы дойдем до маразма. Сергей, Оберон случайно не советует декларировать частоиспользуемые переменные до редкоиспользуемых? С мотивацией типа "у тех, кто декларирован первыми, больше шансов попасть в регистр, а не в стек. А современные процессоры быстрее работают с регистрами". Похожая логика, не так ли?
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[3]: Идеологически правильный мегарулез
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 24.06.05 10:27
    Оценка: -1 :)))
    Здравствуйте, Hobot Bobot, Вы писали:

    HB>А то только что рассказывали что из while может быть ровно один выход и вот на тебе...


    Дык выход выходу рознь.

    Одно дело завершить цикл WHILE/REPEAT и перейти к выполнению следующей за ним инструкции — что возможно лишь одним способом (а именно удовлетворить условиям завершения),

    а другое дело покинуть его (вместе со следующей после него инструкцией) вовсе по RETURN или по EXIT объемлющего "более крупного" цикла LOOP.

    Покинуть можно еще по ложному ASSERT() — прекращает выполнение текущей команды и по HALT() — завершает работу.
    Re[8]: Определение циклов
    От: Sergey J. A. Беларусь  
    Дата: 24.06.05 13:38
    Оценка: :))) :)
    Здравствуйте, Mamut, Вы писали:

    SJA>>Знаете, вчера проичитал чтатью в Википедии о структурном програмировании.


    M>О! Наконец-то! Хоть один человек!!! Я-то ссылку на эту статью уже, наверное, в четырех местах привожу

    Не подумайте про меня хорошо. Я её почитал только из желания ввязаться в спор
    Я — свихнувшееся сознание Джо.
    Re[14]: Определение структурного программирования
    От: Sergey J. A. Беларусь  
    Дата: 27.06.05 15:47
    Оценка: :))) :)
    Здравствуйте, Mamut, Вы писали:

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


    M>


    M>Ладно, эксперта по поиску в Гугле вызывали? Тута я


    Тссс ! Это Серёга должен нервничать, и искать ссылки, приводить доказательства. А мы будем степенно возражать
    "Нет, это не так." И ждать дальнейших доказательств.
    Я — свихнувшееся сознание Джо.
    Re[9]: Идеологически правильный мегарулез
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.06.05 08:36
    Оценка: -2 :))
    Здравствуйте, Пацак, Вы писали:

    П>
    П>while (a < 10) {
    П>    ++a;
    П>     if (foo()) break;
    П>}
    П>


    П>Имеем два сценария:

    П>1) значение a стало равно 10 и цикл завершился
    П>2) функция foo вернула true и цикл был прерван

    !(a < 10) — ЗАВЕРШАЕТ
    break — ЗАВЕРШАЕТ!!!!!!!!!!!!!!!!!!!!!!!!!
    goto на конец — ЗАВЕРШАЕТ

    return — ПРЕРЫВАЕТ
    throw куда подальше — ПРЕРЫВАЕТ
    goto куда подальше — ПРЕРЫВАЕТ
    assert — ПРЕРЫВАЕТ
    ...
    Re[2]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.06.05 14:39
    Оценка: +2 :))
    Здравствуйте, eandr, Вы писали:

    E>Абсолютная глупость.


    Однако же Вы зарегистрировались на этом форуме и первое Ваше сообщение посвятили именно этой абсолютной глупости. Задело за живое, я полагаю...
    Re: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 07.07.05 06:31
    Оценка: :))) :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.

    СГ>2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо (чтобы читающему понятно стало где что написано).

    СГ>Давайте посчитаем количественно этот перерасход?

    СГ>Хочется понять на сколько он "минимален", так сказать.

    ... поскипана почти вся полная ерунда ...

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


    Сергей, у Вас в корне неверная методика подсчёта.
    Вот, ознакомьтесь, что пишут здесь
    Автор: LIS
    Дата: 06.07.05
    куда более умный люди.

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

    ====================
    25 лет, с высшим образованием, ищу образованного молодого человека, разбирающегося в искусстве, философии Канта и Ницше, не согласного с теорией Дарвина и знающего ошибки в теории Эйнштейна... Напиши мне — а то очень трахаться хочется.
    =====================
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[10]: Синтаксический оверхед
    От: merlin.fs Украина  
    Дата: 03.08.05 07:20
    Оценка: +4
    Здравствуйте, Сергей Губанов, Вы писали:


    СГ>Кстати, в оберонах символ разыменования "^" в очевидных (однозначных) случаях писать не обязательно:

    Лучше это было не так.
    СГ>
    СГ>current.LeftInline.RightInline := current.RightInline;
    СГ>

    СГ>аналогично обстоит дело и в Дельфи. Компилятор понимает что имеется в виду.
    А потом сидишь в чужом коде разбираешься, и не может понять, как оно работает, пока не посмотришь на объявление переменной.
    ... << RSDN@Home 1.1.4 stable rev. 510>>
    Re[5]: Синтаксический оверхед
    От: Кодёнок  
    Дата: 14.06.05 08:05
    Оценка: 6 (3)
    СГ>А, ну, тут прошу прощения, в принципе ни чем. Просто оборот речи. Смысл оборота — гиперболизация масштаба, дескать отличается не на чуть-чуть, а сильно.

    Сергей, а вы знакомы с языком Eiffel? Он декларирует почти те же принципы, что и Оберон, только более проработанный, и конечно, более читаемый. Все возможности оберона он покрывает, AFAIK. Распространён и поддерживается достаточно широко.

    MODULE BottlesOfBeers; (* Andrejs Jansons 27.10.95 *)
    
          IMPORT Out;
    
          PROCEDURE Start*;
               VAR
                    bottles: INTEGER;
               BEGIN
                    bottles := 99;
    
                    REPEAT
                        Out.Int(bottles, 2);
                        Out.String(" bottles of beer on the wall, ");
                        Out.Int(bottles, 2);
                        Out.String(" bottles of beer.");
                        Out.Ln;
                        Out.String("Take one down, pass it around, ");
    
                        DEC(bottles);
    
                        Out.Int(bottles, 2);
                        Out.String(" bottles of beer on the wall.");
                        Out.Ln
                    UNTIL bottles = 1;
    
                    Out.String("1 bottle of beer on the wall, one bottle of beer.");
                    Out.Ln;
                    Out.String("Take one down, pass it around,");
                    Out.String(" no more bottles of beer on the wall");
                    Out.Ln
               END Start;
    
    END BottlesOfBeers.


    Eiffel:

    class BEERS
    
    creation
    
        make
    
    feature     -- Creation
    
        make is
            local
                i : INTEGER
                b : STRING;
            do
                from i := 99 variant i until i <= 0 loop
                    if i = 1 then
                        b := " bottle";
                    else
                        b := " bottles"
                    end -- if
                    io.put_integer(i);
                    io.put_string(b);
                    io.put_string(" of beer on the wall, ");
                    io.put_integer(i);
                    io.put_string(b);
                    io.put_string(" of beer,");
                    io.new_line;
                    io.put_string("Take one down and pass it around, ");
                    i := i - 1;
                    io.put_integer(i);
                    io.put_string(b);
                    io.put_string(" bottles of beer on the wall.");
                    io.new_line;
                end -- loop
                io.put_string("Go to the store and buy some more,");
                io.new_line;
                io.put_string("99 bottles of beer on the wall.");
                io.new_line;
            end;
    
    end -- class BEERS


    В Эйфеле, например, побольше возможностей для ОО и DBC, если бы вы боролись за Эйфель, вам было бы немного легче отбиваться от нападок С++-ников и можно было бы даже иногда нападать. А пока единственный серьезный аргумент, это "язык для встроенных или реал-тайм систем", этого недостаточно для потеснения С++
    Re[5]: Ошибка
    От: Кодт Россия  
    Дата: 15.06.05 14:43
    Оценка: 6 (2) :)
    Здравствуйте, Сергей Губанов, Вы писали:

    B>>Людей, которые пишут так вот в одну строчку я на работу не возьму.

    B>>Потому что прочесть этот код будет невозможно!

    СГ>А я не возьму на работу людей, которые потом не возьмут на работу описанных Вами людей.

    СГ>Не постигаю, что такого кроется невозможного прочитать элементарное: WHILE a DO x; y; z END

    Где же оно элементарное? Тут целая лишняя лексема есть.
    { oberon }
    WHILE a DO x ; y ; z END
    # python
    while a :  x ; y ; z
    Перекуём баги на фичи!
    Re[16]: Синтаксический оверхед
    От: Слава Шевцов Россия http://www.rentaguru.ru/
    Дата: 16.06.05 09:26
    Оценка: 6 (3)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>dF = 0

    СГ>*d*F = J

    СГ>где:

    СГ>* — оператор дуальности Ходжа

    И здесь отметился Ходжа Насредин.
    ----------------------------------------------------------------------------------------------
    Rentaguru
    Re[3]: Синтаксический оверхед
    От: Alex Alexandrov США  
    Дата: 18.06.05 19:32
    Оценка: 6 (2) +1
    Здравствуйте, Кодёнок, Вы писали:

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


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

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

    Так что, это — уважайте друг друга, господа.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    It's kind of fun to do the impossible (Walt Disney)
    Re: Синтаксический оверхед
    От: Аноним  
    Дата: 11.06.05 11:56
    Оценка: 5 (3)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.

    СГ>2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо (чтобы читающему понятно стало где что написано).

    А как на счет препроцессора?

    СГ>
  • Инструкция выполнения по условию
    СГ>a — условие
    СГ>x — выполняемое действие
    СГ>
    СГ>IF a THEN x END
    СГ>

    #define IF if(
    #define THEN ){
    #define END ;}

    СГ>
  • Инструкция выполнения по условию с альтернативой
    СГ>a — условие
    СГ>x, y — выполняемые действия
    СГ>
    СГ>IF a THEN x ELSE y END
    СГ>

    #define ELSE ;} else {



    СГ>
  • Сложная инструкция выполнения по условию
    СГ>a, b — условия
    СГ>x, y, z — выполняемые действия
    СГ>
    СГ>IF a THEN x ELSIF b THEN y ELSE z END
    СГ>


    #define ELSIF ;} else if(


    СГ>
  • Цикл с проверкой условия в начале итерации
    СГ>a — условие выполнения итерации
    СГ>x — выполняемое действие
    СГ>...
    СГ>
    СГ>WHILE a DO x END
    СГ>

    #define WHILE while(
    #define DO ){
    END — как выше.

    СГ>
  • Цикл с проверкой условия в середине итерации
    СГ>a — условие завершения
    СГ>x, y, z — выполняемые действия
    СГ>
    СГ>LOOP 
    СГ>  x;
    СГ>  IF a THEN y; EXIT END;
    СГ>  z
    СГ>END
    #define LOOP for(;;){
    #define EXIT break
    
    
    СГ>[*] Цикл с проверкой условия в конце итерации
    СГ>a - условие продолжения
    СГ>b - условие завершения
    СГ>x - выполняемое действие
    
    СГ>Реально необходимый и достаточный синтаксис:
    СГ>[code]
    СГ>REPEAT x UNTIL b
    СГ>

    Вот это напрямую сделать не получится, но если допустить REPEAT x UNTIL(b);
    #define REPEAT do{
    #define UNTIL }while


    СГ>
  • Инструкция выбора варианта выполнения
    СГ>n, a, b — параметры для определения варианта
    СГ>x, y, z — выполняемые действия
    СГ>Си-образный синтаксис:
    СГ>
    СГ>switch(n)
    СГ>{
    СГ>     case a:
    СГ>          x();
    СГ>          break;
    СГ>     case b:
    СГ>          y();
    СГ>          break;
    СГ>     default:
    СГ>          z();
    СГ>}
    СГ>

    СГ>Реально необходимый и достаточный синтаксис:
    СГ>
    СГ>CASE n OF a: x | b: y ELSE z END
    СГ>


    Кстати, опущена возможнсть вот такого:
    switch(n)
    {
         case a:
              x();
         case b:
              y();
              break;
         default:
              z();
    }

    — если a, то выполним и x() и y(). Ну это так, к слову

    К сожаленю, препроцессор не позволяет переопределить |, да и ELSE уже определено. С чуть другим синтаксисом можно так:
    #define CASE switch(
    #define OF ){ case
    #define OR_CASE ;break; case
    #define ELSE_CASE ;break; default:

    CASE n OF a: x OR_CASE b: y ELSE_CASE z END
  • Re: Синтаксический оверхед
    От: Amon-RA  
    Дата: 09.06.05 12:32
    Оценка: 4 (2) +1
    Да
    Re[2]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 24.06.05 06:12
    Оценка: 4 (2) +1
    Здравствуйте, AVC, Вы писали:

    AVC>а) Соответствие структурным принципам.


    AVC>В отличие от синтаксиса Модулы/Оберона синтаксис Си/Си++ не соответствует принципам структурного программирования.

    AVC>Рассмотрим хотя бы циклы.

    Вобщем, на основании этой ветки и доп. источников я вывел:

    1. Циклы С/С++ не соответствуют принципам структурного программирования. Т.к. могут иметь более 1 выхода.

    2. Цикл LOOP оберона так-же не соответствуют принципам структурного программирования. Причина аналогичная.

    Вывод: оба языка не соответствует принципам структурного программирования.

    3. Вот что я случайно вычитал в "Рефакторинг. Улучшение существующего кода", М. Фаулер:

    Глава 9.
    Удаление управляющего флага (Remove Control Flag)
    ...
    От таких управляющих флагов больше неприятностей, чем пользы. Их присутствие диктуется правилами структурного программирования, согасно которым в процедурах должна быть одна точка выхода (чего требуют современные языки программирования), но требование одной точки выхода приводит к сильно запутанным условным операторам, в коде которых есть такие неудобные флаги. Для того чтобы выбраться из сложного условного опертора, в я зыках ксть команды break и continue. Часто бывает удивительно, чего можно достичь, избавившись от управляющего флага. Дкйствительно назначение условного оператора становится гораздо понятнее.


    Т.о. я пришёл к выводу, что Обероновский синтаксис мало того, что не соответствует принципам структурного программирования, так ещё и ставит палки в колёса, запрещая более полезные, чем вредные break и continue.
    Я — свихнувшееся сознание Джо.
    Re[4]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 09.06.05 10:10
    Оценка: 3 (1) :))
    Здравствуйте, Курилка, Вы писали:

    К>У тебя всегда тело цикла состоит из вызова функции x?


    Только тогда когда тело цикла большое, его можно написать на нескольких строчках.

    К>И скобки обязательно в сишном стиле так ставить? И вообще обязательно? И строки переводить?


    В принципе это не обязательно, но если писать промышленный код, то надо следовать стандартам оформления кода, а они таковы, что скобки {} надо писать всегда и на новой строчке.
    Re[3]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 16.06.05 09:16
    Оценка: 3 (1) -1 :)
    Здравствуйте, Cyberax, Вы писали:

    >> ? Так ведь если кто-то заявит, что 2*2=5, глядишь, целая дискуссия

    >> начнется на эту тему

    C>А что, при желании можно придумать алгебраическую структуру, где это

    C>будет именно так

    Нельзя придумать.
    Re[10]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 17.06.05 08:10
    Оценка: 3 (1) +1 :)
    Здравствуйте, xBlackCat, Вы писали:

    BC>Если бог может всё, то может ли бог создать камень, который не сможет поднять?


    В четырех измерениях надо мыслить! Сейчас бог всемогущ и он может создать такой камень. И как только он создаст его — бог перестанет быть всемогущим, т.к. не сможет поднять этот камень.
    Ку...
    Re[8]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 17.06.05 12:15
    Оценка: 3 (1) +1 :)
    Здравствуйте, ansi, Вы писали:

    A>Ну типа, чтоб доказать корректность, надо прогнать все возможные варианты.

    A>Всего 2^(64 + 64) вариантов. Например, проверяем миллион тестов в секунду:
    A>Пример давался еще на лекциях первого курса... Ну оно конечно возможно, но оооочень-очень долго

    Интересно, а теорему Пифагора вы тоже проверяли? С какой дискретностью и в каких диапазонах?
    Перекуём баги на фичи!
    Re[7]: Синтаксический оверхед
    От: Трурль  
    Дата: 22.06.05 05:37
    Оценка: 3 (1) +1 -1
    Здравствуйте, qwertyuiop, Вы писали:

    Q>Я часто проверяю условие p именно с целью узнать, как произошел выход из цикла: по брейку или "мирным путем".

    Теперь понятно, почему с++программисты так озабочены отладчиками и средствами рефакторинга.
    Re[11]: Очередной яркий пример
    От: alexku Россия  
    Дата: 23.06.05 10:01
    Оценка: 3 (1) +2
    Здравствуйте, Сергей Губанов, Вы писали:

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


    A>>То есть, забыл скобки — получил глюк.


    СГ>А что Вы можете предложить в замен?


    СГ>TYPE Func: PROCEDURE(): Func;


    СГ>VAR a: Func;


    СГ>a — обозначает саму себя как процедурную переменную

    СГ>a() — обозначает результат, который вернула процедура-функция после исполнения

    СГ>Как иначе-то, может быть?


    Это к вопросу о невозможности допустить ошибку в Обероне, если не понятно.
    Re[18]: Яркий пример
    От: Mamut Швеция http://dmitriid.com
    Дата: 23.06.05 11:24
    Оценка: 3 (1) +2
    M>>Только посмотрев в описание модулей можно понять, что Out.Ln — процедура, а Display.get — это переменная

    AVC>В Обероне это легко (ИМХО) определяется по контексту.

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

    [skip ebnf]

    AVC>Мне кажется, что вызов процедуры-функции должен упоминаться не в операторе (statement), а в выражении (expression).

    AVC>Скорее всего — в множителе (factor).
    AVC>Но я еще подумаю.

    В EBNF идет вот так:
    assignment  =  designator ":=" expression.
    designator  =  qualident {"." ident | "[" ExpList "]" | "(" qualident ")" | "^" }.
    qualident  =  [ident "."] ident.
    ident  =  letter {letter | digit}.
    ExpList  =  expression {"," expression}. 
    expression  =  SimpleExpression [relation SimpleExpression]
    SimpleExpression  =  ["+"|"-"] term {AddOperator term}.
    term  =  factor {MulOperator factor}. 
    factor  =  number | CharConstant | string | NIL | set | 
        designator [ActualParameters] | "(" expression ")" | "~" factor.
    ActualParameters  =  "(" [ExpList] ")".


    То есть максимум, что отсюда получается, это designator := designator [([ExpList])]. В другой документации об этом ничего, вроде, не говорится.

    Кстати, вопрос, как можно понять следующую фразу из Programming in Oberon:

    Only one value, however, can be returned as the result of a function. This value, moreover, cannot be of a structured type.


    [skip]

    M>>На самом деле меня интересовал (в этой подветке) всего один вопрос — почему недопустимо более одной точки выхода из циклов FOR и WHILE в Обероне и почему необходимо было вводить цикл LOOP (он уже нарушает принцип структурного программирования Дейкстры).


    AVC>Я это обдумаю.

    AVC>До сих пор я воспринимал "одну точку выхода" так: в данной процедуре после выхода из цикла (а также IF или CASE) мы можем оказаться толькой в одной точке программы — сразу после этого цикла. Если цикл был с предусловиеи, то в точке сразу после него оно будет обязательно ложным. Если цикл был с постусловием, оно обязательно будет истинным. Ну, а если был LOOP (выход из тела цикла) — то смотри в оба!

    Если честно, то не понимаю я такого ограничения на while и for.

    AVC>>>Можете рассматривать это как "открытое письмо".

    M>>

    AVC>

    AVC>Я ни в коем случае не хотел Вас обидеть. Я обратился лично к Вам именно потому, что был уверен, что Вы поймете меня правильно.



    AVC>Просто, как мне показалось, вчера дело зашло слишком далеко.

    AVC>Добрался ночью до Инета — и о ужас! По первому впечатлению я воспринял ситуацию как травлю и пинание ногами.

    Это я вчера злой и голодный был

    AVC>Вот я и выбрал, ИМХО, самого разумного и спокойного оппонента, чтобы высказать свое "фэ".

    AVC>Разумеется, я никоим образом не хотел сказать, что сторонники Оберона всегда правы, а его противники всегда неправы.
    AVC>За год дискуссий на RSDN я многое понял только благодаря критике.
    AVC>Потому и участвую в здешних дискуссиях (иногда перерастающих в побоища ), хотя некоторые (уважаемые мной) люди удивляются этому. Говорят, в частности, что язык программирования как религия — никто никого не переубедит. Я же хочу испытать некоторые идеи (и не думаю "насаждать" Оберон "огнем и мечом"), так что мне критика только полезна.

    "В споре рождается истина", как говорится. Правда, мы и в самом деле немного офанатели с этими языками.

    AVC>Но вчера... уж я сам, каюсь, язвительный , но вы, ребята, просто поставили мировой рекорд какой-то...




    Как мне кажется (это не попытка оправдаться, ни в коем случае), что произошло вот что. Была попытка указать на некий факт. Просто на факт. Даже с обоснованием этого факта, пускай, возможно, не до конца корректным. Но воспринята была эта попытка крайне отрицательно, с таким подходом — "мол, ты что нас за детей считаешь?" И понеслось.

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

    Кстати, я, по-моему, только сейчас понял ту идею, которую хотел донести Сергей, когда он начинал говорить об оверхеде. А именно то, что он указал гораздо позже. А именно:
    * a * b * c * d * e

    где, исключая пробелы, "*" — это служебные лексемы.

    А ведь действительно, с именно таким синтаксисом сложнее допустить ошибку при написании программы:
    while(i != 0)
      do_sth();
      do_sth2();
    
    WHILE i # 0 
      do_sth;
      do_sth2;


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

    Ндаааа... Вот такие мы злобные буратины...


    dmitriid.comGitHubLinkedIn
    Re[6]: FOR
    От: Кодт Россия  
    Дата: 27.06.05 17:41
    Оценка: 3 (1) :))
    Здравствуйте, Пацак, Вы писали:

    П> То есть вычислить шаг цикла в рантайме я не могу? В печку такой язык! (с) проф. Преображенский.


    Так вот кто был первым падонком? "Фтопку", понимаешь!
    Перекуём баги на фичи!
    Re[15]: Народ упорно не врубается
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 29.06.05 10:20
    Оценка: 3 (1) +2
    Здравствуйте, Сергей Губанов, Вы писали:

    MN>>Вы как всегда в своём амплуа. Если ответы на вопросы угрожают вашей теории, вы на них не отвечаете... Вобщем продолжать дискуссию считаю абсолютно бесполезно. Потому что вы не умеете слушать и отвечать на вопросы аппонента. А всё остальное смысла не имеет.


    СГ>Я просто не отвечаю на вопросы ответы на которые и так очевидны, за исключением некоторых случаев (например сейчас).


    Вот вы не поверите, но в отношении вас ответы на обозначеные вопросы для меня не очевидны. Если бы они были очевидны и совпадали бы с моими, то этого флейма просто не было бы. Поэтому я и хочу услышать их, чтобы понять ваш ход мыслей и высказать своё мнение, либо пракратить спор, как бессмысленный (с фанатиками спорить бесполезно).
    Сударь, пусть вам не кажется, что эти вопросы — попытка загнать вас в дискуссионную ловушку, дабы поставить МАТ. Это именно так и есть. А то, что вы не хотите на них отвечать — так это как раз признак того, что вы начали это осознавать и выкинули белый флаг раньше времени, точнее сбежали с поля боя. Поэтому всё равно — это моя победа. Если хотите продолжить дискуссию, то можем откатить один ход и вернуться к вопросам (см. парой постов выше). Я жду вашего ответа до завтрашнего утра, если вы так и не ответите на те 3 вопроса буду считать вас окончательно поверженным.
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re: Синтаксический оверхед
    От: Socrat Россия  
    Дата: 09.06.05 13:31
    Оценка: 2 (2) +1
    Ради разнообразия попробуй на Обероне написать:

    if (count < MAX_COUNT)
        array [count++] = x;


    или

    func (param1, param2, param3, param4, expr? param5: param6);
    Re: Синтаксический оверхед
    От: Hobot Bobot США  
    Дата: 10.06.05 08:07
    Оценка: 1 (1) +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.

    СГ>2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо (чтобы читающему понятно стало где что написано).

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


    Собственно, непонятно только одно — чем все это плохо?
    What a piece of work is a man! how noble in reason! how infinite in faculty! in form and moving how express and admirable! in action how like an angel! in apprehension how like a god! the beauty of the world! the paragon of animals!
    Re[5]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 20.06.05 14:27
    Оценка: 1 (1) +2
    Сергей Губанов wrote:

    > СГ>>1) Правильный синтаксис был известен уже в 1979 году (Modula 2).

    > P> Кому известен?
    > Не ну вообще я фигею просто , а говорили, что я тут самый большой шутник!

    Вам продемонстрировали с десяток раз, что синтаксис С++ далеко не так
    избыточен (скорее идет на равных) с Oberon'ом. Так же вам
    продемонстрировали, что возможны еще более синтаксически сжатые языки.


    Вы это все проигнорировали.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[3]: Синтаксический оверхед
    От: Amidlokos Россия  
    Дата: 20.06.05 14:33
    Оценка: 1 (1) +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>2) Почему сотня-другая ковбоев отметившихся в этой ветке форума вместо того чтобы сказать, мол, да, действительно рудимент этот си-образный синтаксис, атавизм, так сказать, действительно давно было пора его изжить; наоборот пытается его как-то защищать? Вслепую прут против очевидного. Большинство из них пацаны же еще... Загадка... Хотя тут недавно упоминали про принцип "Не пытайся искать злого умысла в том, что объясняется глупостью"... Образования им не хватает, я думаю.


    "Сдаётся мне, фраерок, что ты мент позорный..."

    Точнее, что дремучий доцент-теоретик, которого черти занесли в форум практиков.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[8]: Синтаксический оверхед
    От: Privalov  
    Дата: 21.06.05 09:06
    Оценка: 1 (1) :))
    Здравствуйте, Дарней, Вы писали:

    Д>Он один, но зато стоит десятка квалифицированных флеймеров!

    Д>One man army, короче говоря. Остается только удивляться, как у него остается время на собственно разработку, при такой то активности в форуме.

    Да уж... Мне, по крайней мере, этот треп дает возможность переключить мозги на что-нибудь оторванное от моего текущего проекта. Благодаря этому, мне удалось починить пару-тройку багов, избавиться от спагетти, доставшемся мне в наследство, и при этом не умереть от недостатка новых впечатлений.
    Re[2]: Синтаксический оверхед
    От: CrystaX Россия https://crystax.me/
    Дата: 21.06.05 11:10
    Оценка: 1 (1) +2
    Здравствуйте, AVC, Вы писали:

    AVC>Мне же оказалось достаточно взять требуемые фрагменты (и, что немаловажно, с "картинками" ) из документа, содержащего известную книгу Кормена, Лейзерсона и Ривеста, и вставить как комментарий в программу на Компонентном Паскале прямо перед соотвествующим им кодом.

    AVC>Алгоритм теперь читается и понимается легко и даже приятно.
    AVC>Кроме того, благодаря тому, что все ключевые слова состоят только из заглавных букв и благодаря этому выделяются сами собой, программист может использовать цвет букв (а также размер и шрифт) по своему усмотрению для выделения особо важных фрагментов кода. Скажем, не уверен в данном коде — пометил его красным: проверить! Это очень эффективная система, т.к. цвет бросается в глаза, и такой участок кода трудно не заметить.
    AVC>Напоминаю, что подобные возможности доступны в Обероне с 1980-х.
    AVC>А что же Си/Си++?

    Так Вы о чем говорите? О языке или о IDE? Определитесь пожалуйста.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[9]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 23.06.05 10:55
    Оценка: 1 (1) +2
    Здравствуйте, Сергей Губанов, Вы писали:

    A>>В этом вашем примере assert(n <= -1) совершенно не имеет смысла, потому что значение n предсказуемо на 100% и всегда будет равно -1.


    СГ>Это было бы так если бы использовался Modula/Oberon в которых из цикла WHILE нельзя выйти ни каким другим способом. В С# же был выход по break. Поэтому значение n на реальных данных всегда было больше нуля, а не то что больше -1. Ошибку я нашел просто случайно поглядев на исходник, а вовсе не от того что программа упала (она не падала) и я залезши в дебагер стал там чего-то крутить.


    Ну вот я написал в обероне прогу. Аналог.

    MODULE TestTest;
    
      IMPORT StdLog, Files; 
    
      PROCEDURE dec(OUT x : INTEGER) : INTEGER;
      BEGIN
            DEC(x);
            RETURN x + 1;
      END dec;
    
      PROCEDURE Test*();
      VAR  i: INTEGER;
      BEGIN
            i:=10;
            WHILE dec(i) > 0 DO
                (* ...do work... *)
            END;
            (* I think i==0 *)
      END Test;
    END TestTest.


    Поскольку пост декремента там нету, то я написал свой. Использовал отличный WHILE, как положено, а лажа — та же....
    Я — свихнувшееся сознание Джо.
    Re[5]: Идеологически правильный мегарулез
    От: Amidlokos Россия  
    Дата: 24.06.05 17:36
    Оценка: 1 (1) :))
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Одно дело ....


    СГ>>а другое дело ...


    SJA>Так значит, мало того, что правило "один вход-один выход" работает не для всех циклов, но ещё и не всегда для остальных ?

    SJA>Вам ещё не кажется, что Оберон это просто какой-то уродец ?

    Правильно тут кто-то сказал — после всего этого обсуждения возникает твёрдая уверенность, что Вирту на старости лет пора было в психлечебницу, а его Обероном детей пугать... Антирекламу тут сделали мощную
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re: Синтаксический оверхед
    От: g_i  
    Дата: 09.06.05 09:45
    Оценка: +3
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Программа записанная в Си-образном синтаксисе содержит в разы, а не на проценты больше лексем и строчек кода чем это реально необходимо.


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

    >Спрашивается, и как долго этот синтаксис еще будет существовать?

    Вопрос, я так думаю, риторический.
    Re[5]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 09.06.05 10:18
    Оценка: +3
    Сергей Губанов wrote:

    > К>У тебя всегда тело цикла состоит из вызова функции x?

    > Только тогда когда тело цикла большое, его можно написать на
    > нескольких строчках.
    >

    > К>И скобки обязательно в сишном стиле так ставить? И вообще

    > обязательно? И строки переводить?
    > В принципе это не обязательно, но если писать промышленный код, то
    > надо следовать стандартам оформления кода, а они таковы, что скобки {}
    > надо писать всегда и на новой строчке.

    Хахахахаххахахаха.... ROTFL.

    Промышленных coding-standart'ов для С++ — как собак нерезанных. Причем в
    большинстве из них НЕ РЕКОМЕНДУЕТСЯ ставить скобки вокруг одиноких
    операторов.

    Кстати, если рассуждать о синтаксической избыточности, то зачем в
    Обероне/Паскале абсолютно ненужные лексемы:
    procedure
    function
    var
    do
    to, downto
    ...

    А?

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[7]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 09.06.05 10:59
    Оценка: :)))
    Здравствуйте, Сергей Губанов, Вы писали:

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


    К>>Т.е. на паскалеподобном языке не пишут промышленный код?


    СГ>1) Не на Паскале подобном (он устарел более чем двадцать пять лет назад), а на Modula/Oberon — подобном.

    СГ>2) Для разных языков общепринятые способы оформления текста — разные. Для Си-образного языка, я насчитал оверхед по оформлению в 700 процентов по сравнению с минимально возможным.

    Ну дак пиши на K тогда, что мозги-то компостировать?
    Re[3]: Синтаксический оверхед
    От: Oleg Volkov  
    Дата: 09.06.05 15:54
    Оценка: +3
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Совершенно согласен с тем, что шрифты семейсва Courier в заглавных буквах смотрятся не очень, а ведь именно они по умолчанию стоят в ряде популярных IDE.


    Такое впечатление, что вы ничего в своей жизни сложнее сортировки на Си не написали. Шрифт Courier используется потому, что в нём буквы одинаковой ширины. Verdana же абсолютно нечитаема по сравнению с моноширинными шрифтами.
    Re[3]: Синтаксический оверхед: а смысл-то в чем?
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 09.06.05 16:35
    Оценка: +2 :)
    Здравствуйте, Сергей Губанов, Вы писали:

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


    E>>ИМХО: подобная критика не конструктивна.


    СГ>Если бы я просто сказал, что вот, в Си-образном синтаксисе используется больше лексем чем нужно, это было бы одно, а тут я сказал, что их используется не просто больше, а от двух до трех раз больше чем нужно. Привел числа. Даже среднее число вывел 235 процентов получил.


    В качестве эпифграфа:

    -- Петька, приборы!?
    -- 45!
    -- Что 45?
    -- А что приборы?


    Если смысл был в том, чтобы опубликовать полученное тобой магическое значение 235, то, вероятно, ты его достиг. Но ведь твое начинание можно продолжить. Вот, например, у меня есть своя нотация для C++. Так вот в ней принято идентификаторы писать только строчными буквами, разделяя отдельные слова подчеркиванием. Более того, имена типов должны заканчиваться суффиксом _t:
    my_very_useful_class_t my_class;
    if( my_class.open_file_and_do_all_necessary_processing( file_to_process, file_to_result ) ) ...;

    Интересно, во сколько процентов эта нотация хуже паскалевкого CamelCase:
    MyVeryUsefulClass myClass;
    if( myClass.openFileAndDoAllNecessaryProcessing( fileToProcess, fileToResult ) ) ...;


    Да и вообще, чего мы мелочимся? Разговариваем про какие-то языки программирования, которыми пользуются тысячные доли процентов общего населения Земли. Почему бы не взяться за естественные языки?

    В испанском (португальском?), к примеру, в начале вопросительных и восклицательных приложений нужно ставить перевернутый вопросительный или восклицательный знак. Явный оверхед.

    Да что испанский, возьмем любимый английский. Вот где уроды! Да за одни только артикли (the, a, an, of) убивать нужно (оверхед же). А если еще и сочетание гласных/согласных (типа 'oo' как 'y', или 'ee' как 'и') прибавить! Доколи терпеть будем, спрашивается?

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

    Да вообще все европейские языки с их алфавитами -- жутчайший оверхед. Иное дело иероглифы -- одно понятие, один символ. Правда и там, говорят, элементы повторяются.


    Да уж... Единственное, что по этому поводу вспоминается, так это:

    Маразм крепчал.

    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[4]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 06:54
    Оценка: -1 :))
    Здравствуйте, Oleg Volkov, Вы писали:

    OV>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Совершенно согласен с тем, что шрифты семейсва Courier в заглавных буквах смотрятся не очень, а ведь именно они по умолчанию стоят в ряде популярных IDE.


    OV>Такое впечатление, что вы ничего в своей жизни сложнее сортировки на Си не написали. Шрифт Courier используется потому, что в нём буквы одинаковой ширины. Verdana же абсолютно нечитаема по сравнению с моноширинными шрифтами.


    Я в курсе на счет моноширности. Она не обязательна. Использую символы табуляции там где надо — они "моноширные" даже в не моноширном шрифте.

    При чем тут сложные алгоритмы я не понял.
    Re[4]: Синтаксический оверхед: а смысл-то в чем?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 07:04
    Оценка: :)))
    Здравствуйте, eao197, Вы писали:

    E>Да и вообще, чего мы мелочимся?


    Увы, 235 процентов — не мелочь.

    Серьмяжный смысл моего сообщения был в том, что теперь я могу ссылаться
    Автор: Сергей Губанов
    Дата: 09.06.05
    на это сообщение, а не голословно говорить, что Си-образный синтаксис использует больше лексем чем нужно.

    Мне даже не важно какой именно перерасход лексем получился. Важно что их больше
    Автор: Сергей Губанов
    Дата: 09.06.05
    чем реально необходимо.
    Re[7]: Синтаксический оверхед: а смысл-то в чем?
    От: Firelight  
    Дата: 10.06.05 07:23
    Оценка: +2 -1
    СГ>Текст оформлен в согласии с общепринятым coding style. Служебные слова, скобочки, точки-запятые, посчитаны, надеюсь, без арифметических ошибок. Числа делил правда на калькуляторе, но наверное калькулятор всё-таки не ошибся. Так что всё вроде сделал правильно. Так что не так?

    В ДНК ошибка. (с)
    ... << RSDN@Home 1.1.4 beta 6a rev. 436>>
    Re[10]: Oberon - Примеры кода
    От: Mamut Швеция http://dmitriid.com
    Дата: 10.06.05 12:14
    Оценка: +3
    M>> Дебагить его тоже невозможно

    СГ>Похоже для всех Си-образных программистов сидение в дебагере — это основное времяпрепровождение.

    СГ>А Вы вообще в курсе, что есть класс программ, которые в принципе нельзя дебажить?
    СГ>(например, системы реального времени нельзя дебажить по определению)

    Мы же не о таких системах говорим н данный момент.

    СГ>Лично я, например, в дебагере не сижу вообще:

    СГ>1) Использую математически доказуемые алгоритмы.
    СГ>2) Если не могу выполнить пункт (1), то делаю так что программа сама сообщает где ошибка.

    И это вы так делаете, начиная с первого же дня работы с незнакомым вам языком/системой/модулем? Предположим, к проекту подлючен модуль стороннего программиста, который в одно из десяти случаев ведет себя не так, как надо. Автор модуля уехал на Багамы.

    Придется разбирать код и дебажить. Увы. Причем конструкции типа
    WHILE (p.next # NIL) & (p.next.key < key) DO p := p.next END;

    не способствуют ни тому, ни другому.

    M>> На более-менее реальных примерах Оберон в десятки раз проигрывает в читаемости.


    СГ>А вот тут как на счет читаемости:

    СГ>
    СГ>while (x = a() ? b(k[i++]) : c(l[j--]) ) d(x);
    СГ>


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

    Так вот. Опять же. Вы цепляетесь за какие-то мелочи, приводите высосанные из пальца примеры, несмотря на то, что уже не впервый раз:

    а) вам доказывают несостоятельность ваших доводов (здесь
    Автор: Кодт
    Дата: 10.06.05
    , здесь
    Автор: Кодт
    Дата: 10.06.05
    , здесь
    Автор: Privalov
    Дата: 09.06.05
    , здесь
    Автор: Oyster
    Дата: 09.06.05
    ну и далее по всей этой ветке). Единственным последовавшим контраргументом были ответы Re[2]: Ошибка
    Автор: Сергей Губанов
    Дата: 09.06.05
    , Re[2]: Ошибка 2
    Автор: Сергей Губанов
    Дата: 09.06.05
    , Re[10]: Ошибка 3
    Автор: Сергей Губанов
    Дата: 10.06.05
    , в которых доказывалось отсутствие в Обероне конструкции BEGIN..END, несмотря на то, что она существует для ключевых блоков MODULE, PROCEDURE, FUNCTION и выродилась в ..END для всех остальных блочных конструкций.

    б) С вашей стороны не было приведено ни одного приближенного к реальному кода. Ладно, пришлось нахдить код самому. И что? Опять ни одного контраргумента, кроме опят таки высосанного из пальа примера на С, который якобы доказывает несостоятельность всего синтаксиса языка в целом. Гррр (рычит, рвет на себе волосы и мчет молнии )

    Ладно. Начнем сначала ...

    Вот пример хорошего, добоваримого кода на С++ (взято из исходников Qt):

    bool QBitArray::fill( bool v, int size )
    {
        if ( size >= 0 ) {                
            if ( !resize( size ) )
                return FALSE;            
        } else {
            size = this->size();
        }
        if ( size > 0 )
            memset( data(), v ? 0xff : 0, (size + 7) / 8 );
        if ( v )
            pad0();
        return TRUE;
    }


    Тот же код на Оберонах, насколько я понимаю, будет выглядеть примерно так:
    FUNCTION QBitArray.fill(v : BOOLEAN, size : INTEGER) : BOOLEAN
    VAR
        tmp : INTEGER;
    BEGIN
        IF size >= 0 THEN                
            IF resize( size ) # FALSE THEN
                fill := FALSE;            
            ELSE
                size := self.size;
            END
            IF size > 0 THEN
                IF v = TRUE THEN tmp := 0xFF ELSE tmp := 0; END;
                memset( data, tmp, (size + 7) / 8 );
            END;
            IF v = TRUE THEN pad0; END;
            fill := TRUE;
    END fill;


    Померяемся пиписьками?
    На 14 строк С++ кода — 49 "левых" символов (запятые, скобки, точки с запятой, знаки больше/меньше)
    На 17 строк Оберон-кода — не буду считать весь визуальный мусор в виде слов BEGIN, END, THEN — но его явно больше.

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

    ЗЫ. Только не надо перечислять, какие ошибки я допустил в Обероновском коде.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>> ... <<Winamp is playing "Silence">> ...


    dmitriid.comGitHubLinkedIn
    Re[14]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 10.06.05 13:44
    Оценка: -1 :))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Что, что — скопируете и сопроводите "некими дополнительными действиями". Прямо такой вопрос задаете, как буд-то ответ сами не знаете.

    СГ>

    СГ>У бомжей берут интервью:
    СГ> — "Скажите пожалуйста, вот вы живете на улице, а что вы делаете когда идет дождь?"
    СГ>Бомжи недоуменно переглядываются, пожимают плечами и, в конце-концов, отвечают:
    СГ> — "Как, что? Мокнем мы."


    Вах, оберонисты сами себя уже бомжами считают...
    Однако, неожиданно
    Re[2]: Синтаксический оверхед
    От: Аноним  
    Дата: 12.06.05 20:56
    Оценка: :)))
    Здравствуйте, Airat Burganov, Вы писали:

    AB>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.

    СГ>> [skipped]

    AB>По-моему, пора уже сказать для чего была затеяна дискуссия. Провокация удалась на славу. Кто не верит, что это провокация, читайте ответы автора — он же не внимает абсолютно никаким доводам — один против всех . Это однозначно удавшаяся шутка.


    Да не...
    Это не провокация.
    Он тут на форуме известен своей любовью к оберонам.
    Просто последние несколько месяцев он хранил молчание.
    Видимо готовил новый удар, занимаясь исследованием синтаксического оверхеда
    Re: Синтаксический оверхед
    От: xBlackCat Россия  
    Дата: 14.06.05 11:46
    Оценка: :)))
    Люди, а куда делся сам, так сказать, "виновник торжества"? А то как-то флейм начинает затихать. Скучно становится...
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Rojac &mdash; Rsdn Offline JAva Client
    Анонсы и обсуждение здесь
    Автор: xBlackCat
    Дата: 08.02.10
    Re[10]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 15.06.05 14:12
    Оценка: -3
    Здравствуйте, Mr. None, Вы писали:

    MN>perl адназначна... вот где никакого оверхеда ... вот только фиг прочтёшь, что написано...


    Так ведь, еще Эйнштейн говорил — сделать так просто, как только возможно, но не проще. Но не проще!!!
    Re[13]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 15.06.05 14:31
    Оценка: +1 :))
    К>Складывается ощущение, что это просто "сказано". В защиту или в обвинение — это всё относительно

    Это сказано в защиту обвинения


    dmitriid.comGitHubLinkedIn
    Re[2]: Ошибка 4
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 16.06.05 09:08
    Оценка: -2 :)
    Здравствуйте, Mr. None, Вы писали:

    MN> что касается необходимости и достаточности конструкций Pascal`я...


    Это был не синтаксис устаревшего Паскаля 1970 года, а синтаксис языков Modula/Oberon.

    Синтаксис Паскаля 1970 переводится в Си-образный заменой begin --> { и end --> }.
    Re[7]: Тавтология
    От: moudrick Россия http://community.moudrick.net/
    Дата: 16.06.05 09:08
    Оценка: +3
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>> Ну елки-палки


    СГ>

    СГ>Тот код, который пишется в одну строку, я пишу в одну строку.
    СГ>Тот код, который не пишется в одну строку я не пишу в одну строку.

    СГ>Тавтология, не так ли?

    СГ>Например, код WHILE a DO x; y; z END легко пишется в одну строку, поэтому я его и пишу в одну строку. С другой строны код:

    СГ>
    СГ>WHILE ahgsdjag.agsdgasgdh(wehdfuiweh, wuedij) DO 
    СГ>  xwkjedbwej(weili, erhfbyh, uwerufy); 
    СГ>  ywiebicbwjkebjw(wjbnecu, erhchr, bwuehbc, bwehbcy); 
    СГ>  z(wbe, hdb, hdbc, GGHJYVCG, UUYYTT)
    СГ>END
    СГ>

    СГ>не пишется в одну строку, поэтому я его и не пишу в одну строку.

    СГ>Еще вопросы будут?

    Обязательно. Почему тред находится в разделе "Коллеги, улыбнитесь"?

    Код подавляющего большинства РЕАЛЬНЫХ программ (не только коммерческих, смею заметить), НЕ ПИШЕТСЯ В ОДНУ СТРОКУ.
    Поэтому та муравиьная возня вокруг оверхеда, которую Вы тут затеяли, гроша выеденного не стоит. Ничего серьезного из этого треда вынести нельзя, недаром он находится в разделе "Коллеги, улыбнитесь". Мне даже неинтересно, из какого раздела он сюда попал, но модератор был ПРАВ, когда его сюда перебросил.

    И большинство людей здесь ВЕСЕЛЯТСЯ, потому что тот, кто ВСЕРЬЕЗ спорит с недалеким человеком, сам от него недалеко ушел.
    Не примите за переход на личности, но я думаю большинство участников этого бредового треда внутри себя думают то же самое, я лишь лишний раз вынес это на поверхность. Надеюсь, г-н Губанов есть все-таки здравомыслящий человек и не поступит так, как г-н Больцман.
    Re[16]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 16.06.05 09:39
    Оценка: :)))
    Здравствуйте, Mamut, Вы писали:

    M>>А вообще — может надо вернуться к машинам Тьюринга или нормальной форме Бойса-Кодта?


    M>Уж не нашего ли Кодта?


    Прям стыдно за себя стало: будто придумал что-то на пару с Бойсом, а когда и где — вспомнить не могу

    (P.S. Мой никнейм — естественно, по мотивам имён Кодда и Клодта).
    Перекуём баги на фичи!
    Re[6]: Синтаксический оверхед
    От: Privalov  
    Дата: 16.06.05 09:52
    Оценка: :)))
    Здравствуйте, Mr. None, Вы писали:

    MN>О! Ещё раз 10 баллов... Вы попали в струю!!! Вы когда-нибудь это делали? Спрашиваю потому, что по своему образованию мне это делать приходилось (я правда не кандидат, а всего лишь магистр, но не при этом не физик, а прикладной математик)... Прежде чем высказать своё мнение, хочу услышать ваш ответ...


    Мне пришлось разок. С вашим мнением по этому вопросу заранее согласен
    Re[5]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 16.06.05 11:17
    Оценка: +2 :)
    Здравствуйте, Cyberax, Вы писали:

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

    C>числа, в которой 2+2=5.

    Дык, легко.

    1) Если эта группа, помимо целых, включает вещественные...
    Пусть есть некое биективное отображение f : R<->R, такое, что f(x1)=2, f(2*x1)=5
    Тогда "+"(x,y) = f(F(x) + F(y))
    где F — обратная к f.
    Пример такого простейшего отображения: f(x) = x*1.5 — 1, F(X) = (X+1)/1.5

    В этом случае у нас будет не просто группа, а даже кольцо с делением (поскольку оно есть над R).

    2) Придумаем какое-нибудь биективное отображение Z<->Z, с теми же требованиями.
    А что там далеко ходить — вот оно
    f(x) = (x==4) ? 5 : (x==5) ? 4 : x
    F(X) = (X==4) ? 5 : (X==5) ? 4 : x
    Перекуём баги на фичи!
    Re[6]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 17.06.05 12:41
    Оценка: -1 :))
    M>>>>define-ы не рулЯт.

    B>>>зато "Синтаксический оверхед" уменьшется в разы

    M>>(я прикинусь Сергеем Губановым на мнговение, только не убивайте сразу, ладно?)

    M>>#define — это директива препроцессора, если Вы помните.

    M>>...
    M>>Так что оверхед никуда не девается, он просто умело маскируется под свое отсутствие.

    B>блин а я как то и не подумал...

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

    А как же Вы думали? Несомненно! Не должно быть оверхеда ни на каком этапе трансляции программы — от UML или блок-схемы до бинарных машинных кодов! Не должно быть оверхеда даже в исходной модели! Иначе весь мир переподнится оверхедами!
    Re[2]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 20.06.05 06:13
    Оценка: +3
    A>Итак, закройте все окна (или консоли) рабочей среды. Выключите компьютер. Вкусно покушайте, сходите к друзьям ( ), поиграйте в какую-нибудь игрушку (в моём случае — GTA VC, только не спутайте это VC с Visual C++).

    Уже можно и в GTA: San Andreas Я уже поставил дома алтарь у курю фимиамы разработчикам — я не понимаю, как _такое_ можно было сделать


    dmitriid.comGitHubLinkedIn
    Re[4]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 20.06.05 13:20
    Оценка: -2 :)
    Здравствуйте, Cyberax, Вы писали:

    C>1. Удобно иметь понятие составного оператора и единобразное его

    C>обозначение (т.е. скобочки или ХОТЯ БЫ begin/end).

    Для чего? Ведь нет ни одного места где бы он был нужен.

    C>2. НЕудобно постоянно писать лишние then, do и т.п.


    Лишние THEN и DO писать ни в коем случае не надо — это будет синтаксической ошибкой.

    C>3. НЕУДОБНО писать ключевые слова большими буквами.


    Чего в этом не удобного?
    Читать тоже удобно — зарезервированные слова сразу видно. Именно для этого и было придумано писать служебные слова заглавными буквами. Шрифт, цвет, наклон можно использовать уже для других целей нежели синтаксических.
    Re[3]: Синтаксический оверхед
    От: Amidlokos Россия  
    Дата: 20.06.05 14:42
    Оценка: :)))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>2) Почему сотня-другая ковбоев отметившихся в этой ветке форума вместо того чтобы сказать, мол, да, действительно рудимент этот си-образный синтаксис, атавизм, так сказать, действительно давно было пора его изжить; наоборот пытается его как-то защищать? Вслепую прут против очевидного. Большинство из них пацаны же еще... Загадка... Хотя тут недавно упоминали про принцип "Не пытайся искать злого умысла в том, что объясняется глупостью"... Образования им не хватает, я думаю.


    "Да здравствует суверенная демократическая Украина!"
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[8]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 12:56
    Оценка: -2 :)
    Здравствуйте, CrystaX, Вы писали:

    CX> Для кого это правильно?


    Вообще. Без относительно к чему-либо. Теорема Пифагора для кого правильна?

    CX>В первом случае мне понадобилось 10 нажатий клавиш. Во втором — 15.

    +
    CX>пользователь мыслит не лексемами, а логическими блоками

    Поэтому сами буквы не считаются.
    Re[4]: Синтаксический оверхед
    От: Socrat Россия  
    Дата: 21.06.05 13:56
    Оценка: +1 :))
    Здравствуйте, Курилка, Вы писали:

    СГ>>Совершенно согласен. Сам на позапрошлой неделе в своей программе на C# обнаружил, что переменная цикла while после его завершения иногда становилась равной -1 вместо ожидаемого минимального значения 0. Ошибка конечно чрезвычайно глупая и мне за нее стыдно, но дело в том, что на Обероне я бы ее просто НЕ СМОГ бы совершить в принципе!


    К>Математически доказал, что там -1 вместо 0?


    Он же сказал: доказано, что там должен быть 0. А если факты не соответствуют теории, то тем хуже для фактов.
    Re[13]: Синтаксический оверхед
    От: CrystaX Россия https://crystax.me/
    Дата: 21.06.05 14:27
    Оценка: +3
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Вся эта относительность "в промышленных количествах" появилась, надо полагать, из широкой рекламной компании СТО Эйнштена. Однако даже в СТО не все относительно, более того практически всё является абсолютным. Летит ракета со скоростью близкой к скорости света мимо линейки и измеряет ее длину. О! Ура! Длина линейки относительна! А количество отсчетов нарисованных на линейке, количество атомов из которых она сделана и т.д. и т.п. — всё абсолютно.


    Сергей, я в Вас разочаровываюсь как в собеседнике. Ваш последний ответ — сплошная демагогия. Есть очень четко поставленный вопрос, на который Вы не дали ответа. Повторю его еще раз.
    Определите понятие правильности синтаксиса языка. Каким критериям он должен соответствовать и самое главное, почему он должен соответствовать этим критериям?
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[6]: Необходимые пояснения
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 15:40
    Оценка: +2 :)
    M>1 (и главное). Здесь участвуют очень интересные люди с большим опытом в программировании, чье мнение я уважаю и ценю. Даже среди того флейма, что мы породили, можно найти инетерсные мысли, куски кода, способы аргументирования и проч.

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

    M>3. Мне интересно понаблюдать за Сергеем. Ага, как в лаборатории. Интересна реакция организма на критику

    2 варианта (местами необоснованное) отторжение и (местами полное) игнорирование.

    M>Но в случае с Обероном фанатизм переходит все границы. Отсутствие аргументов заменяется истеричными выкриками "сам такой" и каким-то, колобковским, что ли, поведением. А такой фанатизм надо усмирять.


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

    Так шо я даже не знаю что и предложить...
    Переименовать что ли ветку в "Кандидаты развлекаются"?
    Re[6]: Синтаксический оверхед
    От: qwertyuiop Российская Империя  
    Дата: 21.06.05 18:12
    Оценка: +1 :))
    B>>так что получается в обероне точно так же програмист не может быть "уверен, что перед следующим оператором после выхода из цикла выполняется условие ~p (NOT p)."

    СГ>Может. Таково одно из положений структурного программирования.

    СГ>
    СГ>WHILE p DO 
    СГ>  ... 
    СГ>END; 
    СГ>


    Лично мне нас**ть на "положения структурного программирования". Если в С можно выйти по брейку из цикла любого типа, а в Обероне для этого нужно использовать особый цикл, это говорит лишь о большей гибкости С, и Оберону здесь хвалиться нечем. Я часто проверяю условие p именно с целью узнать, как произошел выход из цикла: по брейку или "мирным путем". Меня за это расстреляют или наказание будет более жестокое: год программирования на Обероне?
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[4]: Ошибка
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 22.06.05 03:29
    Оценка: +3
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>>1. Поддержка максимального количества парадигм программирования (в том числе и структурного)


    СГ>1) Как Вам только что показали структурную парадигму не поддерживает.


    Сударь! "Программирование без goto" и "структурная парадигма" — это совершенно разные понятия! Это даже сам Дэйкстра признавал — один из со-авторов концепции "программирование без goto", помните его статью, написанную совместо с Хоаром: "Использование оператора goto можно считать вредным" (год не помню). Так вот "программирование без goto" — это концепция (стиль), а не парадигма. Структурная парадигма — это именно парадигма, подход к проектированию и программированию, ориентированный на структуры данных. В рамках СП даётся ответ на вопрос, что представляют из себя данные и как ими можно оперировать. А уж использовать структурную парадигму можно на любом языке (хоть на ассемблере, где без jmp вообще очень трудно) и никакой дополнительной поддержки со стороны языка не требуется. А программирование без goto — это всего лишь стиль оформления, запрещающий использование goto в программах. Да я в курсе, что теорема, доказывающая возможность представления любого алгоритма с goto в виде алгоритма без goto с аналогичными множествами входных значений и результатов, называется теоремой о структурировании Дейкстры... Это только название теоремы и отношение к "структурной парадигме" как таковой оно имеет весьма коссвенное — эта теорема возникла в 50-ых (60-ых) годах (точно не помню), а структурная парадигма программирования окончательно сформировалась только к концу 70-ых, началу 80-ых, как логическое продолжение процедурного подхода. Вобщем как говорил дедушка Фрейд: иногда огурец — это всего лишь огурец.

    СГ>2) Модульную парадигму не поддерживает (в языке нет модулей)

    если уж на то пошло, то есть: lib, dll...

    СГ>3) Компонентно ориентированное программирование не поддерживает (в языке нет модулей и нет сборки мусора)

    проехали...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[2]: Синтаксический оверхед
    От: jazzer Россия Skype: enerjazzer
    Дата: 22.06.05 08:42
    Оценка: +3
    Здравствуйте, AVC, Вы писали:

    AVC>а) Соответствие структурным принципам.


    AVC>В отличие от синтаксиса Модулы/Оберона синтаксис Си/Си++ не соответствует принципам структурного программирования.

    AVC>Рассмотрим хотя бы циклы.
    AVC>Когда программист пишет (или, что важнее, читает) на Модуле/Обероне цикл
    AVC>он абсолютно уверен, что перед следующим оператором после выхода из цикла выполняется условие ~p (NOT p).
    AVC>на Си/Си++, он не может быть в этом уверен, т.к. внутри цикла может находиться как оператор break, так и знаменитый goto.
    AVC>То же относится к циклам REPEAT UNTIL ~p и do {} whiie (p).

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

    Вот и все. Никаких проблем.
    Если программист С++ хочет что-то гарантировать, он просто достигает этого другими методами, а этих методов уж точно больше, чем у Оберона (один RAII чего стоит).
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[8]: Синтаксический оверхед
    От: jazzer Россия Skype: enerjazzer
    Дата: 22.06.05 08:58
    Оценка: +2 -1
    Здравствуйте, moudrick, Вы писали:

    M>С++, кстати, тоже начинался с академической разработки. А практики его потом подхватили.

    M>Ссылку навскидку не нашел, извините.

    И не найдешь.
    Потому что он создавался именно для облегчения программирования на С (как и С по отношению к асму, кстати).
    Цель сугубо практическая.
    И обкатывался язык не на теоремах, а в руках действующих программистов на С.

    Почитай D&E.
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[7]: Синтаксический оверхед
    От: jazzer Россия Skype: enerjazzer
    Дата: 22.06.05 15:19
    Оценка: +3
    Здравствуйте, Сергей Губанов, Вы писали:

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


    S>>А еще типичная ошибка — вместо "==" в условии поставить "="...


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


    И соответствующее предупреждение компилятора:
    "ComeauTest.c", line 4: warning: use of "=" where "==" may have been intended
         if(i = 1);
            ^


    Скажи честно, тебе самому не надоело еще фигней заниматься?
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[17]: ЗЫ
    От: Mamut Швеция http://dmitriid.com
    Дата: 23.06.05 07:57
    Оценка: +3
    Я также думаю, что флейма было бы поменьше, если бы Сергей не стал считать лексемы, а, как минимум, просто сказал бы, почему ему нравится Оберон. Так, как это сделали Вы (На основе этой подветки
    Автор: AVC
    Дата: 07.06.05
    )


    dmitriid.comGitHubLinkedIn
    Re[21]: Синтаксический оверхед
    От: CrystaX Россия https://crystax.me/
    Дата: 23.06.05 08:50
    Оценка: +2 -1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Но что мешало Sun и Microsoft для Java и для C# избрать правильный синтаксис?

    СГ>Языки получились бы еще более лучшими.

    Вот этот момент и является наиболее спорным. Для подавляющего большинства программистов (и это факт), правильный синтаксис означал бы ухудшение языка. Правильный синтаксис != хороший язык.

    СГ>Если в будущем, например, IBM или Intel соберется изобрести новый язык, то почему-бы им не взять в качестве синтаксической основы правильный синтаксис Modula/Oberon? Их язык от этого только выиграет.


    Нет, проиграет. А что-что, но деньги считать эти господа умеют.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[21]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 23.06.05 08:57
    Оценка: +3
    Здравствуйте, Сергей Губанов, Вы писали:

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


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


    СГ>Не английский, а США-совский. И это очень существенное уточнение. Это потому, что мог бы быть русский, если бы произошла мировая революция; или немецкий если бы планы фашистов сбылись; или китайский если бы китайцы завоевалю всю евразию. Или японский, если бы у них у первых появилась ядерная бомба. А так как в холодной войне победили именно США, то и язык по всему миру ихний. Кроме того они и компы с программами для них первее всех расплодили. Аналогично у Java нет преимуществ перед Оберонами кроме как то, что за плечами Java стоит Sun. Аналогично про .NET с Microsoft.


    Сергей, уважайте, пожалуйста, родной язык (если, конечно, русский для вас родной) — нет слова "ихний" в русском!
    А утверждения далеки от правоты. Наводящий вопрос: США единственная страна, говорящая по-английски? Если вы хоть немного знаете историю и географию, то гораздо большее значение Англии, а не США (хотя влияние последних тоже немалое, но и туда английский из Англии пришёл)
    Re[14]: Очередной яркий пример
    От: Пацак Россия  
    Дата: 23.06.05 13:03
    Оценка: +3
    Здравствуйте, boomsic, Вы писали:

    B>что за бред??????


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


    procedure p_no_paprams;
    ....
    procedure p_one_param(s: String);
    ...
    function f_no_params: String;
    ...
    function f_one_param(s: String): String;
    ...
    
    {вызов}
    p_no_params;
    p_one_param(str);
    str := f_no_params();
    str2 := f_one_param(str);


    Как по мне — совершенно неудобно. Единообразие рулит.
    Ку...
    Re[2]: Неприятность
    От: qwertyuiop Российская Империя  
    Дата: 23.06.05 16:28
    Оценка: :)))
    СГ>Неприятность приключилась. Компьютер неожиданно вырубился, а после загрузки все сообщения из этой ветки стали помечены как не прочитанные. Короче, поскольку сообщений очень много, то мне трудно понять на что я уже ответил, а на что еще нет. Прошу не обижаться сильно если я чего-то недогляжу. Нет возможности пересмотреть все сообщения.

    А может это знак свыше?
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[2]: Синтаксический оверхед
    От: qwertyuiop Российская Империя  
    Дата: 24.06.05 04:54
    Оценка: +3
    F>Код вроде

    F>
    F>for i := 1 to n
    F>     for j := 1 to m
    F>        sum = sum + a[i][j]
    F>


    F>нагляднее выражает, что же мы имели в виду.


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

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

    F>И еще к слову. Я все понимаю, я знаю все аргументы в пользу того, чтобы начинать индексацию массивов с 0, а не с 1. И все же я считаю это неестественным!


    Для человека может и естественно с единиуы, но для программиста естественно с нуля.
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[6]: Синтаксический оверхед
    От: Amidlokos Россия  
    Дата: 24.06.05 07:24
    Оценка: :)))
    Здравствуйте, Трурль, Вы писали:

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


    F>>>Программист — он тоже человек!


    Q>>Программист — он в первую очередь математик, а в математике первое число — 0!

    Т>Первое — 1!!!

    Трурль, а вы-то куда на своих наезжать вылезли? Напоминаю, в Обероне массив тоже начинается с нуля
    Автор: Sergey J. A.
    Дата: 24.06.05
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[2]: Идеологически правильный мегарулез
    От: Hobot Bobot США  
    Дата: 24.06.05 09:50
    Оценка: +3
    Здравствуйте, Сергей Губанов, Вы писали:


    СГ>Мы можем выйти из нескольких вложенных WHILE/REPEAT циклов. Внешний цикл делаем LOOP-ным, а все вложенные циклы делаем WHILE/REPEAT-ными. Тогда EXIT прервет все циклы сразу. А вот если бы EXIT прерывал бы не только LOOP-ные циклы, но и все остальные, то из нескольких вложенных циклов (без goto или RETURN) выйти было бы (по быстрому) нельзя.

    СГ>Конечно, если вложенные циклы, тоже LOOP-ные, то описанный тут механизм работать не будет (EXIT выведет только на конец ближайшего LOOP-а).

    По-моему о таком надо молчать и не признаваться...
    А то только что рассказывали что из while может быть ровно один выход и вот на тебе...
    За такие решения вообще убивать надо немедленно. Вот понадобится один из вложенных while на loop переделать, например, и привет...
    What a piece of work is a man! how noble in reason! how infinite in faculty! in form and moving how express and admirable! in action how like an angel! in apprehension how like a god! the beauty of the world! the paragon of animals!
    Re[22]: Яркий пример
    От: Пацак Россия  
    Дата: 24.06.05 13:09
    Оценка: +3
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>В одном случае есть выбор использовать блок BEGIN END или не использовать, а в другом случае этого блока просто нет.


    Сериозно чтоль?

    PROCEDURE Test*();
    VAR  i: INTEGER; END
        {тело процедуры начинается здесь}
    ......
    ......
        {тело процедуры заканчивается здесь}
    END Test;


    И где здесь необходимость использования BEGIN? Нема таковой, окромя продиктованной желанием величественной виртовской левой пятки.

    СГ>Сам по себе блок BEGIN END отсутсвуют напрочь.


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

    СГ>Стоило. В си-образном синтаксисе это невозможно даже на синтетических тестах.


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

    СГ>Кстати, а возможно ли, добиться того чтобы звездочное чередование всегда было бы правильным? Наверное нет


    Ах какое озарение! Жаль, что оно не посетило автора перед тем, как он начал обгаживать C++.
    Ку...
    Re[9]: Идеологически правильный мегарулез
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 28.06.05 09:16
    Оценка: +1 :))
    Здравствуйте, Курилка, Вы писали:

    СГ>>Завершится только по одному, прерваться — другой вопрос.


    К>Мсье неслабый специалист по сферическим коням в вакууме


    Я бы даже сказал — главный на RSDN`е...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[9]: Народ упорно не врубается
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 28.06.05 09:59
    Оценка: +2 :)
    Здравствуйте, Сергей Губанов, Вы писали:

    ...

    Эх, вот бы эту энергию и на благо человечества
    Re[13]: Народ упорно не врубается
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 29.06.05 09:03
    Оценка: +3
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Mr. None, Вы писали:


    MN>>Вы русский язык понимаете вообще? Вам были заданы простейшие вопросы, вы можете на них ответить предельно просто: да или нет.


    СГ>Да.


    СГ>(В смысле русский язык понимаю)


    Вы как всегда в своём амплуа. Если ответы на вопросы угрожают вашей теории, вы на них не отвечаете... Вобщем продолжать дискуссию считаю абсолютно бесполезно. Потому что вы не умеете слушать и отвечать на вопросы аппонента. А всё остальное смысла не имеет.
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[16]: Народ упорно не врубается
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 29.06.05 10:11
    Оценка: :)))
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Здравствуйте, Mr. None, Вы писали:


    MN>>>>>Вы русский язык понимаете вообще? Вам были заданы простейшие вопросы, вы можете на них ответить предельно просто: да или нет.


    СГ>>>>Да.


    СГ>>>>(В смысле русский язык понимаю)


    MN>>>Вы как всегда в своём амплуа. Если ответы на вопросы угрожают вашей теории, вы на них не отвечаете... Вобщем продолжать дискуссию считаю абсолютно бесполезно. Потому что вы не умеете слушать и отвечать на вопросы аппонента. А всё остальное смысла не имеет.


    СГ>>Я просто не отвечаю на вопросы ответы на которые и так очевидны

    SJA>Т.е. вы решили, что только ответ на вопрос
    SJA>

    Вы русский язык понимаете вообще?

    не очевиден ?


    Ну формально он прав... из остальных постов сделать правильный вывод насчёт ответа на этот вопрос весьма сложно...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re: Синтаксический оверхед
    От: Gemel  
    Дата: 30.06.05 08:50
    Оценка: -1 :))
    Здравствуйте, Сергей Губанов, Вы писали:


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


    Сие жалкие попытки продлить жизнь умирающему паскалю!!!!!!!


    Я, например, если язык хоть отдаленно напоминает паскаль никогда не буду на нем писать!!! Работаю в С++Builder 6!
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[2]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 05.07.05 07:31
    Оценка: -1 :))
    Здравствуйте, viellsky, Вы писали:

    V>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.

    V>Неправда — это неизвестно.
    СГ>>2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо (чтобы читающему понятно стало где что написано).
    V>Неправда — это тоже неизвестно.

    А теперь, благодаря этой ветке форума, известно!
    Более того, известны даже количественные данные в предельных случаях, а именно 235% и 700%.
    Re[12]: Очередной яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.07.05 12:51
    Оценка: :)))
    Здравствуйте, fddima, Вы писали:

    F>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Нету их и на картинке.

    F> Большими крупными синими буквами написано

    Там PROCEDURE, а не procedure.
    Re[13]: Очередной яркий пример
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 27.07.05 12:57
    Оценка: +1 :))
    Здравствуйте, Сергей Губанов, Вы писали:

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


    F>>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>>Нету их и на картинке.

    F>> Большими крупными синими буквами написано

    СГ>Там PROCEDURE, а не procedure.


    Сергей, а вы не пробовали подсчитать оверхэд больших букв над маленькими?
    Они же больше места на экране занимают!
    Re[13]: Очередной яркий пример
    От: fddima  
    Дата: 27.07.05 13:43
    Оценка: +1 :))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>>>Нету их и на картинке.

    F>> Большими крупными синими буквами написано
    СГ>Там PROCEDURE, а не procedure.
    Сергей, либо срочно меняйте диллера, либо я что-то пропустил в этой жизни... либо мне нужно менять диллера а какая разница между
    PROCEDURE и procedure???

    И когда человек спрашивает здесь
    Автор: Cyberax
    Дата: 09.06.05

    Кстати, если рассуждать о синтаксической избыточности, то зачем в
    Обероне/Паскале абсолютно ненужные лексемы:

    procedure
    function
    var
    do
    to, downto
    ...


    А вы ему здесь
    Автор: Сергей Губанов
    Дата: 09.06.05
    нагло врете:

    В Modula/Oberon ни одно из указанных Вами слов не присутсвует. До Паскаля мне дела нет, он устарел давным давно.


    И если в Обероно-Паскалях PROCEDURE и procedure не одно и тоже, то почему бы не сказать об этом прямо, а намеренно вводить всех в заблуждение, ставить себя в странное положение... Хм. А может в Оберонах еще PROCEDURE, procedure, PROCEDURE и procedure тоже разные???
    Я в искренном недоумении.

    ... << RSDN@Home 1.2.0 alpha rev. 569>>
    Re[15]: Читать всем - статистикаи читаемость
    От: Chervyachok Россия  
    Дата: 23.12.07 00:52
    Оценка: -1 :))
    M>Тогда зачем там слово procedure? Оверхед
    У вас void (либо тип возвращаемой переменной) — что с того? PROCEDURE означает начало описания процедуры, некоторой программной единицы. Также как TYPE — описание типа, CONST — описание констант и т.д. Целостно? На мой взгляд да. Лучше, чем С++? Хуже? Не знаю, вопрос привычки.

    M>Итак. Посчитаем (а мы ведь любим считать). В рамках данного исследования я визуальным шумом называю служебные слова

    M>и выражения, служебные символы и лексемы. Кодом я называю то, что юзера интересует — переменные, имена функций,
    M>цифры. Итак:

    M>Перед тестом есь текст был выровнян по левому краю и убраны пробелы в конце строчек. Статистика — по MS Word

    M>Оберон
    M>Всего тескта: 270 символов (330 — с пробелами)
    M>Код: 94 символа

    M>Код/Текст: ~0.35


    M>C++

    M>Всего текста: 170 символов (214 — с пробелами)
    M>Код: 65 символов

    M>Код/Текст: ~0.38


    M>Оп-па. Сюрприз-сюрприз! С точки зрения того, что и где писать — пофиг, что Оберон, что С++. Но обратите внимание,

    M>_сколько_ надо писать в Обероне.

    Служебные слова — это не шум, это должно быть отделено от творчества программиста тем или иным образом. Для этого вы и подсвечиваете код разными цветами. В Оберонах это делается капитализацией, а подсвечивание делается, например, для выделения спорных фрагментов кода, нововведений (ещё не оттестированных) и т.д.
    Считать любите? Человек читает не по буквам, а словами (как минимум) и читать привык слова, а не символы ({} && $$ :: и т.д.). Впрочем, опять же, кто к чему привык.


    M>А теперь.... Маэстро, туш.

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

    M>Все еще не убеждены? Возьмем куски кода сверху и пропустим их через анализатор:

    M>

    M>С++
    M>Flesch-Kincaid Reading Ease: 62
    M>Ideally, web page text should be around the 60 to 80 mark on this scale. The higher the score, the more readable the text.

    M>Flesch-Kincaid Grade Level: 10
    M>Ideally, web page text should be around the 6 to 7 mark on this scale. The lower the score, the more readable the text.

    M>Gunning-Fox Index: 17
    M>Ideally, web page text should be between 11 and 15 on this scale. The lower the score, the more readable the text. (Anything over 22 should be considered the equivalent of post-graduate level text).


    M>Оберон
    M>Flesch-Kincaid Reading Ease: -709
    M>Ideally, web page text should be around the 60 to 80 mark on this scale. The higher the score, the more readable the text.

    M>Flesch-Kincaid Grade Level: 315
    M>Ideally, web page text should be around the 6 to 7 mark on this scale. The lower the score, the more readable the text.

    M>Gunning-Fox Index: 332
    M>Ideally, web page text should be between 11 and 15 on this scale. The lower the score, the more readable the text. (Anything over 22 should be considered the equivalent of post-graduate level text).


    M>Как говорят англичане — ouch, it hurts.


    А вот это вообще ни в какие ворота! Взять тестя читабельности ОБЫЧНЫХ текстов, которые оценивают читабельность исходя из длины и конструкции предложений и впендюрить в них исходные коды! Мухлёж, елы-палы. Хорошо вам, что народ ленивый попался, посмотрел на цифирьки и кивает согласно, молодец, чувак, уел оберонцев. В сад такие тесты.

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


    Про заглавные буквы было выше, скажу лишь, что если бы ВЕСЬ исходный текст писался заглавными буквами, то придирка была бы засчитана. А так — нет. Зачем, по вашему, предложения начинаются с заглавных букв? Уж наверное для затруднения чтения. Явно.

    M>Я все больше и больше убеждаюсь в непригодности Оберона к написанию сколько-нибудь длинного кода из-за его вопиющей нечитаемости.


    Это вам кажется, точнее — это ВАМ кажется. Многим удобнее читать код Оберона.

    M>Тепреь опять оп! Сейчас мне возразат, что если бы се было так плохо, то Оберон не стали бы использовать на атомных станциях Знаете, и на ассемблере можно написать очень серьезные системы (и писали!). Но является ли это знаком того, что это великолепный язык с безупречным синтаксисом? Никак нет.


    Мимо кассы.

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


    Мимо кассы.

    M>На данный момент существуют десятки языков, которые позволяют выражать мысли намного эффективнее, чем Оберон (возьмем Perl и манипуляцию стрингами, например). Существуют десятки языков, которые позволяют выражать мысли намного понятнее, чем Оберон (русский, например или С++ — да, С++!). Оберон не хуже и, главное, не лучше этих языков. Он всего лишь один из таких языков со своим, весьма грубым синтаксисом и непонятным будущим. Но делать из него культ? Подсчитывать лексемы? Извините, у многих есть дела поважнее
    Автор: Mr.Chipset
    Дата: 14.06.05


    Мимо кассы. Если в голову намертво вбит С++, то всё остальное кажется туфтой малопригодной. Пускай, только не надо при этом казаться объективным и сыпать какой-то статистикой, изгаляться как-то ещё. Просто заявите:"Да, я люблю С++, да он мне кажется венцом, да мне близок его синтаксис, да-да-да, но это моё личное мнение, прошу принять это во внимание".
    С уважением, человек, пишущий на FORTRAN.
    Re: Синтаксический оверхед
    От: x-code  
    Дата: 23.12.07 20:05
    Оценка: :)))
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Я надеюсь, что еще очнеь долго

    Сишный синтаксис — это лучшее что сейчас есть. Недаром многие распространенные языки — C++, ObjC, Java, C#, JavaScript, PHP, Perl — основаны именно на сишном синтаксисе.
    А синтаксис Паскаль-Ада слишком громоздкий. Это же додуматься надо: вместо {} писать begin end! синтаксический оверхед уже здесь 400% (8 символов вместо двух, а если учесть что перед и после begin/end нужно ставить пробелы, то и вовсе 600% )

    далее: скобки для аргументов операторов — просто замечательная идея! например, сравним
    if(x) f(x)
    if x then f(x) end

    подсчитайте символы — оверхед 200%
    но даже это не главное: скобки выделяют аргумент логически. Воспринимать такой код гораздо проще.

    Есть конечно некоторые мелкие недостатки, но они вполне устранимы, и, возможно, когда-нибудь в очередном си-подобном языке их и устранят (кстати, в Scala и Nemerle уже многое устранили)
    В частности, можно улучшить определение функций: вместо
    int func(int x, int y)

    использовать
    def func(int x, y):int

    это существенно облегчит парсинг и динамическую поддержку различных Class Viewer'ов, особенно если в языке есть вложенные функции, и создаст единообразие в определении объектов всех видов (ключевое слово — имя — декларативное описание)
    Еще в С++ следовало бы упростить синтаксис шаблонов, убрать template и использовать обычные скобки
    class Array(typename T, int size)
    {
    };
    Array(char,100) m_list;

    в продвинутых языках кстати так и делают.
    А в остальном сишный синтаксис вполне даже идеален

    ЗЫ: наверняка все это уже отвечали, читать тему не стал, ибо это нереально
    Re[3]: Синтаксический оверхед
    От: AVC Россия  
    Дата: 21.06.05 23:35
    Оценка: 6 (2)
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Разрешите вклинится.

    SJA>Мой е2-е4:

    "Остап не баловал соперников разнообразием дебютов". ("12 стульев")

    AVC>>а) Соответствие структурным принципам.


    AVC>>В отличие от синтаксиса Модулы/Оберона синтаксис Си/Си++ не соответствует принципам структурного программирования.

    AVC>>Рассмотрим хотя бы циклы.

    SJA>Да. Рассмотрим.

    SJA>Пример:

    SJA>
    SJA>MODULE TestTest;
    SJA>  IMPORT StdLog, Files; 
    
    SJA>  PROCEDURE Test*();
    SJA>  VAR  by: INTEGER;
    SJA>  BEGIN
    SJA>        by := 10;
    
    SJA>        LOOP
    SJA>            (*I expect by==0 after LOOP. Always. Oberon is cool.*)
    SJA>            IF by=0 THEN EXIT END; 
    SJA>            by := by - 1;
    SJA>            EXIT;
    SJA>        END;
            
    SJA>        IF by # 0 THEN
    SJA>            (*What the fuck !*)
    SJA>        END;
            
    SJA>  END Test;
    SJA>END TestTest.
    SJA>


    SJA>Итак, Оберон тоже не соответствует принципам структурного программирования.


    Все это замечательно, но... неверно.
    (Наверное, я должен добавить "ИМХО"? )
    Цикл LOOP ничего не "обещает" читателю программы. Он введен для особых ситуаций, где применение WHILE и REPEAT вызывает затруднения. В основном это обработчики прерываний и операции ввода/вывода.
    Когда в программе встечается LOOP, то программист предупрежден, что в теле цикла, наверное, встретится EXIT, т.к. из этого цикла нельзя выйти другим способом, кроме как EXIT и RETURN. В Си/Си++ аналогом является бесконечный цикл for ( ; ; ).
    Совсем иное дело циклы WHILE и REPEAT.
    Что означает конструкция
    WHILE p DO ... END; Q;

    ?
    Она означает, что пока выполняется условие p, из цикла мы не выйдем (исключение составляет оператор возврата RETURN). Следовательно, после выхода из цикла и перед выполнением Q обязательно выполняется условие ~p. Иначе мы бы еще "крутились" в цикле WHILE (или бы уже вышли из подпрограммы).
    А вот в программе на Си/Си++ в аналогичной ситуации
    while (p) { ... } Q();
    мы в этом не можем быть уверены (т.к. должны считаться с возможностью break или goto) и должны относиться к while практически также, как к LOOP или for ( ; ; ). Поэтому использование while не облегчает нам понимания программы.
    Об этом я и написал в своем посте.

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re[6]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 22.06.05 10:54
    Оценка: 6 (2)
    Здравствуйте, Сергей Губанов, Вы писали:

    B>>так что получается в обероне точно так же програмист не может быть "уверен, что перед следующим оператором после выхода из цикла выполняется условие ~p (NOT p)."


    СГ>Может. Таково одно из положений структурного программирования.

    СГ>
    СГ>WHILE p DO 
    СГ>  ... 
    СГ>END; 
    СГ>ASSERT(~p) 
    СГ>

    СГ>Этот ассерт ни когда не остановит выполнение программы, условие ~p всегда истинно.

    СГ>
    СГ>while (p)
    СГ>{ 
    СГ>  ... 
    СГ>}
    СГ>assert(!p) 
    СГ>

    СГ>А вот этот ассерт иногда может остановить работу программы. Например, если внутри цикла сделать break не присвоив p ложное значение.

    Давайте внесём ясность касательно постусловий и инвариантов цикла, и какое отношение к этому имеют условия и ассерты.
    Цикл можно представить в виде такого ветвления
    assert(P);          //           допущение о состоянии программы перед циклом (включая инвариант)
    enter:
      assert(Q);        // P -> Q    допущение сразу после ветвления (перед проверками)
      . . .
      assert(R0);
      if(R) goto leave; // R -> T    закон выхода (ложь в while(), break, return)
      assert(R1);       // R1 -> R0 & !R
      . . .
      assert(S0);
      if(S) goto enter; // S -> Q    закон повтора (конец тела цикла, проверка в do-while(), continue)
      assert(S1);
      . . .
      assert(Q && !T);  //           безусловный повтор (означает, что выполняется предусловие и не выполняется постусловие)
      goto enter;
    leave:
    assert(T);

    Предикаты P...T связаны между собой импликацией.

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

    Пусть некое "маленькое" выражение r обладает таким свойством: (R0 && r -> R), (R0 && !r -> R1)
    Тогда
      assert(R0);
      if(R) goto leave;
      assert(R0 && !R);

    можно переписать как
      if(r) goto leave;


    То есть, вместо while(All_Known_Laws_And_Assertions){...} мы пишем while(tiny_test){...}

    Разумеется, в некоторых случаях (в частности, если в теле цикла нет break) можно утверждать, что постусловие содержит tiny_test как один из конъюнктов. Но вообще говоря, это необязательно.

    Подытоживая:
    Булевы выражения, которые управляют ветвлением — это не сами предусловия/постусловия/инварианты, а только признаки.
    Перекуём баги на фичи!
    Re[12]: Яркий пример
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 24.06.05 18:48
    Оценка: 6 (2)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>К компиляторам-то это как относится?

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

    СГ>Откуда компилятору знать какая ветвь в IF наиболее вероятна главная или побочная?

    Ну, во-первых, он может это все-таки знать. Как минимум путем статического анализа.
    СГ>Он компилирует так как написано.
    Сергей, компиляторы, компилирующие "как написано", перестали применять в коммерческом программировании лет наверное пятнадцать назад.
    СГ>Откуда процессору знать какая ветвь более вероятна? Ни откуда ему это знать нельзя. А раз ни откуда это заранее узнать нельзя, то логично всегда начинать заранее подгружать данные из главной ветви.
    Сергей, вы бы почитали что-нибудь из того, что вам советуют. Для справки: соврменные процессоры предсказывают вероятность переходов уже поколений пять, если не шесть. И очень хорошо предсказывают. Лучше, чем программист. Вот, к примеру, как вы думаете, сколько раз будет сбрасываться конвеер в таком примере:
    for(int i=0; i<N; i++)
      if (i & 1)
          cout << "odd";
        else
          cout << "even";

    ? Тут исполнение идет каждый раз по другой ветке. Правильный ответ: будет не более двух сбросов. Далее процессор запомнит паттерн чередования и будет следовать ему. Более того, процессор будет считать условие проверки "остаемся в цикле" верным, и ошибется только один раз — когда i таки достигнет N.
    В общем, у вас катастрофически не хватает знаний об устройстве современных процессоров и компиляторов. Причем самое для вас опасное — это то, что вы основываете на этом невежестве далеко идущие выводы о том, как должен вести себя программист по отношению к компилятору и т.д. С этой точки зрения попытки рассуждать о преимуществе одних языков над другими выглядят несколько нелепо. Вы изначально строите неверную модель ситуации. Вряд ли язык, идеально подходящий вашему воображаемому программисту, будет подходить программисту реальному. Именно потому, что реальный программист живет в другом окружении.

    СГ> А раз так, то и программист должен главную ветвь делать наиболее вероятной.

    Как обычно — из неверного предположения делается неверный вывод.
    СГ>В Дельфи это между прочим официально рекомендуют на полном серьезе (Тейксейра, Пачеко). А откуда компилятору-то знать?
    Кошмар какой. Ну как откуда? Сергей, я понимаю, что в академической среде принято пренебрегать современным состоянием техники. Но настолько-то это делать нельзя! Практически любой современный компилятор С/С++ в состоянии выполнить такой анализ. У компилятора Delphi выполнить оптимизацию несложной программы действительно получается не лучше, чем у паралитика провести операцию на мозге гаечным ключом. Но это далеко не лучшее достижение компиляторщицкой мысли.
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[9]: Интересно
    От: AVC Россия  
    Дата: 22.06.05 20:40
    Оценка: 5 (2)
    Здравствуйте, Amidlokos, Вы писали:

    СГ>>Мне даже интересно стало. Может покажете пример?


    A>Пожалуйста. Из недавне-жизненного, пусть и "своими словами". Первое:


    A>
    A>// Классика: проход по самописному связному списку с поиском
    A>// нужного элемента
    A>while (pItem->Next)
    A>{
    A>    if (CheckItem(pItem))
    A>        break;
            
    A>    pItem = pItem->Next;
    A>}
    A>// И здесь ещё обработка найденного pItem...
    A>


    Даже неловко как-то. Ну ладно.
    Кстати, можно заодно вопрос: а если в самом начале pItem = NIL?
    Думается, лучше проверить. Получаем:
    WHILE (pItem # NIL) & ~CheckItem(pItem) DO pItem := pItem.Next END;

    А почему на Си++ нельзя сделать так же?
    while (pItem && !CheckItem(pItem))
        p = pItem->next;


    A>Второе:


    A>
    A>// Цикл по всему массиву некоторых объектов.
    A>for (DWORD i = 0; i < dwCount; i++)
    A>{
    A>    // Здесь ведётся определённая обработка _и учёт_ этих объектов.
    A>    // Условия таковы, что обработка может закончиться где-то на середине
    A>    // списка, а может и дойти до конца в зависимости от некоторого обнаруженного
    A>    // условия. Т.е. объектов может быть и десять тысяч, но мы насчитаем нужное
    A>    // количество интересующих нас уже за первую дюжину.
    A>    WorkWithObject(pObjects[i]);
        
    A>    if (CalculateStat() > SOME_VALUE)
    A>        break;
    A>}
    
    A>// Здесь ещё продолжаем некоторую работу...
    A>


    Бог мой, какая трудная задача!
    IF dwCount > 0 THEN i := 0;
      REPEAT
        WorkWithObject(pObject[i]);
        INC(i)
      UNTIL (i = dwCount) OR (CalculateStat() > SOME_VALUE)
    END;

    Может быть, Вам не нравится, что переменная i видна за пределами конструкции?
    Извольте, могу спрятать ее в локальной процедуре (на всякий случай напомню, что локальные процедуры могут встраиваться)
      PROCEDURE WorkWithObjects;
        VAR i: INTEGER;
      BEGIN
        FOR i := 0 TO dwCount DO
          WorkWithObject(pObject[i]);
          IF CalculateStat() > SOME_VALUE THEN RETURN END
        END
      END WorkWithObjects;
    ...
    WorkWithObjects;


    A>Теперь прошу Сергея представить версии без break. И не просто без break, а ещё и без уродства в духе

    A>
    A>int Exit = 0;
    A>while ((i < nCount) && !Exit)
    A>{    
    A>    if (Something(object[i]))
    A>        Exit = 1;
            
    A>    // И т.д.
    A>    i++;
    A>}
    A>


    A>Или аналогично уродливых разновидностей с for-ом...


    Да-да, Сергей, не делай так, как Amidlokos!

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re: Синтаксический оверхед
    От: Oyster Украина https://github.com/devoyster
    Дата: 09.06.05 10:12
    Оценка: 3 (1) :)
    Здравствуйте, Сергей Губанов, Вы писали:

    Эх... не поленюсь

    СГ>Си-образный синтаксис:

    СГ>
    СГ>while(a)
    СГ>{
    СГ>     x();
    СГ>}
    СГ>

    СГ>Реально необходимый и достаточный синтаксис:
    СГ>
    СГ>WHILE a DO x END
    СГ>

    Вот:

    while (a) x();


    СГ>Си-образный синтаксис:

    СГ>
    СГ>while(true)
    СГ>{
    СГ>     x();
    СГ>     if(a)
    СГ>     {
    СГ>          y();
    СГ>          break;
    СГ>     }
    СГ>     z();
    СГ>}
    СГ>

    СГ>Реально необходимый и достаточный синтаксис:
    СГ>
    СГ>LOOP 
    СГ>  x;
    СГ>  IF a THEN y; EXIT END;
    СГ>  z
    СГ>END
    СГ>

    Пожалуйста:

    while (true) {
        x();
        if (a) { y(); break; }
        z();
    }


    СГ>Си-образный синтаксис:

    СГ>
    СГ>do
    СГ>{
    СГ>     x();
    СГ>}
    СГ>while(a);
    СГ>

    СГ>Реально необходимый и достаточный синтаксис:
    СГ>
    СГ>REPEAT x UNTIL b
    СГ>

    Чем плохо так?:

    do x(); while (a);


    СГ>Си-образный синтаксис:

    СГ>
    СГ>if(a)
    СГ>{
    СГ>     x();
    СГ>}
    СГ>

    СГ>Реально необходимый и достаточный синтаксис:
    СГ>
    СГ>IF a THEN x END
    СГ>

    Без проблем:

    if (a) x();


    СГ>Си-образный синтаксис:

    СГ>
    СГ>if(a)
    СГ>{
    СГ>     x();
    СГ>}
    СГ>else
    СГ>{
    СГ>     y();
    СГ>}
    СГ>

    СГ>Реально необходимый и достаточный синтаксис:
    СГ>
    СГ>IF a THEN x ELSE y END
    СГ>

    Ну если хочется...:

    if (a) x(); else y();


    СГ>Си-образный синтаксис:

    СГ>
    СГ>if(a)
    СГ>{
    СГ>     x();
    СГ>}
    СГ>else
    СГ>{
    СГ>     if(b)
    СГ>     {
    СГ>          y();
    СГ>     }
    СГ>     else
    СГ>     {
    СГ>          z();
    СГ>     }
    СГ>}
    СГ>

    СГ>Реально необходимый и достаточный синтаксис:
    СГ>
    СГ>IF a THEN x ELSIF b THEN y ELSE z END
    СГ>

    И так тоже можно:

    if (a) x(); else if (b) y(); else z();


    СГ>Си-образный синтаксис:

    СГ>
    СГ>switch(n)
    СГ>{
    СГ>     case a:
    СГ>          x();
    СГ>          break;
    СГ>     case b:
    СГ>          y();
    СГ>          break;
    СГ>     default:
    СГ>          z();
    СГ>}
    СГ>

    СГ>Реально необходимый и достаточный синтаксис:
    СГ>
    СГ>CASE n OF a: x | b: y ELSE z END
    СГ>

    Да и так, при желании:

    switch (n) { case a: x(); break; case b: y(); break; default: z(); }



    Ну и?...

    Намёк: всё от тебя зависит.
    Re[11]: Синтаксический оверхед: а смысл-то в чем?
    От: Кодт Россия  
    Дата: 10.06.05 10:00
    Оценка: 3 (1) +1
    Здравствуйте, garant, Вы писали:

    G>Здравствуй, Кодт.


    К>> Смысл заметки в том, что: СИ-ОБРАЗНЫЙ СИНТАКСИС ИСПОЛЬЗУЕТ

    К>> БОЛЬШЕ ЛЕКСЕМ ЧЕМ ЭТО РЕАЛЬНО НЕОБХОДИМО. Я специально для Вас
    К>> заглавными буквами написал смысл. Запомните его. А то,
    К>> понимаете-ли, прочитали сообщение, а смысла так и не поняли.

    Я этого не говорил.

    G>Ха-ха-ха-ха! (вежливо)

    G>А над чем смеемся-то?..

    Я — над Сергеем Губановым, который утверждает, что Си-образный синтаксис избыточен, но почему-то в качестве примера для подражания приводит громоздкий синтаксис Оберона.

    А как ещё можно назвать язык, в котором пишутся BEGIN END PROCEDURE MODULE и прочие здоровенные слова, но при этом соблюдается экономия на спичках:
    — признак доступа к имени в модуле выражается плюсиком-минусиком в имени
    — разделитель ветвей в свитче — палочкой (а в if — словами THEN, ELSE)



    А над чем ты смеёшься — откуда я знаю?
    Перекуём баги на фичи!
    Re[2]: Синтаксический оверхед
    От: bkat  
    Дата: 15.06.05 15:28
    Оценка: 3 (1) :)
    Здравствуйте, Pavel Dvorkin, Вы писали:

    PD>Начал я читать этот тред, довольно быстро надоело. Меня не взгляды Сергея Губанова удивляют, тут ИМХО обсуждать не стоит. Меня другое удивляет — как только какая-нибудь ерунда появится, так все сразу дружно бросаются ее опровергать, не жалея ни сил не времени. Стоит ли ? Так ведь если кто-то заявит, что 2*2=5, глядишь, целая дискуссия начнется на эту тему


    Да это еще классики описали.
    Вспомите Джонатана Свифта и Гулливера.
    Самые простые вещи вызываются самые рьяные споры.

    Горячих тем вообще мало.
    Я лично знаю только две:
    1) X vs. Y
    2) Нужен ли goto
    Re[5]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 16.06.05 08:46
    Оценка: 3 (1) +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Не отлаживать программы надо, а математически строго доказывать их корректность.


    Да сколько угодно! Доказал, всё проверил, а потом лишнюю запятую где-нибудь поставил.
    Перекуём баги на фичи!
    Re[12]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 16.06.05 08:52
    Оценка: 3 (1) :)
    Здравствуйте, Аноним, Вы писали:

    СГ>>Так ведь, еще Эйнштейн говорил — сделать так просто, как только возможно, но не проще. Но не проще!!!


    А>Проще для чего? Для компилятора все просто

    А>Проще для чтения или для отладки... просто != коротко.

    Ведь сказано же: сделайте просто (для компилятора), но не проще (для программиста)
    Перекуём баги на фичи!
    Re[7]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 21.06.05 08:27
    Оценка: 3 (1) +1
    Сергей Губанов wrote:

    > C>Вам продемонстрировали с десяток раз, что синтаксис С++ далеко не так

    > C>избыточен (скорее идет на равных) с Oberon'ом.
    > А я продемонстрировал
    > <http://rsdn.ru/Forum/Message.aspx?mid=1214478&amp;only=1&gt;
    Автор: Сергей Губанов
    Дата: 09.06.05
    235% по

    > синтаксису и 700% по строчкам.

    Это все равно, что проводить соц. опрос по поводу "Нужно ли расстрелять
    Чубайса?" на митинге коммунистов.

    > C>Вы это все проигнорировали.

    > Естественно (жаль что нету смайлика такого где человек крутит пальцем
    > у виска), зато мою демонстрацию
    > <http://rsdn.ru/Forum/Message.aspx?mid=1214478&amp;only=1&gt;
    Автор: Сергей Губанов
    Дата: 09.06.05
    , не смотря на

    > ее явную гиперболизацию, сотня ковбоев, включая Вас, почему-то не
    > проигнорировала. К чему-бы это?

    А то, что демонстрация — кривая.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[8]: Яркий пример
    От: Пацак Россия  
    Дата: 21.06.05 16:12
    Оценка: 3 (1) +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Циклов бывает всего три типа. Здесь налицо цикл с проверкой условия внутри итерации, т.е. цикл LOOP, так и пишем:

    СГ>

    Итого:
    лексем — 24
    строк кода — 12
    символов (не считая отступов) — 236

    while (!end_of_stream) {
        read_socket();
        if (checksum == fails) {
        raise_hacker_alert();
        break;
        }
        if (number_of_bytes_read() > MAX_DATA_ALLOWED) break;
        process_data();
    }


    Итого:
    лексем — 33
    строк кода — 9
    символов (не считая отступов) — 175

    Ну и где хваленое превышение в разы?

    PS Это я еще не говорю об очередной подмене понятий: вместо цикла "выполняй пока не конец потока" получился "выполняй вечно" с последующей проверкой условия. Это не есть одно и то же.
    Ку...
    Re[10]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 23.06.05 06:06
    Оценка: 3 (1) :)
    Здравствуйте, CrystaX, Вы писали:

    CX>

    CX>А ты японскую печатную машинку видел?

    http://yuri.shilyaev.com/2005/01/11/234/kitayskaya-pechatnaya-mashinka.html
    Я — свихнувшееся сознание Джо.
    Re[12]: Очередной яркий пример
    От: Sergey J. A. Беларусь  
    Дата: 23.06.05 07:21
    Оценка: 3 (1) +1
    Здравствуйте, Сергей Губанов, Вы писали:

    Т>>Есть масса других вещей, о которых можно приятно пофлеймить.


    СГ>Например, до каких пор некоторые люди будут предполагать...


    Это Вам лучше знать. Вы у нас любитель ляпнуть "предположив" Да что любитель — профессионал
    Я — свихнувшееся сознание Джо.
    Re[18]: Яркий пример
    От: qwertyuiop Российская Империя  
    Дата: 23.06.05 10:16
    Оценка: 3 (1) :)
    Q>> какова его практическая польза

    СГ>Его можно использовать для математического доказательства правильности алгоритмов. Об этом говорилось в самом начале (верификация).


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

    Мне это напомнило случай советских времен, когда какое-то НИИ разработало систему для автоматичекой пайки печатных плат. Правда у нее был маленький недостаток (как и у ваших методов верификации): она могла собирать плату только если на ней стояли все одинаковые элементы. В результате министерство издало приказ: электронная аппаратура должна разрабатываться так, чтобы могла собираться этой системой, то есть на одной плате должны быть только резисторы, на другой — только конденсаторы, на третьей микросхемы одного размера, на четвертой — другого и т.д. И все они должны вставляться в кросс-плату с одинаковыми разъемами.
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[9]: Open source
    От: moudrick Россия http://community.moudrick.net/
    Дата: 25.06.05 08:59
    Оценка: 3 (1) +1
    СГ>Вы правы. По этому поводу Никлаус Вирт как раз и ругал все эти дебагеры. А имеено, он говорил, что существуют программы, которые нельзя дебажить — сборщик мусора, например. В его статье про создание Оберона он на этом специально акцентирует внимание. Сборщик мусора должен быть написан с особой тщательностью.

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

    "Что такое процесс отлаживания программы? Это процесс избавления программы от лажи." (с)
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[24]: Яркий пример
    От: prVovik Россия  
    Дата: 04.07.05 20:56
    Оценка: 3 (1) :)
    Здравствуйте, Sergey J. A., Вы писали:


    SJA>Да что там !


    SJA>
    SJA>        LOOP
    SJA>            IF TRUE THEN EXIT END;
    SJA>        END
    SJA>


    SJA>* * * * * * *


    SJA>


    Да что уж там:
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    ************************************************************************************************************
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[10]: *
    От: Privalov  
    Дата: 09.06.05 14:56
    Оценка: 2 (1) :)
    Здравствуйте, Maniacal, Вы писали:

    M>А


    M>if (a) x(); else y();


    M>не устраивает?


    Конечно, нет!

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

    (c) не помню.
    Re[9]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 19:33
    Оценка: 2 (1) :)
    Здравствуйте, Слава Шевцов, Вы писали:

    СШ>Здравствуйте, Сергей Губанов, Вы писали:


    CГ>>Я немного оптимизировал: наиболее вероятная ветвь исполнения всегда должна идти после THEN, наименее вероятная ветвь в ELSE — такого требование современных конвеерных процессоров.


    СШ>А в чём прикол? Вроде сумма длин прыжков (для каждой ветки) в обоих случаях одинакова и число разрывов конвеера тоже. Или?


    Признаться честно, мне не известны тонкости реализации конвееров. Но то что данные из оперативной памяти грузятся в регистр процессора много тактов всем известный факт. Так вот, очевидно, что для ускорения работы надо "смотреть в перед" и загружать те данные, которые в скором времени понадобятся заранее. Спрашивается как быть процессору если встречается оператор ветвления? Данные из какой ветви загружать заранее? Предпочтение отдается главной ветви (т.е. коду в THEN, а код в ELSE считается исполняемым с меньшей вероятностью. Прошу прощения если не совсем прав, еще раз напоминаю, что мне не известны тонкости реализации конвееров.
    Re[21]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 23.06.05 08:37
    Оценка: 2 (1) +1
    СГ>Если в будущем, например, IBM или Intel соберется изобрести новый язык, то почему-бы им не взять в качестве синтаксической основы правильный синтаксис Modula/Oberon? Их язык от этого только выиграет.

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


    dmitriid.comGitHubLinkedIn
    Re[22]: СИНТАКСИС
    От: Mamut Швеция http://dmitriid.com
    Дата: 23.06.05 09:36
    Оценка: 2 (2)
    Здравствуйте, Mamut, Вы писали:

    СГ>>Если в будущем, например, IBM или Intel соберется изобрести новый язык, то почему-бы им не взять в качестве синтаксической основы правильный синтаксис Modula/Oberon? Их язык от этого только выиграет.


    M>Кто сказал, что этот синтаксис — правильный? Только не надо ссылки на самого себе приводить. Требуется ссылка на строгое математическое доказательство правильности данного синтаксиса.


    Как всегда, все приходится делать самому. Не знаю, увидят ли это сообщение в этой ветке, ну да ладно.

    Syntax across languages

    Некоторые варианты синтаксиса просто великолепны.


    dmitriid.comGitHubLinkedIn
    Re[17]: Яркий пример
    От: Mamut Швеция http://dmitriid.com
    Дата: 23.06.05 10:08
    Оценка: 2 (1) +1
    П>что означает добавление одной (!) строчки. В обероне программист должен переделать WHILE на LOOP с двумя IF .. THEN EXIT END по одному на каждое условие. Безумно удобно, ничего не скажешь!
    П>ИМХО единственное, чего можно добиться таким подходом — так это того, что программисты будут все циклы, кроме самых тривиальных писать через ж... ой то есть через LOOP. Попросту чтоб потом не заморачиваться с возможными переделками.

    Это я так и и продемострировал
    Автор: Mamut
    Дата: 22.06.05
    . Но мои потуги были наинаглейшим образом проигнорированы
    Автор: Сергей Губанов
    Дата: 23.06.05


    dmitriid.comGitHubLinkedIn
    Re[7]: Идеологически правильный мегарулез
    От: Кодт Россия  
    Дата: 27.06.05 14:35
    Оценка: 2 (1) +1
    Здравствуйте, Sergey J. A., Вы писали:

    СГ>>>>EXIT дешево и сердито завершает ближайший LOOP. Чего такого-то?


    SJA>>>break дешево и сердито завершает ближайший while/for/do-while. Чего такого-то?


    СГ>>Циклом WHILE или REPEAT называется цикл, который может завершиться только по 1 условию.

    SJA>Короче, это уже не смешно.
    SJA>На всякий случай, напомню, что EXIT может выбросить из WHILE или REPEAT по совершенно другому условию, если WHILE находится внутри LOOP.
    SJA>А может вы решились на моё предложение называть такие циклы LOOP-n-WHILE. Тогда да. WHILE сможет выйти только по одному условию. Но тогда в Обероне будет оверхед по циклам ! Выбирайте !

    Вот именно:
    while(condition)
    {
      foo...;
      break;
      bar...;
    }

    эквивалентно
    LOOP
      WHILE condition DO
        foo...;
        EXIT;
        bar...;
      END;
      EXIT (* чтобы сразу же выйти при удачном завершении *)
    END
    Перекуём баги на фичи!
    Re[7]: Синтаксический оверхед
    От: FDSC Россия consp11.github.io блог
    Дата: 09.06.05 11:08
    Оценка: 1 (1) +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>2) Для разных языков общепринятые способы оформления текста — разные. Для Си-образного языка, я насчитал оверхед по оформлению в 700 процентов по сравнению с минимально возможным.


    А причём тут СИ? Тогда речь идёт о общепринятых нормах оформления, но они почти во всех языках одинаковы — даже в ассемблере иногда можно сделать нечитаемой программу не поставив лишний cr (уж он то требует cr так же ка ";" Си)

    Давайте тогда беседовать о новой модели синтаксиса, ведь Си только один из сотен языков с такой избыточностью. Нужно ещё доказать, что избыточность плохо влияет на качество кода (легко читаемый код содержит меньше ошибок и гораздо легче отлаживается). Давайте тогда и от коментариев откажемся (особенно в ассемблере, ха-ха).
    Кострукции, которые Вы приводили, могут быть совершенно нечитаемы при длинных названиях.

    Проводя аналогию, можно сказать что Вы хотите создать тензорное исчисление когда все пользуются векторным.
    Re[10]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 16.06.05 09:49
    Оценка: 1 (1) +1
    Здравствуйте, Mamut, Вы писали:

    M>По Дискавери одной из самых сложных программ, работающих сегодня, назвали программу автоматического входа шаттла в атмосферу. С начала входа до -4 км до посадки люди к управлению даже не прикасаются. А там, как никак — управляемое падение (планированием это сложно назвать) на запредельных скоростях (13-25 Мах, что ли).


    Это конечно демагогия, но очень часто по Дискавери под фразой "во всём мире" подразумевается "в США и Канаде" . Замечал не раз.

    M>Думаю, там ни С, ни Оберон даже близко не подпускали


    ADA — как единственный язык стандратизированный ихними военными для ихних же разработок... это IMHO...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[4]: Синтаксический оверхед
    От: Кодёнок  
    Дата: 20.06.05 09:04
    Оценка: 1 (1) :)
    Кё>>По-моему, среди кандидатов умных людей как раз меньшинство, а не большинство. Знаете же этот маразм, писать научные статьи, публиковаться, а главное читать чужие очень умные банальности, написанные научным языком. Откройте какой-нибудь специфический научный журнал — даже зная предмет читать это напрягает. Разве нормальный человек там останется? Отмазка от армии не в счёт

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


    AA>Но я еще раз попросил бы не делать обобщающих выводов. Научные исследования — это то, что движет мир вперед и то, плодами чего мы пользуемся сегодня. Очень жаль, что сейчас в нашей стране с этим (почти) полная задница. Это значит лишь, что у этой страны будет очень трудное послезавтра, когда нефть кончится...


    Я ничего не понял
    Re[2]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 10:53
    Оценка: 1 (1) +1
    Здравствуйте, AVC, Вы писали:

    AVC>Здравствуйте, Сергей Губанов, Вы писали:


    AVC>а) Соответствие структурным принципам.


    AVC>В отличие от синтаксиса Модулы/Оберона синтаксис Си/Си++ не соответствует принципам структурного программирования.

    1. Ссылку на "принципы структурного программированитя" в студию.

    AVC>Рассмотрим хотя бы циклы.

    AVC>Когда программист пишет (или, что важнее, читает) на Модуле/Обероне цикл
    AVC>
    AVC>WHILE p DO ... END
    AVC>

    AVC>он абсолютно уверен, что перед следующим оператором после выхода из цикла выполняется условие ~p (NOT p).
    AVC>Если программист читает аналогичный цикл
    AVC>
    AVC>while (p) { ... }
    AVC>

    AVC>на Си/Си++, он не может быть в этом уверен, т.к. внутри цикла может находиться как оператор break, так и знаменитый goto.
    Ах, вот о чем речь? А что мешает Вам их не использовать?

    А вот break действительно в C не совсем такой, какой (лично мне) хотелось бы. А мне хотелось бы такой как в Java — тогда точно goto не нужен ни в каком случае, даже из соображение эффективности.

    Я вам могу сказать, какие приоритетные принципы у C++.
    1. Поддержка максимального количества парадигм программирования (в том числе и структурного) здесь
    2. Поддержка Legacy кода здесь

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

    AVC>Соответственно, проверка корректности программы существенно затрудняется.


    AVC>б) Синтаксический "оверхед".


    AVC>Я согласен с Сергеем, что в синтаксисе Си/Си++ заключен значительный "оверхед".

    AVC>Но таится он в основном в величине и сложности языка и его описания, а также в некоторых синтаксических деталях.
    AVC>Например, в количестве уровней и запутанности приоритетов операторов.
    AVC>Скажите честно: многие ли помнят таблицу приоритетов операторов Си/Си++ полностью?
    AVC>И сравните это с Обероном, где всего четыре уровня приоритетов:
    AVC>1) операция ~ (логическое отрицание);
    AVC>2) мультипликативные операции;
    AVC>3) аддитивные операции;
    AVC>4) сравнения.
    AVC>Остается добавить, что операции одного приоритета выполняются слева направо. И все. Что, сложно?

    AVC>2. Исходные тексты Си/Си++ и документы Оберона.


    AVC>Есть существенное различие в работе с исходными текстами программ на Си/Си++.

    AVC>Программа на Си/Си++ — это по-прежнему обыкновенный текст.
    Самый переносимый формат данных.

    AVC>Программа на Обероне — это документ, включающий в себя не только текст, но и множество самых разнообразных объектов.

    Язык для описания этих объектов — в студию!
    А потом поинкрементить описание оберона на язык описания объектов,

    AVC>(Причем это различие существует еще с 1980-х годов.)

    AVC>ИМХО, это существенно сказывается на удобстве разработки.
    AVC>Попытаюсь это обосновать.

    AVC>а) Документирование программ.

    Самодокументирование + комментарии.

    AVC>Вот простой пример.

    AVC>При разработке программы со сложным алгоритмом обыкновенно требуется делать ссылки на литературу: ищи пояснения в такой-то книге, на такой-то странице.
    AVC>Мне же оказалось достаточно взять требуемые фрагменты (и, что немаловажно, с "картинками" ) из документа, содержащего известную книгу Кормена, Лейзерсона и Ривеста, и вставить как комментарий в программу на Компонентном Паскале прямо перед соотвествующим им кодом.

    Спецификацию методики вставки картинок в исходник на обероне — в студию!

    AVC>Алгоритм теперь читается и понимается легко и даже приятно.

    AVC>Кроме того, благодаря тому, что все ключевые слова состоят только из заглавных букв и благодаря этому выделяются сами собой,
    Вопрос — зачем их выделять, если они и так известны? Может как раз наоборот, их не надо делать выделяющимися?
    программист может использовать цвет букв (а также размер и шрифт) по своему усмотрению для выделения особо важных фрагментов кода. Скажем, не уверен в данном коде — пометил его красным: проверить! Это очень эффективная система, т.к. цвет бросается в глаза, и такой участок кода трудно не заметить.
    AVC>Напоминаю, что подобные возможности доступны в Обероне с 1980-х.
    AVC>А что же Си/Си++?
    А C/C++ разрабатывался как язык для работы с максимальным количеством девайсов. Цвет есть не у всех.


    AVC>б) Тестирование программ.


    AVC>Надеюсь, никто не будет спорить, что надо тестировать как программы в целом, так и отдельные компоненты и подпрограммы.

    AVC>На Си/Си++ тесты, как правило, хранятся в отдельных файлах и "запускаются" отдельными скриптами, которые тоже хранятся в отдельных файлах. В итоге, хранение этих вспомогательных, но необходимых файлов вырастает в целую проблему.
    AVC>(Я уж молчу о той деликатной детали, что многие Си++программисты вообще не хранят тестов. По принципу: протестировал — и забыл. Если не забыл протестировать... )
    Это проблемы программиста, а не языка.

    AVC>На Обероне/Компонентном Паскале тесты могут храниться в самом исходном документе: после точки или в комментарии.

    AVC>С помощью команд в обероновской среде можно запускать тесты для отдельных компонентов и даже отдельных подпрограмм. Для этого я помещаю тестовые команды прямо в исходном модуле, а коммандеры с исходными данными для тестов — после точки или в комментарии. Достаточно одного щелчка мыши, чтобы запустить нужный тест.
    AVC>После того, как я протестировал модуль, я не убираю тестовые команды в комментарии (и уж, тем более, не удаляю их!), а прячу в складку (fold). Опять же достаточно будет щелчка мыши, чтобы их восстановить.
    AVC>Исходный код, спрятанный в складке, не компилируется, поэтому спрятанные тесты ничего не "весят".
    AVC>По моему, это удобно.
    AVC>А что же Си/Си++?
    Напиши тестовый енжин. Или возьми готовый, их немеряно.

    По-моему, Вы опять путаете возможности среды и спецификации языка.
    Либо же недоописываете стандарт Оберона.

    Это все равно что путать "правила игры" и "технику игры". Знавал я таких (юных) преферансистов, среди которых бытовало прпвило "на третью даму не закладываться". Долго же я им объяснял, что понятие "третья дама" к правилам преферанса не имеет отношения, это элемент описания техники игры.
    Re[13]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 21.06.05 14:33
    Оценка: 1 (1) +1
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Ой, вот тока не нада! В C++ я могу написать:

    if(a){b=c;}


    Это будет плохо читаемо, но это скомпилируется. Попробуй написать на Обероне что-то типа

    IFaTHENb=c;END


    — если это скомпилится (о читаемости я вообще молчу) — вот тогда и будем говорить о "другом" отношении к пробелам. Если не скомпилится — будь любезен включить их в количество подсчитываемых тобой лексем.
    Ку...
    Re[18]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 22.06.05 10:25
    Оценка: 1 (1) :)
    Здравствуйте, Sergey J. A., Вы писали:

    СГ>>1) Не минимальное вообще, а по 1 лексеме достаточно и необходимо между словами в базовых синтаксических конструкциях (IF, WHILE, CASE, WITH, ... и т.д.).

    SJA>А это
    Автор: Пацак
    Дата: 22.06.05
    Вы не читали ? Там даже приведён так Вами любимый расклад по звёздам.


    Дык. Если факты не соответствуют теории — тем хуже для фактов. (с) не помню чей

    Я, кстати, тот пример еще усовершенствовал. Если посмотреть внимательнее, то конструкция "if cond action" в этом примере является избыточной и может быть сокращена до "cond action", где cond — логическое условие, action — выполняемое действие. В результате код сокращается до

    while not end_of_stream
        read_socket
        checksum == fails
            raise_hacker_alert
            break
        number_of_bytes_read>MAX_DATA_ALLOWED break
        process_data


    Итого:
    лексем — 6
    строк кода — 7
    символов (не считая отступов) — 144

    Звездочки:

    * * i i i * i i * i * i * i


    Минимальный оберон тихо курит в сторонке.
    Ку...
    Re[10]: Open source
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 23.06.05 02:53
    Оценка: 1 (1) +1
    Здравствуйте, Курилка, Вы писали:

    К>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Этот процесс создания компилятора+рантайма Никлаус Вирт назвал словом "раскрутка". Собственно, в результате раскрутки и был создан первый язык Оберон + его компилятор + операционная система Оберон.


    К>Вау! Раскрутку оказывается святой Вирт придумал...


    Вообще Вирт весьма умён... По крайней мере я так думал... Но по мере чтения высказываний, как г-на Губанова, я уже начинаю сомневаться в его (Вирта) адекватности. Вот такую он ему рекламу сделал. Но надежда, что это не Вирт разумом поехал, а г-н Губанов что-то не так понял, всё ещё теплиться... правда уже слабо теплиться, того и гляди угаснет...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re: Синтаксический оверхед
    От: Privalov  
    Дата: 09.06.05 09:47
    Оценка: +1 -1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Реально необходимый и достаточный синтаксис:

    СГ>
    СГ>WHILE a DO x END
    СГ>


    А если вставляешь больше одного оператора?

    WHILE a DO 
      BEGIN
         x1;
         x2;
       .....
      END


    while(a)
    {
       x1();
       x2();
    }


    И в чем разница? В BEGIN/END? И еще путаница с ";".

    А еще вспомни, что можно вообще обойтись только циклом while.
    Re[3]: Синтаксический оверхед
    От: tarkil Россия http://5209.copi.ru/
    Дата: 09.06.05 11:43
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Я добросовестно оформил текст примеров именно так как общепринято оформлять текст на языках Си и Modula/Oberon.


    Общепринятых стандартов в Сях не меньше трёх, Вы о каком? А по факту каждая компания собственный стандарт на код придумывает.

    Остальное видимо, проигнорировано? И что нужны реальные примеры кода и зачем понадобилось экономить буквы и как всё изменится, если у процедур/функций появлятся параметры, что их имена обычно длиннее и что блоки кода чаще состоят не из одного вызова...
    --
    wbr, Peter Taran
    Re[9]: *
    От: Privalov  
    Дата: 09.06.05 13:39
    Оценка: -1 :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>В выражениях:

    СГ>
    СГ>* n * a * x * b * y * z *
    СГ>


    IF a THEN x ELSIF b THEN y ELSE z END = * a * x * b * y * z *



    А что, в Оберонах внутри IF только одиночный оператор ставится, даже функцию нельзя вызвать, а тем более параметры ей передать? Все веселее становится.
    Re[4]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 07:10
    Оценка: -2
    Здравствуйте, Пацак, Вы писали:

    П>
    П>while (x = a() ? b(k[i++]) : c(l[j--]) ) d(x);
    П>


    А по ушам схлопотать за такой код, можно?
    Re[5]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 10.06.05 08:02
    Оценка: +2
    Сергей Губанов wrote:

    >

    >
    >П>while (x = a() ? b(k[i++]) : c(l[j--]) ) d(x);
    >П>
    >
    > А по ушам схлопотать за такой код, можно?

    Сам же хотел — без оверхеда. Еще можно Перл и Питон вспомнить — с ними
    по лаконичности рядом вообще ни один Паскаль не валялся.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[7]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 10.06.05 08:34
    Оценка: :))
    Здравствуйте, Пацак, Вы писали:

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


    C>>Еще можно Перл и Питон вспомнить — с ними

    C>>по лаконичности рядом вообще ни один Паскаль не валялся.

    П>Учитывая "любовь" автора к скобочкам — лучше лисп!


    Вот только не надо лисп на поругание обероновцам отдавать
    Re[11]: *
    От: Кодт Россия  
    Дата: 10.06.05 08:50
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    M>>if (a) x(); else y();

    M>>не устраивает?

    СГ>Меня — вполне, а вот пацанов из соседней комнаты сопровождающих международный проект заставляют писать {} в любом случае и на новой строке, ссылаясь на общепринятый coding style.


    А если какой-нибудь менеджер потребует, чтобы такой же стиль был у оберон-кода?
    IF
      condition_goes_here
    THEN
      x;
      y;
      z; (* с обязательной ";" в конце каждой инструкции - требование системы контроля версий *)
    ELSE
      t;
      u;
      v;
    END; (* и здесь тоже ";" по той же самой причине *)

    То будешь на синтаксис Оберона наезжать, или всё-таки на менеджмент?

    СГ>P. S.

    СГ>
    СГ>if ( a ) x ( ) ; else y ( ) ;
    СГ>*  * a * x * * *  *   y * * *
    СГ>

    СГ>6 лишних звездочек

    Только не говори, что THEN короче, чем {}
    Перекуём баги на фичи!
    Re[2]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 10:51
    Оценка: :))
    Здравствуйте, DMitay, Вы писали:

    DM>Здравствуйте, Сергей Губанов, Вы писали:


    DM>Сергей, у меня к Вам вопрос! В каком учебном заведении вы защищали свою кандидатскую?


    Ни в каком учебном заведении я ее не защищал. Я ее защищал в одном из самых престижных институтов РАН по теоретической физике. Но к программированию она отношения не имеет. Тема диссертации "Квантовая групповая редукция XXZ модели Гейзенберга".

    http://ru.arxiv.org/multi?archive=hep-th&amp;file=new+abstracts&amp;year=%2705&amp;month=06&amp;args=&amp;search_year=all+years&amp;field_1=au&amp;query_1=Gubanov&amp;%2Ffind=+Find+&amp;subj_cond-mat=--%3E+cond-mat+subject+classes&amp;subj_physics=--%3E+physics+subject+classes
    Re[3]: Синтаксический оверхед
    От: algol Россия about:blank
    Дата: 10.06.05 11:19
    Оценка: :))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Ни в каком учебном заведении я ее не защищал. Я ее защищал в одном из самых престижных институтов РАН по теоретической физике. Но к программированию она отношения не имеет. Тема диссертации "Квантовая групповая редукция XXZ модели Гейзенберга".


    "Есть такие люди, которым стоит только подойти к прибору, как он сразу же ломается. Такие люди называются физиками-теоретиками." (с) Физики шутят
    Re[5]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 10.06.05 11:25
    Оценка: +2
    Здравствуйте, Кодёнок, Вы писали:

    А>>И что вас тогда дернуло в программирование?

    А>>Вы продолжаете заниматься теоретической физикой?

    Кё>А что не видно


    Давайте на личности не переходить Вторая специальность, водительский стаж и т.п. — это как минимум оффтопик.
    Перекуём баги на фичи!
    Re[14]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 10.06.05 13:42
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    П>>должны сопровождаться некими дополнительными действиями (скажем, изменением состояния некоего третьего объекта). Что тогда? В C++ я переопределю оператор, в питоне — перекрою метод класса, а в Обероне?

    СГ>Что, что — скопируете и сопроводите "некими дополнительными действиями". Прямо такой вопрос задаете, как буд-то ответ сами не знаете.

    Не надо слов. Код пожалуйста.
    Ку...
    Re[3]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 13.06.05 12:06
    Оценка: +1 :)
    Здравствуйте, Аноним, Вы писали:

    А>Здравствуйте, Airat Burganov, Вы писали:


    AB>>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.

    СГ>>> [skipped]

    AB>>По-моему, пора уже сказать для чего была затеяна дискуссия. Провокация удалась на славу. Кто не верит, что это провокация, читайте ответы автора — он же не внимает абсолютно никаким доводам — один против всех . Это однозначно удавшаяся шутка.


    А>Да не...

    А>Это не провокация.
    А>Он тут на форуме известен своей любовью к оберонам.
    А>Просто последние несколько месяцев он хранил молчание.
    А>Видимо готовил новый удар, занимаясь исследованием синтаксического оверхеда

    А добился одного только — еще несколько человек стали иначе относиться к Оберону.
    Вместо нейтрального "не знаю что за язык такой Оберон" стало негативное "оберон- полное г...о"
    Re[3]: Синтаксический оверхед
    От: AndreyFedotov Россия  
    Дата: 14.06.05 19:29
    Оценка: :))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Тогда не было интернета. Вот если бы все ковбои отметившиеся в этой ветке были бы собраны в одной комнате, то я бы конечно не рискнул войти в эту комнату запереть ее изнутри и сообщить присутсвующим что Си-образный синтаксис оказывается устарел 25 лет назад. А с интернетом, глядишь, по голове не настучат


    Ничего. Осталось пару постов и шерифы, построят ковбоев свиньёй и начнут просев интренета квадратно гнездовым методом... С последующим праздничным линчеванием и сожжением на костре.
    Re[4]: Ошибка
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 15.06.05 14:26
    Оценка: -1 :)
    Здравствуйте, Banch, Вы писали:

    B>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>
    СГ>>WHILE a DO x; y; z END
    СГ>>


    B>Людей, которые пишут так вот в одну строчку я на работу не возьму.

    B>Потому что прочесть этот код будет невозможно!

    А я не возьму на работу людей, которые потом не возьмут на работу описанных Вами людей.

    Не постигаю, что такого кроется невозможного прочитать элементарное: WHILE a DO x; y; z END
    Re[5]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 16.06.05 08:52
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Аноним, Вы писали:


    А>> Бред... отлаживать такое крайне неудобно. Есть золотое правило: одна строчка — один оператор.


    СГ>Не отлаживать программы надо, а математически строго доказывать их корректность.


    О! Ещё раз 10 баллов... Вы попали в струю!!! Вы когда-нибудь это делали? Спрашиваю потому, что по своему образованию мне это делать приходилось (я правда не кандидат, а всего лишь магистр, но не при этом не физик, а прикладной математик)... Прежде чем высказать своё мнение, хочу услышать ваш ответ...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[3]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 16.06.05 09:18
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

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


    СГ>>>WHILE a DO x END


    J>>вот как на си это написать:

    J>>while(a) x();
    J>>без всяких та DO END и прочего.

    СГ>Заменяем служебные слова на символ "*":

    СГ>
    СГ>WHILE a DO x END = * a * x *
    СГ>while(a) x();    = * * a * x * * *
    СГ>

    СГ>Оверхед = 6/3 = 2.00

    СГ>На 100% больше чем необходимо.


    1. Почему Вы считаете, что Ваша методика расчета правильноая?
    2. Настоятельно рекомендуб считать также и пробелы.
    3. Почему Вас так беспокоит этот Гондурас?
    Re[4]: Ошибка 4
    От: Аноним  
    Дата: 16.06.05 10:05
    Оценка: :))
    Здравствуйте, Privalov, Вы писали:

    P>А что происходит с do, repeat, var, type, const? Они превращаются в комментарии?


    Они идут густыми чащобами, через буреломы и нехоженные заросли каннабиса
    Re[7]: Синтаксический оверхед
    От: Pavel Dvorkin Россия  
    Дата: 16.06.05 12:46
    Оценка: +1 :)
    Здравствуйте, Кодт, Вы писали:

    К>Почему сразу алгебру? Начнём с некоммутативных групп и далее в сторону усложнения...

    К>И почему нельзя? Я привёл два примера, в которых 2+2=2*2=5.

    Господи, и зачем я про 2*2=5 сказал вообще! Так я и знал, что дискуссия развернется!

    Ну раз уж так, а мы все же в "Коллеги, улыбнитесь", предлагаю еще обсудить следующие темы

    a!=a
    true==false.

    Может, это тоже когда-то бывает ?
    With best regards
    Pavel Dvorkin
    Re[7]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 20.06.05 07:08
    Оценка: +2
    Здравствуйте, Amidlokos, Вы писали:

    A>>А как ты докажешь их корректность мне интересно? Насколько я знаю, доказать корректность нельзя даже для

    A>>double max(double a, double b) {
    A>>   return a > b ? a : b;
    A>>}

    A>А она и некорректна — double так не сравнивают.

    Некорректно такое заявление. double нельзя (можно, но бессмысленно) сравнивать на равенство (операторами ==, != ), а также на строгое неравенство ( >, < ) с целью "поветвиться".
    В данном же случае криминала нет.

    Пусть числа a,b являются double-представлениями действительных чисел a0,b0: a ~ a0, b ~ b0
    a = a0±da
    b = b0±db
    Если a << b, то есть, a0+da < b0-db, очевидно, что max(a0,b0) = b0, то есть max(a,b) = b
    Аналогично, если a >> b.
    В том случае, когда a ~ b, т.е. диапазоны [a0-da,a0+da] и [b0-db,b0+db] перекрываются, то оба числа a,b являются double-представлениями сразу обоих чисел a0,b0: a ~ b0, b ~ a0. Поэтому результат сравнения и, следовательно, результат выбора несущественен.
    Однако статистически оправданно, чтобы в этом случае вернуть именно большее (по операторам <, > ) из представлений.

    Если же вычисления более бережно относятся к погрешностям, то действительное число нужно представлять как минимум в виде пары (приближение, погрешность). Тогда функции min|max будут более затейливыми.
    Перекуём баги на фичи!
    Re[3]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 20.06.05 12:24
    Оценка: +2
    Сергей Губанов wrote:

    > 1) Правильный синтаксис был известен уже в 1979 году (Modula 2). С

    > 1979 года прошло более четверти века. Но почему до сих пор появляются
    > всё новые и новые языки программирования с устаревшим синтаксисом?
    > Почему новые языки Java, C#, D,... (заметьте не обремененные проблемой
    > совместимости с предыдущими версиями) всё равно используют заведомо
    > устаревший синтаксис? Как долго это будет продолжаться? Язык
    > программирования, который появится, например, через десять или через
    > двадцать лет будет с каким синтаксисом? Пока все старые программисты
    > не помрут от старости это и будет что-ли?

    Ответ _ОЧЕНЬ_ простой: "потому что С-подобный синтаксис удобнее", — все,
    вот и весь ответ.

    В частности:
    1. Удобно иметь понятие составного оператора и единобразное его
    обозначение (т.е. скобочки или ХОТЯ БЫ begin/end).
    2. НЕудобно постоянно писать лишние then, do и т.п.
    3. НЕУДОБНО писать ключевые слова большими буквами.

    > 2) Почему сотня-другая ковбоев отметившихся в этой ветке форума вместо

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

    Тут большинству очевидно обратное — паскалевский синтаксис давно
    мертв и нечего его эксгумировать.

    Кстати, неС-подобные синтаксисы весьма распространены, просто вы их не
    замечатете: Python, Ruby, функциональные языки.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[3]: Синтаксический оверхед
    От: CrystaX Россия https://crystax.me/
    Дата: 20.06.05 13:07
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    Вообще-то я в этой ветке не учавствую — один разок ответил (одним из первых). Не думал, что такой флейм разгорится. Но вот не удержался. У меня есть один вопрос. Пожалуйста, Сергей, скажите мне, кто определил правильность синтаксиса Modula 2? Приведите, пожалуйста, критерии, по которым оценивается правильность.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[5]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 20.06.05 14:03
    Оценка: +2
    Здравствуйте, Трурль, Вы писали:

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


    C>> Тут большинству очевидно обратное — паскалевский синтаксис давно

    C>>мертв и нечего его эксгумировать.

    C>>Кстати, неС-подобные синтаксисы весьма распространены, просто вы их не

    C>>замечатете: Python, Ruby, функциональные языки.

    Т>Так все-таки: "мертв" или "весьма распространены"?


    Паскалевский!=неС-подобный, понятия пересекающиеся, но не тождественные...
    Re[6]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 07:57
    Оценка: -2
    Здравствуйте, Cyberax, Вы писали:

    >> C>1. Удобно иметь понятие составного оператора и единобразное его

    >> C>обозначение (т.е. скобочки или ХОТЯ БЫ begin/end).
    >> Для чего? Ведь нет ни одного места где бы он был нужен.

    C>Для того, чтобы можно было удобно изменять код (менять if/elseif на

    C>switch, менять while на if и т.п.).

    Должно быть, прикольное занятие. А в чем его смысл?
    Re[6]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 08:09
    Оценка: -1 :)
    Здравствуйте, Cyberax, Вы писали:

    C>Вам продемонстрировали с десяток раз, что синтаксис С++ далеко не так

    C>избыточен (скорее идет на равных) с Oberon'ом.

    А я продемонстрировал
    Автор: Сергей Губанов
    Дата: 09.06.05
    235% по синтаксису и 700% по строчкам.

    C>Вы это все проигнорировали.


    Естественно (жаль что нету смайлика такого где человек крутит пальцем у виска), зато мою демонстрацию
    Автор: Сергей Губанов
    Дата: 09.06.05
    , не смотря на ее явную гиперболизацию, сотня ковбоев, включая Вас, почему-то не проигнорировала. К чему-бы это?
    Re[8]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 21.06.05 09:08
    Оценка: :))
    Здравствуйте, Дарней, Вы писали:

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


    P>>А почему "оберонцы" во множественном числе? Кстати, портретов Вирта и Страуструпа для полноты картины не хватает.


    Д>Он один, но зато стоит десятка квалифицированных флеймеров!

    Д>One man army, короче говоря. Остается только удивляться, как у него остается время на собственно разработку, при такой то активности в форуме.

    А есть уверенность, что остаётся?
    Re[8]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 09:12
    Оценка: +1 :)
    Здравствуйте, Пацак, Вы писали:

    П>Здравствуйте, Сергей Губанов, Вы писали:


    C>>>Вам продемонстрировали с десяток раз, что синтаксис С++ далеко не так

    C>>>избыточен (скорее идет на равных) с Oberon'ом.
    СГ>>А я продемонстрировал
    Автор: Сергей Губанов
    Дата: 09.06.05
    235% по синтаксису и 700% по строчкам.


    П>А я — 500%
    Автор: Пацак
    Дата: 09.06.05
    по строчкам у оберона над обероном. А если сильно захочется — могу и до 1000% накрутить. И дальше что? Может хватит теоретические примеры за уши притягивать?


    Чем бы дитя не тешилось, лишь бы не вешалось.
    Re[8]: Синтаксический оверхед
    От: Дарней Россия  
    Дата: 21.06.05 10:27
    Оценка: :))
    Здравствуйте, CrystaX, Вы писали:

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


    А это идея! Надо просто выпустить клавиатуры а-ля Спектрум, на которых будут нанесены все ключевые слова оберона — IF, THEN, END и т.д. И клавишу Enter спрятать подальше, чтобы поощрить написание кода в "однострочном" стиле.
    Вот тогда то сишники и пообгрызут все локти от зависти
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[2]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 13:10
    Оценка: -1 :)
    Здравствуйте, AVC, Вы писали:

    AVC>В отличие от синтаксиса Модулы/Оберона синтаксис Си/Си++ не соответствует принципам структурного программирования.


    AVC>
    AVC>while (p) { ... }
    AVC>

    AVC>на Си/Си++, он не может быть в этом уверен, т.к. внутри цикла может находиться как оператор break, так и знаменитый goto.
    AVC>Соответственно, проверка корректности программы существенно затрудняется.

    Совершенно согласен. Сам на позапрошлой неделе в своей программе на C# обнаружил, что переменная цикла while после его завершения иногда становилась равной -1 вместо ожидаемого минимального значения 0. Ошибка конечно чрезвычайно глупая и мне за нее стыдно, но дело в том, что на Обероне я бы ее просто НЕ СМОГ бы совершить в принципе!
    Re[12]: Синтаксический оверхед
    От: Privalov  
    Дата: 21.06.05 14:23
    Оценка: +2
    Здравствуйте, moudrick, Вы писали:

    M>Я написал Вам, как в данном случае понимается выражения "для кого она правильна". Вы же это поскипали. Потрудитесь отвечать по существу.


    Не дождетесь. Впрочем, вы не единственный.
    Re[8]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 22.06.05 05:17
    Оценка: +2
    Здравствуйте, Mr. None, Вы писали:

    MN>Не корректный вопрос... Сударь не позорьте сообщество программистов на C++, а то нас всех обвинят ещё и в некомпетентности . Если следовать доказательству теоремы о структурировании, то поступить надо так:

    MN>Это был не наезд — обидеть не хотел . Просто попытка вас поправить (не всем довелось изучать эту чудную теорему ).

    Спасибо. Я, собственно, не пытался доказать, что без break/goto нельзя обойтись. Но делать это ИМХО столь же целесообразно, как, скажем, избавляться от for(;) только из-за того, что его можно заменить while. Парадигма-парадигмой, но и об удобстве забывать не стоит.
    Ку...
    Re[4]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 22.06.05 07:44
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Читается так: Выполнять цикл до тех пор пока условие останова цикла не станет истинным.

    Нет это читается так: Выполнять пока условие не станет истинным... Чистое IMHO в большинстве случаев циклы крутятся до тех пор, пока некоторое условие не станет ложным...

    СГ>Всё логично.


    Я бы усомнился... см. ниже.

    СГ>n := 100;
    СГ>WHILE n > 0 DO ...; DEC(n) END;
    СГ>ASSERT(n <= 0)

    СГ>n := 100;
    СГ>REPEAT ...; DEC(n) UNTIL n = 0
    СГ>ASSERT(n = 0)


    Ага — условие по сути одно и то же, но вот записывается оно по разному — в первом случае само условие, во втором его отрицание... Я когда-то давно писал на паскале и постоянные ошибки у меня возникали как раз в результате замены WHILE DO на REPEAT UNTIL. Чтобы не ошибиться в результате такой замены приходится сначала некотрое время подумать и фактически инвертировать условие. А если условие не совсем тривиальное, то можно и на граблю встать... Кстати вы как раз допустили ошибку инвертируя условия для преобразования цикла в REPEAT UNTIL. Вот так правильно:
    REPEAT ...; DEC(n) UNTIL n >= 0


    Только в этом случае множество значений n, на которых срабатывает условие останова цикла совпадате с первым вариантом. И в частности при n < 0 не происходит зацикливания... Или Оберон позволяет вычислять бесконечные циклы за разумное время?

    А теперь сравните это с плюсовым:
    while(n > 0)
    {
    }
    
    do
    {
    }
    while(n > 0);


    Условие останова одно и записано одинаково и при преобразовании одного цикла к другому ничего мудрить и думать не надо... И даже новичку очевидно — в любом случае цикл завершается, когда условие становится ложным, всегда ясно, понятно и запомнить легко. В случае Паскаля (сейчас Оберона) мне всегда приходилось всякие таблицы вычерчивать, чтобы понять как repeat until отработает, если был нужен именно он.
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[7]: А эхо в ответ: мать...мать...мать...
    От: xBlackCat Россия  
    Дата: 22.06.05 08:04
    Оценка: :))
    Здравствуйте, Mr. None, Вы писали:

    MN>Ну продемонстрировали вы числа... И что? Я тоже много чисел знаю... ООЧЕНЬ много... могу их все продемонстрировать... А смысл в чём?


    Смылсл?

    Два программиста:
    П1: Мне нужен генератор случайных чисел!
    П2: 43!

    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Rojac &mdash; Rsdn Offline JAva Client
    Анонсы и обсуждение здесь
    Автор: xBlackCat
    Дата: 08.02.10
    Re[6]: А эхо в ответ: мать...мать...мать...
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 08:04
    Оценка: +2
    M>>Сергей. Вы, как самый ярый сторонник Оберона, можете внятно и с фактами на руках показать преимущество Оберона?

    СГ>Конечно могу. Но только это не тема данной ветки форума. Тема этой ветки форума: 235% и 700%. Ваша ошибка в том, что Вы делаете далеко идущие выводы из этих чисел. В этой ветке я ни чего доказывать не собираюсь. Просто демонстрирую числа 235% и 700%. Признаться, мне трудно сдерживать себя от того чтобы полезть чего-то доказывать. Здесь речь исключительно только о синтаксисе.


    А смысл такой демонстрации? Тем более, что уже не раз неоднократно было показано, что "не лексемами едиными жив язык программирования". А альтернативные
    Автор: Mamut
    Дата: 15.06.05
    подсчеты вы игнорируете.

    Кстати, ни в одной ветке, посвященной Оберону, так и не было приведено ни одного факта, реально доказывающего преимущества Оберона. Может, уже пора?

    Единственно преимущество, и то только над С/С++, — это наличие GC. Причем GC реализуется и на С++. В чем еще преимущества?


    dmitriid.comGitHubLinkedIn
    Re[8]: Синтаксический оверхед
    От: jazzer Россия Skype: enerjazzer
    Дата: 22.06.05 08:13
    Оценка: +2
    Здравствуйте, Трурль, Вы писали:

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


    Q>>Я часто проверяю условие p именно с целью узнать, как произошел выход из цикла: по брейку или "мирным путем".

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

    Можно подумать, программеры java или C# ими менее озабочены.
    Наоборот, ставят свои продвинутые развитые средства этого самого как преимущество перед С++.
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[6]: Ошибка
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 22.06.05 08:18
    Оценка: +1 :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Mr. None, Вы писали:


    СГ>>>1) Как Вам только что показали структурную парадигму не поддерживает.


    MN>>Сударь! "Программирование без goto" и "структурная парадигма" — это совершенно разные понятия!


    СГ>У кого-то разные, а у кого-то нет. goto может легко нарушить пост условия циклов WHILE и REPEAT.


    Ну простите — у вас может и не разные... У всего мира разные, включая самого Вирта, а у вас нет...

    Вместо того, чтобы народ смешить шли бы мат. часть поучили!
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[7]: Еще один яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 08:52
    Оценка: :))
    Здравствуйте, Пацак, Вы писали:

    П>Угу, ясно. Допустим (совершенно условно):

    П>
    П>while (queue.has_elements()) {
    П>    Elem elem = queue.get_first();
    П>    if (elem.get_state() == ST_FREE) {
    П>        elem.start_processing(...);
    П>        break;
    П>    } else { 
    П>        queue.make_last(elem);
    П>    }
    П>}
    П>

    П>И чо делать?

    Ну, как что делать, обращайтесь ко мне, я Вам помогу, научу как надо грамотно программировать.

    В данном случае надо использовать цикл с проверкой остановки выполнения итерации внутри самой итерации, то есть надо использовать цикл LOOP:

    Re[7]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 22.06.05 09:08
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    ...

    Сергей, если Вы не удосуживаетесь просто прочитать документацию, то обсуждать что-либо с вами становится просто глупо.
    Рядом вам привели, в чём ошибка (если в доки заглянуть лень)
    Наверное буду уже не первым, ещё больше разочаровывающимся в вас как собеседнике...
    Re[17]: Синтаксический оверхед
    От: CrystaX Россия https://crystax.me/
    Дата: 22.06.05 09:32
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    CX>>Почему Вы решили, что минимальное количество лексем является признаком правильности синтаксиса?


    СГ>1) Не минимальное вообще, а по 1 лексеме достаточно и необходимо между словами в базовых синтаксических конструкциях (IF, WHILE, CASE, WITH, ... и т.д.).


    СГ>2) Компилятор отловит все случайные явные "зевки" сделанные программистом, например такой:

    СГ>
    СГ>  if(ВыполняетсяНекотороеУсловие())
    СГ>    return КоеЧтоНадоВернуть(........................);
    
    СГ>  if(ВыполняетсяНекотороеУсловие2());
    СГ>    return КоеЧтоНадоВернуть2(........................);
    
    СГ>  if(ВыполняетсяНекотороеУсловие3())
    СГ>    return КоеЧтоНадоВернуть3(........................);
    СГ>


    Из Ваших слов выходит, что синтаксис должен быть масимально жестким. Вот в этом месте может быть только такая-то лексема и никакая другая, а вот в этом — такая-то и никакая другая, так?
    Да, каркас синтаксиса C не жесткий, в отличие от Оберона. Здесь допустимы вольности. Здесь есть места (и довольно много), где в грамматике языка присутствует категория MAYBE. Но здесь мы опять приходим к первоначальному вопросу: "Для кого это правильно?". И ответ прост. Жесткий каркас синтаксиса языка — хорошо компилятору, плохо пользователям. Гибкий синтаксис — плохо компилятору, хорошо разработчику.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[19]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 10:39
    Оценка: +1 :)
    П>Итого:
    П>лексем — 6
    П>строк кода — 7
    П>символов (не считая отступов) — 144

    П>Звездочки:


    П>
    П>* * i i i * i i * i * i * i 
    П>


    П>Минимальный оберон тихо курит в сторонке.



    Фи "Надо делать настолько просто, насколько возможно, но не проще" Самое простое это Оберон. А то, что понаписано здесь — фи, гадость какая-то


    dmitriid.comGitHubLinkedIn
    Re[9]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 12:37
    Оценка: :))
    СГ>Если в выражении IF a THEN, Вы хотели вызвать описанную ранее процедуру-функцию, то это надо было делать так:
    СГ>
    СГ>  IF a() THEN 
    СГ>    {* критически важный код *}    
    СГ>  END
    СГ>

    СГ>"а" и "а()" — совершенно разные штукенции.


    СГ>В принципе на "зевок" можно списать, но очень редкий, ведь тут двухсимвольная опечатка "()". А двухсимвольные опечатки менее вероятны чем односимвольные.



    Что-то в примерах, которые вы приводили при подсчете лексем, вы почему-то не вызывали процедуры со скобками. Аяяяй, нехорошо

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


    dmitriid.comGitHubLinkedIn
    Re[9]: Очередной яркий пример
    От: Sergey J. A. Беларусь  
    Дата: 22.06.05 12:40
    Оценка: :))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>0) Собственно, сам синтаксис.


    Кстати ! Когда иссякнет эта тема, предлагаю начать следующую ! Как извесно в С/С++ индескы начинаются с 0, а в Обероне с 1 (т.е. я так предполагаю). "Спрашивается как долго ...". Ну и так далее. Убедительные примеры, доказательства и процентные соотношения выдумаете сами.
    А ?
    Я — свихнувшееся сознание Джо.
    Re[19]: Синтаксический оверхед
    От: CrystaX Россия https://crystax.me/
    Дата: 22.06.05 13:09
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Если в самом синтаксисе нет возможности для отслеживания опечаток, то как компилятор их найдет? В этом смысле синтаксис первичен, а пользователи вторичны. А вот уже из всех возможных правильных синтаксисов, надо выбрать тот, который будет еще и максимально удобен пользователю. Вот в какой последовательности нужно идти, а не в обратной.


    А компиляторы языков с C-like синтаксисом и не занимаются нахождением опечаток. Ответственность — на пользователе. Да, совершенства нет. Вы хотите обеспечить отсутствие опечаток? Ок, пишите на Обероне. Хотите добиться гибкости и выразительной силы, присущей C++? На нем и пишите. Хотите получить reflection, run-time проверки и мощь .NET Framework? Используйте C#. Проблемы нет. НО! Ничего не дастся бесплатно. Выигрываем в одном — теряем в другом. Для Вас важно никогда не делать опечатки? Пожалуйста, пишите на Обероне сколько угодно, я слова худого не скажу. Но так уж получается, что подавляющему большинству программистов гораздо более важны другие вещи — производительность, удобство в написании и сопровождении, прозрачная поддержка (на уровне языка) определенных концепций и т.д. Опечатки для них — наименьшее зло и они готовы с ним мирится, так как в конечном счете решить задачу получается гораздо быстрее и эффективнее. А самый большой грех в наш век — это неэффективность.
    Поэтому и не выживают языки с правильным синтаксисом. Закон естественного отбора, если хотите. Ибо синтаксис — вовсе не самое важное в языке.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[6]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 14:10
    Оценка: :))
    Здравствуйте, Socrat, Вы писали:

    S>А еще типичная ошибка — вместо "==" в условии поставить "="...


    Ну да, точно. Как-то забыл упомянуть. Спасибо что напомнили. За одно только это си-образный синтаксис не имеет права существовать...
    Re[14]: Яркий пример
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 14:13
    Оценка: +1 -1
    M>>"Не плоди сущностей без необходимости" LOOP — такая вот ненужная сущность.

    СГ>Странно, а если нужно проверить условие прекращения итерации уже находясь внутри итерации, тогда как быть?


    Вы издеваетесь? Посмотрите в практически любой другой язык программирования.
    while(cond)           
    {                            
      if(another_cond)    
        break;                   
    }


    Для for и do аналогично. Какие могут быть насчет этого есть проблемы?

    СГ>Наоборот, это WHILE и REPEAT выводятся из LOOP как частные случаи.


    СГ>WILE a DO ... END можно понимать как сокращенную запись: LOOP IF a THEN ... ELSE EXIT END END,

    СГ>REPEAT ... UNTIL b можно понимать как сокращенную запись: LOOP ... IF b THEN EXIT END END.

    Еще раз, по буквам.

    В обероне циклы while, for, repeat слепо следуют структурной парадигме, из которой следует, что в цикле должна быть одна точка выхода. Но в реальном мире необходимо больше точек выхода. Так в Обероне рождается LOOP. Скажите, от того, что в while есть возможность выхода — это плохо? Нет и еще раз нет:
    Cтруктурный подход, в котором есть логическая ошибка    
    
    int errorCode = 0;
    
    while(sockeatread() != eof) // eof не обязательно наступит!
    {
      processData();
      if(data != expectedData)
        errorCode = BAD_DATA;
    }
    
    легким движением руки превращается в неструктурный,
    но без ошибки:
    
    int errorCode = 0;
    
    while(sockeatread() != eof) // eof не обязательно наступит!
    {
      if(bytesRead > ALLOWED_SIZE) {
        errorCode = HACKER_ATTACK;
        break;
      }
      processData();
      if(data != expectedData) {
        errorCode = BAD_DATA;
        break; // зачем нам продолжать читать данные, если они неверны?
      }
    }
    
    а в случае с Обероном трансформация не настолько тривиальна 
    и не эквивалентна логически 
    
    errorCode := 0;
    
    WHILE socketRead # eof DO
      processData;
      IF data # expectedData THEN errorCode := BAD_DATA END;
    END;
    
    превращается в
    
    errorCode := 0;
    
    LOOP
      IF socketRead # eof THEN
        IF bytesRead > ALLOWED_BITES THEN
          errorCode := HACKER_ATTACK;
          EXIT;
        END;
        processData;
        IF data # expectedData THEN
          errorCode := BAD_DATA;
          EXIT;
        END;
      END;
    END;


    В обероновском случае нам приходится менять логику работы с сокетом с понятного "пока есть данные" на "данные есть всегда., только надо проверить, а не закончился ли поток". Хуже того, трансформация кода должна проходить очень тщательно. Один while do end заменяется на громоздкую конструкцию loop if then end end.

    Ну и где преимущества убогих, кастрированных циклов Оберона над великолепно-гибкими циклами других языков?

    И, хотя это являтся оффтопиком для данной подветки, еще одно замечание:
    // С++
    if(data != expectedData) // сравниваем две переменные, видно из кода
    
    {* Oberon *}
    IF data # expectedData THEN // сравинваем две переменные? 
                                // переменную и значение функции?
                                // значения двух функций?


    Наглядность языка? Где? Не вижу.

    Просьба к коду не придираться


    dmitriid.comGitHubLinkedIn
    Re[9]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 14:20
    Оценка: -1 :)
    Здравствуйте, jazzer, Вы писали:

    J>Потому что он создавался именно для облегчения программирования на С (как и С по отношению к асму, кстати).

    J>Цель сугубо практическая.
    J>И обкатывался язык не на теоремах, а в руках действующих программистов на С.
    J>Почитай D&E.

    Не надо быть прорицателем, чтобы понять, что реальная цель у аспиранта Страуструпа была защитить диссеру чтобы его взяли на работу.
    Re[9]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 22.06.05 17:36
    Оценка: :))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>1) Страуструп на момент придумывания им С++ был (еще совсем зелёным) аспирантом.

    СГ>2) Лауреат премии Тьюринга Никлаус Вирт на момент создания Оберона был профессором и было ему где-то под пятьдесят.

    Намекаешь, что он к тому времени уже выжил из ума как большинство профессоров?
    Ку...
    Re[16]: Яркий пример
    От: qwertyuiop Российская Империя  
    Дата: 23.06.05 05:09
    Оценка: +2
    AVC>Отсюда беспрерывные "откровения" вроде Вашего (со сравнением переменных) или уж откровенно глупого "оказывается, в Обероне есть BEGIN!!!". О перлах вроде "мне нас**ть на принципы структрного программирования" я уж и не говорю.

    Если эти принципы требуют, чтобы при выходе из цикла условие продолжения всегда было ложным, то таким принципам я следовать не собираюсь. Я уже в двух постах (один из них строчкой выше) задал конкретный вопрос: откуда взялось это требование и какова его практическая польза — однако ответа так и не получил. Если вы не можете дать ясный и убедительный ответ, следовательно это требование не имеет права на существование. Логично?
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[20]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 08:29
    Оценка: -1 :)
    Здравствуйте, CrystaX, Вы писали:

    CX>Ибо синтаксис — вовсе не самое важное в языке.


    Да не главное, согласен.
    Но что мешало Sun и Microsoft для Java и для C# избрать правильный синтаксис?
    Языки получились бы еще более лучшими.

    Если в будущем, например, IBM или Intel соберется изобрести новый язык, то почему-бы им не взять в качестве синтаксической основы правильный синтаксис Modula/Oberon? Их язык от этого только выиграет.
    Re[21]: Синтаксический оверхед
    От: Privalov  
    Дата: 23.06.05 08:38
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Да не главное, согласен.

    СГ>Но что мешало Sun и Microsoft для Java и для C# избрать правильный синтаксис?
    СГ>Языки получились бы еще более лучшими.

    Начинаем очередной виток.

    Может, я пропустил что-то, но кто, где и когда сказал: "Это правильный синтаксис, а это — нет". Я бы хотел получить ссылку на внушающий доверие литературный источник.

    Кто вообще определяет правильность синтаксиса. Какие критерии при этом используются? Согласно этим критериям правильный ли синтаксис у языков: BASIC, APL, FORTH, PROLOG, WhiteSpace, BrainFuck

    СГ>Если в будущем, например, IBM или Intel соберется изобрести новый язык, то почему-бы им не взять в качестве синтаксической основы правильный синтаксис Modula/Oberon? Их язык от этого только выиграет.


    Опять же, какие основания считать, что выиграет?
    Re[15]: LOOP
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 09:02
    Оценка: +1 -1
    Здравствуйте, Mamut, Вы писали:

    M>Любой цикл и условие в программе можно переписать с использованием только цикла while.


    а его, в свою очередь, через LOOP:

    WHILE a DO x END = LOOP IF a THEN x ELSE EXIT END END
    REPEAT x UNTIL b = LOOP x; IF b THEN EXIT END END

    WHILE и REPEAT — синтаксический сахар поверх LOOP.
    Re[23]: Синтаксический оверхед
    От: Privalov  
    Дата: 23.06.05 09:25
    Оценка: +2
    Здравствуйте, Трурль, Вы писали:

    К>>Сергей, уважайте, пожалуйста, родной язык (если, конечно, русский для вас родной) — нет слова "ихний" в русском!

    Т>Есть!

    Есть в украинском: їхній. А в русском из нас это слово еще в школе каленым железом выжигали.
    Re[25]: СИНТАКСИС
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 23.06.05 10:05
    Оценка: :))
    Здравствуйте, Mamut, Вы писали:

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


    M>Там еще Modula-3 мелькает иногда


    А она ещё Виртовская? Я уже в этих клонах запутался, если честно, кто там что и куда — хрен разберёшь, зато синтаксис офигенный
    Re[12]: Очередной яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 12:50
    Оценка: +1 -1
    Здравствуйте, Аноним, Вы писали:

    СГ>>a — обозначает саму себя как процедурную переменную

    СГ>>a() — обозначает результат, который вернула процедура-функция после исполнения

    СГ>>Как иначе-то, может быть?


    А>Значит скобки все-таки нудны в вашем знаменитом WHILE a DO x END? То есть нужно писать x()?


    Нет, не нужно.

    Скобки () нужны для активации процедуры-функции даже если у нее нет аргументов.
    Для активации процедуры скобки писать не нужно если у нее нет аргументов.
    Re[13]: Очередной яркий пример
    От: qwertyuiop Российская Империя  
    Дата: 23.06.05 13:01
    Оценка: +2
    А>>Значит скобки все-таки нужны в вашем знаменитом WHILE a DO x END? То есть нужно писать x()?

    СГ>Нет, не нужно.


    СГ>Скобки () нужны для активации процедуры-функции даже если у нее нет аргументов.

    СГ>Для активации процедуры скобки писать не нужно если у нее нет аргументов.

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

    P.S. Значти, если в вашем знаменитом WHILE a DO x END у процедуры x будут аргументы, то надо написать скобки? Так же как и в С? Но тогда это повлияет на подсчет оверхеда! Вы не находите, что вы здесь слегка лукавите, придумывая выгодные вам примеры? А когда дело дошло до более-менее реального примера и Mamut посчитал полученный оверхед вы почему-то проигнорировали этот факт... Нехорошо... А еще научный работник.
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[16]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 23.06.05 13:09
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Во всех инструкциях типа: IF, WHILE, REPEAT, CASE, WITH, и т.д. что очевидно из контекста обсуждения (модули и процедуры не обсуждались вообще).


    Мне почему-то кажется, что если бы Вирт по какой-то причине оставил бы BEGIN скажем в инструкции WITH — его бы вы тоже предусмотрительно исключили бы из обсуждения.
    Ку...
    Re[21]: Яркий пример
    От: Mamut Швеция http://dmitriid.com
    Дата: 23.06.05 14:26
    Оценка: +1 :)
    SJA>LOOP
    SJA> IF a DO
    SJA> EXIT
    SJA> END;
    SJA> x
    SJA>END

    SJA>Итак:


    SJA>* * a * * * x *


    SJA>Ы ?


    Еще одно доказательство того, что LOOP — это инструкция, Оберону чуждая, привнесенная извне.


    dmitriid.comGitHubLinkedIn
    Re[4]: Определение циклов
    От: Sergey J. A. Беларусь  
    Дата: 24.06.05 11:23
    Оценка: +1 :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Sergey J. A., Вы писали:


    SJA>>Вобщем, на основании этой ветки и доп. источников я вывел:


    СГ>Еще раз!!!


    СГ>REPEAT искать UNTIL нашел

    СГ>REPEAT понимать UNTIL понял
    СГ>REPEAT слушать UNTIL услышал
    СГ>REPEAT принимать UNTIL принял
    СГ>REPEAT делать UNTIL сделал

    СГ>По определению цикл REPEAT может завершиться только тогда когда будет выполнено условие завершения. Если цикл не удовлетворяет этому определению, то он не может называться циклом REPEAT


    Ну, конкчно кроме случаев, когда из REPEAT ... UNTIL можно выйти по EXIT.
    На этом месте прошу выполнить выделенный цикл.

    СГ>WHILE можно DO делать всё что можно END

    СГ>WHILE нельзя DO ждать END
    СГ>WHILE молодой DO танцевать END
    СГ>WHILE есть патроны и есть враги DO стрелять END
    СГ>WHILE спишь DO видеть сны END

    СГ>По определению цикл WHILE может завершиться только тогда когда будет нарушено условие выполнения. Если цикл не удовлетворяет этому определению, то он не может называться циклом WHILE.


    Ну, разумеется, если WHILE вложен в LOOP и из него можн выйти до того, как условие будет выполнено, то это не может называтся WHILE. Пожалуй по аналогии с процедурами-функциями я назову его LOOP-n-WHILE (ЛУП-Н-ВАВЙЛ).

    СГ>В Си-образных языках, циклы while/do не удовлетворяют этим определениям так как могут быть завершены еще и по break и goto.


    Да. Согласен.

    СГ>Цикл LOOP ... END либо исполняется вечно, либо завершается выполнением инструкции EXIT. Ни каких других ограничений на него не накладывается.


    Итого. В Обероне есть 7 видов циклов:

    WHILE — строго один вход/один выход
    REPEAT — строго один вход/один выход
    FOR — строго один вход/один выход
    LOOP — строго один вход. Может быть больше одного выхода.
    LOOP-n-WHILE — строго один вход. Может быть больше одного выхода.
    LOOP-n-REPEAT — строго один вход. Может быть больше одного выхода.
    LOOP-n-FOR — строго один вход. Может быть больше одного выхода.

    Не слишком ли многовато для идеального языка ? Это ж какой оверхед !
    Толи дело С:
    for — строго один вход. Может быть больше одного выхода.
    while — строго один вход. Может быть больше одного выхода.
    do-while — строго один вход. Может быть больше одного выхода.

    оверхед по кол-ву циклов: 100*7/3=233%
    Я — свихнувшееся сознание Джо.
    Re[7]: Определение циклов
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 24.06.05 13:11
    Оценка: -1 :)
    Здравствуйте, Sergey J. A., Вы писали:

    SJA> Вот как определяется структурное програмирование?


    Я его определяю буквально: структурное оно и значит структурное. Например, инструкция try ... finnaly ... end наверняка ведь у Дейкстры ни где не упоминается, а структурная. В будущем может быть еще какая-нибудь структурная инструкция появится которой у Дейкстры не было, и что, теперь?
    Re[8]: Определение циклов
    От: Sergey J. A. Беларусь  
    Дата: 24.06.05 13:36
    Оценка: +1 :)
    Здравствуйте, Сергей Губанов, Вы писали:

    SJA>> Вот как определяется структурное програмирование?


    СГ>Я его определяю буквально: структурное оно и значит структурное.

    Дайте догадатся. Не структурное оно и значит не структурное. Гм. Ну тогда ясно !
    Оберон он структурный, потому что структурный.
    Ну а С не структурный, потому что он не структурный. Буквально.

    СГ>Например, инструкция try ... finnaly ... end наверняка ведь у Дейкстры ни где не упоминается, а структурная. В будущем может быть еще какая-нибудь структурная инструкция появится которой у Дейкстры не было, и что, теперь?


    Оотлично. Ну, раскажите почему try ... finnaly ... end структурная конструкция, а С-шный while — нет.
    Подсказка:
    throw -> break.
    А ?

    И кстати, почему замечательно структурной try ... finnaly ... end нет в Обероне ?

    З.Ы. Хотелось бы получить ответы на ОБА вопроса, а не на один по выбору.
    Я — свихнувшееся сознание Джо.
    Re[7]: Синтаксический оверхед - Новая порция
    От: xBlackCat Россия  
    Дата: 27.06.05 07:39
    Оценка: +1 :)
    Здравствуйте, faulx, Вы писали:

    F>Но a + b == b + a неверно при таком обозначении, а `+' все-таки в математике обозначает коммутативную операцию.


    Как говорил мой преподаватель Математического Анализа: "Вместо этого обозначения операции мы можем поставить любой своё — хоть мягкий знак". И у меня нет причин, чтобы ему не верить
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Rojac &mdash; Rsdn Offline JAva Client
    Анонсы и обсуждение здесь
    Автор: xBlackCat
    Дата: 08.02.10
    Re[5]: Синтаксический оверхед - Новая порция
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 27.06.05 08:47
    Оценка: +2
    Здравствуйте, faulx, Вы писали:

    F>К сожалению, не могу согласиться. Вызов, например, функции open — это тоже выражение, которое возвращает дескриптор файла. Ничто не мешает "воображаемому оператору create" возвращать новый объект.

    F>Кстати, теоретически, delete может возвращать значение. Если написать свой распределитель памяти, то при неудачном освобождении (передали не тот указатель) можно сообщить об ошибке, бросив исключение. Исключение — это, в каком-то смысле, тоже возвращаемое значение.
    Не могу с вами согласится. Исключение не является ни в каком смысле возвращаемым значением. Например, как бы мы ни переписывали delete, мы не сможем использовать его в выражении:
    SomeType something = delete pMyObj;

    F>Думаю, большинство современных программистов на C++ мучаются с тем, что операция вывода в поток, оказывается, может означать битовый сдвиг.
    Попробуйте спросить это большинство современных программистов на C++. Найдите мне хотя бы одного, испытавшего мучения по этому поводу.
    F>Т.е. присутствует ассоциативность и нейтральный элемент. Коммутативности и обратного элемента нет. Знатоки алгебры, как называется такая структура? В любом случае это больше похоже на умножение, чем на сложение.
    Еще раз намекаю на то, что программирование не сводится к алгебре. В математическом контексте я совершенно с вами соглашусь. В нематематическом контексте никаких ожиданий от пересечения вертикальной черты с горизонтальной здравомыслящие люди не имеют. Покажите мне хотя бы одного человека, который ожидал увидеть * для конкатенации строк. Покажите мне любой другой перегружаемый оператор, который бы с первого взгляда ассоциировался с конкатенацией.
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[8]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.06.05 13:24
    Оценка: -2
    Здравствуйте, Sinclair, Вы писали:

    S>Например вот такой код:

    S>
    S>int n=0;
    S>for(int i=0; i<5;i++)
    S>n +=i;
    S>// дальше некоторое использование n
    S>

    S>Современный компилятор приведет этот код к такому же бинарнику, как и
    S>
    S>int n = 10;
    S>


    Хорошо конечно.
    Я это запомню, чтобы потом когда мне будут говорить чего это я в одну строчку несколько инструкций написал — дебажить же не удобно будет, я этот пример покажу и спрошу, а куда Вы здесь точку останова поставите...
    Re: Синтаксический оверхед
    От: Sheridan Россия  
    Дата: 28.06.05 03:18
    Оценка: +2
    Гм...
    Вы решили перегнать Windows vs Linyx
    Автор: VCoder
    Дата: 28.05.03
    ?
    [RSDN@Home][1.1.4][beta 7][501]
    [Winamp is shutdown.]
    Matrix has you...
    Re[15]: Определение структурного программирования
    От: Mamut Швеция http://dmitriid.com
    Дата: 28.06.05 06:31
    Оценка: :))
    M>>Ладно, эксперта по поиску в Гугле вызывали? Тута я

    SJA>Тссс ! Это Серёга должен нервничать, и искать ссылки, приводить доказательства. А мы будем степенно возражать

    SJA>"Нет, это не так." И ждать дальнейших доказательств.



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


    dmitriid.comGitHubLinkedIn
    Re[16]: Определение структурного программирования
    От: Privalov  
    Дата: 28.06.05 09:00
    Оценка: +2
    Здравствуйте, Mamut, Вы писали:

    M>Увы, Сергей пока не удосужился даже пойти по тем ссылкам, что ему дают. Ни определения структурного программирования он не прочитал, ни определения циклов...


    Потому как не читатель, а писатель...
    Re[12]: Идеологически правильный мегарулез
    От: Cyberax Марс  
    Дата: 28.06.05 11:11
    Оценка: :))
    Кодт wrote:

    > Д>взялся бы ты лучше за функциональные языки, честное слово

    > Ужасужасужас. Как сейчас представляю:
    > "Эрланг супротив Оберона — сынок, в нём нет статической типизации.

    Есть еще MLные языки

    > Лисп — ваще сынок, там по скобкам оверхед.


    Смеялся 5 минут Как представлю подсчет скобочек в Лиспе и Обероне по
    "звездному" принципу...

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[11]: Народ упорно не врубается
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 28.06.05 11:27
    Оценка: :))
    Здравствуйте, Privalov, Вы писали:

    P>Здравствуйте, Mr. None, Вы писали:



    MN>>Пример (поиск символа в строке):

    MN>>
    MN>>int i = 0;
    MN>>while(str[i] != ch || str[i] != 0) i++;
    MN>>if(str[i] == 0)
    MN>>    // символ не найден
    MN>>else
    MN>>    // символ найден
    MN>>

    MN>>Или вы утверждаете, что в обероне вы обойдётесь без последней проверки? Извините, в силу своего не очень маленького опыта в программировании не поверю в это!

    P>Здесь
    Автор: Privalov
    Дата: 28.06.05
    я привожу аналогичный пример. Думаете, помогло?


    Даже смотреть не буду (трафик не резиновый) — уверен, что не помогло !
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[15]: Синтаксический оверхед - Новая порция
    От: jazzer Россия Skype: enerjazzer
    Дата: 28.06.05 12:50
    Оценка: :))
    Здравствуйте, faulx, Вы писали:

    F>Какие есть _внутренние_ доказательства того, что green/explode объективно хуже new/delete?


    Никаких.
    Более того, green/explode мне уже начинает нравиться ;)

    P.S. Отсюда мораль: хоть горшком назови :)))
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[15]: Народ упорно не врубается
    От: Sergey J. A. Беларусь  
    Дата: 28.06.05 14:28
    Оценка: :))
    Здравствуйте, Курилка, Вы писали:

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


    SJA>>Я бы даже сказал, структурный подход к лечению


    К>А лечение будет иметь точки прерывания или завершения? И сколько?


    Лечение не будет иметь выхода, кроме как через полное излечение.
    Я — свихнувшееся сознание Джо.
    Re[15]: Народ упорно не врубается
    От: Sergey J. A. Беларусь  
    Дата: 29.06.05 09:56
    Оценка: :))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Mr. None, Вы писали:


    MN>>>>Вы русский язык понимаете вообще? Вам были заданы простейшие вопросы, вы можете на них ответить предельно просто: да или нет.


    СГ>>>Да.


    СГ>>>(В смысле русский язык понимаю)


    MN>>Вы как всегда в своём амплуа. Если ответы на вопросы угрожают вашей теории, вы на них не отвечаете... Вобщем продолжать дискуссию считаю абсолютно бесполезно. Потому что вы не умеете слушать и отвечать на вопросы аппонента. А всё остальное смысла не имеет.


    СГ>Я просто не отвечаю на вопросы ответы на которые и так очевидны

    Т.е. вы решили, что только ответ на вопрос

    Вы русский язык понимаете вообще?

    не очевиден ?
    Я — свихнувшееся сознание Джо.
    Re[20]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 29.06.05 11:46
    Оценка: :))
    Здравствуйте, Amidlokos, Вы писали:

    F>>Что парной к Release() является AddRef() я, естественно, знаю. Но ведь CreateInstance() вызывает AddRef(), разве нет? И "паттерн" использования COM-объекта чаще всего именно такой: создать по CreateInstance(), поработать с ним и освободить по Release().


    A>Спасибо хоть "чаще всего", а не "всегда"...


    Только ситхи возводят все в абсолют...



    A>Не знаю как у кого, но лично мне практически при каждом серьёзном использовании COM приходится несколько раз ручками вызывать AddRef() при передаче указателей на COM-объекты. Конечно, это не слишком актуально для "одноразовых" объектов, но когда объект глобальный и длительного использования — приходится для надёжности. Только так есть гарантия, что все экземпляры классов и все потоки не получат "мусор", уже удалённый кем-то.


    Как-то звучит подозрительно, видимо, я не очень хорошо понимаю? Что значит "для надежности"? А присваивание по два раза для надежности вы не пишете?

    A>А в конце работы, кстати, в отладочной версии всегда ставлю проверку и вывод значения, возвращаемого Release(). Вот такое оно бесполезное.


    Я такого и не говорил. Конечно, не бесполезное.
    Re: Синтаксический оверхед
    От: viellsky  
    Дата: 30.06.05 08:08
    Оценка: :))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.

    Неправда — это неизвестно.
    СГ>2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо (чтобы читающему понятно стало где что написано).
    Неправда — это тоже неизвестно.

    СГ>Давайте посчитаем количественно этот перерасход?


    А можно ваш метод подстчета неизвестности применить для свержения принципа неопределенности Гейзенберга?
    Re[22]: Синтаксический оверхед - Новая порция
    От: Кодт Россия  
    Дата: 30.06.05 09:14
    Оценка: +2
    Здравствуйте, Sinclair, Вы писали:

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


    F>>Антоним для практически любого слова, если он существует, не единственный. Так что то, что вы написали — правда, но не вся правда. Также антонимами могут быть CreateInstance, MakeInstance, BuildInstance и еще куча других.

    S>Оттенки смысла у разных глаголов разные. Если уж подбирать пару, то именно противоположностей, а не "почти противоположностей". Дискуссия на эту тему была в "Проблемах перевода".

    Мне кажется, что здесь неправильно вообще обращаться к концепции "пара противоположностей".
    Жизненный цикл ссылки — это отрезок [инициализация, работа, инвалидация].

    Ссылки бывают нескольких видов: слабые, владеющие, connection point и т.д... Ниже — только про обычную владеющую.

    Инициализацию ссылки можно провести несколькими разными способами
    — создать новый объект (factory -> CreateInstance)
    — сообщить объекту о присоединении (object -> AddRef)
    — получить извне (object -> GetAnotherObject)
    после каждого из этих действий выполняется одно и то же постусловие (о целостности счётчиков ссылок) и различать ссылки, полученные разными способами, не нужно.

    Инвалидацию ссылки также можно произвести несколькими независимыми способами
    — сообщить объекту об отсоединении (object -> Release)
    — скопировать указатель в новую владеющую ссылку и обнулиться

    Конечно, можно сказать, что наиболее похоже зеркалят друг друга AddRef и Release. Но это не значит, что они выступают антонимами.
    Ведь Release может по условию уничтожить объект. То есть выступить противоположностью к CreateInstance.

    Так что логичность COM сохраняется, будучи корректно не отражённой в словах (а не "некорректно отражённой").

    F>>Потому что программист пишет именно в терминах этого паттерна (не всегда, конечно).

    S>Это бред. Программист пишет в рамках и совершенно других паттернов. Множество объектов он получает вовсе не при помощи CreateInstance. И что теперь, объявлять IConnection.CreateCommand обратной к Release? Не слишком ли много антонимов к одному Release получится?
    F>>Ну вот видите, сами нашли ответ.
    S>Нет.
    F>>Вообще, все эти рассуждения никак не опровергают тех тезисов, которые я здесь продвигаю, и которые повторю еще раз:
    F>>1. Действие должно обозначаться глаголом.
    F>>2. Противоположные по смыслу действия должны обозначаться противоположными по смыслу словами (одной и той же грамматической категории).
    S>Ну то есть COM неверен, так? Ведь там противоположные по смыслу действия не обозначаются противоположными по смыслу словами.
    F>>Найдется ли смелый человек, который прямо выступит против этих тезисов, без увода разговора в сторону? Например, прямо скажет: тезис 1 неправильный, действие может обозначаться как угодно, например, существительным, наречием, предлогом и т.п. (Естественно, весь разговор ведется в рамках языков программирования). Или скажет про тезис 2: он неверный, противоположные действия могут обозначаться синонимами (создать объект с помощью ключевого слова yes, а удалить — ключевым словом of_course).
    S>Тезис 1 неправильный, действие может обозначаться как угодно, например существительным, наречием, пригагательным, предлогом. Главное — чтобы применение было очевидным и не вызывало отторжения.

    Пойдём ещё дальше: система тезисов 1,2 неприменима (неважно, правильна/неправильна), потому что здесь нет противоположных действий.
    Есть две особых точки временного отрезка, противоположные между собой. Но в каждой из этих точек происходит одно из независимых действий.

    Например, я ремонтирую квартиру.
    Давным давно я мог стену (покрасить краской, оклеить обоями, задрапировать). А теперь хочу привести в исходное состояние — (ободрать краску/обои/ткань, снести и поставить новую стену).
    Разве можно утверждать, что покрасить и переустановить — противоположные действия? Нет. Они только относятся к противоположным моментам времени.
    Перекуём баги на фичи!
    Re[15]: Синтаксический оверхед
    От: DJ KARIES Россия  
    Дата: 19.07.05 18:11
    Оценка: :))
    Здравствуйте, moudrick, Вы писали:

    M>А вообще — может надо вернуться к машинам Тьюринга или нормальной форме Бойса-Кодта?

    Это разве нормальная форма — бояться Кодта?
    ntr soft: www.dkdens.narod.ru :: ref: http://giref.forthworks.com
    Re[3]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 24.12.07 11:49
    Оценка: :))
    Кодт wrote:
    > XC>ЗЫ: наверняка все это уже отвечали, читать тему не стал, ибо это
    > нереально
    > Ты знал!!!
    > По-моему, это лучшая отмазка для некропостинга!
    О Боже! Я же в эту ветку еще и писал!

    Может сделать специальный форум для таких веток: "Музей RSDN"
    Posted via RSDN NNTP Server 2.1 beta
    Sapienti sat!
    Re[3]: Ошибка
    От: WFrag США  
    Дата: 09.06.05 10:27
    Оценка: 3 (1)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Где-то в середине 1970-тых годов был открыт реально необходимый и достаточный синтаксис (Modula-2, 1979 год)

    СГ>
    СГ>WHILE a DO x; y; z END
    СГ>

    СГ>Обратите внимание: слово "BEGIN" отсутствует вообще во всех инструкциях — оно лишнее.

    Ну можно еще сократить:

    (while a x y z)


    Re[7]: Синтаксический оверхед: а смысл-то в чем?
    От: Demiurg  
    Дата: 10.06.05 08:10
    Оценка: 3 (1)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Скажете что Си-образный синтаксис использует минимально возможное количество лексем? Тогда не правы будете Вы. Си-образный синтаксис использует вовсе не минимально возможное количество лексем, а гораздо больше — известны примеры трехкратного перерасхода. Не верите? А вот здесь
    Автор: Сергей Губанов
    Дата: 09.06.05
    ссылочка. Гляньте, там куча примеров перерасхода от двух до трех раз каждый.


    Так ведь ясно, что примеры абсурдны, здесь уже тебе это много раз объяснили.
    ... << RSDN@Home 1.1.4 beta 7 rev. 463>>
    Re[12]: Oberon - Примеры кода
    От: Кодт Россия  
    Дата: 10.06.05 11:30
    Оценка: 3 (1)
    Здравствуйте, Socrat, Вы писали:

    S>У каждой системы свои нюансы. Часто приходилось отлаживать программу на контроллере, у которого из индикаторов только пара светодиодов...


    In-cirquit programmer, а тем более in-cirquit debugger — очень полезный паттерн проектирования схемотехники...
    Иначе забодаешься выковыривать чип из кроватки (а тем более — не дай бог — выпаивать).
    Перекуём баги на фичи!
    Re[15]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 11.06.05 07:33
    Оценка: 3 (1)
    П>>>должны сопровождаться некими дополнительными действиями (скажем, изменением состояния некоего третьего объекта). Что тогда? В C++ я переопределю оператор, в питоне — перекрою метод класса, а в Обероне?
    СГ>>Что, что — скопируете и сопроводите "некими дополнительными действиями". Прямо такой вопрос задаете, как буд-то ответ сами не знаете.

    П>Не надо слов. Код пожалуйста.


    Кода не будет. Единственный код в этой ветке пока представляю я Вот и сейчас придется отдуваться

    Никакого копирования

    здесь (для Active Oberon):

    Type-bound Procedures
    The type-bound procedures are declared locally to the record scope. A type-bound procedure can override another type-bound procedure declared in any base type of the record, but it must have the same name and the same signature. (а вот здесь начинаются костыли — прим. мое) The call of an overridden procedure can only be done in a type-bound procedure by using an arrow after the procedure name.(что? какая такая стрелка????)


    Более того, для собственных типов можно переопределять операторы: здесь (для OberonX):

    OberonX allows the implementation of operators. An operator is defined as follows:

         PROCEDURE "op" (a, b: T): Q; 
         BEGIN 
              ..... 
         END "op";

    The following operators can be defined:
    PROCEDURE "+"* (a, b: ARRAY OF CHAR): ARRAY OF CHAR; 
         VAR  res: ARRAY LEN(a) + LEN(b) + 1 OF CHAR; i, j: LONGINT; 
         BEGIN 
              i := 0; 
              WHILE a[i] # 0X DO  res[i] := a[i]; INC(i)  END; 
              j := 0; 
              WHILE b[j] # 0X DO  resij] := b[j]; INC(i); INC(j)  END; 
              res[i] := 0X; 
              RETURN res 
         END "+";


    Блин! Этих Оберонов — как собак нерезанных. И каждый обладает своим собственным набором костылей. Тьфу.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>> ... <<Winamp is playing "Silence">> ...


    dmitriid.comGitHubLinkedIn
    Re[13]: Устаревший блок begin end
    От: York Россия  
    Дата: 12.06.05 16:55
    Оценка: 3 (1)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>IF ... THEN ... END

    СГ>IF ... THEN ... ELSE ... END
    СГ>IF ... THEN ... ELSIF ... ELSE ... END
    СГ>CASE ... OF ... : ... | ... : ... | (и т.д.) ELSE ... END
    СГ>WITH ... : ... DO ... |... : ... DO ... | (и т.д.) ELSE ... END
    СГ>WHILE ... DO ... END
    СГ>LOOP ... END
    СГ>REPEAT ... UNTIL ...

    В привидённом примере, также есть лишние токены. Его можно минимизировать хотя бы так:

    ... THEN ... END
    ... THEN ... ELSE ... END
    ... THEN ... ELSIF ... ELSE ... END
    ... OF ... : ... | ... : ... | (и т.д.) ELSE ... END
    WITH ... : ... DO ... |... : ... DO ... | (и т.д.) ELSE ... END
    ... DO ... END
    LOOP ... END
    REPEAT ... UNTIL ...


    Теперь все условия начинаются с выражения, за которым следует THEN. Аналогичным образом избавляемся от CASE и WHILE. Так же можно убрать и WITH.
    Пищальников Юрий
    Re[5]: Ошибка
    От: Privalov  
    Дата: 15.06.05 14:31
    Оценка: 3 (1)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А я не возьму на работу людей, которые потом не возьмут на работу описанных Вами людей.


    СГ>Не постигаю, что такого кроется невозможного прочитать элементарное: WHILE a DO x; y; z END


    Это вы, уважаемый, никогда не работали с языками, допускающими имена переменных, состоящих не более чем из двух символов, причем если есть второй символ, до он обязан быть цифрой. Пример — реализация бейсика на "Искре-226". Зато никакого оверхеда.
    Re[14]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 16.06.05 08:58
    Оценка: 3 (1)
    Здравствуйте, Mr. None, Вы писали:

    MN>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Вообще-то, у Эйнштейна была немного другая другая формула:


    СГ>>G_{ij} = (8 Pi k)/(c^4) T_{ij}


    СГ>>где G_{ij} — тензор Эйнштейна (алгебраически выражающийся через тензор кривизны Ричи G_{ij} = R_{ij} — 1/2 g_{ij} R), а T_{ij} — тензор энергии импульса материи.


    СГ>>А что до E=m*c^2 — так то журналисты раструбили...


    MN>ВО! ТОЧНО! Слушайте а не вспомнить ли вам ваше первое образование и не заняться ли снова в серьёз физикой? Мы уж как-нибудь переживём без новых анекдотов....

    MN>Или вас и от туда турнули, за высказывания об избытке переменных и операций в системе уравнений Максвелла?

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

    Но я не устиаю подчеркивать, что даже если есть какой-то оверхед в сях, то оберон — наихудшая альтернатива, в этом треде уже 235% раз повторялось, почему. Не получится из Вас, уважаемый Сергей Губанов, Эйнштейна от Computer Science. Пока не уйдет из Оберона страшное слово PROCEDURE...

    А вообще — может надо вернуться к машинам Тьюринга или нормальной форме Бойса-Кодта?
    Re[15]: Читать всем - статистикаи читаемость
    От: Demiurg  
    Дата: 16.06.05 08:59
    Оценка: 3 (1)
    Здравствуйте, Mamut, Вы писали:

    СГ>>Это Вам, вообще-то, надо обращаться в начальную школу — там где деление проходят. Открою Вам секрет. Оказывается если сложить два целых числа, то результат тоже будет целым числом (поэтому и "+"). В то же самое время, если разделить два целых числа, то результат будет уже вовсе не целым, а рациональным числом (поэтому DIV).


    M>Кхм. А вы могли бы просто сказать, что DIV — это целочисленное деление? Я бы понял, уверяю.


    А в Си знак \ и то и то. Оверхед паскаля на лицо
    ... << RSDN@Home 1.1.4 beta 7 rev. 463>>
    Re[3]: Синтаксический оверхед
    От: Слава Шевцов Россия http://www.rentaguru.ru/
    Дата: 16.06.05 09:16
    Оценка: 3 (1)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>>>WHILE a DO x END


    J>>вот как на си это написать:

    J>>while(a) x();
    J>>без всяких та DO END и прочего.

    СГ>Заменяем служебные слова на символ "*":

    СГ>Оверхед = 6/3 = 2.00

    СГ>На 100% больше чем необходимо.


    Осталось перейти в машинные коды и сравнить результат.
    ----------------------------------------------------------------------------------------------
    Rentaguru
    Re[5]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 21.06.05 14:14
    Оценка: 3 (1)
    S>Он же сказал: доказано, что там должен быть 0. А если факты не соответствуют теории, то тем хуже для фактов.
    В фильме Jacket (цитата не совсем точная, но все же):

    Everything is alright with me. It's reality that' playing tricks




    dmitriid.comGitHubLinkedIn
    Re[15]: Яркий пример
    От: AVC Россия  
    Дата: 22.06.05 20:42
    Оценка: 3 (1)
    Здравствуйте, Mamut, Вы писали:

    M>И, хотя это являтся оффтопиком для данной подветки, еще одно замечание:

    M>
    M>// С++
    M>if(data != expectedData) // сравниваем две переменные, видно из кода
    
    M>{* Oberon *}
    M>IF data # expectedData THEN // сравинваем две переменные? 
    M>                            // переменную и значение функции?
    M>                            // значения двух функций?
    M>


    M>Наглядность языка? Где? Не вижу.


    M>Просьба к коду не придираться


    Да Бог с ним, с кодом; какая разница, ведь Вы просто не знаете языка.
    И в Си++, и в Обероне в данном случае сравниваются переменные.
    И вызов функции, и ее определение требуют круглых скобок, даже если функция вызывается без параметров.
    В Си++, например, напротив, конструктор без параметров не должен иметь скобок, чтобы компилятор не принял его за прототип функции.
    Понимаете, в чем закавыка. Я программирую как на Си++, так и на Обероне. (Оберон мне нравится больше, но для того, что я хочу Вам сказать, это не имеет значения.)
    В то же время ни Вы, ни большинство других "оппонентов" (какими они зачастую себя только воображают) Оберона не знают и на нем не пишут.
    Отсюда беспрерывные "откровения" вроде Вашего (со сравнением переменных) или уж откровенно глупого "оказывается, в Обероне есть BEGIN!!!". О перлах вроде "мне нас**ть на принципы структрного программирования" я уж и не говорю.
    Я отношусь к Вам с уважением и часто с удовольствием читаю Ваши посты.
    Поэтому мне жаль видеть Вас среди людей, которые, зная горячность Сергея (Губанова), нарочно "заводят" его, имитируя непонимание даже очевидных вещей, а затем откровенно издеваются над ним.
    Видели бы вы все себя со стороны!
    Попробуйте сами объяснить для себя присутствие столь многих и столь заведомо необъективных и даже откровенно злых людей на этом форуме, если эта тема так им неинтересна, если Оберон — такой уж плохой язык?
    Можете рассматривать это как "открытое письмо".

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re[5]: Правила + Предложение
    От: Amidlokos Россия  
    Дата: 22.06.05 21:03
    Оценка: 3 (1)
    Здравствуйте, Mamut, Вы писали:

    M>Предлагаю показательно забанить Сергея Губанова о следующим пунктам:


    Кстати, обратите внимание: единственный минус этому сообщению поставил С. Губанов
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[11]: Синтаксический оверхед
    От: Трурль  
    Дата: 23.06.05 06:21
    Оценка: 3 (1)
    Re[26]: Синтаксический оверхед
    От: Трурль  
    Дата: 23.06.05 14:37
    Оценка: 3 (1)
    Здравствуйте, Privalov, Вы писали:

    P>С обоснованием опять проблемы?

    А разве на этом форуме принято обосновывать? Но специально для Вас.

    Слово "ихний" есть в русском языке, потому что оно
    1) употребляется в разговорной речи;
    2) встречается в художественной литературе;
    3) упомянуто в словарях.

    Учителя плохие, потому что
    1) выжигать каленым железом не только непедагогично, но и жестоко.
    2) на фоне 1) все остальное даже не стоит упоминать.
    Re[13]: Идеологически правильный мегарулез
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 29.06.05 04:51
    Оценка: 3 (1)
    Здравствуйте, Amidlokos, Вы писали:

    A>Такое впечатление, что никто не понимает основных принципов C/C++, но всем надо покритиковать.


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

    A>ptr — это именно указатель. На что он там указывает — твои личные дела. Компилятор не должен отслеживать ничего в этом случае. От конструктора это никак не зависит.


    A>1. Раз объект стековый (а не указатель на какую-то память где-то в куче), то всё же компилятор заботится о его создании. Вот он и ругается.

    A>2. В случае с пустым конструктором достаточно (а может быть, слишком) умный компилятор определяет, что разницы между вызовом конструктора и отсутствием такого вызова не будет никакой. Вот и не ругается.

    А теперь к сути дискуссии, поскольку вы, судя по всему, её не поняли. Кодт утверждал, что правильный компилятор не позволит перескочить (goto) через определение локальных переменых. Однако, согласно пункту 6.7/3 стандарта C++ — это не так:

    It is possible to transfer into a block, but not in a way that bypasses declarations with initialization. A program
    that jumps77) from a point where a local variable with automatic storage duration is not in scope to a point where it is in scope is illformed unless the variable has POD type (3.9) and is declared without an initializer (8.5).
    [Example:
    void f()
    {
    // ...
    goto lx; // illformed: jump into scope of a
    // ...
    ly:
    X a = 1;
    // ...
    lx:
    goto ly; // OK, jump implies destructor
    // call for a followed by construction
    // again immediately following label ly
    }
    —end example]

    Что я и показал своим примером... И понимание сути указателя или предположения об умности компилятора в случае пустого конструктора тут и рядом не лежало.
    Указатель или постейших класс являются POD типами, поэтому такой переход не является illformed и нормально допускается, какая инициализация будет в этом случае я не знаю, но судя по всему default-initialization, приводящая в случае POD типов к неопределённому результату. В случае VC 7.1, если переменная, определение которой перескакивается оператором goto, является принадлежит классу, который является POD-типом, но имеет определённый конструктор (даже конструктор по-умолчанию), или при определении этой переменной к ней была применена value-initialization, в этом случае VC 7.1 реагирует предупреждением, но не может запретить такое поведение — это не illformed-код (см. выше). В этом случае переменная опять таки оказывается default-initialized. Если goto выполняет переход через участок кода, содержащий определение переменной не-POD типа, в этом случае код является illformed и компиляция прерывается. Добавьте к классу деструктор и вы сами в этом убедитесь.
    Так что, прежде чем отзываться о профессиональных навыках оппонента, убедитесь, что вы сами понимаете суть вопроса.
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[2]: Синтаксический оверхед
    От: UGN  
    Дата: 09.06.05 10:15
    Оценка: 2 (1)
    Здравствуйте, Oyster, Вы писали:

    OСГ>>Реально необходимый и достаточный синтаксис:

    СГ>>IF a THEN x ELSIF b THEN y ELSE z END


    O>И так тоже можно:

    O>if (a) x(); else if (b) y(); else z();


    А можно и так:

    a ? x() : (b ? y() : z())
    Re[10]: Яркий пример
    От: qwertyuiop Российская Империя  
    Дата: 21.06.05 19:58
    Оценка: 2 (1)
    П>>Ну и где хваленое превышение в разы?

    СГ>33/24 = 1.375

    СГ>12/9 = 1.3333

    СГ>Тоже не хилый оверхедец.


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

    П>Итого:

    П>лексем — 24
    П>строк кода — 12
    П>символов (не считая отступов) — 236

    П>Итого:

    П>лексем — 33
    П>строк кода — 9
    П>символов (не считая отступов) — 175

    Тогда мы сразу увидим, по строкам оверхед не в пользу Оберона, а совсем наоборот! Не говоря уже о том, что по символам (которые собственно и наколачивает бедный программист) оверхед Оберона составляет 236/175 = 1.35

    Если после этого у Вас не появится желания выпить йаду или застрелиться, то, я надеюсь, хотя бы пропадет желание писать сюда.
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[8]: Синтаксический оверхед
    От: o.kostya  
    Дата: 22.06.05 11:31
    Оценка: 2 (1)
    Здравствуйте, Пацак, Вы писали:


    СГ>>
    СГ>>  if(условие2); /* <-- "зевок" остался не уловимым для компилятора */
    СГ>>


    П>Сишного компилера под рукой нет, но что-то мне кажется, что он в этом случае должен warning'ом изругаться. Народ, проверьте кто-нибудь, а?


    test12.cpp(17) : warning C4390: ';' : empty controlled statement found; is this the intent?
    ... << RSDN@Home 1.1.3 stable >>
    Re[19]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 22.06.05 12:59
    Оценка: 2 (1)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Sergey J. A., Вы писали:


    SJA>>А это
    Автор: Пацак
    Дата: 22.06.05
    Вы не читали?


    СГ>Там не по теме. В этой ветке форума обсуждается си-образный синтаксис vs Modula/Oberon-образный. Если Вам охота какой-то другой синтаксис сравнить заводите другую ветку форума. Но такой популярности как эта ветка, она вряд ли добьется.


    Там по теме !
    Я — свихнувшееся сознание Джо.
    Re[18]: While Loop - Definition
    От: Mamut Швеция http://dmitriid.com
    Дата: 23.06.05 12:26
    Оценка: 2 (1)
    Чтобы я делал без Wikipadia и запроса define: в Гугле?
    Wikipedia:While Loop

    In most computer programming languages, a while loop is a control structure that allows code to be executed repeatedly based on a given boolean condition.

    The while construct consists of a block of code and a condition. The condition is first evaluated — if the condition is true the code within the block is then executed. This repeats until the condition becomes false. Because while loops check the condition before the block is executed, the control structure is often also known as a pre-test loop. Compare with the do while loop, which tests the condition after the loop has executed.

    Note that it is possible, and in some cases desirable, for the condition to always evaluate to true, creating an infinite loop. When such a loop is created intentionally, there is usually another control structure (such as a break statement) that controls termination of the loop.



    dmitriid.comGitHubLinkedIn
    Re[3]: Синтаксический оверхед
    От: DMitay Украина  
    Дата: 10.06.05 10:04
    Оценка: 1 (1)
    Здравствуйте, Кодёнок, Вы писали:

    А>>Ты это... убери что-ли "кфмн" из профайла.

    А>>Даже неудобно как-то читать подобные сообщения от человека со степенью.

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


    Полностью согласен! Пусть на меня не обижаються мои друзья учащиеся в аспирантуре, но то что там занимаються зачастую надуманными и не имеющими практического и прочего применения это точно. Зачастую все статьи, научные работы и прочее пишуться только ради самого факта публикации.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[5]: Синтаксический оверхед
    От: Аноним  
    Дата: 10.06.05 14:27
    Оценка: 1 (1)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А, ну, тут прошу прощения, в принципе ни чем. Просто оборот речи. Смысл оборота — гиперболизация масштаба, дескать отличается не на чуть-чуть, а сильно.


    Сдаётся мне, что за всеми этими "гиперболизациями масштаба" (они же перфомансы) и проходит ваша профессиональная деятельность, а не за работой на реальными программными проектами.
    Re[12]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 16.06.05 08:40
    Оценка: 1 (1)
    Здравствуйте, Mr. None, Вы писали:

    MN>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Здравствуйте, Mr. None, Вы писали:


    MN>>>perl адназначна... вот где никакого оверхеда ... вот только фиг прочтёшь, что написано...


    СГ>>Так ведь, еще Эйнштейн говорил — сделать так просто, как только возможно, но не проще. Но не проще!!!


    MN>Сударь, вы не Эйнштейн. А Оберону до простоты, присущей великой формуле E=m*c^2, как от Москвы до Китая раком...


    Вообще-то, у Эйнштейна была немного другая другая формула:

    G_{ij} = (8 Pi k)/(c^4) T_{ij}

    где G_{ij} — тензор Эйнштейна (алгебраически выражающийся через тензор кривизны Ричи G_{ij} = R_{ij} — 1/2 g_{ij} R), а T_{ij} — тензор энергии импульса материи.

    А что до E=m*c^2 — так то журналисты раструбили...
    Re: Синтаксический оверхед
    От: Amidlokos Россия  
    Дата: 19.06.05 14:10
    Оценка: 1 (1)
    Хочу предложить ещё один тест, более объективный, чем все предложенные ранее.

    Итак, закройте все окна (или консоли) рабочей среды. Выключите компьютер. Вкусно покушайте, сходите к друзьям ( ), поиграйте в какую-нибудь игрушку (в моём случае — GTA VC, только не спутайте это VC с Visual C++). Потом, знаете ли, по вкусу и по возможностям... Только НЕ !!! А потом — спать, сколько влезет спать, со смаком.

    И проснувшись обнаружите интересную вещь: вам перестанет быть нужным признание всем миром, что ваш выбор языка самый нужный и правильный. Все настолько консервативные снобы, что не желают признать Оберон? Им же в будущем аукнется — не мои проблемы! Все настолько тупы, что не в состоянии понимать синтаксис C-style, но всё равно наезжают? Им же в будущем аукнется — не мои проблемы!

    И вот после этого можете спокойно начинать работать в любимой среде на любимом языке
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[3]: Синтаксический оверхед
    От: Аноним  
    Дата: 20.06.05 11:55
    Оценка: 1 (1)
    Здравствуйте, Сергей Губанов, Вы писали:

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


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


    СГ>Естественно.


    СГ>Но вопрос в другом. Точнее их два.


    Доцент тупой
    Re[2]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 21.06.05 11:34
    Оценка: 1 (1)
    AVC>Вот простой пример.
    AVC>При разработке программы со сложным алгоритмом обыкновенно требуется делать ссылки на литературу: ищи пояснения в такой-то книге, на такой-то странице.
    AVC>Мне же оказалось достаточно взять требуемые фрагменты (и, что немаловажно, с "картинками" ) из документа, содержащего известную книгу Кормена, Лейзерсона и Ривеста, и вставить как комментарий в программу на Компонентном Паскале прямо перед соотвествующим им кодом.
    AVC>Алгоритм теперь читается и понимается легко и даже приятно.
    AVC>Кроме того, благодаря тому, что все ключевые слова состоят только из заглавных букв и благодаря этому выделяются сами собой, программист может использовать цвет букв (а также размер и шрифт) по своему усмотрению для выделения особо важных фрагментов кода. Скажем, не уверен в данном коде — пометил его красным: проверить! Это очень эффективная система, т.к. цвет бросается в глаза, и такой участок кода трудно не заметить.
    AVC>Напоминаю, что подобные возможности доступны в Обероне с 1980-х.
    AVC>А что же Си/Си++?


    По-моему, вы путаете понятие среды и языка. Что, если я напишу IDE, обрабатывающую Обероны безо всех этих фич? Или тот же Zonnon, если его прикрепят к Visual Studio, автоматом позволит мне все это делать?

    Эх, ностальгия..... Напомню, что все эти псевдо-фичи среды Блэкбокс уже обсуждались. Например, здесь показано
    Автор: Mamut
    Дата: 29.10.04
    , что вставка объектов в текст ни в коем случае не делает его читаемым. потому что извините, но картинка, документация, форма и код — это диаметрально противоположные понятия.

    Не спорю, их можно сделать, но подумав головой, например, как это делают в Visual Studio 2010 Concept IDE. Чувствуете разницу?

    Более того, есть претендующий на научный труд , объясняющий, почему plain text &mdash; хорошо
    Автор: Mamut
    Дата: 29.10.04


    И вообще, где мой орден
    Автор: Mamut
    Дата: 01.11.04
    ?


    dmitriid.comGitHubLinkedIn
    Re[7]: Синтаксический оверхед
    От: Socrat Россия  
    Дата: 21.06.05 14:50
    Оценка: 1 (1)
    Здравствуйте, Privalov, Вы писали:

    P>
    P>   for (i=0; a[i]>=0 && i < N; i++);
    P>


    Хм... Лучше сначала i сравнить с N...
    Re[5]: Синтаксический оверхед
    От: qwertyuiop Российская Империя  
    Дата: 21.06.05 17:32
    Оценка: 1 (1)
    СГ>http://www.rsdn.ru/Forum/Message.aspx?mid=1216614&amp;only=1
    Автор: Сергей Губанов
    Дата: 10.06.05


    Ссылка на самого себя — это круто!

    Тогда я тоже представлю свою ссылку:

    http://www.rsdn.ru/Forum/Message.aspx?mid=1233919&amp;only=1
    Автор: qwertyuiop
    Дата: 21.06.05
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[5]: Керниган & Ритчи
    От: Sergey J. A. Беларусь  
    Дата: 22.06.05 07:35
    Оценка: 1 (1)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Совершенно верно, авторы языка Си (и операционной системы UNIX) "признали свои ошибки" и создали safe язык Limbo (со сборкой мусора) и операционную систему Inferno написанную на нем.


    А синтаксис-то С-шный

    З.Ы. Сергей, немного поясняю для Вас. Синтаксис Limbo похож на синтаксис С (и не похож на Обероновский).
    Я — свихнувшееся сознание Джо.
    Re[9]: А эхо в ответ: мать...мать...мать...
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 08:03
    Оценка: 1 (1)
    Здравствуйте, Mamut, Вы писали:

    M>Ааа. Понял То есть — а на чем же написан рантайм Оберона? Боюсь, на ассемблере. Вернее, того Оберона, что BlueBottle. BlackBox вполне себе на C наверное написан


    Почему Си, а не Паскаль (1970), а почему не Модула 2 (1979), а почему не сам Оберон?

    Ученье свет:
    http://www.uni-vologda.ac.ru/oberon/infoart/proj0.htm
    Re[5]: Керниган & Ритчи
    От: Privalov  
    Дата: 22.06.05 09:41
    Оценка: 1 (1)
    Здравствуйте, Сергей Губанов, Вы писали:

    Забыл спросить: почему Паскаль остается самым распространенным из всего семейства паскалеподобных языков, в то время как остальные применяются весьма и весьма редко? У меня есть определенное мнение на этот счет, а у Вас?
    Re[13]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 13:08
    Оценка: 1 (1)
    Здравствуйте, Mamut, Вы писали:

    M>"Не плоди сущностей без необходимости" LOOP — такая вот ненужная сущность.


    Странно, а если нужно проверить условие прекращения итерации уже находясь внутри итерации, тогда как быть?

    Наоборот, это WHILE и REPEAT выводятся из LOOP как частные случаи.

    WILE a DO ... END можно понимать как сокращенную запись: LOOP IF a THEN ... ELSE EXIT END END,
    REPEAT ... UNTIL b можно понимать как сокращенную запись: LOOP ... IF b THEN EXIT END END.
    Re[16]: Яркий пример
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 14:40
    Оценка: 1 (1)
    M>>Любой цикл и условие в программе можно переписать с использованием только цикла while. loop — это извращение, о котором написано здесь
    Автор: Mamut
    Дата: 22.06.05



    P>Он не только оппонентов, он и классику не читает. Сейчас вряд ли найду, но эти положения у Вирта обсуждаются. Видимо, он и его не читал. О чем тогда еще говорить?


    Не совсем Вирт, но все же. Начинаем читать отсюда:
    A Case for Teaching Multi-exit Loops to Beginning Programmers &mdash; Buhr (1985). Занимательно чтиво. Если что, я вам его потицирую...


    dmitriid.comGitHubLinkedIn
    Re[17]: Яркий пример
    От: AVC Россия  
    Дата: 23.06.05 10:37
    Оценка: 1 (1)
    Здравствуйте, Mamut, Вы писали:

    M>>>Просьба к коду не придираться


    AVC>>Да Бог с ним, с кодом; какая разница, ведь Вы просто не знаете языка.

    AVC>>И в Си++, и в Обероне в данном случае сравниваются переменные.
    AVC>>И вызов функции, и ее определение требуют круглых скобок, даже если функция вызывается без параметров.

    M>О! Я этого не знал, но! Нигде (ни в постах Сергея, например, ни даже в примерах на ETH) не указано такое требование.


    M>Например

    M>
    
    
    M>PROCEDURE PrintGadget*;
    M>VAR S: Display.SelectMsg; P: Display.DisplayMsg; obj: Objects.Object;
    M>BEGIN
    M>  Printer.Open("LPT1", "");
    M>  Out.String("Printing gadget"); Out.Ln;
    M>  S.id := Display.get; S.F := NIL; S.obj := NIL; S.time := -1;
    M>  Display.Broadcast(S);
    M>  IF (S.time > 0) & (S.obj # NIL) THEN
    M>    obj := S.obj;
    M>    P.device := Display.printer; P.id := Display.contents; P.F := obj(Display.Frame);
    M>    P.res := -1;
    M>    Display.Broadcast(P);
    M>  END
    M>END PrintGadget;
    M>


    M>Только посмотрев в описание модулей можно понять, что Out.Ln — процедура, а Display.get — это переменная


    В Обероне это легко (ИМХО) определяется по контексту.
    Вызов "чистой" процедуры — всегда отдельный оператор.
    Процедуры-функции используются в выражениях и именно поэтому требуют скобок, даже если у них нет параметров.
    Переменная используется либо как левая часть оператора присваивания, либо в выражении, но никогда "сама по себе", поэтому ее не спутаешь с процедурой.

    M>Более того, в EBNF Оберона записано следующее:

    M>
    M>...
    M>statement  =  [assignment | ProcedureCall | 
    M>    IfStatement | CaseStatement | WhileStatement | RepeatStatement | 
    M>    LoopStatement | WithStatement | EXIT | RETURN [expression] ].
    M>...
    M>ProcedureCall  =  designator [ActualParameters].
    M>


    M>То есть скобки не нужны при вызове


    Мне кажется, что вызов процедуры-функции должен упоминаться не в операторе (statement), а в выражении (expression).
    Скорее всего — в множителе (factor).
    Но я еще подумаю.

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

    AVC>>Понимаете, в чем закавыка. Я программирую как на Си++, так и на Обероне. (Оберон мне нравится больше, но для того, что я хочу Вам сказать, это не имеет значения.)
    AVC>>В то же время ни Вы, ни большинство других "оппонентов" (какими они зачастую себя только воображают) Оберона не знают и на нем не пишут.

    M>


    AVC>>Отсюда беспрерывные "откровения" вроде Вашего (со сравнением переменных) или уж откровенно глупого "оказывается, в Обероне есть BEGIN!!!". О перлах вроде "мне нас**ть на принципы структрного программирования" я уж и не говорю.


    M>Ну, на принципы эти мне не неср*ть в общем случае Дело в том, что слишком часто от того же принциа "одна точка входа — одна точка выхода" необходимо отходить, потому что следование ему приводит к усложнению программы.


    M>На самом деле меня интересовал (в этой подветке) всего один вопрос — почему недопустимо более одной точки выхода из циклов FOR и WHILE в Обероне и почему необходимо было вводить цикл LOOP (он уже нарушает принцип структурного программирования Дейкстры).


    Я это обдумаю.
    До сих пор я воспринимал "одну точку выхода" так: в данной процедуре после выхода из цикла (а также IF или CASE) мы можем оказаться толькой в одной точке программы — сразу после этого цикла. Если цикл был с предусловиеи, то в точке сразу после него оно будет обязательно ложным. Если цикл был с постусловием, оно обязательно будет истинным. Ну, а если был LOOP (выход из тела цикла) — то смотри в оба!

    AVC>>Можете рассматривать это как "открытое письмо".

    M>


    Я ни в коем случае не хотел Вас обидеть. Я обратился лично к Вам именно потому, что был уверен, что Вы поймете меня правильно.
    Просто, как мне показалось, вчера дело зашло слишком далеко.
    Добрался ночью до Инета — и о ужас! По первому впечатлению я воспринял ситуацию как травлю и пинание ногами.
    Вот я и выбрал, ИМХО, самого разумного и спокойного оппонента, чтобы высказать свое "фэ".
    Разумеется, я никоим образом не хотел сказать, что сторонники Оберона всегда правы, а его противники всегда неправы.
    За год дискуссий на RSDN я многое понял только благодаря критике.
    Потому и участвую в здешних дискуссиях (иногда перерастающих в побоища ), хотя некоторые (уважаемые мной) люди удивляются этому. Говорят, в частности, что язык программирования как религия — никто никого не переубедит. Я же хочу испытать некоторые идеи (и не думаю "насаждать" Оберон "огнем и мечом"), так что мне критика только полезна.
    Но вчера... уж я сам, каюсь, язвительный , но вы, ребята, просто поставили мировой рекорд какой-то...

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re[13]: Синтаксический оверхед
    От: Трурль  
    Дата: 24.06.05 07:54
    Оценка: 1 (1)
    Здравствуйте, Трурль, Вы писали:

    Т>Слышал, там использовали Дракон, язык на основе блок-схем.

    Впрочем, нет. Дракон -это учебный вариант того, что там использовалось.
    Re[7]: Синтаксический оверхед
    От: achp  
    Дата: 24.06.05 12:47
    Оценка: 1 (1)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>В Ада — понятия не имею.


    В Аде правила к циклу с переменной применяются очень строгие. Во-первых, имя переменной цикла вводится инструкцией FOR, за пределами цикла переменная не существует. Во-вторых, шаг приращения может быть равен только 1 или -1. В-третьих, внутри цикла переменная считается константой.
    Re[10]: Синтаксический оверхед
    От: jazzer Россия Skype: enerjazzer
    Дата: 27.06.05 10:31
    Оценка: 1 (1)
    Здравствуйте, moudrick, Вы писали:

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


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


    M>>>С++, кстати, тоже начинался с академической разработки. А практики его потом подхватили.

    M>>>Ссылку навскидку не нашел, извините.

    J>>И не найдешь.

    J>>Потому что он создавался именно для облегчения программирования на С (как и С по отношению к асму, кстати).
    J>>Цель сугубо практическая.
    J>>И обкатывался язык не на теоремах, а в руках действующих программистов на С.

    J>>Почитай D&E.

    M>Моя настольная книга.
    M>AT&T (где начинал разрабатываться C++), да будет Вам известно — исследовательская лаборатория, стало быть там академическая среда, не так ли?

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

    Только вот закавыка в том, что это — научно-исследовательская лаборатория ДЛЯ НУЖД AT&T.
    Все крупные предприятия имеют свои НТО (научно-технические отделы), и НТО работают не ради чистой науки, а исключительно по заказу предприятия для нужд и во имя прибылей этого предприятия.
    Так что это ни капли не академическая среда, в которой доказывают теорему Ферма, это обычная инженерная среда, в которой люди ищут решения конкретных стоящих в данный момент перед предприятием проблем.

    Опять же, с его сайта:

    Why did AT&T support the development of C++?

    When I first developed C++, AT&T built systems of greater complexity and with greater reliability requirements than most organizations. Consequently, we had to influence the market and help set standards that meet our needs — or else we wouldn't have the tools to build our systems. Left to itself "the industry" will create languages and tools for dealing with "average" problems. Similarly, teachers tend to focus on languages and tools that serve students and researchers well — even if they don't scale to the most demanding tasks.
    At the time when I developed C++ — and before that when Ken Thompson and Dennis Ritchie developed Unix and C — AT&T was probably the worlds largest civilian user of (and consumer of) software tools. Then, we probably used a wider range of systems — from the tiniest embedded processors to the largest supercomputers and data-processing systems. That put a premium on systems that were applicable in many technical cultures and on many platforms. C and C++ were designed with such demands in mind.

    Thus generality is essential, and proprietary features are seen as limiting the choice of platforms and vendors. As a consequence AT&T was and is a major supporter of formal standards (for example, ISO C and ISO C++).

    Actually, AT&T made enough money on Cfront, my original C++ compiler, to pay for the development of C++ several times over.

    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[12]: Синтаксический оверхед
    От: merlin.fs Украина  
    Дата: 04.08.05 09:05
    Оценка: 1 (1)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>То есть Вы за то чтобы всегда писать "^." вместо "." даже если это очевидно?

    Стараюсь только так и писать.
    СГ>Суровый Вы человек, однако...
    Когда появляются неоднозначность, с вероятностью в 90% появится и ошибка.

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

    зы: пишу на делфях
    ... << RSDN@Home 1.1.4 stable rev. 510>>
    Re[3]: Ошибка
    От: Privalov  
    Дата: 09.06.05 10:16
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Упомянутый Вами синтаксис устарел более чем двадцать пять лет тому назад.


    СГ>Где-то в середине 1970-тых годов был открыт реально необходимый и достаточный синтаксис (Modula-2, 1979 год)


    Есть математическое доказательство "необходимости и достаточности"?

    СГ>
    СГ>WHILE a DO x; y; z END
    СГ>

    СГ>Обратите внимание: слово "BEGIN" отсутствует вообще во всех инструкциях — оно лишнее.

    Ну в одном слове ошибся. Это разве принципиально? Все равно, если вместо x, y, z что-нибудь реальное подставить, в одну строку вряд ли уложишься.
    Опять же, углубляясь в детали, отметим, что ";" является разделителем между операторами, в результате возникает путаница, когда ее ставить, а когда нет. В литературе можно встретить довольно подробное обсуждение этой темы. Если найду дома книгу, сообщу название.
    Re[4]: Ошибка
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 09.06.05 10:23
    Оценка: +1
    Здравствуйте, Privalov, Вы писали:

    P>Опять же, углубляясь в детали, отметим, что ";" является разделителем между операторами, в результате возникает путаница, когда ее ставить, а когда нет.


    Путаницы не возникает ни когда — любые две инструкции всегда разделяются разделителем.
    Re[5]: Ошибка
    От: Privalov  
    Дата: 09.06.05 10:37
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:


    СГ>Путаницы не возникает ни когда — любые две инструкции всегда разделяются разделителем.


    WHILE a DO x; y; z END


    То есть здесь z и END — одна инструкция?

    Да, а что там с доказательством того что

    СГ>Где-то в середине 1970-тых годов был открыт реально необходимый и достаточный синтаксис (Modula-2, 1979 год)

    действительно необходимый и достаточный?
    Re[3]: Синтаксический оверхед
    От: Аноним  
    Дата: 09.06.05 12:18
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

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


    К>>Вопрос с ходу — ты всегда будешь циклы и комлексные условия с операциями в 1 строчку писать? И что помешало на сишном синтаксисе сделать также?


    СГ>Я соблюдал общепринятые стандарты кодирования. Хочешь верь, а хочешь нет, но инструкции навроде:


    СГ>WHILE a DO x END


    СГ>REPEAT x UNTIL b


    СГ>IF a THEN x ELSE y END


    СГ>CASE n OF a: x | b: y ELSE z END


    СГ>ну натурально принято писать в одну строчку.


    Видимо идентификаторы у тебя тоже приняты только однобуквенные.
    Ну максимум — двухбуквенные.
    Re[3]: Синтаксический оверхед
    От: Drago Россия  
    Дата: 09.06.05 12:28
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    D>>[кусь]

    СГ>Не Паскаль это, а Modula/Oberon.
    а какая разница, уважаемый? Modula — предтеча Pascal
    Re[2]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 09.06.05 16:25
    Оценка: +1
    S>
    S>func (param1, param2, param3, param4, expr? param5: param6);
    S>


    Не пишите такой код ни на каком объектном языке.
    Напрашивается паттерн "Граничный объект" (Introduce Parameter Object)
    здесь
    Re: Синтаксический оверхед
    От: Real 3L0 Россия http://prikhodko.blogspot.com
    Дата: 10.06.05 01:39
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.


    Первый раз в жизни, читая юмор с утра, было так грустно.
    В игнор тему.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Вселенная бесконечна как вширь, так и вглубь.
    Re: Синтаксический оверхед
    От: Demiurg  
    Дата: 10.06.05 06:54
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    Не дочитал... Первых двух хватило, чтобы понять — бред.
    ... << RSDN@Home 1.1.4 beta 7 rev. 463>>
    Re[6]: Синтаксический оверхед: а смысл-то в чем?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 07:20
    Оценка: :)
    Здравствуйте, Demiurg, Вы писали:

    D> Но ведь ты не прав

    D> Ссылаться на бредовое сообщение? Ой, тогда извини... Ты так и не понял, что не прав?

    Да, не понял.

    Текст оформлен в согласии с общепринятым coding style. Служебные слова, скобочки, точки-запятые, посчитаны, надеюсь, без арифметических ошибок. Числа делил правда на калькуляторе, но наверное калькулятор всё-таки не ошибся. Так что всё вроде сделал правильно. Так что не так?
    Re[8]: Синтаксический оверхед: а смысл-то в чем?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 07:33
    Оценка: :)
    Здравствуйте, moudrick, Вы писали:

    M>Единственный разумный вывод из твоей "работы" — ты против использования coding-style в обероне, а так же недолюбливаешь с-подобный синтаксис.


    coding-style относится к количеству строчек кода, а основной смысл был про количество лексем. Не зависимо от того какой применять coding-style, количество используемых лексем всё равно больше чем реально необходимо. Смысл заметки в том, что: СИ-ОБРАЗНЫЙ СИНТАКСИС ИСПОЛЬЗУЕТ БОЛЬШЕ ЛЕКСЕМ ЧЕМ ЭТО РЕАЛЬНО НЕОБХОДИМО. Я специально для Вас заглавными буквами написал смысл. Запомните его. А то, понимаете-ли, прочитали сообщение, а смысла так и не поняли.
    Re[10]: Ошибка 3
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 07:43
    Оценка: :)
    Здравствуйте, Socrat, Вы писали:

    S>Меня, например, напрягает, что begin, end и пр. на вид практически неотличимы от идентификаторов (разве что цветом в редакторе).


    Спешу сообщить, что упомянутый Вами синтаксис c {begin, end} уже устарел, и сделал это более чем двадцать пять лет тому назад.

    Ошибка:
    http://www.rsdn.ru/Forum/Message.aspx?mid=1214592&amp;only=1
    Автор: Сергей Губанов
    Дата: 09.06.05


    Ошибка 2:
    http://www.rsdn.ru/Forum/Message.aspx?mid=1214676&amp;only=1
    Автор: Сергей Губанов
    Дата: 09.06.05
    Re[11]: Ошибка 3
    От: moudrick Россия http://community.moudrick.net/
    Дата: 10.06.05 07:46
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

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


    S>>Меня, например, напрягает, что begin, end и пр. на вид практически неотличимы от идентификаторов (разве что цветом в редакторе).


    СГ>Спешу сообщить, что упомянутый Вами синтаксис c {begin, end} уже устарел, и сделал это более чем двадцать пять лет тому назад.


    И что же используется в тех местах, где раньше был {begin, end}?
    Пустая лексема?
    Re[7]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 10.06.05 08:14
    Оценка: :)
    Здравствуйте, Пацак, Вы писали:

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


    S>>По ушам схлопотать можно и без повода... А такой код тоже недопустим?


    S>>
    S>>while (*str1++ = *str2++);
    S>>


    П>Зря ты это сказал. Щас опять флейм насчет указателей поднимется.


    (n-m)-я заповедь флеймера — никогда не создавай сам провокационные топики. используй чужие.
    Re[7]: Синтаксический оверхед
    От: Socrat Россия  
    Дата: 10.06.05 09:55
    Оценка: +1
    Здравствуйте, Пацак, Вы писали:

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


    C>>Еще можно Перл и Питон вспомнить — с ними

    C>>по лаконичности рядом вообще ни один Паскаль не валялся.

    П>Учитывая "любовь" автора к скобочкам — лучше лисп!


    Можно FORTH
    Re[5]: Синтаксический оверхед: а смысл-то в чем?
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 10.06.05 10:09
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

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


    E>>Да и вообще, чего мы мелочимся?


    СГ>Увы, 235 процентов — не мелочь.


    СГ>Серьмяжный смысл моего сообщения был в том, что теперь я могу ссылаться
    Автор: Сергей Губанов
    Дата: 09.06.05
    на это сообщение, а не голословно говорить, что Си-образный синтаксис использует больше лексем чем нужно.


    СГ>Мне даже не важно какой именно перерасход лексем получился. Важно что их больше
    Автор: Сергей Губанов
    Дата: 09.06.05
    чем реально необходимо.



    Если честно, то я не понял, кто здесь над кем прикололся
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[12]: Устаревший блок begin end
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 10:11
    Оценка: +1
    Здравствуйте, moudrick, Вы писали:

    M>И что же используется в тех местах, где раньше был {begin, end}?


    А таких мест больше нет, вот смотрите:

    IF ... THEN ... END
    IF ... THEN ... ELSE ... END
    IF ... THEN ... ELSIF ... ELSE ... END
    CASE ... OF ... : ... | ... : ... | (и т.д.) ELSE ... END
    WITH ... : ... DO ... |... : ... DO ... | (и т.д.) ELSE ... END
    WHILE ... DO ... END
    LOOP ... END
    REPEAT ... UNTIL ...

    Сам по себе блок begin end утрачен за не надобностью — ведь все инструкции теперь явно содержат END.
    Re[13]: *
    От: Кодт Россия  
    Дата: 10.06.05 10:16
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    К>>IF
    К>>  condition_goes_here
    К>>THEN
    К>>  x;
    К>>  y;
    К>>  z; (* с обязательной ";" в конце каждой инструкции - требование системы контроля версий *)
    К>>ELSE
    К>>  t;
    К>>  u;
    К>>  v;
    К>>END; (* и здесь тоже ";" по той же самой причине *)


    СГ>А пусть даже и так.


    СГ>Посчитаем синтаксический оверхед по сравнению с аналогичным показанному выше, но теперь уже Си-образным синтаксисом

    СГ>if(condition_goes_here)
    СГ>{
    СГ>  x();
    СГ>  y();
    СГ>  z(); 
    СГ>{
    СГ>else
    СГ>{
    СГ>  t();
    СГ>  u();
    СГ>  v();
    СГ>}


    СГ>синтаксический оверхед = 26/11 = 2.36


    СГ>(подсчитывал только служебные символы, пользовательские идентификаторы — нет).


    Странная арифметика. Давай посчитаем все служебные символы, включая пробелы (разделители лексем).
    Без извращений в стилистике:
    Без извращений в стилистике: ( | конец потока )
    
    ~~~         ~~~~~~ ~ ~ ~~~~~~ ~ ~ ~~~~~        24 служебных символа
    IF condition THEN x;y;z ELSE t;u;v END |       разница 6 символов, 30:24 = 1.25
    if(condition){x();y();z();}else{t();u();v();}|
    ~~~         ~~ ~~~ ~~~ ~~~~~~~~~ ~~~ ~~~ ~~~~  30 служебных символов
    
    С извращениями: ( _ пробел, \ перевод каретки )
    
    ~~~~~         ~~~~~~~~ ~~~~ ~~~~ ~~~~~~~~~ ~~~~ ~~~~ ~~~~~~~           45
    IF\__condition\THEN\__x;\__y;\__z;\ELSE\__t;\__u;\__v;\END;\|          разница 9 символов, 54:45 = 1.20
    if(condition)\{\__x();\__y();\__z();\}\else\{\__t();\__u();\__v();\}\|
    ~~~         ~~~~~~ ~~~~~~ ~~~~~~ ~~~~~~~~~~~~~~~ ~~~~~~ ~~~~~~ ~~~~~~  54

    Причём, если бы функции x...v были не нуль-арными — то Си выиграл бы.
    Перекуём баги на фичи!
    Re[14]: Устаревший блок begin end
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 10:32
    Оценка: :)
    Здравствуйте, Пацак, Вы писали:

    П>Здравствуйте, Сергей Губанов, Вы писали:



    СГ>>А таких мест больше нет, вот смотрите:

    П>(скип)

    П>
    П>PROCEDURE ... BEGIN ... END;
    П>


    П>


    А еще есть MODULE ... BEGIN ... CLOSE ... END

    В данном случае BEGIN END — это не самостоятельный блок, а часть составной инструкции PROCEDURE или MODULE.
    Re[10]: Oberon - Примеры кода
    От: Пацак Россия  
    Дата: 10.06.05 10:47
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>(например, системы реального времени нельзя дебажить по определению)


    Начинаю бояться летать на самолетах....
    Ку...
    Re[13]: *
    От: Demiurg  
    Дата: 10.06.05 10:48
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>синтаксический оверхед = 26/11 = 2.36


    СГ>(подсчитывал только служебные символы, пользовательские идентификаторы — нет).


    Скобки подсчитал? Эх, не понимаешь ты смысла... И охота такой ерундой маяться?
    ... << RSDN@Home 1.1.4 beta 7 rev. 463>>
    Re[4]: Синтаксический оверхед
    От: Кодёнок  
    Дата: 10.06.05 11:18
    Оценка: :)
    А>И что вас тогда дернуло в программирование?
    А>Вы продолжаете заниматься теоретической физикой?

    А что не видно
    Re[8]: Синтаксический оверхед
    От: Sheridan Россия  
    Дата: 10.06.05 13:00
    Оценка: +1
    Здравствуйте, Курилка, Вы писали:

    К>Ну дак пиши на K тогда, что мозги-то компостировать?


    Лучше на brainfuck или вообще на whitespace...
    [RSDN@Home][1.1.4][beta 7][466]
    [Winamp is shutdown.]
    Matrix has you...
    Re[13]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 13:37
    Оценка: :)
    Здравствуйте, Пацак, Вы писали:

    П>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Также и пишется: str1 := str2, равно как для любых массивов arr1 := arr2 (соответствующих типов — ведь массивы это самый обычный value-type, а значит можно так присваивать — нет исключений из правил).


    П>должны сопровождаться некими дополнительными действиями (скажем, изменением состояния некоего третьего объекта). Что тогда? В C++ я переопределю оператор, в питоне — перекрою метод класса, а в Обероне?


    Что, что — скопируете и сопроводите "некими дополнительными действиями". Прямо такой вопрос задаете, как буд-то ответ сами не знаете.

    У бомжей берут интервью:
    — "Скажите пожалуйста, вот вы живете на улице, а что вы делаете когда идет дождь?"
    Бомжи недоуменно переглядываются, пожимают плечами и, в конце-концов, отвечают:
    — "Как, что? Мокнем мы."

    Re[12]: Oberon - Примеры кода
    От: Mamut Швеция http://dmitriid.com
    Дата: 11.06.05 07:22
    Оценка: +1
    M>>ЗЫ. Только не надо перечислять, какие ошибки я допустил в Обероновском коде.

    СГ>Ладно, я молча просто покажу как надо было:

    СГ>
    СГ>PROCEDURE (this: QBitArray) Fill(v: BOOLEAN; size: INTEGER): BOOLEAN, NEW;
    СГ>BEGIN
    СГ>  IF size >= 0 THEN
    СГ>    IF ~resize(size) THEN RETURN FALSE END
    СГ>  ELSE
    СГ>    size = this.size()
    СГ>  END;
    СГ>  IF size > 0 THEN
    СГ>    IF v THEN
    СГ>      memset(data(), 0FFH, (size + 7) DIV 8)
    СГ>    ELSE
    СГ>      memset(data(),    0, (size + 7) DIV 8)
    СГ>    END
    СГ>  END;
    СГ>  IF v THEN pad0 END;
    СГ>  RETURN TRUE
    СГ>END Fill;
    СГ>



    Это, как говорится, гррр

    Как видим, реальный пример на Обероне ничем не лучше, а даже хуже аналогичного примера на С/С++ (из-за визуального шма и "крика"). Кстати, приведеный код не соответствует "стандартам" (на том же http://www.oberon.ethz.ch/ все строки заканчиваются точкой с запятой).

    Ну что ж, it's the final countdown
    PROCEDURE (this: QBitArray) Fill(v: BOOLEAN; size: INTEGER): BOOLEAN, NEW;      bool QBitArray::fill( bool v, int size )
    BEGIN                                                                           {
      IF size >= 0 THEN                                                               if ( size >= 0 ) {                                  
        IF ~resize(size) THEN RETURN FALSE END                                          if ( !resize( size ) )
        ELSE                                                                              return FALSE;
            size = this.size();                                                       } else {
        END;                                                                            size = this->size();
        IF size > 0 THEN                                                              }
          IF v THEN                                                                   if ( size > 0 )
            memset(data(), 0FFH, (size + 7) DIV 8);                                     memset( data(), v ? 0xff : 0, (size + 7) / 8 );
          ELSE                                                                        if ( v )
            memset(data(),    0, (size + 7) DIV 8);                                     pad0();
          END;                                                                        return TRUE;
        END;                                                                        }
        IF v THEN pad0 END;
      RETURN TRUE;
    END Fill;


    Итак, что имеем? Имеем "краткость — сестру таланта" Замечаем, что в некоторых местах даже по лексемам Оберон уступает С++ (я про самую первую строчку ). Да и конструкция IF THEN RETURN END; ELSE END; не является верхом совершенства ну никак. Кстати, вопрос — почему Паскалеподобные языки до сих пор так упорно цепляются за жесткое разделение FUNCTION/PROCEDURE, если разницы в них — практически ноль?

    И еще вопрос, на засыпку — вопрос о непоследовательности языка. Почему делить — "DIV", а сложить — "+", а не "ADD"? Почему тогда ">", "<", "=" не "GTHAN", "LTHAN", "EQ"?

    В общем, Оберон проиграл — это я невооруженным взглядом говорю И не в лексемах дело, а в ясности и отсутствии лишнего визуального шума.

    Кстати, о визуальном шуме. Если бы научном сообществе некогда остались в силе "оберонцы", то до сих пор мы бы всю математику/физику учили бы в стиле:

    SQRT 2 POW 2 EQ 2

    ... << RSDN@Home 1.1.4 beta 7 rev. 447>> ... <<Winamp is playing "Silence">> ...


    dmitriid.comGitHubLinkedIn
    Re[12]: Синтаксический оверхед
    От: Аноним  
    Дата: 11.06.05 12:18
    Оценка: +1
    Здравствуйте, Кодт, Вы писали:

    К>>В С++ потребность в пробельных разделителях меньше: гораздо чаще синтаксис явно требует разделительные лексемы.

    К>>
    К>    if(c)t;else{e}
    К>  //           ^-^--- нейтральные лексемы (ещё и на ; сэкономили)
    К>>

    Не сэкономили. Если не ошибаюсь, должно быть if(c)t;else{e;}
    Re: Синтаксический оверхед
    От: Airat Burganov Россия http://www.burganov.com
    Дата: 11.06.05 19:35
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.

    СГ> [skipped]

    По-моему, пора уже сказать для чего была затеяна дискуссия. Провокация удалась на славу. Кто не верит, что это провокация, читайте ответы автора — он же не внимает абсолютно никаким доводам — один против всех . Это однозначно удавшаяся шутка.
    Re[4]: Синтаксический оверхед
    От: Privalov  
    Дата: 12.06.05 05:02
    Оценка: :)
    Здравствуйте, Mamut, Вы писали:

    M>А вот отсюда, если можно, поподробнее Не раскрыта тема социогенетической взаимоинтеграции индивидуумов


    А к этому надо применить структурную теорию параметрической оптимизации нестационарных состояний, и сразу все станет ясно...
    Re: Синтаксический оверхед
    От: Аноним  
    Дата: 13.06.05 22:07
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    ....

    Вот теперь я знаю, что есть такой замечательный язык — Оберон!!!
    Оказывается, я стоьлко лет зря потратил на изучение этого отстойного С++ ! Какой же ужасный код я до этого писал! Все, буду учить Оберон! Плевать на плюсы! Куплю новую клавиатуру, чтобы на ней всегда были читенькие клавиши с великими русскими буквами Х и Ъ ! Правда, с тех пор, как мне показали что такое Visual Assist, у меня чистенькая только Ъ, а Х... х... херня все это.... бред потомственного паскалиста
    Re[4]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 14.06.05 08:31
    Оценка: :)
    Здравствуйте, Слава Шевцов, Вы писали:

    СШ>Здравствуйте, Сергей Губанов, Вы писали:


    СШ>do x() while(b);

    Да как вы могли!!! Так расточительно использовать... эээ синтаксические конструкции... их же видать ограниченное число... вот как надо:
    while(x(), b);
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[5]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 14.06.05 09:59
    Оценка: :)
    Здравствуйте, Mr. None, Вы писали:

    СШ>>do x() while(b);

    MN>Да как вы могли!!! Так расточительно использовать... эээ синтаксические конструкции... их же видать ограниченное число... вот как надо:
    MN>
    while(x(), b);


    Надо вот так:
    dowhile x b

    Отдельные джигиты могут выразить функцию dowhile через комбинаторы SKI.
    Перекуём баги на фичи!
    Re[2]: Синтаксический оверхед
    От: ansi  
    Дата: 14.06.05 12:12
    Оценка: :)
    Здравствуйте, xBlackCat, Вы писали:

    BC>Люди, а куда делся сам, так сказать, "виновник торжества"? А то как-то флейм начинает затихать. Скучно становится...

    Во-во! А тут еще и Мораторий
    Автор: Amethyst
    Дата: 03.06.05
    ... Только-только мясо началось и на тебе!
    new RSDN@Home(1.1.4, 303) << new Message(); std::head::ear << "2 Unlimited — Hypnotised";
    Re[3]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 14.06.05 15:15
    Оценка: :)
    BC>>Люди, а куда делся сам, так сказать, "виновник торжества"? А то как-то флейм начинает затихать. Скучно становится...
    A>Во-во! А тут еще и Мораторий
    Автор: Amethyst
    Дата: 03.06.05
    ... Только-только мясо началось и на тебе!


    Начать, что ли флэшмобы на темы "Оберон — вечная тема", "Свободу Колобку" и "Россия и Украина — друзья до гроба"? Боюсь, модераторы не поймут


    dmitriid.comGitHubLinkedIn
    Re[2]: Синтаксический оверхед
    От: Аноним  
    Дата: 14.06.05 20:12
    Оценка: :)
    Здравствуйте, xBlackCat, Вы писали:

    BC>Люди, а куда делся сам, так сказать, "виновник торжества"? А то как-то флейм начинает затихать. Скучно становится...



    Если тут http://www.rsdn.ru/forum/?mid=1219402
    Автор: FDSC
    Дата: 13.06.05

    не объявится, то новых откровений надо будет подождать несколько месяцев.
    Re[9]: Ошибка
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 15.06.05 08:31
    Оценка: +1
    Здравствуйте, Mr. None, Вы писали:

    MN>...

    MN>Потому что как правило мотивируется оно именно сложностью просмотра этого выражения в отладке и лично я с этим утверждением абсолютно согласен...

    Да что я вам это рассказываю, сами небось знаете .
    Когла пишешь один программу обработки данных для своей научной диссертации, то запросто можно что на обероне, что на плюсах, писать вот так: if(b()) x();

    Но когда вас 20 человек в команде и ловить баги приходится не только свои, но и чужие, то если все начнут так писать, то это ж повеситься можно будет...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[9]: Ошибка
    От: jazzer Россия Skype: enerjazzer
    Дата: 15.06.05 09:00
    Оценка: +1
    Здравствуйте, Mr. None, Вы писали:

    MN>Здравствуйте, Кодт, Вы писали:


    К>>Это дурное наследие языков, где было one shot one body (одна инструкция на строку) — кобол, фортран, васик (хотя его можно не зачитывать — он интерпретируемый). Меж-языковые форматы объектных файлов и универсальные отладчики только закрепили эту практику.


    К>>В принципе, никто не мешает сделать сишный или обероновый компилятор, расставляющий метки внутри строки и даже внутри выражения. Только совместим он будет с родной средой разработки/отладки. Или, скажем, будет рожать помимо .obj со стандартной debug info ещё и какое-нибудь хитрое .pdb ;)


    MN>Ну вот как только такие компиляторы для плюсов появятся, вот тогда из промышленных кодинг-стандартов многих компаний пропадёт требования такой записи:

    MN>
    MN>if(b())
    MN>{
    MN>    x();
    MN>}
    MN>

    MN>Потому что как правило мотивируется оно именно сложностью просмотра этого выражения в отладке и лично я с этим утверждением абсолютно согласен...

    Еще диффы при внесении изменений при использовании версионного контроля типа CVS.
    Чтобы добавить под иф еще одну инструкцию, ты просто добавишь строчку и изменение будет состоять в добавлении этой строчки, а вот если ты будешь менять if(b()) x();, то у тебя изменится иф целиком.
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re: Синтаксический оверхед
    От: Pavel Dvorkin Россия  
    Дата: 15.06.05 09:41
    Оценка: +1
    Начал я читать этот тред, довольно быстро надоело. Меня не взгляды Сергея Губанова удивляют, тут ИМХО обсуждать не стоит. Меня другое удивляет — как только какая-нибудь ерунда появится, так все сразу дружно бросаются ее опровергать, не жалея ни сил не времени. Стоит ли ? Так ведь если кто-то заявит, что 2*2=5, глядишь, целая дискуссия начнется на эту тему
    With best regards
    Pavel Dvorkin
    Re[6]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 15.06.05 14:14
    Оценка: -1
    Здравствуйте, Кодт, Вы писали:

    MN>>
    while(x(), b);

    К>
    dowhile x b


    Нет.
    http://www.rsdn.ru/Forum/Message.aspx?mid=1223914&amp;only=1
    Автор: Сергей Губанов
    Дата: 15.06.05
    Re[14]: Ошибка 3
    От: Аноним  
    Дата: 15.06.05 14:45
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>В общем, Оберон победил — это я невооруженным взглядом говорю И не в лексемах дело, а в ясности и отсутствии лишнего визуального шума.


    Дык ещё бы — слепым от фанатства оберонщикам мрак самого оберона не по чём — они только и успевают бешеную слюну с лица смахивать
    Re[14]: Ошибка 3
    От: Аноним  
    Дата: 15.06.05 14:46
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>В общем, Оберон победил — это я невооруженным взглядом говорю И не в лексемах дело, а в ясности и отсутствии лишнего визуального шума.


    А глазик случайно не с бельмецом ?
    Re[14]: Ошибка 3
    От: Аноним  
    Дата: 15.06.05 14:48
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>В общем, Оберон победил — это я невооруженным взглядом говорю И не в лексемах дело, а в ясности и отсутствии лишнего визуального шума.


    Да упокойся его душа, раба божьего по имени Оберон. Пусть беды на винте будут ему пухом. Аминь.
    Re[14]: Ошибка 3
    От: Аноним  
    Дата: 15.06.05 14:53
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:


    СГ>Это Вам, вообще-то, надо обращаться в начальную школу — там где деление проходят. Открою Вам секрет. Оказывается если сложить два целых числа, то результат тоже будет целым числом (поэтому и "+"). В то же самое время, если разделить два целых числа, то результат будет уже вовсе не целым, а рациональным числом (поэтому DIV).


    Сергей — такой туз в рукаве Вы прятали на протяжении всей дискуссии ? Вот это да... Я сражён, наповал. Лежу копытами кверху и не могу отойти. Вот это синтаксическая мощь Оберона, вот это полёт фантазии Вирта.
    Re[16]: Ошибка 3
    От: Аноним  
    Дата: 15.06.05 18:51
    Оценка: :)
    Здравствуйте, Кодт, Вы писали:

    К>Про APL я молчу — он не прошёл фильтр Эйнштейна.


    А что это за фильтр такой загадочный, что про него гугль и яндекс не в курсе ?
    Re: Синтаксический оверхед
    От: e-Xecutor Россия  
    Дата: 16.06.05 04:50
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    Я понял какой язык должен понравится Сергею!
    Brainfuck!
    1) Он и так постоянно это делает!
    2) Ничего лишнего!
    Re[14]: Ошибка 3
    От: Socrat Россия  
    Дата: 16.06.05 07:22
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>>Как видим, реальный пример на Обероне ничем не лучше, а даже хуже аналогичного примера на С/С++


    СГ>Как видим, реальный пример на Обероне значительно лучше аналогичного примера на С/С++.


    Хуже.

    M>> Кстати, вопрос — почему Паскалеподобные языки до сих пор так упорно цепляются за жесткое разделение FUNCTION/PROCEDURE, если разницы в них — практически ноль?


    СГ>Учите матчасть. Слово FUNCTION было только в Паскале 1970 года. В Оберонах его нет.


    Слово PROCEDURE — тоже отстой.

    M>>И еще вопрос, на засыпку — вопрос о непоследовательности языка. Почему делить — "DIV", а сложить — "+", а не "ADD"?


    СГ>Это Вам, вообще-то, надо обращаться в начальную школу — там где деление проходят. Открою Вам секрет. Оказывается если сложить два целых числа, то результат тоже будет целым числом (поэтому и "+"). В то же самое время, если разделить два целых числа, то результат будет уже вовсе не целым, а рациональным числом


    Согласен.

    СГ>(поэтому DIV).


    И что?

    M>>В общем, Оберон проиграл — это я невооруженным взглядом говорю И не в лексемах дело, а в ясности и отсутствии лишнего визуального шума.


    СГ>В общем, Оберон победил — это я невооруженным взглядом говорю И не в лексемах дело, а в ясности и отсутствии лишнего визуального шума.


    Оберон проиграл — это я говорю, своим невооруженным взглядом.
    Re[3]: Синтаксический оверхед
    От: Pavel Dvorkin Россия  
    Дата: 16.06.05 07:58
    Оценка: :)
    Здравствуйте, Cyberax, Вы писали:

    >>Так ведь если кто-то заявит, что 2*2=5, глядишь, целая дискуссия

    >> начнется на эту тему

    C>А что, при желании можно придумать алгебраическую структуру, где это

    C>будет именно так

    ИМХО лучше не здесь
    With best regards
    Pavel Dvorkin
    Re[5]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 16.06.05 08:44
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Аноним, Вы писали:


    А>> Бред... отлаживать такое крайне неудобно. Есть золотое правило: одна строчка — один оператор.


    СГ>Не отлаживать программы надо, а математически строго доказывать их корректность.


    Вам — в Пролог.
    Re[6]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 16.06.05 08:50
    Оценка: +1
    Здравствуйте, moudrick, Вы писали:

    СГ>>Не отлаживать программы надо, а математически строго доказывать их корректность.


    M>Вам — в Пролог.


    Думаешь, на прологе нельзя облажаться?
    coolPredicate(LongMnemonicIdentifier) :-
      deduceXfromId(LongMnemonicIdentifier, X),
      deduceYfromX(X, Y),
      checkYwithId(LongMnemonicIdentificator, Y). /* очепяточка */
    Перекуём баги на фичи!
    Re[6]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 16.06.05 08:53
    Оценка: +1
    Здравствуйте, Слава Шевцов, Вы писали:

    СШ>Здравствуйте, Сергей Губанов, Вы писали:


    А>>> Бред... отлаживать такое крайне неудобно. Есть золотое правило: одна строчка — один оператор.


    СГ>>Не отлаживать программы надо, а математически строго доказывать их корректность.


    СШ>И сколько будет стоить это безобразие?


    Это безобразие будет бесценно... Потому как это безобразие красиво только в теории на примере простейших функций... И заниматься строгим математическим доказательством правильности программы никто не будет, потому что это физически невозможно...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[5]: Синтаксический оверхед
    От: Privalov  
    Дата: 16.06.05 09:45
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Не отлаживать программы надо, а математически строго доказывать их корректность.


    Вы как-нибудь на досуге попробуйте верифицировать какой-нибудь не слишком тривиальный цикл.
    Re[4]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 16.06.05 10:49
    Оценка: :)
    Здравствуйте, moudrick, Вы писали:

    СГ>>Заменяем служебные слова на символ "*":

    WHILE a DO x END = * a * x *
    while(a) x();    = * * a * x * * *


    M>1. Почему Вы считаете, что Ваша методика расчета правильная?


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

    M>2. Настоятельно рекомендуб считать также и пробелы.


    У пробельных символов есть свой натурально присущий им смысл. Считать их — означает наделять их каким-то еще большим смыслом чем у них и так есть.

    M>3. Почему Вас так беспокоит этот Гондурас?


    Меня-то? Н-у-у, так взгрустнулось на досуге, а сотне местных ковбоев делать нефига было, подхватили идею, начали обсасывать со всех сторон...
    Re[5]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 16.06.05 10:51
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    M>>1. Почему Вы считаете, что Ваша методика расчета правильная?


    СГ>Методика заключается в том, чтобы посчитать чего-нибудь . А после того как служебные слова заменены на звездочки считать можно только звездочки — просто кроме звездочек считать больше нечего.


    А вы овец считать не пробовали? Говорят тоже хорошо торкает — даже засыпаешь...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[3]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 16.06.05 10:57
    Оценка: +1
    Сергей Губанов wrote:

    > Заменяем служебные слова на символ "*":

    >
    >WHILE a DO x END = * a * x *
    >while(a) x(); = * * a * x * * *
    >
    > Оверхед = 6/3 = 2.00
    > На 100% больше чем необходимо.

    Кодт уже писал, что пробелы — тоже лексемы в Обероне. А значит:
    
    WHILE a DO x END = * * a * * * x * *

    В С получилось меньше.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[7]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 16.06.05 12:00
    Оценка: -1
    Здравствуйте, Кодт, Вы писали:

    К> Почему сразу алгебру?


    Потому что +.

    К>И почему нельзя? Я привёл два примера, в которых 2+2=2*2=5.


    Вы привели два примера, в которых f(2,2) = 5 и F(2,2) = 5.
    Re[6]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 16.06.05 12:46
    Оценка: :)
    [skip в полном обалдении]

    Когда вырасту, хочу быть похожим на Кодта

    *Заискивающе*
    Дядя Кодт, усыновите меня а? Я с вас пыль буду сдувать, ботинки чистить и фимиамы курить. Благо алтарь Кодта Всеведающего у меня дома уже стоит


    dmitriid.comGitHubLinkedIn
    Re[8]: Синтаксический оверхед
    От: raskin Россия  
    Дата: 16.06.05 12:51
    Оценка: :)
    Pavel Dvorkin wrote:

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

    >
    > К>Почему сразу алгебру? Начнём с некоммутативных групп и далее в сторону
    > усложнения...
    > К>И почему нельзя? Я привёл два примера, в которых 2+2=2*2=5.
    >
    > Господи, и зачем я про 2*2=5 сказал вообще! Так я и знал, что дискуссия
    > развернется!
    >
    > Ну раз уж так, а мы все же в "Коллеги, улыбнитесь", предлагаю еще
    > обсудить следующие темы
    >
    > a!=a
    > true==false.

    Да здравствуют operator overload, странные перекрывающие локальные
    переменные и подход "a!=a значит a= (!a)" !
    а в BASIC a!=a — легальное присваивание/сравнение (по контексту), во в
    тором случае может быть истинным. И вообще, отделите в Этюды кусок
    задачу "написать очевидно невозможную вещь, которая будет невозможна"...
    Posted via RSDN NNTP Server 1.9
    Re[10]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 16.06.05 14:36
    Оценка: :)
    Здравствуйте, xBlackCat, Вы писали:

    BC>Если бог может всё, то может ли бог создать камень, который не сможет поднять?


    Может, но не хочет
    Перекуём баги на фичи!
    Re[10]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 16.06.05 14:47
    Оценка: +1
    Здравствуйте, xBlackCat, Вы писали:

    BC>Если бог может всё, то может ли бог создать камень, который не сможет поднять?


    Это либо:
    1) Рациональное доказательство того что всемогущих богов не существует.
    2) Всемогущие боги иррациональны (к ним не применимы рациональные рассуждения).
    Re[18]: Ошибка 3
    От: Centaur Россия  
    Дата: 16.06.05 17:09
    Оценка: +1
    Здравствуйте, Кодт, Вы писали:

    К>>>Про APL я молчу — он не прошёл фильтр Эйнштейна.

    А>>А что это за фильтр такой загадочный, что про него гугль и яндекс не в курсе ?

    К>"всё должно быть как можно проще, но не проще"


    Есть предложение придать этому фильтру звание бритвы, по аналогии с бритвами Оккама и Хэнлона
    Re[4]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 17.06.05 12:26
    Оценка: :)
    Здравствуйте, boomsic, Вы писали:

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



    M>>define-ы не рулЯт.

    B>почему?
    А вообще да... В обчных Сях (без плюсов) без define-ов никуда.

    B>зато "Синтаксический оверхед" уменьшется в разы

    (я прикинусь Сергеем Губановым на мнговение, только не убивайте сразу, ладно?)

    #define — это директива препроцессора, если Вы помните.
    То есть прежде чем отдавать текст на компиляцию, препроцессор заменяет в тексте все define-ы на их фактические значения.
    Так что оверхед никуда не девается, он просто умело маскируется под свое отсутствие.
    Re[4]: Синтаксический оверхед
    От: xBlackCat Россия  
    Дата: 20.06.05 13:16
    Оценка: +1
    Здравствуйте, CrystaX, Вы писали:

    CX>Вообще-то я в этой ветке не учавствую — один разок ответил (одним из первых). Не думал, что такой флейм разгорится. Но вот не удержался. У меня есть один вопрос. Пожалуйста, Сергей, скажите мне, кто определил правильность синтаксиса Modula 2? Приведите, пожалуйста, критерии, по которым оценивается правильность.


    Извини, он какой ты ответ от него ждёшь, если флейм начался с

    1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.
    2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо (чтобы читающему понятно стало где что написано).


    До сих пор не понятно:
    1. Кому известно, что у С больше лексем, чем необходимо?
    2. Кому известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо.

    Может, Сергей следуя из индукции сделал такой вывод. Но что-то мне кажется, что база у индукции хромает
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Rojac &mdash; Rsdn Offline JAva Client
    Анонсы и обсуждение здесь
    Автор: xBlackCat
    Дата: 08.02.10
    Re[6]: Синтаксический оверхед
    От: Privalov  
    Дата: 21.06.05 05:03
    Оценка: :)
    Здравствуйте, Mamut, Вы писали:

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


    А почему "оберонцы" во множественном числе? Кстати, портретов Вирта и Страуструпа для полноты картины не хватает.

    M>Лучшие умы планеты бьются над подсчетами методами Губанова
    Автор: Сергей Губанов
    Дата: 09.06.05
    и Димандта
    Автор: Mamut
    Дата: 15.06.05
    (ака метод Мамута ).


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

    M>Нобелевки летят направо, головы — налево. Армия отказывающихся разбивать яйца с краев
    Автор: bopka
    Дата: 15.06.05
    штурмуют штаб-квартиру ООН, которую (по непроверенным сведениям) захватили злобные буратины
    Автор: prVovik
    Дата: 18.06.05


    А что? Может и разрешат нобелевки по математике (в порядке исключения). Сделают вид, что это по физике.


    M>Мировая экономика приходит в упадок. Ошибка в программе на С, управляющая шаттлами, кидает один из них на невинную атомную станцию во Франции. В программе, управляющей атомной станцией и написанной на Обероне, впревые кидается исключение (ну не могли создатели представить, что на их детище упадет шаттл), но, за неимением возможности обработать это исключение, программа падает. Вместе с ней падает и станция.


    Сдается мне, что это неправильная атомная станция. А Оберон, как всегда, рулит, особенно сборщик мусора. Ядерного.

    M>Ядерный Армагеддон. Все умерли


    Оберон остался.

    M>
    Re[5]: Синтаксический оверхед
    От: Слава Шевцов Россия http://www.rentaguru.ru/
    Дата: 21.06.05 05:21
    Оценка: :)
    Здравствуйте, bkat, Вы писали:

    B>В общем продолжение следует...


    В следующей серии фильма ужасов "Обероны: ответный удар"...
    ----------------------------------------------------------------------------------------------
    Rentaguru
    Re[9]: Синтаксический оверхед
    От: Трурль  
    Дата: 21.06.05 05:22
    Оценка: +1
    Здравствуйте, Amidlokos, Вы писали:

    A>А если мы ищем максимум с целью затем поветвиться?


    Почему-то прочитал это как

    А если мы ищем максимум с целью затем повеситься?

    Re[7]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 06:12
    Оценка: +1
    Здравствуйте, Privalov, Вы писали:

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


    P>А что? Может и разрешат нобелевки по математике (в порядке исключения). Сделают вид, что это по физике.


    Математикам дают премию Филдса — так что о них нобелевская своя, ни на что не похожая. Математики и тут отличились.
    Re[2]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 10:16
    Оценка: :)
    Здравствуйте, AVC, Вы писали:

    AVC>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.

    СГ>>2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо (чтобы читающему понятно стало где что написано).

    AVC>Сергей, Вы затронули интересную тему.

    AVC>В отличие от модераторов RSDN, я не считаю ее смешной.

    Отличнно! Уже собирается анти-C-шная коалиция. А вы говорите, силы неравны.
    Щя вам снова вспомнят и объем стандарта C++, и еще много чего.

    :-D
    Re[8]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 21.06.05 11:14
    Оценка: +1
    CX>...но вот ведь беда — пользователь мыслит не лексемами, а логическими блоками (узлами AST, если угодно). Так вот, что в первом, что во втором примере таких блоков одинаковое количество.

    Более того, соотношение "пользовательского" кода к количеству служебных букв примерно одинаковое &mdash; 1/3
    Автор: Mamut
    Дата: 15.06.05


    dmitriid.comGitHubLinkedIn
    Re[3]: Ошибка
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 13:28
    Оценка: :)
    Здравствуйте, moudrick, Вы писали:

    M>1. Поддержка максимального количества парадигм программирования (в том числе и структурного)


    1) Как Вам только что показали структурную парадигму не поддерживает.
    2) Модульную парадигму не поддерживает (в языке нет модулей)
    3) Компонентно ориентированное программирование не поддерживает (в языке нет модулей и нет сборки мусора)
    Re[3]: Мартышка и очки
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 13:31
    Оценка: -1
    Здравствуйте, Mamut, Вы писали:

    M>Например, здесь показано
    Автор: Mamut
    Дата: 29.10.04
    , что вставка объектов в текст


    Там показана наглядная демонстрация басни про мартышку и очки — в StdLog написали текст программы.
    Re[5]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 13:59
    Оценка: -1
    Здравствуйте, boomsic, Вы писали:

    B>так что получается в обероне точно так же програмист не может быть "уверен, что перед следующим оператором после выхода из цикла выполняется условие ~p (NOT p)."


    Может. Таково одно из положений структурного программирования.
    WHILE p DO 
      ... 
    END; 
    ASSERT(~p)

    Этот ассерт ни когда не остановит выполнение программы, условие ~p всегда истинно.

    while (p)
    { 
      ... 
    }
    assert(!p)

    А вот этот ассерт иногда может остановить работу программы. Например, если внутри цикла сделать break не присвоив p ложное значение.
    Re[13]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 21.06.05 14:13
    Оценка: +1
    Сергей Губанов wrote:

    > C>К пробелам, пожалуйста, такое же отношение проявляйте...

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

    В С можно вообще не писать пробелов, а в Обероне — они обязательны. Так
    что считайте и их.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[12]: Синтаксический оверхед
    От: Socrat Россия  
    Дата: 21.06.05 14:31
    Оценка: :)
    Здравствуйте, CrystaX, Вы писали:

    CX>Здравствуйте, Сергей Губанов, Вы писали:


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


    CX>>>Безотносительно не бывает.


    СГ>>Бывает.


    CX>Ну и я так тоже могу. Вот: "Не бывает.".

    CX>Вы аргументы приведите, а не постулируйте.

    Закон сохранения энергии.
    Re[6]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 21.06.05 14:33
    Оценка: +1
    Сергей Губанов wrote:

    > C>Что????? _Совсем_ нет??

    > C>В морг тогда такой язык, без _всяких_ дальнейших вопросов.
    > Циклы бывают всего трех типов, понимаете? В чем проблема-то?

    Плевать мне на теорию про три цикла. На _ПРАКТИКЕ_ (подчеркиваю
    специально) нужен break для нормального кода.

    А необходимости в зависимости от инвариантов цикла у меня не возникало
    ни разу.

    Да... теперь понятно почему Обероны давно сдохли. Абсолютно непрактичная
    вещь.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[5]: А эхо в ответ: мать...мать...мать...
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 14:40
    Оценка: -1
    Даже неудобно как-то критиковать правильный на 99,9% пост...

    M>Единственным человеком, что решил отречься от фанатизма, был AVC. В одной из веток он верно отметил, что Оберон предназначен для работы в системе, построенной на нем же. И так же отметил, что BlackBox — это и есть эмлятор такой вот системы. Единственные доступные для изучения системы такого рода, что можно пощупать, — это BlueBottle и BlackBox.


    Что, и сборку мустора будем на Оберонах писать? Успехов... покажите только потом исходники, посмеемся вместе.
    Re[6]: Синтаксический оверхед
    От: Socrat Россия  
    Дата: 21.06.05 14:42
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

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


    B>>так что получается в обероне точно так же програмист не может быть "уверен, что перед следующим оператором после выхода из цикла выполняется условие ~p (NOT p)."


    СГ>Может. Таково одно из положений структурного программирования.

    СГ>
    СГ>WHILE p DO 
    СГ>  ... 
    СГ>END; 
    СГ>ASSERT(~p) 
    СГ>

    СГ>Этот ассерт ни когда не остановит выполнение программы, условие ~p всегда истинно.

    СГ>
    СГ>while (p)
    СГ>{ 
    СГ>  ... 
    СГ>}
    СГ>assert(!p) 
    СГ>

    СГ>А вот этот ассерт иногда может остановить работу программы. Например, если внутри цикла сделать break не присвоив p ложное значение.


    А при чем тут деструктор? И что тебе вообще не нравится? То, что можно прервать цикл в любое время? Так это даже иногда полезно.
    Re[14]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 14:47
    Оценка: :)
    Здравствуйте, CrystaX, Вы писали:

    CX>Каким критериям он должен соответствовать


    Повторять по сто раз одно и тоже?

    Тут про "звездочки": http://www.rsdn.ru/Forum/Message.aspx?mid=1216614&amp;only=1
    Автор: Сергей Губанов
    Дата: 10.06.05


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


    Потому что меньше одной "звездочки" нельзя, а больше одной — уже не надо.
    Re[5]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 21.06.05 14:51
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:
    ...
    СГ>Примеры типичных ошибок как так может быть:

    СГ>Было:

    СГ>
    СГ>n = ...
    СГ>while(n > 0)
    СГ>{
    СГ>  ...
    СГ>  n--;
    СГ>}
    СГ>use(n);
    СГ>

    СГ>После глупого с моей стороны так сказать усовершенствования стало:
    СГ>
    СГ>n = ...
    СГ>while(n --> 0)
    СГ>{
    СГ>  ...
    СГ>}
    СГ>use(n); // теперь n на 1 меньше чем надо (а иногда нет)
    СГ>

    СГ>Мне стыдно за такую глупость, поддался "моде" на --> 0 оператор...

    Моде? Может просто не потрудился прочитать документацию и выяснить разницу между постфиксным и префиксными -- и ++? Просто, на мой взгляд, если не удосужился подумать, то никакая верификация тут не поможет
    Re[8]: Синтаксический оверхед
    От: Privalov  
    Дата: 21.06.05 15:09
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Циклы бывают всего трех типов:


    На самом деле все три типа можно свести к одному — WHILE. Обоснование есть, IMHO, и у Вирта.

    [.....]

    СГ>В WHILE и в REPEAT нету никакого EXIT!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! EXIT есть только внутри LOOP ... END. Теперь понятно?


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

    P>>Простейший пример: найти в массиве первый отрицательный элемент.


    СГ>На, пожалуй начинать надо с элементарных примеров:

    СГ>i := 0;
    СГ>WHILE (i < LEN(a)) & (a[i] >= 0) DO INC(i) END

    Я не просил переписать этот код на Обероне. Вопрос был: в каком из примеров assert сработает, а в каком — нет. Сами примеры еще раз не привожу.
    Re[8]: Синтаксический оверхед
    От: Oleg A. Bachin Украина  
    Дата: 21.06.05 15:10
    Оценка: -1
    Здравствуйте, Privalov, Вы писали:

    P>Здравствуйте, Sergey J. A., Вы писали:


    SJA>>Та что там не тривиальный ! Вот тут автором треда был запощен простейший код на 20 строк:


    SJA>>код
    Автор: Сергей Губанов
    Дата: 11.11.04


    SJA>>(второй листинг)

    SJA>>В котором он как ни странно допустил ошибку. Математический аппарат дал сбой ?

    P>Меня за такие лестницы еще на первом курсе по рукам били. И очень правильно били.

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

    да что там запутанного! там же бред полный! лол! я как посмотрел — мне смешно стало...
    тут наверное в основном сишники сидят, потому и не поняли всю кривизну.
    в двух словах, в делфях нет автоконструкторов и автодеструкторов, потому объекты не освобождаются сами в конце блока, а их нужно освобождать ручками. в случае ИС мы можем пролетель точку освобождения, потому существует следующая конструкция:
    obj := TObj.Create;
    try
      // working
    finally
      obj.Free;
    end;

    т.е, заходя в блок try finally мы гарантированно в любом случае освободим объект.
    соответственно конструкция try try не имеет права на жизнь
    вот вам и математически доказанная глупая избыточность кода, и проявилась она не из-за Си, а из-за непонимания синтаксиса языка вообще.
    ... << RSDN@Home 1.1.4 beta 6a rev. 436>>
    Best regards,
    Oleg A. Bachin
    Re[16]: Синтаксический оверхед
    От: xBlackCat Россия  
    Дата: 21.06.05 15:15
    Оценка: :)
    Здравствуйте, CrystaX, Вы писали:

    CX>Здравствуйте, Сергей Губанов, Вы писали:


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


    СГ>>Потому что меньше одной "звездочки" нельзя, а больше одной — уже не надо.


    CX>Почему Вы решили, что минимальное количество лексем является признаком правильности синтаксиса? Это откровение свыше или этому есть какие-то реальные обоснования?


    Оберон есть ЕДИНСТВЕННЫЙ ЯЗЫК! И Сергей Губанов — пророк его!
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Rojac &mdash; Rsdn Offline JAva Client
    Анонсы и обсуждение здесь
    Автор: xBlackCat
    Дата: 08.02.10
    Re[7]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 15:24
    Оценка: :)
    Здравствуйте, Mamut, Вы писали:

    M>Яркий пример — читаем данные с сокета. Некая информация.

    M>
    M>while not end of stream
    M>  read socket    
    M>  calculate checksum
    M>  if checksum fails
    M>    raise hacker alert
    M>    exit
    M>  else
    M>    calculate number of bytes read
    M>    if number of bytes greater than MAX_DATA_ALLOWED
    M>      exit
    M>    end if 
    M>    process data
    M>  end if
    M>end while
    M>


    M> Что делать будем-то? Ставить флаги в глобальных переменных?


    Какие еще флаги? В каких еще глобальных переменных??????

    Циклов бывает всего три типа. Здесь налицо цикл с проверкой условия внутри итерации, т.е. цикл LOOP, так и пишем:

    Я немного оптимизировал: наиболее вероятная ветвь исполнения всегда должна идти после THEN, наименее вероятная ветвь в ELSE — такого требование современных конвеерных процессоров.
    Re[10]: Синтаксический оверхед
    От: achp  
    Дата: 21.06.05 16:22
    Оценка: :)
    Здравствуйте, Кодт, Вы писали:

    К>
    К>double max(double a, double b) { return a>b?a:b; }
    
    К>...
    К>if(max(x,y)==x) { ... } // неправильно
    К>if(is_equal(max(x,y),x,eps)) { ... } // правильно
    К>

    К>



    Кодт, так делать нельзя. Маленькие дети увидят эту твою порнографию, смайлик не поймут, и поверят, что нужно писать именно так.
    Re[6]: Ошибка
    От: Oleg Volkov  
    Дата: 21.06.05 17:22
    Оценка: :)
    Здравствуйте, achp, Вы писали:

    OV>>Вы хотите сказать, что на С/С++ невозможно обеспечить p == false после выхода из цикла while(p)?


    A>Формально говоря, это так.


    То есть, вот этот кусок кода не компилируется?

    int i = 10;
    while (i > 0 ) --i;
    Re[10]: Яркий пример
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 19:44
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Пацак, Вы писали:


    П>>Ну и где хваленое превышение в разы?


    СГ>33/24 = 1.375

    СГ>12/9 = 1.3333

    СГ>Тоже не хилый оверхедец.


    Методика посчета — весьма спорная. Это следует из оценок на Ваших сообщениях с методикой.

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


    Покажите мне:
    1. Промышленные программы на обероне.
    2. Промышленные стандарты программирования на обероне.
    Re[11]: Яркий пример
    От: Слава Шевцов Россия http://www.rentaguru.ru/
    Дата: 21.06.05 19:51
    Оценка: -1
    Здравствуйте, moudrick, Вы писали:

    M>Покажите мне:

    M>1. Промышленные программы на обероне.
    M>2. Промышленные стандарты программирования на обероне.

    Как только не попросил промышленные операционки на Обероне Windows Oberon Edition!
    ----------------------------------------------------------------------------------------------
    Rentaguru
    Re[8]: Синтаксический оверхед
    От: ansi  
    Дата: 22.06.05 01:25
    Оценка: +1
    Здравствуйте, Кодт, Вы писали:

    A>>>А как ты докажешь их корректность мне интересно? Насколько я знаю, доказать корректность нельзя даже для

    К>
    A>>>double max(double a, double b) {
    A>>>   return a > b ? a : b;
    A>>>}
    К>

    A>>А она и некорректна — double так не сравнивают.

    К>Некорректно такое заявление. double нельзя (можно, но бессмысленно) сравнивать на равенство (операторами ==, != ), а также на строгое неравенство ( >, < ) с целью "поветвиться".

    К>В данном же случае криминала нет.

    Ах, имелось в виду это... Не, я про другое: NaN'ы там всякие... Честно говоря, не знаю, что больше — 1, или QNaN (или исключение больше? ), но сравнение, это и ежу понятно, некорректно.
    Re[2]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 22.06.05 03:36
    Оценка: +1
    Здравствуйте, AVC, Вы писали:

    AVC>1. Собственно синтаксис.


    AVC>а) Соответствие структурным принципам.


    AVC>В отличие от синтаксиса Модулы/Оберона синтаксис Си/Си++ не соответствует принципам структурного программирования.


    Кстати... Программирование без goto и структурная парадигма — это разные понятия, хоть и связанные исторически. Эта связь чисто по названию: структурная парадигма (конец 70-ых — начало 80-ых) — глобальная концепция сформировавшаяся из процедурного подхода и теорема о структурировании (60-ые годы) — теорема доказывающая возможность исключения операторов безусловного перехода из алгоритмов. Данная теорема дала импульс к дальнейшим исследования в этой области и привела в конце концов к возникновению методологии структурной парадигмы, которая как ни парадоксально, в свою очередь взяла от этой теоремы только название и не включила сам принцип программирования без goto. Потому что эта парадигма имеет более широкий и общий смысл и не завязывается на таких деталях.
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[4]: Синтаксический оверхед
    От: qwertyuiop Российская Империя  
    Дата: 22.06.05 04:41
    Оценка: +1
    AVC>
    AVC>WHILE p DO ... END; Q;
    AVC>

    AVC>Она означает, что пока выполняется условие p, из цикла мы не выйдем. Следовательно, после выхода из цикла и перед выполнением Q обязательно выполняется условие ~p.

    AVC>А вот в программе на Си/Си++ в аналогичной ситуации

    AVC>while (p) { ... } Q();
    AVC>мы в этом не можем быть уверены

    Да задолбали вы уже этой уверенностью! Ну уверены вы, что p после цикла ложно, и какая великая польза от этого? Чем это облегчает жизнь программисту? Кроме дурацких ограничений и отсутствия гибкости не вижу никаких отличий. Чтобы можно было выйти из цикла досрочно, введен новый тип цикла: бесконечный. Но бесконечных циклов не бывает — иначе они бы никогда не закончились. Так не проще ли разрешить досрочный выход из любых циклов и не вводить в язык новый тип который не имеет никаких принципиальных отличий от остальных?
    Ведь, по большому счету, циклы могут быть только двух типов: с проверкой условия в начале его (наиболее частый) и с проверкой условия в конце (для экзотических случаев, когда нужно чтобы тело цикла выполнилось хотя бы один раз). Остальное — в т.ч. бесконечные циклы — лишь частные случаи этих двух.
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[5]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 06:54
    Оценка: +1
    Здравствуйте, qwertyuiop, Вы писали:

    Q>Да задолбали вы уже этой уверенностью!


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

    Кстати, здесь
    Автор: Mamut
    Дата: 21.06.05
    , за "задолбали", оказывается, могут наказать. Прошу Вас впредь быть поосторожнее.
    Re[3]: Керниган & Ритчи
    От: Privalov  
    Дата: 22.06.05 06:59
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>С этим согласны сами создатели:

    СГ>

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

    СГ>Б. Керниган, Д. Ритчи: "Язык программирования Си", СПб.: "Невский Диалект", 2001.-352 с.:ил.

    СГ>страница 15


    Вот именно, "как и любой другой язык программирования". Это первое. Авторы не закрывают глаза на недостатки своего создания, а работают над их преодолением. Это второе. И от них не слышно о языке, позволяющем создавать правильные "по определению" программы. Это третье.
    Re[6]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 22.06.05 07:17
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    SJA>>То есть Вы допускаете, то не все циклы


    СГ>Почему же не все. Абсолютно все циклы WHILE и абсолютно все циклы REPEAT.


    Да, кстати. Вы знаете, что циклов вего 3 типа ? Так вот, иначе говоря, только WHILE и REPEAT, но не LOOP.
    Т.е. оберон на 66% структурен.
    Я — свихнувшееся сознание Джо.
    Re[7]: Синтаксический оверхед
    От: xBlackCat Россия  
    Дата: 22.06.05 07:49
    Оценка: -1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>3) Ошибка в том, что уменьшение n производится в любом случае, даже тогда, когда n и так уже равно нулю.


    Это Ваша ошибка. Если Вы читали документацию или описание постфикной операции, до должны били знать, что эта операция уменьшает значение переменной и возвращает значение ДО измения. Другими словами — эквивалентно:
    n = n - 1;
    return n + 1;

    То, что значение n должно уменьшится только при n > 0 — это лично Ваши домыслы, ничем не подкреплённые.

    PS: извините, что обращаюсь на Вы — попробую исправиться.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Rojac &mdash; Rsdn Offline JAva Client
    Анонсы и обсуждение здесь
    Автор: xBlackCat
    Дата: 08.02.10
    Re[5]: А эхо в ответ: мать...мать...мать...
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 07:50
    Оценка: :)
    Здравствуйте, Mamut, Вы писали:

    M>Тьфу блин. Я сейчас материться начну. Реально.


    Не, не стоит. Тут за это
    Автор: Mamut
    Дата: 21.06.05
    сами знаете что бывает...

    M>Сергей. Вы, как самый ярый сторонник Оберона, можете внятно и с фактами на руках показать преимущество Оберона?


    Конечно могу. Но только это не тема данной ветки форума. Тема этой ветки форума: 235% и 700%. Ваша ошибка в том, что Вы делаете далеко идущие выводы из этих чисел. В этой ветке я ни чего доказывать не собираюсь. Просто демонстрирую числа 235% и 700%. Признаться, мне трудно сдерживать себя от того чтобы полезть чего-то доказывать. Здесь речь исключительно только о синтаксисе.
    Re[10]: Синтаксический оверхед
    От: Socrat Россия  
    Дата: 22.06.05 08:05
    Оценка: :)
    Здравствуйте, moudrick, Вы писали:

    M>Ничто тебе не мешает написать класс с перегруженными нужным образом операторами сравнения и приведения к double. Разве только отсутствие времени... Может и написан уже где-то. Поиск в осети рулит.


    Что, осетины уже написали?
    Re[7]: Open source
    От: moudrick Россия http://community.moudrick.net/
    Дата: 22.06.05 08:08
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>>Что, и сборку мустора будем на Оберонах писать? Успехов... покажите только потом исходники, посмеемся вместе.


    СГ>Известно, что BlackBox Component Builder 1.5 от Oberon Microsystems распространяется с открытыми исходными текстами на языке Component Pascal (наследник Оберона 2). В том числе модуль Kernel тоже написан на нем. Поскольку проект является open source, то я не понимаю, что до сих пор удерживало Вас от того чтобы посмотреть исходники самостоятельно? Что значит покажите? Берите и смотрите сами, они доступны любому без ограничений!

    Я уже просмотрел все проекты Open Source в интернете. По состоянию на 12 мая 2005 года. И провел их подробный анализ. К сожалению, каким-то непостижимым образом пропустил BlackBox Component Builder 1.5 от Oberon Microsystems. Сегодня вечером исправлю эту ошибку. Простите меня пожалуйста.

    СГ>Ваше отношение тем более не понятно в свете того, что известно, что подсистема управления динамической памятью (выделение памяти + освобождение ее сборщиком мусора) в BlackBox работает в несколько раз быстрее чем в .NET.


    Не известно.
    Re[12]: Яркий пример
    От: Privalov  
    Дата: 22.06.05 08:48
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>> недокостыле


    СГ>Вы спорите против прописных истин.

    СГ>Циклы с проверкой условия выполнения и циклы с проверкой условия завершения для того и придуманы, чтобы гарантировать выполнение пост условий. Вообще же достаточно было бы иметь лишь один тип цикла LOOP ... END и больше ни чего не надо, ни WHILE ни REPEAT. Но, опять же таки, вспоминаем: Сделать так просто как только можно, но не проще!

    А что здесь есть прописная истина?
    Еще раз, универсальным типом цикла является WHILE (цикл с предусловием). Почитайте Вирта.
    Re[12]: Яркий пример
    От: jazzer Россия Skype: enerjazzer
    Дата: 22.06.05 08:51
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>> недокостыле


    СГ>Вы спорите против прописных истин.

    СГ>Циклы с проверкой условия выполнения и циклы с проверкой условия завершения для того и придуманы, чтобы гарантировать выполнение пост условий.

    А-а-а, так вот они зачем придуманы! А я-то....
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[20]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 22.06.05 10:48
    Оценка: :)
    Здравствуйте, Mamut, Вы писали:

    M>Фи "Надо делать настолько просто, насколько возможно, но не проще" Самое простое это Оберон. А то, что понаписано здесь — фи, гадость какая-то


    Неправда. Самое оптимальное — "пацакон". Остается только удивляться почем некоторые ковбои еще до сих пор не могут расстаться с такими оверхедными языками как C++ и Оберон, которые... bla-bla-bla...
    Ку...
    Re[8]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 12:29
    Оценка: :)
    Здравствуйте, Mamut, Вы писали:

    M>Еще как возможен.

    M>
    PROCEDURE a : BOOLEAN
      {* пара десятков строчек кода *}
      RETURN TRUE;
    END a;
    
    PROCEDURE b
    VAR
      a : BOOLEAN;
    BEGIN
      a := FALSE;
      {* пара десятков строчек кода *}
      IF a THEN 
        {* критически важный код *}    
      END
    END;


    Если в выражении IF a THEN, Вы хотели вызвать описанную ранее процедуру-функцию, то это надо было делать так:
      IF a() THEN 
        {* критически важный код *}    
      END

    "а" и "а()" — совершенно разные штукенции.


    В принципе на "зевок" можно списать, но очень редкий, ведь тут двухсимвольная опечатка "()". А двухсимвольные опечатки менее вероятны чем односимвольные.
    Re[18]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 12:49
    Оценка: :)
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>А это
    Автор: Пацак
    Дата: 22.06.05
    Вы не читали?


    Там не по теме. В этой ветке форума обсуждается си-образный синтаксис vs Modula/Oberon-образный. Если Вам охота какой-то другой синтаксис сравнить заводите другую ветку форума. Но такой популярности как эта ветка, она вряд ли добьется.
    Re[11]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 13:08
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>> А как процедуру с несколькими точкаи выхода не дано?


    СГ>Я не понял вопроса.


    M>>
    M>>PROCEDURE
    M>>  IF cond1 THEN RETURN 1 END;
    M>>  IF cond2 THEN RETURN 2 END;
    M>>  IF cond3 THEN RETURN 3 END;
    M>>END
    M>>

    M>>Или такое тоже не скомпилируется?

    СГ>Такое — нет, скомпилируется вот такое:

    СГ>
    СГ>PROCEDURE ProcName(): INTEGER;
    СГ>BEGIN
    СГ>  IF cond1 THEN RETURN 1 END;
    СГ>  IF cond2 THEN RETURN 2 END;
    СГ>  IF cond3 THEN RETURN 3 END
    СГ>END ProcName;
    СГ>


    Ну епт (все же начал материться ). Можете считать то, что я написал псевдокодом. Повторяю то, о чем говорилось в ветке:

    здесь
    Автор: Сергей Губанов
    Дата: 22.06.05

    SAV> Цикл должен быть вещью в себе (не знаю как это выразить, надеюсь эту фразу вы поймете правильно).

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


    здесь
    Автор: Mamut
    Дата: 22.06.05

    А как процедуру с несколькими точками выхода не дано?
    ...
    Или не скомпилируется?


    Я не просил вас докапываться к коду. И вообще, я все еще жду ответа на здесь
    Автор: Mamut
    Дата: 22.06.05
    , что получило продолжение здесь
    Автор: Mamut
    Дата: 22.06.05
    . Ваш якобы ответ
    Автор: Сергей Губанов
    Дата: 22.06.05
    проигнорировал 80% моего сообщения.


    dmitriid.comGitHubLinkedIn
    Re[12]: Раскрутка
    От: Privalov  
    Дата: 22.06.05 13:46
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Есть технология под условным названием "раскрутка",...


    Дак ведь Си точно так же создавался. Интерпретатор Tiny C, за ним Small C, ну и т. д. Разумеется, речь идет об одной из реализаций. Даже об этом книга была выпущена. Этот самый Small C студентам на лабораторных по проектированию компиляторов давали работать.
    А еще есть тест для компилятора: если он самого себя компилирует — значит, есть надежда.
    Re[12]: Синтаксический оверхед
    От: Privalov  
    Дата: 22.06.05 13:57
    Оценка: +1
    Здравствуйте, Mamut, Вы писали:

    M>Я не просил вас докапываться к коду. И вообще, я все еще жду ответа на здесь
    Автор: Mamut
    Дата: 22.06.05
    , что получило продолжение здесь
    Автор: Mamut
    Дата: 22.06.05
    . Ваш якобы ответ
    Автор: Сергей Губанов
    Дата: 22.06.05
    проигнорировал 80% моего сообщения.


    Это, IMHO, стандартный метод превращения дискуссии во флейм. Вместо ответа по существу — выпячивание мелочей и игнорирование сути. Хорошо, что кроме такого рода ответов здесь есть что почитать.

    P.S. А BEGIN в Обероне существует! А кто-то кричал не своим голосом, что нет и что это устаревший синтаксис.
    Re[7]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 14:12
    Оценка: :)
    Здравствуйте, Cyberax, Вы писали:

    C>Угу, поэтому все академические разработки весьма успешно загибаются.


    Между прочим, Java и .NET есть коммерческие реализации идей опробованных на оберонах.
    Re[8]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 14:17
    Оценка: :)
    Здравствуйте, moudrick, Вы писали:

    M> С++, кстати, тоже начинался с академической разработки.


    Академические проекты академическим проектам рознь.

    1) Страуструп на момент придумывания им С++ был (еще совсем зелёным) аспирантом.

    2) Лауреат премии Тьюринга Никлаус Вирт на момент создания Оберона был профессором и было ему где-то под пятьдесят.

    Разница между первым "академическим проектом" аля курсовик и вторым Академическим проектом с большой буквы, огромна.
    Re[10]: Очередной яркий пример
    От: Трурль  
    Дата: 22.06.05 14:21
    Оценка: :)
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Кстати ! Когда иссякнет эта тема, предлагаю начать следующую ! Как извесно в С/С++ индескы начинаются с 0, а в Обероне с 1 (т.е. я так предполагаю). "Спрашивается как долго ...". Ну и так далее. Убедительные примеры, доказательства и процентные соотношения выдумаете сами.


    Увы, должен Вас огорчить. Ваше предположение не соответствует действительности. Но отчаиваться не стоит. Есть масса других вещей, о которых можно приятно пофлеймить. Например:
    Почему модуль на Обероне должен завершаться точкой?
    Re[15]: Яркий пример
    От: Трурль  
    Дата: 22.06.05 14:33
    Оценка: :)
    Здравствуйте, Mamut, Вы писали:


    M>И, хотя это являтся оффтопиком для данной подветки, еще одно замечание:

    M>
    M>// С++
    M>if(data != expectedData) // сравниваем две переменные, видно из кода
    
    M>{* Oberon *}
    M>IF data # expectedData THEN // сравинваем две переменные? 
    M>                            // переменную и значение функции?
    M>                            // значения двух функций?
    M>


    M>Наглядность языка? Где? Не вижу.

    То есть в С++ разницу видно, а в Обероне нет? Странно. Может очки каие надо?
    Re[7]: Синтаксический оверхед
    От: qwertyuiop Российская Империя  
    Дата: 22.06.05 14:35
    Оценка: +1
    СГ>Да это хорошо. Найдите ошибку в следующем си-образном коде (компилятор ее не найдет, так как формально программа корректна):

    Большинство современных компиляторов выдают на такую строчку предупреждение
    СГ>
    СГ>    if(ВыполненоНекотороеУсловие2());
    СГ>        return ВернутьНекотороеЗначениеОпределяемоеСледующимиПарамертами2(a, b, c, d, e, f, h);
    СГ>
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[8]: Синтаксический оверхед
    От: qwertyuiop Российская Империя  
    Дата: 22.06.05 14:52
    Оценка: +1
    SAV>Плохое построение цикла. В идеале у цикла должен быть один вход (никаких goto центр_цикла и прочих извращений) и один выход (выход только по условию цикла или только по одному break при while(true) ).

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

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

    SAV> Кстати тут недавно было описание книги Совершенный код
    Автор(ы): Стив Макконнелл

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


    Название — супер
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[19]: Синтаксический оверхед
    От: CrystaX Россия https://crystax.me/
    Дата: 22.06.05 14:59
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Да примерно так. Должна быть возможность глядя на программу понять опечатка в ней или так и надо. По крайней мере синтаксис должен быть таким чтобы минимизировать количество возможных односимвольных опечаток (как в данном случае ";" — односимвольная опечатка)


    Кстати, кое-что еще добавлю. Насчет точки с запятой все современные компиляторы выдадут warning. Это не ошибка, но очень на нее похожа. Как это делается? Очень просто — скрещиванием фаз синтаксического и семантического анализа. Некрасиво? Да. Но реализуемо? Тоже да.
    А естественные языки? Ведь написать корректную программу рабора фразы на английском (хотя бы) языке и получения точного ее смысла еще не удалось никому. Тем не менее это самый популярный язык в мире. А почему? Видимо, потому, что человеку важен не синтаксис.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[15]: Яркий пример
    От: qwertyuiop Российская Империя  
    Дата: 22.06.05 14:59
    Оценка: +1
    M>>>"Не плоди сущностей без необходимости" LOOP — такая вот ненужная сущность.
    СГ>>Странно, а если нужно проверить условие прекращения итерации уже находясь внутри итерации, тогда как быть?
    M>Вы издеваетесь? Посмотрите в практически любой другой язык программирования.
    M>
    M>while(cond)           
    M>{                            
    M>  if(another_cond)    
    M>    break;                   
    M>}                            
    M>


    M>Для for и do аналогично. Какие могут быть насчет этого есть проблемы?


    Просто какой-то академик решил, что будет хорошо, если всегда на выходе из цикла cond будет ложным. Кому хорошо? Почему хорошо? Какая от этого практическая польза программисту? На это я так и не услышал ответа.
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[9]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 15:10
    Оценка: +1
    СГ>1) Страуструп на момент придумывания им С++ был (еще совсем зелёным) аспирантом.

    СГ>2) Лауреат премии Тьюринга Никлаус Вирт на момент создания Оберона был профессором и было ему где-то под пятьдесят.


    СГ>Разница между первым "академическим проектом" аля курсовик и вторым Академическим проектом с большой буквы, огромна.


    Первый используется в тысячах. если не десятках тысяч програмных продуктов по всему миру и является, по сути, самым успешным коммерческим языком на планете (по популярности — и только по популярности — с ним может поспорить только РНР, имхо).

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

    Действительно, разница огромна


    dmitriid.comGitHubLinkedIn
    Re[6]: Синтаксический оверхед
    От: qwertyuiop Российская Империя  
    Дата: 22.06.05 15:12
    Оценка: +1
    СГ>Это называется научный подход к программированию. Программирование, оказывается, тоже есть наука.
    СГ>Кстати, здесь
    Автор: Mamut
    Дата: 21.06.05
    , за "задолбали", оказывается, могут наказать. Прошу Вас впредь быть поосторожнее.


    Ну а по сути можете что-нибудь ответить? Повторяю вопрос:

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

    Только пожалуйста, без ссылок на авторитеты ("как известно") и без указаний на то, что это требует какая-то парадигма программирования. Хочу знать: зачем это мне, программисту.
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[9]: Синтаксический оверхед
    От: jazzer Россия Skype: enerjazzer
    Дата: 22.06.05 15:20
    Оценка: -1
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>> С++, кстати, тоже начинался с академической разработки.


    СГ>Академические проекты академическим проектам рознь.


    СГ>1) Страуструп на момент придумывания им С++ был (еще совсем зелёным) аспирантом.


    СГ>2) Лауреат премии Тьюринга Никлаус Вирт на момент создания Оберона был профессором и было ему где-то под пятьдесят.


    СГ>Разница между первым "академическим проектом" аля курсовик и вторым Академическим проектом с большой буквы, огромна.


    Ты вообще читаешь, что тебе пишут?
    С++ не был академическим проектом!
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[11]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 22.06.05 15:51
    Оценка: +1
    Mamut wrote:

    > J>Ты вообще читаешь, что тебе пишут?

    > J>С++ *не был *академическим проектом!
    > здесь <http://www.planetpapers.com/Assets/1847.php&gt;
    > Stroustrup began C++ in 1978 as a project writing a “simulator for
    > described computer systems” for his Ph.D. at the Computing Laboratory
    > at Cambridge.

    Это был _не_ С++ — это был "C with classes".

    > здесь <http://www.hitmill.com/programming/cpp/cppHistory.html&gt;

    > C++ was written by Bjarne Stroustrup at Bell Labs during 1983-1985.
    > C++ is an extension of C. Prior to 1983, Bjarne Stroustrup added
    > features to C and formed what he called "C with Classes"

    В 1983 году Страуструп опубликовал свое детище и начал его "рекламу". Он
    четко определил границы языка, обозначил цели языка: "you pay as you
    go", "обратная совместимость с С" и "быть практичным". С этого момента,
    собственно, и начался отсчет языка С++.

    С++ не был академическим проектом — в его разработке участвовала широкая
    community, Страуструп получал постоянный feedback от пользователей (чем
    в большой мере и обусловлен успех С++), и т.п.

    Сравните с Виртом — он чего-то несколько лет пишет, а потом дарит всему
    миру свое новое изобретение (естественно, ломая обратную совместимость).

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[11]: Синтаксический оверхед
    От: Amidlokos Россия  
    Дата: 22.06.05 21:03
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Евклидовое пространство является частью ее формулировки (что такое Сбитень? Это Першин. А что такое Першин? Это сбитень.) Но для кого она правильна?


    Что такое этот пост Сергея Юрьевича Губанова? Это скрытая реклама!
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[12]: Еще один яркий пример
    От: Пацак Россия  
    Дата: 22.06.05 22:08
    Оценка: :)
    Здравствуйте, AVC, Вы писали:

    AVC>Очень мило.

    AVC>Вы предлагаете написать код, но не формулируете ни его смысла, ни условий его эксплуатации.
    AVC>Я не знаю происхождения Вашего кода, но сдается мне, что "принципу черного ящика" (интересно, каков он в Вашем понимании?) он определенно не соответствует.

    Я не предлагаю написать код. Я его уже написал и предлагаю оттранслировать в эквивалентный на обероне. Ввиду того, что по приведенному куску мы не можем точно, со 100% вероятностью утверждать что делается и, главное, чего не делается в теле той или иной используемой в нем функции (тот самый "черный ящик"), перестраивать алгоритм в соответствии с нашими "догадками" — в принципе неверно. Именно поэтому говорить "ну из очереди наверное ничего не удаляется, поэтому изменим алгоритм так-то и так-то" — некорректно. Так мы можем дойти до предположения, что все вызываемые в коде функции — "пустышки", а все проверяемые значения — ложны, после чего он автоматически выльется в LOOP EXIT END и мы сможем восславить гениальность оберона, позволившего сократить код до одной строчки.
    Ку...
    Re[10]: Интересно
    От: Amidlokos Россия  
    Дата: 22.06.05 22:31
    Оценка: +1
    Здравствуйте, AVC, Вы писали:

    AVC>Даже неловко как-то. Ну ладно.

    AVC>Кстати, можно заодно вопрос: а если в самом начале pItem = NIL?

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

    Зачем-то и почему-то я в условии цикла написал pItem->Next вместо pItem А это обычная логическая ошибка.

    Если писать просто pItem, то дополнительно проверять ничего не нужно. Зачем? Если он нулевой, while не пробежится ни разу.

    AVC>Думается, лучше проверить. Получаем:

    AVC>
    AVC>WHILE (pItem # NIL) & ~CheckItem(pItem) DO pItem := pItem.Next END;
    AVC>

    AVC>А почему на Си++ нельзя сделать так же?
    AVC>
    AVC>while (pItem && !CheckItem(pItem))
    AVC>    p = pItem->next;
    AVC>


    Можно. Однако имеет смысл только для одной проверки. Ну двух. А если точек выхода десяток (по найденному, по обнаруженному битому, срочно по переключению мютекса и т.п.)? И если, как уже приводилось где-то выше по треду, нужно перед выходом по каждому условию выполнить некоторые действия? Запихать это в одну строчку с while нереально, кроме как завести какую-то дополнительную булевскую переменную Work. И что мы получим без break?

    Work = 1;
    
    while (pItem && Work)
    {
        // Начинается всё неплохо...
        if (IsBadItem(pItem))
        {
            // Что-то делаем...
            LogErrorMessage(something);
            SetErrorState(something);
            Work = 0;    // Напоминаю, без break-а
        }
        
        // А вот здесь уже пойдёт веселье.
        // CheckItem() нельзя вызывать для "плохого" объекта
        if (Work && CheckItem(pItem))
        {
            // Нужно вернуть объект
            // Допустим, для дальнейшего использования сохраняем указатель
            pFounded = pItem;
            Work = 0;
        }
        
        // Вываливаться по внешнему сигналу от другого потока уже как-то нехорошо
        // если уже нашли или была ошибка при проверке
        if (Work && CancelCommand())
        {
            // Ну хоть здесь можно с чистой совестью просто вывалиться из всей функции
            return NULL;    // Что мы там возвращаем и как... NULL...?
        }
    
        pItem = pItem->Next;
    }


    И здесь же я сам себе и возражу: ничто не мешает сразу после Work = 0 написать continue — снова перейдём к условию, проверим его, и естественным путём вывалимся из цикла с тем самым ~p. Да. Получается. Теорема доказана (если, конечно, и на continue тоже вето не наложено). Но код тогда лишь немногим лучше данного выше примера... Ставится какая-то переменная и повторяется цикл. Изврат как с точки зрения читающего (ещё подняться к условию цикла и проверить, что мы это делали именно с целью выхода), так и с точки зрения оптимальности (лишний раз проверим условие цикла).

    // Стройнее, но немногим лучше
    Work = 1;
    
    while (pItem && Work)
    {
        if (IsBadItem(pItem))
        {
            // Что-то делаем...
            LogErrorMessage(something);
            SetErrorState(something);
            Work = 0;    continue;
        }
        
        if (CheckItem(pItem))
        {
            pFounded = pItem;
            Work = 0; continue;
        }
        
        if (CancelCommand())
        {
            return NULL;
        }
    
        pItem = pItem->Next;
    }


    Далее:

    AVC>Бог мой, какая трудная задача!

    AVC>
    AVC>IF dwCount > 0 THEN i := 0;
    AVC>  REPEAT
    AVC>    WorkWithObject(pObject[i]);
    AVC>    INC(i)
    AVC>  UNTIL (i = dwCount) OR (CalculateStat() > SOME_VALUE)
    AVC>END;
    AVC>

    AVC>Может быть, Вам не нравится, что переменная i видна за пределами конструкции?

    Нет, я же просил — без уродств с ручной эмуляцией цикла for и лишней предварительной проверкой. Не подходит. Опять же в случае множества условий не получится проверить всё в условии цикла и придётся переносить проверки внутрь. И начинаются загибы со счётчиком i. Допустим, во всё-таки размещённый в условии until CalculateStat() нужно передать значение счётчика. Будете вызывать как CalculateStat(i-1)? Нигде не напутаете? Не будете думать потом, зачем оно нужно? А если i как раз добежала до dwCount? С таким порядком условий CalculateStat() просто не будет вызвана, а ведь нам может быть важен результат её работы. Надо поменять условия местами и молиться, чтобы никто не переписал этот участок с неправильной расстановкой.

    Да, и главное: мы везде предполагаем бинарность, т.е. функция возвращает "успех" или "облом", true или false. А если возвращаемых значений больше, и при этом каждое из них важно? Тоже как минимум в условие самого цикла не засунуть...

    Читаемость во всех случаях просто никакая. А лишнее доказательство теорем — да не спорю я с давно доказанными теоремами! Вы можете быть своего мнения о моём IQ, но он всё же не настолько низок , равно как и не настолько высок для подобных претензий на открытия. Великая Теория Ненужности break, несомненно, будет ещё раз доказана. Только эффекта — как от доказательства ненужности носков по причине наличия портянок

    AVC>
    AVC>  PROCEDURE WorkWithObjects;
    AVC>    VAR i: INTEGER;
    AVC>  BEGIN
    AVC>    FOR i := 0 TO dwCount DO
    AVC>      WorkWithObject(pObject[i]);
    AVC>      IF CalculateStat() > SOME_VALUE THEN RETURN END
    AVC>    END
    AVC>  END WorkWithObjects;
    AVC>...
    AVC>WorkWithObjects;
    AVC>


    А вот это интересный выход Мне нравится, правда. Ручная реализация break

    AVC>Да-да, Сергей, не делай так, как Amidlokos!


    Тогда уж и как AVC... Код-то практически одинаковый Нет, я правда не понял призыва: не делать КАК? Не использовать break? Кхм, ну что ж... Не писать такого кода в принципе? Так здесь чистый псевдокод, я же не исходник сюда кидаю.

    А вообще чего нам вдвоём надо не делать — так это не флеймить. И я-то, каюсь, не удержался... наезда на break не выдержал
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[16]: Яркий пример
    От: Privalov  
    Дата: 23.06.05 04:50
    Оценка: +1
    Здравствуйте, AVC, Вы писали:


    AVC>Отсюда беспрерывные "откровения" вроде Вашего (со сравнением переменных) или уж откровенно глупого "оказывается, в Обероне есть BEGIN!!!". О перлах вроде "мне нас**ть на принципы структрного программирования" я уж и не говорю.


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

    Tак что это далеко не единственная глупость на этом форумы, кстати, юмористическом.
    Re[9]: Странная реакция
    От: Socrat Россия  
    Дата: 23.06.05 06:34
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Я для этого что-ли ошибку-то тут засвечивал? Я ее тут засвечивал для того чтобы показать, что в Modula/Oberon-образном синтаксисе ошибки таких сортов невозможны.



    За все надо платить. За счет чего невозможны такие ошибки? За счет лишних операторов. Нельзя в Обероне и ко сделать инкремент как в С:

    a [i++] = b;


    Это исключает возможность ошибок, но заставляет выражение растаскивать на несколько операторов. А это уже оверхед.
    Re[12]: Ошибка 5
    От: moudrick Россия http://community.moudrick.net/
    Дата: 23.06.05 06:59
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>> требования современных виртуальных оберон-машин.


    СГ>Каких еще виртуальных? Это у Java есть виртуальная машина, не путайте.


    Зря ошибке номер дали. Это не убеждение, не утрерждение. Это просто высказывание.

    Я как автор данного высказывания квалифицирую его как стеб.

    А у Вас оверхед по нумерации ошибок. А что будете делать когда номера закончатся?
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[20]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 08:44
    Оценка: -1
    Здравствуйте, CrystaX, Вы писали:

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


    Не английский, а США-совский. И это очень существенное уточнение. Это потому, что мог бы быть русский, если бы произошла мировая революция; или немецкий если бы планы фашистов сбылись; или китайский если бы китайцы завоевалю всю евразию. Или японский, если бы у них у первых появилась ядерная бомба. А так как в холодной войне победили именно США, то и язык по всему миру ихний. Кроме того они и компы с программами для них первее всех расплодили. Аналогично у Java нет преимуществ перед Оберонами кроме как то, что за плечами Java стоит Sun. Аналогично про .NET с Microsoft.
    Re[11]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 23.06.05 08:47
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>>Что-то в примерах, которые вы приводили при подсчете лексем, вы почему-то не вызывали процедуры со скобками. Аяяяй, нехорошо


    СГ>А потому что там были процедуры, а тут процедуры-функции.


    СГ>Для активации процедуры-функции надо

    СГ>1) скобки написать даже если нет ни одного аргумента (иначе идентификатор будет обозначать саму процедуру-функцию, а не результат ее действия)
    СГ>2) Как-то использовать возвращаемый результат.
    СГ>
    СГ>a := myfunc;        (* можно только если a - процедурная переменная, тогда ей присваивается значение самой процедуры-функции (ее адрес)  *)
    СГ>b := myfunc();      (* можно, присваиваем результат возвращаемый после активации процедуры-функции  *)
    СГ>myfunc();           (* НЕЛЬЗЯ! Возвращаемое значение не используется!!! *)
    СГ>IF valid() THEN END (* можно - возвращаемое значение используется  *)
    СГ>



    Писец. И это — правильный синтаксис???? У меня уже слов не осталось. Грабли, не хуже, чем в С++

    Пример. Полупсевдокод.
    Было
    
    PROCEDURE someProcedure : INTEGER
    BEGIN
      RETURN 1;
    END;
    
    Стало
    
    PROCEDURE someProcedure
    BEGIN
    
    END;
    
    Где-то в коде:
    {* много кода *}
    myVar := someProcedure;
    {* много кода *}


    Что будет? Правильно, надеемся, что компилятор остановит. Если в С++ стоит задача — "compile-debug", то в Оберонах, судя по всему, "compile-compile-compile-мля, когда эти ошибки закончятся?".

    Опять же, синтаксис name := name неочевиден, потому что я не вижу сразу, что я присваиваю — переменную или адрес функции. Конечно, из окружающего кода должно стать понятно, но и это не всегда очевидно


    dmitriid.comGitHubLinkedIn
    Re[12]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 23.06.05 09:08
    Оценка: :)
    Здравствуйте, Трурль, Вы писали:

    Т>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>
    СГ>>myfunc();           (* НЕЛЬЗЯ! Возвращаемое значение не используется!!! *)
    СГ>>

    Т>Таки, монжно.

    Неужто Сергей по поводу Оберона опростоволосился?
    "И эти люди не разрешают мне ковыряться в носу?" (ц)Вовочка
    Re[22]: Синтаксический оверхед
    От: Трурль  
    Дата: 23.06.05 09:15
    Оценка: -1
    Здравствуйте, Курилка, Вы писали:


    К>Сергей, уважайте, пожалуйста, родной язык (если, конечно, русский для вас родной) — нет слова "ихний" в русском!

    Есть!
    Re[14]: Синтаксический оверхед
    От: Privalov  
    Дата: 23.06.05 09:29
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Ни кто не кричал что в Обероне не существует слова BEGIN.



    Где-то в середине 1970-тых годов был открыт реально необходимый и достаточный синтаксис (Modula-2, 1979 год)
    [...]

    Обратите внимание: слово "BEGIN" отсутствует вообще во всех инструкциях — оно лишнее.


    А это
    Автор: Сергей Губанов
    Дата: 09.06.05
    что?
    Re[24]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 23.06.05 09:35
    Оценка: :)
    Здравствуйте, Privalov, Вы писали:

    P>Здравствуйте, Трурль, Вы писали:


    К>>>Сергей, уважайте, пожалуйста, родной язык (если, конечно, русский для вас родной) — нет слова "ихний" в русском!

    Т>>Есть!

    P>Есть в украинском: їхній. А в русском из нас это слово еще в школе каленым железом выжигали.


    Есть просторечное слово и, естетсвенно, что в литературном языке оно не рекомендуется. Но литературный язык полон оверхэдов, конечно
    Потоэтому афтары им и не умеют пользоваться — неоптимально.
    Re[9]: Синтаксический оверхед
    От: qwertyuiop Российская Империя  
    Дата: 23.06.05 09:44
    Оценка: +1
    Q>>Большинство современных компиляторов выдают на такую строчку предупреждение

    СГ>Это хорошо. Правда на прошлой неделе компилировал нечто написанное на Си не мной, там столько предупреждений выдалось, ёёёё-о-у, во всех них копаться даже не стал. Раз уж сами авторы не стали, я-то что?


    Сказать-то что хотели?
    Может лучше ответите на какой-нибудь конкретный вопрос, например этот
    Автор: qwertyuiop
    Дата: 22.06.05
    или этот
    Автор: qwertyuiop
    Дата: 22.06.05
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[11]: Так Вы определитесь
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 09:55
    Оценка: -1
    Здравствуйте, Amidlokos, Вы писали:

    A> Однако имеет смысл только для одной проверки. Ну двух. А если точек выхода десяток (по найденному, по обнаруженному битому, срочно по переключению мютекса и т.п.)?


    Так Вы определитесь, что конкретно нужно. Приведите конкретный пример. Чтобы потом без всяких там, а вот если бы да кабы, то в носу бы выросли грибы...
    Re[18]: Яркий пример
    От: Пацак Россия  
    Дата: 23.06.05 10:08
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Речь шла не о служебном слове BEGIN, а о самостоятельном блоке BEGIN ... END, которого в Обероне нет.


    И чем же пара BEGIN ... END в объявлении процедуры менее самостоятельна, чем в цикле или условном операторе? Тем, что Вирт не догадался написать что-нибудь типа PROCEDURE .... BEGPROC ... END? Или наоборот IF condition BEGIN END?
    Ку...
    Re[21]: Синтаксический оверхед
    От: alexku Россия  
    Дата: 23.06.05 10:18
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:


    СГ>Если в будущем, например, IBM или Intel соберется изобрести новый язык, то почему-бы им не взять в качестве синтаксической основы правильный синтаксис Modula/Oberon? Их язык от этого только выиграет.


    А что от этого выиграют IBM и Intel? Похвалу Сергея Губанова?
    Re[8]: Копирование чисел
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 10:31
    Оценка: :)
    Здравствуйте, Socrat, Вы писали:

    S>Сравни:

    S>
    S>while (*a++ = *b++);
    S>

    S>и
    S>
    S>LOOP 
    S>  a[i] := b[j]; 
    S>  IF b[j] = 0X THEN EXIT END;
    S>  INC(i); 
    S>  INC(j)
    S>END
    S>


    Можно еще короче:

    LOOP a[i] := b[j];
    IF b[j] # 0X THEN INC(i); INC(j) ELSE EXIT END
    END

    А инструкции с побочным эффектом опасны. Кроме того, код while (*a++ = *b++); вообще писать нельзя так как он не проверяет выход за границы и может привести к такой любомой сишной ошибке как переполнение буфера.

    Надо писать хотя бы так:
    LOOP
      IF (i < LEN(a)) & (j < LEN(b)) THEN
        a[i] := b[j];
        IF b[j] # 0X THEN INC(i); INC(j) ELSE EXIT END
      ELSE EXIT END
    END


    С другой стороны, массивы в Pascal/Modula/Oberon это есть обычные типы значения, так что для полного копирования одного массива в другой можно просто написать a := b. Что касается строк, то для работы с ними есть уже встроенные механизмы.
    Re[18]: Яркий пример
    От: alexku Россия  
    Дата: 23.06.05 10:52
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:


    СГ>Вы путаете процедуру с процедурой-функцией.


    А вы путаете божий дар с яичницей.

    IF oneItem # anotherItem THEN


    Где в этом коде гарантия того, что я сравниваю значения переменных а не адреса процедур?
    Re[9]: Копирование чисел
    От: Пацак Россия  
    Дата: 23.06.05 11:12
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:


    СГ>Кроме того, код while (*a++ = *b++); вообще писать нельзя так как он не проверяет выход за границы


    Кто вам сказал? Вы знаете какого типа a и b? Знаете как перегружены в них операторы инкремента?

    СГ>С другой стороны, массивы в Pascal/Modula/Oberon это есть обычные типы значения, так что для полного копирования одного массива в другой можно просто написать a := b. Что касается строк, то для работы с ними есть уже встроенные механизмы.


    Ага. Если a и b — это массив или строка. Чего в общем-то из данного куска кода никак не следует.
    Ку...
    Re[8]: Синтаксический оверхед
    От: qwertyuiop Российская Империя  
    Дата: 23.06.05 11:31
    Оценка: +1
    Q>> Хочу знать: зачем это мне, программисту.

    СГ>Для того чтобы составлять алгоритмы грамотно.


    Я же просил без указаний на то, что это требует какая-то парадигма программирования. Если из цикла есть выход по брейку, то из этого вовсе не следует, что алгоритм составлен неграмотно. В конце концов в Обероне ввели LOOP именно потому, что бывают случаи, когда без этого не обойтись (в отличие, например, от goto, без которого обойтись можно, но путем усложнения программы).
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[16]: Яркий пример
    От: jazzer Россия Skype: enerjazzer
    Дата: 23.06.05 11:39
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Cyberax,


    СГ>while(true) = LOOP


    Т.е. по окончании цикла true превратится в false??? ;)
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[16]: LOOP
    От: Amidlokos Россия  
    Дата: 23.06.05 11:50
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>WHILE и REPEAT — синтаксический сахар поверх LOOP.


    Нет, позвольте! Тогда уж не сахар, а оверхед!
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[17]: LOOP
    От: Пацак Россия  
    Дата: 23.06.05 11:54
    Оценка: :)
    Здравствуйте, Amidlokos, Вы писали:

    СГ>>WHILE и REPEAT — синтаксический сахар поверх LOOP.

    A>Нет, позвольте! Тогда уж не сахар, а оверхед!

    Это уже даже не оверхед, это уже просто баян.
    Ку...
    Re[24]: Синтаксический оверхед
    От: Трурль  
    Дата: 23.06.05 12:14
    Оценка: -1
    Здравствуйте, Privalov, Вы писали:

    P>Есть в украинском: їхній. А в русском из нас это слово еще в школе каленым железом выжигали.

    Плохие у вас в школе учителя были.
    Re[13]: Очередной яркий пример
    От: boomsic Россия  
    Дата: 23.06.05 12:55
    Оценка: -1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Аноним, Вы писали:


    СГ>>>a — обозначает саму себя как процедурную переменную

    СГ>>>a() — обозначает результат, который вернула процедура-функция после исполнения

    СГ>>>Как иначе-то, может быть?


    А>>Значит скобки все-таки нудны в вашем знаменитом WHILE a DO x END? То есть нужно писать x()?


    СГ>Нет, не нужно.


    СГ>Скобки () нужны для активации процедуры-функции даже если у нее нет аргументов.

    СГ>Для активации процедуры скобки писать не нужно если у нее нет аргументов.


    что за бред??????
    ICQ 227964124
    Re[20]: Яркий пример
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 23.06.05 14:15
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

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



    СГ>>>Уверяю Вас это было видно сразу же по тексту программы. Ведь активация процедуры-функции всегда помечается скобками () даже если список параметров пуст.


    M>>Это сыграло мое неполное знание синтаксиса языка. В общем, такое же, как и у вас, когда вы сетовали на оператор "-->" в C++


    СГ>Я сетовал на то что легко совершить глупую ошибку благодаря побочному эффекту. Языки же я знаю.


    А пример аналогичный на Обероне так и останется заигноренным?
    Re[20]: Яркий пример
    От: Mamut Швеция http://dmitriid.com
    Дата: 23.06.05 14:31
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>>То есть максимум, что отсюда получается, это designator := designator [([ExpList])]. В другой документации об этом ничего, вроде, не говорится.


    СГ>Так ведь дело в том, что это не надо описывать с помощью EBNF. Это надо описать обычным языком. Точно также как, то что переменная перед использованием должна быть объявлена, точно также как то что имена переменных должны быть разными и т.д. и т.п. EBNF тут не силен.


    В принципе, верно, но в документации на сайте я такого не нашел. Возможно, плохо искал

    M>>Кстати, вопрос, как можно понять следующую фразу из Programming in Oberon:

    M>>

    M>>Only one value, however, can be returned as the result of a function. This value, moreover, cannot be of a structured type.


    СГ>Процедура-функция может возвращать переменные только базовых типов, но не может возвращать переменные сложных типов определенных пользователем (хотя указатели на них возвращать может, ведь указатель — тоже базовый тип). До Delphi 3 (или 4?) в Object Pascal было аналогичное ограничение.


    А понял. Вроде как бы тоже ограничение, но в рамках языка/среды возможно оправданное.

    M>>Кстати, я, по-моему, только сейчас понял ту идею, которую хотел донести Сергей, когда он начинал говорить об оверхеде. А именно то, что он указал гораздо позже. А именно:

    M>>
    M>>* a * b * c * d * e
    M>>

    M>>где, исключая пробелы, "*" — это служебные лексемы.
    M>>А ведь действительно, с именно таким синтаксисом сложнее допустить ошибку при написании программы:

    СГ>Вот теперь и умереть не страшно, хоть до одного человека что-то донес...


    Просто надор было эту идею сразу нести в массы, а не подсчитывать лексемы Что-то в стиле

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

    -- И дальше — звездочки, примеры программ и так далее — а то устроили этакое кровавое побоище ---


    Что-то я в друг подумал. Это, наверное, единтсвенный флейм на РСДНе, в котором собеседники поняли друг друга


    dmitriid.comGitHubLinkedIn
    Re[22]: While Loop - Definition
    От: Mamut Швеция http://dmitriid.com
    Дата: 23.06.05 14:33
    Оценка: :)
    Т>>А самому никак?

    P>А разве я сказал "по определению"? Я всего лишь попросил обосновать Ваше утверждение. Естественно, могу, как смог Mamut чуть раньше.


    Хых. Мне статус эксперта по Гуглю
    Автор: Дмитрий Димандт aka Mamut
    Дата: 19.03.05
    обязывает


    dmitriid.comGitHubLinkedIn
    Re: Неприятность
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 14:40
    Оценка: +1
    Неприятность приключилась. Компьютер неожиданно вырубился, а после загрузки все сообщения из этой ветки стали помечены как не прочитанные. Короче, поскольку сообщений очень много, то мне трудно понять на что я уже ответил, а на что еще нет. Прошу не обижаться сильно если я чего-то недогляжу. Нет возможности пересмотреть все сообщения.
    Re[10]: Синтаксический оверхед
    От: Privalov  
    Дата: 23.06.05 14:42
    Оценка: -1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А Вы считайте, что наоборот. Изначально был LOOP, а потом ввели WHILE и REPEAT по просьбам трудящихся.


    Цикл FOR был известен задолго до LOOP и WHILE. В Фортране — конец 50-х. Он там называется DO.
    Re[13]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 23.06.05 14:51
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, merlin.fs, Вы писали:


    MF>> не очень понимаю этот спор


    СГ>И я тоже. Но каков addict...


    И кто тут наркоман?
    Или английским вы также как Си владеете? (т.е. может всёж addiction? хотя и она не в тему, если честно)
    Re[22]: Яркий пример
    От: Пацак Россия  
    Дата: 23.06.05 15:00
    Оценка: :)
    Здравствуйте, Mamut, Вы писали:

    M>Еще одно доказательство того, что LOOP — это инструкция, Оберону чуждая, привнесенная извне.


    Тогда уж IF — тоже:

    IF a DO EXIT END;    =     * a * * * *


    Ку...
    Re[3]: Ошибка
    От: Lepsik Гондурас https://www.kirdyk.club/
    Дата: 23.06.05 21:39
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:


    СГ>Где-то в середине 1970-тых годов был открыт реально необходимый и достаточный синтаксис (Modula-2, 1979 год)

    СГ>
    СГ>WHILE a DO x; y; z END
    СГ>

    СГ>Обратите внимание: слово "BEGIN" отсутствует вообще во всех инструкциях — оно лишнее.

    ну что вы как ребенок

    #define DO ){
    #define END }
    #define WHILE while(


    и компилируйте на С на здоровье

    WHILE a DO x; y; z END
    Re: Синтаксический оверхед
    От: faulx  
    Дата: 24.06.05 03:43
    Оценка: +1
    Интересно, что никто не упомянул самый, на мой взгляд, большой "оверхэд" (что, русского слова не нашлось? Хотя бы "избыточность") языков в C-образным синтаксисом. Это, конечно, цикл for. Смотрите:

    for (int longIndexVariable = 0; longIndexVariable < n; longIndexVariable++)


    Сколько лишней писанины! Одно и то же имя приходится писать три раза. И сколько мест для потенциальной ошибки! Вспомните, сколько раз в жизни вы натыкались на ошибку вроде следующей:

    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; i++)
             sum += a[i][j];


    Код вроде

    for i := 1 to n
         for j := 1 to m
            sum = sum + a[i][j]


    нагляднее выражает, что же мы имели в виду.

    И еще к слову. Я все понимаю, я знаю все аргументы в пользу того, чтобы начинать индексацию массивов с 0, а не с 1. И все же я считаю это неестественным!
    Re[11]: Синтаксический оверхед
    От: qwertyuiop Российская Империя  
    Дата: 24.06.05 04:24
    Оценка: :)
    M>>По Дискавери одной из самых сложных программ, работающих сегодня, назвали программу автоматического входа шаттла в атмосферу. С начала входа до -4 км до посадки люди к управлению даже не прикасаются. А там, как никак — управляемое падение (планированием это сложно назвать) на запредельных скоростях (13-25 Мах, что ли).

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


    L>догадаешся на чем написана ?


    Думаю, на ассемблере...
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[6]: Синтаксический оверхед
    От: qwertyuiop Российская Империя  
    Дата: 24.06.05 06:08
    Оценка: :)
    F>довольно абстрактный. Ведь, наверное, calculate_current_increment() вызывается не просто так, а туда передаются какие-то параметры. И скорее всего они возникают где-то в середине блока цикла. И писать приходится как-то так:

    F>
    F>for (int i = 0; i < n; )
    F>{
    F>  // Много строчек кода
    F>  int j = ...
    F>  i += calculate_current_increment(j);
    F>}
    F>


    А как быть, если цикл выглядит примерно так:
    for (int i = 0; i < n; )
    {
      // Много строчек кода
      int j = ...
      i += calculate_current_increment(j);
      continue;
      // Еще много строчек кода
      j = ...
      i += calculate_current_increment(j);
      continue;
      // И здесь много строчек кода
      j = ...
      i += calculate_current_increment(j);
      continue;
      // ...
    }


    И так перед каждым continue?
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[7]: Синтаксический оверхед
    От: faulx  
    Дата: 24.06.05 07:09
    Оценка: +1
    Здравствуйте, Sergey J. A., Вы писали:

    F>>Посмотрел в интернете, кажется, Паскаль действительно не запрещает. Позор! Интересно, как с этим в Аде и Обероне?


    SJA>Оберон позволяет.


    Позор и ему.
    Re[4]: Синтаксический оверхед
    От: Amidlokos Россия  
    Дата: 24.06.05 07:22
    Оценка: +1
    Здравствуйте, faulx, Вы писали:

    F>Даже в Паскале можно указывать шаг изменения (или это только в Турбо-паскале с потомками?).


    Вона как? Код в студию!

    Как я помню, шаг там выбирается между 1 и -1 (соответственно, to и downto). И всё.

    Q>>Для человека может и естественно с единиуы, но для программиста естественно с нуля.


    F>Программист — он тоже человек!


    Да. Но не юзер, а профессионал.

    Простому человеку тоже понятнее в граммах, но ювелиры измеряют почему-то в каратах
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[8]: Синтаксический оверхед
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 24.06.05 07:35
    Оценка: +1
    Здравствуйте, qwertyuiop, Вы писали:
    Q>Большинство современных компиляторов выдают на такую строчку предупреждение
    А большинство совремнных PM заставляют компилять с treat warnings as errors
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[21]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 24.06.05 12:02
    Оценка: :)
    Здравствуйте, Пацак, Вы писали:

    П>Это не ответ на вопрос. Повторю его, если непонятно: чем использование BEGIN END в подпрограммах и модулях с синтаксической точки зрения отличается от использования его же в управляющих инструкциях? ИМХО — ничем.


    В одном случае есть выбор использовать блок BEGIN END или не использовать, а в другом случае этого блока просто нет. Разница в более строгом синтаксисе — меньше вероятность совершить опечаточную глупую ошибку.

    П>А в таком случае говорить, что эта связка в обероне не используется — явное лукавство.


    Сам по себе блок BEGIN END отсутсвуют напрочь.

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


    Стоило. В си-образном синтаксисе это невозможно даже на синтетических тестах.

    Кстати, а возможно ли, добиться того чтобы звездочное чередование всегда было бы правильным? Наверное нет, ведь тогда, как мне кажется, пришлось бы вводить очень много разных служебных лексем. Например правильность в сложный IF была внесена ценой добавочной лексемы ELSIF, но на все случаи жизни ведь новых лексем не напасешся... Можно было бы отменить ";" после "END", ведь END сам является разделителем. Действуя в этом направлении, избыточность уменьшилась бы, но, видимо, ценой введения исключений из общих правил. А это плохо. Лучше иметь правила не имеющие исключений.
    Re[5]: Определение циклов
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 24.06.05 12:57
    Оценка: :)
    Здравствуйте, Mamut, Вы писали:

    СГ>>В Си-образных языках, циклы while/do не удовлетворяют этим определениям так как могут быть завершены еще и по break и goto.


    M>Не соглашусь.


    Не соглашусь с несоглашением...
    Re[11]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 24.06.05 13:06
    Оценка: +1
    Здравствуйте, merlin.fs, Вы писали:

    П>>Не вижу тут поводов для ускорения.


    MF>Повод есть, если переменная используется только как счетчик, то делфя создаст приблизительно такой вод код:


    MF>
    MF>    mov edx, _count_
    MF>@@repeat:
    MF>    ...
    MF>    _чото_делаем_
    MF>    ...
    MF>    dec edx
    MF>    jne repeat
    MF>


    Ну, что-ж. Хоть кто-то возразил аргументированно.
    Однако, вот во что превращается следующий код:

    #include <stdio.h>
    int f()
    {
        int i;
        for(i=10;i>0;i--)
            puts("+");
    
        return 0;
    }



    _f    PROC NEAR                    ; COMDAT
    
    ; 6    : {
    
        push    esi
    
    ; 7    :     int i;
    ; 8    :     for(i=10;i>0;i--)
    
        mov    esi, 10                    ; 0000000aH
    $L863:
    
    ; 9    :         puts("+");
    
        push    OFFSET FLAT:??_C@_01MIFGBAGJ@?$CL?$AA@
        call    _puts
        add    esp, 4
        dec    esi
        jne    SHORT $L863
    
    ; 10   : 
    ; 11   :     return 0;
    
        xor    eax, eax
        pop    esi
    
    ; 12   : }
    
        ret    0
    _f    ENDP


    Как видим — практически один в один.
    Я — свихнувшееся сознание Джо.
    Re[7]: Определение циклов
    От: Mamut Швеция http://dmitriid.com
    Дата: 24.06.05 13:14
    Оценка: :)
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Здравствуйте, Sergey J. A., Вы писали:


    SJA>>>Ну, конкчно кроме случаев, когда из REPEAT ... UNTIL можно выйти по EXIT.


    СГ>>Выход выходу рознь. http://www.rsdn.ru/Forum/Message.aspx?mid=1239021&amp;only=1
    Автор: Сергей Губанов
    Дата: 24.06.05


    SJA>Знаете, вчера проичитал чтатью в Википедии о структурном програмировании.


    О! Наконец-то! Хоть один человек!!! Я-то ссылку на эту статью уже, наверное, в четырех местах привожу

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


    SJA>Скажем просто. Оберон не соответсвует принципам структурного програмирования.


    О!!! Я буду на вас молиться!! Конечно не соответствует. Но при этом заставляет циклы while и for соответствовать —


    dmitriid.comGitHubLinkedIn
    Re[13]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 24.06.05 13:42
    Оценка: +1
    Здравствуйте, merlin.fs, Вы писали:

    MF>Согласен, только почему esi? для счетчиков естественей edx использовать, моя информация наверно устарела

    MF>(давно не изучал эту тему), но на сколько я помню, проц inc/dec с edx, eax, ebx и ecx выполняет быстрее чем esi, edi.

    Я тож не очень в курсе, но мне казалось что новые процессоры большинство команд выполняют в 1 такт...
    Но не столь важно. Думаю компиляторо-писатели знали, что делают...
    Я — свихнувшееся сознание Джо.
    Re[7]: Определение циклов
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 24.06.05 19:45
    Оценка: :)
    Здравствуйте, Mamut, Вы писали:

    M>И все же, свою точку зрения я подтвердил фактами. Ваш ход


    Я написал:

    В Си-образных языках, циклы while/do не удовлетворяют этим определениям так как могут быть завершены еще и по break и goto.

    это так. Ну такие определения я написал. А Вы в ответ: "Не соглашусь." Как можно не согласится с тем что они не удовлетворяют указанным мной определениям?

    А на счет тех определений, вот еще информация:

    Рассмотрим код:

    REPEAT узнавать где брод UNTIL узнал
    Лезть в воду

    То что цикл REPEAT не завершится никаким другим способом, кроме как тогда когда "узнал" станет истиной гарантирует то, что можно переправится через реку.


    Следующий код:

    WHILE отмерено меньше семи раз DO отмерять END
    Отрезать

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

    Если бы не было таких гарантий, то нельзя было бы так программировать
    Re[3]: FOR
    От: Кодт Россия  
    Дата: 25.06.05 11:38
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>

    СГ>Оператор
    СГ>

    СГ>   FOR v := beg TO end BY step DO statements END
    СГ>

    СГ>эквивалентен следующему
    СГ>
    СГ>   temp := end; v := beg;
    СГ>   IF step > 0 THEN
    СГ>      WHILE v <= temp DO statements; v := v + step END
    СГ>   ELSE
    СГ>      WHILE v >= temp DO statements; v := v + step END
    СГ>   END
    СГ>

    И ты хочешь сказать, что компилятор, в случае если step переменный, рожает две копии statements ? Маньячно.

    Кстати говоря, при step=0 в "эквивалентном коде" мы наблюдаем 6-секундную задержку
    Это заодно к вопросу о верификации программ, и облегчает ли её Оберон.

    Скорее, FOR эквивалентен вот такой конструкции
    v_ := beg; end_ := end; step_ := step; (* параметры цикла поменять в ходе работы нельзя *)
    WHILE (step_>0 AND v_<=end_) OR (step_<0 AND v_>=end_) DO (* при step_=0 условие ложное *)
      v := v_; (* то же относится и к переменной цикла *)
      statements go here;
      v_ := v_ + step_;
    END;
    Перекуём баги на фичи!
    Re[9]: Open source
    От: Cyberax Марс  
    Дата: 25.06.05 13:21
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Вы правы. По этому поводу Никлаус Вирт как раз и ругал все эти дебагеры. А имеено, он говорил, что существуют программы, которые нельзя дебажить — сборщик мусора, например. В его статье про создание Оберона он на этом специально акцентирует внимание. Сборщик мусора должен быть написан с особой тщательностью.

    Нормально сборщики мусора отлаживаются — вполне обычного отладчика Visual Studio мне было вполне достаточно, когда я искал багу в Boehm GC и когда писал свой GC.

    Делаем вывод: Н.Вирт еще и отладчиками пользоваться не умел.
    Sapienti sat!
    Re[12]: *
    От: mister-AK Россия  
    Дата: 25.06.05 17:57
    Оценка: +1
    Здравствуйте, Кодт, Вы писали:

    К>Только не говори, что THEN короче, чем {}


    пожалста — замените на односимвольный терм и будет короче, а вообще на сишных фэнов в этом форуме смотреть становиться всё неинтереснее и не интереснее, чем на данную ветку в которой они кусаются и вообще от синтаксических программистов меня уже тошнит аттавизм, мда {}ХЪ
    Re[8]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 27.06.05 08:26
    Оценка: :)
    Здравствуйте, Трурль, Вы писали:

    F>>Всегда в этих названиях путаюсь. Что как минимум полугруппа, я догадался, но "моноид" — этого я уже не помню. Ну тогда вопрос, как знатоку: часто ли в математических книгах операцию в моноиде обозначают символом `+'?

    Т>Ни разу не видел.

    Я так и думал. Итак, строки с операцией конкатенации образуют моноид, а операцию в моноиде не принято обозначать как `+'. Спрашивается, почему для строк должно быть сделано исключение?
    Re[7]: Синтаксический оверхед - Новая порция
    От: Cyberax Марс  
    Дата: 27.06.05 08:37
    Оценка: +1
    faulx wrote:

    > Т>Моноид aka "полугруппа с единицей". (N.B. не с нулем)

    > Всегда в этих названиях путаюсь. Что как минимум полугруппа, я
    > догадался, но "моноид" — этого я уже не помню. Ну тогда вопрос, как
    > знатоку: часто ли в математических книгах операцию в моноиде
    > обозначают символом `+'?

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

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

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[7]: Синтаксический оверхед - Новая порция
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 27.06.05 10:12
    Оценка: +1
    Здравствуйте, faulx, Вы писали:

    F>Вы трактуете "возвращаемое значение" в конкретном смысле возвращаемого значения какой-либо функции, а я имел в виду нечто более общее — возможность получить тем или иным способом информацию о том, что было результатом выполнения операции delete.

    Я прекрасно понял, что вы имеете в виду. Но мы-то говорим о совершенно конкретном операторе и выборе термина для него. Стейтмент
    delete a
    не имеет никакого возвращаемого значения. Да, он может бросить исключение, или модифицировать глобальную переменную — это неважно. Главное, что этот стейтмент не является выражением. Это чисто императивная конструкция. Попробуйте представить, что С++ написан на русском языке и сравните:
    Экскаватор * мойЭкскаватор = новый Экскаватор();
    ...
    удалить мойЭкскаватор ;

    с
    Экскаватор * мойЭкскаватор = создать Экскаватор();
    ...
    удалить мойЭкскаватор ;

    Теперь понятно, почему прилагательное лучше подходит?
    Кстати, в другом контексте подойдет именно глагол:
    Экскаватор * мойЭкскаватор = ФабрикаЭкскаваторов.Создать();


    F>Что-то вроде:


    F>Кстати, то, что delete не имеет возвращаемого значения — это всего лишь волевое решение. Могло бы что-нибудь и возвращаться, и проверяли бы это значение только самые дотошные программисты, из тех, кто проверяет возвращаемое значение printf и close.

    Если бы возвращал, то и называться мог по другому

    F>Неужели они не удивяться, если символ `+' будет означать вычитание?

    Что может означать "вычитание" в контексте строк?
    S>>Покажите мне хотя бы одного человека, который ожидал увидеть * для конкатенации строк.


    F>Мне лично нравится второй, третий и последний варианты. Второй мне привычнее, но третий, вероятно, лучше во-первых, по приведенным выше соображениям (на правах гипотезы), а во-вторых, он единственный и вариантов (если не считать запятой), в котором оператор выглядит несимметрично, что подчеркивает несимметричность операции конкатенации. С другой стороны, в C++ этот символ уже занят операцией AND. И `++' в бинарную операцию не переопределишь. Пожалуй, в C++ выбор гораздо меньше. С другой стороны, привыкли же к <<. Может, и к `&' привыкли бы.

    Может быть. По факту, привыкли к плюсу.
    F>Кстати, еще претензия : почему в C++ нельзя опредить произвольный оператор, как в Haskell, а только предопределенный набор?
    Об этом хорошо написано у Страуструпа в Design and Evolution.
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[9]: Определение циклов
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.06.05 12:06
    Оценка: :)
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Оотлично. Ну, раскажите почему try ... finnaly ... end структурная конструкция, а С-шный while — нет.

    SJA>Подсказка:
    SJA> throw -> break.
    SJA>А ?

    По определению цикла WHILE, которое я дал выше.

    SJA>И кстати, почему замечательно структурной try ... finnaly ... end нет в Обероне ?


    Там исключений нет.
    Re[10]: register
    От: Cyberax Марс  
    Дата: 27.06.05 12:18
    Оценка: +1
    Сергей Губанов wrote:

    > S>- что компиляторы С умеют выдавать warning на практически все

    > ошибочные ситуации, которые можно только придумать.
    > Жаль что фразу "практически все" нельзя поставить перед словом
    > компиляторы.

    Все нормальные компиляторы — выдают.

    > Другие слушатели курсов воспользовались моим кодом (свой писать лень

    > было), но у них почему-то программа не правильно работала. Позвали
    > меня спросить почему у меня работает правильно, а у них на выходе
    > какая-то ерунда. Посмотрел, увидел вызов Encode(sample, &encoder)
    > поменял на Encode(&encoder, sample) заработало. А ведь компилировалось
    > не то что без ошибок, а даже без варнингов! И даже выполнялось (не
    > правильно, но выполнялось же)!!!

    Плохой компилятор, для таких случаев придумали lint. Однако, в языке С++
    такая конструкция бы не работала.

    > S>- что на языке С не нужно переупорядочивать программу для того,

    > чтобы компилятор смог сгенерировать оптимальный код
    > Для этого только надо перед переменной написать слово *register*...

    Вы откуда пришли? Слово register игнорируется компиляторами с
    90-х годов прошлого века (BC 3.11, кажется, был последним компилятором,
    который соблюдал эту директиву).

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[10]: register
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 27.06.05 12:35
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:
    СГ>Жаль что фразу "практически все" нельзя поставить перед словом компиляторы.
    Ну так... Это ж древний-предревний C. Это известная проблема. Попробуй воспроизвести это на любом С++, выпуска хотя бы 1993.

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

    СГ>Для этого только надо перед переменной написать слово register...
    Кто вам сказал такую глупость? Старые компиляторы игнорировали слово register, потому что у них вообще не было оптимизаторов. Новые компиляторы его игнорируют потому, что лучше программиста выполняют раскладку про регистры.
    Перестаньте упорствовать в своих заблуждениях. Современный компилятор плюсов так переделывает исходный код, что большинство припрыгиваний с низкоуровневой оптимизацией едут мимо кассы. Программист должен заниматься алгоритмической оптимизацией. А всякие инлайнинги и предсказание переходов оставьте для автоматики.
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[11]: Определение циклов
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.06.05 13:13
    Оценка: :)
    Здравствуйте, Sergey J. A., Вы писали:

    SJA> Дайте правила, по которым можно определить — структрная конструкция или нет.


    Не дам. Тут смысл нужно понимать.

    SJA>Да ????? А что будет, если обратится по неверному индексу ? Уж не исключение, ли ?

    SJA>Опять же Stack Overflow это что ?

    Будет остановлена исполняющаяся команда. Термина "исключение" нет.
    Re[5]: Идеологически правильный мегарулез
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.06.05 13:43
    Оценка: -1
    Здравствуйте, Sergey J. A., Вы писали:

    СГ>>EXIT дешево и сердито завершает ближайший LOOP. Чего такого-то?


    SJA>break дешево и сердито завершает ближайший while/for/do-while. Чего такого-то?


    Циклом WHILE или REPEAT называется цикл, который может завершиться только по 1 условию. Цикл завершающийся более чем по одному условию или не завершающийся ни по какому условию называется по другому. Только и всего. В Oberon это LOOP, WHILE, REPEAT, в Си циклы while/for/do-while — есть по сути модификации цикла LOOP, а циклов WHILE и REPEAT нету. (На всякий случай еще раз напоминаю о существующей разнице между завершением цикла и прерыванием цикла.)

    Сравните:
    WHILE отмерено меньше семи раз DO отмерять END;
    Отрезать (* Режем не делая более ни каких проверок *)

    REPEAT узнавать где брод DO узнал END
    Соваться в воду (* Суемся в воду не делая более ни каких проверок *)

    и
    LOOP
      ...
      IF отмерено как минимум семь раз THEN EXIT END;
      ...
      IF узнал где брод THEN EXIT END;
      ...
    END;
    Что здесь делать, соваться в воду или Отрезать?
    А может и отрезать и сунуться? 
    А может на всякий случай и не соваться и не отрезать?
    Re[14]: Определение циклов
    От: Sergey J. A. Беларусь  
    Дата: 27.06.05 14:44
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    SJA>>Но терминология не так интересна. Меня больше интересует как спастись от "index out of range" например ? Перехватить нельзя.... Что ж делать то ???


    СГ>А что делать когда в Си происходит buffer overflow и ни каких exception при этом нет (программа хромает дальше пока совсем не скопытится)?


    Мы всё-ж о Оброне говорим. Не так-ли ?

    СГ>Ответ: Надо писать правильные программы.


    Ну да ? Ну вот дали вам модуль проверки орфографии. Без исходников. Вы написали текстовый редактор, привинтили модуль. И тут обнаружили, что фраза "Правоспособность-способность лица иметь гражданские права и нести обязанности" вызывает исключение. Думаю пользователь не очень то образуется, если результаты его часовой работы будут потеряны.
    Ваше решение ? (разумеется программа написана на обероне).
    Я — свихнувшееся сознание Джо.
    Re[8]: Идеологически правильный мегарулез
    От: Sergey J. A. Беларусь  
    Дата: 27.06.05 15:43
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Sergey J. A., Вы писали:


    SJA>>Короче, это уже не смешно.

    SJA>>На всякий случай, напомню, что EXIT может выбросить из WHILE или REPEAT по совершенно другому условию, если WHILE находится внутри LOOP.

    СГ>Существует разница между завершением и прерыванием цикла.


    СГ>EXIT — завершает цикл LOOP, но прерывает вложенные в LOOP другие циклы навроде WHILE/REPEAT

    Ну в таком случае считайте, что в С циклы while/for/do-while это синтаксический сахар над WHILE:

    LOOP
        WHILE cond DO
            action;
        END;
        EXIT;
    END;

    эквивалентен
    while(cond) action();


    Вот. Теперь посчитаем ! 6 строк против 1 в С ! 6.1 = 600%
    Ну о каком оверхеде в С можно вообще говорить ?
    Чтобы выйти по EXIT из while, столько нужно городить !

    Иначе говоря, если нужно программеру выйти из WHILE (а это часто нужно), то в обероне ему придется дописать 3 строки + условие и EXIT. В С только условие и break. Как видим оберон бъёт по рукам любителям брейков только неудобным синтаксисом. А поскольку break более полезен, чем вреден то непонятно, доколе в обероне будет такой неудобный синтаксис.


    СГ>Поэтому следующий код корректен

    СГ>
    СГ>WHILE отмерено меньше семи раз DO отмерять END;
    СГ>Отрезать (* Режем не делая более ни каких проверок.  Мы уже не спрашиваем можно ли отрезать, а просто режем!!! *)
    СГ>


    Вот пжалста:
    LOOP
        WHILE отмерено меньше семи раз DO
            отмерять;
            IF чего-то THEN EXIT;
        END;
        EXIT;
    END;
    Отрезать (* Всё-таки проверка нужна... Вдруг кто-то решит улучшить WHILE ещё одним выходом *)
    Я — свихнувшееся сознание Джо.
    Re[24]: Яркий пример
    От: Пацак Россия  
    Дата: 27.06.05 17:32
    Оценка: :)
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Гениальная идея. Только, тогда придется кроме VAR ... END еще сделать TYPE ... END, и еще CONST ... END.


    Во-первых не вижу препятствий — чем не пожертвуешь ради избавления от ненавистного BEGIN'а! Правда со звездочками может наладка получиться — чередоваться перестанут, мерзавки. Ну тогда есть другая возможность — объявить конструкцию TYPE ... CONST ... VAR ... END составной и начать дико гордиться тем, что она имеет всего один завершающий END.

    СГ>Потом впомнить, что процедуры могут быть вложеными...


    ... циклы, впрочем, тоже — и ничего, обходятся без BEGIN'ов.

    СГ>У меня есть другая идея. Лично я бы вместо слова BEGIN выбрал бы слово CODE

    ....
    СГ>Аналогично для тела инициализации модуля. Вот тогда слово BEGIN исчезло бы вовсе.

    Отличная идея! И как это Вирт ее прощелкал! Я бы даже дальше пошел — заменил бы слово END на слово э-э-э... скажем FINISH, после чего с радостью декларировал бы отсутствие в языке и BEGIN'ов и END'ов.

    СГ>Блоки # тело.


    Блок == группа инструкций компилятору. В этом смысле BEGIN END из объявления процедуры — вполне себе блок. То, что он оформлен в виде отдельной процедуры — дело восемнадцатое.
    Ку...
    Re[7]: FOR
    От: Cyberax Марс  
    Дата: 28.06.05 03:53
    Оценка: :)
    Кодт wrote:

    > C>"Новые процессоры Intell Pentium 3647 такие быстрые, что выполняют

    > C>бесконечный цикл всего за 6 секунд!" (с) анекдот.
    > Кстати, интересно: как /должен/ отреагировать пень с предсказанием на
    > такой код
    >
    >@@infinite: jmp @@infinite
    >
    Как все уважающие себя процессоры — повиснуть до прихода прерываний.

    Я помню, что Винда 9х намертво вешалась от:
    cli
    f: jmp f


    А Винду 95 можно было повесить даже:
    cli
    hlt


    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[11]: Синтаксический оверхед - Новая порция
    От: Cyberax Марс  
    Дата: 28.06.05 05:01
    Оценка: +1
    faulx wrote:

    > S>Тогда бы он, возможно, назывался по другому.

    > Объясните все-таки, как из написания или значения слова delete следует
    > отсутствие у оператора delete возвращаемого значения?

    Вам это по-моему уже раза два сказали. Но раз уж вам так хочется, то вот
    мой подарок:
    template<class T> bool destruct(T *ptr)
    {
        delete ptr;
        return true;
    }

    Теперь лучше?

    > Все неправы, один Страуструп прав? Глагол подходит потому, что


    Кто "все"? Может один только faulx?

    > 1. Обозначает действие, которое в данном случае и производится —

    > создание объекта.

    new — это _выражение_, возвращающее новый объект. delete — это
    _оператор_, уничтожающий объект по указателю.

    > 2. Обладает противоположным смыслом с обратным действием — разрушением

    > (удалением) объекта, которое тоже обозначается глаголом.
    > Интересно, если бы "левая пятка Страуструпа" захотела создавать
    > объекты ключевым словом "green" (а что, новый, еще "зеленый" объект),
    > а удалять, скажем, "explode", этому бы тоже отыскали глубокое
    > идеологическое обоснование?

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

    В отличие от Виртовских поделок процесс разработки С++ открыт и публичен.

    ЗЫ: как смешно читать нападки на С++ Каждый раз находятся либо
    абсолютно мелочные моменты, которые никто и не замечает, либо заезженные
    "висячие указатели"/утечки памяти/...

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[7]: Идеологически правильный мегарулез
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.06.05 08:39
    Оценка: -1
    Здравствуйте, Пацак, Вы писали:

    П>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Циклом WHILE или REPEAT называется цикл, который может завершиться только по 1 условию.


    П>Если не сложно, подсчитайте, пожалуйста, количество условий, по которым может завершиться внутренние WHILE и UNTIL здесь
    Автор: Сергей Губанов
    Дата: 24.06.05
    .


    Завершится только по одному, прерваться — другой вопрос.
    Re[15]: Синтаксический оверхед - Новая порция
    От: Amidlokos Россия  
    Дата: 28.06.05 09:48
    Оценка: :)
    Здравствуйте, faulx, Вы писали:

    F>А зачем возвращают значения close() и IUnknown::Release()? А доказательства, что невозврат значения как-то связан с названием оператора удаления объекта, мне не дождаться?


    Кто сказал, что вызов close() будет удачным?

    И уж простите меня, КТО вам сказал, что Release() удаляет объект?! Этот кто-то врал и не краснел. См. MSDN.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[10]: Идеологически правильный мегарулез
    От: Privalov  
    Дата: 28.06.05 10:00
    Оценка: :)
    Здравствуйте, Mr. None, Вы писали:

    К>>Мсье неслабый специалист по сферическим коням в вакууме


    MN>Я бы даже сказал — главный на RSDN`е...


    Может, отдельный форум создать? Специально для выпаса этих лошадок.
    Re[12]: Народ упорно не врубается
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 28.06.05 10:12
    Оценка: :)
    Здравствуйте, Privalov, Вы писали:

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


    К>>>Эх, вот бы эту энергию и на благо человечества


    BC>>Баян! Я первый эту фразу сказал


    P>Кто бы ни сказал, должного эффекта она не возымела...


    P>Само последнее сочинение — нехилый баян в рамках топика.


    Баянами будем меряться?
    Re[9]: Народ упорно не врубается
    От: Privalov  
    Дата: 28.06.05 10:12
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Понимаете? break и goto на конец цикла while тоже ЗАВЕРШАЮТ его, а вовсе не прерывают. После этого начинает выполняться СЛЕДУЮЩАЯ после цикла инструкция. И она не может наперед знать причину завершения цикла, а должна ее динамически узнавать.


    Примерно так ищется первый отрицательный элемент:

      for (i = 0; i < SIZE; i++)
      {
         if (a[i] < 0) 
            break;
      }
      if (i == SIZE)  // Не найден.
       ......
      else
       =========      // Найден.
       ......


    И что, опять нельзя узнать?
    Re[10]: Народ упорно не врубается
    От: Privalov  
    Дата: 28.06.05 10:21
    Оценка: +1
    Здравствуйте, Mamut, Вы писали:

    M>А в Обероне единственный плюс от LOOP'a — это возможность выйти из нескольких вложенный циклов сразу.


    ...который обернется нехилым минусом, если промахнуться с количеством циклов, из которых нужно выйти сразу.
    Re[10]: Идеологически правильный мегарулез
    От: Кодт Россия  
    Дата: 28.06.05 10:39
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Пацак, Вы писали:


    СГ>!(a < 10) — ЗАВЕРШАЕТ

    СГ>break — ЗАВЕРШАЕТ!!!!!!!!!!!!!!!!!!!!!!!!!
    СГ>goto на конец — ЗАВЕРШАЕТ

    СГ>return — ПРЕРЫВАЕТ

    СГ>throw куда подальше — ПРЕРЫВАЕТ
    СГ>goto куда подальше — ПРЕРЫВАЕТ
    СГ>assert — ПРЕРЫВАЕТ

    "И незачем так орать" (Кролик).

    В чём разница между завершением и прерыванием (в данном контексте)?

    Так или иначе, если выполнение цикла останавливается, мы покидаем тело цикла штатным способом, оказываясь в предсказуемой точке программы и в предсказуемом же состоянии (т.е. можно говорить о пост-условиях и инвариантах) — то мы имеем дело с завершением.
    Поэтому
    — ложное условие цикла
    — break, return, goto за пределы тела
    завершают.
    return, вдобавок ко всему, завершает процедуру.

    А вот throw и assert — действительно, прерывают (потому что из контекста невозможно предсказать дальнейшие действия).

    Впрочем, если рассматривать исключения как "теневую систему типов", то throw тоже является способом завершения.
    Перекуём баги на фичи!
    Re[16]: Народ упорно не врубается
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 28.06.05 14:33
    Оценка: :)
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Здравствуйте, Курилка, Вы писали:


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


    SJA>>>Я бы даже сказал, структурный подход к лечению


    К>>А лечение будет иметь точки прерывания или завершения? И сколько?


    SJA>Лечение не будет иметь выхода, кроме как через полное излечение.


    Да здравствует истинно структурное лечение
    Re[7]: FOR
    От: Пацак Россия  
    Дата: 28.06.05 20:50
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    П>> То есть вычислить шаг цикла в рантайме я не могу?

    СГ>В FOR — нет. Это, видимо, предусмотрено для возможной оптимизации. Иначе FOR ну вообще бы ни чем не отличался от WHILE. А зачем в точности дублировать то что и так уже есть? Используйте WHILE...

    ... а если цикл надо прервать посередке — то LOOP. В общем есть только LOOP и оберон — пророк его. Итого простенькая запись

    for (i = 0; i < max_level; i += step) {
        sound_level(i);
    }


    реализуется сперва вот так:

    {O-o-ops! Пользователь забыл сказать нам, что хочет регулировать нарастание звука
    и мы приняли step за константу}
    FOR i := 0 TO MAX_LEVEL BY step DO 
        sound_level(i);
    END


    потом превращается сперва в такого вот гадкого утенка:

    {вся разница лишь в том, что step больше не константа.}
    step := get_step();
    i := 0;
    WHILE i < max_level DO
        sound_level(i);
        i := i + step;
    END


    ... а затем, когда юзера осеняет, что он к тому же хочет иногда вручную прерывать звучание на середине — в совсем уж что-то непохожее:

    step := get_step();
    i := 0;
    LOOP 
        IF i >= max_level THEN EXIT END;
        sound_level(i);
        i := i + step;
        IF manual_interrupt() THEN EXIT END;
    END


    ... при том, что в C++ все то же самое решится дописыванием двух строчек в исходный код:

    step := get_step();
    for (i = 0; i < max_level; i += step) {
        sound_level(i);
        if (manual_interrupt()) break;
    }


    Да, удобная штука оберон, ничего не скажешь!
    Ку...
    Re[22]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 29.06.05 03:08
    Оценка: -1
    Здравствуйте, Трурль, Вы писали:

    F>>
    F>>let a = OpenFile()
    F>>


    F>>Нормально.

    Т>Пусть a означает "открыть файл"?

    Это практически дословный перевод вашей фразы на Бейсик (или, если угодно, на ML). Впрочем, в Бейсике let, кажется, можно опустить.
    Re[13]: Идеологически правильный мегарулез
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.06.05 08:58
    Оценка: :)
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Да не. break прерывает, а не завершает. Он так и переводится — прервать.


    Термины "завершение цикла" и "прерывание цикла" я полностью объяснил в своем сообщении
    Автор: Сергей Губанов
    Дата: 28.06.05
    .

    Согласен, что выбрал не очень подходящее слово для обозначения смысла того что я назвал там термином "прерывание цикла". Более правильного по смыслу слова я тогда не придумал. Впрочем, не придумал и сейчас.

    Если Вам хочется пользоваться буквальным переводом слова break, то понимайте под ним прерывание текущей итерации и завершение цикла.
    Re[14]: Идеологически правильный мегарулез
    От: Mamut Швеция http://dmitriid.com
    Дата: 29.06.05 09:09
    Оценка: +1
    СГ>Термины "завершение цикла" и "прерывание цикла" я полностью объяснил в своем сообщении
    Автор: Сергей Губанов
    Дата: 28.06.05
    .


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


    dmitriid.comGitHubLinkedIn
    Re[9]: FOR
    От: Пацак Россия  
    Дата: 29.06.05 09:22
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Вы забыли проверить истинность выражения "step > 0"


    Без разницы, суть дела от этого сильно не изменится — в C++ я дописываю код, в обероне — переписываю его.

    СГ>
    {скип}
    СГ>  REPEAT SoundLevel(i); INC(i, step) UNTIL (i >= maxLevel) OR ManualInterrupt()
    СГ>END
    СГ>


    Ма-а-аленькая тонкость. Если в моем коде maxLevel изначально = 0 (звук выключен), то цикл не выполнится ни разу. В вашем — выполнится один раз. То есть мы наблюдаем очередную подмену понятий.

    ЗЫ По сути возразить нечего?
    Ку...
    Re[13]: Идеологически правильный мегарулез
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.06.05 09:32
    Оценка: -1
    Здравствуйте, Пацак, Вы писали:

    П>после окончания (не суть важно — "завершения" или "прерывания")


    В своем сообщении я показал как раз обратное — важно!
    Re[11]: FOR
    От: Пацак Россия  
    Дата: 29.06.05 09:48
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>и увидеть сделанную в начале проверку "maxLevel > i0", то цикл тоже не выполнится ни разу.


    Да, виноват, не заметил. Кстати прекрасная иллюстрация к читабельности обероновского кода: в C++овском for это синтактически подразумевалось алгоритмом работы самого цикла и лишний огород из IFов городить не пришлось бы. Здесь — увы, и не пахнет ни лаконизмом, ни удобством.
    Ку...
    Re[18]: Идеологически правильный мегарулез
    От: jazzer Россия Skype: enerjazzer
    Дата: 29.06.05 15:27
    Оценка: +1
    Здравствуйте, Mr. None, Вы писали:

    J>>Потому что этот класс — не POD-тип, так как имеет определенный пользователем конструктор.

    MN>Не конструктор, а деструктор ;) . Наличие конструктора не превращает класс в POD-тип:

    Ты хотел сказать, в не-POD-тип? :)

    MN>Стандарт, 9.4
    MN>...A POD-struct is an aggregate class that has no nonstatic data members of type pointer to member, non-POD-struct,
    MN>non-POD-union (or array of such types) or reference, and has no userdefined copy assignment operator and no userdefined destructor...


    Превращает.

    Стандарт, 8.5.1/1
    An aggregate is an array or a class (clause 9) with no user-declared constructors (12.1), no private or protected
    non-static data members (clause 11), no base classes (clause 10), and no virtual functions (10.3).

    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[26]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 30.06.05 04:10
    Оценка: :)
    Здравствуйте, Дарней, Вы писали:

    F>>А что, ключ реестра — это объект ядра?


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


    Там не HANDLE, а HKEY. И ключ реестра — не объект ядра. Видимо, функции для работы с объектами ядра контролировала другая группа разработчиков. А может быть, одна и та же, и названия специально сделали разными, чтобы не путаться.
    Re[23]: Синтаксический оверхед - Новая порция
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 30.06.05 04:52
    Оценка: :)
    Здравствуйте, faulx, Вы писали:

    F>Вам что, жалко? Паттернов, конечно, много, но тот, о котором мы говорим, описывается простой схемой: произвести действие, в результате которого в наше распоряжение поступит объект (это может произойти в результате CreateInstance(), IConnection.CreateCommand(), AddRef() и еще кучи других), поработать с ним, после чего произвести действие, в результате которого система, с которой мы работаем (в данном случае COM) будет считать, что эта "единица владения" объектом (в случае COM реализованная как счетчик ссылок) нам больше не нужна. Эти два действия описываются глаголами, противоположными по смыслу. Мои тезисы подтверждаются.


    Я боюсь, что если для тебя глагол "Создать экземпляр" является антонимом глаголу "Отпустить", то дальше дискутировать не о чем.
    F>По крайней мере они обозначаются глаголами с более-менее противоположным смыслом. Хотя, конечно в паре AddRef/Release шероховатость есть (Release() можно было бы назвать RemoveRef() или UnRef()), тем не менее, она гораздо меньше, чем в паре new/delete.
    Еще раз: new является аналогом CreateInstance в том смысле, что может включать в себя скрытый вызов чего-то с функциональностью create. А может и не включать, если аллокатор ничего не создает, а возвращает готовый объект — главное, чтобы он был новым в том смысле, который заложен в него разработчиком.
    F>Приведите, пожалуйста, примеры, когда действие обозначается предлогом, причем это очевидно и не вызывает отторжения. Аналогично для наречия.
    MyObject as IInterface

    Это выражение включает в себя вызов действия QueryInterface, который в свою очередь может повлечь создание агрегированного объекта, если используется схема инициализации по требованию. Тем не менее, никакого отторжения не происходит.
    Остальное оставляю в качестве упражнения — мне еще и работать иногда надо.
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[30]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 30.06.05 07:34
    Оценка: :)
    Здравствуйте, Дарней, Вы писали:

    Д>Что характерно, в этом списке есть

    Д>1. Функции, которые начинаются с Open (и которые действительно открывают! )
    Д>2. Типы, отличные от HANDLE

    Д>Ну и что ты этим доказал?


    Нелегкий путь, по которому двигалась разработка WinAPI

    Я же не говорил, что WinAPI — это идеал. Если бы беспорядок в именах был его единственным недостатком, это было бы просто прекрасно.
    Re[20]: Идеологически правильный мегарулез
    От: jazzer Россия Skype: enerjazzer
    Дата: 30.06.05 07:36
    Оценка: +1
    Здравствуйте, Mr. None, Вы писали:

    Стандарт, 9/4
    ...A POD-struct is an aggregate class that has no nonstatic data members of type pointer to member, non-POD-struct,
    non-POD-union (or array of such types) or reference, and has no userdefined copy assignment operator and no userdefined destructor...

    Стандарт, 8.5.1/1
    An aggregate is an array or a class (clause 9) with no user-declared constructors (12.1), no private or protected non-static data members (clause 11), no base classes (clause 10), and no virtual functions (10.3).


    MN>Странно... выходит если я добавлю закрытое поле — это уже будет не-POD-тип... Ну ладно — комитету по стндартизации виднее...


    Это будет не агрегат, а POD-тип — это обязательно агрегат.
    А почему наложено ограничение на агрегат — тоже понятно: ведь агрегаты можно инициализировать через = {...}, а закрытые/защищенные члены так инициализировать нельзя по принципиальным соображениям, согласен?

    MN>Но конкретно в данном случае (goto через определение) студия реагирует ошибкой именно на деструктор — конструктор ей по барабану, на него она реагирует предупреждением...


    Ну, студия... :)
    Ведь наличие конструктора — это предоставление языком гарантий, что объект класса не может быть инициализирован иначе, чем через вызов этого конструктора, что идеологии POD никак не соответствует.
    Просто для чего чаще всего нужны поды? Чтобы можно было без проблем делать memmove и прочие бинарные вещи, а при memmove ты фактически получаешь доступ к закрытым/защищенным членам, а язык, по идее, должен давать гарантии, что ты никак извне к ним доступа не получишь, если сам класс этого явно не захочет.

    P.S. Из чего следует финт ушами: если класс, удовлетворяющий требованиям POD, за исключением наличия закрытых/защищенных членов, объявляет кого-либо другом, то он должен вести себя по отношению к нему как POD :)
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re: Синтаксический оверхед
    От: zuv  
    Дата: 08.07.05 10:21
    Оценка: :)
    А может стоит этот топик в отдельный форум превратить?
    ... << RSDN@Home 1.1.4 beta 4 rev. 358>>
    Re[11]: Очередной яркий пример
    От: fddima  
    Дата: 26.07.05 12:49
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Нету их и на картинке.

    Большими крупными синими буквами написано
    ... << RSDN@Home 1.2.0 alpha rev. 569>>
    Re[14]: Очередной яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.07.05 12:40
    Оценка: :)
    Здравствуйте, Курилка, Вы писали:

    К> Сергей, а вы не пробовали подсчитать оверхэд больших букв над маленькими?


    Лексикой я не занимался, только синтаксисом.
    С точки зрения синтаксиса любая лексема рассматривается как один знак, не зависимо от того из скольки и каких именно букв она реально состоит.

    Лексический оверхед подсчитывать особого смысла нет, ведь всегда можно создать такой текстовый редактор, в котором лексемы представлялись бы в виде одного иероглифа. Например, в системе Mathematica лексемы "не равно" (#8800), "принадлежит" (#8712), "больше или равно" (#8805), "сумма" (#8721) и т.д. отображаются соответствующими значками как это принято в математической литературе.
    Re: почитал - много думал
    От: alzt  
    Дата: 25.12.07 18:31
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    ...

    Не совсем понял — шутка это или нет, поэтому поставил смайлик и минус.

    Непонятно — кому всё это надо? Я читал ваше сообщение, что вы будете ссылаться на этот пост, но это вообще смешно, аргументации это вашим словам не прибавит.

    Да и примеров слишком мало. Взяли откуда-то стандарт форматирования на Си и сравнили с простейшими вариантами.
    С таким подходом можно доказать, что С++ или Java ни на что не годны, т.к. там есть классы и соответственно надо писать их названия. А для С++ для всех вынесенных методов надо явно указывать класс, к которому они принадлежат.

    Мне больше нравится подход Максвелла. Когда для каждого серьёзного заявления (например, что лучше объявлять переменную непосредственно перед использованием) приводятся ссылки на серьёзные исследования большого количества больших и маленьких проектов.
    Re[2]: Ошибка 2
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 09.06.05 10:27
    Оценка:
    Здравствуйте, Sergey, Вы писали:

    S> в паскалевском пиши


    Синтаксис языка Паскаль устарел более чем 25 лет тому назад и он мало чем в этом смысле отличается от Си-образного сиснтаксиса "begin" = "{", "end" = "}". То есть синтаксис Си тоже устарел более чем 25 лет тому назад.

    Приведенный мной синтаксис есть синтаксис языков Modula/Oberon (используется с середины 1970-тых годов).
    Re[3]: Ошибка
    От: Sergey Россия  
    Дата: 09.06.05 10:28
    Оценка:
    Hello, Сергей!
    You wrote on Thu, 09 Jun 2005 10:05:56 GMT:

    СГ> Упомянутый Вами синтаксис устарел более чем двадцать пять лет тому

    СГ> назад.

    СГ> Где-то в середине 1970-тых годов был открыт реально необходимый и

    СГ> достаточный синтаксис (Modula-2, 1979 год)
     СГ> WHILE a DO x; y; z END
     СГ>

    СГ> Обратите внимание: слово "BEGIN" отсутствует вообще во всех инструкциях
    СГ> — оно лишнее.

    while (a) x, y, z;


    With best regards, Sergey.
    Posted via RSDN NNTP Server 1.9
    Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
    Re[2]: Синтаксический оверхед
    От: FDSC Россия consp11.github.io блог
    Дата: 09.06.05 11:14
    Оценка:
    Здравствуйте, tarkil, Вы писали:

    T>Берёшься сравнивать — сравнивай добросовестно. Мы технари, а не рекламисты. Imho.


    По моему, количество строчек не имеет значения — одно нажатие клавиши и схватывается код легче. Т.о. нужно сначала смотреть, что сравниваешь, а то и получаются рекламные приёмы.
    Re[6]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 09.06.05 11:19
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    P>Здравствуйте, Сергей Губанов, Вы писали:



    СГ>>Путаницы не возникает ни когда — любые две инструкции всегда разделяются разделителем.


    P>

    P>

    P>WHILE a DO x; y; z END
    P>


    P>То есть здесь z и END — одна инструкция?


    1) Можно ответить: Да! Семантика этой инструкции: "Выполнить z и перейти к началу цикла WHILE".
    2) Можно ответить: END — это не инструкция, а часть составной инструкции WHILE DO END, ведь инструкции бывают как простыми так и составными.

    Выбирайте что Вам больше нравится.


    P>Да, а что там с доказательством того что

    P>

    СГ>>Где-то в середине 1970-тых годов был открыт реально необходимый и достаточный синтаксис (Modula-2, 1979 год)

    P>действительно необходимый и достаточный?

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

    Вот смотрите, заменим все служебные слова на символ "*"
    REPEAT x UNTIL b                      = * x * b
    WHILE a DO x END                      = * a * x *
    IF a THEN x END                       = * a * x *
    IF a THEN x ELSE y END                = * a * x * y *
    IF a THEN x ELSIF b THEN y ELSE z END = * a * x * b * y * z *
    CASE n OF a: x | b: y ELSE z END      = * n * a * x * b * y * z *

    между каждой "пользовательской" лексемой стоит не более одной звездочки. Меньше одной звездочки поставить нельзя — мы договорились пробельные символы не перегружать. Значит минимум достигнут. А то что этого достаточно, следует из смысла рассматриваемых инструкций.
    Re[2]: Синтаксический оверхед: а смысл-то в чем?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 09.06.05 11:45
    Оценка:
    Здравствуйте, eao197, Вы писали:

    E>ИМХО: подобная критика не конструктивна.


    Если бы я просто сказал, что вот, в Си-образном синтаксисе используется больше лексем чем нужно, это было бы одно, а тут я сказал, что их используется не просто больше, а от двух до трех раз больше чем нужно. Привел числа. Даже среднее число вывел 235 процентов получил.

    E> Если тебе не нравится C/C++


    О языках, это совсем другая история. Я тут исключительно о синтаксисе. А на счет языков этих, так даже если бы был бы в них правильный синтаксис, то ...(а хотя ладно)...
    Re[3]: Синтаксический оверхед
    От: tarkil Россия http://5209.copi.ru/
    Дата: 09.06.05 11:51
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Совершенно согласен с тем, что шрифты семейсва Courier в заглавных буквах смотрятся не очень, а ведь именно они по умолчанию стоят в ряде популярных IDE. Однако, есть другие шрифты, например, Verdana — заглавные буквы выглядят очень красиво. Кстати, я у себя в MS Visual Studio 2003 поставил именно шрифт Verdana — совсем другой вид.


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

    Наверное, можно придумать особый шрифт для набора программ, где заглавные буквы будут иметь тот же вид, что и строчные, только крупнее... Но смысл?!
    --
    wbr, Peter Taran
    Re: Синтаксический оверхед
    От: Drago Россия  
    Дата: 09.06.05 12:00
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    [кусь]
    СГ>Программа записанная в Си-образном синтаксисе содержит в разы, а не на проценты больше лексем и строчек кода чем это реально необходимо. Спрашивается, и как долго этот синтаксис еще будет существовать?

    Rfr бы я ни любил Паскаль, и как бы я неприязненно не относился к С, должен сказать, что в данном примере Pascal-style код зря написан в одну строку. для читабельности это также разносится на несколько строк. имхо. в остальном — согласен. хотя это конечно дело вкуса
    Re[7]: *
    От: Privalov  
    Дата: 09.06.05 12:13
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    P>>

    P>>

    P>>WHILE a DO x; y; z END
    P>>


    P>>То есть здесь z и END — одна инструкция?


    СГ>1) Можно ответить: Да! Семантика этой инструкции: "Выполнить z и перейти к началу цикла WHILE".

    СГ>2) Можно ответить: END — это не инструкция, а часть составной инструкции WHILE DO END, ведь инструкции бывают как простыми так и составными.

    x тоже часть составной инструкции, однако ";" после нее стоит.

    СГ>Выбирайте что Вам больше нравится.


    Мне нравится, когда ";" является частью инструкции, а не разделителем между ними.

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


    СГ>Вот смотрите, заменим все служебные слова на символ "*"

    СГ>
    СГ>REPEAT x UNTIL b                      = * x * b
    СГ>WHILE a DO x END                      = * a * x *
    СГ>IF a THEN x END                       = * a * x *
    СГ>IF a THEN x ELSE y END                = * a * x * y *
    СГ>IF a THEN x ELSIF b THEN y ELSE z END = * a * x * b * y * z *
    СГ>CASE n OF a: x | b: y ELSE z END      = * n * a * x * b * y * z *
    СГ>

    СГ>между каждой "пользовательской" лексемой стоит не более одной звездочки. Меньше одной звездочки поставить нельзя — мы договорились пробельные символы не перегружать. Значит минимум достигнут. А то что этого достаточно, следует из смысла рассматриваемых инструкций.

    Вместо REPEAT можно использовать WHILE, а вместо CASE — IF / ELSEIF / ELSE /END. Потому их можно выбросить => необходимость не доказана. О достаточности я пока молчу.
    Re[2]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 09.06.05 12:13
    Оценка:
    Здравствуйте, Drago, Вы писали:

    D>Здравствуйте, Сергей Губанов, Вы писали:


    D>[кусь]

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

    D>Rfr бы я ни любил Паскаль, и как бы я неприязненно не относился к С, должен сказать, что в данном примере Pascal-style код зря написан в одну строку. для читабельности это также разносится на несколько строк. имхо. в остальном — согласен. хотя это конечно дело вкуса


    Не Паскаль это, а Modula/Oberon.
    Если текст короткий, то он пишется в одну строчку, а если длинный, то естественно в несколько строчек.

    Кроткий:
    IF a THEN x ELSE y END

    Длинный:
    IF aabababbabababababbaba THEN 
      xqwghcqhbwehqhgwbehjbdcqkjwbefkycgvrqe(wkjehfjke, kwfbwer, kwefb)
    ELSE
      yjwejhdbwjebdhwwhjebhbweb(wefbuiweicfuiuwbnceu, wibecibweibciwwe) 
    END
    Re[8]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 09.06.05 12:27
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    P>Вместо REPEAT можно использовать WHILE, а вместо CASE — IF / ELSEIF / ELSE /END. Потому их можно выбросить => необходимость не доказана. О достаточности я пока молчу.


    Замена REPEAT на WHILE — семантика, а речь сейчас идет исключительно о синтаксисе.

    В выражениях:
    * x * b
    * a * x *
    * a * x *
    * a * x * y *
    * a * x * b * y * z *
    * n * a * x * b * y * z *

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

    Сравните с Си-образным синтаксисом:
    if(a){x();}else{y();} = * * a * * x * * * * * * y * * * *

    тут 10 лишних звездочек
    Re[4]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 09.06.05 12:33
    Оценка:
    Здравствуйте, Drago, Вы писали:

    D>Modula — предтеча Pascal


    Скажете тоже

    Pascal 1970 ---> Modula-2 1979 ---> Oberon 1987 ---> Oberon-2 1992 ---> ...
    Re[5]: Синтаксический оверхед
    От: Drago Россия  
    Дата: 09.06.05 13:49
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Скажете тоже


    СГ>Pascal 1970 ---> Modula-2 1979 ---> Oberon 1987 ---> Oberon-2 1992 ---> ...

    ок, я ошибся. но результат (сиречь мое мненипе) от этого не поменялся. и вааще — предлагаю переместить это в Священные войны
    Re: Синтаксический оверхед
    От: viellsky  
    Дата: 09.06.05 14:01
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.

    СГ>2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо (чтобы читающему понятно стало где что написано).

    СГ>Давайте посчитаем количественно этот перерасход?

    СГ>Хочется понять на сколько он "минимален", так сказать.

    СГ>
  • Усредненные результаты

    СГ>Просто усреднённый синтаксический оверхед составляет:

    СГ>(2.00 + 2.00 + 3.00 + 2.00 + 2.43 + 2.73 + 2.31) / 7 = 2.35

    СГ>Просто усреднённый перерасход строчек кода составляет:

    СГ>(4.00 + 2.00 + 5.00 + 4.00 + 8.00 + 15.0 + 11.0) / 7 = 7.00

    СГ>
  • Резюме

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


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


    А то, что Вы привели в качестве примера кода — жалкий академизм, не имеющий ничего общего с реальной программой, на которую вы ссылаетесь в "резюме".
  • Re[10]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 09.06.05 14:19
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    P>

    P>

    P>IF a THEN x ELSIF b THEN y ELSE z END = * a * x * b * y * z *
    P>


    P>А что, в Оберонах внутри IF только одиночный оператор ставится, даже функцию нельзя вызвать, а тем более параметры ей передать? Все веселее становится.


    Представьте себе — можно!

    Более того, в процитированном Вами примере вызвается три процедуры x, y и z.
    Re[2]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 09.06.05 14:27
    Оценка:
    Здравствуйте, viellsky, Вы писали:

    V> небольшие проценты.


    Вопрос
    Сколько процентов можно считать небольшим числом?

    Правильный ответ
    Только ноль.
    Re[3]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 09.06.05 14:38
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Сколько процентов можно считать небольшим числом?

    СГ>Только ноль.

    Полностью согласен! Можно посмотреть на обероновский аналог этой строчки:

    while (x = a() ? b(k[i++]) : c(l[j--]) ) d(x);


    ... и сравнить оверхед?
    Ку...
    Re[9]: *
    От: Maniacal Россия  
    Дата: 09.06.05 14:43
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Сравните с Си-образным синтаксисом:

    СГ>
    СГ>if(a){x();}else{y();} = * * a * * x * * * * * * y * * * *
    СГ>

    СГ>тут 10 лишних звездочек

    А

    if (a) x(); else y();

    не устраивает?
    Re: Синтаксический оверхед
    От: Oleg Volkov  
    Дата: 09.06.05 16:00
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    Провокатор
    Re[2]: Синтаксический оверхед
    От: Кодёнок  
    Дата: 10.06.05 05:33
    Оценка:
    СГ>>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.

    R3>Первый раз в жизни, читая юмор с утра, было так грустно.

    R3>В игнор тему.

    Тьфу-тьфу, вам не кажется, что проект Оберон и его потомки плохо влияет на людей
    Re: Синтаксический оверхед
    От: ForestLabs Россия  
    Дата: 10.06.05 06:40
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.


    Гы. Был такой язык российского разлива — Ямб.
    Дык в нем циклы писались так:
    (что-то в цикле)3
    Т.е. в примере выполнить цикл 3 раза. Ну лаконичнее некуда.
    Re[3]: Синтаксический оверхед
    От: Socrat Россия  
    Дата: 10.06.05 06:43
    Оценка:
    Здравствуйте, moudrick, Вы писали:


    S>>
    S>>func (param1, param2, param3, param4, expr? param5: param6);
    S>>


    M>Не пишите такой код ни на каком объектном языке.

    M>Напрашивается паттерн "Граничный объект" (Introduce Parameter Object)
    M>здесь


    Есть группа параметров, естественным образом связанных друг с другом. Замените их объектом.


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

    Взять_взаймы (человек1.деньги > человек2.деньги? человек1: человек2);


    Какой тут можно сделать объект?
    Re[10]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 06:50
    Оценка:
    Здравствуйте, Maniacal, Вы писали:

    M>if (a) x(); else y();

    M>не устраивает?

    Меня — вполне, а вот пацанов из соседней комнаты сопровождающих международный проект заставляют писать {} в любом случае и на новой строке, ссылаясь на общепринятый coding style.

    P. S.
    if ( a ) x ( ) ; else y ( ) ;
    *  * a * x * * *  *   y * * *

    6 лишних звездочек
    Re[4]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 10.06.05 06:59
    Оценка:
    Здравствуйте, Socrat, Вы писали:

    S>

    S>Есть группа параметров, естественным образом связанных друг с другом. Замените их объектом.

    S>А если объекты не связаны? Например, надо взять взаймы у одного из двух человек, у кого денег больше:
    S>
    S>Взять_взаймы (человек1.деньги > человек2.деньги? человек1: человек2);
    S>


    А где здесь группа параметров? ИМХО один, но выбираемый в зависимости от условия.
    Ку...
    Re[5]: Синтаксический оверхед
    От: Socrat Россия  
    Дата: 10.06.05 07:03
    Оценка:
    Здравствуйте, Пацак, Вы писали:

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


    S>>

    S>>Есть группа параметров, естественным образом связанных друг с другом. Замените их объектом.

    S>>А если объекты не связаны? Например, надо взять взаймы у одного из двух человек, у кого денег больше:
    S>>
    S>>Взять_взаймы (человек1.деньги > человек2.деньги? человек1: человек2);
    S>>


    П>А где здесь группа параметров? ИМХО один, но выбираемый в зависимости от условия.


    Ну, можно еще добавить парочку... Например, сколько взять, когда отдать и т.д.
    Re[5]: Синтаксический оверхед
    От: Demiurg  
    Дата: 10.06.05 07:07
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    D>>Modula — предтеча Pascal


    СГ>Скажете тоже


    СГ>Pascal 1970 ---> Modula-2 1979 ---> Oberon 1987 ---> Oberon-2 1992 ---> ...


    Да паскаль он и в Африке паскаль.
    ... << RSDN@Home 1.1.4 beta 7 rev. 463>>
    Re[5]: Синтаксический оверхед: а смысл-то в чем?
    От: Demiurg  
    Дата: 10.06.05 07:10
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    E>>Да и вообще, чего мы мелочимся?


    СГ>Увы, 235 процентов — не мелочь.


    Но ведь ты не прав

    СГ>Серьмяжный смысл моего сообщения был в том, что теперь я могу ссылаться
    Автор: Сергей Губанов
    Дата: 09.06.05
    на это сообщение, а не голословно говорить, что Си-образный синтаксис использует больше лексем чем нужно.


    Ссылаться на бредовое сообщение? Ой, тогда извини... Ты так и не понял, что не прав?
    ... << RSDN@Home 1.1.4 beta 7 rev. 463>>
    Re[5]: Синтаксический оверхед
    От: Socrat Россия  
    Дата: 10.06.05 07:10
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    D>>Modula — предтеча Pascal


    СГ>Скажете тоже


    СГ>Pascal 1970 ---> Modula-2 1979 ---> Oberon 1987 ---> Oberon-2 1992 ---> ...


    Oberon возвращается ---> ...
    Re[2]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 07:14
    Оценка:
    Здравствуйте, ForestLabs, Вы писали:

    FL>Гы. Был такой язык российского разлива — Ямб.

    FL>Дык в нем циклы писались так:
    FL>(что-то в цикле)3
    FL>Т.е. в примере выполнить цикл 3 раза. Ну лаконичнее некуда.

    Согласен.
    Вопрос лишь, а что в нем было еще кроме циклов, ведь на все дела разных типов скобок не напасешься, не так ли?
    Re[7]: Синтаксический оверхед: а смысл-то в чем?
    От: moudrick Россия http://community.moudrick.net/
    Дата: 10.06.05 07:25
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    D>> Но ведь ты не прав

    D>> Ссылаться на бредовое сообщение? Ой, тогда извини... Ты так и не понял, что не прав?

    СГ>Да, не понял.


    СГ>Текст оформлен в согласии с общепринятым coding style. Служебные слова, скобочки, точки-запятые, посчитаны, надеюсь, без арифметических ошибок. Числа делил правда на калькуляторе, но наверное калькулятор всё-таки не ошибся. Так что всё вроде сделал правильно. Так что не так?


    Единственный разумный вывод из твоей "работы" — ты против использования coding-style в обероне, а так же недолюбливаешь с-подобный синтаксис.

    А все остальное — увы... тебе привели достаточно разумных аргументов, свидетельствующих о неправомерности резюме насчет "сколько еще будет существовать..."
    Re[6]: Синтаксический оверхед: а смысл-то в чем?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 07:27
    Оценка:
    Здравствуйте, Demiurg, Вы писали:

    D> Но ведь ты не прав


    Скажете что Си-образный синтаксис использует минимально возможное количество лексем? Тогда не правы будете Вы. Си-образный синтаксис использует вовсе не минимально возможное количество лексем, а гораздо больше — известны примеры трехкратного перерасхода. Не верите? А вот здесь
    Автор: Сергей Губанов
    Дата: 09.06.05
    ссылочка. Гляньте, там куча примеров перерасхода от двух до трех раз каждый.
    Re[5]: Синтаксический оверхед
    От: Socrat Россия  
    Дата: 10.06.05 07:33
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Пацак, Вы писали:


    П>>
    П>>while (x = a() ? b(k[i++]) : c(l[j--]) ) d(x);
    П>>


    СГ>А по ушам схлопотать за такой код, можно?


    По ушам схлопотать можно и без повода... А такой код тоже недопустим?

    while (*str1++ = *str2++);


    Действие этого кода вполне осмысленное — копирование строки (только не надо говорить, что в Обероне строки копируются встроенным оператором — это просто пример).
    Re[6]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 07:35
    Оценка:
    Здравствуйте, Socrat, Вы писали:

    S>По ушам схлопотать можно и без повода... А такой код тоже недопустим?

    S>
    S>while (*str1++ = *str2++);
    S>


    Оберон — есть "safe" язык со сборщиком мусора. Адресной арифметики там нет.
    Re[6]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 10.06.05 07:36
    Оценка:
    S>>>
    S>>>func (param1, param2, param3, param4, expr? param5: param6);
    S>>>


    M>>Не пишите такой код ни на каком объектном языке.

    M>>Напрашивается паттерн "Граничный объект" (Introduce Parameter Object)
    M>>здесь

    S>>>

    S>>>Есть группа параметров, естественным образом связанных друг с другом. Замените их объектом.

    S>>>А если объекты не связаны? Например, надо взять взаймы у одного из двух человек, у кого денег больше:
    S>>>
    S>>>Взять_взаймы (человек1.деньги > человек2.деньги? человек1: человек2);
    S>>>

    S>Какой тут можно сделать объект?

    Никакой. Здесь один параметр, который есть уже объект.

    Здесь напрашивается другой паттерн рефакторинга — Выделение переменной (Introduce Explaining Variable)
    здесь

    Человек уКогоЗанять  = человек1.деньги > человек2.деньги? человек1: человек2;
    Взять_взаймы (уКогоЗанять);


    П>>А где здесь группа параметров? ИМХО один, но выбираемый в зависимости от условия.


    S>Ну, можно еще добавить парочку... Например, сколько взять, когда отдать и т.д.


    Вот они то как раз и связаны естественным образом.
    Естественность образа хотя бы в том, что ты их передаешь параметром в один и тот же метод.
    Или ты пишешь НЕЕСТЕСТВЕННЫЕ методы?

    В нашем случае можно сделать так:
    Взять_взаймы (Человек уКогоЗанять, деньги сколькоВзять, дата когдаОтдать)
    {
       ...
    }
    ...
    Взять_взаймы (уКогоЗанять, сколькоВзять, когдаОтдать);


    заменить на

    class ЗаймИнфо
    {
        Человек УКогоЗанять;
        деньги СколькоВзять;  
        дата КогдаОтдать;
    }
    ...
    Взять_Взаймы(ЗаймИнфо займИнфо)
    {
       ...
    }
    ...
    ЗаймИнфо займ = new ЗаймИнфо();
    займ.УКогоЗанять  = человек1.деньги > человек2.деньги? человек1: человек2
    займ.СколькоВзять = сколькоВзять;
    займ.КогдаОтдать = когдаОтдать;
    Взять_взаймы (займ);

    А можно и оставить как есть. 3 параметра у метода — не очень страшно.
    4 — со скрипом терпимо. А вот 5 и более — это п-ц.
    За такой код можно и, как принято выражаться в этом бредовот треде, "по ушам схлопотать"

    Но... пошел офтоп, ибо это уже про рефакторинг, а не про бред.
    Но в бреду любой офтоп не страшен, поверьте
    Бред — он для этого и придуматый, для офтопов как раз.

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


    И вообще хватит херней заниматься. В игнор тему. А то заболею и умру
    от минимолексемной разновидности бредовой инфекции.
    Re[9]: Синтаксический оверхед: а смысл-то в чем?
    От: Socrat Россия  
    Дата: 10.06.05 07:37
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>>Единственный разумный вывод из твоей "работы" — ты против использования coding-style в обероне, а так же недолюбливаешь с-подобный синтаксис.


    СГ>coding-style относится к количеству строчек кода, а основной смысл был про количество лексем. Не зависимо от того какой применять coding-style, количество используемых лексем всё равно больше чем реально необходимо. Смысл заметки в том, что: СИ-ОБРАЗНЫЙ СИНТАКСИС ИСПОЛЬЗУЕТ БОЛЬШЕ ЛЕКСЕМ ЧЕМ ЭТО РЕАЛЬНО НЕОБХОДИМО. Я специально для Вас заглавными буквами написал смысл. Запомните его. А то, понимаете-ли, прочитали сообщение, а смысла так и не поняли.


    Дело не в количестве лексем, а в удобстве чтения. Меня, например, напрягает, что begin, end и пр. на вид практически неотличимы от идентификаторов (разве что цветом в редакторе).
    Re: Синтаксический оверхед
    От: Аноним  
    Дата: 10.06.05 07:40
    Оценка:
    Ты это... убери что-ли "кфмн" из профайла.
    Даже неудобно как-то читать подобные сообщения от человека со степенью.

    А вообще нет... Лучше пиши дальше.
    Начинай продвигать свои мысли в научные журналы
    и пробуй выступать на научных конференциях.
    Пусть не только RSDN повеселится
    Re[9]: Синтаксический оверхед: а смысл-то в чем?
    От: Alexey_ch Швейцария  
    Дата: 10.06.05 07:43
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Смысл заметки в том, что: СИ-ОБРАЗНЫЙ СИНТАКСИС ИСПОЛЬЗУЕТ БОЛЬШЕ ЛЕКСЕМ ЧЕМ ЭТО РЕАЛЬНО НЕОБХОДИМО.


    Выкинь все ненужное, напиши компилятор (или хотя бы парсер)
    Re[9]: Синтаксический оверхед: а смысл-то в чем?
    От: moudrick Россия http://community.moudrick.net/
    Дата: 10.06.05 07:44
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>>Единственный разумный вывод из твоей "работы" — ты против использования coding-style в обероне, а так же недолюбливаешь с-подобный синтаксис.


    СГ>coding-style относится к количеству строчек кода, а основной смысл был про количество лексем. Не зависимо от того какой применять coding-style, количество используемых лексем всё равно больше чем реально необходимо. Смысл заметки в том, что: СИ-ОБРАЗНЫЙ СИНТАКСИС ИСПОЛЬЗУЕТ БОЛЬШЕ ЛЕКСЕМ ЧЕМ ЭТО РЕАЛЬНО НЕОБХОДИМО. Я специально для Вас заглавными буквами написал смысл. Запомните его. А то, понимаете-ли, прочитали сообщение, а смысла так и не поняли.


    Поняли, поняли. Но...

    >Кроме того, иницыатор треда и тут наедет по перерасходу лексических средств языка...

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

    Смотри ниже по треду здесь
    Автор: moudrick
    Дата: 10.06.05
    Re[11]: Ошибка 3
    От: Socrat Россия  
    Дата: 10.06.05 07:45
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    S>>Меня, например, напрягает, что begin, end и пр. на вид практически неотличимы от идентификаторов (разве что цветом в редакторе).


    СГ>Спешу сообщить, что упомянутый Вами синтаксис c {begin, end} уже устарел, и сделал это более чем двадцать пять лет тому назад.


    СГ>Ошибка:

    СГ>http://www.rsdn.ru/Forum/Message.aspx?mid=1214592&amp;only=1
    Автор: Сергей Губанов
    Дата: 09.06.05


    СГ>Ошибка 2:

    СГ>http://www.rsdn.ru/Forum/Message.aspx?mid=1214676&amp;only=1
    Автор: Сергей Губанов
    Дата: 09.06.05


    Ну ладно, beginа нет, но есть end, do, then и пр.
    Re[7]: Синтаксический оверхед
    От: Socrat Россия  
    Дата: 10.06.05 07:45
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    S>>По ушам схлопотать можно и без повода... А такой код тоже недопустим?

    S>>
    S>>while (*str1++ = *str2++);
    S>>


    СГ>Оберон — есть "safe" язык со сборщиком мусора. Адресной арифметики там нет.


    Там мы дождемся перевода данного или похожего кода на Оберон?
    Re[2]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 10.06.05 07:50
    Оценка:
    Здравствуйте, Аноним, Вы писали:

    А>Ты это... убери что-ли "кфмн" из профайла.

    А>Даже неудобно как-то читать подобные сообщения от человека со степенью.

    А>А вообще нет... Лучше пиши дальше.

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

    Особенно будет весело, когда аффтар напишет ссылку на месагу в этом фолруме.
    А тот кто (маловероятное событие) дойдет до списка литературы и зайдет по ссылке,
    вот когда он повеселится. Грустно повеселится.

    Зря я это написал... теперь он сюда ссылку не поставит.
    Модератор, сотри месагу, пока аффтар не увидел
    Re[7]: Синтаксический оверхед
    От: Socrat Россия  
    Дата: 10.06.05 07:55
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    S>>>>А если объекты не связаны? Например, надо взять взаймы у одного из двух человек, у кого денег больше:

    S>>>>
    S>>>>Взять_взаймы (человек1.деньги > человек2.деньги? человек1: человек2);
    S>>>>

    S>>Какой тут можно сделать объект?

    M>Никакой. Здесь один параметр, который есть уже объект.


    M>Здесь напрашивается другой паттерн рефакторинга — Выделение переменной (Introduce Explaining Variable)

    M>здесь

    M>
    M>Человек уКогоЗанять  = человек1.деньги > человек2.деньги? человек1: человек2;
    M>Взять_взаймы (уКогоЗанять);
    M>


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

    П>>>А где здесь группа параметров? ИМХО один, но выбираемый в зависимости от условия.


    S>>Ну, можно еще добавить парочку... Например, сколько взять, когда отдать и т.д.


    M>Вот они то как раз и связаны естественным образом.

    M>Естественность образа хотя бы в том, что ты их передаешь параметром в один и тот же метод.
    M>Или ты пишешь НЕЕСТЕСТВЕННЫЕ методы?

    M>заменить на


    M>
    M>class ЗаймИнфо
    M>{
    M>    Человек УКогоЗанять;
    M>    деньги СколькоВзять;  
    M>    дата КогдаОтдать;
    M>}
    M>


    Для вызова одной-единственной функции создавать дополнительный объект? Как говорится, все хорошо в меру.


    M>А можно и оставить как есть. 3 параметра у метода — не очень страшно.

    M>4 — со скрипом терпимо. А вот 5 и более — это п-ц.
    M>За такой код можно и, как принято выражаться в этом бредовот треде, "по ушам схлопотать"

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

    M>Кроме того, иницыатор треда и тут наедет по перерасходу лексических средств языка...

    M>но он наверное никогда не писал реальных программ размера,
    M>достаточного для того, чтобы понять, что не "минимальным количкесвом лексем" единым живет
    M>реальное программирование.

    Согласен. Все средства хороши на маленьких программах.
    Re[8]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 10.06.05 08:07
    Оценка:
    Здравствуйте, Socrat, Вы писали:

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


    S>>>>>А если объекты не связаны? Например, надо взять взаймы у одного из двух человек, у кого денег больше:

    S>>>>>
    S>>>>>Взять_взаймы (человек1.деньги > человек2.деньги? человек1: человек2);
    S>>>>>

    S>>>Какой тут можно сделать объект?

    M>>Никакой. Здесь один параметр, который есть уже объект.


    M>>Здесь напрашивается другой паттерн рефакторинга — Выделение переменной (Introduce Explaining Variable)

    M>>здесь

    M>>
    M>>Человек уКогоЗанять  = человек1.деньги > человек2.деньги? человек1: человек2;
    M>>Взять_взаймы (уКогоЗанять);
    M>>


    S>А чем твой код отличается от моего? Только ввел дополнительную переменную и разделил на два оператора. В обероне будет еще хуже — там нет условных выражений.

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

    П>>>>А где здесь группа параметров? ИМХО один, но выбираемый в зависимости от условия.


    S>>>Ну, можно еще добавить парочку... Например, сколько взять, когда отдать и т.д.


    M>>Вот они то как раз и связаны естественным образом.

    M>>Естественность образа хотя бы в том, что ты их передаешь параметром в один и тот же метод.
    M>>Или ты пишешь НЕЕСТЕСТВЕННЫЕ методы?

    M>>заменить на


    M>>
    M>>class ЗаймИнфо
    M>>{
    M>>    Человек УКогоЗанять;
    M>>    деньги СколькоВзять;  
    M>>    дата КогдаОтдать;
    M>>}
    M>>


    S>Для вызова одной-единственной функции создавать дополнительный объект? Как говорится, все хорошо в меру.

    Все зависит от постановки и реализации задачи, а также человека, пишущего код.
    Например,

    M>>А можно и оставить как есть. 3 параметра у метода — не очень страшно.

    M>>4 — со скрипом терпимо. А вот 5 и более — это п-ц.
    M>>За такой код можно и, как принято выражаться в этом бредовот треде, "по ушам схлопотать"

    S>Согласен. Но я приводил тексты в качестве примера. Всегда можно придумать условия тестирования, когда то, что похуже выиграет у того, что получше. Этим автор топика и занимается.



    M>>Кроме того, иницыатор треда и тут наедет по перерасходу лексических средств языка...

    M>>но он наверное никогда не писал реальных программ размера,
    M>>достаточного для того, чтобы понять, что не "минимальным количкесвом лексем" единым живет
    M>>реальное программирование.

    S>Согласен. Все средства хороши на маленьких программах.

    Re[5]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 10.06.05 08:08
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    П>>
    П>>while (x = a() ? b(k[i++]) : c(l[j--]) ) d(x);
    П>>


    СГ>А по ушам схлопотать за такой код, можно?


    Теоретически — можно, хотя я лично и за IF a THEN b ELSE c END по мозгам бы давал .
    Но мы ж не об этом, а о синтаксисе. Итак, обероновский вариант?
    Ку...
    Re[7]: Синтаксический оверхед: а смысл-то в чем?
    От: Demiurg  
    Дата: 10.06.05 08:10
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    D>> Но ведь ты не прав

    D>> Ссылаться на бредовое сообщение? Ой, тогда извини... Ты так и не понял, что не прав?

    СГ>Да, не понял.


    СГ>Текст оформлен в согласии с общепринятым coding style. Служебные слова, скобочки, точки-запятые, посчитаны, надеюсь, без арифметических ошибок. Числа делил правда на калькуляторе, но наверное калькулятор всё-таки не ошибся. Так что всё вроде сделал правильно. Так что не так?


    Больше вопросов не имею!
    ... << RSDN@Home 1.1.4 beta 7 rev. 463>>
    Re[6]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 10.06.05 08:11
    Оценка:
    Здравствуйте, Socrat, Вы писали:

    S>По ушам схлопотать можно и без повода... А такой код тоже недопустим?


    S>
    S>while (*str1++ = *str2++);
    S>


    Зря ты это сказал. Щас опять флейм насчет указателей поднимется.
    Ку...
    Re[7]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 10.06.05 08:17
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:


    СГ>Оберон — есть "safe" язык со сборщиком мусора. Адресной арифметики там нет.



    Как скажешь:

    S>>
    S>>while (str1[i++] = str2[j++]);
    S>>
    Ку...
    Re[6]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 10.06.05 08:30
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Еще можно Перл и Питон вспомнить — с ними

    C>по лаконичности рядом вообще ни один Паскаль не валялся.

    Учитывая "любовь" автора к скобочкам — лучше лисп!
    Ку...
    Re[3]: Синтаксический оверхед
    От: Аноним  
    Дата: 10.06.05 08:48
    Оценка:
    Здравствуйте, Кодёнок, Вы писали:

    Кё>Ну серьёзно, неужели количество лексем — одна из важных проблем в разработке ПО? "Во время боя командир автоматически переходит на мат, и результативность возрастает втрое?" Какие выгоды автор надеется получить, уменьшив число лексем на оператор? На сколько % ускорить разработку? Или что?


    Согласен со всем.
    Автор похоже не совсем в курсе проблем программирования
    Re[9]: Синтаксический оверхед: а смысл-то в чем?
    От: Кодт Россия  
    Дата: 10.06.05 08:53
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>>Единственный разумный вывод из твоей "работы" — ты против использования coding-style в обероне, а так же недолюбливаешь с-подобный синтаксис.


    СГ>coding-style относится к количеству строчек кода, а основной смысл был про количество лексем. Не зависимо от того какой применять coding-style, количество используемых лексем всё равно больше чем реально необходимо. Смысл заметки в том, что: СИ-ОБРАЗНЫЙ СИНТАКСИС ИСПОЛЬЗУЕТ БОЛЬШЕ ЛЕКСЕМ ЧЕМ ЭТО РЕАЛЬНО НЕОБХОДИМО. Я специально для Вас заглавными буквами написал смысл. Запомните его. А то, понимаете-ли, прочитали сообщение, а смысла так и не поняли.


    Переходи на J. Или на APL — если разживёшься подходящей клавиатурой Вот где количество лексем стремится к Шенноновскому пределу.
    Перекуём баги на фичи!
    Re[3]: Ошибка 2
    От: Yachtsman Россия  
    Дата: 10.06.05 09:01
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:
    СГ>Приведенный мной синтаксис есть синтаксис языков Modula/Oberon (используется с середины 1970-тых годов).

    А этот синтаксис не устарел?! Не смотря на то, что ему те же 25?
    ... << RSDN@Home 1.1.4 beta 7 rev. 461>>
    Все, что ни делается — делается к лучшему!
    Re[7]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 10.06.05 09:05
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    S>>>>Есть группа параметров, естественным образом связанных друг с другом. Замените их объектом.

    S>>>>А если объекты не связаны? Например, надо взять взаймы у одного из двух человек, у кого денег больше:
    S>>>>
    S>>>>Взять_взаймы (человек1.деньги > человек2.деньги? человек1: человек2);

    S>>Какой тут можно сделать объект?

    M>Никакой. Здесь один параметр, который есть уже объект.


    M>Здесь напрашивается другой паттерн рефакторинга — Выделение переменной (Introduce Explaining Variable)

    M>здесь

    M>
    M>Человек уКогоЗанять  = человек1.деньги > человек2.деньги? человек1: человек2;
    M>Взять_взаймы (уКогоЗанять);
    M>


    Не, тут нужно ещё выделить алгоритм:
    взять_взаймы(
      максимум(                 -- у кого
        [человек1, человек2],   -- набор, из которого берётся максимальный элемент
        compose_f_gx_gy(        -- композитный предикат - комбинатор
          меньше(),             -- f - оператор сравнения
          атрибут(деньги)       -- g
        )
      )
    )

    Тем самым мы, во-первых, устраняем повторение имён (деньги) и ссылок (человек1, человек2), а во-вторых, делаем систему масштабируемой: можно обращаться к набору из более (да и менее) чем двух людей.
    Перекуём баги на фичи!
    Re[10]: Синтаксический оверхед: а смысл-то в чем?
    От: garant  
    Дата: 10.06.05 09:21
    Оценка:
    Здравствуй, Кодт.

    К> Смысл заметки в том, что: СИ-ОБРАЗНЫЙ СИНТАКСИС ИСПОЛЬЗУЕТ

    К> БОЛЬШЕ ЛЕКСЕМ ЧЕМ ЭТО РЕАЛЬНО НЕОБХОДИМО. Я специально для Вас
    К> заглавными буквами написал смысл. Запомните его. А то,
    К> понимаете-ли, прочитали сообщение, а смысла так и не поняли.

    Ха-ха-ха-ха! (вежливо)

    А над чем смеемся-то?..

    --
    Тон
    Posted via RSDN NNTP Server 1.9
    Re: Синтаксический оверхед
    От: AndreyFedotov Россия  
    Дата: 10.06.05 09:22
    Оценка:
    Сергей! Не в даваясь в детали дискуссии (всё что можно и что нельзя сказали без меня ), вы никогда не задумывались — почему Джордано Бруно кончил карьеру не так, как Галилей?
    Re[8]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 10.06.05 09:34
    Оценка:
    Здравствуйте, Кодт, Вы писали:

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


    К>

    S>>>>>Есть группа параметров, естественным образом связанных друг с другом. Замените их объектом.

    S>>>>>А если объекты не связаны? Например, надо взять взаймы у одного из двух человек, у кого денег больше:
    S>>>>>
    S>>>>>Взять_взаймы (человек1.деньги > человек2.деньги? человек1: человек2);
    К>

    S>>>Какой тут можно сделать объект?

    M>>Никакой. Здесь один параметр, который есть уже объект.


    M>>Здесь напрашивается другой паттерн рефакторинга — Выделение переменной (Introduce Explaining Variable)

    M>>здесь

    M>>
    M>>Человек уКогоЗанять  = человек1.деньги > человек2.деньги? человек1: человек2;
    M>>Взять_взаймы (уКогоЗанять);
    M>>


    К>Не, тут нужно ещё выделить алгоритм:


    Конечно нужно, если этого потребует (постановка задачи) и/или (её имплементация).

    Но это вовсе не обязательно.
    Даже излишне, если это не требуется.
    keep it simpler, stupid.

    Кроме того,
    К>
    К>взять_взаймы(
    К>  максимум(                 -- у кого
    К>    [человек1, человек2],   -- набор, из которого берётся максимальный элемент
    // а кто будет оптимизировать здесь вызов подпрограммы? компилятор штоли?
    //дюже вумный нужен компилятор. 
    //Хотя в большинсттве задач рассматриваемой предметной области не сильно такая оптимизация нужна...
    // но если нужна, то кранты.
    К>    compose_f_gx_gy(        -- композитный предикат - комбинатор
    К>      меньше(),             -- f - оператор сравнения
    К>      атрибут(деньги)       -- g
    //указатель на член - это только в плюсах есть из известных мне языков.
    //в C#/Java, ноа которых щас пишу, даже не знаю как это заимплементить.
    К>    )
    К>  )
    К>)
    К>

    К>Тем самым мы, во-первых, устраняем повторение имён (деньги) и ссылок (человек1, человек2), а во-вторых, делаем систему масштабируемой: можно обращаться к набору из более (да и менее) чем двух людей.
    Re[12]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 09:52
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>
    К>IF
    К>  condition_goes_here
    К>THEN
    К>  x;
    К>  y;
    К>  z; (* с обязательной ";" в конце каждой инструкции - требование системы контроля версий *)
    К>ELSE
    К>  t;
    К>  u;
    К>  v;
    К>END; (* и здесь тоже ";" по той же самой причине *)
    К>


    А пусть даже и так.

    Посчитаем синтаксический оверхед по сравнению с аналогичным показанному выше, но теперь уже Си-образным синтаксисом
    if(condition_goes_here)
    {
      x();
      y();
      z(); 
    {
    else
    {
      t();
      u();
      v();
    }


    синтаксический оверхед = 26/11 = 2.36

    (подсчитывал только служебные символы, пользовательские идентификаторы — нет).
    Re[13]: *
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 10.06.05 09:57
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    К>>
    К>>IF
    К>>  condition_goes_here
    К>>THEN
    К>>  x;
    К>>  y;
    К>>  z; (* с обязательной ";" в конце каждой инструкции - требование системы контроля версий *)
    К>>ELSE
    К>>  t;
    К>>  u;
    К>>  v;
    К>>END; (* и здесь тоже ";" по той же самой причине *)
    К>>


    СГ>А пусть даже и так.


    СГ>Посчитаем синтаксический оверхед по сравнению с аналогичным показанному выше, но теперь уже Си-образным синтаксисом

    СГ>
    СГ>if(condition_goes_here)
    СГ>{
    СГ>  x();
    СГ>  y();
    СГ>  z(); 
    СГ>{
    СГ>else
    СГ>{
    СГ>  t();
    СГ>  u();
    СГ>  v();
    СГ>}
    СГ>


    СГ>синтаксический оверхед = 26/11 = 2.36


    СГ>(подсчитывал только служебные символы, пользовательские идентификаторы — нет).


    Ты ещё и считать не умеешь???
    Re[4]: Автомат Калашникова
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 10:05
    Оценка:
    Здравствуйте, Yachtsman, Вы писали:

    Y>А этот синтаксис не устарел?! Не смотря на то, что ему те же 25?


    Нет не устарел.

    1) Вот смотрите, заменим все служебные слова на символ "*"
    REPEAT x UNTIL b                      = * x * b
    WHILE a DO x END                      = * a * x *
    IF a THEN x END                       = * a * x *
    IF a THEN x ELSE y END                = * a * x * y *
    IF a THEN x ELSIF b THEN y ELSE z END = * a * x * b * y * z *
    CASE n OF a: x | b: y ELSE z END      = * n * a * x * b * y * z *

    между каждым "пользовательским" идентификатором стоит не более одной звездочки. Меньше одной звездочки поставить нельзя (если конечно не перегружать пробельные символы дополнительным смыслом кроме того что у них и так уже натурально есть). Значит минимум достигнут. Больше одной звездочки — это уже оверхед. Если расписать аналогичные Си-образные конструкции, то там будет куча лишних звездочек.

    2) В, принципе, вместо слов IF, END и т.д. можно изобрести совершенно другие слова. Можно изобрести какую угодно другую семантику, но сам, так сказать, синтаксический скелет:
    * идентификатор * идентификатор * идентификатор * идентификатор * идентификатор ...

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

    3) По поводу оберонов даже говорят: Изобрести еще один "Оберон" так же невозможно, как невозможно изобрести еще один автомат Калашникова.
    Re: Синтаксический оверхед
    От: DMitay Украина  
    Дата: 10.06.05 10:11
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    Сергей, у меня к Вам вопрос! В каком учебном заведении вы защищали свою кандидатскую?
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[13]: Устаревший блок begin end
    От: Пацак Россия  
    Дата: 10.06.05 10:17
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:


    СГ>А таких мест больше нет, вот смотрите:

    (скип)

    PROCEDURE ... BEGIN ... END;


    Ку...
    Re[8]: Синтаксический оверхед
    От: Socrat Россия  
    Дата: 10.06.05 10:18
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Не, тут нужно ещё выделить алгоритм:


    std::set рулит.
    Re[8]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 10:18
    Оценка:
    Здравствуйте, Socrat, Вы писали:

    S>Там мы дождемся перевода данного или похожего кода на Оберон?


    Не понял, я что ли должен за Вас чего-то переводить? А самим слабо что-ли? Кому это нужно, мне или Вам? Переведите, подсчитайте служебные слова, возьмите калькулятор, разделите два полученных числа друг на друга. Ну?
    Re: Синтаксический оверхед
    От: Аноним  
    Дата: 10.06.05 10:20
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    Вы ратуете за лаконичный синтаксис ?
    Вот вам :http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%98%D1%84%D0%BA%D1%83%D0%B8%D0%BB%D1%8C
    Re[3]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 10.06.05 10:26
    Оценка:
    Здравствуйте, GlebZ, Вы писали:

    AF>>Сергей! Не в даваясь в детали дискуссии (всё что можно и что нельзя сказали без меня ), вы никогда не задумывались — почему Джордано Бруно кончил карьеру не так, как Галилей?

    GZ>Оберон все таки вертится?

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

    GZ>С уважением, Gleb.
    Re[14]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 10:29
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>Ты ещё и считать не умеешь???


    — "Ну я же сказал четыреста капель валерьянки, а тут четыреста две?"
    — "У нас всё точно."
    Re[3]: Синтаксический оверхед
    От: DMitay Украина  
    Дата: 10.06.05 10:38
    Оценка:
    Здравствуйте, moudrick, Вы писали:

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


    DM>>Здравствуйте, Сергей Губанов, Вы писали:


    DM>>Сергей, у меня к Вам вопрос! В каком учебном заведении вы защищали свою кандидатскую?


    M>Я откроя вам тайну, уважаемые незаигнорившие эту ветку из раздела "Коллеги, улыбнитесь"


    M>Сергей Губанов — видный и перспективный учёный в области психологии IT-специалистов.


    M>Сейчас он затеял новое исслендование, создал этот топик и наблдает

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


    Угу, конечно... тогда этот видный и перспективный ученый в области психологии просто напросто присвоил себе звание кфмн.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[9]: Синтаксический оверхед
    От: Socrat Россия  
    Дата: 10.06.05 10:42
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    S>>Там мы дождемся перевода данного или похожего кода на Оберон?


    СГ>Не понял, я что ли должен за Вас чего-то переводить? А самим слабо что-ли? Кому это нужно, мне или Вам? Переведите, подсчитайте служебные слова, возьмите калькулятор, разделите два полученных числа друг на друга. Ну?


    Ладно. Берем выражение:

    while (str1[i++] = str2[j++]);


    Получаем:

    * * str1 * i * * * str2 * j * * * *

    Теперь паскаль (оберан не знаю):

    repeat
      str1[i] := str2[j];
      i := i+1;
      j := j+1
    until str1[i-1] = 0


    Получаем:

    * str1 * i * * str2 * j * * i * i * 1 * j * j * 1 * str1 * i * 1 * * 0

    Теперь: в С каждая переменная используется по одному разу. Заменяем повторные использования идентификаторов и числа (в С их нет) на звездочки:

    * str1 * i * * str2 * j * * * * * * * * * * * * * * * * * * * * * *

    Получаем для С 4 идентификатора и 11 служебных символов, для паскаля 4 идентификатора и 27 служебных символов.
    Re[9]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 10.06.05 10:43
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Не понял, я что ли должен за Вас чего-то переводить? А самим слабо что-ли? Кому это нужно, мне или Вам? Переведите, подсчитайте служебные слова, возьмите калькулятор, разделите два полученных числа друг на друга. Ну?


    Ну никто тебя за язык не тянул...

    Имеем :
    C/C++ (не используя адресной арифметики):
    while (str1[i++] = str2[j++]);

    Лексемы: 11
    Строки: 1
    Символы: 30;

    C/C++ (с адресной арифметикой):
    while (*str1++ = *str2++);

    Лексемы: 9
    Строки: 1
    Символы: 26;

    OBERON:
    continue := TRUE;
    WHILE continue DO
      inc(i);
      inc(j);
      str1[i] = str2[j];
      IF str[j] == #0 THEN continue := FALSE END;
    END;

    Лексемы: 26
    Строки: 7
    Символы (не считая отступов): 113;

    No comments...
    Ку...
    Re[9]: Oberon - Примеры кода
    От: garant  
    Дата: 10.06.05 10:44
    Оценка:
    Здравствуй, Mamut.

    M> MODULE FigureList; (* tlozza@student.ethz.ch *)

    M> TYPE
    M> Figure = OBJECT
    M> name : System.String;
    M> next : Figure; (* Reference to the next figure. *)
    M> END Figure;
    M> VAR
    M> FigureList, MyFigure, Iterator : Figure;
    M> BEGIN
    M> NEW(MyFigure); (* Create new figure object/instance. *)
    M> MyFigure.name := "my favorite";

    Гм. На паскаль похоже.

    --
    Тон
    Posted via RSDN NNTP Server 1.9
    Re[15]: Устаревший блок begin end
    От: Пацак Россия  
    Дата: 10.06.05 10:45
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>В данном случае BEGIN END — это не самостоятельный блок, а часть составной инструкции PROCEDURE или MODULE.


    Что мешало BEGIN тут не использовать?
    Ку...
    Re[15]: Устаревший блок begin end
    От: Mamut Швеция http://dmitriid.com
    Дата: 10.06.05 10:45
    Оценка:
    СГ>А еще есть MODULE ... BEGIN ... CLOSE ... END

    СГ>В данном случае BEGIN END — это не самостоятельный блок, а часть составной инструкции PROCEDURE или MODULE.



    Смотрим сюда
    Автор: Mamut
    Дата: 10.06.05
    и видим, что если не BEGIN, то END присутствует в Обероне повсюду. Так, если быстренько посчитать разницу между [BEGIN + ]END ([пять + ]три символа, написанных заглавными буквами) и комбинацию {} (два символа, выделяющих группу), то увидим, что лексемы — побоку, главное — читаемость.


    dmitriid.comGitHubLinkedIn
    Re[10]: Oberon - Примеры кода
    От: Кодёнок  
    Дата: 10.06.05 10:53
    Оценка:
    СГ>Похоже для всех Си-образных программистов сидение в дебагере — это основное времяпрепровождение.
    СГ>А Вы вообще в курсе, что есть класс программ, которые в принципе нельзя дебажить?
    СГ>(например, системы реального времени нельзя дебажить по определению)

    СГ>Лично я, например, в дебагере не сижу вообще:

    СГ>1) Использую математически доказуемые алгоритмы.
    СГ>2) Если не могу выполнить пункт (1), то делаю так что программа сама сообщает где ошибка.

    Это программы для калькулятора можно математически доказывать Есть работы по доказательству C-программ, в статьях начала 90-х видел.

    Хочу увидеть математическое доказательство правильности:

    1. Отрисовки ГУИ-элементов.
    2. Взаимодействия с API (про разные грабли все наслышаны).
    3. Средних размеров приложения, класса ICQ (движок в расчёт не берём).
    Re[10]: Oberon - Примеры кода
    От: Demiurg  
    Дата: 10.06.05 10:56
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Лично я, например, в дебагере не сижу вообще:

    СГ>1) Использую математически доказуемые алгоритмы.
    СГ>2) Если не могу выполнить пункт (1), то делаю так что программа сама сообщает где ошибка.

    Похоже ты не занимался реальным программированием... Теоретик? Тогда понятно — в сад.

    M>> На более-менее реальных примерах Оберон в десятки раз проигрывает в читаемости.


    СГ>А вот тут как на счет читаемости:

    СГ>
    СГ>while (x = a() ? b(k[i++]) : c(l[j--]) ) d(x);
    СГ>


    Что?
    ... << RSDN@Home 1.1.4 beta 7 rev. 463>>
    Re[10]: Oberon - Примеры кода
    От: moudrick Россия http://community.moudrick.net/
    Дата: 10.06.05 10:57
    Оценка:
    СГ>2) Если не могу выполнить пункт (1), то делаю так что программа сама сообщает где ошибка.

    С указанием (номера строки) / (номера символа) начала и конца ошибочной инструкции?

    Или как? Можно поподробнее, желательно с примером, приближенным к реальности.
    Re[11]: Oberon - Примеры кода
    От: Socrat Россия  
    Дата: 10.06.05 11:00
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    СГ>>2) Если не могу выполнить пункт (1), то делаю так что программа сама сообщает где ошибка.


    M>С указанием (номера строки) / (номера символа) начала и конца ошибочной инструкции?


    M>Или как? Можно поподробнее, желательно с примером, приближенным к реальности.


    Да. И распечатывает все глобальные переменные и локальные переменные функции.
    Re[10]: Горе программисты
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 11:03
    Оценка:
    П>OBERON:
    П>
    П>continue := TRUE;
    П>WHILE continue DO
    П>  inc(i);
    П>  inc(j);
    П>  str1[i] = str2[j];
    П>  IF str[j] == #0 THEN continue := FALSE END;
    П>END;
    П>


    Эх горе программисты повсюду развелись понимаеш-ш-ш-шь...
    Всё делать самому приходится...
    LOOP 
      a[i] := b[j]; 
      IF b[j] = 0X THEN EXIT END;
      INC(i); 
      INC(j)
    END
    Re[10]: Oberon - Примеры кода
    От: Кодт Россия  
    Дата: 10.06.05 11:05
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>> Дебагить его тоже невозможно


    СГ>Похоже для всех Си-образных программистов сидение в дебагере — это основное времяпрепровождение.

    СГ>А Вы вообще в курсе, что есть класс программ, которые в принципе нельзя дебажить?
    СГ>(например, системы реального времени нельзя дебажить по определению)

    СГ>Лично я, например, в дебагере не сижу вообще:

    СГ>1) Использую математически доказуемые алгоритмы.
    СГ>2) Если не могу выполнить пункт (1), то делаю так что программа сама сообщает где ошибка.

    Теоретически, нет разницы между теорией и практикой. Практически же, разница есть.

    Реалтайм можно дебажить — начиная от хардверных стендов и кончая самыми разными чисто софтверными инструментами (журнал обращений к ОС, отладочный вывод, а то и пошаговое выполнение отдельных задач).
    Пример: умело расставляя приоритеты нескольким задачам, ввели систему в жуткие тормоза. Журнал показал, что идёт битва за один системный мутекс (в менеджере памяти), а расстановка меток выявила участки кода, где захват этого мутекса приводил к дребезгу.
    Дальше было тонкое колдовство над временной диаграммой...
    Перекуём баги на фичи!
    Re[10]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 10.06.05 11:09
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    П>Ну никто тебя за язык не тянул...


    П>Имеем :


    До кучи:
    C/C++ (OOP-style):
    str1= str2;

    Лексемы: 2
    Строки: 1
    Символы: 11;

    OBERON (OOP-style, АФАИР перегрузки операторов там нет):
    str1.copy(str2);

    Лексемы: 4 (не считая имени метода)
    П>Строки: 1
    П>Символы 16 (зависит от длины имени метода);

    Плюс код C++ банально читабельнее.
    Ку...
    Re[11]: Горе программисты
    От: Пацак Россия  
    Дата: 10.06.05 11:12
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Эх горе программисты повсюду развелись понимаеш-ш-ш-шь...

    СГ>Всё делать самому приходится...
    СГ>
    СГ>LOOP 
    СГ>  a[i] := b[j]; 
    СГ>  IF b[j] = 0X THEN EXIT END;
    СГ>  INC(i); 
    СГ>  INC(j)
    СГ>END
    СГ>


    Чего ж поскромничал и статистику не привел?
    Ку...
    Re[3]: Синтаксический оверхед
    От: Аноним  
    Дата: 10.06.05 11:12
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    DM>>Здравствуйте, Сергей Губанов, Вы писали:


    DM>>Сергей, у меня к Вам вопрос! В каком учебном заведении вы защищали свою кандидатскую?


    СГ>Ни в каком учебном заведении я ее не защищал. Я ее защищал в одном из самых престижных институтов РАН по теоретической физике. Но к программированию она отношения не имеет. Тема диссертации "Квантовая групповая редукция XXZ модели Гейзенберга".


    СГ>http://ru.arxiv.org/multi?archive=hep-th&amp;file=new+abstracts&amp;year=%2705&amp;month=06&amp;args=&amp;search_year=all+years&amp;field_1=au&amp;query_1=Gubanov&amp;%2Ffind=+Find+&amp;subj_cond-mat=--%3E+cond-mat+subject+classes&amp;subj_physics=--%3E+physics+subject+classes


    И что вас тогда дернуло в программирование?
    Вы продолжаете заниматься теоретической физикой?
    Re[4]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 10.06.05 11:22
    Оценка:
    Здравствуйте, algol, Вы писали:

    A>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Ни в каком учебном заведении я ее не защищал. Я ее защищал в одном из самых престижных институтов РАН по теоретической физике. Но к программированию она отношения не имеет. Тема диссертации "Квантовая групповая редукция XXZ модели Гейзенберга".


    A>"Есть такие люди, которым стоит только подойти к прибору, как он сразу же ломается. Такие люди называются физиками-теоретиками." (с) Физики шутят


    Не, не шутят. Шутка — это лишь форма отражения действительности. То есть в шутках физиков изложены факты, которые сами физики, как ни стараются, объяснить не могут.
    Re[11]: Oberon - Примеры кода
    От: Socrat Россия  
    Дата: 10.06.05 11:24
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Теоретически, нет разницы между теорией и практикой. Практически же, разница есть.


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

    К>Пример: умело расставляя приоритеты нескольким задачам, ввели систему в жуткие тормоза. Журнал показал, что идёт битва за один системный мутекс (в менеджере памяти), а расстановка меток выявила участки кода, где захват этого мутекса приводил к дребезгу.
    К>Дальше было тонкое колдовство над временной диаграммой...

    У каждой системы свои нюансы. Часто приходилось отлаживать программу на контроллере, у которого из индикаторов только пара светодиодов...
    Re[11]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 10.06.05 11:27
    Оценка:
    К>В С++ потребность в пробельных разделителях меньше: гораздо чаще синтаксис явно требует разделительные лексемы.
    К>
    К>  if(c)t;elsee; // неправильно
    
    К>//  v-v-v------v--- обязательные лексемы-разделители
    К>  if(c)t;else e;
    К>//           ^----- вот здесь пробел потребовался
    
        if(c)t;else(e);
      //           ^-^--- нейтральные лексемы
    
        if(c)t;else{e}
      //           ^-^--- нейтральные лексемы (ещё и на ; сэкономили)
    К>
    Перекуём баги на фичи!
    Re[5]: Автомат Калашникова
    От: Cyberax Марс  
    Дата: 10.06.05 11:48
    Оценка:
    Сергей Губанов wrote:

    > 1) Вот смотрите, заменим все служебные слова на символ "*"

    >
    >REPEAT x UNTIL b = * x * b
    >WHILE a DO x END = * a * x *
    >IF a THEN x END = * a * x *
    >IF a THEN x ELSE y END = * a * x * y *
    >IF a THEN x ELSIF b THEN y ELSE z END = * a * x * b * y * z *
    >CASE n OF a: x | b: y ELSE z END = * n * a * x * b * y * z *
    >
    >

    > между каждым "пользовательским" идентификатором стоит не более одной

    > звездочки. Меньше одной звездочки поставить нельзя (если конечно не
    > перегружать пробельные символы дополнительным смыслом кроме того что у
    > них и так уже натурально есть). Значит минимум достигнут. Больше одной
    > звездочки — это уже оверхед. Если расписать аналогичные Си-образные
    > конструкции, то там будет куча лишних звездочек.

    Агащаз:
    x until b
    x  *    b - было в одном из Perlовых DSLей.
    
    while a  :  x
    *       a *  x
    Python.
    
    a->x ; b (аналог IF ..THEN..ELSE..END)
    a * x * b
    
    и т.п.

    А есть еще функциональные языки, конструкции которых вообще в Обероне
    нормально выразить нельзя.

    > 3) По поводу оберонов даже говорят: /Изобрести еще один "Оберон" так

    > же невозможно, как невозможно изобрести еще один автомат Калашникова/.

    Ха. Хаха. Хахахаха.

    Да, рсдн.хумор — точно место для этого поста.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[11]: Oberon - Примеры кода
    От: Пацак Россия  
    Дата: 10.06.05 12:27
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>б) С вашей стороны не было приведено ни одного приближенного к реальному кода. Ладно, пришлось нахдить код самому. И что? Опять ни одного контраргумента, кроме опят таки высосанного из пальа примера на С, который якобы доказывает несостоятельность всего синтаксиса языка в целом.


    На самом деле тот пример писал я, и сделать его удобочитаемым — цели не стояло. Сергей кидался в одну крайность — использование простейших конструкций с односложными вызовами процедур, я кинулся в другую и втиснул максимум действий в строку текста, показав, что лаконизм инструкций в C/C++ достигается иными методами, нежели в Обероне.
    Ку...
    Re[12]: Oberon - Примеры кода
    От: Mamut Швеция http://dmitriid.com
    Дата: 10.06.05 12:36
    Оценка:
    M>>б) С вашей стороны не было приведено ни одного приближенного к реальному кода. Ладно, пришлось нахдить код самому. И что? Опять ни одного контраргумента, кроме опят таки высосанного из пальа примера на С, который якобы доказывает несостоятельность всего синтаксиса языка в целом.

    П>На самом деле тот пример писал я, и сделать его удобочитаемым — цели не стояло. Сергей кидался в одну крайность — использование простейших конструкций с односложными вызовами процедур, я кинулся в другую и втиснул максимум действий в строку текста, показав, что лаконизм инструкций в C/C++ достигается иными методами, нежели в Обероне.


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

    Кстати, вполне очень даже понятно, что в том примере написано Правда, не представляю, зачем такая конструкция могла бы понадобится..
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>> ... <<Winamp is playing "Silence">> ...


    dmitriid.comGitHubLinkedIn
    Re[3]: Синтаксический оверхед
    От: viellsky  
    Дата: 10.06.05 13:08
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    V>> небольшие проценты.


    СГ>Вопрос

    СГ>Сколько процентов можно считать небольшим числом?

    СГ>Правильный ответ

    СГ>Только ноль.
    месье, я вам обязательно отвечу, но для начала мне нужно знать, чем отличаются "разы" от "процентов" в вашей фразе:
    СГ>Программа записанная в Си-образном синтаксисе содержит в разы, а не на проценты больше лексем и строчек кода чем это реально необходимо. Спрашивается, и как долго этот синтаксис еще будет существовать?
    я просто пытался подстроиться под вашу терминологию...
    Re[11]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 13:11
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    П>OBERON

    П>
    П>str1.copy(str2);
    П>


    Ничего подобного.

    Также и пишется: str1 := str2, равно как для любых массивов arr1 := arr2 (соответствующих типов — ведь массивы это самый обычный value-type, а значит можно так присваивать — нет исключений из правил).

    Для ARRAY OF CHAR есть еще специальное копирование имеющее строковую семантику, а не массивовую — до первого 0X символа включительно. Пишется так str1 := str2$
    Re[12]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 10.06.05 13:21
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Также и пишется: str1 := str2, равно как для любых массивов arr1 := arr2 (соответствующих типов — ведь массивы это самый обычный value-type, а значит можно так присваивать — нет исключений из правил).


    В данном конкретном случае — да. Вот только кто сказал, что str1 и str2 — это обязательно должны быть строки или массивы? Вполне возможно, что это экземпляры каких-то хитрых классов, операции над которыми (копирование, сложение, адресация к элементу и т.п.) должны сопровождаться некими дополнительными действиями (скажем, изменением состояния некоего третьего объекта). Что тогда? В C++ я переопределю оператор, в питоне — перекрою метод класса, а в Обероне?
    Ку...
    Re[11]: Oberon - Примеры кода
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 13:59
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>ЗЫ. Только не надо перечислять, какие ошибки я допустил в Обероновском коде.


    Ладно, я молча просто покажу как надо было:
    PROCEDURE (this: QBitArray) Fill(v: BOOLEAN; size: INTEGER): BOOLEAN, NEW;
    BEGIN
      IF size >= 0 THEN
        IF ~resize(size) THEN RETURN FALSE END
      ELSE
        size = this.size()
      END;
      IF size > 0 THEN
        IF v THEN
          memset(data(), 0FFH, (size + 7) DIV 8)
        ELSE
          memset(data(),    0, (size + 7) DIV 8)
        END
      END;
      IF v THEN pad0 END;
      RETURN TRUE
    END Fill;
    Re[4]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 10.06.05 14:04
    Оценка:
    Здравствуйте, viellsky, Вы писали:


    V> чем отличаются "разы" от "процентов"


    А, ну, тут прошу прощения, в принципе ни чем. Просто оборот речи. Смысл оборота — гиперболизация масштаба, дескать отличается не на чуть-чуть, а сильно.
    Re: Синтаксический оверхед
    От: ansi  
    Дата: 11.06.05 13:06
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    Чушь все это... Лучше уж поставить пару скобок, чем постоянно давить шифт (два шифта ) и набирать слова по пять букв.

    В крематорий такой синтаксис!!!
    new RSDN@Home(1.1.4, 303) << new Message(); std::head::ear << "Ice MC — Music Is Goodbye";
    Re[3]: Синтаксический оверхед
    От: ForestLabs Россия  
    Дата: 11.06.05 14:54
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    FL>>Гы. Был такой язык российского разлива — Ямб.

    FL>>Дык в нем циклы писались так:
    FL>>(что-то в цикле)3
    FL>>Т.е. в примере выполнить цикл 3 раза. Ну лаконичнее некуда.

    СГ>Согласен.

    СГ>Вопрос лишь, а что в нем было еще кроме циклов, ведь на все дела разных типов скобок не напасешься, не так ли?

    Если честно — не помню. Было это в 1987-8 годах. Циклы только запомнились.
    А так — нормальный процедурный язык. Автор, если не ошибаюсь — Ярошевская.
    Работал на машинах "Искра".
    Re[2]: Синтаксический оверхед
    От: _FRED_ Черногория
    Дата: 12.06.05 19:44
    Оценка:
    Здравствуйте, Sergey, Вы писали:

    СГ>>
  • Цикл с проверкой условия в начале итерации
    СГ>> a — условие выполнения итерации
    СГ>> x — выполняемое действие
    СГ>> Си-образный синтаксис:
     СГ>> while(a)
     СГ>> {
     СГ>>      x();
     СГ>> }

    S>Никто так не пишет Пишут
    S>while(a) x();
    /*...пропускаем...*/
    S> if (a) x();

    Не раз приходилось совершать\видеть ошибки из-за того, что добавляя в цикл\условие ещё одно выражение, автор "забывал" по торопливости добавлять скобки.
    // Было
    if(a)
      x();
    
    //Становилось
    if(a)
      x();
      y();

    Когда это всё окружено ещё каким-то кодом, с различными ветвлениями, с первого раза и не обратишь внимание.
    В моём же варианте в случае изменения "внутренностей" цикла\условия обёртка (здесь из while или if) подвергается минимальным изменениям:
    while(a) {
      x();
    }//while
    
    if(a) {
      x();
    }//if

    Ну и строк пустых нету Это я всё к тому, что "Никто так не пишет".

    СГ>>
  • Цикл с проверкой условия в середине итерации
    СГ>> a — условие завершения
    СГ>> x, y, z — выполняемые действия
    СГ>> Си-образный синтаксис:
    СГ>>
     СГ>> while(true)
     СГ>> {
     СГ>>      x();
     СГ>>      if(a)
     СГ>>      {
     СГ>>           y();
     СГ>>           break;
     СГ>>      }
     СГ>>      z();
     СГ>> }
     СГ>>


    S>Если yt нравится многословность, будем сокращать. Только чур не обижацца на

    S>читаемость
    S>for (; x(), a; z());
    S>y();


    under «*none*»,
    ... << RSDN@Home 1.1.4 beta 7 rev. 467>>
  • Help will always be given at Hogwarts to those who ask for it.
    Re[10]: Oberon - Примеры кода
    От: Mamut Швеция http://dmitriid.com
    Дата: 13.06.05 06:28
    Оценка:
    G>Гм. На паскаль похоже.

    Просто ноги оттуда же растут


    dmitriid.comGitHubLinkedIn
    Re[4]: Синтаксический оверхед
    От: Аноним  
    Дата: 13.06.05 12:15
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    M>А добился одного только — еще несколько человек стали иначе относиться к Оберону.

    M>Вместо нейтрального "не знаю что за язык такой Оберон" стало негативное "оберон- полное г...о"

    А это всегда так бывает, когда человек считает своим долгом
    открыть народу глаза и привести их истинной правде и счатью.
    Re[7]: *
    От: ol-lv СССР https://youtu.be/DQDoYs6wHoo
    Дата: 14.06.05 06:31
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    P>>Здравствуйте, Сергей Губанов, Вы писали:



    СГ>>>Путаницы не возникает ни когда — любые две инструкции всегда разделяются разделителем.


    P>>

    P>>

    P>>WHILE a DO x; y; z END
    P>>


    P>>То есть здесь z и END — одна инструкция?


    СГ>1) Можно ответить: Да! Семантика этой инструкции: "Выполнить z и перейти к началу цикла WHILE".

    СГ>2) Можно ответить: END — это не инструкция, а часть составной инструкции WHILE DO END, ведь инструкции бывают как простыми так и составными.

    Ой ладно, ребятки от конфликта "<>" (или <= не помню уже точно ) не могли избавиться в грамматике вот лупят контексты, для разрешения..
    есть еще варианты для ткскть разрешения, end if, end loop и прочее,.. в данном случае конфликт разрешится сам собой ..
    Compiler can be as trained AI but can't compose music.
    Antheil piano jazz sonata. Я болен ПГМ.
    Re[9]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 14.06.05 08:22
    Оценка:
    Здравствуйте, Sheridan, Вы писали:

    S>Здравствуйте, Курилка, Вы писали:


    К>>Ну дак пиши на K тогда, что мозги-то компостировать?


    S>Лучше на brainfuck или вообще на whitespace...


    perl адназначна... вот где никакого оверхеда ... вот только фиг прочтёшь, что написано...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[2]: Синтаксический оверхед
    От: Demiurg  
    Дата: 14.06.05 09:04
    Оценка:
    Здравствуйте, Airat Burganov, Вы писали:

    AB>По-моему, пора уже сказать для чего была затеяна дискуссия. Провокация удалась на славу. Кто не верит, что это провокация, читайте ответы автора — он же не внимает абсолютно никаким доводам — один против всех . Это однозначно удавшаяся шутка.


    Глупость это, а не шутка.
    ... << RSDN@Home 1.1.4 beta 7 rev. 463>>
    Re[3]: Синтаксический оверхед
    От: Аноним  
    Дата: 14.06.05 09:26
    Оценка:
    Здравствуйте, Demiurg, Вы писали:

    D> Глупость это, а не шутка.


    Скорее — весенне-летнее обострение.
    Re[7]: *
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 14.06.05 10:09
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    P>>Да, а что там с доказательством того что

    P>>

    СГ>>>Где-то в середине 1970-тых годов был открыт реально необходимый и достаточный синтаксис (Modula-2, 1979 год)

    P>>действительно необходимый и достаточный?

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


    СГ>Вот смотрите, заменим все служебные слова на символ "*"

    СГ>
    СГ>REPEAT x UNTIL b                      = * x * b
    СГ>

    СГ>между каждой "пользовательской" лексемой стоит не более одной звездочки. Меньше одной звездочки поставить нельзя — мы договорились пробельные символы не перегружать. Значит минимум достигнут. А то что этого достаточно, следует из смысла рассматриваемых инструкций.


    Фигня! Вот пример:
        call x 
        call b ;b помещает результат в регистр cx: 0 - если false, 1 - если true
        jcxz $-4 ; не помню сколько байт занимает команда call, но смысл поняте

    Так как call x и call b семантически равны x() и b(), то расставляем ваши звёздочки:
    x b *
    о-па... не является ваш синтаксис минимальным...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re: Синтаксический оверхед
    От: jcukeng  
    Дата: 14.06.05 10:16
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:
    СГ>Си-образный синтаксис:
    СГ>
    СГ>while(a)
    СГ>{
    СГ>     x();
    СГ>}
    СГ>

    СГ>Реально необходимый и достаточный синтаксис:
    СГ>[code]
    СГ>WHILE a DO x END

    вот как на си это написать:
    while(a) x();
    без всяких та DO END и прочего.

    PS. прежде, чем обгаживать Си, надо хотя бы его немного выучить
    Re[4]: Ошибка
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 14.06.05 10:17
    Оценка:
    Здравствуйте, Banch, Вы писали:

    B>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>
    СГ>>WHILE a DO x; y; z END
    СГ>>


    B>Людей, которые пишут так вот в одну строчку я на работу не возьму.

    B>Потому что прочесть этот код будет невозможно!
    Прочесть-то может быть и можно, но вот отладчиком войти и посмотреть сколько итераций произойдёт и как функции будут вызываться — это проблематично... Но на оберонах новерно отладчики не нужны — баги сами отлавливаются и исправляются...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[5]: Ошибка
    От: Кодт Россия  
    Дата: 14.06.05 11:02
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

    СГ>>>
    СГ>>>WHILE a DO x; y; z END
    СГ>>>


    B>>Людей, которые пишут так вот в одну строчку я на работу не возьму.

    B>>Потому что прочесть этот код будет невозможно!
    MN>Прочесть-то может быть и можно, но вот отладчиком войти и посмотреть сколько итераций произойдёт и как функции будут вызываться — это проблематично... Но на оберонах новерно отладчики не нужны — баги сами отлавливаются и исправляются...

    А это беда большинства отладчиков, которые расставляют точки следования по строкам, а не по отдельным выражениям или хотя бы инструкциям.
    Контрпример — отладчик VB6. Он позволяет трассировать однострочные программы.
    Перекуём баги на фичи!
    Re[2]: Синтаксический оверхед
    От: AndreyFedotov Россия  
    Дата: 14.06.05 19:31
    Оценка:
    Здравствуйте, xBlackCat, Вы писали:

    BC>Люди, а куда делся сам, так сказать, "виновник торжества"? А то как-то флейм начинает затихать. Скучно становится...


    Эх не берегли мы его...
    Re: Синтаксический оверхед
    От: Noobi Россия fff
    Дата: 14.06.05 20:05
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.

    СГ>2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо (чтобы читающему понятно стало где что написано).

    СГ>Давайте посчитаем количественно этот перерасход?

    СГ>Хочется понять на сколько он "минимален", так сказать.
    СГ>
  • Резюме

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



    "Реально необходимо" — понятие субхективное. Например, мне на С писать гораздо удобнее, чем на Обероне, или что там у вас. Синтаксический оверхед не является самым важным параметром языка, от которого что-то зависит. Из этого исследования можно так же вывести, что языки с большим оверхедом более популярны, например
  • Re[2]: Синтаксический оверхед
    От: Слава Шевцов Россия http://www.rentaguru.ru/
    Дата: 14.06.05 22:02
    Оценка:
    Здравствуйте, jcukeng, Вы писали:

    J>вот как на си это написать:

    J>while(a) x();
    J>без всяких та DO END и прочего.

    J>PS. прежде, чем обгаживать Си, надо хотя бы его немного выучить


    И как его после выучивания обгаживать?
    ----------------------------------------------------------------------------------------------
    Rentaguru
    Re[6]: Ошибка
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 15.06.05 03:08
    Оценка:
    Здравствуйте, Кодт, Вы писали:

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


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

    К>Контрпример — отладчик VB6. Он позволяет трассировать однострочные программы.

    Ну дык речь-то не о VB6, а об Обероне .. Все Паскалевские отладчики, которые мне довелось видеть (не много штуки 3 — 4), расставляли точки следования именно по строкам... сдаётся мне что Оберон не далеко от них ушёл в этом плане.
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[2]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 15.06.05 03:30
    Оценка:
    Здравствуйте, Noobi, Вы писали:

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


    Из этого "исследования" можно вывести лишь то, что захочет "исследователь". Контр-пример популярности языков с большим оверхедом: perl. По популярности мало уступает C или С++, по компактности делает не то что Оберон , а я бы даже сказал ассемблер .
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[3]: Синтаксический оверхед
    От: Privalov  
    Дата: 15.06.05 05:02
    Оценка:
    Здравствуйте, Аноним, Вы писали:

    А>Если тут http://www.rsdn.ru/forum/?mid=1219402
    Автор: FDSC
    Дата: 13.06.05

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

    Тут — это где?

    Что-то эта ссылка не работает.
    Re[7]: Ошибка
    От: Кодт Россия  
    Дата: 15.06.05 08:09
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

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


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

    К>>Контрпример — отладчик VB6. Он позволяет трассировать однострочные программы.

    MN>Ну дык речь-то не о VB6, а об Обероне .. Все Паскалевские отладчики, которые мне довелось видеть (не много штуки 3 — 4), расставляли точки следования именно по строкам... сдаётся мне что Оберон не далеко от них ушёл в этом плане.


    Это дурное наследие языков, где было one shot one body (одна инструкция на строку) — кобол, фортран, васик (хотя его можно не зачитывать — он интерпретируемый). Меж-языковые форматы объектных файлов и универсальные отладчики только закрепили эту практику.

    В принципе, никто не мешает сделать сишный или обероновый компилятор, расставляющий метки внутри строки и даже внутри выражения. Только совместим он будет с родной средой разработки/отладки. Или, скажем, будет рожать помимо .obj со стандартной debug info ещё и какое-нибудь хитрое .pdb
    Перекуём баги на фичи!
    Re[8]: Ошибка
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 15.06.05 08:28
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Это дурное наследие языков, где было one shot one body (одна инструкция на строку) — кобол, фортран, васик (хотя его можно не зачитывать — он интерпретируемый). Меж-языковые форматы объектных файлов и универсальные отладчики только закрепили эту практику.


    К>В принципе, никто не мешает сделать сишный или обероновый компилятор, расставляющий метки внутри строки и даже внутри выражения. Только совместим он будет с родной средой разработки/отладки. Или, скажем, будет рожать помимо .obj со стандартной debug info ещё и какое-нибудь хитрое .pdb


    Ну вот как только такие компиляторы для плюсов появятся, вот тогда из промышленных кодинг-стандартов многих компаний пропадёт требования такой записи:
    if(b())
    {
        x();
    }

    Потому что как правило мотивируется оно именно сложностью просмотра этого выражения в отладке и лично я с этим утверждением абсолютно согласен...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[9]: Ошибка
    От: moudrick Россия http://community.moudrick.net/
    Дата: 15.06.05 08:35
    Оценка:
    К>>Это дурное наследие языков, где было one shot one body (одна инструкция на строку) — кобол, фортран, васик (хотя его можно не зачитывать — он интерпретируемый). Меж-языковые форматы объектных файлов и универсальные отладчики только закрепили эту практику.

    К>>В принципе, никто не мешает сделать сишный или обероновый компилятор, расставляющий метки внутри строки и даже внутри выражения. Только совместим он будет с родной средой разработки/отладки. Или, скажем, будет рожать помимо .obj со стандартной debug info ещё и какое-нибудь хитрое .pdb


    MN>Ну вот как только такие компиляторы для плюсов появятся, вот тогда из промышленных кодинг-стандартов многих компаний пропадёт требования такой записи:

    MN>
    MN>if(b())
    MN>{
    MN>    x();
    MN>}
    MN>

    MN>Потому что как правило мотивируется оно именно сложностью просмотра этого выражения в отладке и лично я с этим утверждением абсолютно согласен...

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

    Есть еще такие понятия "Code Review" и "Refactoring"
    И вот если в команде используются эти понятия,
    то применение вышеуказанного Coding Standard сильно ускоряет применение этих понятий.

    Я это говорю серьезно, несмотря на то что мы сейчас в "Коллеги, улыбнитесь"
    Re[10]: Ошибка
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 15.06.05 08:51
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    M>Есть еще такие понятия "Code Review" и "Refactoring"

    M>И вот если в команде используются эти понятия,
    M>то применение вышеуказанного Coding Standard сильно ускоряет применение этих понятий.

    M>Я это говорю серьезно, несмотря на то что мы сейчас в "Коллеги, улыбнитесь"


    То же согласен... Вы ещё забыли про системы автоматической генерации кода, они тоже как-то не особо заботяться о синтаксическом оверхеде и лексемы не считают — генерят всё по одному шаблону
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[2]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 15.06.05 09:45
    Оценка:
    Здравствуйте, Pavel Dvorkin, Вы писали:

    PD>Начал я читать этот тред, довольно быстро надоело. Меня не взгляды Сергея Губанова удивляют, тут ИМХО обсуждать не стоит. Меня другое удивляет — как только какая-нибудь ерунда появится, так все сразу дружно бросаются ее опровергать, не жалея ни сил не времени. Стоит ли ? Так ведь если кто-то заявит, что 2*2=5, глядишь, целая дискуссия начнется на эту тему


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

    Причем в Вашем случае улыбнуть должно, наверное, от объёма треда
    Re[2]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 15.06.05 09:50
    Оценка:
    Здравствуйте, Pavel Dvorkin, Вы писали:

    PD>Начал я читать этот тред, довольно быстро надоело. Меня не взгляды Сергея Губанова удивляют, тут ИМХО обсуждать не стоит. Меня другое удивляет — как только какая-нибудь ерунда появится, так все сразу дружно бросаются ее опровергать, не жалея ни сил не времени. Стоит ли ? Так ведь если кто-то заявит, что 2*2=5, глядишь, целая дискуссия начнется на эту тему


    Да что там — это ещё цветочки... Вы видели в "Священных войнах" топик Windows vs Linux? Вот это точно кладезь бессмыселлного 3.14-здежа ... Просто люди должны отдыхать, или убивать время, когда прогоняются тест-кейсы... Кстати читая эти трэды можно делать весьма правильные (IMHO) выводы о том, у кого в какой стадии находится проект, над которым он работает... Раз человек не пишет ни в один — стало быть занят, значит работа в самом разгаре. А если не один из этих постов не пропускает, значит проект на тестировании, сидит ждёт тасков
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[2]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 15.06.05 10:08
    Оценка:
    Pavel Dvorkin wrote:

    > Начал я читать этот тред, довольно быстро надоело. Меня не взгляды

    > Сергея Губанова удивляют, тут ИМХО обсуждать не стоит. Меня другое
    > удивляет — как только какая-нибудь ерунда появится, так все сразу
    > дружно бросаются ее опровергать, не жалея ни сил не времени. Стоит ли
    > ? Так ведь если кто-то заявит, что 2*2=5, глядишь, целая дискуссия
    > начнется на эту тему

    А что, при желании можно придумать алгебраическую структуру, где это
    будет именно так

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[8]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 15.06.05 14:17
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

    MN>о-па... не является ваш синтаксис минимальным...


    Вы не правы, Вам туда: http://www.rsdn.ru/Forum/Message.aspx?mid=1223914&amp;only=1
    Автор: Сергей Губанов
    Дата: 15.06.05
    Re[11]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 15.06.05 14:21
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Mr. None, Вы писали:


    MN>>perl адназначна... вот где никакого оверхеда ... вот только фиг прочтёшь, что написано...


    СГ>Так ведь, еще Эйнштейн говорил — сделать так просто, как только возможно, но не проще. Но не проще!!!


    Это сказано в защиту Perl или в обвинение?
    Re[12]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 15.06.05 14:27
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    M>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Здравствуйте, Mr. None, Вы писали:


    MN>>>perl адназначна... вот где никакого оверхеда ... вот только фиг прочтёшь, что написано...


    СГ>>Так ведь, еще Эйнштейн говорил — сделать так просто, как только возможно, но не проще. Но не проще!!!


    M>Это сказано в защиту Perl или в обвинение?


    Складывается ощущение, что это просто "сказано". В защиту или в обвинение — это всё относительно
    Re[14]: Устаревший блок begin end
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 15.06.05 14:29
    Оценка:
    Здравствуйте, York, Вы писали:

    Y>Его можно минимизировать хотя бы так:


    Боюсь, что Вы не правы. Вам сюда: http://www.rsdn.ru/Forum/Message.aspx?mid=1223914&amp;only=1
    Автор: Сергей Губанов
    Дата: 15.06.05
    Re[15]: Устаревший блок begin end
    От: moudrick Россия http://community.moudrick.net/
    Дата: 15.06.05 14:33
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Y>>Его можно минимизировать хотя бы так:


    СГ>Боюсь, что Вы не правы. Вам сюда: http://www.rsdn.ru/Forum/Message.aspx?mid=1223914&amp;only=1
    Автор: Сергей Губанов
    Дата: 15.06.05


    И при чем же здесь это, уважаемыйГосподинСтавящийЛевыеСсылкиБезОбъясненийКакимБокомОниЗдесь?
    Re[8]: Ошибка
    От: achp  
    Дата: 15.06.05 14:35
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>В принципе, никто не мешает сделать сишный ... расставляющий метки внутри строки и даже внутри выражения.


    Ох, не сыпь мне соль на рану. Так охота... (облизывается)
    Re[7]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 15.06.05 14:38
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Нет.


    Что нет? Представление цикла как метафункции является простым "но не проще". Примеры — лисп, смолток — вполне наглядные.
    Вот если бы ту же самую метафункцию я привёл в виде голого лямбда- или комбинаторного выражения, это был бы действительно изврат.
    Перекуём баги на фичи!
    Re: Синтаксический оверхед
    От: achp  
    Дата: 15.06.05 14:38
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Угу, Обе... ой, Форт рулит.
    Re[3]: Синтаксический оверхед
    От: Rebus83 Россия  
    Дата: 15.06.05 15:00
    Оценка:
    Здравствуйте, AndreyFedotov, Вы писали:

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


    BC>>Люди, а куда делся сам, так сказать, "виновник торжества"? А то как-то флейм начинает затихать. Скучно становится...


    AF>Эх не берегли мы его...


    Вот-вот! А я ведь предупреждал
    Автор: Rebus83
    Дата: 05.03.05
    !
    Играет ...
    Какая странная планета! — подумал Маленький принц. — Совсем сухая,
    вся в иглах и соленая. И у людей не хватает воображения. Они только
    повторяют то, что им скажешь...
    Re[15]: Ошибка 3
    От: Кодт Россия  
    Дата: 15.06.05 15:34
    Оценка:
    Здравствуйте, Аноним, Вы писали:

    СГ>>Это Вам, вообще-то, надо обращаться в начальную школу — там где деление проходят. Открою Вам секрет. Оказывается если сложить два целых числа, то результат тоже будет целым числом (поэтому и "+"). В то же самое время, если разделить два целых числа, то результат будет уже вовсе не целым, а рациональным числом (поэтому DIV).


    А>Сергей — такой туз в рукаве Вы прятали на протяжении всей дискуссии ? Вот это да... Я сражён, наповал. Лежу копытами кверху и не могу отойти. Вот это синтаксическая мощь Оберона, вот это полёт фантазии Вирта.


    Ладно... вытаскиваем джокера.
    Старый добрый васик имеет две операции деления — x/y вещественное, x\y нацело. Согласитесь, "\" короче чем "DIV".
    Про APL я молчу — он не прошёл фильтр Эйнштейна.
    Перекуём баги на фичи!
    Re[16]: Читать всем - статистикаи читаемость
    От: Mamut Швеция http://dmitriid.com
    Дата: 15.06.05 16:49
    Оценка:
    СГ>>>Это Вам, вообще-то, надо обращаться в начальную школу — там где деление проходят. Открою Вам секрет. Оказывается если сложить два целых числа, то результат тоже будет целым числом (поэтому и "+"). В то же самое время, если разделить два целых числа, то результат будет уже вовсе не целым, а рациональным числом (поэтому DIV).

    M>>Кхм. А вы могли бы просто сказать, что DIV — это целочисленное деление? Я бы понял, уверяю.


    К>А это был пример оверхеда русского языка


    Я так и хотел сначала написать, но потом решил изобразить ущемленную гордость


    dmitriid.comGitHubLinkedIn
    Re[17]: Ошибка 3
    От: Кодт Россия  
    Дата: 15.06.05 18:53
    Оценка:
    Здравствуйте, Аноним, Вы писали:

    К>>Про APL я молчу — он не прошёл фильтр Эйнштейна.

    А>А что это за фильтр такой загадочный, что про него гугль и яндекс не в курсе ?

    "всё должно быть как можно проще, но не проще"
    Перекуём баги на фичи!
    Re[18]: Ошибка 3
    От: Аноним  
    Дата: 15.06.05 18:56
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>"всё должно быть как можно проще, но не проще"


    А ведь знаю — только никак не пришло в голову, что это "фильтр Эйнштейна"...Последствия трёхкратной лоботомии сказываются...
    Re[11]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 16.06.05 03:20
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Mr. None, Вы писали:


    MN>>perl адназначна... вот где никакого оверхеда ... вот только фиг прочтёшь, что написано...


    СГ>Так ведь, еще Эйнштейн говорил — сделать так просто, как только возможно, но не проще. Но не проще!!!


    Сударь, вы не Эйнштейн. А Оберону до простоты, присущей великой формуле E=m*c^2, как от Москвы до Китая раком...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[9]: *
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 16.06.05 03:25
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Mr. None, Вы писали:


    MN>>о-па... не является ваш синтаксис минимальным...


    СГ>Вы не правы, Вам туда: http://www.rsdn.ru/Forum/Message.aspx?mid=1223914&amp;only=1
    Автор: Сергей Губанов
    Дата: 15.06.05


    1) Не говорите куда идти мне и я не скажу, куда идти вам;
    2) Я год писал на asm x86 и поверьте мне — сказать, что это проще простого я не могу .

    А синнтаксиси представленый мной как раз и является минимальным... Точно так же как приведённый г-ном Кодтом:
    while a b

    этого вполне достаточно... Кстати нечто похожее и в Фортране использовалось — часть операторов представлялась как метафункции, подробностей не помню — давно это было.
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[5]: Ошибка
    От: e-Xecutor Россия  
    Дата: 16.06.05 04:43
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Не постигаю, что такого кроется невозможного прочитать элементарное: WHILE a DO x; y; z END


    Односимвольных идентификаторов всего 26
    Далеко на них не уедешь.
    А если так?
    WHILE NOT actionsQueue.isEmpty DO item:=actionsQueue.pop;item.doSomeAction;stateMachine.process(item) END

    У меня консоль шириной 100, а не 80, и то не влазит
    Re[6]: Ошибка
    От: Кодёнок  
    Дата: 16.06.05 04:50
    Оценка:
    СГ>>Не постигаю, что такого кроется невозможного прочитать элементарное: WHILE a DO x; y; z END

    EX>Односимвольных идентификаторов всего 26

    EX>Далеко на них не уедешь.
    EX>А если так?
    EX>WHILE NOT actionsQueue.isEmpty DO item:=actionsQueue.pop;item.doSomeAction;stateMachine.process(item) END
    EX>У меня консоль шириной 100, а не 80, и то не влазит

    Вот именно. У меня вот из 800кб кода ни разу "while (a) { b; c; }" не было. Вообще нигде нет никаких b или c, кроме двух функций. А есть someObject.someProperty, accessor().anotherAccessor().someProperty и т.д.
    Re[14]: Ошибка 3
    От: Privalov  
    Дата: 16.06.05 04:57
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Учите матчасть. Слово FUNCTION было только в Паскале 1970 года. В Оберонах его нет.


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

    M>>И еще вопрос, на засыпку — вопрос о непоследовательности языка. Почему делить — "DIV", а сложить — "+", а не "ADD"?


    СГ>Это Вам, вообще-то, надо обращаться в начальную школу — там где деление проходят. Открою Вам секрет. Оказывается если сложить два целых числа, то результат тоже будет целым числом (поэтому и "+"). В то же самое время, если разделить два целых числа, то результат будет уже вовсе не целым, а рациональным числом (поэтому DIV).


    Открою и Вам секрет. в языке Ассемблера x86 есть 28 типов команды MOV. На основании типов операндов транслятор сам в состоянии определить, какой именно нужен.

    Что касается деления — в других языках, задолго до Паскаля, как для целых, так и для вещественных чисел оно записывалось одинаково — "/".
    Re[3]: Синтаксический оверхед
    От: Аноним  
    Дата: 16.06.05 07:43
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    К>>Вопрос с ходу — ты всегда будешь циклы и комлексные условия с операциями в 1 строчку писать? И что помешало на сишном синтаксисе сделать также?


    СГ>Я соблюдал общепринятые стандарты кодирования. Хочешь верь, а хочешь нет, но инструкции навроде:


    СГ>WHILE a DO x END


    СГ>REPEAT x UNTIL b


    СГ>IF a THEN x ELSE y END


    СГ>CASE n OF a: x | b: y ELSE z END


    СГ>ну натурально принято писать в одну строчку.


    Бред... отлаживать такое крайне неудобно. Есть золотое правило: одна строчка — один оператор.
    Re[11]: Синтаксический оверхед
    От: Аноним  
    Дата: 16.06.05 07:48
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Mr. None, Вы писали:


    MN>>perl адназначна... вот где никакого оверхеда ... вот только фиг прочтёшь, что написано...


    СГ>Так ведь, еще Эйнштейн говорил — сделать так просто, как только возможно, но не проще. Но не проще!!!


    Проще для чего? Для компилятора все просто
    Проще для чтения или для отладки... просто != коротко.
    Re[3]: Синтаксический оверхед
    От: Pavel Dvorkin Россия  
    Дата: 16.06.05 07:57
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    M>Недаром тред находится в разделе "Коллеги, улыбнитесь".

    M>Я не устаю это подчеркивать

    M>Причем в Вашем случае улыбнуть должно, наверное, от объёма треда


    Так ведь автор исходного письма вряд ли знал, какой размер это бедствие примет...
    А насчет улыбнуться — тут плакать уже хочется
    With best regards
    Pavel Dvorkin
    Re[4]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 16.06.05 08:00
    Оценка:
    Здравствуйте, Pavel Dvorkin, Вы писали:

    M>>Недаром тред находится в разделе "Коллеги, улыбнитесь".

    M>>Я не устаю это подчеркивать

    M>>Причем в Вашем случае улыбнуть должно, наверное, от объёма треда


    PD>Так ведь автор исходного письма вряд ли знал, какой размер это бедствие примет...

    Сомневаюсь... Вот оказаться в "Коллеги улыбнитесь" точно не ожидал...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[5]: Синтаксический оверхед
    От: Слава Шевцов Россия http://www.rentaguru.ru/
    Дата: 16.06.05 08:46
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    А>> Бред... отлаживать такое крайне неудобно. Есть золотое правило: одна строчка — один оператор.


    СГ>Не отлаживать программы надо, а математически строго доказывать их корректность.


    И сколько будет стоить это безобразие?
    ----------------------------------------------------------------------------------------------
    Rentaguru
    Re[6]: Ошибка
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 16.06.05 08:48
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    P>Это вы, уважаемый, никогда не работали с языками, допускающими имена переменных, состоящих не более чем из двух символов


    Да что Вы такое говорите? Ну надо же!
    Re[13]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 16.06.05 08:48
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Вообще-то, у Эйнштейна была немного другая другая формула:


    СГ>G_{ij} = (8 Pi k)/(c^4) T_{ij}


    СГ>где G_{ij} — тензор Эйнштейна (алгебраически выражающийся через тензор кривизны Ричи G_{ij} = R_{ij} — 1/2 g_{ij} R), а T_{ij} — тензор энергии импульса материи.


    СГ>А что до E=m*c^2 — так то журналисты раструбили...


    ВО! ТОЧНО! Слушайте а не вспомнить ли вам ваше первое образование и не заняться ли снова в серьёз физикой? Мы уж как-нибудь переживём без новых анекдотов....
    Или вас и от туда турнули, за высказывания об избытке переменных и операций в системе уравнений Максвелла?
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[6]: Тавтология
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 16.06.05 08:55
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M> Ну елки-палки



    Тот код, который пишется в одну строку, я пишу в одну строку.
    Тот код, который не пишется в одну строку я не пишу в одну строку.

    Тавтология, не так ли?

    Например, код WHILE a DO x; y; z END легко пишется в одну строку, поэтому я его и пишу в одну строку. С другой строны код:
    WHILE ahgsdjag.agsdgasgdh(wehdfuiweh, wuedij) DO 
      xwkjedbwej(weili, erhfbyh, uwerufy); 
      ywiebicbwjkebjw(wjbnecu, erhchr, bwuehbc, bwehbcy); 
      z(wbe, hdb, hdbc, GGHJYVCG, UUYYTT)
    END

    не пишется в одну строку, поэтому я его и не пишу в одну строку.

    Еще вопросы будут?
    Re[7]: Тавтология
    От: Demiurg  
    Дата: 16.06.05 09:05
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>

    СГ>Тот код, который пишется в одну строку, я пишу в одну строку.
    СГ>Тот код, который не пишется в одну строку я не пишу в одну строку.

    СГ>Тавтология, не так ли?

    СГ>Например, код WHILE a DO x; y; z END легко пишется в одну строку, поэтому я его и пишу в одну строку. С другой строны код:

    СГ>
    СГ>WHILE ahgsdjag.agsdgasgdh(wehdfuiweh, wuedij) DO 
    СГ>  xwkjedbwej(weili, erhfbyh, uwerufy); 
    СГ>  ywiebicbwjkebjw(wjbnecu, erhchr, bwuehbc, bwehbcy); 
    СГ>  z(wbe, hdb, hdbc, GGHJYVCG, UUYYTT)
    СГ>END
    СГ>

    СГ>не пишется в одну строку, поэтому я его и не пишу в одну строку.

    СГ>Еще вопросы будут?


    Так о чем спор-то?
    ... << RSDN@Home 1.1.4 beta 7 rev. 463>>
    Re[7]: Синтаксический оверхед
    От: Слава Шевцов Россия http://www.rentaguru.ru/
    Дата: 16.06.05 09:10
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

    А>>>> Бред... отлаживать такое крайне неудобно. Есть золотое правило: одна строчка — один оператор.


    СГ>>>Не отлаживать программы надо, а математически строго доказывать их корректность.


    СШ>>И сколько будет стоить это безобразие?


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


    Возможно, возможно. Есть стандарты для некоторых типов ПО, по которым на 100 тыс. строк кода только одна строчка может содержать ошибку. Илиесть мнение, что ядерные реакторы работают, а межпланетные зонды летают на "достаточно хорошем ПО"?
    ----------------------------------------------------------------------------------------------
    Rentaguru
    Re[2]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 16.06.05 09:11
    Оценка:
    Здравствуйте, jcukeng, Вы писали:

    СГ>>WHILE a DO x END


    J>вот как на си это написать:

    J>while(a) x();
    J>без всяких та DO END и прочего.

    Заменяем служебные слова на символ "*":
    WHILE a DO x END = * a * x *
    while(a) x();    = * * a * x * * *

    Оверхед = 6/3 = 2.00

    На 100% больше чем необходимо.
    Re[8]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 16.06.05 09:17
    Оценка:
    Здравствуйте, Слава Шевцов, Вы писали:

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


    СШ>Возможно, возможно. Есть стандарты для некоторых типов ПО, по которым на 100 тыс. строк кода только одна строчка может содержать ошибку. Илиесть мнение, что ядерные реакторы работают, а межпланетные зонды летают на "достаточно хорошем ПО"?


    Любая программа управления ядерным реактором или межпланетным зондом в разу проще банального калькулятора из состава винды . Что называется банальный конечный автомат с 3-мя — 4-мя состояниями, всё остальное механика. И то — такие программы проверяются не путём математического доказательства, а путём многократного тестирования. Одно из подразделений в конторе, где я работаю, занимается разработкой ПО для управления лифтовыми станциями. Поверьте мне они не рисуют блок-схем и не записывают программу в PDL`е, с последующим доказательством оной, а пишут и тестируют как и все, причём наголом C и Assembler`е. Это конечно не ядерный реактор, но тоже сопряжено с жизнями людей и на это есть очень много жётских требований и норм. И нигда нет требования математического доказательства правильности программы.
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[4]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 16.06.05 09:19
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    >>> ? Так ведь если кто-то заявит, что 2*2=5, глядишь, целая дискуссия

    >>> начнется на эту тему

    C>>А что, при желании можно придумать алгебраическую структуру, где это

    C>>будет именно так

    СГ>Нельзя придумать.



    Доказательство в студию.
    Re[4]: Синтаксический оверхед
    От: Слава Шевцов Россия http://www.rentaguru.ru/
    Дата: 16.06.05 09:24
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    >>> ? Так ведь если кто-то заявит, что 2*2=5, глядишь, целая дискуссия

    >>> начнется на эту тему

    C>>А что, при желании можно придумать алгебраическую структуру, где это

    C>>будет именно так

    СГ>Нельзя придумать.


    Смотря как доопределить операцию умножения. Я думаю, что можно построить алгебру, где операция умножения a на b будет работать с умножением результата на 1.25. Нулевой элемент 0, единичный элемент 1/1.25, обратный элемент 1/(a*1.25) — алгебра замечательно строится.
    ----------------------------------------------------------------------------------------------
    Rentaguru
    Re[15]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 16.06.05 09:24
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    M>И уравнения Эйнштейна действительно куда компактнее описывают то же самое, что и уравнения Максвелла, а также по ходу кое-что еще.


    Уравнения Эйнштейна, вообще-то, описывают геометрию пространства (гравитационной поле), а уравнения Максвела — электромагнитное поле.

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

    M>(ради справедливости добавлю, что у меня не получилось повторить на экзамене то же самое...)

    Уравнения Максвела на языке внешних форм Картана записываются еще компактнее:

    dF = 0
    *d*F = J

    где:
    F — 2-форма электромагнитного поля,
    J — 1-форма тока
    d — оператор внешнего дифференцирования
    * — оператор дуальности Ходжа
    Re[7]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 16.06.05 09:28
    Оценка:
    Здравствуйте, Кодт, Вы писали:

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


    СГ>>>Не отлаживать программы надо, а математически строго доказывать их корректность.


    M>>Вам — в Пролог.


    К>Думаешь, на прологе нельзя облажаться?

    К>
    К>coolPredicate(LongMnemonicIdentifier) :-
    К>  deduceXfromId(LongMnemonicIdentifier, X),
    К>  deduceYfromX(X, Y),
    К>  checkYwithId(LongMnemonicIdentificator, Y). /* очепяточка */
    К>



    Несомненно.

    Я имел в виду, что в прологе абсолютно другая философия.
    Не процедурная, как в оБЕРОНЕ, а логическая,
    ориентированная на формальное доказательство, за которое так ратует наш Великий Ум.
    Re[15]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 16.06.05 09:30
    Оценка:
    M>А вообще — может надо вернуться к машинам Тьюринга или нормальной форме Бойса-Кодта?

    Уж не нашего ли Кодта?


    dmitriid.comGitHubLinkedIn
    Re[16]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 16.06.05 09:32
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>>И уравнения Эйнштейна действительно куда компактнее описывают то же самое, что и уравнения Максвелла, а также по ходу кое-что еще.


    СГ>Уравнения Эйнштейна, вообще-то, описывают геометрию пространства (гравитационной поле), а уравнения Максвела — электромагнитное поле.


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

    M>>(ради справедливости добавлю, что у меня не получилось повторить на экзамене то же самое...)

    СГ>Уравнения Максвела на языке внешних форм Картана записываются еще компактнее:


    СГ>dF = 0

    СГ>*d*F = J

    СГ>где:

    СГ>F — 2-форма электромагнитного поля,
    СГ>J — 1-форма тока
    СГ>d — оператор внешнего дифференцирования
    СГ>* — оператор дуальности Ходжа

    Распишите плз поподробнее форму F, J.
    Какого типа эти объекты? Каково их содержимое? Каков их физический смысл?

    Можно также расписать операторы * и d.

    Также, скажите, описывают ли уравнения Максвелла на языке внешних форм Катрана времениподобные интервалы пространственно-временного континуума? Если да, то как?
    Re[16]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 16.06.05 09:35
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>>А вообще — может надо вернуться к машинам Тьюринга или нормальной форме Бойса-Кодта?


    M>Уж не нашего ли Кодта?


    Ой... опечатка. Кодда, конечно!

    Признаюсь, сделал ее спецом, не зная, имеет ли отношение нормальной форме Бойса-Кодда к обсуждаемому вопросу.
    Но раздел позволяет такие вольности
    Re[3]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 16.06.05 09:35
    Оценка:
    СГ>Заменяем служебные слова на символ "*":
    СГ>
    СГ>WHILE a DO x END = * a * x *
    СГ>while(a) x();    = * * a * x * * *
    СГ>

    СГ>Оверхед = 6/3 = 2.00

    СГ>На 100% больше чем необходимо.



    здесь
    Автор: Mamut
    Дата: 15.06.05


    dmitriid.comGitHubLinkedIn
    Re[9]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 16.06.05 09:38
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

    MN>Здравствуйте, Слава Шевцов, Вы писали:


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


    СШ>>Возможно, возможно. Есть стандарты для некоторых типов ПО, по которым на 100 тыс. строк кода только одна строчка может содержать ошибку. Илиесть мнение, что ядерные реакторы работают, а межпланетные зонды летают на "достаточно хорошем ПО"?


    MN>Любая программа управления ядерным реактором или межпланетным зондом в разу проще банального калькулятора из состава винды .


    По Дискавери одной из самых сложных программ, работающих сегодня, назвали программу автоматического входа шаттла в атмосферу. С начала входа до -4 км до посадки люди к управлению даже не прикасаются. А там, как никак — управляемое падение (планированием это сложно назвать) на запредельных скоростях (13-25 Мах, что ли).

    Думаю, там ни С, ни Оберон даже близко не подпускали


    dmitriid.comGitHubLinkedIn
    Re[17]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 16.06.05 09:47
    Оценка:
    Здравствуйте, Кодт, Вы писали:

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


    M>>>А вообще — может надо вернуться к машинам Тьюринга или нормальной форме Бойса-Кодта?


    M>>Уж не нашего ли Кодта?


    К>Прям стыдно за себя стало: будто придумал что-то на пару с Бойсом, а когда и где — вспомнить не могу


    Чтож вы тогда пили интересно...
    Re[7]: Ошибка
    От: Privalov  
    Дата: 16.06.05 09:54
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    P>Это вы, уважаемый, никогда не работали с языками, допускающими имена переменных, состоящих не более чем из двух символов


    СГ>Да что Вы такое говорите? Ну надо же!


    Это надо понимать так, что ролько с такими языкамн Вы и работаете? Или имитируете их?
    Re[3]: Ошибка 4
    От: Privalov  
    Дата: 16.06.05 09:59
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Синтаксис Паскаля 1970 переводится в Си-образный заменой begin --> { и end --> }.


    А что происходит с do, repeat, var, type, const? Они превращаются в комментарии?
    Re[2]: Синтаксический оверхед
    От: Privalov  
    Дата: 16.06.05 10:06
    Оценка:
    Здравствуйте, e-Xecutor, Вы писали:

    EX>Здравствуйте, Сергей Губанов, Вы писали:


    EX>Я понял какой язык должен понравится Сергею!

    EX>Brainfuck!
    EX>1) Он и так постоянно это делает!
    EX>2) Ничего лишнего!


    Или это. Знаю, что баян
    Автор: Real 3L0
    Дата: 28.10.04
    , но уж очень в тему.
    Re: Синтаксический оверхед
    От: Аноним  
    Дата: 16.06.05 10:12
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.

    СГ>2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо (чтобы читающему понятно стало где что написано).

    Вас это беспокоит ? Вы хотите об этом поговорить ? Спокойно — не дёргайтесь, рубашку мы затянули хорошо. Пару успокаивающих укольчиков — и всё будет хорошо...
    Re[8]: Тавтология
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 16.06.05 10:37
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    M>и не поступит так, как г-н Больцман.


    А он как поступил?
    Re[9]: Тавтология
    От: moudrick Россия http://community.moudrick.net/
    Дата: 16.06.05 10:44
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>>и не поступит так, как г-н Больцман.


    СГ>А он как поступил?


    здесь его краткая биография.
    Читать последний абзац.
    Re[10]: Тавтология
    От: moudrick Россия http://community.moudrick.net/
    Дата: 16.06.05 10:48
    Оценка:
    M>>>и не поступит так, как г-н Больцман.

    СГ>>А он как поступил?


    M>здесь его краткая биография.

    M>Читать последний абзац.

    "Больцман биография"@Google
    Re[10]: Тавтология
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 16.06.05 10:57
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    M>Здравствуйте, Сергей Губанов, Вы писали:


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


    M>>>и не поступит так, как г-н Больцман.


    СГ>>А он как поступил?


    M>здесь его краткая биография.

    M>Читать последний абзац.

    А, не беспокойтесь, я тоже тут просто веселюсь.
    Re[4]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 16.06.05 10:58
    Оценка:
    Сергей Губанов wrote:

    > C>А что, при желании можно придумать алгебраическую структуру, где это

    > C>будет именно так
    > Нельзя придумать.

    Поздравляю, у нас на экзамене вы бы провалились

    У нас как раз был вопрос — придумать группу, включающую в себя все целые
    числа, в которой 2+2=5.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[5]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 16.06.05 10:59
    Оценка:
    M>>2. Настоятельно рекомендуб считать также и пробелы.

    СГ>У пробельных символов есть свой натурально присущий им смысл. Считать их — означает наделять их каким-то еще большим смыслом чем у них и так есть.


    У скобочек (по крайней мере, круглых) тоже есть свой не менее натурально присущий им смысл (здесь
    Автор: Mamut
    Дата: 15.06.05
    ) читать в самом низу. Считать их — означает наделять их каким-то еще большим смыслом чем у них и так есть.

    Твоими устами буду судить тебя, лукавый раб
    (c) Евангелие от Луки, (Лк. 19: 22)

    И твоими же методами. Т.е. с соответсвующими ссылочками.

    M>>3. Почему Вас так беспокоит этот Гондурас?


    СГ>Меня-то? Н-у-у, так взгрустнулось на досуге, а сотне местных ковбоев делать нефига было, подхватили идею, начали обсасывать со всех сторон...


    Вот видите? а ведь я же предупреждал! (ссылку искать лень)
    Re[5]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 16.06.05 11:41
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Сергей Губанов wrote:


    >> C>А что, при желании можно придумать алгебраическую структуру, где это

    >> C>будет именно так
    >> Нельзя придумать.

    C>Поздравляю, у нас на экзамене вы бы провалились


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

    C>числа, в которой 2+2=5.

    Если +, то не группу, а алгебру. Всё равно нельзя 2+2=4.
    Re: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 16.06.05 11:43
    Оценка:
    Вооще наш тред по силе воздействия не тянет ни на "Диагональное программирование" (здесь)
    ни на "Разгон 15" монитора да 17" (может кто подскажет ссылку?)

    Поэтому предлагаю его тихо прекратить.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[6]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 16.06.05 11:44
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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

    C>>числа, в которой 2+2=5.

    СГ>Если +, то не группу, а алгебру. Всё равно нельзя 2+2=4.


    Почему сразу алгебру? Начнём с некоммутативных групп и далее в сторону усложнения...
    И почему нельзя? Я привёл два примера, в которых 2+2=2*2=5.
    Перекуём баги на фичи!
    Re[6]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 16.06.05 11:44
    Оценка:
    Сергей Губанов wrote:

    > C>Поздравляю, у нас на экзамене вы бы провалились

    > C>У нас как раз был вопрос — придумать группу, включающую в себя все
    > целые
    > C>числа, в которой 2+2=5.
    > Если +, то не группу, а алгебру. Всё равно нельзя 2+2=4.

    Нда... Советую прочитать учебник по высшей алгебре, раздел
    "алгебраические структуры" и "группы".

    Тем более, что Кодт уже привел пример (он бы экзамен у нас сдал ).

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[7]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 16.06.05 12:04
    Оценка:
    Кодт wrote:

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

    > целые
    > C>>числа, в которой 2+2=5.
    > СГ>Если +, то не группу, а алгебру. Всё равно нельзя 2+2=4.
    > Почему сразу алгебру? Начнём с некоммутативных групп и далее в сторону
    > усложнения...
    > И почему нельзя? Я привёл два примера, в которых 2+2=2*2=5.

    Кольцо уже есть, теперь осталось сделать поле

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[8]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 16.06.05 12:06
    Оценка:
    Сергей Губанов wrote:

    > К> Почему сразу алгебру?

    > Потому что +.

    И что? Кто говорит, что + не может обозначать операцию группы?

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[5]: Синтаксический оверхед
    От: Pavel Dvorkin Россия  
    Дата: 16.06.05 12:38
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

    PD>>Так ведь автор исходного письма вряд ли знал, какой размер это бедствие примет...

    MN>Сомневаюсь... Вот оказаться в "Коллеги улыбнитесь" точно не ожидал...

    Да, признаю, виноват, на нижнюю часть исходного постинга я не посмотрел. Я-то думал, что он и впрямь это как шутку преподнес, а оказывается, всерьез. Ну и ну. Как говорится, no comment.
    With best regards
    Pavel Dvorkin
    Re[6]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 16.06.05 12:43
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    СГ>>Не отлаживать программы надо, а математически строго доказывать их корректность.


    P>Вы как-нибудь на досуге попробуйте верифицировать какой-нибудь не слишком тривиальный цикл.


    Та что там не тривиальный ! Вот тут автором треда был запощен простейший код на 20 строк:

    код
    Автор: Сергей Губанов
    Дата: 11.11.04


    (второй листинг)
    В котором он как ни странно допустил ошибку. Математический аппарат дал сбой ?
    Я — свихнувшееся сознание Джо.
    Re[7]: Синтаксический оверхед
    От: Аноним  
    Дата: 16.06.05 13:17
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>[skip в полном обалдении]


    M>Когда вырасту, хочу быть похожим на Кодта


    А Кодт при всех своих интеллектуальных мощах очень даже молод — 1974 года рождения всего лишь.
    Re[16]: Читать всем - статистикаи читаемость
    От: achp  
    Дата: 16.06.05 13:32
    Оценка:
    Здравствуйте, Demiurg, Вы писали:

    M>>Кхм. А вы могли бы просто сказать, что DIV — это целочисленное деление? Я бы понял, уверяю.


    D> А в Си знак \ и то и то. Оверхед паскаля на лицо


    Ну, вы уже передёргиваете с критикой.

    В Паскале и последышах "/" используется для вещественного деления, вне зависимости от типа аргументов. В Си и последышах, если оба аргумента целые по типу, нужно один из аргументов явно привести к вещественному типу.

    Оператор "div" в Паскале обозначает целочисленное деление и применим только к целым аргументам.
    Re[3]: Синтаксический оверхед
    От: achp  
    Дата: 16.06.05 13:49
    Оценка:
    Здравствуйте, Слава Шевцов, Вы писали:

    СШ>И как его после выучивания обгаживать?


    Со знанием дела.
    Re[17]: Читать всем - статистикаи читаемость
    От: Demiurg  
    Дата: 16.06.05 13:53
    Оценка:
    Здравствуйте, achp, Вы писали:

    D>> А в Си знак \ и то и то. Оверхед паскаля на лицо


    A>Ну, вы уже передёргиваете с критикой.


    A>В Паскале и последышах "/" используется для вещественного деления, вне зависимости от типа аргументов. В Си и последышах, если оба аргумента целые по типу, нужно один из аргументов явно привести к вещественному типу.


    A>Оператор "div" в Паскале обозначает целочисленное деление и применим только к целым аргументам.


    Понятно все это... Но передерг идет с обеих сторон
    ... << RSDN@Home 1.1.4 beta 7 rev. 463>>
    Re[8]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 16.06.05 14:05
    Оценка:
    M>>[skip в полном обалдении]
    M>>Когда вырасту, хочу быть похожим на Кодта

    А>А Кодт при всех своих интеллектуальных мощах очень даже молод — 1974 года рождения всего лишь.


    Хых. Мне осталось всего шесть лет (я-то 80-го)


    dmitriid.comGitHubLinkedIn
    Re[9]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 16.06.05 14:10
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>>>[skip в полном обалдении]

    M>>>Когда вырасту, хочу быть похожим на Кодта

    А>>А Кодт при всех своих интеллектуальных мощах очень даже молод — 1974 года рождения всего лишь.


    M>Хых. Мне осталось всего шесть лет (я-то 80-го)


    аналогично
    Re[7]: Синтаксический оверхед
    От: Privalov  
    Дата: 16.06.05 14:18
    Оценка:
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Та что там не тривиальный ! Вот тут автором треда был запощен простейший код на 20 строк:


    SJA>код
    Автор: Сергей Губанов
    Дата: 11.11.04


    SJA>(второй листинг)

    SJA>В котором он как ни странно допустил ошибку. Математический аппарат дал сбой ?

    Меня за такие лестницы еще на первом курсе по рукам били. И очень правильно били.
    А вообще-то там и первый листинг чтобы разобрать — серьезно попотеть надо. А после пары-тройки написанных процедур по весьма запутанному алгоритму у меня, боюсь, здоровья не хватит прочесть оба листинга сразу, а тем более найти в них ошибки.
    Re[9]: Синтаксический оверхед
    От: xBlackCat Россия  
    Дата: 16.06.05 14:27
    Оценка:
    Здравствуйте, raskin, Вы писали:

    R>Pavel Dvorkin wrote:


    R>И вообще, отделите в Этюды кусок

    R>задачу "написать очевидно невозможную вещь, которая будет невозможна"...

    Если бог может всё, то может ли бог создать камень, который не сможет поднять?
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Rojac &mdash; Rsdn Offline JAva Client
    Анонсы и обсуждение здесь
    Автор: xBlackCat
    Дата: 08.02.10
    Re[8]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 16.06.05 14:45
    Оценка:
    Здравствуйте, Аноним, Вы писали:

    А>А Кодт при всех своих интеллектуальных мощах очень даже молод — 1974 года рождения всего лишь.


    ...Ковчег, в котором покоятся интеллектуальные мощи Кодта...
    Перекуём баги на фичи!
    Re[9]: Синтаксический оверхед
    От: Аноним  
    Дата: 16.06.05 14:48
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Здравствуйте, Аноним, Вы писали:


    А>>А Кодт при всех своих интеллектуальных мощах очень даже молод — 1974 года рождения всего лишь.


    К>...Ковчег, в котором покоятся интеллектуальные мощи Кодта...


    Теперь я бы не рекомендовал тебе ходить без громоотвода — мало ли
    Re[11]: Синтаксический оверхед
    От: Pavel Dvorkin Россия  
    Дата: 17.06.05 01:48
    Оценка:
    Здравствуйте, Кодт, Вы писали:

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


    BC>>Если бог может всё, то может ли бог создать камень, который не сможет поднять?


    К>Может, но не хочет


    А может ли бог захотеть то, что он не хочет ?
    With best regards
    Pavel Dvorkin
    Re[2]: Синтаксический оверхед
    От: e-Xecutor Россия  
    Дата: 17.06.05 08:29
    Оценка:
    Здравствуйте, ForestLabs, Вы писали:

    FL>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.


    FL>Гы. Был такой язык российского разлива — Ямб.

    FL>Дык в нем циклы писались так:
    FL>(что-то в цикле)3
    FL>Т.е. в примере выполнить цикл 3 раза. Ну лаконичнее некуда.

    Дык Ruby!

    3.times{puts "hello"}
    Re[5]: Синтаксический оверхед
    От: ansi  
    Дата: 17.06.05 09:56
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Аноним, Вы писали:


    А>> Бред... отлаживать такое крайне неудобно. Есть золотое правило: одна строчка — один оператор.


    СГ>Не отлаживать программы надо, а математически строго доказывать их корректность.


    А как ты докажешь их корректность мне интересно? Насколько я знаю, доказать корректность нельзя даже для
    double max(double a, double b) {
       return a > b ? a : b;
    }
    new RSDN@Home(1.1.4, 303) << new Message(); std::head::ear << "Ice MC — Never stop believing";
    Re[19]: Ошибка 3
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 17.06.05 10:02
    Оценка:
    Здравствуйте, Centaur, Вы писали:
    C>Есть предложение придать этому фильтру звание бритвы, по аналогии с бритвами Оккама и Хэнлона
    А это что, простите мне мое невежество?

    Насчет предложения — почти согласен. Принцип Эйнштейна несколько расширяет принцип Оккама, т.к. говорит не только о необходиомости простоты, но и о необходимости ее ограничивать. Так что это, пожалуй, ножницы Эйнштейна.
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[6]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 17.06.05 10:14
    Оценка:
    Здравствуйте, ansi, Вы писали:

    A>А как ты докажешь их корректность мне интересно? Насколько я знаю, доказать корректность нельзя даже для

    A>double max(double a, double b) {
    A>   return a > b ? a : b;
    A>}

    Почему нельзя?
    Перекуём баги на фичи!
    Re[7]: Синтаксический оверхед
    От: ansi  
    Дата: 17.06.05 12:02
    Оценка:
    Здравствуйте, Кодт, Вы писали:

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


    A>>А как ты докажешь их корректность мне интересно? Насколько я знаю, доказать корректность нельзя даже для

    К>
    A>>double max(double a, double b) {
    A>>   return a > b ? a : b;
    A>>}
    К>

    К>Почему нельзя?

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

    Всего 2^(64 + 64) вариантов. Например, проверяем миллион тестов в секунду:

    2^128 / 10^6  ==  10^128 * log10(2) / 10^6  >  10^38 / 10^6  ==  10^32 секунд  ~
    
    ~  10^32 / (60 * 60 * 24 * 365) лет  >  10^32 / 10^8  ==  10^24 лет.


    Пример давался еще на лекциях первого курса... Ну оно конечно возможно, но оооочень-очень долго
    new RSDN@Home(1.1.4, 303) << new Message(); std::head::ear << "Bryan Adams — All for love (with Rod Stewart and Sting)";
    Re: Синтаксический оверхед
    От: boomsic Россия  
    Дата: 17.06.05 12:16
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали фигню



    #define IF if(
    #define THEN )
    #define END ;


    IF a THEN b END


    вообщем как то на пустом (надуманом) месте спор...
    ICQ 227964124
    Re[2]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 17.06.05 12:18
    Оценка:
    B>#define IF if(
    B>#define THEN )
    B>#define END ;

    define-ы не рулЯт.
    Re[3]: Синтаксический оверхед
    От: boomsic Россия  
    Дата: 17.06.05 12:19
    Оценка:
    Здравствуйте, moudrick, Вы писали:


    M>define-ы не рулЯт.


    почему?
    зато "Синтаксический оверхед" уменьшется в разы
    ICQ 227964124
    Re[8]: Синтаксический оверхед
    От: Аноним  
    Дата: 17.06.05 12:35
    Оценка:
    Здравствуйте, ansi, Вы писали:

    A>Здравствуйте, Кодт, Вы писали:


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


    А что — принцип индукции уже на работает ?
    Re[5]: Синтаксический оверхед
    От: boomsic Россия  
    Дата: 17.06.05 12:37
    Оценка:
    Здравствуйте, moudrick, Вы писали:

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


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



    M>>>define-ы не рулЯт.

    B>>почему?
    M>А вообще да... В обчных Сях (без плюсов) без define-ов никуда.

    B>>зато "Синтаксический оверхед" уменьшется в разы

    M>(я прикинусь Сергеем Губановым на мнговение, только не убивайте сразу, ладно?)

    M>#define — это директива препроцессора, если Вы помните.

    M>То есть прежде чем отдавать текст на компиляцию, препроцессор заменяет в тексте все define-ы на их фактические значения.
    M>Так что оверхед никуда не девается, он просто умело маскируется под свое отсутствие.


    блин а я как то и не подумал...

    я вот было подумал что уменьшение перерасхода строчек хорошо повлияет на распечатывание кода, типо меньше бумаги... но если важно чтобы и после раскрытия всех дефайнов было все без оверхедов...
    ICQ 227964124
    Re[9]: Синтаксический оверхед
    От: ansi  
    Дата: 17.06.05 12:38
    Оценка:
    Здравствуйте, Кодт, Вы писали:

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


    A>>Ну типа, чтоб доказать корректность, надо прогнать все возможные варианты.

    A>>Всего 2^(64 + 64) вариантов. Например, проверяем миллион тестов в секунду:
    A>>Пример давался еще на лекциях первого курса... Ну оно конечно возможно, но оооочень-очень долго

    К>Интересно, а теорему Пифагора вы тоже проверяли? С какой дискретностью и в каких диапазонах?

    К>

    Ну это вообще как бы совсем другая песня... Одно дело теорема, другое — техническая реализация некоего алгоритма, корректность которого скорее всего можно доказать. Но вот как по-другому доказать корректность именно реализации?
    new RSDN@Home(1.1.4, 303) << new Message(); std::head::ear << "Ice MC — Run fa cover";
    Re[7]: Синтаксический оверхед
    От: Hobot Bobot США  
    Дата: 17.06.05 12:44
    Оценка:
    Здравствуйте, moudrick, Вы писали:


    M>А как же Вы думали? Несомненно! Не должно быть оверхеда ни на каком этапе трансляции программы — от UML или блок-схемы до бинарных машинных кодов! Не должно быть оверхеда даже в исходной модели! Иначе весь мир переподнится оверхедами!


    Сильно напоминает известную статью про перерасход GUID'ов.
    What a piece of work is a man! how noble in reason! how infinite in faculty! in form and moving how express and admirable! in action how like an angel! in apprehension how like a god! the beauty of the world! the paragon of animals!
    Re[10]: Синтаксический оверхед
    От: anton_t Россия  
    Дата: 17.06.05 12:46
    Оценка:
    Здравствуйте, ansi, Вы писали:

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


    Про верификацию программ слышал?
    Re[8]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 17.06.05 12:49
    Оценка:
    M>>А как же Вы думали? Несомненно! Не должно быть оверхеда ни на каком этапе трансляции программы — от UML или блок-схемы до бинарных машинных кодов! Не должно быть оверхеда даже в исходной модели! Иначе весь мир переподнится оверхедами!

    HB>Сильно напоминает известную статью про перерасход GUID'ов.


    Известную а не известную?

    Ссылку на статью — в студию!
    Re[9]: Синтаксический оверхед
    От: Hobot Bobot США  
    Дата: 17.06.05 13:04
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    M>>>А как же Вы думали? Несомненно! Не должно быть оверхеда ни на каком этапе трансляции программы — от UML или блок-схемы до бинарных машинных кодов! Не должно быть оверхеда даже в исходной модели! Иначе весь мир переподнится оверхедами!


    HB>>Сильно напоминает известную статью про перерасход GUID'ов.


    M>Известную а не известную?


    M>Ссылку на статью — в студию!


    здесь
    Автор(ы): Антон Злыгостев
    Дата: 21.02.2003
    What a piece of work is a man! how noble in reason! how infinite in faculty! in form and moving how express and admirable! in action how like an angel! in apprehension how like a god! the beauty of the world! the paragon of animals!
    Re[9]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 17.06.05 13:04
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    M>Ссылку на статью — в студию!


    http://gzip.rsdn.ru/article/mag/200301/GUIDEcology.xml
    Автор(ы): Антон Злыгостев
    Дата: 21.02.2003
    Перекуём баги на фичи!
    Re[11]: Синтаксический оверхед
    От: ansi  
    Дата: 17.06.05 13:35
    Оценка:
    Здравствуйте, anton_t, Вы писали:

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


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


    _>Про верификацию программ слышал?


    Верификация ... нет, не слышал.
    new RSDN@Home(1.1.4, 303) << new Message(); std::head::ear << "тссссссссс";
    Re[11]: Синтаксический оверхед
    От: Demiurg  
    Дата: 17.06.05 13:45
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    BC>>Если бог может всё, то может ли бог создать камень, который не сможет поднять?


    П>В четырех измерениях надо мыслить! Сейчас бог всемогущ и он может создать такой камень. И как только он создаст его — бог перестанет быть всемогущим, т.к. не сможет поднять этот камень.


    Где-то вычитал про такой парадок — бог добр, бог всемогущ, в мире есть зло. То есть одно из этого неверно — либо бог не добр, либо не всемогущ, либо зло не является злом. Что есть истина?
    ... << RSDN@Home 1.1.4 beta 7 rev. 463>>
    Re[12]: Синтаксический оверхед
    От: jazzer Россия Skype: enerjazzer
    Дата: 17.06.05 15:09
    Оценка:
    Здравствуйте, Demiurg, Вы писали:

    D>Здравствуйте, Пацак, Вы писали:


    BC>>>Если бог может всё, то может ли бог создать камень, который не сможет поднять? :)


    П>>В четырех измерениях надо мыслить! Сейчас бог всемогущ и он может создать такой камень. И как только он создаст его — бог перестанет быть всемогущим, т.к. не сможет поднять этот камень. :))


    D> Где-то вычитал про такой парадок — бог добр, бог всемогущ, в мире есть зло. То есть одно из этого неверно — либо бог не добр, либо не всемогущ, либо зло не является злом. Что есть истина? :)

    бог добр, а зло зло :)
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[10]: Синтаксический оверхед
    От: prVovik Россия  
    Дата: 17.06.05 20:04
    Оценка:
    Здравствуйте, Mamut, Вы писали:


    M>По Дискавери одной из самых сложных программ, работающих сегодня, назвали программу автоматического входа шаттла в атмосферу. С начала входа до -4 км до посадки люди к управлению даже не прикасаются. А там, как никак — управляемое падение (планированием это сложно назвать) на запредельных скоростях (13-25 Мах, что ли).


    Ага, они типа проанализировали все программы в мире и пришли к выводу, что именно программа шаттла самая сложная. Была раньше такая реклама: "Известно, что каждая шестая булочка в мире съедается именно с кофем "<название рекламируемой торговой марки>" Это, похоже, из той серии
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[12]: Синтаксический оверхед
    От: prVovik Россия  
    Дата: 18.06.05 08:16
    Оценка:
    Здравствуйте, Demiurg, Вы писали:


    D>Что есть истина?


    На ноль делить нельзя
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[13]: Синтаксический оверхед
    От: raskin Россия  
    Дата: 18.06.05 09:00
    Оценка:
    prVovik wrote:
    > Здравствуйте, Demiurg, Вы писали:
    >
    >
    > D>Что есть истина?
    >
    > На ноль делить нельзя
    Читайте ветку внимательнее... 1/0 = infinity, всё по IEEE стандарту. При
    правильных флагах FPU исключение не произойдёт. Так что можно...
    Posted via RSDN NNTP Server 1.9
    Re[14]: Синтаксический оверхед
    От: prVovik Россия  
    Дата: 18.06.05 14:01
    Оценка:
    Здравствуйте, raskin, Вы писали:

    R>prVovik wrote:

    >> Здравствуйте, Demiurg, Вы писали:
    >>
    >>
    >> D>Что есть истина?
    >>
    >> На ноль делить нельзя
    R>Читайте ветку внимательнее... 1/0 = infinity, всё по IEEE стандарту. При
    R>правильных флагах FPU исключение не произойдёт. Так что можно...

    Ну тогда не надо задавато вопрос "Что есть истина?". Ибо сами себе злобные буратины...
    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[15]: Синтаксический оверхед
    От: raskin Россия  
    Дата: 18.06.05 14:06
    Оценка:
    prVovik wrote:
    > Здравствуйте, raskin, Вы писали:
    >> > На ноль делить нельзя
    > R>Читайте ветку внимательнее... 1/0 = infinity, всё по IEEE стандарту. При
    > R>правильных флагах FPU исключение не произойдёт. Так что можно...
    >
    > Ну тогда не надо задавато вопрос "Что есть истина?". Ибо сами себе
    > злобные буратины...
    Не я задал... С Вашим утверждением согласен.. Кроме слова "тогда".
    Posted via RSDN NNTP Server 1.9
    Re[6]: Синтаксический оверхед
    От: Alex Alexandrov США  
    Дата: 18.06.05 19:32
    Оценка:
    Здравствуйте, Socrat, Вы писали:

    S>Oberon возвращается ---> ...


    Или так: Oberon strikes back...
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    It's kind of fun to do the impossible (Walt Disney)
    Re[6]: Синтаксический оверхед
    От: Amidlokos Россия  
    Дата: 18.06.05 21:21
    Оценка:
    Здравствуйте, ansi, Вы писали:

    A>А как ты докажешь их корректность мне интересно? Насколько я знаю, доказать корректность нельзя даже для

    A>
    A>double max(double a, double b) {
    A>   return a > b ? a : b;
    A>}
    A>


    А она и некорректна — double так не сравнивают.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[7]: Синтаксический оверхед
    От: ansi  
    Дата: 19.06.05 00:08
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:

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


    A>>А как ты докажешь их корректность мне интересно? Насколько я знаю, доказать корректность нельзя даже для

    A>>
    A>>double max(double a, double b) {
    A>>   return a > b ? a : b;
    A>>}
    A>>


    A>А она и некорректна — double так не сравнивают.


    Во-во, о чем и речь... Всегда какой-нибудь подводный камушек можно найти.
    new RSDN@Home(1.1.4, 303) << new Message(); std::head::ear << "Ace Of Base — Unspeakable";
    Re[15]: Синтаксический оверхед
    От: Demiurg  
    Дата: 20.06.05 06:56
    Оценка:
    Здравствуйте, prVovik, Вы писали:

    >>> D>Что есть истина?

    >>>
    >>> На ноль делить нельзя
    R>>Читайте ветку внимательнее... 1/0 = infinity, всё по IEEE стандарту. При
    R>>правильных флагах FPU исключение не произойдёт. Так что можно...

    V>Ну тогда не надо задавато вопрос "Что есть истина?". Ибо сами себе злобные буратины...


    Блин, ну и бред
    ... << RSDN@Home 1.1.4 beta 7 rev. 463>>
    Re: Синтаксический оверхед
    От: Shtirliz Россия  
    Дата: 20.06.05 07:02
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    <... поскипано ...>

    Ребята заканчивайте эту тему.
    Чесное слово — уже давно не смешно и не интересно.
    ... << RSDN@Home 1.1.4 beta 7 rev. 463>> А в Winamp'e: И ничего не слышно...
    Дункан Маклауд любил ходить в лес и издеваться над кукушками.
    138385660
    Re[3]: Синтаксический оверхед
    От: Privalov  
    Дата: 20.06.05 13:20
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Но вопрос в другом. Точнее их два.


    СГ>1) Правильный синтаксис был известен уже в 1979 году (Modula 2). С 1979 года прошло более четверти века.


    Кому известен? И почему новый синтаксис Мдулы-2 не смог сдвинуть с места даже синтаксис Паскаля, который, кстати, жив до сих пор? Ведь Модула-2 была должна полностью вытеснить Паскаль. И кто сказал, что этот синтаксис не был устаревшим к моменту своего появления? На самом деле дата появления того или иного изделия (программы, компилятора, etc.) не является основным критерием его новизны.


    СГ>2) Почему сотня-другая ковбоев отметившихся в этой ветке форума вместо того чтобы сказать, мол, да, действительно рудимент этот си-образный синтаксис, атавизм, так сказать, действительно давно было пора его изжить; наоборот пытается его как-то защищать? Вслепую прут против очевидного. Большинство из них пацаны же еще... Загадка... Хотя тут недавно упоминали про принцип "Не пытайся искать злого умысла в том, что объясняется глупостью"... Образования им не хватает, я думаю.


    А аргументов по существу каких-нибудь не найдется? Впрочем, это же "Коллеги, улыбнитесь". Однако, этого юмора я не понял...
    Re[4]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 20.06.05 13:23
    Оценка:
    Здравствуйте, CrystaX:

    http://www.rsdn.ru/Forum/Message.aspx?mid=1216614&amp;only=1
    Автор: Сергей Губанов
    Дата: 10.06.05
    Re[4]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 20.06.05 13:27
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    СГ>>1) Правильный синтаксис был известен уже в 1979 году (Modula 2).


    P> Кому известен?


    Не ну вообще я фигею просто , а говорили, что я тут самый большой шутник!
    Re[5]: Синтаксический оверхед
    От: CrystaX Россия https://crystax.me/
    Дата: 20.06.05 13:31
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    Ну, это-то я уже читал. Я хотел получить ясный и простой список критериев. Следует ли понимать Ваш ответ так, что единственным и достаточным критерием правильности синтаксиса языка программирования Вы считаете минимальное количество лексем?
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[6]: Синтаксический оверхед
    От: Трурль  
    Дата: 20.06.05 13:47
    Оценка:
    Здравствуйте, Кодт, Вы писали:


    К>1) Если эта группа, помимо целых, включает вещественные...

    К>Пусть есть некое биективное отображение f : R<->R, такое, что f(x1)=2, f(2*x1)=5
    К>Тогда "+"(x,y) = f(F(x) + F(y))
    К>где F — обратная к f.
    К>Пример такого простейшего отображения: f(x) = x*1.5 — 1, F(X) = (X+1)/1.5

    К>В этом случае у нас будет не просто группа, а даже кольцо с делением (поскольку оно есть над R).


    К>2) Придумаем какое-нибудь биективное отображение Z<->Z, с теми же требованиями.

    К>А что там далеко ходить — вот оно
    К>f(x) = (x==4) ? 5 : (x==5) ? 4 : x
    К>F(X) = (X==4) ? 5 : (X==5) ? 4 : x

    Есть возражения. По определению
    2=1+1
    4=1+1+1+1
    5=1+1+1+1+1
    Остюда легко вывести, что 1=0.
    Re[2]: Синтаксический оверхед
    От: Трурль  
    Дата: 20.06.05 13:53
    Оценка:
    Здравствуйте, Shtirliz, Вы писали:

    S>Ребята заканчивайте эту тему.

    S>Чесное слово — уже давно не смешно и не интересно.
    Не любо — не слушай, а флейму не мешай!
    Re[7]: Синтаксический оверхед
    От: bopka  
    Дата: 20.06.05 13:53
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    Т>Есть возражения. По определению

    Т>2=1+1
    Т>4=1+1+1+1
    Т>5=1+1+1+1+1
    Т>Остюда легко вывести, что 1=0.

    Это каким же образом?
    Re[3]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 20.06.05 13:56
    Оценка:
    S>>Ребята заканчивайте эту тему.
    S>>Чесное слово — уже давно не смешно и не интересно.
    Т>Не любо — не слушай, а флейму не мешай!

    Даешь конкурента Win vs Linux!!


    dmitriid.comGitHubLinkedIn
    Re[4]: Синтаксический оверхед
    От: Трурль  
    Дата: 20.06.05 13:58
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C> Тут большинству очевидно обратное — паскалевский синтаксис давно

    C>мертв и нечего его эксгумировать.

    C>Кстати, неС-подобные синтаксисы весьма распространены, просто вы их не

    C>замечатете: Python, Ruby, функциональные языки.

    Так все-таки: "мертв" или "весьма распространены"?
    Re[5]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 20.06.05 14:25
    Оценка:
    Сергей Губанов wrote:

    > C>1. Удобно иметь понятие составного оператора и единобразное его

    > C>обозначение (т.е. скобочки или ХОТЯ БЫ begin/end).
    > Для чего? Ведь нет ни одного места где бы он был нужен.

    Для того, чтобы можно было удобно изменять код (менять if/elseif на
    switch, менять while на if и т.п.).

    Операторы циклов по сути начинают иметь другой смысл, чем в Модула-2.
    Там оператор цикла повторяет свое тело до выполнения какого-то условия,
    а в С оператор цикла выполняет составной/простой оператор. До своего
    логического конца этот подход доведен в функциональных языках (которые
    вы не знаете, конечно же).

    > C>2. НЕудобно постоянно писать лишние then, do и т.п.

    > Лишние THEN и DO писать ни в коем случае не надо — это будет
    > синтаксической ошибкой.

    Они сами лишние.

    > C>3. НЕУДОБНО писать ключевые слова большими буквами.

    > Чего в этом не удобного
    > <http://www.inr.ac.ru/%7Einfo21/blackbox/edit/capitals.htm&gt;?

    Переключать регистр — это неудобно.

    > Читать тоже удобно — зарезервированные слова сразу видно. Именно для

    > этого и было придумано писать служебные слова заглавными буквами.
    > Шрифт, цвет, наклон можно использовать уже для других целей
    > <http://www.inr.ac.ru/%7Einfo21/cpascal/primery.htm&gt; нежели
    > синтаксических.

    Какое же уродство..

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[8]: Синтаксический оверхед
    От: Amidlokos Россия  
    Дата: 20.06.05 14:33
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Некорректно такое заявление. double нельзя (можно, но бессмысленно) сравнивать на равенство (операторами ==, != ), а также на строгое неравенство ( >, < ) с целью "поветвиться".

    К>В данном же случае криминала нет.

    А если мы ищем максимум с целью затем поветвиться?

    Ладно, не будем флеймить, а?
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[4]: Синтаксический оверхед
    От: Privalov  
    Дата: 20.06.05 14:44
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>Даешь конкурента Win vs Linux!!


    А чего? Если слить весь флейм на эту тему в одну большую ветку, то конкурента, в общем, уже получили. Пока, правда, только в масштабах RSDN, но это поправимо.
    Re[7]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 20.06.05 15:55
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    К>>2) Придумаем какое-нибудь биективное отображение Z<->Z, с теми же требованиями.

    К>>А что там далеко ходить — вот оно
    К>>f(x) = (x==4) ? 5 : (x==5) ? 4 : x
    К>>F(X) = (X==4) ? 5 : (X==5) ? 4 : x

    Т>Есть возражения. По определению

    Т>2=1+1
    Т>4=1+1+1+1
    Т>5=1+1+1+1+1
    Т>Остюда легко вывести, что 1=0.

    А я и не пытался как-либо соединить отношение следования с операцией сложения.
    Группа — это пара { множество M, операция M*M->M } обладающая рядом заявленных свойств. Всё.
    Перекуём баги на фичи!
    Re[9]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 20.06.05 15:58
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:

    К>>Некорректно такое заявление. double нельзя (можно, но бессмысленно) сравнивать на равенство (операторами ==, != ), а также на строгое неравенство ( >, < ) с целью "поветвиться".

    К>>В данном же случае криминала нет.

    A>А если мы ищем максимум с целью затем поветвиться?


    A>Ладно, не будем флеймить, а?


    Нет уж, позвольте!

    После нахождения максимума можно ветвиться сколько угодно; разумеется, сравнение с максимумом должно быть с учётом погрешностей.
    double max(double a, double b) { return a>b?a:b; }
    
    ...
    if(max(x,y)==x) { ... } // неправильно
    if(is_equal(max(x,y),x,eps)) { ... } // правильно

    Перекуём баги на фичи!
    Re[5]: Синтаксический оверхед
    От: Alex Alexandrov США  
    Дата: 20.06.05 19:16
    Оценка:
    Здравствуйте, Кодёнок, Вы писали:

    AA>>Но я еще раз попросил бы не делать обобщающих выводов. Научные исследования — это то, что движет мир вперед и то, плодами чего мы пользуемся сегодня. Очень жаль, что сейчас в нашей стране с этим (почти) полная задница. Это значит лишь, что у этой страны будет очень трудное послезавтра, когда нефть кончится...


    Кё>Я ничего не понял


    Даже не знаю, огорчиться мне или обрадоваться...
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    It's kind of fun to do the impossible (Walt Disney)
    Re[4]: Синтаксический оверхед
    От: bkat  
    Дата: 20.06.05 21:46
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    S>>>Ребята заканчивайте эту тему.

    S>>>Чесное слово — уже давно не смешно и не интересно.
    Т>>Не любо — не слушай, а флейму не мешай!

    M>Даешь конкурента Win vs Linux!!


    Не судьба.
    Слишком уж слаба противоположная сторона
    У Linux поклонников — огого...
    У Win — ой, мама родная...
    А у Оберонов — вроде только один СГ на этом форуме и замечен

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

    В общем продолжение следует...
    Re[6]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 21.06.05 02:47
    Оценка:
    Здравствуйте, CrystaX, Вы писали:

    CX>Здравствуйте, Сергей Губанов, Вы писали:


    CX>Ну, это-то я уже читал. Я хотел получить ясный и простой список критериев. Следует ли понимать Ваш ответ так, что единственным и достаточным критерием правильности синтаксиса языка программирования Вы считаете минимальное количество лексем?


    тогда perl с фортраном рулят ...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[5]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 21.06.05 03:18
    Оценка:
    Здравствуйте, bkat, Вы писали:

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


    B>А вот внедрит Сергей и соратники обероны в школе,

    B>да закончат эти школьники универы

    И назовут их люди воинами Оберона...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[4]: Синтаксический оверхед
    От: Трурль  
    Дата: 21.06.05 05:13
    Оценка:
    Здравствуйте, jazzer, Вы писали:

    J>Всем интересен синтаксис, минимизирующий количество нажатий кнопок на клавиатуре.

    О! Самое время влезть с K.
    J>Посему одна обероновская лексема END (плюс обязательный пробел до нее) равна четырем односимвольным сишным лексемам, и это уже является достаточным аргументом в пользу сишного синтаксиса.
    J>Если еще добавить очевидное преимущество сишных небуквенных лексем перед обероновскими буквенными, заключающееся в том, что они не отвлекают внимание от смысла программы (потому что смысл программы состоит в используемых переменных, вызываемых функциях и методах, а совсем не в END, автоматически отвлекающем внимание), то выбора как бы уже и не остается.
    Одна односимвольнаая кашная лексема ' эквивалентна десятку сишных. А если еще добавить очевидное преимущество кашная небуквенных лексем перед сишными буквенными , заключающееся в том, что они не отвлекают внимание от смысла программы (потому что смысл программы состоит в вызываемых функциях, а совсем не в используемых переменных и не в for, while, etc, автоматически отвлекающих внимание), то выбора как бы уже и не остается.
    Re[6]: Синтаксический оверхед
    От: Трурль  
    Дата: 21.06.05 05:16
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>Паскалевский!=неС-подобный, понятия пересекающиеся, но не тождественные...

    Вы, кажется упоминали функциональные языки? А чем синтаксис ML не Паскалевский?
    И что там у нас в Оракле?
    Re[6]: Синтаксический оверхед
    От: Трурль  
    Дата: 21.06.05 05:18
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Операторы циклов по сути начинают иметь другой смысл, чем в Модула-2.

    C>Там оператор цикла повторяет свое тело до выполнения какого-то условия,
    C>а в С оператор цикла выполняет составной/простой оператор. До своего
    C>логического конца этот подход доведен в функциональных языках (которые
    C>вы не знаете, конечно же).

    До логического конца — это до полного уничтожения?
    Re[8]: Синтаксический оверхед
    От: Трурль  
    Дата: 21.06.05 05:20
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>А я и не пытался как-либо соединить отношение следования с операцией сложения.

    К>Группа — это пара { множество M, операция M*M->M } обладающая рядом заявленных свойств. Всё.
    Но символы 2 и 5 не имеют смысла для "просто группы".
    Re[10]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 06:07
    Оценка:
    Здравствуйте, Трурль, Вы писали:

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


    A>>А если мы ищем максимум с целью затем поветвиться?


    Т>Почему-то прочитал это как

    Т>

    А если мы ищем максимум с целью затем повеситься?


    Это к Фрейду.
    Re[5]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 06:19
    Оценка:
    Здравствуйте, Трурль, Вы писали:

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


    J>>Всем интересен синтаксис, минимизирующий количество нажатий кнопок на клавиатуре.

    Т>О! Самое время влезть с K.
    J>>Посему одна обероновская лексема END (плюс обязательный пробел до нее) равна четырем односимвольным сишным лексемам, и это уже является достаточным аргументом в пользу сишного синтаксиса.
    J>>Если еще добавить очевидное преимущество сишных небуквенных лексем перед обероновскими буквенными, заключающееся в том, что они не отвлекают внимание от смысла программы (потому что смысл программы состоит в используемых переменных, вызываемых функциях и методах, а совсем не в END, автоматически отвлекающем внимание), то выбора как бы уже и не остается.
    Т>Одна односимвольнаая кашная лексема ' эквивалентна десятку сишных. А если еще добавить очевидное преимущество кашная небуквенных лексем перед сишными буквенными , заключающееся в том, что они не отвлекают внимание от смысла программы (потому что смысл программы состоит в вызываемых функциях, а совсем не в используемых переменных и не в for, while, etc, автоматически отвлекающих внимание), то выбора как бы уже и не остается.
    Т>)

    Описание и спецификации языка в студию.
    Re[3]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 21.06.05 06:30
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>1) Правильный синтаксис был известен уже в 1979 году (Modula 2). С 1979 года прошло более четверти века.

    (скип)
    СГ>2) Почему сотня-другая ковбоев отметившихся в этой ветке форума вместо того чтобы сказать, мол, да, действительно рудимент этот си-образный синтаксис, атавизм, так сказать, действительно давно было пора его изжить; наоборот пытается его как-то защищать?
    (скип)

    Правильный язык был известен еще в начале XX века (эсперанто). С тех пор прошло 100 лет, но некоторые ковбои до сих пор... и bla-bla-bla-bla-bla...

    ЗЫ Кому что удобно — тот тем и пользуется. Вашим чудо-языком пользуются, увы, не особо — ergo он неудобен.
    Ку...
    Re[7]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 21.06.05 07:22
    Оценка:
    Трурль wrote:

    > C>Операторы циклов по сути начинают иметь другой смысл, чем в Модула-2.

    > C>Там оператор цикла повторяет свое тело до выполнения какого-то условия,
    > C>а в С оператор цикла выполняет составной/простой оператор. До своего
    > C>логического конца этот подход доведен в функциональных языках (которые
    > C>вы не знаете, конечно же).
    > До логического конца — это до полного уничтожения?

    Зачем так сразу? Бывают циклы и в функциональных языках — в виде
    хвостовой рекурсии.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[7]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 21.06.05 07:25
    Оценка:
    Трурль wrote:

    > К>Паскалевский!=неС-подобный, понятия пересекающиеся, но не

    > тождественные...
    > Вы, кажется упоминали функциональные языки? А чем синтаксис ML не
    > Паскалевский?

    Эээ... Проще сказать в чем синтаксис ML — паскалевский. Он паскалевский
    в операторе if..then..else

    > И что там у нас в Оракле?


    PL SQL.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[7]: Синтаксический оверхед
    От: Privalov  
    Дата: 21.06.05 07:56
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    Т>И что там у нас в Оракле?


    Даже не знаю, как сказать... В общем... На Java они переходят с 9-й версии. Во всяком случае, так в соседнем отделе утверждают.
    Re[6]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 08:03
    Оценка:
    Здравствуйте, CrystaX, Вы писали:

    CX>...минимальное количество лексем?


    Минимальное для базовых инструкций (IF, CASE, WHILE, ...), но, естественно, не меньше одной лексемы между идентификаторами пользователя.
    Re[7]: Синтаксический оверхед
    От: Дарней Россия  
    Дата: 21.06.05 08:14
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    P>А почему "оберонцы" во множественном числе? Кстати, портретов Вирта и Страуструпа для полноты картины не хватает.


    Он один, но зато стоит десятка квалифицированных флеймеров!
    One man army, короче говоря. Остается только удивляться, как у него остается время на собственно разработку, при такой то активности в форуме.
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[7]: Синтаксический оверхед
    От: Аноним  
    Дата: 21.06.05 08:23
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Естественно (жаль что нету смайлика такого где человек крутит пальцем у виска), зато мою демонстрацию
    Автор: Сергей Губанов
    Дата: 09.06.05
    , не смотря на ее явную гиперболизацию, сотня ковбоев, включая Вас, почему-то не проигнорировала. К чему-бы это?


    Потому что пока вы страдаете *уйнёй — многие из этой сотни ковбоев ворочают системе по несколько миллионов строк кода. Лень тратить время на поддержание ваше п*здежа.
    Re[8]: Синтаксический оверхед
    От: Трурль  
    Дата: 21.06.05 08:30
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Эээ... Проще сказать в чем синтаксис ML — паскалевский. Он паскалевский

    C>в операторе if..then..else
    for i=1 to n do
      if ... then begin 
        ...
        s := s+1;
      end 
      else begin
        ...
      end;
      while ... do ...done;
    done;


    >> И что там у нас в Оракле?

    C>PL SQL.


    BEGIN
      WHILE .. LOOP
        IF ... THEN ...
        ELSIF ... THEN ...
        ELSE ...
        END IF;
        a := a + 1;
      END LOOP;
    END;
    Re[8]: Синтаксический оверхед
    От: Трурль  
    Дата: 21.06.05 08:35
    Оценка:
    Здравствуйте, Privalov, Вы писали:


    Т>>И что там у нас в Оракле?


    P>Даже не знаю, как сказать... В общем... На Java они переходят с 9-й версии. Во всяком случае, так в соседнем отделе утверждают.

    Many Oracle applications are based on PL/SQL and it would be difficult of Oracle to ever desupport PL/SQL. In fact, all indications are that PL/SQL still has a bright future ahead of it. Many enhancements are still being made to PL/SQL. For example, Oracle 9iDB supports native compilation of Pl/SQL code to binaries.

    Re[9]: Синтаксический оверхед
    От: Privalov  
    Дата: 21.06.05 08:58
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    Т>

    Т>Many Oracle applications are based on PL/SQL and it would be difficult of Oracle to ever desupport PL/SQL. In fact, all indications are that PL/SQL still has a bright future ahead of it. Many enhancements are still being made to PL/SQL. For example, Oracle 9iDB supports native compilation of Pl/SQL code to binaries.


    Дак и пусть себе. Никто же и не заставляет старый код переписывать. А новый вполне можно и на Яве.
    Re[8]: Синтаксический оверхед
    От: Privalov  
    Дата: 21.06.05 09:01
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    M>Математикам дают премию Филдса — так что о них нобелевская своя, ни на что не похожая. Математики и тут отличились.


    Это уже второй раз — первый был, когда они ее не получили. Подробности можно найти где-то на этом форуме.
    Re[7]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 21.06.05 09:09
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    C>>Вам продемонстрировали с десяток раз, что синтаксис С++ далеко не так

    C>>избыточен (скорее идет на равных) с Oberon'ом.
    СГ>А я продемонстрировал
    Автор: Сергей Губанов
    Дата: 09.06.05
    235% по синтаксису и 700% по строчкам.


    А я — 500%
    Автор: Пацак
    Дата: 09.06.05
    по строчкам у оберона над обероном. А если сильно захочется — могу и до 1000% накрутить. И дальше что? Может хватит теоретические примеры за уши притягивать?
    Ку...
    Re[7]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 21.06.05 09:18
    Оценка:
    C>>Для того, чтобы можно было удобно изменять код (менять if/elseif на
    C>>switch, менять while на if и т.п.).

    СГ>Должно быть, прикольное занятие. А в чем его смысл?


    Вам такое понятие, как refactoring известно? Или вы спазу пишете правильный код, не требующий изменений?


    dmitriid.comGitHubLinkedIn
    Re[8]: Синтаксический оверхед
    От: Hobot Bobot США  
    Дата: 21.06.05 09:22
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    C>>>Для того, чтобы можно было удобно изменять код (менять if/elseif на

    C>>>switch, менять while на if и т.п.).

    СГ>>Должно быть, прикольное занятие. А в чем его смысл?


    M>Вам такое понятие, как refactoring известно? Или вы спазу пишете правильный код, не требующий изменений?


    Он сначала доказывает правильность кода строго математически...
    What a piece of work is a man! how noble in reason! how infinite in faculty! in form and moving how express and admirable! in action how like an angel! in apprehension how like a god! the beauty of the world! the paragon of animals!
    Re[9]: Синтаксический оверхед
    От: Privalov  
    Дата: 21.06.05 09:37
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    Д>>One man army, короче говоря. Остается только удивляться, как у него остается время на собственно разработку, при такой то активности в форуме.


    К>А есть уверенность, что остаётся?


    А оно и не нужно. Великая миссия просветительства неучей
    Автор: Сергей Губанов
    Дата: 20.06.05
    обязывает.
    Re[9]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 21.06.05 09:44
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    К>>А я и не пытался как-либо соединить отношение следования с операцией сложения.

    К>>Группа — это пара { множество M, операция M*M->M } обладающая рядом заявленных свойств. Всё.
    Т>Но символы 2 и 5 не имеют смысла для "просто группы".

    А мы родим кривую арифметику: введём отношение следования (чтобы оправдать значения 2 и 5), но операцию сложения не станем выводить из следования.
    Перекуём баги на фичи!
    Re[9]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 21.06.05 10:02
    Оценка:
    C>>>>Для того, чтобы можно было удобно изменять код (менять if/elseif на
    C>>>>switch, менять while на if и т.п.).

    СГ>>>Должно быть, прикольное занятие. А в чем его смысл?


    M>>Вам такое понятие, как refactoring известно? Или вы спазу пишете правильный код, не требующий изменений?


    HB>Он сначала доказывает правильность кода строго математически...


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


    dmitriid.comGitHubLinkedIn
    Re[3]: Синтаксический оверхед
    От: boomsic Россия  
    Дата: 21.06.05 10:26
    Оценка:
    Здравствуйте, moudrick, Вы писали:

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


    AVC>>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.

    СГ>>>2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо (чтобы читающему понятно стало где что написано).

    AVC>>Сергей, Вы затронули интересную тему.

    AVC>>В отличие от модераторов RSDN, я не считаю ее смешной.

    M>Отличнно! Уже собирается анти-C-шная коалиция. А вы говорите, силы неравны.

    M>Щя вам снова вспомнят и объем стандарта C++, и еще много чего.

    M>:-D



    респект...

    катался по полу
    ICQ 227964124
    Re[2]: Синтаксический оверхед
    От: boomsic Россия  
    Дата: 21.06.05 10:28
    Оценка:
    Здравствуйте, AVC, Вы писали:

    AVC>
    AVC>WHILE p DO ... END
    AVC>

    AVC>он абсолютно уверен, что перед следующим оператором после выхода из цикла выполняется условие ~p (NOT p).
    AVC>Если программист читает аналогичный цикл
    AVC>
    AVC>while (p) { ... }
    AVC>

    AVC>на Си/Си++, он не может быть в этом уверен, т.к. внутри цикла может находиться как оператор break, так и знаменитый goto.
    AVC>Соответственно, проверка корректности программы существенно затрудняется.

    а че в обероне нельзя из цикла выходить по брейку???
    ICQ 227964124
    Re[2]: Синтаксический оверхед
    От: Demiurg  
    Дата: 21.06.05 11:57
    Оценка:
    Здравствуйте, AVC, Вы писали:

    AVC>Когда программист пишет (или, что важнее, читает) на Модуле/Обероне цикл

    AVC>
    AVC>WHILE p DO ... END
    AVC>

    AVC>он абсолютно уверен, что перед следующим оператором после выхода из цикла выполняется условие ~p (NOT p).

    ... << RSDN@Home 1.1.4 beta 7 rev. 497>>
    Re[9]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 12:59
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    CX>> Для кого это правильно?


    СГ>Вообще. Без относительно к чему-либо. Теорема Пифагора для кого правильна?

    Для Евклидового пространства.
    В протифном случае вступает в силу Дефект Треугольника.
    Анадлогия не принята, вопрос повторяется — Для кого это правильно?
    Более научно — в случае выполнения каких ограничений?

    CX>>В первом случае мне понадобилось 10 нажатий клавиш. Во втором — 15.

    СГ> +
    CX>>пользователь мыслит не лексемами, а логическими блоками

    СГ>Поэтому сами буквы не считаются.

    Поэтому же не считаются и скобки.
    Re[9]: Синтаксический оверхед
    От: CrystaX Россия https://crystax.me/
    Дата: 21.06.05 13:06
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    CX>> Для кого это правильно?


    СГ>Вообще. Без относительно к чему-либо. Теорема Пифагора для кого правильна?


    Безотносительно не бывает. Та же теорема Пифагора действует только в Евклидовой геометрии. А в геометрии Лобачевского? Не бывает абсолютной истины.
    Поэтому я настаиваю на том, что правильность синтаксиса — понятие относительное, и для большинства программистов (пользователей того или иного языка) более удобным является C-like синтаксис. Это, кстати, ответ на Ваш вопрос о том, доколе этот синтаксис будет жив.

    CX>>В первом случае мне понадобилось 10 нажатий клавиш. Во втором — 15.

    СГ> +
    CX>>пользователь мыслит не лексемами, а логическими блоками

    СГ>Поэтому сами буквы не считаются.


    Ну почему же не считаются? Ведь в лексемы они не силой мысли превращаются, а с помощью вполне осязаемых и исчислимых нажатий на клавиатуре. Аргумент не принимается. Если бы были клавиатуры с лексемами — тогда аргумент я бы принял.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[3]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 13:12
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    AVC>>В отличие от синтаксиса Модулы/Оберона синтаксис Си/Си++ не соответствует принципам структурного программирования.


    AVC>>
    AVC>>while (p) { ... }
    AVC>>

    AVC>>на Си/Си++, он не может быть в этом уверен, т.к. внутри цикла может находиться как оператор break, так и знаменитый goto.
    AVC>>Соответственно, проверка корректности программы существенно затрудняется.

    СГ>Совершенно согласен. Сам на позапрошлой неделе в своей программе на C# обнаружил, что переменная цикла while после его завершения иногда становилась равной -1 вместо ожидаемого минимального значения 0. Ошибка конечно чрезвычайно глупая и мне за нее стыдно, но дело в том, что на Обероне я бы ее просто НЕ СМОГ бы совершить в принципе!


    Исходник в студию.
    Re[8]: Синтаксический оверхед
    От: xBlackCat Россия  
    Дата: 21.06.05 13:14
    Оценка:
    Как говорится, его бы энергию, да в мирное русло...
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Rojac &mdash; Rsdn Offline JAva Client
    Анонсы и обсуждение здесь
    Автор: xBlackCat
    Дата: 08.02.10
    Re[2]: Синтаксический оверхед
    От: Socrat Россия  
    Дата: 21.06.05 13:18
    Оценка:
    Здравствуйте, AVC, Вы писали:

    AVC>1. Собственно синтаксис.


    AVC>а) Соответствие структурным принципам.


    AVC>на Си/Си++, он не может быть в этом уверен, т.к. внутри цикла может находиться как оператор break, так и знаменитый goto.

    AVC>Соответственно, проверка корректности программы существенно затрудняется.
    AVC>То же относится к циклам REPEAT UNTIL ~p и do {} whiie (p).

    Как же вы без break-ов обходитесь?

    AVC>б) Синтаксический "оверхед".


    AVC>Скажите честно: многие ли помнят таблицу приоритетов операторов Си/Си++ полностью?

    AVC>И сравните это с Обероном, где всего четыре уровня приоритетов:
    AVC>1) операция ~ (логическое отрицание);
    AVC>2) мультипликативные операции;
    AVC>3) аддитивные операции;
    AVC>4) сравнения.
    AVC>Остается добавить, что операции одного приоритета выполняются слева направо. И все. Что, сложно?

    А что, из логических операций только отрицание? На помойку такой язык.

    AVC>2. Исходные тексты Си/Си++ и документы Оберона.


    AVC>Есть существенное различие в работе с исходными текстами программ на Си/Си++.

    AVC>Программа на Си/Си++ — это по-прежнему обыкновенный текст.
    AVC>Программа на Обероне — это документ, включающий в себя не только текст, но и множество самых разнообразных объектов.
    AVC>(Причем это различие существует еще с 1980-х годов.)
    AVC>ИМХО, это существенно сказывается на удобстве разработки.

    Все, уговорил. Перехожу на Оберон. Вышли мне на ящик компилятор для 51-го контроллера.
    Re[3]: Синтаксический оверхед
    От: boomsic Россия  
    Дата: 21.06.05 13:21
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    AVC>>В отличие от синтаксиса Модулы/Оберона синтаксис Си/Си++ не соответствует принципам структурного программирования.


    AVC>>
    AVC>>while (p) { ... }
    AVC>>

    AVC>>на Си/Си++, он не может быть в этом уверен, т.к. внутри цикла может находиться как оператор break, так и знаменитый goto.
    AVC>>Соответственно, проверка корректности программы существенно затрудняется.

    СГ>Совершенно согласен. Сам на позапрошлой неделе в своей программе на C# обнаружил, что переменная цикла while после его завершения иногда становилась равной -1 вместо ожидаемого минимального значения 0. Ошибка конечно чрезвычайно глупая и мне за нее стыдно, но дело в том, что на Обероне я бы ее просто НЕ СМОГ бы совершить в принципе!


    ну где исходник то?
    ICQ 227964124
    Re[3]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 13:23
    Оценка:
    Здравствуйте, boomsic, Вы писали:

    B>а че в обероне нельзя из цикла выходить по брейку???


    Циклы бывают всего трех типов:

    1) Проверка условия продолжения перед выполнением итерации

    WHILE a DO ... END
    post condition a = FALSE

    2) Проверка условия завершения в середине выполнения итерации

    LOOP
    ...
    IF a THEN ...; EXIT END;
    ...
    END

    3) Проверка условия завершения в конце итерации

    REPEAT ... UNTIL a
    post condition a = TRUE




    EXIT — это, как бы, сишный break. Он завершает выполнение цикла LOOP. Ни каких других брэйков нет, их больше в принципе не нужно. Если бы из циклов WHILE и REPEAT можно было бы выходить как-то иначе, то post condition для них перестали бы иметь смысл.
    Re[4]: Синтаксический оверхед
    От: boomsic Россия  
    Дата: 21.06.05 13:30
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    B>>а че в обероне нельзя из цикла выходить по брейку???


    СГ>Циклы бывают всего трех типов:


    СГ>1) Проверка условия продолжения перед выполнением итерации


    СГ>WHILE a DO ... END

    СГ>post condition a = FALSE

    СГ>2) Проверка условия завершения в середине выполнения итерации


    СГ>LOOP

    СГ> ...
    СГ> IF a THEN ...; EXIT END;
    СГ> ...
    СГ>END

    СГ>3) Проверка условия завершения в конце итерации


    СГ>REPEAT ... UNTIL a

    СГ>post condition a = TRUE

    СГ>


    СГ>EXIT — это, как бы, сишный break. Он завершает выполнение цикла LOOP. Ни каких других брэйков нет, их больше в принципе не нужно. Если бы из циклов WHILE и REPEAT можно было бы выходить как-то иначе, то post condition для них перестали бы иметь смысл.



    плиз посмотрите следующее

    AVC>Когда программист пишет (или, что важнее, читает) на Модуле/Обероне цикл

    AVC>
    AVC>WHILE p DO ... END
    AVC>

    AVC>он абсолютно уверен, что перед следующим оператором после выхода из цикла выполняется условие ~p (NOT p).
    AVC>Если программист читает аналогичный цикл
    AVC>
    AVC>while (p) { ... }
    AVC>

    AVC>на Си/Си++, он не может быть в этом уверен, т.к. внутри цикла может находиться как оператор break, так и знаменитый goto.
    AVC>Соответственно, проверка корректности программы существенно затрудняется.



    так что получается в обероне точно так же програмист не может быть "уверен, что перед следующим оператором после выхода из цикла выполняется условие ~p (NOT p)."
    ICQ 227964124
    Re[2]: Синтаксический оверхед
    От: Privalov  
    Дата: 21.06.05 13:31
    Оценка:
    Здравствуйте, AVC, Вы писали:

    AVC>1. Собственно синтаксис.


    AVC>а) Соответствие структурным принципам.


    AVC>В отличие от синтаксиса Модулы/Оберона синтаксис Си/Си++ не соответствует принципам структурного программирования.

    AVC>Рассмотрим хотя бы циклы.
    AVC>Когда программист пишет (или, что важнее, читает) на Модуле/Обероне цикл
    AVC>
    AVC>WHILE p DO ... END
    AVC>

    AVC>он абсолютно уверен, что перед следующим оператором после выхода из цикла выполняется условие ~p (NOT p).

    EXIT что, отменили?


    AVC>б) Синтаксический "оверхед".


    AVC>Я согласен с Сергеем, что в синтаксисе Си/Си++ заключен значительный "оверхед".

    AVC>Но таится он в основном в величине и сложности языка и его описания, а также в некоторых синтаксических деталях.
    AVC>Например, в количестве уровней и запутанности приоритетов операторов.
    AVC>Скажите честно: многие ли помнят таблицу приоритетов операторов Си/Си++ полностью?

    А зачем ее помнить? Объяснение, почему так, есть еще у Кернигана и Ритчи. Операции логически сгруппированы, поразрядные операции вместе с арифметическими выполняются редко. Таблица приоритетов операций достатоцно компактна, можно ее на стенку повесить или под стекло положить. В крайнем случае существуют скобки. Конечно, оверхед повышается, но и читаемость тоже.

    AVC>2. Исходные тексты Си/Си++ и документы Оберона.


    AVC>Есть существенное различие в работе с исходными текстами программ на Си/Си++.

    AVC>Программа на Си/Си++ — это по-прежнему обыкновенный текст.
    AVC>Программа на Обероне — это документ, включающий в себя не только текст, но и множество самых разнообразных объектов.

    Это свойство языка? Тогда почему о нем нет ни слова в 30-страничном руководстве, которое лежит сейчас на моем столе?


    AVC>(Причем это различие существует еще с 1980-х годов.)

    AVC>ИМХО, это существенно сказывается на удобстве разработки.
    AVC>Попытаюсь это обосновать.

    AVC>а) Документирование программ.


    AVC>Вот простой пример.

    [....]
    Это относится к IDE.

    AVC>А что же Си/Си++?


    AVC>б) Тестирование программ.


    AVC>Надеюсь, никто не будет спорить, что надо тестировать как программы в целом, так и отдельные компоненты и подпрограммы.


    Естественно.

    AVC>На Си/Си++ тесты, как правило, хранятся в отдельных файлах и "запускаются" отдельными скриптами, которые тоже хранятся в отдельных файлах. В итоге, хранение этих вспомогательных, но необходимых файлов вырастает в целую проблему.


    Какую?

    AVC>(Я уж молчу о той деликатной детали, что многие Си++программисты вообще не хранят тестов. По принципу: протестировал — и забыл. Если не забыл протестировать... )


    [...]
    Это относится к IDE.

    AVC>По моему, это удобно.

    AVC>А что же Си/Си++?

    Команда — это исполняемая программа. В среде Windows программа запускается на выполнение двойным щелчком.
    Re[4]: Ошибка
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 13:31
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>>1. Поддержка максимального количества парадигм программирования (в том числе и структурного)


    СГ>1) Как Вам только что показали структурную парадигму не поддерживает.

    Не показали. Описание структурной парадигмы в студию.
    С указанием мест, где не удовлетворяет.

    СГ>2) Модульную парадигму не поддерживает (в языке нет модулей)

    namespace.
    Описание модульной парадигмы в студию.
    С указанием мест, где не удовлетворяет.

    СГ>3) Компонентно ориентированное программирование не поддерживает (в языке нет модулей и нет сборки мусора)

    Подключи нужную библиотеку — будет тебе сборка мусора, будут и компоненты. А модули тут при чем?
    И вообще, список принципов компонентно-ориентированного программирования в студию.
    Re[4]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 21.06.05 13:39
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    То есть если я напишу

    WHILE a DO 
        IF a THEN ...; EXIT END;
    END


    ... то я получу syntax error?
    Ку...
    Re[10]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 13:49
    Оценка:
    Здравствуйте, CrystaX, Вы писали:

    CX>Безотносительно не бывает.


    Бывает.
    Re[11]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 21.06.05 13:49
    Оценка:
    Сергей Губанов wrote:

    > M>Поэтому же не считаются и скобки.

    > Смотря какие скобки. Скобки в выражении поставленные просто так для
    > наглядности — не считаются. Скобки в инструкции необходимы согласно
    > определению си-образного синтаксиса. Инструкция while написанная без
    > скобок не будет скомпилирована, так как это будет синтаксической
    > ошибкой. В этом случае скобки считаются.

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

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[4]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 21.06.05 13:50
    Оценка:
    Сергей Губанов wrote:

    > EXIT — это, как бы, сишный break. Он завершает выполнение цикла LOOP.

    > Ни каких других брэйков нет, их больше в принципе не нужно. Если бы из
    > циклов WHILE и REPEAT можно было бы выходить как-то иначе, то post
    > condition для них перестали бы иметь смысл.

    Что????? _Совсем_ нет??

    В морг тогда такой язык, без _всяких_ дальнейших вопросов.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[11]: Синтаксический оверхед
    От: CrystaX Россия https://crystax.me/
    Дата: 21.06.05 13:54
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    CX>>Безотносительно не бывает.


    СГ>Бывает.


    Ну и я так тоже могу. Вот: "Не бывает.".
    Вы аргументы приведите, а не постулируйте.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[11]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 13:57
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>>Здравствуйте, Сергей Губанов, Вы писали:


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


    CX>>>> Для кого это правильно?


    СГ>>>Вообще. Без относительно к чему-либо. Теорема Пифагора для кого правильна?

    M>>Для Евклидового пространства.

    СГ>Евклидовое пространство является частью ее формулировки.

    СГ>Но для кого она правильна?
    Я написал Вам, как в данном случае понимается выражения "для кого она правильна". Вы же это поскипали. Потрудитесь отвечать по существу.

    M>>Поэтому же не считаются и скобки.


    СГ>Смотря какие скобки. Скобки в выражении поставленные просто так для наглядности — не считаются. Скобки в инструкции необходимы согласно определению си-образного синтаксиса. Инструкция while написанная без скобок не будет скомпилирована, так как это будет синтаксической ошибкой. В этом случае скобки считаются.

    Тогда считаются и пробелы. Ибо если убрать пробелы, то будет ошибка и в горячо любимом Обероне. А если их же убрать в C, то не будет. Не надо нас маленьких дурить. А надо внимательно читать обоснованные возражения.
    Re[3]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 14:03
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    AVC>>Когда программист пишет (или, что важнее, читает) на Модуле/Обероне цикл

    AVC>>
    AVC>>WHILE p DO ... END
    AVC>>

    AVC>>он абсолютно уверен, что перед следующим оператором после выхода из цикла выполняется условие ~p (NOT p).

    P>EXIT что, отменили?


    Учите "матчасть", а то языка не знаете, а суетесь.

    P>В среде Windows программа запускается на выполнение двойным щелчком.


    Не удержусь от замечания: а в оберонах одинарным! Опять идите учить "матчасть".
    Re[12]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 14:10
    Оценка:
    Здравствуйте, Cyberax, Вы писали:


    C>К пробелам, пожалуйста, такое же отношение проявляйте...


    А к пробелам нету такого же отношения. Они служат для натурального разделения слов друг от друга. А то что при этом одновременно еще и пользовательские идентификаторы от служебных слов отделяют, так спасибо им большое.
    Re[13]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 14:16
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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



    C>>К пробелам, пожалуйста, такое же отношение проявляйте...


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

    А скобки, надо полагать, не служат для *натурального* разделения слов?
    Re[12]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 14:18
    Оценка:
    Здравствуйте, CrystaX, Вы писали:

    CX>Здравствуйте, Сергей Губанов, Вы писали:


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


    CX>>>Безотносительно не бывает.


    СГ>>Бывает.


    CX>Ну и я так тоже могу. Вот: "Не бывает.".

    CX>Вы аргументы приведите, а не постулируйте.

    Вся эта относительность "в промышленных количествах" появилась, надо полагать, из широкой рекламной компании СТО Эйнштена. Однако даже в СТО не все относительно, более того практически всё является абсолютным. Летит ракета со скоростью близкой к скорости света мимо линейки и измеряет ее длину. О! Ура! Длина линейки относительна! А количество отсчетов нарисованных на линейке, количество атомов из которых она сделана и т.д. и т.п. — всё абсолютно.
    Re[5]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 14:20
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    П>Здравствуйте, Сергей Губанов, Вы писали:


    П>То есть если я напишу


    П>
    П>WHILE a DO 
    П>    IF a THEN ...; EXIT END;
    П>END
    П>


    П>... то я получу syntax error?


    Ну да. Вы получите ошибку времени компиляции. Такая программа не будет скомпилирована. EXIT бывает только внутри LOOP ... END, а внутри WHILE или REPEAT его быть не может.
    Re[5]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 14:22
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Что????? _Совсем_ нет??

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

    Циклы бывают всего трех типов, понимаете? В чем проблема-то?
    Re[13]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 14:23
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    CX>>Здравствуйте, Сергей Губанов, Вы писали:


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


    CX>>>>Безотносительно не бывает.


    СГ>>>Бывает.


    CX>>Ну и я так тоже могу. Вот: "Не бывает.".

    CX>>Вы аргументы приведите, а не постулируйте.

    СГ>Вся эта относительность "в промышленных количествах" появилась, надо полагать, из широкой рекламной компании СТО Эйнштена. Однако даже в СТО не все относительно, более того практически всё является абсолютным. Летит ракета со скоростью близкой к скорости света мимо линейки и измеряет ее длину. О! Ура! Длина линейки относительна! А количество отсчетов нарисованных на линейке, количество атомов из которых она сделана и т.д. и т.п. — всё абсолютно


    Вообще, я читал где-то небольшие рассуждения о том, что в ОТО куда меньше отностиельного, нежели в СТО. Найду если за реальное время — дам линку... А вообще это офтоп от нашего флейма. Щас флейм-модер заплюсует.
    Re[10]: Синтаксический оверхед
    От: Amidlokos Россия  
    Дата: 21.06.05 14:23
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    Т>Почему-то прочитал это как

    Т>

    А если мы ищем максимум с целью затем повеситься?


    Ну, если мы ищем максимум в значениях долгов и доходов...
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[4]: Ошибка
    От: Oleg Volkov  
    Дата: 21.06.05 14:24
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>1) Как Вам только что показали структурную парадигму не поддерживает.


    Вы хотите сказать, что на С/С++ невозможно обеспечить p == false после выхода из цикла while(p)?
    Re[6]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 21.06.05 14:31
    Оценка:
    П>>
    П>>WHILE a DO 
    П>>    IF a THEN ...; EXIT END;
    П>>END
    П>>


    П>>... то я получу syntax error?


    СГ>Ну да. Вы получите ошибку времени компиляции. Такая программа не будет скомпилирована. EXIT бывает только внутри LOOP ... END, а внутри WHILE или REPEAT его быть не может.


    Ну и где здесь удобство?

    Яркий пример — читаем данные с сокета. Некая информация.
    while not end of stream
      read socket    
      calculate checksum
      if checksum fails
        raise hacker alert
        exit
      else
        calculate number of bytes read
        if number of bytes greater than MAX_DATA_ALLOWED
          exit
        end if 
        process data
      end if
    end while


    Что делать будем-то? Ставить флаги в глобальных переменных?


    dmitriid.comGitHubLinkedIn
    Re[6]: Синтаксический оверхед
    От: Privalov  
    Дата: 21.06.05 14:40
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:


    СГ>Может. Таково одно из положений структурного программирования.

    СГ>
    СГ>WHILE p DO 
    СГ>  ... 
    СГ>END; 
    СГ>ASSERT(~p) 
    СГ>

    СГ>Этот ассерт ни когда не остановит выполнение программы, условие ~p всегда истинно.

    Много раз уже звучал вопрос, а что EXIT убрали из языка?


    СГ>
    СГ>while (p)
    СГ>{ 
    СГ>  ... 
    СГ>}
    СГ>assert(!p) 
    СГ>

    СГ>А вот этот ассерт иногда может остановить работу программы. Например, если внутри цикла сделать break не присвоив p ложное значение.


    От программы зависит. Простейший пример: найти в массиве первый отрицательный элемент.

    Можно так:
       for (i=0; i < N; i++)
          if (a[i] < 0)
             break;

    Можно так:
       for (i=0; a[i]>=0 && i < N; i++);


    В 1-м примере p=(i<N)
    Во 2-м — p=(a[i]>=0 && i < N);
    Если вставить assert(!p), он сработает в обоих случаях?
    Надо полагать, в Обероне точно так же. Или нет? Тогда просветите.
    Re[4]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 14:40
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>Математически доказал, что там -1 вместо 0?


    Да, без шуток.

    Программа работала корректно (там почти всегда возвращались числа большие 0, ноль — минимум, вот такие данные были), так что тестирование проходило на ура. Методом пристального вглядывания в исходный текст программы обнаружил, вот...


    Примеры типичных ошибок как так может быть:

    Было:
    n = ...
    while(n > 0)
    {
      ...
      n--;
    }
    use(n);

    После глупого с моей стороны так сказать усовершенствования стало:
    n = ...
    while(n --> 0)
    {
      ...
    }
    use(n); // теперь n на 1 меньше чем надо (а иногда нет)

    Мне стыдно за такую глупость, поддался "моде" на --> 0 оператор...


    Еще пример (авторство не моё)
      if(условие1) 
        return ЧтоТо1(......);
    
      if(условие2);
        return ЧтоТо2(......);
    
      if(условие3) 
        return ЧтоТо3(......);

    лишняя точка с запятой поставленная по невнимательности у if(условие2).
    Re[15]: Синтаксический оверхед
    От: CrystaX Россия https://crystax.me/
    Дата: 21.06.05 14:51
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    СГ>Потому что меньше одной "звездочки" нельзя, а больше одной — уже не надо.


    Почему Вы решили, что минимальное количество лексем является признаком правильности синтаксиса? Это откровение свыше или этому есть какие-то реальные обоснования?
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[7]: Синтаксический оверхед
    От: Oleg A. Bachin Украина  
    Дата: 21.06.05 14:52
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>В Modula/Oberon ни одно из указанных Вами слов не присутсвует. До Паскаля мне дела нет, он устарел давным давно.


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

    ЗЫ меня много что не устраивает в делфях, но поверьте не синтаксис
    к begin/end привыкаешь за теже 10-15 минут перехода на делфи, за которые привыкаешь к {} в сях. в конце концов подсветка синтаксиса рулит и эти конструкции заметны только с непривычки.

    ЗЫЫ
    procedure TReferenceTree.UnlinkNode(current: PReferenceNode);
    begin
      // unlink left/right
      if Assigned(current^.LeftInline) then
        begin
          if Assigned(current^.RightInline) then
            begin
              // glue left with right
              current^.LeftInline^.RightInline := current^.RightInline;
              current^.RightInline^.LeftInline := current^.LeftInline;
            end
          else
            // unlink left
            current^.LeftInline^.RightInline := nil;
        end
      else ; // nothink glue/unlink
    
      // unlink next/previous
      if Assigned(current^.PrevSibling) then
        begin
          if Assigned(current^.NextSibling) then
            begin
              // glue periouse with next
              current^.PrevSibling^.NextSibling := current^.NextSibling;

    и т.д... и посмотрю на того кто осмелится такое писать в одну строку! понимаю что процедуры на 2-3 экрана это не нормально, но иногда без них не обойтись
    ... << RSDN@Home 1.1.4 beta 6a rev. 436>>
    Best regards,
    Oleg A. Bachin
    Re[2]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 21.06.05 14:55
    Оценка:
    Здравствуйте, AVC, Вы писали:

    Разрешите вклинится.
    Мой е2-е4:

    AVC>а) Соответствие структурным принципам.


    AVC>В отличие от синтаксиса Модулы/Оберона синтаксис Си/Си++ не соответствует принципам структурного программирования.

    AVC>Рассмотрим хотя бы циклы.

    Да. Рассмотрим.
    Пример:

    MODULE TestTest;
      IMPORT StdLog, Files; 
    
      PROCEDURE Test*();
      VAR  by: INTEGER;
      BEGIN
            by := 10;
    
            LOOP
                (*I expect by==0 after LOOP. Always. Oberon is cool.*)
                IF by=0 THEN EXIT END; 
                by := by - 1;
                EXIT;
            END;
            
            IF by # 0 THEN
                (*What the fuck !*)
            END;
            
      END Test;
    END TestTest.


    Итак, Оберон тоже не соответствует принципам структурного программирования.
    Я — свихнувшееся сознание Джо.
    Re[7]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 14:57
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    P>Много раз уже звучал вопрос, а что EXIT убрали из языка?


    Ёёёёёёёёёёё, повторяю еще раз.

    Циклы бывают всего трех типов:

    1) Проверка условия продолжения перед выполнением итерации

    WHILE a DO ... END
    post condition a = FALSE

    2) Проверка условия завершения в середине выполнения итерации

    LOOP
    ...
    IF a THEN ...; EXIT END;
    ...
    END

    3) Проверка условия завершения в конце итерации

    REPEAT ... UNTIL a
    post condition a = TRUE

    В WHILE и в REPEAT нету никакого EXIT!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! EXIT есть только внутри LOOP ... END. Теперь понятно?

    P>Простейший пример: найти в массиве первый отрицательный элемент.


    На, пожалуй начинать надо с элементарных примеров:
    i := 0;
    WHILE (i < LEN(a)) & (a[i] >= 0) DO INC(i) END
    Re[8]: Синтаксический оверхед
    От: Privalov  
    Дата: 21.06.05 15:00
    Оценка:
    Здравствуйте, Socrat, Вы писали:

    P>>
    P>>   for (i=0; a[i]>=0 && i < N; i++);
    P>>


    S>Хм... Лучше сначала i сравнить с N...


    А почему? Если a[i]<0, то i с N сравниваться уже не будет. Сэкономим пару тактов. Хотя может я не вижу чего. Устал...
    Re[6]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 21.06.05 15:02
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    П>>... то я получу syntax error?

    СГ>Ну да. Вы получите ошибку времени компиляции. Такая программа не будет скомпилирована. EXIT бывает только внутри LOOP ... END, а внутри WHILE или REPEAT его быть не может.

    Угу, ясно. Допустим (совершенно условно):

    while (queue.has_elements()) {
        Elem elem = queue.get_first();
        if (elem.get_state() == ST_FREE) {
            elem.start_processing(...);
            break;
        } else { 
            queue.make_last(elem);
        }
    }


    И чо делать?
    Ку...
    Re[6]: А эхо в ответ: мать...мать...мать...
    От: Mamut Швеция http://dmitriid.com
    Дата: 21.06.05 15:03
    Оценка:
    M>Что, и сборку мустора будем на Оберонах писать? Успехов... покажите только потом исходники, посмеемся вместе.

    GC в Оберонах присутствует по умолчанию


    dmitriid.comGitHubLinkedIn
    Re[8]: Синтаксический оверхед
    От: MShura  
    Дата: 21.06.05 15:11
    Оценка:
    P>>Простейший пример: найти в массиве первый отрицательный элемент.

    СГ>На, пожалуй начинать надо с элементарных примеров:

    СГ>i := 0;
    СГ>WHILE (i < LEN(a)) & (a[i] >= 0) DO INC(i) END

    Предлагаю сравнить количество "лексемм":

    for (i=0; i < N && a[i] >= 0; i++);
    Re[5]: Ошибка
    От: achp  
    Дата: 21.06.05 15:14
    Оценка:
    Здравствуйте, Oleg Volkov, Вы писали:

    OV>Вы хотите сказать, что на С/С++ невозможно обеспечить p == false после выхода из цикла while(p)?


    Формально говоря, это так.
    Re[9]: Синтаксический оверхед
    От: xBlackCat Россия  
    Дата: 21.06.05 15:15
    Оценка:
    Здравствуйте, Privalov, Вы писали:

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


    P>>>
    P>>>   for (i=0; a[i]>=0 && i < N; i++);
    P>>>


    S>>Хм... Лучше сначала i сравнить с N...


    P>А почему? Если a[i]<0, то i с N сравниваться уже не будет. Сэкономим пару тактов. Хотя может я не вижу чего. Устал...


    Если N — это длина массива, то при i = N вначале вылетит ошибка и до проверки i < N не дойдёт. Вот и всё
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Rojac &mdash; Rsdn Offline JAva Client
    Анонсы и обсуждение здесь
    Автор: xBlackCat
    Дата: 08.02.10
    Re[15]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 21.06.05 15:18
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Потому что меньше одной "звездочки" нельзя,


    Спорно. Особенно если, как тебе нравится, не считать пробелы лексемами:

    Было:

    IF a THEN b END
    WHILE a DO b END
    REPEAT a UNTIL b
    FOR a := m TO n DO b END


    if a b c          // * a b c 
    while a b       // * a b
    do a b          // * a b
    for a m n b   // * a m n b


    СГ>а больше одной — уже не надо.


    Еще более спорно.
    Ку...
    Re[8]: Яркий пример
    От: Mamut Швеция http://dmitriid.com
    Дата: 21.06.05 15:41
    Оценка:
    СГ>Какие еще флаги? В каких еще глобальных переменных??????

    СГ>Циклов бывает всего три типа. Здесь налицо цикл с проверкой условия внутри итерации, т.е. цикл LOOP, так и пишем:

    СГ>
    СГ>Я немного оптимизировал: наиболее вероятная ветвь исполнения всегда должна идти после THEN, наименее вероятная ветвь в ELSE — такого требование современных конвеерных процессоров.

    Блин. Костыль на костыле. Объясните мне какая разница между:
    while
      if
        exit

    и
    for
      if
        exit


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

    И еще вопрос. Что удобнее писать:
    while(!stream.eof())
    {
      // code
    }

    или
    LOOP
      IF ~stream.end THEN
        {* code *}
      END
    END

    ?


    dmitriid.comGitHubLinkedIn
    Re[8]: Яркий пример
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 15:42
    Оценка:
    СГ>Я немного оптимизировал: наиболее вероятная ветвь исполнения всегда должна идти после THEN, наименее вероятная ветвь в ELSE — такого требование современных конвеерных процессоров.

    А что, команды языка Оберон напрямую транслируются в машинный команды?
    Re[8]: Яркий пример
    От: Слава Шевцов Россия http://www.rentaguru.ru/
    Дата: 21.06.05 15:45
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    CГ>Я немного оптимизировал: наиболее вероятная ветвь исполнения всегда должна идти после THEN, наименее вероятная ветвь в ELSE — такого требование современных конвеерных процессоров.


    А в чём прикол? Вроде сумма длин прыжков (для каждой ветки) в обоих случаях одинакова и число разрывов конвеера тоже. Или?
    ----------------------------------------------------------------------------------------------
    Rentaguru
    Re[7]: А эхо в ответ: мать...мать...мать...
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 15:48
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>>Что, и сборку мустора будем на Оберонах писать? Успехов... покажите только потом исходники, посмеемся вместе.


    M> GC в Оберонах присутствует по умолчанию


    Одну секундочку. Мы его только пишем. Поэтому нет еще никакого Оберона. И сборки мусора вместе с ним.
    Re[8]: А эхо в ответ: мать...мать...мать...
    От: Mamut Швеция http://dmitriid.com
    Дата: 21.06.05 15:59
    Оценка:
    Здравствуйте, moudrick, Вы писали:

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


    M>>>Что, и сборку мустора будем на Оберонах писать? Успехов... покажите только потом исходники, посмеемся вместе.


    M>> GC в Оберонах присутствует по умолчанию


    M>Одну секундочку. Мы его только пишем. Поэтому нет еще никакого Оберона. И сборки мусора вместе с ним.


    Ааа. Понял То есть — а на чем же написан рантайм Оберона? Боюсь, на ассемблере. Вернее, того Оберона, что BlueBottle. BlackBox вполне себе на C наверное написан


    dmitriid.comGitHubLinkedIn
    Re[7]: Синтаксический оверхед
    От: qwertyuiop Российская Империя  
    Дата: 21.06.05 16:14
    Оценка:
    A>>
    A>>double max(double a, double b) {
    A>>   return a > b ? a : b;
    A>>}
    A>>


    A>А она и некорректна — double так не сравнивают.


    Вот яркий пример догматического подхода к общеизвестным правилам.

    Есть такая догма: "сравнивать double на равенство нельзя!" — значит любая программа, сравнивающая их на равенство — ошибочна. Все, больше ничего объяснять и доказывать не надо.
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[8]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 16:40
    Оценка:
    Здравствуйте, qwertyuiop, Вы писали:

    A>>>
    A>>>double max(double a, double b) {
    A>>>   return a > b ? a : b;
    A>>>}
    A>>>


    A>>А она и некорректна — double так не сравнивают.


    Q>Вот яркий пример догматического подхода к общеизвестным правилам.


    Q>Есть такая догма: "сравнивать double на равенство нельзя!" — значит любая программа, сравнивающая их на равенство — ошибочна. Все, больше ничего объяснять и доказывать не надо.



    А на неравенство?
    Re[8]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 16:52
    Оценка:
    OAB>и т.д... и посмотрю на того кто осмелится такое писать в одну строку!
    OAB> Понимаю что процедуры на 2-3 экрана это не нормально, но иногда без них не обойтись

    Если надо — обойтись всегда можно. Надо привыкать делать из хорошего кода еще более лучший, если это себя оправдывает.
    Рефакторинг рулит. Паттерн Выделение метода (Extract Method). Примерчик там, правда, галименький, но ничего лучшего я не нашел. Применяем его с одновременным применением паттерна добавление параметра (Add Parameter).

    Сокращаем текст длинного метода на ~5 строк. Заодно если называем только что выделенный метод правильно, не нужно тратить лишние строки на поясняющие комментарии (самодокументированность).

     procedure UnlinkLeftRight(current: PReferenceNode)
    // Мой первоначальный вариант названия - ProcessLeftInline - пока не увидел поясняющего коммента.
    begin
    OAB>      if Assigned(current^.RightInline) then
    OAB>        begin
    OAB>          // glue left with right - тоже можно выделить.... но время пока не пришло - ждем-с... обнаружения дублирования этого кода
    OAB>          current^.LeftInline^.RightInline := current^.RightInline;
    OAB>          current^.RightInline^.LeftInline := current^.LeftInline;
    OAB>        end
    OAB>      else
                begin
    OAB>          current^.LeftInline^.RightInline := nil; // unlink left
                end
    end
    
    OAB>procedure TReferenceTree.UnlinkNode(current: PReferenceNode);
    OAB>begin
    OAB>  if Assigned(current^.LeftInline) then
    OAB>    begin
              UnlinkLeftRight(current); // unlink left/right - пусть пока тут побудет, по закону сохрранения исходника
    OAB>    end
    OAB>  else ; // nothink glue/unlink
    
    OAB>  // unlink next/previous
    OAB>  if Assigned(current^.PrevSibling) then
    OAB>    begin
    OAB>      if Assigned(current^.NextSibling) then
    OAB>        begin
    OAB>          // glue periouse with next
    OAB>          current^.PrevSibling^.NextSibling := current^.NextSibling;

    И так далее по образцу.
    По ходу может ообразоваться чудесный шаблонный метод. Это если мы на него надеемся. А если не надеемся, то можно запрятать условие if Assigned(current^.LeftInline) внутрь выделенного метода, чем достигается еще большая экономия в экранных строках каждого отдельно взятого длинного метода:

    procedure UnlinkLeftRight(current: PReferenceNode)
    // Мой первоначальный вариант названия - ProcessLeftInline
    begin
    OAB>  if Assigned(current^.LeftInline) then
    OAB>    begin
    OAB>      if Assigned(current^.RightInline) then
    OAB>        begin
    OAB>          // glue left with right - тоже можно выделить.... но время пока не пришло - ждем-с... обнаружения дублирования этого кода
    OAB>          current^.LeftInline^.RightInline := current^.RightInline;
    OAB>          current^.RightInline^.LeftInline := current^.LeftInline;
    OAB>        end
    OAB>      else
                begin
    OAB>          current^.LeftInline^.RightInline := nil; // unlink left
                end
    OAB>    end
    OAB>  else ; // nothink glue/unlink
    end
    
    OAB>procedure TReferenceTree.UnlinkNode(current: PReferenceNode);
    OAB>begin
          UnlinkLeftRight(current); // все, комент больше не нужен. убиваем, нарушая закон сохранения исходника ;-)
    OAB>  // unlink next/previous
    OAB>  if Assigned(current^.PrevSibling) then
    OAB>    begin
    OAB>      if Assigned(current^.NextSibling) then
    OAB>        begin
    OAB>          // glue periouse with next
    OAB>          current^.PrevSibling^.NextSibling := current^.NextSibling;
    OAB>

    звыняйте, не сильно помню паскаль, может чего-то и не так... но идея такова. На сях, конечно, красивее бы это выглядело меньше буквенных символов, но в паскале никто не мешает/не запрещает применить оправдывающие себя методологии разработки.
    Re[6]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 16:54
    Оценка:
    СГ>>Примеры типичных ошибок как так может быть:

    СГ>>Было:

    СГ>>n = ...
    СГ>>while(n > 0)
    СГ>>{
    СГ>>  ...
    СГ>>  n--;
    СГ>>}
    СГ>>use(n);
    СГ>>

    СГ>>После глупого с моей стороны так сказать усовершенствования стало:
    СГ>>n = ...
    СГ>>while(n --> 0)
    СГ>>{
    СГ>>  ...
    СГ>>}
    СГ>>use(n); // теперь n на 1 меньше чем надо (а иногда нет)
     - то есть как это - иногда?
    СГ>>

    СГ>>Мне стыдно за такую глупость, поддался "моде" на --> 0 оператор...
    Нет никакой моды. Есть техника правильного использования. Ей надо поддаваться, а на моду по возможности забивать.
    Кроме того, операторы инкремента (и префиксные, и постфиксные) обычно питутся без пробела. Это подчеркивает их высокий приоритет. Который уж точно выше, чем у сравнения.

    К>Моде? Может просто не потрудился прочитать документацию и выяснить разницу между постфиксным и префиксными -- и ++? Просто, на мой взгляд, если не удосужился подумать, то никакая верификация тут не поможет

    Тупая замена не эквивалентна. А обоснованная зависит в какой-то мере от окружающего исходника, в частности от "почему иногда"...

        n = (...) + 1; //особенно это полезно будет, если в (...) уже есть в конце - 1
        while( --n > 0)
    СГ>>{
    СГ>>  ...
    СГ>>}
    СГ>>use(n); // теперь n будет такое как надо (а иногда на ровном месте не бывает)
    СГ>>
    Re[5]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 17:04
    Оценка:
    СГ>Еще пример (авторство не моё)
    СГ>
    СГ>  if(условие1) 
    СГ>    return ЧтоТо1(......);
    
    СГ>  if(условие2);
    СГ>    return ЧтоТо2(......);
    
    СГ>  if(условие3) 
    СГ>    return ЧтоТо3(......);
    СГ>

    СГ>лишняя точка с запятой поставленная по невнимательности у if(условие2).

    1. Будьте внимательны.
    2. Соблюдайте Coding standards. Они рулез.
    Re[8]: Синтаксический оверхед
    От: Amidlokos Россия  
    Дата: 21.06.05 17:10
    Оценка:
    Здравствуйте, qwertyuiop, Вы писали:

    Q>Вот яркий пример догматического подхода к общеизвестным правилам.


    Q>Есть такая догма: "сравнивать double на равенство нельзя!" — значит любая программа, сравнивающая их на равенство — ошибочна. Все, больше ничего объяснять и доказывать не надо.


    Славный наш бесстрашный КЫВТ! Что с тобой творится?!! Почему из любой ветки флейм прёт?!

    (насчёт "любая программа": так мы же говорим как раз о строгой теоретической догматичности, которая предполагает ежинственный способ сравнения double. В реальной жизни я сам double сравниваю не краснея, даже в тех случаях когда возможны не особо критичные погрешности)
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[5]: Синтаксический оверхед
    От: qwertyuiop Российская Империя  
    Дата: 21.06.05 17:17
    Оценка:
    СГ>Лишние THEN и DO писать ни в коем случае не надо — это будет синтаксической ошибкой.

    Они — лишние сами по себе. Самый простой синтаксис условного оператора должен быть такой:

    if условие оператор

    Проблема в том, что нужно как-то выделить условие чтобы компилятор смог понять где оно начинается и где заканчивается. Для этого в С поступили просто: заключили его в скобки — логично и симметрично. В Обероне с одной стороны он отделен пробелом (он здесь несет вполне определенный синтаксический смысл, поэтому должен участвовать в подсчете вашего оверхеда), с другой — словом THEN. Ни логики, ни симметрии.
    В качестве оператора в С может стоять как одиночный, так и составной оператор. Оберон же фактически заставляет программиста всегда использовать составной оператор, заключаа его между THEN и END. И это хорошо?! И что вы там подсчитываете, какой оверхед?
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[9]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 17:20
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:

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


    Q>>Вот яркий пример догматического подхода к общеизвестным правилам.


    Q>>Есть такая догма: "сравнивать double на равенство нельзя!" — значит любая программа, сравнивающая их на равенство — ошибочна. Все, больше ничего объяснять и доказывать не надо.


    A>Славный наш бесстрашный КЫВТ! Что с тобой творится?!! Почему из любой ветки флейм прёт?!


    A>(насчёт "любая программа": так мы же говорим как раз о строгой теоретической догматичности, которая предполагает ежинственный способ сравнения double. В реальной жизни я сам double сравниваю не краснея, даже в тех случаях когда возможны не особо критичные погрешности)


    Ничто тебе не мешает написать класс с перегруженными нужным образом операторами сравнения и приведения к double. Разве только отсутствие времени... Может и написан уже где-то. Поиск в осети рулит.
    Re[9]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 19:25
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>Блин. Костыль на костыле. Объясните мне какая разница между:

    M>
    M>while
    M>  if
    M>    exit
    M>

    M>и
    M>
    M>for
    M>  if
    M>    exit
    M>

    M>Почему в Обероне я не могу написать первый случай?

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


    M>И еще вопрос. Что удобнее писать:

    M>
    M>while(!stream.eof())
    M>{
    M>  // code
    M>}
    M>

    M>или
    M>
    M>LOOP
    M>  IF ~stream.end THEN
    M>    {* code *}
    M>  END
    M>END
    M>

    M>?

    Тоже странный вопрос. В первом случае используется цикл с проверкой условия в начале итерации. Во втором случае используется безусловный цикл (исполняющийся вечно).
    Re[9]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 21.06.05 19:26
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    СГ>>Я немного оптимизировал: наиболее вероятная ветвь исполнения всегда должна идти после THEN, наименее вероятная ветвь в ELSE — такого требование современных конвеерных процессоров.


    M>А что, команды языка Оберон напрямую транслируются в машинный команды?


    Есть и такие, но причем тут это?
    Re[10]: Яркий пример
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 19:31
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    СГ>>>Я немного оптимизировал: наиболее вероятная ветвь исполнения всегда должна идти после THEN, наименее вероятная ветвь в ELSE — такого требование современных конвеерных процессоров.


    M>>А что, команды языка Оберон напрямую транслируются в машинный команды?


    СГ>Есть и такие, но причем тут это?

    При том, что разговор зашел про *требование современных конвейерных процессоров*, а не про требования современных виртуальных оберон-машин.
    Re[10]: Яркий пример
    От: moudrick Россия http://community.moudrick.net/
    Дата: 21.06.05 19:55
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Слава Шевцов, Вы писали:


    СШ>>Здравствуйте, Сергей Губанов, Вы писали:


    CГ>>>Я немного оптимизировал: наиболее вероятная ветвь исполнения всегда должна идти после THEN, наименее вероятная ветвь в ELSE — такого требование современных конвеерных процессоров.


    СШ>>А в чём прикол? Вроде сумма длин прыжков (для каждой ветки) в обоих случаях одинакова и число разрывов конвеера тоже. Или?


    СГ>Признаться честно, мне не известны тонкости реализации конвееров. Но то что данные из оперативной памяти грузятся в регистр процессора много тактов всем известный факт. Так вот, очевидно, что для ускорения работы надо "смотреть в перед" и загружать те данные, которые в скором времени понадобятся заранее. Спрашивается как быть процессору если встречается оператор ветвления? Данные из какой ветви загружать заранее? Предпочтение отдается главной ветви (т.е. коду в THEN, а код в ELSE считается исполняемым с меньшей вероятностью. Прошу прощения если не совсем прав, еще раз напоминаю, что мне не известны тонкости реализации конвееров.


    Не совсем. Динамическое предсказание ветвлений рулит. здесь
    Re[3]: Синтаксический оверхед
    От: AVC Россия  
    Дата: 21.06.05 23:34
    Оценка:
    Здравствуйте, CrystaX, Вы писали:

    CX>Так Вы о чем говорите? О языке или о IDE? Определитесь пожалуйста.


    Сначала хочу извиниться за задержку с ответами. Сейчас у меня Интернет только дома, отвечать могу только в нерабочее время, и, увы, похоже, я не успею ответить на все вопросы и возражения.
    Что касется Вашего вопроса: язык или IDE, язык или среда.
    Вопрос разумен.
    Но особенность ситуации в том, что в обероновской среде нет никакого отдельного IDE.
    Все перечисленные возможности программист получает практически "бесплатно". Также он может добавлять в среду новые возможности и развивать ее по своему усмотрению.
    Считаю, что объединение мной особенностей языка и среды в данном случае совершенно правомерно.
    Язык Оберон и был создан для того, чтобы создавать объектно-ориентированные программные системы с подобными свойствами.
    Также как Си был создан в процессе работы над системой UNIX, основанной на других принципах (которые мне тоже нравятся).
    Конечно, случаются и "традиционные" IDE для программирования на Обероне. Например, XDS Modula-2/Oberon-2. К таким случаям сказанное мной об обероновских документах неприменимо.

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re[2]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 22.06.05 03:14
    Оценка:
    Здравствуйте, AVC, Вы писали:

    Большинство высказываний уже прокомментировано и я с ними согласен, в частности с г-ном Privalov`ым
    Автор: Privalov
    Дата: 21.06.05
    поэтому добавлю только свои комментарии.
    AVC>1. Собственно синтаксис.

    AVC>а) Соответствие структурным принципам.


    AVC>То же относится к циклам REPEAT UNTIL ~p и do {} while (p).

    В данном примере в случае C++ проверяется истинность исходного условия. Для Оберона выполняется проверка его отрицания, что приводит к:
    a) лишней ненужной операции — вы считаете лексемы языка, а я такты процессора;
    b) запутывает алгоритм — есть такая мудрость, чтобы понять смысл алгоритма, попробуй произнести его на обычном языке; как по вашему, какая фраза проще для понимания — Оберон: "Повторять до тех пор пока не будет не выполняться p"; C++: "Повторять пока выполняется p". Так как? Какая конструкция проще для понимания?

    AVC>б) Синтаксический "оверхед".


    AVC>Я согласен с Сергеем, что в синтаксисе Си/Си++ заключен значительный "оверхед".

    AVC>Но таится он в основном в величине и сложности языка и его описания, а также в некоторых синтаксических деталях.
    AVC>Например, в количестве уровней и запутанности приоритетов операторов.
    AVC>Скажите честно: многие ли помнят таблицу приоритетов операторов Си/Си++ полностью?
    Честно признаюсь не помню и большой надобности в этом не вижу. Помню только что адидтивный и мультипликативные операции имеют такой же относительный приоритет, как и в жизни (умножение выполняется раньше сложения, а "и" раньше "или"); помню, что [] выполняется раньше & (нужно для таких записей &vec[0]); помню что << и >> имеют очень низкий приоритет, поэтому писать надо так std::cout << (a + b). Для всех остальных случаев есть скобки!

    AVC>2. Исходные тексты Си/Си++ и документы Оберона.


    AVC>а) Документирование программ.


    AVC>Вот простой пример.

    AVC>...
    AVC>А что же Си/Си++?

    Как сказал Privalov — это проблема IDE, во-первых. Во-вторых, вот есть у меня код промышленной программы на C++, его объём составляет примерно 400 мегабайт, число файлов и количество строк не поддаётся исчислению... А теперь представьте, что в каждом файле будет ещё и по картинке.. Даже если это будет хорошо сжатый jpeg объём кода сразу же увеличиться эдак мегов на 500! Простите, у меня диск не резиновый! Да и читать такой исходный код будет малость утомительно — мне зачастую не нужны картинки и комментарии, хорошо написанный код с правильно подобранными именами переменных и функций, не зашумлённый лексемами сам по себе лучший комментарий.

    AVC>б) Тестирование программ.


    AVC>На Си/Си++ тесты, как правило, хранятся в отдельных файлах и "запускаются" отдельными скриптами, которые тоже хранятся в отдельных файлах. В итоге, хранение этих вспомогательных, но необходимых файлов вырастает в целую проблему.


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

    AVC>(Я уж молчу о той деликатной детали, что многие Си++программисты вообще не хранят тестов. По принципу: протестировал — и забыл. Если не забыл протестировать... )

    Я храню — несколько мегобайт юнит-тестов... Доктор я феномен?
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[11]: Яркий пример
    От: Кодёнок  
    Дата: 22.06.05 04:36
    Оценка:
    Q>Тогда мы сразу увидим, по строкам оверхед не в пользу Оберона, а совсем наоборот! Не говоря уже о том, что по символам (которые собственно и наколачивает бедный программист) оверхед Оберона составляет 236/175 = 1.35

    Это ещё так себе, академические примеры.

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

    Вчера закончил переписывать часть своей программы с "тупой реализации" на шаблоны с характеристиками и стратегиями, код уменьшился более чем в 2.5 раза. А на Обероне есть возможность только той "тупой" реализации (или использовать generics, проверку типов в рантайме, о чём даже подумать страшно, как медленно это будет). Кстати, новый код заработал сразу, а в старом месяц находились мелкие погрешности, т.к. фактически было дублирование с минимальными изменениями. Специально для Сергея Губанова могу привести задачу, и мы поглядим на её реализацию на Обероне.

    В другой ветке уже были примеры с новыми типами, с обощёнными алгоритмами — этого недостаточно?
    Re[9]: Яркий пример
    От: Пацак Россия  
    Дата: 22.06.05 04:40
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    П>Итого:

    П>лексем — 24
    П>строк кода — 12
    П>символов (не считая отступов) — 236

    (скип)

    П>Итого:

    П>лексем — 33
    П>строк кода — 9
    П>символов (не считая отступов) — 175

    (скип)

    Ну и до кучи уж тогда:

    Python:
    while not end_of_stream:
        read_socket()
        if checksum == fails:
        raise_hacker_alert()
        break
        if number_of_bytes_read() > MAX_DATA_ALLOWED: break
        process_data()


    Итого:
    лексем — 19
    строк кода — 7
    символов (не считая отступов) — 160

    Не учитывать отступы при подсчете символов в питоновском коде несколько некорректно, но так же некорректно не учитывать пробелы в обероновском или сишном коде. Далее, если посмотреть внимательнее, то можно обнаружить, что в принципе питоновский синтаксис можно еще более упростить, избавившись от ":" при условных операторах и от "()" при вызовах функций (как это сделано в нашем любимом обероне). Получим "усовершенствованный питон":

    while not end_of_stream
        read_socket
        if checksum == fails
        raise_hacker_alert
        break
        if number_of_bytes_read>MAX_DATA_ALLOWED break
        process_data


    Итого:
    лексем — 8
    строк кода — 7
    символов (не считая отступов) — 147

    "Звездочная диаграмма" кода получится примерно такая: (* — лексема, i — идентификатор)
    * i i * i * i i * * i * i * i


    О каком "минимализме" и "оптимальности" оберона мы еще говорим?
    Ку...
    Re[10]: Синтаксический оверхед
    От: Privalov  
    Дата: 22.06.05 04:43
    Оценка:
    Здравствуйте, xBlackCat, Вы писали:

    P>>А почему? Если a[i]<0, то i с N сравниваться уже не будет. Сэкономим пару тактов. Хотя может я не вижу чего. Устал...


    BC>Если N — это длина массива, то при i = N вначале вылетит ошибка и до проверки i < N не дойдёт. Вот и всё


    Таки устал вчера. На самом деле всегда сначала пишу i<N. Зато кое у кого повод высказаться появится.
    Re[8]: Яркий пример
    От: Privalov  
    Дата: 22.06.05 04:46
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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



    СГ>Какие еще флаги? В каких еще глобальных переменных??????


    СГ>Циклов бывает всего три типа.


    Баян, однако!
    Автор: Сергей Губанов
    Дата: 21.06.05
    Re[3]: Синтаксический оверхед
    От: Трурль  
    Дата: 22.06.05 04:56
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    M>Я вам могу сказать, какие приоритетные принципы у C++.

    M>1. Поддержка максимального количества парадигм программирования (в том числе и структурного) здесь
    И все из них поддерживаются кое-как.
    M>2. Поддержка Legacy кода здесь
    Написанного по большей части на C++
    Re[10]: Яркий пример
    От: Пацак Россия  
    Дата: 22.06.05 04:58
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    П>>Ну и где хваленое превышение в разы?

    СГ>33/24 = 1.375
    СГ>12/9 = 1.3333
    СГ>Тоже не хилый оверхедец.

    Ага, причем в двух случаях — в пользу C++ и только в одном — в пользу оберона

    СГ>А если переписать си-образный код так как положено по общепринятым стандартам кодирования в промышленном программировании —

    фигурные скобки в любом случае и на новой строке, то и без того не хилый оверхедец возрастет еще.

    нет такого "общепринятого стандарта". Если так принято в вашей конкретной фирме — это конкретно ваша головная боль.

    Вот что получается после запуска indent -kr b.cpp:
    while (!end_of_stream) {
        read_socket();
        if (checksum == fails) {
        raise_hacker_alert();
        break;
        }
        if (number_of_bytes_read() > MAX_DATA_ALLOWED)
        break;
        process_data();
    }


    Итого:
    лексем — 33
    строк кода — 10
    символов (не считая отступов) — 176

    К Kernighan & Ritchie претензии есть?
    Ку...
    Re[6]: А эхо в ответ: мать...мать...мать...
    От: Трурль  
    Дата: 22.06.05 05:19
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    M>Что, и сборку мустора будем на Оберонах писать? Успехов... покажите только потом исходники, посмеемся вместе.

    А на чем она написана?
    Re[3]: Синтаксический оверхед
    От: Трурль  
    Дата: 22.06.05 05:27
    Оценка:
    Здравствуйте, Socrat, Вы писали:

    S>Как же вы без break-ов обходитесь?

    Все очень просто. В обероновском аналоге switch в break нет нобходимости.
    Re[6]: Синтаксический оверхед
    От: raskin Россия  
    Дата: 22.06.05 05:39
    Оценка:
    Mamut wrote:
    > Стена на стенку идут оберонцы и сишники. В них кидаются камнями и
    > прочими бутылками с зажигательной смесью приверженцы перла, лиспа и
    > ассемблера.

    Паскалисты и схемеры радостно смотрят на поредение толп конкурентов...

    > Ядерный Армагеддон. Все умерли


    Так просто не отделаетесь.. Австралия останется. В ней беглые любители
    sed наконец построят свой, новый мир программирования... Вместе с
    bf-щиками...

    И только тут армагеддон, т.к. все застрелились.
    Posted via RSDN NNTP Server 1.9
    Re[4]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 22.06.05 05:48
    Оценка:
    Трурль wrote:

    > S>Как же вы без break-ов обходитесь?

    > Все очень просто. В обероновском аналоге switch в break нет нобходимости.

    Не про switch говорим (хотя Duff's device — мощная вещь), а про выход из
    циклов по break.

    Крайне удобная вещь.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[4]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 22.06.05 06:16
    Оценка:
    Здравствуйте, AVC, Вы писали:

    AVC>Все это замечательно, но... неверно.

    AVC>(Наверное, я должен добавить "ИМХО"? )
    AVC>Цикл LOOP ничего не "обещает" читателю программы. Он введен для особых ситуаций, где применение WHILE и REPEAT вызывает затруднения. В основном это обработчики прерываний и операции ввода/вывода.

    То есть Вы допускаете, то не все циклы должны завершатся с уверенностью "что перед следующим оператором после выхода из цикла выполняется условие ~p (NOT p)." ? Ну так в C все циклы такие. Они ничего не обещают. Так что выбирайте, или С и Оберон оба не соответствуют "структурным принципам" или оба соответствуют.
    Т.е. я не вижу разницы между
    LOOP EXIT; cond; body; cond2 END
    и
    while(cond) {body; cond2;}
    Они оба или структурные, или оба не структурные.

    Да, всё — ИМХО
    Я — свихнувшееся сознание Джо.
    Re[7]: Синтаксический оверхед
    От: SiAVoL Россия  
    Дата: 22.06.05 06:31
    Оценка:
    Здравствуйте, qwertyuiop, Вы писали:

    Q>Я часто проверяю условие p именно с целью узнать, как произошел выход из цикла: по брейку или "мирным путем".

    Плохое построение цикла. В идеале у цикла должен быть один вход (никаких goto центр_цикла и прочих извращений) и один выход (выход только по условию цикла или только по одному break при while(true) ). Т.е. использования одновременно и цикла с условием и выхода из него по break желательно избегать. Но к сожалению это возможно не всегда (или необходимо разбивать цикл на два). Поэтому выход по break необходимо делать как можно более прозрачным и читаемым, располагать как можно ближе к началу цикла. А уж после цикла проверять как из него вышли... это уже совсем Цикл должен быть вещью в себе (не знаю как это выразить, надеюсь эту фразу вы поймете правильно).

    Q>Меня за это расстреляют или наказание будет более жестокое: год программирования на Обероне?

    Лучше заставить прочитать какой-нибудь фолиант по структурному программированию (не программированию сверху-вниз, а структурному программированию, т.е. именно правльной организации кода). Кстати тут недавно было описание книги Совершенный код
    Автор(ы): Стив Макконнелл

    Опираясь на академические исследования, с одной стороны, и практический
    опыт коммерческих разработок ПО — с другой, автор синтезировал из самых
    эффективных методик и наиболее эффективных принципов ясное прагматичное
    руководство. Каков бы ни был ваш профессиональный уровень, с какими бы
    средствами разработками вы ни работали, какова бы ни была сложность вашего
    проекта, в этой книге вы найдете нужную информацию, она заставит вас
    размышлять и поможет создать совершенный код. Книга состоит из 35 глав,
    предметного указателя и библиографии.
    , вполне сойдет.
    ... << RSDN@Home 1.1.4 beta 7 rev. 463>>
    Re[2]: Керниган & Ритчи
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 06:46
    Оценка:
    Здравствуйте, AVC, Вы писали:

    AVC>Например, в количестве уровней и запутанности приоритетов операторов.

    AVC>Скажите честно: многие ли помнят таблицу приоритетов операторов Си/Си++ полностью?
    AVC>И сравните это с Обероном, где всего четыре уровня приоритетов:
    AVC>1) операция ~ (логическое отрицание);
    AVC>2) мультипликативные операции;
    AVC>3) аддитивные операции;
    AVC>4) сравнения.
    AVC>Остается добавить, что операции одного приоритета выполняются слева направо. И все. Что, сложно?

    С этим согласны сами создатели:

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

    Б. Керниган, Д. Ритчи: "Язык программирования Си", СПб.: "Невский Диалект", 2001.-352 с.:ил.

    страница 15
    Re[5]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 06:56
    Оценка:
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>То есть Вы допускаете, то не все циклы


    Почему же не все. Абсолютно все циклы WHILE и абсолютно все циклы REPEAT.
    Re[6]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 22.06.05 07:08
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    SJA>>То есть Вы допускаете, то не все циклы


    СГ>Почему же не все. Абсолютно все циклы WHILE и абсолютно все циклы REPEAT.


    Я начинаю стеснятся своего имени.
    Я — свихнувшееся сознание Джо.
    Re[3]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 07:11
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

    AVC>>То же относится к циклам REPEAT UNTIL ~p и do {} while (p).

    MN>В данном примере в случае C++ проверяется истинность исходного условия. Для Оберона выполняется проверка его отрицания

    А теперь всё наоборот:

    REPEAT UNTIL q

    и

    do {} while (!q).

    (я заменил q = ~p)

    q — условие останова цикла

    Читается так: Выполнять цикл до тех пор пока условие останова цикла не станет истинным.

    Всё логично.

    В цикле WHILE p DO ... END, p — это условие выполнения цикла (естественно, пишется в начале; отвечает на вопрос: выполнять или не выполнять?)
    В цикле REPEAT ... UNTIL q, q — это условие останова цикла (естественно, пишется в конце; отвечает на вопрос: остановить или не остановить?)

    n := 100;
    WHILE n > 0 DO ...; DEC(n) END;
    ASSERT(n <= 0)


    n := 100;
    REPEAT ...; DEC(n) UNTIL n = 0
    ASSERT(n = 0)
    Re[4]: Керниган & Ритчи
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 07:17
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    P>Авторы не закрывают глаза на недостатки своего создания, а работают над их преодолением.


    Совершенно верно, авторы языка Си (и операционной системы UNIX) "признали свои ошибки" и создали safe язык Limbo (со сборкой мусора) и операционную систему Inferno написанную на нем. Так что и Вам пора отказаться от Си, раз уж сами авторы от него отошли. Чего Вы за него цепляетесь?

    P>И от них не слышно о языке, позволяющем создавать правильные "по определению" программы. Это третье.


    На Си их и невозможно создавать. А любителей языка Limbo я еще не встречал. Кто знает, может и появятся в будущем.
    Re[3]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 07:21
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

    MN> которая как ни парадоксально, в свою очередь взяла от этой теоремы только название и не включила сам принцип программирования без goto


    Кто взял, а кто и не взял. В оберонах goto нету.
    Re[9]: Синтаксический оверхед
    От: Oleg A. Bachin Украина  
    Дата: 22.06.05 07:27
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    OAB>>и т.д... и посмотрю на того кто осмелится такое писать в одну строку!

    OAB>> Понимаю что процедуры на 2-3 экрана это не нормально, но иногда без них не обойтись

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

    M>Рефакторинг рулит. Паттерн Выделение метода (Extract Method). Примерчик там, правда, галименький, но ничего лучшего я не нашел. Применяем его с одновременным применением паттерна добавление параметра (Add Parameter).

    M>Сокращаем текст длинного метода на ~5 строк. Заодно если называем только что выделенный метод правильно, не нужно тратить лишние строки на поясняющие комментарии (самодокументированность).


    это все хорошо, но как я уже сказал ИНОГДА без этого не обойтись.
    1. я сам не приемлю работать с рекордами, но когда нужна скорость при выделении/освобождении памяти блоками, скорость доступа и т.д — я их использую, а так предпочитаю классы.
    (итак мне нужна была скорость)
    2. вы как минимум забыли в процедуру передать 1 параметр — this. да, он не попал в увиденом блоке, но он есть. один параметр конежно же мелочь, если... если у нас не будет глубоких вложенных рекурсий, а они тоже есть.
    так что если добавить к этому, что inline появилась только в D9... это то самое иногда.

    PS код кстати приводился по сабджу
    ... << RSDN@Home 1.1.4 beta 6a rev. 436>>
    Best regards,
    Oleg A. Bachin
    Re[6]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 07:33
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    СГ>>
    СГ>>n = ...
    СГ>>while(n --> 0)
    СГ>>{
    СГ>>  ...
    СГ>>}
    СГ>>use(n); // теперь n на 1 меньше чем надо (а иногда нет)
    СГ>>

    СГ>>Мне стыдно за такую глупость, поддался "моде" на --> 0 оператор...

    К>Моде? Может просто не потрудился прочитать документацию и выяснить разницу между постфиксным и префиксными -- и ++? Просто, на мой взгляд, если не удосужился подумать, то никакая верификация тут не поможет


    Ну вот. Я не одинок. Вы тоже совершили ту же самую ошибку что и я. Ведь здесь нет ошибки связанной с постфиксной или префиксной записью оператора --.

    Придется объяснить.
    1) По условию задачи, цикл должен выполнятся только если n > 0.
    2) Запись n-- > 0 действительно сначала проверяет n > 0, а потом уменьшает n, тут ошибки нет.
    3) Ошибка в том, что уменьшение n производится в любом случае, даже тогда, когда n и так уже равно нулю.


    n = 100;
    while(n > 0)
    {
      ...;
      n--;
    }
    assert(n <= 0);



    n = 100;
    while(n-- > 0)
    {
      ...;
    }
    assert(n <= -1);
    Re[6]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 07:40
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    СГ>
      if(условие2);
          return ЧтоТо2(......);


    M>1. Будьте внимательны.


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

    M>2. Соблюдайте Coding standards. Они рулез.


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

      if(условие2); /* <-- "зевок" остался не уловимым для компилятора */
      {
          return ЧтоТо2(......);
      }
    Re[7]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 07:44
    Оценка:
    SJA>Да, кстати. Вы знаете, что циклов вего 3 типа ? Так вот, иначе говоря, только WHILE и REPEAT, но не LOOP.
    SJA>Т.е. оберон на 66% структурен.

    Wikibooks:Control:Loops

    loops

    Loops allow you to have a set of statement repeated over and over again.

    endless loop

    The endless loop is a loop which never ends and the statements inside are repeated forever. Never is meant a relative term here — if the computer is switched off then even endless loops will end very abruptly.

    loop :
    
      Do_Something;   
    
    repeat


    loop with condition at the beginning

    this loop has a condition at the begin. The statements are repeated as long as condition is met. If the condition is not met at the very beginning then the statements inside the loop are never executed.
    while (X < 5) :
    
      let X := Calculate_Something
    
    repeat


    loop with condition at the end

    This loop has a condition at the end and the statements are repeated until the condition is met. Since the check is at the end the statements are at least executed once.
    loop
    
        X := Calculate_Something
    
    until (X > 5)


    loop with condition in the middle

    Sometimes you need to first make a calculation and exit the loop when a certain criteria as met. However when the criteria is not met there is something else to be done. Hence you need a loop where the exit condition is in the middle.
    loop
    
       X := Calculate_Something
    
       if X > 5 : exit
    
       Do_Something (X)
    
    repeat


    for loop

    Quite often one needs a loop where a specific variable is counted from a given start value up or down to a specific end value. You could use the while loop here — but since this is a very common loop there is an easier syntax avaialable.
    for I := 1 to 10 :
     
       Do_Something (I)
    
    repeat


    for loop on arrays

    Another very common situation is the need for a loop which iterates over every element of an array. The following sample code shows you how to archive this:
    for-each I in X :
    
        X [I] := Get_Next_Element;
    
    repeat



    Немаловажное но:
    Wikipedia:Control flow:Minimal Structured Control Flow

    In May 1966, Bohm and Jacopini published an article in Communications of the ACM which showed that any program with gotos could be transformed into a goto-free form involving only choice (IF THEN ELSE) and loops (WHILE condition DO xxx), possibly with duplicated code and/or the addition of Boolean variables (true/false flags). Later authors have shown that choice can be replaced by loops (and yet more Boolean variables).

    The fact that such minimalism is possible does not necessarily mean that it is desirable; after all, computers theoretically only need one machine instruction (subtract one number from another and branch if the result is negative), but practical computers have dozens or even hundreds of machine instructions.



    dmitriid.comGitHubLinkedIn
    Re[7]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 22.06.05 07:45
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>О чем я и говорил. А мне не верили. Фигурные скобки надо писать всегда в любом случае и без исключений и еще с новой строки, да и то, даже в этом случае некоторые "зевки" останутся не отлавливаемыми компилятором.


    СГ>
    СГ>  if(условие2); /* <-- "зевок" остался не уловимым для компилятора */
    СГ>


    Сишного компилера под рукой нет, но что-то мне кажется, что он в этом случае должен warning'ом изругаться. Народ, проверьте кто-нибудь, а?
    Ку...
    Re[3]: Синтаксический оверхед
    От: Oleg A. Bachin Украина  
    Дата: 22.06.05 07:47
    Оценка:
    Здравствуйте, Кодёнок, Вы писали:

    Кё>Всем этим может заниматься человек, не отличающий главное от второстепенного. Вот сколько в разработке ПО или языков/компиляторов проблем, но автор озаботился количеством лексем на оператор. Очень важная видать проблема с её решением разрабатывать софт сразу станет легче. Идеал — создать программу, ничего не сделав


    угу, только так, потому как есть основание удверждать что языка он не знает. (сужу из приведенного им кода)
    ... << RSDN@Home 1.1.4 beta 6a rev. 436>>
    Best regards,
    Oleg A. Bachin
    Re[4]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 22.06.05 07:48
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Mr. None, Вы писали:


    MN>> которая как ни парадоксально, в свою очередь взяла от этой теоремы только название и не включила сам принцип программирования без goto


    СГ>Кто взял, а кто и не взял. В оберонах goto нету.


    О ВЕЛИКАЯ И МОГУЧАЯ ПАРАДИГМА ПРОГРАММИРОВАНИЯ ДЛЯ ОБЕРОНОВ — МЫ ВСЕ ДОЛЖНЫ МОЛИТЬСЯ НА ТЕБЯ, НЕ ИНАЧЕ!
    Вы вообще читать умеете? Прочтите внимательно на какой вопрос я отвечал. И если вам нечего сказать по сути вопроса, то лучше молчите!
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[6]: А эхо в ответ: мать...мать...мать...
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 22.06.05 07:57
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>>Сергей. Вы, как самый ярый сторонник Оберона, можете внятно и с фактами на руках показать преимущество Оберона?


    СГ>Конечно могу. Но только это не тема данной ветки форума. Тема этой ветки форума: 235% и 700%. Ваша ошибка в том, что Вы делаете далеко идущие выводы из этих чисел. В этой ветке я ни чего доказывать не собираюсь. Просто демонстрирую числа 235% и 700%.


    - Петька приборы!
    — 30!
    — Что "30"?!
    — А что "приборы"?!!!


    Ну продемонстрировали вы числа... И что? Я тоже много чисел знаю... ООЧЕНЬ много... могу их все продемонстрировать... А смысл в чём?
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[8]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 22.06.05 07:59
    Оценка:
    Здравствуйте, CrystaX, Вы писали:

    CX>Вот если бы были клавиатуры, на которых каждая клавиша — это готовая лексема, тогда, возможно, что-то изменилось бы.


    ZX Spectrum, БК-001, ещё какие-то модели микрош-ириш такой фичей обладали. Одна кнопка — одна лексема васика. У БК и Спектрум они даже подписаны были (соответственно, имели несколько шифт-клавиш ).
    МИР (Машина Инженерных Расчётов), насколько я слышал, тоже (свой собственный язык программирования).
    Перекуём баги на фичи!
    Re[6]: Open source
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 07:59
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    M>Что, и сборку мустора будем на Оберонах писать? Успехов... покажите только потом исходники, посмеемся вместе.


    Известно, что BlackBox Component Builder 1.5 от Oberon Microsystems распространяется с открытыми исходными текстами на языке Component Pascal (наследник Оберона 2). В том числе модуль Kernel тоже написан на нем. Поскольку проект является open source, то я не понимаю, что до сих пор удерживало Вас от того чтобы посмотреть исходники самостоятельно? Что значит покажите? Берите и смотрите сами, они доступны любому без ограничений! Ваше отношение тем более не понятно в свете того, что известно, что подсистема управления динамической памятью (выделение памяти + освобождение ее сборщиком мусора) в BlackBox работает в несколько раз быстрее чем в .NET.
    Re[6]: А эхо в ответ: мать...мать...мать...
    От: Пацак Россия  
    Дата: 22.06.05 08:04
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Конечно могу. Но только это не тема данной ветки форума. Тема этой ветки форума: 235% и 700%. Ваша ошибка в том, что Вы делаете далеко идущие выводы из этих чисел. В этой ветке я ни чего доказывать не собираюсь. Просто демонстрирую числа 235% и 700%. Признаться, мне трудно сдерживать себя от того чтобы полезть чего-то доказывать. Здесь речь исключительно только о синтаксисе.


    Относительно синтаксиса и [высосанных из пальца] 235% и 700%. Может все-таки потрудитесь и приведете обероновский эквивалент для неоднократно упоминавешгося здесь

    while (dest[i++] = src[j++]);


    ... а потом посмотрим и посчитаем строчки/лексемы.
    Ку...
    Re[10]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 22.06.05 08:04
    Оценка:
    OAB>>>и т.д... и посмотрю на того кто осмелится такое писать в одну строку!
    OAB>>> Понимаю что процедуры на 2-3 экрана это не нормально, но иногда без них не обойтись

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

    M>>Рефакторинг рулит. Паттерн Выделение метода (Extract Method). Примерчик там, правда, галименький, но ничего лучшего я не нашел. Применяем его с одновременным применением паттерна добавление параметра (Add Parameter).

    M>>Сокращаем текст длинного метода на ~5 строк. Заодно если называем только что выделенный метод правильно, не нужно тратить лишние строки на поясняющие комментарии (самодокументированность).


    OAB>это все хорошо, но как я уже сказал ИНОГДА без этого не обойтись.

    OAB>1. я сам не приемлю работать с рекордами, но когда нужна скорость при выделении/освобождении памяти блоками, скорость доступа и т.д — я их использую, а так предпочитаю классы.
    OAB>(итак мне нужна была скорость)
    OAB>2. вы как минимум забыли в процедуру передать 1 параметр — this.
    Нет. Выделенный метод и изначальный метод находится на одном уровне (в том же классе, либо оба глобальные). При вызове из того же класса this передается неявно. А если глобальные, какой тут тогда this. (В дельфях же есть вроде глобальные методы, если я не ошибаюсь)

    OAB> да, он не попал в увиденом блоке, но он есть.


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

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


    OAB>так что если добавить к этому, что inline появилась только в D9... это то самое иногда.

    Борьба эффективности и понятности.... старая история.

    В борьбе бобра с ослом всегда побеждает бобро. (с) Сергей Бобро.

    OAB>PS код кстати приводился по сабджу

    У нас не сабдж а флейм. Мы в хуморе.
    Re[5]: Ошибка
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 08:06
    Оценка:
    Здравствуйте, Oleg Volkov, Вы писали:

    OV>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>1) Как Вам только что показали структурную парадигму не поддерживает.


    OV>Вы хотите сказать, что на С/С++ невозможно обеспечить p == false после выхода из цикла while(p)?


    Конечно нельзя, вот пример
    p = true;
    while(p)
    {
      break;
    }
    assert(!p); // этот ассерт всегда будет останавливать работу программы.

    Аналогично с goto.
    Re[3]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 22.06.05 08:08
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    M>Это все равно что путать "правила игры" и "технику игры". Знавал я таких (юных) преферансистов, среди которых бытовало прпвило "на третью даму не закладываться". Долго же я им объяснял, что понятие "третья дама" к правилам преферанса не имеет отношения, это элемент описания техники игры.


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

    Аналогично этому, С++ный приём закрывания угловых скобок через пробел — хотя и является техникой — фактически, относится к правилам.
    Перекуём баги на фичи!
    Re[5]: Ошибка
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 08:10
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

    СГ>>1) Как Вам только что показали структурную парадигму не поддерживает.


    MN>Сударь! "Программирование без goto" и "структурная парадигма" — это совершенно разные понятия!


    У кого-то разные, а у кого-то нет. goto может легко нарушить пост условия циклов WHILE и REPEAT.
    Re[7]: Open source
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 22.06.05 08:10
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>>Что, и сборку мустора будем на Оберонах писать? Успехов... покажите только потом исходники, посмеемся вместе.


    СГ>Известно, что BlackBox Component Builder 1.5 от Oberon Microsystems распространяется с открытыми исходными текстами на языке Component Pascal (наследник Оберона 2).


    У меня начинает складываеться такое впечатление, что вы читаете 2 — 3 последних слова в сообщении и начинаете отвечать только на них, совершенно выкидывая всё остальное, тем самым меняя смысл вопроса. Или я бы даже сказал грубее — вы отвечаете только на то, что вам удобно или на что вы знаете ответ... Вопос о том являются ли исходники Оберона открытыми или нет тут не стоял — это была ирония, сарказм, не требующий ответа. Вопрос состоял в следующем, если вы не поняли: как GC может быть написан на самом Обероне, если он уже является его составной частью?
    Варинаты ответа:
    1) GC написан на другом языке;
    2) GC написан на обрезанном варианте Оберона без многих функций защиты (потому что он нужен для их реализации), как следствие при написания GC не было GC.
    3) вы не знаете.

    Четврётого варианта я не вижу.
    Варианты ответа 1 и 2 атоматически означают, что сам по себе GC не защищён и может содержать ошибки, следовательно ошибка в GC не будет перехвачена обероном и приложение таки упадёт, будь оно хоть трижды надёжным (не знаю зачем вообще я это объясняю — это должно быть понятно всем и так). Вариант 3 не говорит ни о чём, кроме того, что вы не знаете и всё.
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[6]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 22.06.05 08:11
    Оценка:
    Сергей Губанов wrote:

    > Q>Да задолбали вы уже этой уверенностью!

    > Это называется научный подход к программированию. Программирование,
    > оказывается, тоже есть наука.
    > Кстати, здесь <http://rsdn.ru/Forum/Message.aspx?mid=1233660&amp;only=1&gt;
    Автор: Mamut
    Дата: 21.06.05
    ,

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

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

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[8]: Синтаксический оверхед
    От: Demiurg  
    Дата: 22.06.05 08:11
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    Q>>Я часто проверяю условие p именно с целью узнать, как произошел выход из цикла: по брейку или "мирным путем".

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

    Это касается не только С/С++. В чем проблема такой "озабоченности"?
    ... << RSDN@Home 1.1.4 beta 7 rev. 499>>
    Re[4]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 22.06.05 08:13
    Оценка:
    M>>Я вам могу сказать, какие приоритетные принципы у C++.
    M>>1. Поддержка максимального количества парадигм программирования (в том числе и структурного) здесь
    Т>И все из них поддерживаются кое-как.
    В достаточной мере. Для использования многих парадигм выразительных средств хватает.

    M>>2. Поддержка Legacy кода здесь

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

    Код, написанный на старых версиях должен работать. Совместимость снизу вверх — еще библейский принцип.

    "Не думайте, что Я пришел нарушить закон или пророков, — сказал Он, — не нарушить пришел Я, но исполнить" Евангелие от Матфея (Мф. 5:17);

    Отказ от поддержки в стандарте каких-то устаревших особенностей и/или совместимости с ними всегда дается очень болезненно.
    Re[7]: Интересно
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 08:13
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Плевать мне на теорию про три цикла. На _ПРАКТИКЕ_ (подчеркиваю

    C>специально) нужен break для нормального кода.

    Мне даже интересно стало. Может покажете пример?

    C>А необходимости в зависимости от инвариантов цикла у меня не возникало

    C>ни разу.

    Речь, вообще-то, не об инвариантах цикла, а о пост условиях. Инварианты цикла — это немного другое.

    C>Да... теперь понятно почему Обероны давно сдохли. Абсолютно непрактичная

    C>вещь.

    Слухи сильно преувеличены.
    Re[10]: А эхо в ответ: мать...мать...мать...
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 22.06.05 08:14
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>>Ааа. Понял То есть — а на чем же написан рантайм Оберона? Боюсь, на ассемблере. Вернее, того Оберона, что BlueBottle. BlackBox вполне себе на C наверное написан


    СГ>Почему Си, а не Паскаль (1970), а почему не Модула 2 (1979)


    Потому что последнии релизы C новее и удобнее, я не говорю уже о C++...

    СГ>а почему не сам Оберон?

    Ну уж это звиняйте физически невозможно... Разве что только писать не листочке, потом в уме компилировать в инструкции процессора и вбивать руками их в файл... Другого способа не вижу...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[7]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 22.06.05 08:17
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Сергей Губанов wrote:


    >> Q>Да задолбали вы уже этой уверенностью!

    >> Это называется научный подход к программированию. Программирование,
    >> оказывается, тоже есть наука.
    >> Кстати, здесь <http://rsdn.ru/Forum/Message.aspx?mid=1233660&amp;only=1&gt;
    Автор: Mamut
    Дата: 21.06.05
    ,

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

    C>Угу, поэтому все академические разработки весьма успешно загибаются.

    C>Живет только созданое практиками.

    С++, кстати, тоже начинался с академической разработки. А практики его потом подхватили.
    Ссылку навскидку не нашел, извините.
    Re[4]: Синтаксический оверхед
    От: jazzer Россия Skype: enerjazzer
    Дата: 22.06.05 08:22
    Оценка:
    Здравствуйте, AVC, Вы писали:

    AVC>Но особенность ситуации в том, что в обероновской среде нет никакого отдельного IDE.

    AVC>Считаю, что объединение мной особенностей языка и среды в данном случае совершенно правомерно.

    Правомерно, только если брать возможности среды, зафиксированные стандартом оберона (раз уж они неразделимы).
    Которые, соответственно, прошу в студию.
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[4]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 22.06.05 08:22
    Оценка:
    Здравствуйте, Кодт, Вы писали:

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


    M>>Это все равно что путать "правила игры" и "технику игры". Знавал я таких (юных) преферансистов, среди которых бытовало прпвило "на третью даму не закладываться". Долго же я им объяснял, что понятие "третья дама" к правилам преферанса не имеет отношения, это элемент описания техники игры.


    К>А вот нифига! Я встречал конвенцию игры в преферанс, где за недозаклад (скажем, при чистой восьмерной заказал шесть — и, естественно, огорчил вистующих) писали "без одной"


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

    К>В этом случае третья дама не считается за взятку, а марьяж или (король,дама)-валет-десять считается. (Разумеется, под прикрытием козырей).

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

    К>Аналогично этому, С++ный приём закрывания угловых скобок через пробел — хотя и является техникой — фактически, относится к правилам.

    Ничего страшного. Есть правила и у техники. Называются "правила техники безопасности".

    Кто-то когда-то работал на промышленном производственном постсоветском предприятии?
    Re[11]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 08:23
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M> недокостыле


    Вы спорите против прописных истин.
    Циклы с проверкой условия выполнения и циклы с проверкой условия завершения для того и придуманы, чтобы гарантировать выполнение пост условий. Вообще же достаточно было бы иметь лишь один тип цикла LOOP ... END и больше ни чего не надо, ни WHILE ни REPEAT. Но, опять же таки, вспоминаем: Сделать так просто как только можно, но не проще!
    Re[8]: Интересно
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 22.06.05 08:24
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    C>>Плевать мне на теорию про три цикла. На _ПРАКТИКЕ_ (подчеркиваю

    C>>специально) нужен break для нормального кода.

    СГ>Мне даже интересно стало. Может покажете пример?


    Да пожалуйста — только не break а выброс исключения, как средство далёкого безусловного перехода. Поиск по дереву с очень глубокой рекурсией, сложным алгоритмом и нетривиальным усовием останова, которое может сработать в середине обхода и при этом необходимо прервать поиск полностью. Можно передавать булевский флаг, но когда у функции итак много параметров (алгоритм сложный) — это неудобно, да и сам алгоритм ещё больше запутывает. Самым оптимальным в этом случае с точки зрения понимания алгоритма, будет выброс исключения и отлов его в самом верху...
    Структурные принципы нарушены? — Да. Но читабельность реализации алгоритма от этого только выиграла.
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[11]: Синтаксический оверхед
    От: Oleg A. Bachin Украина  
    Дата: 22.06.05 08:27
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    OAB>>>>и т.д... и посмотрю на того кто осмелится такое писать в одну строку!

    OAB>>>> Понимаю что процедуры на 2-3 экрана это не нормально, но иногда без них не обойтись

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

    M>>>Рефакторинг рулит. Паттерн Выделение метода (Extract Method). Примерчик там, правда, галименький, но ничего лучшего я не нашел. Применяем его с одновременным применением паттерна добавление параметра (Add Parameter).

    M>>>Сокращаем текст длинного метода на ~5 строк. Заодно если называем только что выделенный метод правильно, не нужно тратить лишние строки на поясняющие комментарии (самодокументированность).


    OAB>>это все хорошо, но как я уже сказал ИНОГДА без этого не обойтись.

    OAB>>1. я сам не приемлю работать с рекордами, но когда нужна скорость при выделении/освобождении памяти блоками, скорость доступа и т.д — я их использую, а так предпочитаю классы.
    OAB>>(итак мне нужна была скорость)
    OAB>>2. вы как минимум забыли в процедуру передать 1 параметр — this.
    M>Нет. Выделенный метод и изначальный метод находится на одном уровне (в том же классе, либо оба глобальные). При вызове из того же класса this передается неявно. А если глобальные, какой тут тогда this. (В дельфях же есть вроде глобальные методы, если я не ошибаюсь)

    1. т.е если у меня появляется новый тип линковки мне требуется изменить декларацию класса. я б поспорил здесь о выгоде...
    2. какая разница, явно или неявно? при большой глубине рекурсии это иногда больно.
    OAB>> да, он не попал в увиденом блоке, но он есть.
    3. имелось ввиду не сам указатель на екземпляр конечно же, а доступ к данным екземпляра.

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

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

    OAB>>так что если добавить к этому, что inline появилась только в D9... это то самое иногда.

    M>Борьба эффективности и понятности.... старая история.
    зинаю будет инлайн — смогу упростить часть, а так... просто ловил уже Stack Overflow на рабочем коде из-за красоты — на больших объемах залебывалась рекурсия

    M>В борьбе бобра с ослом всегда побеждает бобро. (с) Сергей Бобро.


    OAB>>PS код кстати приводился по сабджу

    M>У нас не сабдж а флейм. Мы в хуморе.
    так ты прикалываешься!
    ... << RSDN@Home 1.1.4 beta 6a rev. 436>>
    Best regards,
    Oleg A. Bachin
    Re[11]: Ошибка 5
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 08:31
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    M> требования современных виртуальных оберон-машин.


    Каких еще виртуальных? Это у Java есть виртуальная машина, не путайте. Обероны с самого начала компилировались в родные машинные коды. Есть, конечно реализации компиляции в java байт код, или в промежуточный язык .NET. Но не забывайте, что первый оберон появился в 1987 году, второй в 1992 году. Тогда еще не было ни Java ни .NET. Опять же возьмем BlackBox Component Builder — там тоже идет компиляция в родные машинные коды. Нет ни какой виртуальной машины. Про операционные системы реального времени написанные на оберонах говорить думаю не надо — какая там-то еще виртуальная машина-то???
    Re[11]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 08:34
    Оценка:
    Здравствуйте, qwertyuiop, Вы писали:

    Q>как научный работник умело подтасовывает данные.


    Действительно я ошибся. Не по злому умыслу, простите. Привык для получения оверхеда делить большее число на меньшее. Сожалею об этом.
    Re[12]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 22.06.05 08:35
    Оценка:
    OAB>>>2. вы как минимум забыли в процедуру передать 1 параметр — this.
    M>>Нет. Выделенный метод и изначальный метод находится на одном уровне (в том же классе, либо оба глобальные). При вызове из того же класса this передается неявно. А если глобальные, какой тут тогда this. (В дельфях же есть вроде глобальные методы, если я не ошибаюсь)

    OAB>1. т.е если у меня появляется новый тип линковки мне требуется изменить декларацию класса. я б поспорил здесь о выгоде...

    Очень жаль, что детали линковки так глубоко въелись в язык Делфи... Правда, жаль, если это действительно так...

    OAB>2. какая разница, явно или неявно? при большой глубине рекурсии это иногда больно.

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

    OAB>>> да, он не попал в увиденом блоке, но он есть.

    OAB>3. имелось ввиду не сам указатель на екземпляр конечно же, а доступ к данным екземпляра.
    Точно чего-то недопонял...

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

    M>>Если методы на одном уровне — это по барабану. В большинстве случаев. Рефакторинг — преобразование эквивалентности. То есть только что отрефакторенный код делает то же самое, что и неотрефакторенный, но выглядит иначе, удобнее для каких-то целей.
    OAB>эээ... ну как мне вам объяснить что подобную вешь, только этак раз 8 проще я уже писал и знаю скользкие моменты

    OAB>>>так что если добавить к этому, что inline появилась только в D9... это то самое иногда.

    M>>Борьба эффективности и понятности.... старая история.
    OAB>зинаю будет инлайн — смогу упростить часть, а так... просто ловил уже Stack Overflow на рабочем коде из-за красоты — на больших объемах залебывалась рекурсия

    M>>В борьбе бобра с ослом всегда побеждает бобро. (с) Сергей Бобро.


    OAB>>>PS код кстати приводился по сабджу

    M>>У нас не сабдж а флейм. Мы в хуморе.
    OAB>так ты прикалываешься!
    Насчет пользы рефакторингва и возможности такового в Дельфях — ни капельки.
    Re[7]: Синтаксический оверхед
    От: Socrat Россия  
    Дата: 22.06.05 08:43
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    П>
    П>while (queue.has_elements()) {
    П>    Elem elem = queue.get_first();
    П>    if (elem.get_state() == ST_FREE) {
    П>        elem.start_processing(...);
    П>        break;
    П>    } else { 
    П>        queue.make_last(elem);
    П>    }
    П>}
    П>


    А зачем ты после break ставишь else?
    Re[9]: Синтаксический оверхед
    От: Privalov  
    Дата: 22.06.05 08:45
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>ZX Spectrum, БК-001, ещё какие-то модели микрош-ириш такой фичей обладали. Одна кнопка — одна лексема васика. У БК и Спектрум они даже подписаны были (соответственно, имели несколько шифт-клавиш ).


    Угу, весьма раздражало, если надо было вбить PUT вместо PRINT.

    К>МИР (Машина Инженерных Расчётов), насколько я слышал, тоже (свой собственный язык программирования).


    Назывался Аналитик. Слышал от тех, кто на нем работал, что очень приятная вещь.
    Re[3]: Синтаксический оверхед
    От: Oleg A. Bachin Украина  
    Дата: 22.06.05 08:48
    Оценка:
    Здравствуйте, moudrick, Вы писали:
    AVC>>Рассмотрим хотя бы циклы.
    AVC>>Когда программист пишет (или, что важнее, читает) на Модуле/Обероне цикл
    AVC>>
    AVC>>WHILE p DO ... END
    AVC>>

    AVC>>он абсолютно уверен, что перед следующим оператором после выхода из цикла выполняется условие ~p (NOT p).
    AVC>>Если программист читает аналогичный цикл
    AVC>>
    AVC>>while (p) { ... }
    AVC>>

    AVC>>на Си/Си++, он не может быть в этом уверен, т.к. внутри цикла может находиться как оператор break, так и знаменитый goto.
    M>Ах, вот о чем речь? А что мешает Вам их не использовать?

    о! сообразил! хотел прям написать что эта p могла быть здесь объявлена и за пределами блока не видна, а потом свпомнил про сабдж!!!
    а ну ка вернемся к пересчету с учетом объявления типов данных
    ... << RSDN@Home 1.1.4 beta 6a rev. 436>>
    Best regards,
    Oleg A. Bachin
    Re[8]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 22.06.05 08:50
    Оценка:
    Здравствуйте, Socrat, Вы писали:


    S>А зачем ты после break ставишь else?


    Стормозил конечно.
    Ку...
    Re[5]: Синтаксический оверхед
    От: Socrat Россия  
    Дата: 22.06.05 08:53
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Примеры типичных ошибок как так может быть:


    СГ>Было:

    СГ>
    СГ>n = ...
    СГ>while(n > 0)
    СГ>{
    СГ>  ...
    СГ>  n--;
    СГ>}
    СГ>use(n);
    СГ>

    СГ>После глупого с моей стороны так сказать усовершенствования стало:
    СГ>
    СГ>n = ...
    СГ>while(n --> 0)
    СГ>{
    СГ>  ...
    СГ>}
    СГ>use(n); // теперь n на 1 меньше чем надо (а иногда нет)
    СГ>

    СГ>Мне стыдно за такую глупость, поддался "моде" на --> 0 оператор...

    Нет оператора "-->". Тут два оператора, написанных без пробела. А вообще, for рулит.

    СГ>Еще пример (авторство не моё)

    СГ>
    СГ>  if(условие1) 
    СГ>    return ЧтоТо1(......);
    
    СГ>  if(условие2);
    СГ>    return ЧтоТо2(......);
    
    СГ>  if(условие3) 
    СГ>    return ЧтоТо3(......);
    СГ>

    СГ>лишняя точка с запятой поставленная по невнимательности у if(условие2).

    А еще типичная ошибка — вместо "==" в условии поставить "="... Издержки нестрогих языков.
    Re[8]: Интересно
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 08:53
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    C>>Плевать мне на теорию про три цикла. На _ПРАКТИКЕ_ (подчеркиваю

    C>>специально) нужен break для нормального кода.

    СГ>Мне даже интересно стало. Может покажете пример?


    здесь
    Автор: Mamut
    Дата: 21.06.05


    dmitriid.comGitHubLinkedIn
    Re[7]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 08:56
    Оценка:
    Здравствуйте, Socrat, Вы писали:

    S>А при чем тут деструктор?


    Не знаю при чем. Какой еще деструктор?
    Re[12]: Яркий пример
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 08:57
    Оценка:
    M>> недокостыле

    СГ>Вы спорите против прописных истин.

    СГ>Циклы с проверкой условия выполнения и циклы с проверкой условия завершения для того и придуманы, чтобы гарантировать выполнение пост условий. Вообще же достаточно было бы иметь лишь один тип цикла LOOP ... END и больше ни чего не надо, ни WHILE ни REPEAT. Но, опять же таки, вспоминаем: Сделать так просто как только можно, но не проще!

    Потягаемся в цитатах

    "Не плоди сущностей без необходимости" LOOP — такая вот ненужная сущность.

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

    В итоге в Обероне появился костыль под названием LOOP — уродец, который не должен был рождаться вообще, поскольку логичным решением должно было стать внесение возможности выхода в циклы while и for.

    Вы опять игнорируете здесь
    Автор: Mamut
    Дата: 22.06.05
    . (Если есть проблемы с языком, я могу перевести, хоть и лень )


    dmitriid.comGitHubLinkedIn
    Re[13]: Синтаксический оверхед
    От: Oleg A. Bachin Украина  
    Дата: 22.06.05 08:58
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    OAB>>>>2. вы как минимум забыли в процедуру передать 1 параметр — this.

    M>>>Нет. Выделенный метод и изначальный метод находится на одном уровне (в том же классе, либо оба глобальные). При вызове из того же класса this передается неявно. А если глобальные, какой тут тогда this. (В дельфях же есть вроде глобальные методы, если я не ошибаюсь)

    OAB>>1. т.е если у меня появляется новый тип линковки мне требуется изменить декларацию класса. я б поспорил здесь о выгоде...

    M>Очень жаль, что детали линковки так глубоко въелись в язык Делфи... Правда, жаль, если это действительно так...
    эээ... не та линковка вы мне просто предлагали разбить на блоки разъединения нод... разлинковки или линковки (сам забыл какой код приводил).
    в случае реализации функцией класса (в делфях принято метод называть) при появлении нового "типа линковки" мне понадобится еще одна процедура класса, т.е. прийдется остальным пересобираться ... честно коворя на нынешней стадии разработки это мелочь

    OAB>>2. какая разница, явно или неявно? при большой глубине рекурсии это иногда больно.

    M>Больно будет, елсли кроме неявной передачи, передашь его еще и явно, забивая тем самым стек ненужным дублированием... или я чего-то недопонял?
    хм... явно или неявно — все равно ведь передавать... или я чего-то не понял...

    OAB>>>> да, он не попал в увиденом блоке, но он есть.

    OAB>>3. имелось ввиду не сам указатель на екземпляр конечно же, а доступ к данным екземпляра.
    M>Точно чего-то недопонял...
    я тож...

    OAB>>>>PS код кстати приводился по сабджу

    M>>>У нас не сабдж а флейм. Мы в хуморе.
    OAB>>так ты прикалываешься!
    M>Насчет пользы рефакторингва и возможности такового в Дельфях — ни капельки.
    так я не против рефакторинга! и вообще это не класс для красоты — может на асме перепишу
    ... << RSDN@Home 1.1.4 beta 6a rev. 436>>
    Best regards,
    Oleg A. Bachin
    Re[5]: Керниган & Ритчи
    От: Privalov  
    Дата: 22.06.05 09:01
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:


    P>>И от них не слышно о языке, позволяющем создавать правильные "по определению" программы. Это третье.


    СГ>На Си их и невозможно создавать. А любителей языка Limbo я еще не встречал. Кто знает, может и появятся в будущем.


    А на Обероне возможно? Если Вы определите константу, скажем, _MAX_PATH = 250 вместо 260, компилятор Вас поправит?
    А синтаксис Limbo каков?
    Re[8]: Еще один яркий пример
    От: Пацак Россия  
    Дата: 22.06.05 09:04
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Ну, как что делать, обращайтесь ко мне, я Вам помогу, научу как надо грамотно программировать.

    СГ>В данном случае надо использовать цикл с проверкой остановки выполнения итерации внутри самой итерации, то есть надо использовать цикл LOOP:

    СГ>


    Ой, спасибо! Ну-с, с учетом поправки Socrat'а мой код принимает следующий вид:
    while (queue.has_elements()) {
        elem = queue.get_first();
        if (elem.get_state() == ST_FREE) {
            elem.start_processing(...);
            break;
        }
        queue.make_last(elem);
    }


    Предлагаю вам посчитать overhead по строчкам/лексемам и помедитировать над результатом.

    PS про подмену понятий было сказано не единожды, так что повторяться не буду.
    Ку...
    Re[8]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 09:04
    Оценка:
    Здравствуйте, SiAVoL, Вы писали:

    SAV> Цикл должен быть вещью в себе (не знаю как это выразить, надеюсь эту фразу вы поймете правильно).


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

    WHILE a DO x END

    REPEAT x UNTIL b

    LOOP 
      x;
      IF b THEN y; EXIT END; 
      z
    END

    x, y, z — независимые от самих циклов процедуры. Ни каких флагов = глобальных переменных.
    Re: Синтаксический оверхед
    От: jazzer Россия Skype: enerjazzer
    Дата: 22.06.05 09:07
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо (чтобы читающему понятно стало где что написано).


    Эти стандарты служат очень многим целям и большинство из них абсолютно не зависят от языка программирования (например, здесь
    Автор: jazzer
    Дата: 15.06.05
    ) и применимы ко всем языкам без исключения, в том числе и к Оберону (особенно положение "чтобы читающему понятно стало где что написано").
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[16]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 09:13
    Оценка:
    Здравствуйте, CrystaX, Вы писали:

    CX>Почему Вы решили, что минимальное количество лексем является признаком правильности синтаксиса?


    1) Не минимальное вообще, а по 1 лексеме достаточно и необходимо между словами в базовых синтаксических конструкциях (IF, WHILE, CASE, WITH, ... и т.д.).

    2) Компилятор отловит все случайные явные "зевки" сделанные программистом, например такой:
      if(ВыполняетсяНекотороеУсловие())
        return КоеЧтоНадоВернуть(........................);
    
      if(ВыполняетсяНекотороеУсловие2());
        return КоеЧтоНадоВернуть2(........................);
    
      if(ВыполняетсяНекотороеУсловие3())
        return КоеЧтоНадоВернуть3(........................);
    Re[9]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 09:16
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    SAV>> Цикл должен быть вещью в себе (не знаю как это выразить, надеюсь эту фразу вы поймете правильно).


    СГ>Выразить это можно используя процедуры. Цикл должен быть вещью в себе в том смысле, что его тело можно оформить как независимую процедуру, а в случае с несколькими выходами, как несколько независимых процедур.


    А как процедуру с несколькими точкаи выхода не дано?
    PROCEDURE
      IF cond1 THEN RETURN 1 END;
      IF cond2 THEN RETURN 2 END;
      IF cond3 THEN RETURN 3 END;
    END


    Или такое тоже не скомпилируется?


    dmitriid.comGitHubLinkedIn
    Re[8]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 22.06.05 09:19
    Оценка:
    moudrick wrote:

    > C>Угу, поэтому все академические разработки весьма успешно загибаются.

    > C>Живет только созданое практиками.
    > С++, кстати, тоже начинался с академической разработки. А практики его
    > потом подхватили.
    > Ссылку навскидку не нашел, извините.

    Э, нет.

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

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[6]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 09:23
    Оценка:
    Здравствуйте, qwertyuiop, Вы писали:

    Q>Оберон же фактически заставляет программиста всегда использовать составной оператор, заключаа его между THEN и END. И это хорошо?!


    Да это хорошо. Найдите ошибку в следующем си-образном коде (компилятор ее не найдет, так как формально программа корректна):
        if(ВыполненоНекотороеУсловие1())
            return ВернутьНекотороеЗначениеОпределяемоеСледующимиПарамертами1(a, b, c, d, e, f, h);
    
        if(ВыполненоНекотороеУсловие2());
            return ВернутьНекотороеЗначениеОпределяемоеСледующимиПарамертами2(a, b, c, d, e, f, h);
    
        if(ВыполненоНекотороеУсловие3())
            return ВернутьНекотороеЗначениеОпределяемоеСледующимиПарамертами3(a, b, c, d, e, f, h);

    В другом синтаксисе такой "зевок" невозможен:
        IF ВыполненоНекотороеУсловие1() THEN
          RETURN ВернутьНекотороеЗначениеОпределяемоеСледующимиПарамертами1(a, b, c, d, e, f, h)
        END;
        ... 
        IF ВыполненоНекотороеУсловие2() THEN
          RETURN ВернутьНекотороеЗначениеОпределяемоеСледующимиПарамертами2(a, b, c, d, e, f, h)
        END;
        ... 
        IF ВыполненоНекотороеУсловие3() THEN
          RETURN ВернутьНекотороеЗначениеОпределяемоеСледующимиПарамертами3(a, b, c, d, e, f, h)
        END

    А можно так:
        IF ВыполненоНекотороеУсловие1() THEN
          RETURN ВернутьНекотороеЗначениеОпределяемоеСледующимиПарамертами1(a, b, c, d, e, f, h)
        ELSIF ВыполненоНекотороеУсловие2() THEN
          RETURN ВернутьНекотороеЗначениеОпределяемоеСледующимиПарамертами2(a, b, c, d, e, f, h)
        ELSIF ВыполненоНекотороеУсловие3() THEN
          RETURN ВернутьНекотороеЗначениеОпределяемоеСледующимиПарамертами3(a, b, c, d, e, f, h)
        END
    Re[6]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 09:28
    Оценка:
    S>А еще типичная ошибка — вместо "==" в условии поставить "="... Издержки нестрогих языков.

    В некоторых языках (например, в PHP) есть еще одна конструкция, "===" — проверка на идентичность.

    Пример:
    /*
      PHP - нетипизированый язык. Поэтому там на такие грабли можно наткнуться, что оёёёй
    */
    print("1" == "0001" ? 'equal' : 'not equal');
    // напечатает equal, потому что произойдет конвертация в int 
    // (PHP парсит содержимое двойных кавычек)
    
    print("1" === '0001' ? 'equal' : 'not equal');
    // напечатает not equal, потому что объекты одинакового типа и их содержимое не равно


    dmitriid.comGitHubLinkedIn
    Re[6]: Ошибка
    От: Oleg Volkov  
    Дата: 22.06.05 09:29
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Конечно нельзя, вот пример


    "Не поддерживает структурную парадигму", по-моему, значит "препятствует написанию" таких программ. Скажите, вот такой код компилируется?
    p = true;
    while(p)
    {
      p = false;
      break;
    }
    assert(!p)
    Re[7]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 09:34
    Оценка:
    СГ>В другом синтаксисе такой "зевок" невозможен:

    Еще как возможен.
    PROCEDURE a : BOOLEAN
      {* пара десятков строчек кода *}
      RETURN TRUE;
    END a;
    
    PROCEDURE b
    VAR
      a : BOOLEAN;
    BEGIN
      a := FALSE;
      {* пара десятков строчек кода *}
      IF a THEN 
        {* критически важный код *}    
      END
    END;


    dmitriid.comGitHubLinkedIn
    Re[17]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 22.06.05 10:09
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>1) Не минимальное вообще, а по 1 лексеме достаточно и необходимо между словами в базовых синтаксических конструкциях (IF, WHILE, CASE, WITH, ... и т.д.).


    А это
    Автор: Пацак
    Дата: 22.06.05
    Вы не читали ? Там даже приведён так Вами любимый расклад по звёздам.
    Я — свихнувшееся сознание Джо.
    Re[9]: Еще один яркий пример
    От: AVC Россия  
    Дата: 22.06.05 10:50
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    П>Ой, спасибо! Ну-с, с учетом поправки Socrat'а мой код принимает следующий вид:

    П>
    П>while (queue.has_elements()) {
    П>    elem = queue.get_first();
    П>    if (elem.get_state() == ST_FREE) {
    П>        elem.start_processing(...);
    П>        break;
    П>    }
    П>    queue.make_last(elem);
    П>}
    П>


    П>Предлагаю вам посчитать overhead по строчкам/лексемам и помедитировать над результатом.

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

    Вот забежал домой и не удержался — заглянул на секунду в Инет.
    Не уследил начало дискуссии о данном куске кода.
    По виду — типичный планировщик задач.
    Не могу понять, зачем постоянно проверяется наличие в очереди элементов? Они ведь в цикле не удаляются.
    IF queue.has_elements() THEN
      elem := queue.get_first();
      WHILE elem.state # ST_FREE DO
        queue.make_last(elem);
        elem := queue.get_first()
      END;
      elem.start_processing(...)
    END

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

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re[10]: Еще один яркий пример
    От: Пацак Россия  
    Дата: 22.06.05 11:10
    Оценка:
    Здравствуйте, AVC, Вы писали:

    AVC>По виду — типичный планировщик задач.


    ХЗ что это — из головы придумал. У меня на работе даже сишного компилера нет, если честно.

    AVC>Не могу понять, зачем постоянно проверяется наличие в очереди элементов? Они ведь в цикле не удаляются.


    Учитывая принцип "черного ящика" — мы не можем это сказать. Можем сказать лишь что они не удаляются в этом цикле этой программы.
    Ку...
    Re[7]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 22.06.05 11:12
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    СГ>>
    СГ>  if(условие2);
    СГ>      return ЧтоТо2(......);
    СГ>


    M>>1. Будьте внимательны.


    СГ>Если использовать язык с правильным синтаксисом, то таких "зевков" не будет. Их отловит копилятор.

    C помощью warning.

    M>>2. Соблюдайте Coding standards. Они рулез.


    СГ>О чем я и говорил. А мне не верили. Фигурные скобки надо писать всегда в любом случае и без исключений и еще с новой строки, да и то, даже в этом случае некоторые "зевки" останутся не отлавливаемыми компилятором.


    СГ>
    СГ>  if(условие2); /* <-- "зевок" остался не уловимым для компилятора */
    СГ>  {
    СГ>      return ЧтоТо2(......);
    СГ>  }
    СГ>

    с помощью warning
    Re[13]: Кстати, о циклах
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 11:15
    Оценка:
    Честно говорю, наткнулся абсолютно случайно буквально паруминут назад:
    Блог создателя BitTorrent'a, Брэма Коэна

    Here is a form of control flow not supported in any language I've used:

    loopa: while x:
        do stuff
        if something:
            continue loopb
    loopb: while y:
        do other stuff
        if something else:
            continue loopa

    To be sane, when loopa exits here control flow should naturally jump to after loopb instead of falling through to it, otherwise it's rather like duff's device.

    I have to admit I've never really wanted this functionality in any code I've written, but it's a form of cleaning up the call stack and jumping not supported by break/continue/return/raise.

    Yesterday I wrote code with the following structure, and corresponding comment, which I find hilarious but is probably a bit on the obscure side:
    for p in q:
        do stuff
        for a in b:
            if f(a):
                break
        else:
            # Niklaus Wirth can bite me
            continue
        do more stuff




    И объяснение для тех, кто не понял, что там происходит (а я не понял ):

    darius: I suspect (having not looked that Forth in ages) you may still be missing the meaning of the code (and it is an almost-but-not-quite unique feature in python — I'm pretty sure Ada95 has it too — but it is rare, if expressive) in that else clause *isn't* on the inner "if"... it's actually on the for, that is, it is a for-break-else construct. It is perhaps best thought as a "find loop" -- look in these things until you find something, or ELSE do something else.


    Основным постулатом при создании языков программирования должно стать следующее:
    Позволь программисту сделать все, что он захочет, наиболее эффективнфм и логическим способом. И еще оставь немного место для wow-эффекта


    dmitriid.comGitHubLinkedIn
    Re[3]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 22.06.05 11:19
    Оценка:
    A>Понимаете, мне кажется, что здесь имеется противоречие между двумя подходами к пониманию структурности.

    A>"Академический" ...

    A>"Прагматический" ...
    A>"Академический" ...
    A>"Прагматический" ...
    A>Почему я ставлю кавычки? Теория без практики мертва, а практика без теории слепа. Ни тот, ни другой подход не является оптимальным в чистом виде. Программист должен и создавать, и сопровождать код, значит, хороший программист со спокойной совестью напишет цикл, содержащий break, но обязательно осознавая, каков консеквент цикла он имеет в виду получить, а если цикл получится большой или достаточно сложный, — ещё и задокументирует свои намерения для целей сопровождения.

    A>Каков итог? Ни Оберон, ни Фортран-II популярностью не пользуются, а Си++ — пользуется.


    >> 22.06.2005 12:13:00 from ICQ wrote:

    >> еще боян:
    >>
    >> Табличка в отделе компьютерной поддержки:
    >> Теория – это когда вы знаете все, но ничего не работает. Практика – это когда все работает, но никто не знает, почему. В ЭТОМ МЕСТЕ мы совмещаем теорию и практику – ничего не работает и никто не знает почему.

    Провокационный вопрос из зала: Это про сторонников Оберон и Фортран-II или про противников (Си++)?
    Re[5]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 22.06.05 12:06
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    К>>А вот нифига! Я встречал конвенцию игры в преферанс, где за недозаклад (скажем, при чистой восьмерной заказал шесть — и, естественно, огорчил вистующих) писали "без одной"


    M>Блин. Против этого правила — преферанмная поговорка есть. *Недозаложился (вариант — перезаложился) — залез в совй карман.*


    Естественно. Но рисунок игры с кривым раскладом (повезло: на чистом сталинграде срубил 9 взяток) и с однозначным недозакладом (на девятерной из осторожности или заподлизма заказал сталинград) будет разным.
    В преф, в отличие от бриджа, играют ещё и для удовольствия. А какое нафиг удовольствие у вистующих при недозакладе?

    M>А вистущим надо грамотно вистовать. И тогда и недозаклад, и перезаклад играются так, что поговорка справедлива.

    M>Преферанс — не для азарта, а для мышления.

    Для мышления и азарта
    А чтобы был повод лишний раз подумать — и ввели правило недозаклада. Подчёркиваю — это конвенция, причём редкая.

    К>>В этом случае третья дама не считается за взятку, а марьяж или (король,дама)-валет-десять считается. (Разумеется, под прикрытием козырей).

    M>Считает взятки игра, а не расклад. Расклад лишь обусловливает некоторые моменты игры.

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

    К>>Аналогично этому, С++ный приём закрывания угловых скобок через пробел — хотя и является техникой — фактически, относится к правилам.

    M>Ничего страшного. Есть правила и у техники. Называются "правила техники безопасности".

    Перекуём баги на фичи!
    Re[7]: Синтаксический оверхед
    От: alexku Россия  
    Дата: 22.06.05 12:09
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>>
    СГ>>>n = ...
    СГ>>>while(n --> 0)
    СГ>>>{
    СГ>>>  ...
    СГ>>>}
    СГ>>>use(n); // теперь n на 1 меньше чем надо (а иногда нет)
    СГ>>>

    СГ>>>Мне стыдно за такую глупость, поддался "моде" на --> 0 оператор...

    СГ>Ну вот. Я не одинок. Вы тоже совершили ту же самую ошибку что и я. Ведь здесь нет ошибки связанной с постфиксной или префиксной записью оператора --.


    Вы, Сергей, как обычно ткнули пальцем в небо. Здесь есть именно ошибка, связанная с префиксной и постфиксной записью оператора --. И она здесь не одна. В сочетании с записью

    n = неизвестно_что
    while(n-- > 0){...}
    //смотрим n


    вы получите -1 всегда, когда n>0 и n-1 когда n<=0
    Вторую ошибку ищите самостоятельно. Из неё, кстати, следует описанный результат.
    Как будет себя вести ваш код при префиксной записи, я думаю, вы математически докажете самостоятельно.

    СГ>Придется объяснить.

    СГ>1) По условию задачи, цикл должен выполнятся только если n > 0.
    СГ>2) Запись n-- > 0 действительно сначала проверяет n > 0, а потом уменьшает n, тут ошибки нет.
    СГ>3) Ошибка в том, что уменьшение n производится в любом случае, даже тогда, когда n и так уже равно нулю.

    СГ>
    СГ>n = 100;
    СГ>while(n-- > 0)
    СГ>{
    СГ>  ...;
    СГ>}
    СГ>assert(n <= -1);
    СГ>


    В этом вашем примере assert(n <= -1) совершенно не имеет смысла, потому что значение n предсказуемо на 100% и всегда будет равно -1.

    Так что сетовать надо не на язык и оверхэд, а на математический апарат доказательства правильности алгоритма.
    Re[8]: Очередной яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 12:18
    Оценка:
    Здравствуйте, Oleg A. Bachin, Вы писали:

    OAB>
    OAB>procedure TReferenceTree.UnlinkNode(current: PReferenceNode);
    OAB>begin
    OAB>  // unlink left/right
    OAB>  if Assigned(current^.LeftInline) then
    OAB>    begin
    OAB>      if Assigned(current^.RightInline) then
    OAB>        begin
    OAB>          // glue left with right
    OAB>          current^.LeftInline^.RightInline := current^.RightInline;
    OAB>          current^.RightInline^.LeftInline := current^.LeftInline;
    OAB>        end
    OAB>      else
    OAB>        // unlink left
    OAB>        current^.LeftInline^.RightInline := nil;
    OAB>    end
    OAB>  else ; // nothink glue/unlink
    OAB>  // unlink next/previous
    OAB>  if Assigned(current^.PrevSibling) then
    OAB>    begin
    OAB>      if Assigned(current^.NextSibling) then
    OAB>        begin
    OAB>          // glue periouse with next
    OAB>          current^.PrevSibling^.NextSibling := current^.NextSibling;
    OAB>

    OAB>и т.д... и посмотрю на того кто осмелится такое писать в одну строку! понимаю что процедуры на 2-3 экрана это не нормально, но иногда без них не обойтись

    Очень наглядный пример для демонстрации разницы между Delphi Language (бывший Object Pascal) и оберонами, точнее усовершенствованной версией Оберона 2 с коммерческим названием Component Pascal:



    Разница:

    0) Собственно, сам синтаксис.

    1) В Component Pascal при объявлении метода явно указывается, что он новый NEW, а не перекрываемый старый метод из предка. Это необходимо для того чтобы если вдруг кто-нибудь потом из предка тот метод удалил или изменил, чтобы при компиляции этого кода компилятор сразу же сообщил, что метод не может быть перекрыт, так как в предке его нет. В Delphi все наоборот, если не написано ничего, значит метод новый, а если написано override — значит перекрытие старого. В Component Pascal противоположно — если написано NEW, то метод новый, а если не написано NEW, то метод перекрывает старый "виртуальный". И тот и этот подход, в принципе, эквивалентны. Да вот только слово NEW надо написать только в базовом классе, а во всех перевсех потомках уже писать ничего не надо. Так как потомков потенциально не ограниченное количество, то получается экономия (один раз написать NEW вместо того чтобы потом всегда писать override).

    2) В Component Pascal нет ни какого зарезервированного слова навроде this или self. В указанном примере можно было обозвать переменную обозначающую сам объект как угодно

    PROCEDURE (t: ТипОбъекта) НазваниеМетода (аргументы...), NEW;

    здесь я написал букву t — вместо this или self.

    3) В Component Pascal символ разыменования указателя "^" в тех случаях когда он очевиден писать не обязательно.

    4) В Component Pascal, как и во всех Modula/Oberon-ах есть полноценные процедурные переменные, так что специальная инструкция навроде assigned() не нужна. Процедурная переменная записанная как есть обозначает саму себя, в то время как записанная со скобками () означает активацию процедуры на которую она ссылается. Поэтому процедурную переменную в Modula/Oberon-ах можно сравнивать с NIL даже если она сама является процедурой-функцией.

    Например,

    TYPE Func: PROCEDURE(): Func;

    VAR a: Func;

    IF a # NIL THEN ... END
    это одно (сравнивается значение процедурной переменной "a")

    IF a() # NIL THEN ... END
    а это совсем другое (сравнивается значение которое возвращается процедурой с которой связана процедурная переменная "a")

    Комбинация первого и второго:
    IF (a # NIL) & (a() # NIL) THEN ... END
    Re[8]: Синтаксический оверхед
    От: alexku Россия  
    Дата: 22.06.05 12:24
    Оценка:
    Вот здесь неточно

    A> -1 всегда, когда n>0 и n-1 когда n<=0


    Должно быть " -1 всегда, когда n>=0 и n-1 когда n<0"
    Re[6]: Синтаксический оверхед
    От: Privalov  
    Дата: 22.06.05 12:24
    Оценка:
    Здравствуйте, Кодт, Вы писали:


    M>>Блин. Против этого правила — преферанмная поговорка есть. *Недозаложился (вариант — перезаложился) — залез в совй карман.*


    К>Естественно. Но рисунок игры с кривым раскладом (повезло: на чистом сталинграде срубил 9 взяток) и с однозначным недозакладом (на девятерной из осторожности или заподлизма заказал сталинград) будет разным.


    За 9 на Сталинграде не наказывают. На то он и Сталинград.

    К>Для мышления и азарта

    Re[8]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 22.06.05 12:29
    Оценка:
    СГ>>
    СГ>>n = 100;
    СГ>>while(n-- > 0)
    СГ>>{
    СГ>>  ...;
    СГ>>}
    СГ>>assert(n <= -1);
    СГ>>


    A>В этом вашем примере assert(n <= -1) совершенно не имеет смысла, потому что значение n предсказуемо на 100% и всегда будет равно -1.


    Позвольте раз в жизни согласиться с Сергеем Губановым (отпишусь-ка я на всякий случай от этой ветки, а то страшненько ).
    Ассерт тут по смыслу очень даже правильный. Есть и такой чудесный паттерн рефакторингаВведение утверждения (Introduce Assertion).

    Суть которого в том, что не надо писать коммент, типа, тут ожидается такие и такие значения. надо указать это явно, при помощи программного кода. И без килотонн комментариев становится понятно, что при невыполнении ассершена правильность дальнейшей работы, вообще говоря, не гарантирована. Самодокументированность рулит. Да и при отладке ассершены помогают преизрядно, поверьте. Если экономишь такты — в опциях компилера ставь, чтоб не компилил ассершены или шото в этом роде, что спасет отца русской демократии.
    Re[7]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 12:41
    Оценка:
    M>>>Блин. Против этого правила — преферанмная поговорка есть. *Недозаложился (вариант — перезаложился) — залез в совй карман.*

    К>>Естественно. Но рисунок игры с кривым раскладом (повезло: на чистом сталинграде срубил 9 взяток) и с однозначным недозакладом (на девятерной из осторожности или заподлизма заказал сталинград) будет разным.


    P>За 9 на Сталинграде не наказывают. На то он и Сталинград.


    У нас — как договоришься Если просто посидеть, то договариваемся не подлить. А когда народ играет на то, кто за сигаретами сходит , то все средства хороши.

    К>>Для мышления и азарта

    P>


    dmitriid.comGitHubLinkedIn
    Re[18]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 12:44
    Оценка:
    Здравствуйте, CrystaX, Вы писали:

    CX>Из Ваших слов выходит, что синтаксис должен быть масимально жестким. Вот в этом месте может быть только такая-то лексема и никакая другая, а вот в этом — такая-то и никакая другая, так?


    Да примерно так. Должна быть возможность глядя на программу понять опечатка в ней или так и надо. По крайней мере синтаксис должен быть таким чтобы минимизировать количество возможных односимвольных опечаток (как в данном случае ";" — односимвольная опечатка)

    CX> Жесткий каркас синтаксиса языка — хорошо компилятору, плохо пользователям. Гибкий синтаксис — плохо компилятору, хорошо разработчику.


    Если в самом синтаксисе нет возможности для отслеживания опечаток, то как компилятор их найдет? В этом смысле синтаксис первичен, а пользователи вторичны. А вот уже из всех возможных правильных синтаксисов, надо выбрать тот, который будет еще и максимально удобен пользователю. Вот в какой последовательности нужно идти, а не в обратной.
    Re[9]: Очередной яркий пример
    От: Oleg A. Bachin Украина  
    Дата: 22.06.05 12:46
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Oleg A. Bachin, Вы писали:


    OAB>>
    OAB>>procedure TReferenceTree.UnlinkNode(current: PReferenceNode);
    OAB>>begin
    OAB>>  // unlink left/right
    OAB>>  if Assigned(current^.LeftInline) then
    OAB>>    begin
    OAB>>      if Assigned(current^.RightInline) then
    OAB>>        begin
    OAB>>          // glue left with right
    OAB>>          current^.LeftInline^.RightInline := current^.RightInline;
    OAB>>          current^.RightInline^.LeftInline := current^.LeftInline;
    OAB>>        end
    OAB>>      else
    OAB>>        // unlink left
    OAB>>        current^.LeftInline^.RightInline := nil;
    OAB>>    end
    OAB>>  else ; // nothink glue/unlink
    OAB>>  // unlink next/previous
    OAB>>  if Assigned(current^.PrevSibling) then
    OAB>>    begin
    OAB>>      if Assigned(current^.NextSibling) then
    OAB>>        begin
    OAB>>          // glue periouse with next
    OAB>>          current^.PrevSibling^.NextSibling := current^.NextSibling;
    OAB>>

    OAB>>и т.д... и посмотрю на того кто осмелится такое писать в одну строку! понимаю что процедуры на 2-3 экрана это не нормально, но иногда без них не обойтись

    СГ>Очень наглядный пример для демонстрации разницы между Delphi Language (бывший Object Pascal) и оберонами, точнее усовершенствованной версией Оберона 2 с коммерческим названием Component Pascal:


    СГ>


    СГ>Разница:


    ну давайте посмотрим (и это не смотря на то, что вы абсолютно игнорируете мой пост утвеждающий что вы ничего не понимаете в програмировании судя по вашей конструкции "try try")

    СГ>0) Собственно, сам синтаксис.

    из синтаксиса убивают большие буквы. это ваша привычка или требование языка?

    СГ>1) В Component Pascal при объявлении метода явно указывается, что он новый NEW, а не перекрываемый старый метод из предка. Это необходимо для того чтобы если вдруг кто-нибудь потом из предка тот метод удалил или изменил, чтобы при компиляции этого кода компилятор сразу же сообщил, что метод не может быть перекрыт, так как в предке его нет. В Delphi все наоборот, если не написано ничего, значит метод новый, а если написано override — значит перекрытие старого. В Component Pascal противоположно — если написано NEW, то метод новый, а если не написано NEW, то метод перекрывает старый "виртуальный". И тот и этот подход, в принципе, эквивалентны. Да вот только слово NEW надо написать только в базовом классе, а во всех перевсех потомках уже писать ничего не надо. Так как потомков потенциально не ограниченное количество, то получается экономия (один раз написать NEW вместо того чтобы потом всегда писать override).


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

    СГ>2) В Component Pascal нет ни какого зарезервированного слова навроде this или self. В указанном примере можно было обозвать переменную обозначающую сам объект как угодно


    СГ>PROCEDURE (t: ТипОбъекта) НазваниеМетода (аргументы...), NEW;


    СГ>здесь я написал букву t — вместо this или self.

    и? это экономия или куда? ну у меня всегда есть Self, в сях — this, а тутачки что в голову стукнет?

    СГ>3) В Component Pascal символ разыменования указателя "^" в тех случаях когда он очевиден писать не обязательно.

    ну и? в делфи тоже. и меня это убивает. я лично как писАл, так и буду писать то что есть, а не то что подразумевается.

    СГ>4) В Component Pascal, как и во всех Modula/Oberon-ах есть полноценные процедурные переменные, так что специальная инструкция навроде assigned() не нужна. Процедурная переменная записанная как есть обозначает саму себя, в то время как записанная со скобками () означает активацию процедуры на которую она ссылается. Поэтому процедурную переменную в Modula/Oberon-ах можно сравнивать с NIL даже если она сама является процедурой-функцией.

    бред полнейший!!!! какраз на NIL можно сравнивать что угодно! это в Assigned функцию передавать нельзя
    вы хоть что-то в локальных переменных и результатах ф-ции понимаете?
    а Assigned писал потому что мне так нравится.

    СГ>Например,


    СГ>TYPE Func: PROCEDURE(): Func;


    СГ>VAR a: Func;


    СГ>IF a # NIL THEN ... END

    СГ>это одно (сравнивается значение процедурной переменной "a")

    СГ>IF a() # NIL THEN ... END

    СГ>а это совсем другое (сравнивается значение которое возвращается процедурой с которой связана процедурная переменная "a")

    СГ>Комбинация первого и второго:

    СГ>IF (a # NIL) & (a() # NIL) THEN ... END

    пжалуйста!
      if ((@a <> nil) and (a <> nil)) then ...
    ... << RSDN@Home 1.1.4 beta 6a rev. 436>>
    Best regards,
    Oleg A. Bachin
    Re[19]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 12:55
    Оценка:
    СГ>Если в самом синтаксисе нет возможности для отслеживания опечаток, то как компилятор их найдет? В этом смысле синтаксис первичен, а пользователи вторичны. А вот уже из всех возможных правильных синтаксисов, надо выбрать тот, который будет еще и максимально удобен пользователю. Вот в какой последовательности нужно идти, а не в обратной.

    Синтаксис должен быть удобен пользователю. То, насколько это удобно компилятору — побоку. Компилятору удобно ассемблер яитать. Или напрямую машинные коды.

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


    dmitriid.comGitHubLinkedIn
    Re[10]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 12:55
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M> А как процедуру с несколькими точкаи выхода не дано?


    Я не понял вопроса.

    M>
    M>PROCEDURE
    M>  IF cond1 THEN RETURN 1 END;
    M>  IF cond2 THEN RETURN 2 END;
    M>  IF cond3 THEN RETURN 3 END;
    M>END
    M>

    M>Или такое тоже не скомпилируется?

    Такое — нет, скомпилируется вот такое:
    PROCEDURE ProcName(): INTEGER;
    BEGIN
      IF cond1 THEN RETURN 1 END;
      IF cond2 THEN RETURN 2 END;
      IF cond3 THEN RETURN 3 END
    END ProcName;
    Re[13]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 13:02
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    P>Еще раз, универсальным типом цикла является WHILE (цикл с предусловием).


    Как же WHILE если LOOP?
    Re[5]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 13:17
    Оценка:
    Здравствуйте, jazzer, Вы писали:

    J>Правомерно, только если брать возможности среды, зафиксированные стандартом оберона (раз уж они неразделимы).

    J>Которые, соответственно, прошу в студию.

    Опорная реализация подойдет? (reference design, стандарт de facto так сказать) Смотрите главный обероновый сайт. Там есть.
    Re[14]: Яркий пример
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 13:22
    Оценка:
    P>>Еще раз, универсальным типом цикла является WHILE (цикл с предусловием).

    СГ>Как же WHILE если LOOP?


    Ох. Если бы вы хоть изредка читали то, что вам говорят оппоненты
    Автор: Mamut
    Дата: 22.06.05
    .

    Любой цикл и условие в программе можно переписать с использованием только цикла while. loop — это извращение, о котором написано здесь
    Автор: Mamut
    Дата: 22.06.05


    dmitriid.comGitHubLinkedIn
    Re[11]: Раскрутка
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 13:27
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

    СГ>>а почему не сам Оберон?


    MN>Ну уж это звиняйте физически невозможно... Разве что только писать не листочке, потом в уме компилировать в инструкции процессора и вбивать руками их в файл... Другого способа не вижу...


    Есть технология под условным названием "раскрутка", с помощью нее, например, Вирт создал Оберон. Заключается она в том, что сначала реализуется компилятор очень переочень маленького подмножества языка (например, на ассемблере, хотя Вирт брал Модулу, но это не принципиально). Затем пишется компилятор на этом подмножестве этого языка. Он компилирует сам себя. Вносятся расширения в язык. Компилятор переписывается, на языке с предыдущей итерации. И так далее. Процесс очень тяжелый. Но зато в результате появляется очень маленький и в тоже время очень мощный язык. Если ты сам себе не враг, то не добавишь в язык ничего лишнего, а добавишь как раз то что реально необходимо.
    Re[6]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 22.06.05 13:31
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    J>>Правомерно, только если брать возможности среды, зафиксированные стандартом оберона (раз уж они неразделимы).

    J>>Которые, соответственно, прошу в студию.

    СГ>Опорная реализация подойдет? (reference design, стандарт de facto так сказать) Смотрите главный обероновый сайт. Там есть.


    Нет. Нам стандарт de jure пожалста. Ну, тот которым все Оберонщики очень гордятся, что он маленький и компактный. Это должно быть там.
    Я — свихнувшееся сознание Джо.
    Re[8]: Open source
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 13:33
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    СГ>> Простите меня пожалуйста.


    Да ладно...

    http://www.oberon.ch/blackbox.html

    1.4 — закрытый
    1.5 — открытый

    M>Не известно.


    http://www.rsdn.ru/Forum/Message.aspx?mid=899740&amp;only=1
    Автор: Сергей Губанов
    Дата: 15.11.04


    Объяснение этому феномену на самом деле тривиальное...
    Re[7]: Синтаксический оверхед
    От: Privalov  
    Дата: 22.06.05 13:38
    Оценка:
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Нет. Нам стандарт de jure пожалста. Ну, тот которым все Оберонщики очень гордятся, что он маленький и компактный. Это должно быть там.


    Я читал. Нет там ничего. Ссылку навскидку не вспомню.
    Re[12]: Раскрутка
    От: Sergey J. A. Беларусь  
    Дата: 22.06.05 13:39
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>... Но зато в результате появляется очень маленький и в тоже время очень мощный язык. Если ты сам себе не враг, то не добавишь в язык ничего лишнего, а добавишь как раз то что реально необходимо.


    В результате получится язык, на котором очень легко скомпилировать самого себя. С чего должна получится мощность языка я не вижу.
    Я — свихнувшееся сознание Джо.
    Re[8]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 22.06.05 13:44
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    SJA>>Нет. Нам стандарт de jure пожалста. Ну, тот которым все Оберонщики очень гордятся, что он маленький и компактный. Это должно быть там.


    P>Я читал. Нет там ничего. Ссылку навскидку не вспомню.


    Да я знаю, что там ничего нет. Разве в 30 страниц чего-нить можно описать, кроме синтаксиса.... Это, что бы уважаемый аффтар не соскочил. Хотя, всё равно ведь соскочит...
    Я — свихнувшееся сознание Джо.
    Re[9]: Open source
    От: Sergey J. A. Беларусь  
    Дата: 22.06.05 13:47
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>http://www.rsdn.ru/Forum/Message.aspx?mid=899740&amp;only=1
    Автор: Сергей Губанов
    Дата: 15.11.04


    СГ>Объяснение этому феномену на самом деле тривиальное...


    Да-да. Совершенно тривиальное. Авторы отчаялись его кому-нибудь впарить, и открыли коды. Думали наверное кого-то завлечь беплатным сыром....
    Я — свихнувшееся сознание Джо.
    Re[8]: Open source
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 13:49
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

    MN> или на что вы знаете ответ...


    Я действительно отвечаю только на то на что ответить могу. Вообще-то это тавтология, так как нельзя ответить на то на что ответить не можешь.

    MN>Четврётого варианта я не вижу.


    Он есть.

    1) Если компилятор + рантайм Оберона уже написан на чем-то, то переписать его на самом Обероне можно.
    2) Потом, то первое выбрасываем и забываем.
    3) В качестве того первого может выступать более урезанная и опасная версия самого Оберона.
    4) Можно эту итерацию повторить очень много раз, каждый раз переписывая заново все на языке из предыдущей итерации.

    Этот процесс создания компилятора+рантайма Никлаус Вирт назвал словом "раскрутка". Собственно, в результате раскрутки и был создан первый язык Оберон + его компилятор + операционная система Оберон.

    MN>Варианты ответа 1 и 2 атоматически означают, что сам по себе GC не защищён и может содержать ошибки, следовательно ошибка в GC не будет перехвачена обероном и приложение таки упадёт, будь оно хоть трижды надёжным (не знаю зачем вообще я это объясняю — это должно быть понятно всем и так). Вариант 3 не говорит ни о чём, кроме того, что вы не знаете и всё.


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

    Но, дело в том, что по мере раскрутки, язык становится все более "правильным", так что начиная с какого-то витка раскрутки программировать становится все проще и проще. Вероятность сделать ошибку в сборщике мусора уменьшается по мере выполнения процесса раскрутки.
    Re[7]: А эхо в ответ: мать...мать...мать...
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 13:51
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

    MN>Ну продемонстрировали вы числа... И что? Я тоже много чисел знаю...


    Так продемонстрируйте! Создайте новую ветку в форуме. Покажите числа. Кто знает, может быть народ тоже накинется их обсуждать. А может проигнорирует. Мои числа почему-то не проигноровали, хотя могли бы. Наверное мои числа получились числятее чем обычные.
    Re[7]: А эхо в ответ: мать...мать...мать...
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 13:54
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    П>Может все-таки потрудитесь и приведете обероновский эквивалент для неоднократно упоминавешгося здесь

    П>
    П>while (dest[i++] = src[j++]);
    П>


    А я уже давно потрудился и привел этот пример:

    http://www.rsdn.ru/Forum/Message.aspx?mid=1216783&amp;only=1
    Автор: Сергей Губанов
    Дата: 10.06.05
    Re[9]: Open source
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 22.06.05 13:56
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Этот процесс создания компилятора+рантайма Никлаус Вирт назвал словом "раскрутка". Собственно, в результате раскрутки и был создан первый язык Оберон + его компилятор + операционная система Оберон.


    Вау! Раскрутку оказывается святой Вирт придумал...
    А вот лисперы почти полвека её используют и не знают сего факта — бедняги, однозначно...
    Re[8]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 13:57
    Оценка:
    Здравствуйте, xBlackCat, Вы писали:

    BC>То, что значение n должно уменьшится только при n > 0 — это лично Ваши домыслы, ничем не подкреплённые.


    Так ведь я же и написал, что именно в этом-то и состяла моя ошибка. До Вас это только сейчас дошло что ли?
    Re[6]: Синтаксический оверхед
    От: Трурль  
    Дата: 22.06.05 14:01
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>В преф, в отличие от бриджа, играют ещё и для удовольствия.


    А разве в бридж играют не для удовольствия

    Удовольствие — это когда попадаешь в цель!

    Re[9]: Синтаксический оверхед
    От: xBlackCat Россия  
    Дата: 22.06.05 14:07
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Так ведь я же и написал, что именно в этом-то и состяла моя ошибка. До Вас это только сейчас дошло что ли?


    До меня дошло ещё раньше.
    Просто объясни мне, как можно написать операцию, и думать, что она не выполнится?

    Но, как говорится, RTFM вначале, прежде чем что-то использовать
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Rojac &mdash; Rsdn Offline JAva Client
    Анонсы и обсуждение здесь
    Автор: xBlackCat
    Дата: 08.02.10
    Re[8]: Странная реакция
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 22.06.05 14:07
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>Сергей, если Вы не удосуживаетесь просто прочитать документацию


    Странная реакция.

    Я пишу:
    вот я на си-образном языке по недосмотру сделал глупую ошибку, которую не смог бы сделать в Modula/Oberon-образном языке

    мне в ответ:
    покажи-покажи, что за ошибку?

    Я пишу:
    вот такую-то

    мне в ответ:
    ты не почитал доки, а человект не удосуживающийся просто прочитать документацию... бла-бла-бла...

    Приехали.
    Я для этого что-ли ошибку-то тут засвечивал? Я ее тут засвечивал для того чтобы показать, что в Modula/Oberon-образном синтаксисе ошибки таких сортов невозможны.
    Re[15]: Яркий пример
    От: Privalov  
    Дата: 22.06.05 14:09
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    P>>>Еще раз, универсальным типом цикла является WHILE (цикл с предусловием).


    СГ>>Как же WHILE если LOOP?


    M>Ох. Если бы вы хоть изредка читали то, что вам говорят оппоненты
    Автор: Mamut
    Дата: 22.06.05
    .


    M>Любой цикл и условие в программе можно переписать с использованием только цикла while. loop — это извращение, о котором написано здесь
    Автор: Mamut
    Дата: 22.06.05



    Он не только оппонентов, он и классику не читает. Сейчас вряд ли найду, но эти положения у Вирта обсуждаются. Видимо, он и его не читал. О чем тогда еще говорить?
    Re[14]: Яркий пример
    От: Privalov  
    Дата: 22.06.05 14:12
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Наоборот, это WHILE и REPEAT выводятся из LOOP как частные случаи.


    СГ>WILE a DO ... END можно понимать как сокращенную запись: LOOP IF a THEN ... ELSE EXIT END END,

    СГ>REPEAT ... UNTIL b можно понимать как сокращенную запись: LOOP ... IF b THEN EXIT END END.


      while(p)
      {
       ...
      }


      LOOP
         IF (~P) THEN EXIT;
         ...
      REPEAT


    Хотите подсчитать оверхед?

    Еще раз: читайте классику!
    Re[10]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 22.06.05 14:12
    Оценка:
    Здравствуйте, xBlackCat, Вы писали:

    BC>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Так ведь я же и написал, что именно в этом-то и состяла моя ошибка. До Вас это только сейчас дошло что ли?


    BC>До меня дошло ещё раньше.

    BC>Просто объясни мне, как можно написать операцию, и думать, что она не выполнится?

    BC>Но, как говорится, RTFM вначале, прежде чем что-то использовать


    Да не, зачем? Оберон же за нас всё решит
    Re[9]: Странная реакция
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 22.06.05 14:13
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Я для этого что-ли ошибку-то тут засвечивал? Я ее тут засвечивал для того чтобы показать, что в Modula/Oberon-образном синтаксисе ошибки таких сортов невозможны.


    Доказательства в студию!
    Re[8]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 14:21
    Оценка:
    SJA>>Нет. Нам стандарт de jure пожалста. Ну, тот которым все Оберонщики очень гордятся, что он маленький и компактный. Это должно быть там.

    P>Я читал. Нет там ничего. Ссылку навскидку не вспомню.


    Нет там ничего.
    сайт Оберона
    Общая документация
    Документация по Оберонам


    ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ. Держите меня!!! :
    здесь

    What advantage do you see in using Oberon rather than other widespread programming languages?
    A: The following was reported by Antonio Cisternino :

    Reading the old book "Godel, Echer, Bach: an eternal golden braid", Hofstadter, 1980, I have found the following in chapter X:

    "Programming in different languages is like composing pieces in different keys, particularly if you work at the keyboard. If you have learned or written pieces in many keys, each key will have its own special emotional aura. Also, certain kinds of figurations "lie in the hand" in one key but are awkward in another. So you are channeled by your choice of key. In some ways, even enharmonic keys, such as C-sharp and D-flat, are quite distinct in feeling. This shows how a notational system can play a significant role in shaping the final product."

    I think it's a nice way to say that multiple languages may help solving complex problems if each language is used to exploit its strength. It is related with CLR and the music context is appropriate to the name C#.


    И все???? И это — все преимущество????????


    dmitriid.comGitHubLinkedIn
    Re[7]: Синтаксический оверхед
    От: boomsic Россия  
    Дата: 22.06.05 14:25
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    вы погрязли во лжи и глупости...


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


    S>>А еще типичная ошибка — вместо "==" в условии поставить "="...



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


    угу не имеет... точно си в сад...


    СГ>Странно, а если нужно проверить условие прекращения итерации уже находясь внутри итерации, тогда как быть?


    так не давно мне доказывали что плохо выходиь из итерации по брейку а сейчас уже что то другое.....
    ICQ 227964124
    Re[13]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 14:26
    Оценка:
    P>Это, IMHO, стандартный метод превращения дискуссии во флейм. Вместо ответа по существу — выпячивание мелочей и игнорирование сути.

    Какой-то ответ
    Автор: Сергей Губанов
    Дата: 22.06.05
    там все же появился. Советую почитать. Я долго смеялся

    P>Хорошо, что кроме такого рода ответов здесь есть что почитать.


    Ага

    P>P.S. А BEGIN в Обероне существует! А кто-то кричал не своим голосом, что нет и что это устаревший синтаксис.


    "А она все же вертится"


    dmitriid.comGitHubLinkedIn
    Re[9]: Синтаксический оверхед
    От: jazzer Россия Skype: enerjazzer
    Дата: 22.06.05 14:30
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    M>Позвольте раз в жизни согласиться с Сергеем Губановым (отпишусь-ка я на всякий случай от этой ветки, а то страшненько :maniac:).

    M>Ассерт тут по смыслу очень даже правильный.

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

    M>(вода поскипана)


    Никто и не наезжал на ассерты вообще. Любой сишник, думаю, подтвердит, что ассерты рулят.

    Другое дело, что программер ставит ассерты там, где ему надо.

    А в Обероне эти ассерты насильно впаривает компилятор, даже если они тебе здесь нафиг не нужны: ну вот не собираешься ты использовать n дальше, и все тут (как обычно и бывает, кстати: это настолько частый вариант, что синтаксис С++ специально был расширен, позволяя объявлять переменные прямо в условиях if и while, и сократив видимость обявления в for), зато собираешься выйти из середины цикла без лишних плясок с условием цикла.

    В результате из-за этого ненужного в большинстве случаев встроенного ассерта программист не может выразить свою мысль понятным способом при помощи цикла WHILE, а обречен извращаться с LOOP.
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[10]: Синтаксический оверхед
    От: Трурль  
    Дата: 22.06.05 14:37
    Оценка:
    Здравствуйте, jazzer, Вы писали:


    J>Никто и не наезжал на ассерты вообще. Любой сишник, думаю, подтвердит, что ассерты рулят.


    J>Другое дело, что программер ставит ассерты там, где ему надо.


    J>А в Обероне эти ассерты насильно впаривает компилятор, даже если они тебе здесь нафиг не нужны: ну вот не собираешься ты использовать n дальше, и все тут (как обычно и бывает, кстати: это настолько частый вариант, что синтаксис С++ специально был расширен, позволяя объявлять переменные прямо в условиях if и while, и сократив видимость обявления в for), зато собираешься выйти из середины цикла без лишних плясок с условием цикла.


    J>В результате из-за этого ненужного в большинстве случаев встроенного ассерта программист не может выразить свою мысль понятным способом при помощи цикла WHILE, а обречен извращаться с LOOP.


    Если программист не может выразить свою мысль понятным способом на родном(?) языке, ему уже ничего не поможет.
    Re[6]: Синтаксический оверхед
    От: Amidlokos Россия  
    Дата: 22.06.05 14:39
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Кстати, здесь
    Автор: Mamut
    Дата: 21.06.05
    , за "задолбали", оказывается, могут наказать. Прошу Вас впредь быть поосторожнее.


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

    А вообще — вишь как обидели г-на Губанова... Теперь на любое "фе" тут же тыкает носом в этот
    Автор: Mamut
    Дата: 21.06.05
    пост. Очень сильно напоминает поведение оскорблённого подростка, который при любом более-менее подходящем случае стремится обозвать любого так же, как назвали его.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[10]: Синтаксический оверхед
    От: Privalov  
    Дата: 22.06.05 14:44
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Не надо быть прорицателем, чтобы понять, что реальная цель у аспиранта Страуструпа была защитить диссеру чтобы его взяли на работу.


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

    Кстати, удачный пример, когда диссертационная работа получила такую реакцию общественности. Кстати, а изобретение Паскаля Виртом не преследовало те же цели?
    Re[9]: Синтаксический оверхед
    От: Centaur Россия  
    Дата: 22.06.05 14:53
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    CX>>Вот если бы были клавиатуры, на которых каждая клавиша — это готовая лексема, тогда, возможно, что-то изменилось бы.


    К>ZX Spectrum, БК-001, ещё какие-то модели микрош-ириш такой фичей обладали. Одна кнопка — одна лексема васика. У БК и Спектрум они даже подписаны были (соответственно, имели несколько шифт-клавиш ).


    Да, но зато некоторые особо злые ключевые слова приходилось набирать последовательностью комбинаций — { Caps+Symbol; Caps+буква; }, что не совсем чтобы способствовало скорости А так вообще идея размещения каждого понятия на отдельной клавише в пределе ведёт к китайской иероглифической клавиатуре… бррр…
    Re[7]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 15:07
    Оценка:
    S>>А еще типичная ошибка — вместо "==" в условии поставить "="...

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



    Надо на РСДН срочно внести новую оценку. Такую:

    "ыыыыыыыыыыыыыыыыыыыыыыыы. "

    Просто смайлика мне уже не хватает.

    Открою страшную тайну — в РНР есть даже оператор "===". Какой кошмар, не правда ли?
    А еще, а еще в С++ есть тернарный оператор ?: — какой ужас, батюшки!

    А уж за то, что С++ позполяет в десятки раз сократить количество кода только за счет использования скобок вместо THEN, BEGIN, END, DO — это вообще ужас. Расстрел без права переписки


    dmitriid.comGitHubLinkedIn
    Re[8]: Интересно
    От: Amidlokos Россия  
    Дата: 22.06.05 15:31
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    C>>Плевать мне на теорию про три цикла. На _ПРАКТИКЕ_ (подчеркиваю

    C>>специально) нужен break для нормального кода.

    СГ>Мне даже интересно стало. Может покажете пример?


    Пожалуйста. Из недавне-жизненного, пусть и "своими словами". Первое:

    // Классика: проход по самописному связному списку с поиском
    // нужного элемента
    while (pItem->Next)
    {
        if (CheckItem(pItem))
            break;
            
        pItem = pItem->Next;
    }
    
    // И здесь ещё обработка найденного pItem...


    Второе:

    // Цикл по всему массиву некоторых объектов.
    for (DWORD i = 0; i < dwCount; i++)
    {
        // Здесь ведётся определённая обработка _и учёт_ этих объектов.
        // Условия таковы, что обработка может закончиться где-то на середине
        // списка, а может и дойти до конца в зависимости от некоторого обнаруженного
        // условия. Т.е. объектов может быть и десять тысяч, но мы насчитаем нужное
        // количество интересующих нас уже за первую дюжину.
        WorkWithObject(pObjects[i]);
        
        if (CalculateStat() > SOME_VALUE)
            break;
    }
    
    // Здесь ещё продолжаем некоторую работу...


    Теперь прошу Сергея представить версии без break. И не просто без break, а ещё и без уродства в духе
    int Exit = 0;
    while ((i < nCount) && !Exit)
    {    
        if (Something(object[i]))
            Exit = 1;
            
        // И т.д.
        i++;
    }


    Или аналогично уродливых разновидностей с for-ом...
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[10]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 15:34
    Оценка:
    J>Ты вообще читаешь, что тебе пишут?
    J>С++ не был академическим проектом!
    здесь

    Stroustrup began C++ in 1978 as a project writing a “simulator for described computer systems” for his Ph.D. at the Computing Laboratory at Cambridge.


    здесь

    C++ was written by Bjarne Stroustrup at Bell Labs during 1983-1985. C++ is an extension of C. Prior to 1983, Bjarne Stroustrup added features to C and formed what he called "C with Classes"


    История Виртовских языков.

    Самый успешный Виртовский (Модула-2) и успешный Страуструповский (С++) языки были написаны для крупных исследовательских лабораторий крупнейших компаний Xerox и At&T, соответственно.

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


    dmitriid.comGitHubLinkedIn
    Re[9]: Интересно
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 15:37
    Оценка:
    A>Теперь прошу Сергея представить версии без break. И не просто без break, а ещё и без уродства в духе
    A>
    A>int Exit = 0;
    A>while ((i < nCount) && !Exit)
    A>{    
    A>    if (Something(object[i]))
    A>        Exit = 1;
            
    A>    // И т.д.
    A>    i++;
    A>}
    A>


    A>Или аналогично уродливых разновидностей с for-ом...


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


    dmitriid.comGitHubLinkedIn
    Re[14]: Яркий пример
    От: Cyberax Марс  
    Дата: 22.06.05 15:41
    Оценка:
    Сергей Губанов wrote:

    > M>"Не плоди сущностей без необходимости" LOOP — такая вот ненужная

    > сущность.
    > Странно, а если нужно проверить условие прекращения итерации уже
    > находясь внутри итерации, тогда как быть?

    while(true)
    {
        int action=...;
        if (action==action_exit)
           break;
    };


    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[16]: Яркий пример
    От: Cyberax Марс  
    Дата: 22.06.05 15:44
    Оценка:
    Трурль wrote:

    > M>И, хотя это являтся оффтопиком для данной подветки, еще одно замечание:

    > M>
    >
    >M>// С++
    >M>if(data != expectedData) // сравниваем две переменные, видно из кода
    >
    >M>{* Oberon *}
    >M>IF data # expectedData THEN // сравинваем две переменные?
    >M> // переменную и значение функции?
    >M> // значения двух функций?
    >M>
    >
    > M>Наглядность языка? Где? Не вижу.
    > То есть в С++ разницу видно, а в Обероне нет? Странно. Может очки каие
    > надо?

    В языке С данный код трактуется _однозначно_: сравение значений двух
    переменных. В Обероне, где "соптимизирован" выхов функциий без
    аргументов — уже непонятно.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[10]: Интересно
    От: Amidlokos Россия  
    Дата: 22.06.05 15:47
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>Это можно переписать с использованием LOOP


    ...а использование LOOP требует использования EXIT aka break
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[10]: Синтаксический оверхед
    От: jazzer Россия Skype: enerjazzer
    Дата: 22.06.05 15:49
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    J>>Потому что он создавался именно для облегчения программирования на С (как и С по отношению к асму, кстати).

    J>>Цель сугубо практическая.
    J>>И обкатывался язык не на теоремах, а в руках действующих программистов на С.
    J>>Почитай D&E.

    СГ>Не надо быть прорицателем, чтобы понять, что реальная цель у аспиранта Страуструпа была защитить диссеру чтобы его взяли на работу.


    Правильно, не надо быть прорицателем, надо книжку почитать.
    В 1979 году у Страуструпа уже была степень Ph.D., защищенная в Кембридже.
    http://www.research.att.com/~bs/bio.html

    В 78-м году он начал работу по использованию идиом Симулы в С.
    И это был "С с классами", а не С++, которым мы пользуемся сейчас.
    Это был даже не С++, каким он был в 83-м.

    http://www.research.att.com/~bs/bs_faq.html#invention

    When was C++ invented?
    I started work on what became C++ in 1979. The initial version was called "C with Classes". The first version of C++ was used internally in AT&T in August 1983. The name "C++" was used late that year. The first commercial implementation was released October 1985 at the same time as the publication of the 1st edition of The C++ Programming Language. Templates and exception handling were included later in the 1980's and documented in The Annotated C++ Reference Manual and The C++ Programming Language (2rd Edition).
    The current definition of C++ is The ISO C++ Standard described in The C++ Programming Language (3rd Edition).

    You can find a more complete timeline and more detailed explanations in The Design and Evolution of C++.


    --------------------------------------------------------------------------------

    Why did you invent C++?
    I wanted to write efficient systems programs in the styles encouraged by Simula67. To do that, I added facilities for better type checking, data abstraction, and object-oriented programming to C. The particular projects that prompted this work had to do with distributing operating system facilities across a network. The more general aim was to design a language in which I could write programs that were both efficient and elegant. Many languages force you to choose between those two alternatives.
    The specific tasks that caused me to start designing and implementing C++ (initially called "C with Classes") had to do with the design of a distributed operating system.

    You can find more detailed explanations in The Design and Evolution of C++.
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[11]: Интересно
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 15:55
    Оценка:
    M>>Это можно переписать с использованием LOOP

    A>...а использование LOOP требует использования EXIT aka break


    А. Да. Стал читать мимо строчек, в оригинале же было условие:

    Теперь прошу Сергея представить версии без break.



    dmitriid.comGitHubLinkedIn
    Re[8]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 22.06.05 15:58
    Оценка:
    Сергей Губанов wrote:

    > C>Угу, поэтому все академические разработки весьма успешно загибаются.

    > Между прочим, Java и .NET есть коммерческие реализации идей
    > опробованных на оберонах.

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

    ЗЫ: кстати, а что там у Оберонов-то новое? GC известен с 68 года,
    система пакетов в Обероне содрана с Ады (причем содрана не польностью —
    выдраны генерики). Больше инноваций в Обероне незаметно.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[12]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 22.06.05 15:58
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Mamut wrote:


    >> J>Ты вообще читаешь, что тебе пишут?

    >> J>С++ *не был *академическим проектом!
    >> здесь <http://www.planetpapers.com/Assets/1847.php&gt;
    >> Stroustrup began C++ in 1978 as a project writing a “simulator for
    >> described computer systems” for his Ph.D. at the Computing Laboratory
    >> at Cambridge.

    C>Это был _не_ С++ — это был "C with classes".


    Я просто некорректные цитаты привел. Я не в качестве опровержения это приводил В общем, jazzer хорошо сказал
    Автор: jazzer
    Дата: 22.06.05


    dmitriid.comGitHubLinkedIn
    Re[10]: Странная реакция
    От: raskin Россия  
    Дата: 22.06.05 16:51
    Оценка:
    Курилка wrote:
    > Здравствуйте, Сергей Губанов, Вы писали:
    >
    > СГ>Я для этого что-ли ошибку-то тут засвечивал? Я ее тут засвечивал для
    > того чтобы показать, что в Modula/Oberon-образном синтаксисе ошибки
    > таких сортов невозможны.
    >
    > Доказательства в студию!
    Не знаю, как в Обероне (не к добру вечный CAPS LOCK), но в Паскаль
    тяжело написать if a>3 then; begin writeln(); end; — должен ругнуться.
    И при этом if a then b() else c(); — точка с запятой только в конце
    простого if-блока, то есть желания поставить не возникает (что тоже
    плюс). Просто сам на этом в Си налетал (Точка с запятой после if — это
    не только знак пунктуации, но и два, три часа безуспешной отладки в
    первый раз!!).
    Posted via RSDN NNTP Server 1.9
    Re[9]: Синтаксический оверхед
    От: qwertyuiop Российская Империя  
    Дата: 22.06.05 16:52
    Оценка:
    СГ>Так ведь я же и написал, что именно в этом-то и состяла моя ошибка.

    Это-то понятно. Непонятно только, как этот факт может продемонстрировать преимущемтва Оберона. Ведь там тоже есть операция декремента — DEC(x), кажется? Если ее воткнуть на место x--, то Вы ошибетесь точно так же. Или эта операция не возвращает значения и потому не может использоваться в выражениях? В таком случае это отсутствие гибкости которым не следует хвалиться.
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[7]: Синтаксический оверхед
    От: Amidlokos Россия  
    Дата: 22.06.05 17:16
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Q>>Оберон же фактически заставляет программиста всегда использовать составной оператор, заключаа его между THEN и END. И это хорошо?!


    СГ>Да это хорошо. Найдите ошибку в следующем си-образном коде (компилятор ее не найдет, так как формально программа корректна):

    СГ>
    СГ>    if(ВыполненоНекотороеУсловие1())
    СГ>        return ВернутьНекотороеЗначениеОпределяемоеСледующимиПарамертами1(a, b, c, d, e, f, h);
    
    СГ>    if(ВыполненоНекотороеУсловие2());
    СГ>        return ВернутьНекотороеЗначениеОпределяемоеСледующимиПарамертами2(a, b, c, d, e, f, h);
    
    СГ>    if(ВыполненоНекотороеУсловие3())
    СГ>        return ВернутьНекотороеЗначениеОпределяемоеСледующимиПарамертами3(a, b, c, d, e, f, h);
    СГ>


    Найдет и не пропустит. Во-первых, отругается на выделенное полужирным ("empty controlled statement"). Во-вторых, отругается на выделенное курсивом и назовёт его наподобие "unreachable code" — "недостижимым кодом" (т.к. перед ним всегда, получается, вываливаемся по return).
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[8]: А эхо в ответ: мать...мать...мать...
    От: Пацак Россия  
    Дата: 22.06.05 17:28
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    П>>
    П>>while (dest[i++] = src[j++]);
    П>>

    СГ>А я уже давно потрудился и привел этот пример:
    СГ>http://www.rsdn.ru/Forum/Message.aspx?mid=1216783&amp;only=1
    Автор: Сергей Губанов
    Дата: 10.06.05


    А, и правда, совсем забыл! Оверхед по строкам/лесемам считать будем или "на глазок" все ясно?
    Ку...
    Re[16]: Яркий пример
    От: Amidlokos Россия  
    Дата: 22.06.05 17:36
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    M>>Наглядность языка? Где? Не вижу.

    Т>То есть в С++ разницу видно, а в Обероне нет? Странно. Может очки каие надо?

    Вызов функции в C++ всегда обозначен скобками: somebody(). Скобок нет — переменная. "Виртовский бесскобочный" синтаксис не указывает на то, что это за такое somebody в коде встретилось.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[12]: Яркий пример
    От: qwertyuiop Российская Империя  
    Дата: 22.06.05 18:01
    Оценка:
    Q>>как научный работник умело подтасовывает данные.

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


    Да-да, конечно... В своей кандидатской тоже такими методами не брезговали?
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[11]: Еще один яркий пример
    От: AVC Россия  
    Дата: 22.06.05 20:40
    Оценка:
    Здравствуйте, Пацак, Вы писали:

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


    AVC>>По виду — типичный планировщик задач.


    П>ХЗ что это — из головы придумал. У меня на работе даже сишного компилера нет, если честно.


    AVC>>Не могу понять, зачем постоянно проверяется наличие в очереди элементов? Они ведь в цикле не удаляются.


    П>Учитывая принцип "черного ящика" — мы не можем это сказать. Можем сказать лишь что они не удаляются в этом цикле этой программы.


    Очень мило.
    Вы предлагаете написать код, но не формулируете ни его смысла, ни условий его эксплуатации.
    Я не знаю происхождения Вашего кода, но сдается мне, что "принципу черного ящика" (интересно, каков он в Вашем понимании?) он определенно не соответствует.
    Например, поиск первого свободного элемента (процесса?) и его активизация не являются атомарной операцией. Глюк?

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re[16]: Яркий пример
    От: Пацак Россия  
    Дата: 22.06.05 22:28
    Оценка:
    Здравствуйте, AVC, Вы писали:

    AVC>И вызов функции, и ее определение требуют круглых скобок, даже если функция вызывается без параметров.


    Стоп-стоп-стоп! Отсюда поподробнее. Значит скобочки рядом с вызовом функции без параметров в обероне таки тоже нужны? В таком случае настоятельно прошу автора топика переписать весь код в этой
    Автор: Сергей Губанов
    Дата: 09.06.05
    мессаге в соответствии с этим [вдруг всплывшим] требованием, пересчитать оверхед по лексемам и перерисовать "звездочные" диаграммы. Что-то сдается мне и оверхед поменьше заявленного будет, да и черелование лексема-идентификатор-лексема-идентификатор куда-то сразу исчезнет.
    Для примера один кусок попробую преобразовать сам:

    C++
    while(a) x();


    Лексем — 6
    Строк — 1 (или три — с фигурными скобками в K&R-style)
    Диаграмма — * * a * x * * *

    Оберон:
    WHILE a DO x() END

    Лексем — 5
    Строк — 1 (или три — как запишешь)
    Диаграмма — * a * x * * *

    Оверхед по лексемам — 20%, по строкам — 0%

    Может хватит уже ерундой заниматься?
    Ку...
    Re[9]: Open source
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 23.06.05 02:51
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Mr. None, Вы писали:


    MN>> или на что вы знаете ответ...


    СГ>Я действительно отвечаю только на то на что ответить могу. Вообще-то это тавтология, так как нельзя ответить на то на что ответить не можешь.


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

    MN>>Четврётого варианта я не вижу.

    СГ>Он есть.
    Сомневаюсь. См. ниже.

    СГ>1) Если компилятор + рантайм Оберона уже написан на чем-то, то переписать его на самом Обероне можно.

    А если компилятора + рантайма ещё нет? Всё — дальнейшие рассуждения можно пропустить, потому что проводя "раскрутку" в обратную сторону мы таки приходим к варианту 1 или 2. Ещё раз повторяю — другого не дано! Первый компилятор не компилировался, а набирался сразу в машинных кодах, ибо компилировать было ещё не начем.

    СГ>Этот процесс создания компилятора+рантайма Никлаус Вирт назвал словом "раскрутка". Собственно, в результате раскрутки и был создан первый язык Оберон + его компилятор + операционная система Оберон.


    То что вы описываетет сводится к варианту 2...

    MN>>Варианты ответа 1 и 2 атоматически означают, что сам по себе GC не защищён и может содержать ошибки, следовательно ошибка в GC не будет перехвачена обероном и приложение таки упадёт, будь оно хоть трижды надёжным (не знаю зачем вообще я это объясняю — это должно быть понятно всем и так). Вариант 3 не говорит ни о чём, кроме того, что вы не знаете и всё.


    СГ>Вы правы. По этому поводу Никлаус Вирт как раз и ругал все эти дебагеры.

    Ну вот опять... Я где-нибудь упоминал дебагеры? Причём тут дебагеры?
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[8]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 23.06.05 03:04
    Оценка:
    Здравствуйте, jazzer, Вы писали:

    J>И соответствующее предупреждение компилятора:

    J>
    J>"ComeauTest.c", line 4: warning: use of "=" where "==" may have been intended
    J>     if(i = 1);
    J>        ^
    J>


    J>Скажи честно, тебе самому не надоело еще фигней заниматься?


    Факты не сходятся с теорией... Как истинный физик теоретик, закалённый в предзащитных дебатах, который не может подогнать факты под свою теорию, он просто обязан изничтожить оппонентов и доказать им что он прав, чтобы никто не обращал внимание на это не соответствие.
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[8]: Синтаксический оверхед
    От: Privalov  
    Дата: 23.06.05 04:58
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    П> Если б вы знали, как прикольно мне, ни разу не игравшему это читать.



    Напомнила мне молодость цитата: эту книгу я впервые получил в распечатанном виде. На нашем ВЦ задолго до Литпортала и Альдебарана была неплохая электронная библиотека. Вот только имена тех, кто перенес литературные произведения на ленты, мы, наверное, уже не узнаем.
    Re[17]: Яркий пример
    От: Трурль  
    Дата: 23.06.05 05:12
    Оценка:
    Здравствуйте, Пацак, Вы писали:

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


    AVC>>И вызов функции, и ее определение требуют круглых скобок, даже если функция вызывается без параметров.


    П>Стоп-стоп-стоп! Отсюда поподробнее. Значит скобочки рядом с вызовом функции без параметров в обероне таки тоже нужны? В таком случае настоятельно прошу автора топика переписать весь код в этой
    Автор: Сергей Губанов
    Дата: 09.06.05
    мессаге в соответствии с этим [вдруг всплывшим] требованием, пересчитать оверхед по лексемам и перерисовать "звездочные" диаграммы.


    А там нет вызова функции. Там вызов процедуры.
    Re[18]: Яркий пример
    От: Пацак Россия  
    Дата: 23.06.05 05:38
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    Т>А там нет вызова функции. Там вызов процедуры.


    То есть у оберона для процедуры с параметрами и без — разный синтаксис? А для функции с параметрами и без — нет? Чудны дела твои, господи...
    Ку...
    Re[11]: Интересно
    От: Socrat Россия  
    Дата: 23.06.05 06:48
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:

    А если так?

    for (Work = 1; pItem && Work; pItem = pItem->Next)
    {
        if (IsBadItem(pItem))
        {
            // Что-то делаем...
            LogErrorMessage(something);
            SetErrorState(something);
            Work = 0;    // Напоминаю, без break-а
        }
        
        else if (CheckItem(pItem))
        {
            // Нужно вернуть объект
            // Допустим, для дальнейшего использования сохраняем указатель
            pFounded = pItem;
            Work = 0;
        }
        
        else if (CancelCommand())
        {
            // Ну хоть здесь можно с чистой совестью просто вывалиться из всей функции
            return NULL;    // Что мы там возвращаем и как... NULL...?
        }
    }
    Re[16]: Яркий пример
    От: Mamut Швеция http://dmitriid.com
    Дата: 23.06.05 06:59
    Оценка:
    M>>Просьба к коду не придираться

    AVC>Да Бог с ним, с кодом; какая разница, ведь Вы просто не знаете языка.

    AVC>И в Си++, и в Обероне в данном случае сравниваются переменные.
    AVC>И вызов функции, и ее определение требуют круглых скобок, даже если функция вызывается без параметров.

    О! Я этого не знал, но! Нигде (ни в постах Сергея, например, ни даже в примерах на ETH) не указано такое требование.

    Например
    
    
    PROCEDURE PrintGadget*;
    VAR S: Display.SelectMsg; P: Display.DisplayMsg; obj: Objects.Object;
    BEGIN
      Printer.Open("LPT1", "");
      Out.String("Printing gadget"); Out.Ln;
      S.id := Display.get; S.F := NIL; S.obj := NIL; S.time := -1;
      Display.Broadcast(S);
      IF (S.time > 0) & (S.obj # NIL) THEN
        obj := S.obj;
        P.device := Display.printer; P.id := Display.contents; P.F := obj(Display.Frame);
        P.res := -1;
        Display.Broadcast(P);
      END
    END PrintGadget;


    Только посмотрев в описание модулей можно понять, что Out.Ln — процедура, а Display.get — это переменная

    Более того, в EBNF Оберона записано следующее:
    ...
    statement  =  [assignment | ProcedureCall | 
        IfStatement | CaseStatement | WhileStatement | RepeatStatement | 
        LoopStatement | WithStatement | EXIT | RETURN [expression] ].
    ...
    ProcedureCall  =  designator [ActualParameters].


    То есть скобки не нужны при вызове

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

    AVC>Понимаете, в чем закавыка. Я программирую как на Си++, так и на Обероне. (Оберон мне нравится больше, но для того, что я хочу Вам сказать, это не имеет значения.)
    AVC>В то же время ни Вы, ни большинство других "оппонентов" (какими они зачастую себя только воображают) Оберона не знают и на нем не пишут.



    AVC>Отсюда беспрерывные "откровения" вроде Вашего (со сравнением переменных) или уж откровенно глупого "оказывается, в Обероне есть BEGIN!!!". О перлах вроде "мне нас**ть на принципы структрного программирования" я уж и не говорю.


    Ну, на принципы эти мне не неср*ть в общем случае Дело в том, что слишком часто от того же принциа "одна точка входа — одна точка выхода" необходимо отходить, потому что следование ему приводит к усложнению программы.

    На самом деле меня интересовал (в этой подветке) всего один вопрос — почему недопустимо более одной точки выхода из циклов FOR и WHILE в Обероне и почему необходимо было вводить цикл LOOP (он уже нарушает принцип структурного программирования Дейкстры).

    AVC>Я отношусь к Вам с уважением и часто с удовольствием читаю Ваши посты.

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

    Сожалею, если возникло такое ощущение

    AVC>Видели бы вы все себя со стороны!

    AVC>Попробуйте сами объяснить для себя присутствие столь многих и столь заведомо необъективных и даже откровенно злых людей на этом форуме, если эта тема так им неинтересна, если Оберон — такой уж плохой язык?

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

    AVC>Можете рассматривать это как "открытое письмо".



    dmitriid.comGitHubLinkedIn
    Re[11]: Очередной яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 07:11
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    SJA>> (т.е. я так предполагаю). "Спрашивается как долго ...".


    Т>Есть масса других вещей, о которых можно приятно пофлеймить.


    Например, до каких пор некоторые люди будут предполагать...
    Re[11]: Синтаксический оверхед
    От: CrystaX Россия https://crystax.me/
    Дата: 23.06.05 07:11
    Оценка:
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>http://yuri.shilyaev.com/2005/01/11/234/kitayskaya-pechatnaya-mashinka.html


    Не, это другая. Та, что я видел, была безо всяких барабанов. Просто квадрат метр на метр, а по нему станина ездит.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[10]: Очередной яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 07:33
    Оценка:
    Здравствуйте, Oleg A. Bachin, Вы писали:

    OAB> игнорируете мой пост утвеждающий что вы ничего не понимаете в програмировании судя по вашей конструкции "try try")


    Простите конечно, но тут так много сообщений, что я, к сожалению, даже уже забыл о чем речь в try try. Мне даже кажется что это вне темы данной ветки.

    OAB>кстати, а как у нас дело обстоит с абстрактными методами?


    Хорошо обстоят дела. Пишете слово ABSTRACT. Но можно я всё-таки просто дам Вам ссылку на русском языке
    на language report, и Вы самостоятельно его прочитатете, вместо того чтобы мне тут всё объяснять?


    OAB>пжалуйста!

    OAB>
    OAB>  if ((@a <> nil) and (a <> nil)) then ... 
    OAB>


    Спасибо. Не знал. Сам пользовался для функций assigned(). Кстати, если @a обозначает прецедуру на которую указывает процедурная переменная "a", то как тогда узнать адрес самой процедурной переменной "a". Ведь операция получения адреса тоже обозначается символом @ ?

    Например, если объявлено:

    var i: integer;

    то @i — это адрес переменной i. Но если объявлено

    var a: MyFunc;

    то @a — это не адрес "a", а адрес процедуры на которую ссылается процедурная переменная "a". Но как узнать адрес самой переменной "a"?
    Re[10]: Очередной яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 07:37
    Оценка:
    Здравствуйте, alexku, Вы писали:

    A>То есть, забыл скобки — получил глюк.


    А что Вы можете предложить в замен?

    TYPE Func: PROCEDURE(): Func;

    VAR a: Func;

    a — обозначает саму себя как процедурную переменную
    a() — обозначает результат, который вернула процедура-функция после исполнения

    Как иначе-то, может быть?
    Re[11]: Очередной яркий пример
    От: Аноним  
    Дата: 23.06.05 07:46
    Оценка:
    СГ>a — обозначает саму себя как процедурную переменную
    СГ>a() — обозначает результат, который вернула процедура-функция после исполнения

    СГ>Как иначе-то, может быть?


    Значит скобки все-таки нудны в вашем знаменитом WHILE a DO x END? То есть нужно писать x()?
    Re[10]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 08:09
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>Что-то в примерах, которые вы приводили при подсчете лексем, вы почему-то не вызывали процедуры со скобками. Аяяяй, нехорошо


    А потому что там были процедуры, а тут процедуры-функции.

    Для активации процедуры-функции надо
    1) скобки написать даже если нет ни одного аргумента (иначе идентификатор будет обозначать саму процедуру-функцию, а не результат ее действия)
    2) Как-то использовать возвращаемый результат.
    a := myfunc;        (* можно только если a - процедурная переменная, тогда ей присваивается значение самой процедуры-функции (ее адрес)  *)
    b := myfunc();      (* можно, присваиваем результат возвращаемый после активации процедуры-функции  *)
    myfunc();           (* НЕЛЬЗЯ! Возвращаемое значение не используется!!! *)
    IF valid() THEN END (* можно - возвращаемое значение используется  *)
    Re[8]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 08:14
    Оценка:
    Здравствуйте, qwertyuiop, Вы писали:

    Q>Большинство современных компиляторов выдают на такую строчку предупреждение


    Это хорошо. Правда на прошлой неделе компилировал нечто написанное на Си не мной, там столько предупреждений выдалось, ёёёё-о-у, во всех них копаться даже не стал. Раз уж сами авторы не стали, я-то что?
    Re[14]: Относительность
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 08:23
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    M>Вообще, я читал где-то небольшие рассуждения о том, что в ОТО куда меньше отностиельного, нежели в СТО. Найду если за реальное время — дам линку...


    Давно хотел ответить, но потерял это сообщение (тут их так много). Только что почти случайно нашел это Ваше сообщение. Так вот, не надо не ищите ссылку. Это и так известно. В плоском пространстве бесконечно много равноправных глобальных инерциальных систем отсчета (грубо говоря — всё относительно). Малейшее искривление пространства снимает это вырождение. В искривленном пространстве остается всего одна глобальная инерциальная система отсчета (грубо говоря — всё абсолютно). Остается добавить, что мы с вами живем в искривленном пространстве (грубо говоря — относительность у нас лишь локальная, в бесконечно малом).
    Re[13]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 08:56
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    P>P.S. А BEGIN в Обероне существует! А кто-то кричал не своим голосом, что нет и что это устаревший синтаксис.


    Ни кто не кричал что в Обероне не существует слова BEGIN. Речь была о том, что самостоятельного блока BEGIN END оторванного от IF, WHILE, CASE, WITH и т.д. в Обероне не существует. Самостоятельный блок ни для чего не нужен. Служебное слово BEGIN используется только внутри составной инструкции PROCEDURE, а также внутри составной инструкции MODULE:

    MODULE...
    ...
    BEGIN
    ...
    END...


    PROCEDURE...
    ...
    BEGIN
    ...
    END...

    оно показывает где, собственно, начинается сам код.
    Re[21]: Синтаксический оверхед
    От: CrystaX Россия https://crystax.me/
    Дата: 23.06.05 08:57
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


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


    СГ>Не английский, а США-совский. И это очень существенное уточнение. Это потому, что мог бы быть русский, если бы произошла мировая революция; или немецкий если бы планы фашистов сбылись; или китайский если бы китайцы завоевалю всю евразию. Или японский, если бы у них у первых появилась ядерная бомба. А так как в холодной войне победили именно США, то и язык по всему миру ихний. Кроме того они и компы с программами для них первее всех расплодили. Аналогично у Java нет преимуществ перед Оберонами кроме как то, что за плечами Java стоит Sun. Аналогично про .NET с Microsoft.


    Опять демагогия? Неважно, какой язык был бы распространен. Любой их них чрезвычайно сложен для корректного его разбора. Английский язык был приведен в качестве примера одного из простейших распространенных натуральных языков.
    И тем не менее этими языками пользуются. Почему? Вывод очевиден — человек мыслит другими категориями. На синтаксис ему плевать. Попытка впихнуть человеческое мышление в строгие рамки "правильного" синтаксиса обречена на провал, что уже не раз доказывалось на практике.

    Все, я утрачиваю интерес к этому разговору, завязываю. Вообще мои сообщения имели четкую цель — ответить на Ваш вопрос "доколе?". Я ответил. Захотите воспринять — воспримете. Нет — я ничего доказывать Вам не буду. Жизнь докажет. Эволюция, если хотите.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[11]: Синтаксический оверхед
    От: Трурль  
    Дата: 23.06.05 09:01
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>
    СГ>myfunc();           (* НЕЛЬЗЯ! Возвращаемое значение не используется!!! *)
    СГ>

    Таки, монжно.
    Re[12]: Синтаксический оверхед
    От: Трурль  
    Дата: 23.06.05 09:05
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>Писец. И это — правильный синтаксис???? У меня уже слов не осталось. Грабли, не хуже, чем в С++


    M>Пример. Полупсевдокод.

    M>
    M>Было
    
    M>PROCEDURE someProcedure : INTEGER
    M>BEGIN
    M>  RETURN 1;
    M>END;
    
    M>Стало
    
    M>PROCEDURE someProcedure
    M>BEGIN
    
    M>END;
    
    M>Где-то в коде:
    M>{* много кода *}
    M>myVar := someProcedure;
    M>{* много кода *}
    M>


    Че-то не уловил смысла примера. Где грабли-то?
    Re[13]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 23.06.05 09:13
    Оценка:
    Т>Че-то не уловил смысла примера. Где грабли-то?

    Что-то я торможу Сотрите и забудьте, как страшный сон


    dmitriid.comGitHubLinkedIn
    Re[22]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 23.06.05 09:18
    Оценка:
    К>Сергей, уважайте, пожалуйста, родной язык (если, конечно, русский для вас родной) — нет слова "ихний" в русском!
    К>А утверждения далеки от правоты. Наводящий вопрос: США единственная страна, говорящая по-английски? Если вы хоть немного знаете историю и географию, то гораздо большее значение Англии, а не США (хотя влияние последних тоже немалое, но и туда английский из Англии пришёл)

    Можно почитать еще вот эту статью про Lingua Franca. Наиболее популярными и используемыми никогда не становились простые, логические языки.

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


    dmitriid.comGitHubLinkedIn
    Re[15]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 09:20
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>Просьба к коду не придираться


    Если исполнить эту просьбу, то надо кратко ответить — "У Вас ошибки". Но Вы же наверняка потом спросите, а где именно у меня ошибки? Ведь так, да? Ладно, вместо того чтобы придираться, я сразу напишу по грамотному.



    LOOP
      IF socketRead # eof THEN
        IF bytesRead <= ALLOWED_BYTES THEN
          processData;
          IF data # expectedData THEN errorCode := BAD_DATA; EXIT END
        ELSE
          errorCode := HACKER_ATTACK; EXIT
        END
      ELSE EXIT END
    END



    IF data # expectedData THEN ... END
    Здесь сравниваются две переменные.

    IF data # expectedData() THEN ... END
    Здесь сравниваются переменная и значение возвращаемое процедурой-функцией

    IF data() # expectedData() THEN ... END
    Здесь сравниваются значения возвращаемые процедурами-функциями

    Вот в Delphi с этим проблема, а в Modula/Oberon-ах, активация процедуры-функции обозначается скобками "()" даже если список аргументов пуст. (Это не относится к просто процедурам — у них скобки писать не обязательно если аргументов нет.)
    Re[16]: LOOP
    От: Mamut Швеция http://dmitriid.com
    Дата: 23.06.05 09:24
    Оценка:
    M>>Любой цикл и условие в программе можно переписать с использованием только цикла while.

    СГ>а его, в свою очередь, через LOOP:


    СГ>WHILE a DO x END = LOOP IF a THEN x ELSE EXIT END END

    СГ>REPEAT x UNTIL b = LOOP x; IF b THEN EXIT END END

    СГ>WHILE и REPEAT — синтаксический сахар поверх LOOP.


    Syntactic sugar:

    Syntactic sugar is a term coined by Peter J. Landin for additions to the syntax of a computer language that do not affect its expressiveness but make it "sweeter" for humans to use. Syntactic sugar gives the programmer (designer, in the case of specification computer languages) an alternative way of coding (specifying) that is more practical, either by being more succinct or more like some familiar notation. It does not affect the expressiveness of the formalism.


    WHILE и FOR в Обероне ухудшают выразительность языка по сравнению с LOOP так как они не прдеставляют более одной точки выхода, и поэтому не могут называться синтаксическим сахаром.

    И вообще, там есть великолепное изречение:

    The correct amout of both syntactic sugar and syntactic salt in a language is a matter of personal opinion, and thus is the subject of never-ending debate.


    Как раз об этой ветке


    dmitriid.comGitHubLinkedIn
    Re[17]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 09:32
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:

    A>Вызов функции в C++ всегда обозначен скобками: somebody(). Скобок нет — переменная. "Виртовский бесскобочный" синтаксис не указывает на то, что это за такое somebody в коде встретилось.


    Разумеется нет. Вы путаете процедуру с процедурой-функцией. Вызов процедуры-функции обязывает писать () даже если нет аргументов, в противном случае этот идентификатор обозначает процедурную константу, которую можно, например, присвоить какой-то процедурной переменной.
    Re[17]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 09:37
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    P>Это я сказал про BEGIN. И единственной моей целью было показать методы ведения спора, применяемые некоторыми товарищами. Вот смотрите: несколько раз эти товарищи утверждают, что BEGIN устарел, но в нужный момент вытаскивают его для подтверждения очередной своей теории. Ссылок не привожу, все, читавшие этот топик, знают, о чем я. И, кроме отдельно взятого BEGIN есть еще масса подобных примеров. Подобное поведение говорит о глубоких и прочных знаниях языка?


    Речь шла не о служебном слове BEGIN, а о самостоятельном блоке BEGIN ... END, которого в Обероне нет.
    Re[17]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 09:39
    Оценка:
    Здравствуйте, qwertyuiop, Вы писали:

    Q> какова его практическая польза


    Его можно использовать для математического доказательства правильности алгоритмов. Об этом говорилось в самом начале (верификация).
    Re[17]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 09:43
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>Только посмотрев в описание модулей можно понять, что Out.Ln — процедура, а Display.get — это переменная


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

    M>То есть скобки не нужны при вызове


    Для вызова процедуры не обязательны, а для вызова процедуры-функции обязательны.
    Re[15]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 09:44
    Оценка:
    Здравствуйте, Cyberax,

    while(true) = LOOP
    Re[16]: Яркий пример
    От: Mamut Швеция http://dmitriid.com
    Дата: 23.06.05 09:48
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>>Просьба к коду не придираться


    СГ>Если исполнить эту просьбу, то надо кратко ответить — "У Вас ошибки". Но Вы же наверняка потом спросите, а где именно у меня ошибки? Ведь так, да? Ладно, вместо того чтобы придираться, я сразу напишу по грамотному.


    Я вас просил????
    Дети, сегодня мы будем учиться читать
    Автор: Mamut
    Дата: 22.06.05
    :

    В обероне циклы while, for, repeat слепо следуют структурной парадигме, из которой следует, что в цикле должна быть одна точка выхода. Но в реальном мире необходимо больше точек выхода. Так в Обероне рождается LOOP. Скажите, от того, что в while есть возможность выхода — это плохо?
    ...

    В обероновском случае нам приходится менять логику работы с сокетом с понятного "пока есть данные" на "данные есть всегда., только надо проверить, а не закончился ли поток". Хуже того, трансформация кода должна проходить очень тщательно. Один while do end заменяется на громоздкую конструкцию loop if then end end.

    Ну и где преимущества убогих, кастрированных циклов Оберона над великолепно-гибкими циклами других языков?



    dmitriid.comGitHubLinkedIn
    Re[23]: СИНТАКСИС
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 23.06.05 09:50
    Оценка:
    Здравствуйте, Mamut, Вы писали:

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


    СГ>>>Если в будущем, например, IBM или Intel соберется изобрести новый язык, то почему-бы им не взять в качестве синтаксической основы правильный синтаксис Modula/Oberon? Их язык от этого только выиграет.


    M>>Кто сказал, что этот синтаксис — правильный? Только не надо ссылки на самого себе приводить. Требуется ссылка на строгое математическое доказательство правильности данного синтаксиса.


    M>Как всегда, все приходится делать самому. Не знаю, увидят ли это сообщение в этой ветке, ну да ладно.


    M>Syntax across languages


    M>Некоторые варианты синтаксиса просто великолепны.


    Thax, Mamut!
    Интересная ссылочка, только вот из виртовских детищ только паскаль, ну, видимо, не интересно людям что там в оберонах всех этих творится...
    Re[16]: LOOP
    От: jazzer Россия Skype: enerjazzer
    Дата: 23.06.05 09:59
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>>Любой цикл и условие в программе можно переписать с использованием только цикла while.


    СГ>а его, в свою очередь, через LOOP:


    а его, в свою очередь, через GOTO.
    Но, видимо, чтоб неповадно было, из Оберона его убрали.
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[16]: Яркий пример
    От: Пацак Россия  
    Дата: 23.06.05 10:00
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Если исполнить эту просьбу, то надо кратко ответить — "У Вас ошибки". Но Вы же наверняка потом спросите, а где именно у меня ошибки? Ведь так, да? Ладно, вместо того чтобы придираться, я сразу напишу по грамотному.


    СГ>
    СГ>LOOP
    (скип)
    СГ>END
    СГ>


    Просто замечательно. То есть любой while-цикл, который требует прерывания по break в обероне автоматически превращается в LOOP.
    Есть цикл некий цикл:

    while (! end_of_stream()) {
        prepare(...);
        ....
        foo = read();
        ... 
        boo = process(foo);
        .... 
    }


    Прога, содержащая его давно и нормально работает. Но в один прекрасный момент заказчик-юзер заявляет, что согласно новому протоколу чтение может быть прервано не только при end_of_stream(), но и при некотором сигнальном значении is_terminate_signal(boo). В итоге на С++ код (в общем случае) превращается в

    while (! end_of_stream()) {
        ... 
        boo = process(foo);
        if (is_terminate_signal(boo)) break;
        .... 
    }


    что означает добавление одной (!) строчки. В обероне программист должен переделать WHILE на LOOP с двумя IF .. THEN EXIT END по одному на каждое условие. Безумно удобно, ничего не скажешь!
    ИМХО единственное, чего можно добиться таким подходом — так это того, что программисты будут все циклы, кроме самых тривиальных писать через ж... ой то есть через LOOP. Попросту чтоб потом не заморачиваться с возможными переделками.
    Ку...
    Re[24]: СИНТАКСИС
    От: Mamut Швеция http://dmitriid.com
    Дата: 23.06.05 10:00
    Оценка:
    К>Интересная ссылочка, только вот из виртовских детищ только паскаль, ну, видимо, не интересно людям что там в оберонах всех этих творится...

    Там еще Modula-3 мелькает иногда


    dmitriid.comGitHubLinkedIn
    Re[10]: Open source
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 10:02
    Оценка:
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>http://www.rsdn.ru/Forum/Message.aspx?mid=899740&amp;only=1
    Автор: Сергей Губанов
    Дата: 15.11.04


    СГ>>Объяснение этому феномену на самом деле тривиальное...


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


    Да не бесплатности объяснение, а объяснение почему сборщик мусора в BlackBox работает в несколько раз быстрее чем сборщик мусора в .NET.
    Re[18]: Яркий пример
    От: Mamut Швеция http://dmitriid.com
    Дата: 23.06.05 10:04
    Оценка:
    СГ>Уверяю Вас это было видно сразу же по тексту программы. Ведь активация процедуры-функции всегда помечается скобками () даже если список параметров пуст.

    Это сыграло мое неполное знание синтаксиса языка. В общем, такое же, как и у вас, когда вы сетовали на оператор "-->" в C++


    dmitriid.comGitHubLinkedIn
    Re[9]: Короче
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 10:07
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    П>А, и правда, совсем забыл!


    Кстати, можно усовершенствовать:

    LOOP a[i] := b[j];
    IF b[j] # 0X THEN INC(i); INC(j) ELSE EXIT END
    END

    так короче.
    Re[10]: Короче
    От: Пацак Россия  
    Дата: 23.06.05 10:15
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Кстати, можно усовершенствовать:

    СГ>LOOP a[i] := b[j];
    СГ> IF b[j] # 0X THEN INC(i); INC(j) ELSE EXIT END
    СГ>END
    СГ>так короче.

    Угу. А вот так — еще короче:

    LOOP a[i] := b[j]; IF b[j] # 0X THEN INC(i); INC(j) ELSE EXIT END END


    Но вот только до исходного

    while (*dest++ = *src++) continue;


    по краткости все равно не дотягивает, хоть убейся.
    Ку...
    Re[8]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 10:15
    Оценка:
    Здравствуйте, alexku, Вы писали:

    A>В этом вашем примере assert(n <= -1) совершенно не имеет смысла, потому что значение n предсказуемо на 100% и всегда будет равно -1.


    Это было бы так если бы использовался Modula/Oberon в которых из цикла WHILE нельзя выйти ни каким другим способом. В С# же был выход по break. Поэтому значение n на реальных данных всегда было больше нуля, а не то что больше -1. Ошибку я нашел просто случайно поглядев на исходник, а вовсе не от того что программа упала (она не падала) и я залезши в дебагер стал там чего-то крутить.
    Re[10]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 10:18
    Оценка:
    Здравствуйте, jazzer, Вы писали:

    J>А в Обероне эти ассерты насильно впаривает компилятор, даже если они тебе здесь нафиг не нужны


    Это Вы погорячились. После WHILE или REPEAT их впаривать просто не зачем, математика рулит...
    Re[22]: Синтаксический оверхед
    От: Privalov  
    Дата: 23.06.05 10:33
    Оценка:
    Здравствуйте, alexku, Вы писали:

    A>А что от этого выиграют IBM и Intel? Похвалу Сергея Губанова?


    У меня такое ощущение, что гте-то в комитете по стандартам открывается отдел стандартизации синтаксисов. Может, в этом все дело?
    Re[15]: Синтаксический оверхед
    От: alexku Россия  
    Дата: 23.06.05 10:34
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    P>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Ни кто не кричал что в Обероне не существует слова BEGIN.



    P>

    P>Где-то в середине 1970-тых годов был открыт реально необходимый и достаточный синтаксис (Modula-2, 1979 год)
    P>[...]

    P>Обратите внимание: слово "BEGIN" отсутствует вообще во всех инструкциях — оно лишнее.


    P>А это
    Автор: Сергей Губанов
    Дата: 09.06.05
    что?


    Если видишь в стенке люк,
    Не волнуйся, это глюк.
    Re[11]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 10:35
    Оценка:
    Здравствуйте, jazzer, Вы писали:

    J>Правильно, не надо быть прорицателем, надо книжку почитать.

    J>В 1979 году у Страуструпа уже была степень Ph.D., защищенная в Кембридже.
    J>http://www.research.att.com/~bs/bio.html

    J>В 78-м году он начал работу по использованию идиом Симулы в С.

    J>И это был "С с классами", а не С++, которым мы пользуемся сейчас.
    J>Это был даже не С++, каким он был в 83-м.

    Я и имел в виду Си с классами, который он начал изобретать будучи аспирантом. Название "С++" появилось позже.
    Re[7]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 10:39
    Оценка:
    Здравствуйте, qwertyuiop, Вы писали:

    Q> Хочу знать: зачем это мне, программисту.


    Для того чтобы составлять алгоритмы грамотно.
    Re[18]: Яркий пример
    От: Privalov  
    Дата: 23.06.05 10:40
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Его можно использовать для математического доказательства правильности алгоритмов. Об этом говорилось в самом начале (верификация).


    Вас еще там же просили что-нибудь верифицировать в качестве примера, как можно обойтись без отладки. И что, вышло что-нибудь? Если у Вас затруднения с примерами, то вот подсказка: в книге Вирта "Алгоритмы + структуры данныхь их полно. а то, что они все на Модуле-2, у Вас не должно вызывать затруднений — синтаксис-то правильный.
    Re[10]: Короче
    От: Socrat Россия  
    Дата: 23.06.05 10:41
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Кстати, можно усовершенствовать:


    СГ>LOOP a[i] := b[j];

    СГ> IF b[j] # 0X THEN INC(i); INC(j) ELSE EXIT END
    СГ>END

    СГ>так короче.


    А так можно?

    LOOP a[i] := b[j];
    IF b[j] = 0X THEN EXIT END; INC(i); INC(j)
    END
    Re[12]: Так Вы определитесь
    От: Privalov  
    Дата: 23.06.05 10:44
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    A>> Однако имеет смысл только для одной проверки. Ну двух. А если точек выхода десяток (по найденному, по обнаруженному битому, срочно по переключению мютекса и т.п.)?


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


    Если Вы когда-нибудь писали что-то реальное, таких примеров у Вас самого должно хватать.
    Re[9]: Синтаксический оверхед
    От: Socrat Россия  
    Дата: 23.06.05 10:44
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    A>>В этом вашем примере assert(n <= -1) совершенно не имеет смысла, потому что значение n предсказуемо на 100% и всегда будет равно -1.


    СГ>Это было бы так если бы использовался Modula/Oberon в которых из цикла WHILE нельзя выйти ни каким другим способом. В С# же был выход по break. Поэтому значение n на реальных данных всегда было больше нуля, а не то что больше -1. Ошибку я нашел просто случайно поглядев на исходник, а вовсе не от того что программа упала (она не падала) и я залезши в дебагер стал там чего-то крутить.


    А я вообще не понял смысл такой проверки. Или ты забыл присвоить новое значение после цикла?
    Re[11]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 23.06.05 10:53
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Это Вы погорячились. После WHILE или REPEAT их впаривать просто не зачем, математика рулит...


    Логика тоже рулит: их и в C++ впаривать незачем, ибо состояние условия цикла после его завершения никого уже совершенно не волнует.
    Ку...
    Re[11]: Open source
    От: Sergey J. A. Беларусь  
    Дата: 23.06.05 10:55
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    СГ>Да не бесплатности объяснение, а объяснение почему сборщик мусора в BlackBox работает в несколько раз быстрее чем сборщик мусора в .NET.


    Ну ничего. Значит я привёл объяснение бесплатности. В случе чего буду приводить цитату на свой пост.
    Я — свихнувшееся сознание Джо.
    Re[9]: Копирование чисел
    От: Socrat Россия  
    Дата: 23.06.05 11:13
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    S>>Сравни:

    S>>
    S>>while (*a++ = *b++);
    S>>

    S>>и
    S>>
    S>>LOOP 
    S>>  a[i] := b[j]; 
    S>>  IF b[j] = 0X THEN EXIT END;
    S>>  INC(i); 
    S>>  INC(j)
    S>>END
    S>>


    СГ>Можно еще короче:


    СГ>LOOP a[i] := b[j];

    СГ>IF b[j] # 0X THEN INC(i); INC(j) ELSE EXIT END
    СГ>END

    Что-то не заметил разницы... Разве что в одну строчку написал.

    СГ>А инструкции с побочным эффектом опасны. Кроме того, код while (*a++ = *b++); вообще писать нельзя так как он не проверяет выход за границы и может привести к такой любомой сишной ошибке как переполнение буфера.


    СГ>Надо писать хотя бы так:

    СГ>
    СГ>LOOP
    СГ>  IF (i < LEN(a)) & (j < LEN(b)) THEN
    СГ>    a[i] := b[j];
    СГ>    IF b[j] # 0X THEN INC(i); INC(j) ELSE EXIT END
    СГ>  ELSE EXIT END
    СГ>END
    СГ>


    for (int i=0; i < MAX_LEN && *a++ = *b++; i++);


    или

    for (int i=0; i < MAX_LEN && a [i++] = *b++;);


    СГ>С другой стороны, массивы в Pascal/Modula/Oberon это есть обычные типы значения, так что для полного копирования одного массива в другой можно просто написать a := b. Что касается строк, то для работы с ними есть уже встроенные механизмы.


    В С++ тоже кое-что имеется...
    Re[11]: Синтаксический оверхед
    От: jazzer Россия Skype: enerjazzer
    Дата: 23.06.05 11:44
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    J>>А в Обероне эти ассерты насильно впаривает компилятор, даже если они тебе здесь нафиг не нужны


    СГ>Это Вы погорячились. После WHILE или REPEAT их впаривать просто не зачем, математика рулит...


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

    В программировании рулит гибкость.
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[12]: Синтаксический оверхед
    От: jazzer Россия Skype: enerjazzer
    Дата: 23.06.05 11:47
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    J>>Правильно, не надо быть прорицателем, надо книжку почитать.

    J>>В 1979 году у Страуструпа уже была степень Ph.D., защищенная в Кембридже.
    J>>http://www.research.att.com/~bs/bio.html

    J>>В 78-м году он начал работу по использованию идиом Симулы в С.

    J>>И это был "С с классами", а не С++, которым мы пользуемся сейчас.
    J>>Это был даже не С++, каким он был в 83-м.

    СГ>Я и имел в виду Си с классами, который он начал изобретать будучи аспирантом. Название "С++" появилось позже.


    Только вот не название, а язык.
    С++ — это не С с классами, так же как Оберон — не Паскаль.
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[16]: Яркий пример
    От: alexku Россия  
    Дата: 23.06.05 11:49
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>while(true) = LOOP


    Типа глупые сиплюсплюсники сами этого не видят?
    И что, while от этого стал какой-то особенной инструкцией С++? Или смысл LOOP от этого поменялся? Или это как-то влияет на парадигму структурного программирования? Или это очередной тык пальцем в небо? Или что вы хотели этим сказать? Поясните.
    Re[12]: Так Вы определитесь
    От: Amidlokos Россия  
    Дата: 23.06.05 11:50
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    A>> Однако имеет смысл только для одной проверки. Ну двух. А если точек выхода десяток (по найденному, по обнаруженному битому, срочно по переключению мютекса и т.п.)?


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


    Да, Сергей... Видно, что никогда у вас не было необходимости к уже созданному дополнительно привинтить мгновенный фоновый экспорт в excel, а затем возможность быстрой остановки всего процесса, а затем индексацию...

    Кроме того, пример синтетический. Я имею полное право вставлять сколько угодно "если" и прочих "грибов в носу". Равно как и вы. А тот факт, что с каждым следующим "если" код без break-а оказывается не дописан, а переписан, ни о чём хорошем не говорит.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[10]: Синтаксический оверхед
    От: xBlackCat Россия  
    Дата: 23.06.05 11:52
    Оценка:
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Здравствуйте, Сергей Губанов, Вы писали:


    A>>>В этом вашем примере assert(n <= -1) совершенно не имеет смысла, потому что значение n предсказуемо на 100% и всегда будет равно -1.


    СГ>>Это было бы так если бы использовался Modula/Oberon в которых из цикла WHILE нельзя выйти ни каким другим способом. В С# же был выход по break. Поэтому значение n на реальных данных всегда было больше нуля, а не то что больше -1. Ошибку я нашел просто случайно поглядев на исходник, а вовсе не от того что программа упала (она не падала) и я залезши в дебагер стал там чего-то крутить.


    SJA>Ну вот я написал в обероне прогу. Аналог.


    [вырезано]

    SJA>Поскольку пост декремента там нету, то я написал свой. Использовал отличный WHILE, как положено, а лажа — та же....


    О! Молодца! Ату его, ату!

    а если серьёзно — то пример очень даже правильный и демонстрирует, что и на прямом месте можно спотыкнуться, если не осматриваться.
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Rojac &mdash; Rsdn Offline JAva Client
    Анонсы и обсуждение здесь
    Автор: xBlackCat
    Дата: 08.02.10
    Re[11]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 23.06.05 12:01
    Оценка:
    Здравствуйте, xBlackCat, Вы писали:

    BC>а если серьёзно — то пример очень даже правильный и демонстрирует, что и на прямом месте можно спотыкнуться, если не осматриваться.


    Он очень хорошо демонстрирует, что верифицировать императивные языки, в которых есть побочные эффекты при вызове функций почти нельзя (за исключением тривиальных случаев), и Оберон тут ну ничем не лучше ни сей, ни явы, ни шарпа. Другое дело строгие функциональные языки, но не уверен, что Сергей хотябы представление о них имеет нормальное...
    Re[17]: Яркий пример
    От: Трурль  
    Дата: 23.06.05 12:16
    Оценка:
    Здравствуйте, Пацак, Вы писали:


    П>Просто замечательно. То есть любой while-цикл, который требует прерывания по break в обероне автоматически превращается в LOOP.

    Цикл, который требует прерывания по break не является while-циклом по определению.
    Re[18]: Яркий пример
    От: Пацак Россия  
    Дата: 23.06.05 12:21
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    П>>Просто замечательно. То есть любой while-цикл, который требует прерывания по break в обероне автоматически превращается в LOOP.

    Т>Цикл, который требует прерывания по break не является while-циклом по определению.

    Угу, то есть поскипанная тобой часть верна — если изначально break не планировалось, а затем возникла такая необходимость — программисту придется переписывать весь цикл, меняя его с while на loop? Да, удобство языка прям из всех щелей прет.
    Ку...
    Re[18]: Яркий пример
    От: Privalov  
    Дата: 23.06.05 12:28
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    Т>Цикл, который требует прерывания по break не является while-циклом по определению.


    Нельзя ли посмотреть на это определение, попутно автора узнать?
    Re[19]: Яркий пример
    От: Пацак Россия  
    Дата: 23.06.05 12:31
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    Т>>Цикл, который требует прерывания по break не является while-циклом по определению.

    П>Угу, то есть поскипанная тобой часть верна — если изначально break не планировалось, а затем возникла такая необходимость — программисту придется переписывать весь цикл, меняя его с while на loop? Да, удобство языка прям из всех щелей прет.

    Дополнение: особенно это удобно если, как предлагал Сергей, программист где-то в дальнейшем коде заложился на то, что условие завершения while-цикла будет ложным. Чрезвычайно познавательно будет потом искать причину, по которой программа начнет падать там, где раньше не падала.
    Ку...
    Re[19]: While Loop - Definition
    От: Privalov  
    Дата: 23.06.05 12:32
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>Чтобы я делал без Wikipadia и запроса define: в Гугле?

    [...]

    Великолепно! Вот только если бы г-н Трурль сам нашел его... Да видно не судьба.
    Re[9]: Синтаксический оверхед
    От: alexku Россия  
    Дата: 23.06.05 12:35
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    A>>В этом вашем примере assert(n <= -1) совершенно не имеет смысла, потому что значение n предсказуемо на 100% и всегда будет равно -1.


    СГ>Это было бы так если бы использовался Modula/Oberon в которых из цикла WHILE нельзя выйти ни каким другим способом. В С# же был выход по break. Поэтому значение n на реальных данных всегда было больше нуля, а не то что больше -1. Ошибку я нашел просто случайно поглядев на исходник, а вовсе не от того что программа упала (она не падала) и я залезши в дебагер стал там чего-то крутить.


    Что ж, поправлюсь.


    СГ>n = 100;
    СГ>while(n-- > 0)
    СГ>{
            //Здесь есть какая-то проверка и выход и никаких манипуляций с n
    СГ>}
    СГ>assert(n <= -1);


    Вы всегда получите на выходе из цикла значение n-1, при этом n никогда не станет меньше -1 (см. assert). Диапазон значений на выходе — -1...99. И никогда никаких "иногда". Результат предсказуем на 100%. Получили некорректное значение n — получили некорректный результат, даже если он "иногда" совпадает с необходимым. И Modula/Oberon здесь ни при чём. Знание языка рулит. А этим примером вы показали его незнание.
    Re[12]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 12:55
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    Т>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>
    СГ>>myfunc();           (* НЕЛЬЗЯ! Возвращаемое значение не используется!!! *)
    СГ>>

    Т>Таки, монжно.

    У меня BlackBox ругается: "procedure call of a function".
    Re[26]: СИНТАКСИС
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 12:59
    Оценка:
    Здравствуйте, Курилка, Вы писали:

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


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


    M>>Там еще Modula-3 мелькает иногда


    К>А она ещё Виртовская? Я уже в этих клонах запутался, если честно, кто там что и куда — хрен разберёшь, зато синтаксис офигенный


    Modula 2 Виртовская, а третья модула нет (это как Turbo Pascal — тоже не Виртовский).
    Re[15]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 13:05
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    P>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Ни кто не кричал что в Обероне не существует слова BEGIN.



    P>

    P>Где-то в середине 1970-тых годов был открыт реально необходимый и достаточный синтаксис (Modula-2, 1979 год)
    P>[...]

    P>Обратите внимание: слово "BEGIN" отсутствует вообще во всех инструкциях — оно лишнее.


    Во всех инструкциях типа: IF, WHILE, REPEAT, CASE, WITH, и т.д. что очевидно из контекста обсуждения (модули и процедуры не обсуждались вообще).
    Re[12]: Синтаксический оверхед
    От: Трурль  
    Дата: 23.06.05 13:11
    Оценка:
    Здравствуйте, Курилка, Вы писали:

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


    Оберон в этом плане лучше сей, хотя функциональные языки еще лучше.
    Re[19]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 13:14
    Оценка:
    Здравствуйте, alexku, Вы писали:

    A>Здравствуйте, Сергей Губанов, Вы писали:



    СГ>>Вы путаете процедуру с процедурой-функцией.


    A>А вы путаете божий дар с яичницей.


    A>
    A>IF oneItem # anotherItem THEN
    A>


    A>Где в этом коде гарантия того, что я сравниваю значения переменных а не адреса процедур?


    Процедурные переменные — тоже переменные, так что Вам нет ни какого дела до того, что внутри себя они содержат на самом деле адреса процедур. Думайте о них как просто о переменных значениями которых являются процедуры. Это повышает уровень абстракции. Так что тут IF oneItem # anotherItem THEN сравниваются две самых обычных переменных, и всёго-то.
    Re[20]: While Loop - Definition
    От: Трурль  
    Дата: 23.06.05 13:17
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    P>Великолепно! Вот только если бы г-н Трурль сам нашел его... Да видно не судьба.

    А самому никак?
    Re[19]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 13:19
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    П>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Речь шла не о служебном слове BEGIN, а о самостоятельном блоке BEGIN ... END, которого в Обероне нет.


    П>И чем же пара BEGIN ... END в объявлении процедуры менее самостоятельна, чем в цикле или условном операторе? Тем, что Вирт не догадался написать что-нибудь типа PROCEDURE .... BEGPROC ... END? Или наоборот IF condition BEGIN END?


    На этот вопрос ответ уже был дан: http://www.rsdn.ru/Forum/Message.aspx?mid=1216614&amp;only=1
    Автор: Сергей Губанов
    Дата: 10.06.05


    2) В, принципе, вместо слов IF, END и т.д. можно изобрести совершенно другие слова. Можно изобрести какую угодно другую семантику, но сам, так сказать, синтаксический скелет:

    * идентификатор * идентификатор * идентификатор * идентификатор * идентификатор ...


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


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

    Есть язык "Глагол", так там все служебные слова пишутся по русски, но синтаксис Оберонистый.
    Re[25]: Синтаксический оверхед
    От: Privalov  
    Дата: 23.06.05 13:32
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    Т>Плохие у вас в школе учителя были.


    С обоснованием опять проблемы?
    Re[14]: Очередной яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 13:35
    Оценка:
    Здравствуйте, qwertyuiop, Вы писали:

    Q>P.S. Значти, если в вашем знаменитом WHILE a DO x END у процедуры x будут аргументы, то надо написать скобки? Так же как и в С? Но тогда это повлияет на подсчет оверхеда! Вы не находите, что вы здесь слегка лукавите, придумывая выгодные вам примеры?


    А я это не скрываю. Любому ясно что мое сообщение является гиперболизацией. Я об этом уже писал, но из-за того что сообщений слишком много, Вы, видимо, то мое сообщение не прочитали.
    Re[21]: While Loop - Definition
    От: Privalov  
    Дата: 23.06.05 13:37
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    Т>А самому никак?


    А разве я сказал "по определению"? Я всего лишь попросил обосновать Ваше утверждение. Естественно, могу, как смог Mamut чуть раньше. Но с каких дел я должен обосновывать утверждения оппонентов?
    Re[10]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 13:41
    Оценка:
    Здравствуйте, alexku, Вы писали:

    A> А этим примером вы показали его незнание.


    Вообще-то, этим примером я показал порочность побочного эффекта от того что выражение имеет значение, а также от того что из while можно выйти по break. Они провоцируют совершение глупых ошибок. Если бы этого не было, то глупые ошибки бы не провоцировались.
    Re[19]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 13:59
    Оценка:
    Здравствуйте, Mamut, Вы писали:


    СГ>>Уверяю Вас это было видно сразу же по тексту программы. Ведь активация процедуры-функции всегда помечается скобками () даже если список параметров пуст.


    M>Это сыграло мое неполное знание синтаксиса языка. В общем, такое же, как и у вас, когда вы сетовали на оператор "-->" в C++


    Я сетовал на то что легко совершить глупую ошибку благодаря побочному эффекту. Языки же я знаю.
    Re[11]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 23.06.05 14:11
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    A>> А этим примером вы показали его незнание.


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


    Сергей, рядом уже было показано, что на Обероне можно получить такиеже грабли как и в любом другом императивном языке, т.к. мы не можем гарантировать отсутствие побочных эффектов. И не надо превозносить Оберон — до функциональных языков ему как отсюда до Сатурна. Провоцирует Оберон провоцирует, может на пару процентов меньше чем си или, скажем, шарп, не более...
    Re[19]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 14:12
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>То есть максимум, что отсюда получается, это designator := designator [([ExpList])]. В другой документации об этом ничего, вроде, не говорится.


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


    M>Кстати, вопрос, как можно понять следующую фразу из Programming in Oberon:

    M>

    M>Only one value, however, can be returned as the result of a function. This value, moreover, cannot be of a structured type.


    Процедура-функция может возвращать переменные только базовых типов, но не может возвращать переменные сложных типов определенных пользователем (хотя указатели на них возвращать может, ведь указатель — тоже базовый тип). До Delphi 3 (или 4?) в Object Pascal было аналогичное ограничение.

    M>Кстати, я, по-моему, только сейчас понял ту идею, которую хотел донести Сергей, когда он начинал говорить об оверхеде. А именно то, что он указал гораздо позже. А именно:

    M>
    M>* a * b * c * d * e
    M>

    M>где, исключая пробелы, "*" — это служебные лексемы.
    M>А ведь действительно, с именно таким синтаксисом сложнее допустить ошибку при написании программы:

    Вот теперь и умереть не страшно, хоть до одного человека что-то донес...
    Re[11]: Короче
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 14:17
    Оценка:
    Здравствуйте, Socrat, Вы писали:

    S>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Кстати, можно усовершенствовать:


    СГ>>LOOP a[i] := b[j];

    СГ>> IF b[j] # 0X THEN INC(i); INC(j) ELSE EXIT END
    СГ>>END

    СГ>>так короче.


    S>А так можно?


    S>LOOP a[i] := b[j];

    S> IF b[j] = 0X THEN EXIT END; INC(i); INC(j)
    S>END

    А так было в оригинале. Только условие b[j] # 0X наиболее вероятное чем b[j] = 0X, поэтому я его перенес в главную ветвь. Вообще же такой код ошибочен семантически, так как может привести к выходу за границы массива. Нужно делать проверку на это.
    Re[10]: Копирование чисел
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 14:26
    Оценка:
    Здравствуйте, Socrat, Вы писали:

    СГ>>LOOP a[i] := b[j];

    СГ>>IF b[j] # 0X THEN INC(i); INC(j) ELSE EXIT END
    СГ>>END

    S>Что-то не заметил разницы... Разве что в одну строчку написал.


    b[j] = 0X менее вероятно чем b[j] # 0X, поэтому я поменял главную и второстепенную ветвь в IF.
    Re[9]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 23.06.05 14:29
    Оценка:
    Здравствуйте, qwertyuiop, Вы писали:

    Q>В конце концов в Обероне ввели LOOP именно потому, что бывают случаи, когда без этого не обойтись (в отличие, например, от goto, без которого обойтись можно, но путем усложнения программы).


    А Вы считайте, что наоборот. Изначально был LOOP, а потом ввели WHILE и REPEAT по просьбам трудящихся.
    Re[11]: Синтаксический оверхед
    От: merlin.fs Украина  
    Дата: 23.06.05 14:36
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Как уже говорилось (кажется выше) — за все приходится платить.
    Хочешь меньше совершать ошибок — пожалуйста, но при этом потеряешь гибкость и универсальность, которая есть у С/С++. Чего только шаблоны стОят. Ох, как мне их не хватает в делфях.

    Честно говоря, не очень понимаю этот спор... Пишу на делфях, но если задача требует скорости то перехожу (или делаю вставки) asm. И мне будет все равно, какой оверхед у asma

    ps как уже сказал не очень понимаю этот спор, но много узнал полезного
    Re[23]: While Loop - Definition
    От: Privalov  
    Дата: 23.06.05 14:38
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>Хых. Мне статус эксперта по Гуглю
    Автор: Дмитрий Димандт aka Mamut
    Дата: 19.03.05
    обязывает


    Читал.
    Re[2]: Неприятность
    От: Mamut Швеция http://dmitriid.com
    Дата: 23.06.05 14:50
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Советую прочитать конечное сообщение каждой подветки. Их набегает прилично (порядка 40 запросто), но потом можно отследить дискуссию. У меня похожая беда просто позавчера случилась


    dmitriid.comGitHubLinkedIn
    Re[10]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 23.06.05 14:50
    Оценка:
    Q>>В конце концов в Обероне ввели LOOP именно потому, что бывают случаи, когда без этого не обойтись (в отличие, например, от goto, без которого обойтись можно, но путем усложнения программы).

    СГ>А Вы считайте, что наоборот. Изначально был LOOP, а потом ввели WHILE и REPEAT по просьбам трудящихся.


    Вряд ли. LOOP не соотвествует классической идее структурного программирования, которой придерживается Оберон


    dmitriid.comGitHubLinkedIn
    Re[11]: Копирование чисел
    От: Socrat Россия  
    Дата: 23.06.05 14:55
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    СГ>>>LOOP a[i] := b[j];

    СГ>>>IF b[j] # 0X THEN INC(i); INC(j) ELSE EXIT END
    СГ>>>END

    S>>Что-то не заметил разницы... Разве что в одну строчку написал.


    СГ>b[j] = 0X менее вероятно чем b[j] # 0X, поэтому я поменял главную и второстепенную ветвь в IF.


    И что это дает? Понятней не стало...
    Re[4]: Синтаксический оверхед
    От: Трурль  
    Дата: 23.06.05 14:56
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Ответ _ОЧЕНЬ_ простой: "потому что С-подобный синтаксис удобнее", — все,

    C>вот и весь ответ.

    А вот, что говорил Учитель.

    In addition to Simula67, my favorite language at the time was Algol68. I think that "Algol68 with Classes" would have been a better language than "C with Classes." However, it would have been stillborn.

    Re[20]: Яркий пример
    От: Amidlokos Россия  
    Дата: 23.06.05 17:30
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    A>>Где в этом коде гарантия того, что я сравниваю значения переменных а не адреса процедур?


    СГ>Процедурные переменные — тоже переменные, так что Вам нет ни какого дела до того, что внутри себя они содержат на самом деле адреса процедур. Думайте о них как просто о переменных значениями которых являются процедуры. Это повышает уровень абстракции. Так что тут IF oneItem # anotherItem THEN сравниваются две самых обычных переменных, и всёго-то.


    Во-первых, это ответ не совсем по замечанию.

    Во-вторых, а как у этих "переменных" с присвоением rvalue?
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[21]: Яркий пример
    От: achp  
    Дата: 23.06.05 17:34
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:

    A>Во-вторых, а как у этих "переменных" с присвоением rvalue?


    Ну, чего придрались? Очевидно же, что это то же самое (или примерно), что указатели на функции в Си/Си++. Только название другое...
    Re[15]: Очередной яркий пример
    От: Amidlokos Россия  
    Дата: 23.06.05 17:52
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    Q>>P.S. Значти, если в вашем знаменитом WHILE a DO x END у процедуры x будут аргументы, то надо написать скобки? Так же как и в С? Но тогда это повлияет на подсчет оверхеда! Вы не находите, что вы здесь слегка лукавите, придумывая выгодные вам примеры?


    СГ>А я это не скрываю. Любому ясно что мое сообщение является гиперболизацией. Я об этом уже писал, но из-за того что сообщений слишком много, Вы, видимо, то мое сообщение не прочитали.


    И почему-то очень обиделись, когда вам привели гораздо больше встречных шиперболизированных примеров...
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[10]: Синтаксический оверхед
    От: Lepsik Гондурас https://www.kirdyk.club/
    Дата: 23.06.05 21:35
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>По Дискавери одной из самых сложных программ, работающих сегодня, назвали программу автоматического входа шаттла в атмосферу. С начала входа до -4 км до посадки люди к управлению даже не прикасаются. А там, как никак — управляемое падение (планированием это сложно назвать) на запредельных скоростях (13-25 Мах, что ли).


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

    догадаешся на чем написана ?
    Re[11]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 23.06.05 21:50
    Оценка:
    Здравствуйте, Lepsik, Вы писали:

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

    L>догадаешся на чем написана ?

    Тока не скажи, что на обероне.
    Ку...
    Re[2]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 24.06.05 03:58
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>Сколько лишней писанины! Одно и то же имя приходится писать три раза. И сколько мест для потенциальной ошибки! Вспомните, сколько раз в жизни вы натыкались на ошибку вроде следующей:

    F>...

    Пару раз в самом начале...

    F>Код вроде

    F>...
    F>нагляднее выражает, что же мы имели в виду.

    А использование std::for_each с контейнерами (массивами) делает эту наглядность ещё большей, ещё точнее описывает вышу цель и устраняет ошибки связанные с неверной индексацией... Это так к слову...

    F>И еще к слову. Я все понимаю, я знаю все аргументы в пользу того, чтобы начинать индексацию массивов с 0, а не с 1. И все же я считаю это неестественным!


    А я считаю неестественным, что одно и то же условие завершения цикла в цикле с предпроверкой записывается как условие, а в цикле с постпроверкой как его отрицание... Извините, но этот момент IMHO более неестественный и сопряжён с гораздо более сложно уловимыми ошибками. Если вы ошибётесь в индексации, есть вероятность, что схлопочите Access violation, а если при преобразовании цикла с предпроверкой в цикл с постпроверкой, вы неверно инвертируете условие, то программа может даже и будет работать... вот только ракета мимо марса пролетит и никто вам об этом не скажет... и никакая защищённая среда Оберона от этого вас не спасёт!
    Кстати, если вам кажется неестественной индексация с 0, напишите свой контейнер, где она будет с 1 или с любого указанного вами числа — благо сделать это несложно и этот контейнер будет практически не отличим от стандартных.
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[3]: Синтаксический оверхед
    От: faulx  
    Дата: 24.06.05 04:30
    Оценка:
    Здравствуйте, Mr. None, Вы писали:


    MN>А использование std::for_each с контейнерами (массивами) делает эту наглядность ещё большей, ещё точнее описывает вышу цель и устраняет ошибки связанные с неверной индексацией... Это так к слову...


    И что теперь, выбросить for из языка? К тому же for_each без лямбд и локальных функций несколько ущербен и требует либо опять-таки писанины, либо библиотек вроде boost. Кстати, как поизящнее выразить суммирование элементов матрицы через стандартные алгоритмы? Только прошу иметь в виду, что выражение вроде a[i][j] (или корректнее в общем случае писать a(i,j)) может быть обращением к вычисляемому элементу. Боюсь, избыточность будет еще больше, чем для варианта с циклами.

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


    При чем здесь предпроверки и постпроверки? Я про них, кажется, ничего не говорил. Конечно, в языках программирования, и не только в них, есть много нееестественного. Но существование одних неестественностей не делает естественными другие неестественности.

    MN>Если вы ошибётесь в индексации, есть вероятность, что схлопочите Access violation, а если при преобразовании цикла с предпроверкой в цикл с постпроверкой, вы неверно инвертируете условие, то программа может даже и будет работать... вот только ракета мимо марса пролетит и никто вам об этом не скажет... и никакая защищённая среда Оберона от этого вас не спасёт!


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

    MN>Кстати, если вам кажется неестественной индексация с 0, напишите свой контейнер, где она будет с 1 или с любого указанного вами числа — благо сделать это несложно и этот контейнер будет практически не отличим от стандартных.


    Это само собой, что можно. Написать свой vector, свой string, что там еще? Что там общественность думает по поводу написания собственных контейнеров? В действительности программист стоит перед неприятным выбором — или переписывать кучу кода, или смирится с неестественной индексацией. Выбор разумного программиста известен, но тем печальнее.
    Re[2]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 24.06.05 04:46
    Оценка:
    Здравствуйте, faulx, Вы писали:

    FF>Код вроде


    F>
    F>for i := 1 to n
    F>     for j := 1 to m
    F>        sum = sum + a[i][j]
    F>


    F>нагляднее выражает, что же мы имели в виду.


    Нагляднее-то нагляднее, но действия этих циклов неэквивалентны. Скажем как в паскалевский for вместить это:
    for (int i = 0; i < n; i += calculate_current_increment())

    Я не говорю, что сишный for "правильнее" паскалиного, но приобретая что-то в одном месте — мы неизбежно теряем в другом. Сишный for получил гибкость, потеряв при этом в лаконичности и безопасности. Те, кому это критично — вполне могут юзать итераторы.
    К слову: в питоне пошли еще дальше, превратив цикл for в "чистый" итератор, работающий над некоторой коллекцией. То есть там, где в C++ и обероне мы имеем

    FOR i := 1 to 10 DO 
    .....
        i := 1; {O-ooops! Совсем забыли, что переменная уже используется в цикле. Вечный цикл однако!}
    END


    в питоне будем иметь

    for i in range(10): 
        ...
        i = 1 #Переменная i меняется только до конца текущей итерации, 
                #на следующей это значение будет переписано следующим значением из коллекции range(10)


    F>И еще к слову. Я все понимаю, я знаю все аргументы в пользу того, чтобы начинать индексацию массивов с 0, а не с 1. И все же я считаю это неестественным!


    Это дело привычки.
    Ку...
    Re[3]: Синтаксический оверхед
    От: faulx  
    Дата: 24.06.05 05:04
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    П>Нагляднее-то нагляднее, но действия этих циклов неэквивалентны. Скажем как в паскалевский for вместить это:

    П>
    П>for (int i = 0; i < n; i += calculate_current_increment())
    П>


    А вот для понимания подобного "навороченного" for-а приходится вспоминать, что for — это только синтаксический сахар над while и переводить в уме код из for-вида в while-вид. Твой пример — еще один из самых простых, и то, не кажется ли странным, что в коде вида

    for (int i = 0; i < n; i += calculate_current_increment())
    {
      // Много строчек кода
      ...
      ...
      ...
    }


    функция calculate_current_increment(), помещенная ближе к началу длинного блока кода внутри цикла, вызывается на самом деле в его конце!

    Вкратце сказанное можно выразить так: для сложных случаев надо использовать while. Статистических данных у меня нет, но мне кажется, что простые циклы for встречаются гораздо чаще сложных случаев.

    П> Я не говорю, что сишный for "правильнее" паскалиного, но приобретая что-то в одном месте — мы неизбежно теряем в другом. Сишный for получил гибкость, потеряв при этом в лаконичности и безопасности. Те, кому это критично — вполне могут юзать итераторы.


    Или while. Кстати, какие итераторы в C?

    П>К слову: в питоне пошли еще дальше, превратив цикл for в "чистый" итератор, работающий над некоторой коллекцией. То есть там, где в C++ и обероне мы имеем


    П>
    П>FOR i := 1 to 10 DO 
    П>.....
    П>    i := 1; {O-ooops! Совсем забыли, что переменная уже используется в цикле. Вечный цикл однако!}
    П>END
    П>


    Кстати, смутно вспоминаю, что в Паскале внутри цикла нельзя менять переменную цикла. Если это так, то вечного цикла не будет — компилятор не даст.

    П>в питоне будем иметь


    П>
    П>for i in range(10): 
    П>    ...
    П>    i = 1 #Переменная i меняется только до конца текущей итерации, 
    П>            #на следующей это значение будет переписано следующим значением из коллекции range(10)
    П>


    А круче всех — лисповский loop.

    F>>И еще к слову. Я все понимаю, я знаю все аргументы в пользу того, чтобы начинать индексацию массивов с 0, а не с 1. И все же я считаю это неестественным!


    П>Это дело привычки.


    Привыкнуть можно к очень многому. Только зачем? Естественно нумеровать вещи с единицы, алгоритмы в книжках (если авторы не испорчены влиянием C) пишутся с нормальной индексацией (с 1), если надо взаимодействовать с пользователем, работать тоже надо с учетом старта с 1. Индексация с 0 — это внутренняя проблема даже не программистов, а скорее компиляторов, и повелась она, по-моему, с C, где была введена для эффективности и для того, чтобы не делать нормальные массивы, а свести их к указателям.

    На самом деле, конечно, деваться некуда, и я давно привык. Просто каждый раз раздражает, когда приходится переводить сделанное на бумаге рассуждение с естественной нумерацией в индексацию от нуля. Каждый раз мозги скрипят.
    Re[3]: Синтаксический оверхед
    От: faulx  
    Дата: 24.06.05 05:23
    Оценка:
    Здравствуйте, qwertyuiop, Вы писали:

    Q>Но при этом:

    Q>1. Переменная цикла должна быть интегрального типа — в C может быть все, что угодно: любая структура, указатель либо вообще может не быть.

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

    Q>2. Она может меняться только на единицу — в С для изменения ты можешь написать любое выражение в том числе с вызовом любых функций.


    Даже в Паскале можно указывать шаг изменения (или это только в Турбо-паскале с потомками?). Но вообще замечание правильное, в Паскаль-синтаксисе места для призвольного изменения переменной цикла практически нет.

    Q>3. Признаком окончания цикла является достижение переменной заданного значения — в С ты можешь написать любое сколь угодно сложное логическое выражение с вызовом любых функций.


    Опять согласен.

    Но! Все это можно прекрасно сделать с помощью цикла while. И зачастую это будет более наглядно. А простой цикл for все же, по-моему, встречается чаще всего. Конечно, в Си Паскалевский for будет неуместен, тем не менее это не отменяет простого факта — в Си в большинстве случаев в цикле for надо писать одно и то же имя переменной три раза.

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


    Интересно, что думают о "гибкости" циклов в Си программисты на Лиспе, где есть вот это?

    Q>Для человека может и естественно с единиуы, но для программиста естественно с нуля.


    Программист — он тоже человек!
    Re[4]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 24.06.05 05:35
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>А вот для понимания подобного "навороченного" for-а приходится вспоминать, что for — это только синтаксический сахар над while и переводить в уме код из for-вида в while-вид. Твой пример — еще один из самых простых, и то, не кажется ли странным, что в коде вида


    F>
    F>for (int i = 0; i < n; i += calculate_current_increment())
    F>{
    F>  // Много строчек кода
    F>}
    F>


    F>функция calculate_current_increment(), помещенная ближе к началу длинного блока кода внутри цикла, вызывается на самом деле в его конце!


    Да нет, не особо. Заголовок for'а — это ж по сути декларация того, каковы условия выполнения цикла. Если он собран в одном месте — его можно окинуть одним взглядом, сразу поняв логику работы цикла. Если будет разнесен часть в начало часть в конец — придется бегать глазами по коду, это не так удобно.

    F>Или while. Кстати, какие итераторы в C?


    Кто запрещает юзать С++? Крайние случаи в виде экзотических платформ в расчет не берем — паскалей там тоже, как правило, не ночевало. А while — ну да, можно, но потеряется наглядность. А если еще и break внутри цикла надо сделать — так в обероне вообще до LOOP докатимся, как выяснилось. Можно конечно это рассматривать как идеологически правильный мегарулез, но как-то не воодушевляет...

    F>Кстати, смутно вспоминаю, что в Паскале внутри цикла нельзя менять переменную цикла. Если это так, то вечного цикла не будет — компилятор не даст.


    Совсем не уверен, но проверить не могу — ни паскаля, ни оберона под рукой нет.

    F>А круче всех — лисповский loop.


    Ну видишь — везде решают по-своему, исходя из того, что было необходимо. Разработчикам С был нужен универсальный инструмент, в котором можно лаконично описать достаточно сложные условия выполнения итераций, они себе сделали вот такой вот for. С паскалиным он имеет мало общего, сравнивать их — довольно некорректное занятие.
    Ку...
    Re[4]: Синтаксический оверхед
    От: qwertyuiop Российская Империя  
    Дата: 24.06.05 05:52
    Оценка:
    F> в Си в большинстве случаев в цикле for надо писать одно и то же имя переменной три раза.

    Так я же говорю: ты научился думать на паскале, поэтому, переводя свои мысли на С тебе приходится писать имя переменной три раза. А если ты научишься думать на С, то возможно переменная цикла тебе и не понадобится:
    for(GeoProxy->Init(); SUCCEEDED(GeoProxy->GetChanInfo(nChan, GPX_SELECTED, &pInfo)); NextChan())


    Q>>Для человека может и естественно с единиуы, но для программиста естественно с нуля.


    F>Программист — он тоже человек!


    Программист — он в первую очередь математик, а в математике первое число — 0!
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[5]: Синтаксический оверхед
    От: faulx  
    Дата: 24.06.05 05:59
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    F>>функция calculate_current_increment(), помещенная ближе к началу длинного блока кода внутри цикла, вызывается на самом деле в его конце!


    П>Да нет, не особо. Заголовок for'а — это ж по сути декларация того, каковы условия выполнения цикла. Если он собран в одном месте — его можно окинуть одним взглядом, сразу поняв логику работы цикла. Если будет разнесен часть в начало часть в конец — придется бегать глазами по коду, это не так удобно.


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

    block_with_overview(on_enter(); at_exit())
    {
       f();
    }


    Исполняется в порядке:

    on_enter();
    f();
    at_exit();


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

    Кстати, если задуматься, этот пример:

    F>for (int i = 0; i < n; i += calculate_current_increment())
    F>{
    F>  // Много строчек кода
    F>}


    довольно абстрактный. Ведь, наверное, calculate_current_increment() вызывается не просто так, а туда передаются какие-то параметры. И скорее всего они возникают где-то в середине блока цикла. И писать приходится как-то так:

    for (int i = 0; i < n; )
    {
      // Много строчек кода
      int j = ...
      i += calculate_current_increment(j);
    }


    П>Кто запрещает юзать С++? Крайние случаи в виде экзотических платформ в расчет не берем — паскалей там тоже, как правило, не ночевало.


    Речь не про конкретный язык, а про синтаксис, а он у циклов в C и C++ одинаковый. А поскольку, несмотря на существование итераторов и стандартных алгоритмов, цикл for в C++ существует и, по-видимому, широко используется, проблема его синтаксической избыточности (долой слово "оверхэд"!) остается.

    П>А while — ну да, можно, но потеряется наглядность. А если еще и break внутри цикла надо сделать — так в обероне вообще до LOOP докатимся, как выяснилось. Можно конечно это рассматривать как идеологически правильный мегарулез, но как-то не воодушевляет...


    Про Оберон я не говорил.

    F>>Кстати, смутно вспоминаю, что в Паскале внутри цикла нельзя менять переменную цикла. Если это так, то вечного цикла не будет — компилятор не даст.


    П>Совсем не уверен, но проверить не могу — ни паскаля, ни оберона под рукой нет.


    Посмотрел в интернете, кажется, Паскаль действительно не запрещает. Позор! Интересно, как с этим в Аде и Обероне?

    F>>А круче всех — лисповский loop.


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


    Смотря по каким критериям. Можно долго философствовать на тему корректности и некорректности сравнений, но факт остается фактом — для простых циклов типа for в Паскалевском синтаксисе надо писать имя переменной один раз, а в Сишном — три. Достичь гибкости Си и экономности Паскаля в этом конкретном вопросе — вполне в человеческих силах, чему подтверждение Лисповский loop.
    Re[5]: Синтаксический оверхед
    От: faulx  
    Дата: 24.06.05 06:12
    Оценка:
    Здравствуйте, qwertyuiop, Вы писали:

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

    Q>
    Q>for(GeoProxy->Init(); SUCCEEDED(GeoProxy->GetChanInfo(nChan, GPX_SELECTED, &pInfo)); NextChan())
    Q>


    Переменная GeoProxy пишется два раза (и, кажется, один раз пропущен). Разницы нет.

    Q>Программист — он в первую очередь математик, а в математике первое число — 0!


    Математик — тоже человек. Понятия "первого числа" в математике нет. Само слово "первый" подразумевает единицу.
    Re[19]: Яркий пример
    От: Трурль  
    Дата: 24.06.05 06:13
    Оценка:
    Здравствуйте, alexku, Вы писали:


    A>
    A>IF oneItem # anotherItem THEN
    A>


    A>Где в этом коде гарантия того, что я сравниваю значения переменных а не адреса процедур?


    a+b

    Где в этом коде гарантия того, никакие файлы не удаляются?
    Re[7]: Синтаксический оверхед
    От: faulx  
    Дата: 24.06.05 06:16
    Оценка:
    Здравствуйте, qwertyuiop, Вы писали:

    Q>А как быть, если цикл выглядит примерно так:

    Q>
    Q>for (int i = 0; i < n; )
    Q>{
    Q>  // Много строчек кода
    Q>  int j = ...
    Q>  i += calculate_current_increment(j);
    Q>  continue;
    Q>  // Еще много строчек кода
    Q>  j = ...
    Q>  i += calculate_current_increment(j);
    Q>  continue;
    Q>  // И здесь много строчек кода
    Q>  j = ...
    Q>  i += calculate_current_increment(j);
    Q>  continue;
    Q>  // ...
    Q>}
    Q>


    Q>И так перед каждым continue?


    int i = 0; // Пока забудем про область видимости i
    while (i < n)
    {
      // Много строчек кода
      int j = ...
      i += calculate_current_increment(j);
      continue;
      // Еще много строчек кода  [q]на которые мы никогда не попадем, если не используем goto[/q]
      j = ...
      i += calculate_current_increment(j);
      continue;
      // И здесь много строчек кода [q]на которые мы никогда не попадем, если не используем еще один goto[/q]
      j = ...
      i += calculate_current_increment(j);
    
      continue;
      // ...
    }


    А что, это неочевидно?
    Re[8]: Синтаксический оверхед
    От: Аноним  
    Дата: 24.06.05 06:26
    Оценка:
    Q>>И так перед каждым continue?

    F>
    F>int i = 0; // Пока забудем про область видимости i
    F>while (i < n)
    F>{
    F>  // Много строчек кода
    F>  int j = ...
    F>  i += calculate_current_increment(j);
    F>  continue;
    F>  // Еще много строчек кода  [q]на которые мы никогда не попадем, если не используем goto[/q]
    F>

    Опять придираемся? Или ты доказываешь, что оператор continue не нужен?
      j = ...
      if(cond)
        {
        i += calculate_current_increment(j);
        continue;
        }
    }

    так понятнее?
    Re[9]: Синтаксический оверхед
    От: faulx  
    Дата: 24.06.05 06:39
    Оценка:
    Здравствуйте, Аноним, Вы писали:

    Q>>>И так перед каждым continue?


    F>>
    F>>int i = 0; // Пока забудем про область видимости i
    F>>while (i < n)
    F>>{
    F>>  // Много строчек кода
    F>>  int j = ...
    F>>  i += calculate_current_increment(j);
    F>>  continue;
    F>>  // Еще много строчек кода  [q]на которые мы никогда не попадем, если не используем goto[/q]
    F>>

    А>Опять придираемся? Или ты доказываешь, что оператор continue не нужен?

    Да я понял, что имелось в виду, поэтому не стал удалять код и все-таки расписал в while.

    А>
    А>  j = ...
    А>  if(cond)
    А>    {
    А>    i += calculate_current_increment(j);
    А>    continue;
    А>    }
    А>}
    А>

    А>так понятнее?

    Я сразу понял. Но цикл while останется таким же. Прошу альтернативу с for. Замена

    int i = 0;
    while (i < n)


    на

    for (int i = 0; i < n;)


    не дает почти ничего, кроме локальности переменной i, да и это неверно для чистого Си и для Visual C++ 6.0
    Re[6]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 24.06.05 06:41
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>Посмотрел в интернете, кажется, Паскаль действительно не запрещает. Позор! Интересно, как с этим в Аде и Обероне?


    Оберон позволяет.
    Я — свихнувшееся сознание Джо.
    Re[11]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 24.06.05 06:44
    Оценка:
    M>>По Дискавери одной из самых сложных программ, работающих сегодня, назвали программу автоматического входа шаттла в атмосферу. С начала входа до -4 км до посадки люди к управлению даже не прикасаются. А там, как никак — управляемое падение (планированием это сложно назвать) на запредельных скоростях (13-25 Мах, что ли).

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


    L>догадаешся на чем написана ?


    Где-то здесь на форме пробегало сообщеие, что это был вообще како-то свой язык. Какой-нибудь Автокод Инжинера?


    dmitriid.comGitHubLinkedIn
    Re[5]: Синтаксический оверхед
    От: Трурль  
    Дата: 24.06.05 07:10
    Оценка:
    Здравствуйте, qwertyuiop, Вы писали:

    F>>Программист — он тоже человек!


    Q>Программист — он в первую очередь математик, а в математике первое число — 0!

    Первое — 1!!!
    Re[2]: Синтаксический оверхед
    От: Amidlokos Россия  
    Дата: 24.06.05 07:16
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>
    F>for i := 1 to n
    F>     for j := 1 to m
    F>        sum = sum + a[i][j]
    F>


    F>нагляднее выражает, что же мы имели в виду.


    Ага, особенно если мы имели в виду цикл с шагом 2

    Скажу только, что из всего Си-подобного семейства я больше всего восхищён реализацией цикла for. И сколько ни пишу, всё никак на него не нарадуюсь.

    F>И еще к слову. Я все понимаю, я знаю все аргументы в пользу того, чтобы начинать индексацию массивов с 0, а не с 1. И все же я считаю это неестественным!


    Жаль огорчать, но в большинстве (ИМХО, из личного опыта) практических задач удобнее индексация с 0. При работе с массивами часто требуется величина именно смещения.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[2]: FOR
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 24.06.05 07:20
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F> Это, конечно, цикл for.


    Дело в том, что в Обероне (1987) цикла FOR нет вообще (вспомните: циклы бывают всего трех типов... и FOR-а среди них нет).

    Под "давлением общественности", по "массовым просьбам трудящихся" или по каким-то иным не известным нам причинам в Обероне 2 (1992) цикл FOR всё-таки появился.

    Но он есть самый настоящий синтаксический сахар:

    Оператор

       FOR v := beg TO end BY step DO statements END

    эквивалентен следующему
       temp := end; v := beg;
       IF step > 0 THEN
          WHILE v <= temp DO statements; v := v + step END
       ELSE
          WHILE v >= temp DO statements; v := v + step END
       END

    Re[3]: Синтаксический оверхед
    От: faulx  
    Дата: 24.06.05 07:31
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:

    F>>
    F>>for i := 1 to n
    F>>     for j := 1 to m
    F>>        sum = sum + a[i][j]
    F>>


    F>>нагляднее выражает, что же мы имели в виду.


    A>Ага, особенно если мы имели в виду цикл с шагом 2


    В исходном Сишном коде был цикл с шагом один. Но шутку я понял.

    A>Скажу только, что из всего Си-подобного семейства я больше всего восхищён реализацией цикла for. И сколько ни пишу, всё никак на него не нарадуюсь.


    Что такого особенного именно в реализации? Идея — да, красивая. Как и многое в Си. Но на практике натыкаться на ошибки вроде

    for (int i = 0; i < n; ++i)
      for (int j = 0; j < m; ++j)


    надоедает. Конечно, все это обходится. Мне в моем Емаксе не приходится вводить имя переменной три раза — у меня на этот случае есть шаблончик.

    A>Жаль огорчать, но в большинстве (ИМХО, из личного опыта) практических задач удобнее индексация с 0. При работе с массивами часто требуется величина именно смещения.


    С этим можно поспорить. Может, удобство проистекает именно из привычки?
    Re[12]: Синтаксический оверхед
    От: Трурль  
    Дата: 24.06.05 07:32
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>Где-то здесь на форме пробегало сообщеие, что это был вообще како-то свой язык. Какой-нибудь Автокод Инжинера?

    Слышал, там использовали Дракон, язык на основе блок-схем.
    Re[4]: Синтаксический оверхед
    От: Amidlokos Россия  
    Дата: 24.06.05 07:39
    Оценка:
    Здравствуйте, faulx, Вы писали:

    A>>Скажу только, что из всего Си-подобного семейства я больше всего восхищён реализацией цикла for. И сколько ни пишу, всё никак на него не нарадуюсь.


    F>Что такого особенного именно в реализации? Идея — да, красивая. Как и многое в Си. Но на практике натыкаться на ошибки вроде


    F>
    F>for (int i = 0; i < n; ++i)
    F>  for (int j = 0; j < m; ++j)
    F>


    Где ошибка?

    F>Мне в моем Емаксе не приходится вводить имя переменной три раза — у меня на этот случае есть шаблончик.


    Ну вот и выход нашёлся

    A>>Жаль огорчать, но в большинстве (ИМХО, из личного опыта) практических задач удобнее индексация с 0. При работе с массивами часто требуется величина именно смещения.


    F>С этим можно поспорить. Может, удобство проистекает именно из привычки?


    Нет. Во всяком случае, не думаю. При индексации с 1 в любом случае пришлось бы явно вычитать эту единицу для расчётов (например, расчёта смещения на n блоков в потоке). То, насколько органично чаще всего ложится 0 в задачу, позволяет не сомневаться в его уместности.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[5]: Синтаксический оверхед
    От: faulx  
    Дата: 24.06.05 07:40
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:

    F>>Даже в Паскале можно указывать шаг изменения (или это только в Турбо-паскале с потомками?).


    A>Вона как? Код в студию!


    Может, и ошибся, 10 лет не писал на Паскале. Но я имел в виду не конкретно язык Паскаль, а Паскалеобразный синтаксис (причем только для цикла for). Кстати, судя по этому сообщению
    Автор: Сергей Губанов
    Дата: 24.06.05
    , в пресловутом Обероне шаг цикла можно указывать.

    A>Как я помню, шаг там выбирается между 1 и -1 (соответственно, to и downto). И всё.


    Да-да-да, что-то припоминаю. А для других шагов там, кажется, целочисленно делили верхнюю границу на величину шага. Давно все это было...

    A>Да. Но не юзер, а профессионал.


    A>Простому человеку тоже понятнее в граммах, но ювелиры измеряют почему-то в каратах


    Может, на футы с милями перейдем? Что нам эти "юзерские" километры?
    Re[5]: Синтаксический оверхед
    От: faulx  
    Дата: 24.06.05 07:49
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:

    F>>
    F>>for (int i = 0; i < n; ++i)
    F>>  for (int j = 0; j < m; ++j)
    F>>


    A>Где ошибка?


    Блин, а мне еще советовали больше программировать на Си (куда уж больше!). Уже автоматически исправляю. Я имел в виду, конечно, код из моего исходного сообщения
    Автор: faulx
    Дата: 24.06.05
    :

    for (int i = 0; i < n; ++i)
      for (int j = 0; j < m; ++i)


    F>>Мне в моем Емаксе не приходится вводить имя переменной три раза — у меня на этот случае есть шаблончик.


    A>Ну вот и выход нашёлся


    Костыль.

    A>Нет. Во всяком случае, не думаю. При индексации с 1 в любом случае пришлось бы явно вычитать эту единицу для расчётов (например, расчёта смещения на n блоков в потоке). То, насколько органично чаще всего ложится 0 в задачу, позволяет не сомневаться в его уместности.


    Может, в этом и разница между массиво-подобными структурами и потоко-подобными (термины выдумал только что и сам)? Скажем, работать с матрицами удобнее при индексации с 1.
    Re[6]: Синтаксический оверхед
    От: Amidlokos Россия  
    Дата: 24.06.05 07:51
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>Да-да-да, что-то припоминаю. А для других шагов там, кажется, целочисленно делили верхнюю границу на величину шага. Давно все это было...


    Ну, в общем, ручками считали. Что не есть удобство

    Кстати, сишные for-ы позволяют в зависимости от условий крутиться как вперёд, так и назад:

    int step = (condition)? 1 : -1;
    
    for (int i = start; (i < count && i >= 0); i += step)
    {
        blah_blah_blah(i);
    }


    Пусть один раз в жизни, но мне такое встречалось В паскале пришлось бы через while писать. Но это всё скорее просто к слову...

    A>>Да. Но не юзер, а профессионал.


    A>>Простому человеку тоже понятнее в граммах, но ювелиры измеряют почему-то в каратах


    F>Может, на футы с милями перейдем? Что нам эти "юзерские" километры?


    Ээээ, нет Не путайте национальные системы измерений и профессиональные Футы с милями тоже "юзерские".
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[3]: FOR
    От: faulx  
    Дата: 24.06.05 07:52
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Дело в том, что в Обероне (1987) цикла FOR нет вообще (вспомните: циклы бывают всего трех типов... и FOR-а среди них нет).


    СГ>Под "давлением общественности", по "массовым просьбам трудящихся" или по каким-то иным не известным нам причинам в Обероне 2 (1992) цикл FOR всё-таки появился.


    Любопытно было бы выслушать ваше мнение по поводу Лисповского мега-цикла.
    Re[7]: Синтаксический оверхед
    От: faulx  
    Дата: 24.06.05 07:55
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:

    A>Ээээ, нет Не путайте национальные системы измерений и профессиональные Футы с милями тоже "юзерские".


    А какие же профессиональные единицы измерения длины? Кабельтовы с теми же милями, как у моряков? Или мы, как программисты, считаем, что в одном километре 1024 метра?
    Re[4]: FOR
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 24.06.05 07:57
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Дело в том, что в Обероне (1987) цикла FOR нет вообще (вспомните: циклы бывают всего трех типов... и FOR-а среди них нет).


    СГ>>Под "давлением общественности", по "массовым просьбам трудящихся" или по каким-то иным не известным нам причинам в Обероне 2 (1992) цикл FOR всё-таки появился.


    F>Любопытно было бы выслушать ваше мнение по поводу Лисповского мега-цикла.


    Да ну, ты что, Оберон — же вершина совершенства, соответственно круче его ничего не может быть по определению, какие там лиспы, функциональные языки — ересь это всё, не гоже адептам правильной веры это трогать даже
    Re[8]: Синтаксический оверхед
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 24.06.05 07:59
    Оценка:
    Здравствуйте, faulx, Вы писали:

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


    A>>Ээээ, нет Не путайте национальные системы измерений и профессиональные Футы с милями тоже "юзерские".


    F>А какие же профессиональные единицы измерения длины? Кабельтовы с теми же милями, как у моряков? Или мы, как программисты, считаем, что в одном километре 1024 метра?


    Ясен перец, а метр делится на 1024 миллиметра...
    Re[6]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 24.06.05 08:00
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>Посмотрел в интернете, кажется, Паскаль действительно не запрещает. Позор! Интересно, как с этим в Аде и Обероне?


    В Дельфи (начиная с какой-то версии) запрещает (компилятор ругается — переменная цикла всегда размещается в регистре процессора и, вообще говоря даже не обязана сохранятся потом в память (после завершения цикла ее значение НЕ ОПРЕДЕЛЕНО), об этом даже много спорили на форумах когда выяснялось, что дельфийский for работает значительно быстрее чем сишный for для целых чисел (ведь сишный for обязан сохранять значение переменной-счетчика из регистра обратно в оперативную память на каждой итерации, а это долго), лично однажды проверял), а в Обероне 2 FOR — это сахар над WHILE — запрещать нечего. В Ада — понятия не имею.
    Re[5]: FOR
    От: faulx  
    Дата: 24.06.05 08:10
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    СГ>>>Дело в том, что в Обероне (1987) цикла FOR нет вообще (вспомните: циклы бывают всего трех типов... и FOR-а среди них нет).


    СГ>>>Под "давлением общественности", по "массовым просьбам трудящихся" или по каким-то иным не известным нам причинам в Обероне 2 (1992) цикл FOR всё-таки появился.


    F>>Любопытно было бы выслушать ваше мнение по поводу Лисповского мега-цикла.


    К>Да ну, ты что, Оберон — же вершина совершенства, соответственно круче его ничего не может быть по определению, какие там лиспы, функциональные языки — ересь это всё, не гоже адептам правильной веры это трогать даже


    Жаль будет, если он промолчит. Мне было бы действительно интересно услышать его мнение. Дело в том, что Лисповский loop — это пункт ожесточенных споров в среде самих программистов на Лиспе.

    Кстати, если кто не в курсе. В Лиспе loop со всеми своими наворотами — не часть языка, а всего лишь макрос из стандартной библиотеки. Если бы Оберон имел такие же возможности по работе с макросами, как Лисп, никакого "давления общественности" не возниколо бы, и не пришлось бы менять язык — синтаксический сахар, преобразующий for в while, любой желающий мог бы реализовать самостоятельно.
    Re[16]: Яркий пример
    От: Cyberax Марс  
    Дата: 24.06.05 08:17
    Оценка:
    Сергей Губанов wrote:

    > while(true) = LOOP


    Так и думал, что это скажете...

    Изменим на "while(game_state==running_main_loop)"

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[6]: FOR
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 24.06.05 08:23
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>Кстати, если кто не в курсе. В Лиспе loop со всеми своими наворотами — не часть языка, а всего лишь макрос из стандартной библиотеки. Если бы Оберон имел такие же возможности по работе с макросами, как Лисп, никакого "давления общественности" не возниколо бы, и не пришлось бы менять язык — синтаксический сахар, преобразующий for в while, любой желающий мог бы реализовать самостоятельно.


    В курсе конечно, кстати вроде бы как loop — одна из частей (не единственная) лиспа вызывающая споры среди самих лисперов, т.е. одни говорят — в loop сила, другие — не очень лисповский синтаксис, не совсем ложится на лисповские программы. Но в лиспе всегда есть выбор — используй всё, что хочешь, а если есть свои идеи — придумывай свой синт. сахар, благо макросы дают огромные возможности.
    Re[6]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 24.06.05 08:28
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>
    F>block_with_overview(on_enter(); at_exit())
    F>{
    F>   f();
    F>}
    F>


    F>Исполняется в порядке:


    F>
    F>on_enter();
    F>f();
    F>at_exit();
    F>


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


    Ну что ж — такой блок можно представить (в известном приближении конечно) как некий метод с двума callback'ами, вызываемыми в начале и в конце соответственно. Довольно часто практикуемое решение вроде.

    F>Ведь, наверное, calculate_current_increment() вызывается не просто так, а туда передаются какие-то параметры.


    Ну почему же... Он может быть методом некоего static — объекта, например. Или просто состояние текущего объекта меняется в цикле и calculate_current_increment() это учитывает, давая поправку после каждой итерации.

    F>Речь не про конкретный язык, а про синтаксис, а он у циклов в C и C++ одинаковый. А поскольку, несмотря на существование итераторов и стандартных алгоритмов, цикл for в C++ существует и, по-видимому, широко используется, проблема его синтаксической избыточности (долой слово "оверхэд"!) остается.


    Тем не менее итераторы никто пользовать не запрещает. И если человек пользуется не ими, а обычным циклом со счетчиком — то наверное он знает, что делает. Иначе это уже проблема программиста, а не языка.
    Ку...
    Re[7]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 24.06.05 08:34
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    Давайте, вы когда говорите ерунду, будете ставить смайлики ? А то неокрепшие умы могут и поверить....

    Итак цикл.
    int _tmain(int argc, _TCHAR* argv[])
    {
        for(int i=0;i<10;i++)
        {
            printf("%d\n", i);
        }
        return 0;
    }


    Код.
    _main    PROC NEAR                    ; COMDAT
    
    ; 8    : {
    
        push    esi
    
    ; 9    :     for(int i=0;i<10;i++)
    
        xor    esi, esi
    $L66482:
    
    ; 10   :     {
    ; 11   :         printf("%d\n", i);
    
        push    esi
        push    OFFSET FLAT:??_C@_03PMGGPEJJ@?$CFd?6?$AA@
        call    _printf
        add    esp, 8
        inc    esi
        cmp    esi, 10                    ; 0000000aH
        jl    SHORT $L66482
    
    ; 12   :     }
    ; 13   :     return 0;
    
        xor    eax, eax
        pop    esi
    
    ; 14   : }
    
        ret    0
    _main    ENDP


    i это esi. Теперь ткните меня в строку, где оно сохраняется в память ?

    СГ>а в Обероне 2 FOR — это сахар над WHILE — запрещать нечего. В Ада — понятия не имею.


    Не только в Ада, не только ....
    Я — свихнувшееся сознание Джо.
    Re[7]: Синтаксический оверхед
    От: faulx  
    Дата: 24.06.05 08:39
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    П>Ну что ж — такой блок можно представить (в известном приближении конечно) как некий метод с двума callback'ами, вызываемыми в начале и в конце соответственно. Довольно часто практикуемое решение вроде.


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

    F>>Ведь, наверное, calculate_current_increment() вызывается не просто так, а туда передаются какие-то параметры.


    П>Ну почему же... Он может быть методом некоего static — объекта, например. Или просто состояние текущего объекта меняется в цикле и calculate_current_increment() это учитывает, давая поправку после каждой итерации.


    Это все понятно. Вопрос в том, какой случай более распространен.

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


    Речь, наверное, все-таки не про итераторы, а про стандартные алгоритмы. В C++ их использовать неудобно по причине отсутствия родных лямбд и локальных функций (Про boost я знаю.) Но! Раз цикл есть, почему не обсудить его. Да и не всегда стандартные алгоритмы удобны. Скажем, с матрицами гораздо естественнее работать по индексам.
    Re[7]: Синтаксический оверхед
    От: merlin.fs Украина  
    Дата: 24.06.05 08:39
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:

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


    A>Кстати, сишные for-ы позволяют в зависимости от условий крутиться как вперёд, так и назад:


    A>
    A>int step = (condition)? 1 : -1;
    
    A>for (int i = start; (i < count && i >= 0); i += step)
    A>{
    A>    blah_blah_blah(i);
    A>} 
    A>


    A>Пусть один раз в жизни, но мне такое встречалось В паскале пришлось бы через while писать. Но это всё скорее просто к слову...


    Не знаю как кто, но я если в делфях и использую for, то или для какого-то заполнения (типа тестов) или для обхода массива (то есть: где статические данные и нужна скорость).
    Во втором случае: (типа такого)
    for i := 0 to count - 1 do
      arr[i] := _чегото_там_;

    (если включена оптимизация) скорее всего скомпилится код, в котором этот цикл будет идти в обратную сторону.
    Но это, тоже так к слову

    ИМХО для таких циклов (как в Вашем примере) лучше пользоваться while/repeat until, и при рефакторинге легче будет.

    PS. конечно это может у меня уже привычка от паскаля
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[2]: Идеологически правильный мегарулез
    От: Пацак Россия  
    Дата: 24.06.05 08:50
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Конечно, если вложенные циклы, тоже LOOP-ные, то описанный тут механизм работать не будет (EXIT выведет только на конец ближайшего LOOP-а).


    ... то есть пример снова чисто синтетический, зависящий от кучи условностей и встречающийся на практике исключительно редко. Я, например, не помню ни одного случая когда мне приходилось покидать три (!!!) вложенных цикла как-то иначе, нежели чем через except или return. И уж тем более ни разу не приходилось задумываться лупные они или не лупные.
    Ку...
    Re[7]: Синтаксический оверхед
    От: Трурль  
    Дата: 24.06.05 09:42
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:

    A>Трурль, а вы-то куда на своих наезжать вылезли? Напоминаю, в Обероне массив тоже начинается с нуля
    Автор: Sergey J. A.
    Дата: 24.06.05

    Что поделааешь. Амикус Оберон сед магик амикус веритас.
    Re[8]: Синтаксический оверхед
    От: Трурль  
    Дата: 24.06.05 09:48
    Оценка:
    Здравствуйте, faulx, Вы писали:


    F>Или мы, как программисты, считаем, что в одном километре 1024 метра?

    Как программисты, мы должны использовать кибиметры.
    Re[3]: Идеологически правильный мегарулез
    От: Пацак Россия  
    Дата: 24.06.05 10:18
    Оценка:
    Здравствуйте, Hobot Bobot, Вы писали:

    HB>По-моему о таком надо молчать и не признаваться...

    HB>А то только что рассказывали что из while может быть ровно один выход и вот на тебе...
    HB>За такие решения вообще убивать надо немедленно. Вот понадобится один из вложенных while на loop переделать, например, и привет...

    Не-е-е-е-е-е-е, стоп!!! ИМХО нас морочат.
    Я чот не пойму. Не так давно СГ убеждал всех, что EXIT из while вывести не может и что компилитор не даст соорудить такую инструкцию и вот — на тебе! Этак я тогда из любого while могу то же самое сделать:

    LOOP
        WHILE (1=1) DO 
             IF ... THEN EXIT END;
        END
        EXIT;
    END


    2СГ: так пропустит компилятор такую конструкцию или не пропустит? Позволяет писать EXIT из WHILE или не позволяет?
    Ку...
    Re[20]: Яркий пример
    От: Cyberax Марс  
    Дата: 24.06.05 10:43
    Оценка:
    Трурль wrote:

    >

    >A>IF oneItem # anotherItem THEN
    >A>
    >
    >
    > A>Где в этом коде гарантия того, что я сравниваю значения переменных а
    > не адреса процедур?
    >
    >a+b
    >
    > Где в этом коде гарантия того, никакие файлы не удаляются?

    А где гарантия того, что при
    IF oneItem # anotherItem THEN

    Не происходит исключение, из-за того, что инлайновая ассемблерная
    вставка в Обероне изменила код функции проверки равенства строк на код
    форматирования винчестера?

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[8]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 24.06.05 10:45
    Оценка:
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Давайте, вы когда говорите ерунду, будете ставить смайлики ? А то неокрепшие умы могут и поверить....


    Вы определили i внутри for, а надо было определить ее снаружи так как в Delphi, иначе смысл сравнения отсутствует. Почему сишный for медленнее дельфийского я уже объяснил: 1) в Delphi значение переменной цикла for не определено после его завершения, 2) значение переменной цикла запрещено самому менять. И вообще, по данному вопросу есть громадные обсуждения в других форумах. Ссылки, к сожалению, дать не могу, не сохранил. Кажется на delphikingdom...
    Re[4]: Идеологически правильный мегарулез
    От: Sergey J. A. Беларусь  
    Дата: 24.06.05 10:54
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Одно дело ....


    СГ>а другое дело ...


    Так значит, мало того, что правило "один вход-один выход" работает не для всех циклов, но ещё и не всегда для остальных ?
    Вам ещё не кажется, что Оберон это просто какой-то уродец ?
    Я — свихнувшееся сознание Джо.
    Re[9]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 24.06.05 11:04
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Sergey J. A., Вы писали:


    SJA>>Давайте, вы когда говорите ерунду, будете ставить смайлики ? А то неокрепшие умы могут и поверить....


    СГ>Вы определили i внутри for, а надо было определить ее снаружи так как в Delphi, иначе смысл сравнения отсутствует. Почему сишный for медленнее дельфийского я уже объяснил: 1) в Delphi значение переменной цикла for не определено после его завершения, 2) значение переменной цикла запрещено самому менять. И вообще, по данному вопросу есть громадные обсуждения в других форумах. Ссылки, к сожалению, дать не могу, не сохранил. Кажется на delphikingdom...


    Я же просил — смайлики ставить !

    #include <stdio.h>
    int f()
    {
        int i;
        for(i=0;i<10;i++)
        {
            printf("%d\n", i);
        }
        return 0;
    }


    _f    PROC NEAR                    ; COMDAT
    
    ; 3    : {
    
        push    esi
    
    ; 4    :     int i;
    ; 5    :     for(i=0;i<10;i++)
    
        xor    esi, esi
    $L863:
    
    ; 6    :     {
    ; 7    :         printf("%d\n", i);
    
        push    esi
        push    OFFSET FLAT:??_C@_03PMGGPEJJ@?$CFd?6?$AA@
        call    _printf
        add    esp, 8
        inc    esi
        cmp    esi, 10                    ; 0000000aH
        jl    SHORT $L863
    
    ; 8    :     }
    ; 9    :     return 0;
    
        xor    eax, eax
        pop    esi
    
    ; 10   : }
    
        ret    0
    _f    ENDP

    Какие ещё будут предположения ?

    Теперь я объясню.
    Если в Дельфи нужно значение счётчика после цикла, то нужно ввести доп переменную. А это замедлит цикл, + даст 100% оверхед по переменным !
    Итого: дельфи медленнее работает с циклами, да ещё и даёт 100% оверхед.

    З.Ы. Производительность и оверхед упомянутые в последнем абзаце были расчитан исходя из запатентованной методики Сергея Губанова.
    Я — свихнувшееся сознание Джо.
    Re[3]: Определение циклов
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 24.06.05 11:09
    Оценка:
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Вобщем, на основании этой ветки и доп. источников я вывел:


    Еще раз!!!

    REPEAT искать UNTIL нашел
    REPEAT понимать UNTIL понял
    REPEAT слушать UNTIL услышал
    REPEAT принимать UNTIL принял
    REPEAT делать UNTIL сделал

    По определению цикл REPEAT может завершиться только тогда когда будет выполнено условие завершения. Если цикл не удовлетворяет этому определению, то он не может называться циклом REPEAT

    WHILE можно DO делать всё что можно END
    WHILE нельзя DO ждать END
    WHILE молодой DO танцевать END
    WHILE есть патроны и есть враги DO стрелять END
    WHILE спишь DO видеть сны END

    По определению цикл WHILE может завершиться только тогда когда будет нарушено условие выполнения. Если цикл не удовлетворяет этому определению, то он не может называться циклом WHILE.

    В Си-образных языках, циклы while/do не удовлетворяют этим определениям так как могут быть завершены еще и по break и goto.

    Цикл LOOP ... END либо исполняется вечно, либо завершается выполнением инструкции EXIT. Ни каких других ограничений на него не накладывается.
    Re[10]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 24.06.05 11:13
    Оценка:
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Какие ещё будут предположения ?


    Предлагаю Вам найти тот форум и всех там разбомбить.
    Re[11]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 24.06.05 11:26
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Sergey J. A., Вы писали:


    SJA>>Какие ещё будут предположения ?


    СГ>Предлагаю Вам найти тот форум и всех там разбомбить.


    Какая глупость, считать, что я смогу их разбомбить. Даж если в каждом их них половина вашей брутальности, не один хумор можно будет загадить !

    Вы по существу то отвечать будете ? Или просто выдали на гора то что читали, не удосужившись проверить ?
    Я — свихнувшееся сознание Джо.
    Re[11]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 24.06.05 11:29
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Иначе мы дойдем до маразма.


    К компиляторам-то это как относится?

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

    S> частоиспользуемые переменные до редкоиспользуемых?


    В Дельфи это между прочим официально рекомендуют на полном серьезе (Тейксейра, Пачеко). А откуда компилятору-то знать?
    Re[4]: Определение циклов
    От: Mamut Швеция http://dmitriid.com
    Дата: 24.06.05 11:31
    Оценка:
    СГ>В Си-образных языках, циклы while/do не удовлетворяют этим определениям так как могут быть завершены еще и по break и goto.

    Не соглашусь.
    определения циклов:

    A loop is a sequence of statements which is specified once but which may be carried out several times in succession. The code "inside" the loop (the body of the loop, shown below as xxx) is obeyed a specified number of times, or once for each of a collection of items, or until some condition is met.

    In some languages, such as Scheme, loops are often expressed using tail recursion rather than explicit looping constructs.

    ...

    Condition-controlled loops

    Again, most programming languages have constructions for repeating a loop until some condition changes. Note that some variations place the test at the start of the loop, while others have the test at the end of the loop. In the former case the body may be skipped completely, while in the latter case the body is always obeyed at least once.

    ...
    Early exit from loops

    When using a count-controlled loop to search through a table, you may wish to stop searching as soon as you have found the required item. Some programming languages provide a statement such as break or exit, whose effect is to terminate the current loop immediately and transfer control to the statement immediately following that loop.


    Все. Единственное ограничение, накладываемое на while и for — это необходимость изменения исловия для выхода из цикла. Более того, отсутствие break — это ограничение, накладываемое не на циклы, а на программирование вообще. И называется оно — структурное программирование Дейкстры. Более того:

    By the end of the 20th century, the majority of programmers endorsed structured procedural programming. Some claim that colleagues can understand a structured program more easily, leading to improved reliability and easier maintenance. Attempts to actually measure this have been rare, and there is a suspicion in some circles that the benefits are real but small.

    Towards the end of the 20th century, designers have created new paradigms loosely based on procedural programming that accept the lessons of structured programming but attempt to go beyond this in providing structure for data as well as for program flow.


    И еще более того, помимо структурного программирования есть еще и другие прадигмы — aspect programming, subject programming, post-object programming.

    СГ>Цикл LOOP ... END либо исполняется вечно, либо завершается выполнением инструкции EXIT. Ни каких других ограничений на него не накладывается.


    Зато зачем-то накладывается на другие циклы. А зачем — неизвестно никому, кроме Вирта


    dmitriid.comGitHubLinkedIn
    Re[11]: Синтаксический оверхед
    От: qwertyuiop Российская Империя  
    Дата: 24.06.05 11:33
    Оценка:
    SJA>>Какие ещё будут предположения ?

    СГ>Предлагаю Вам найти тот форум и всех там разбомбить.


    Кажется это конец...
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[21]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 24.06.05 11:34
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M> Просто надор было эту идею сразу нести в массы, а не подсчитывать лексемы Что-то в стиле

    M>

    M>Как мне кажется, написание программ могло бы быть облегчено и, возможно, ускорено, если бы создатели придерживались простого правила — одно пользовательское выражение + одна лексема.

    M>-- И дальше — звездочки, примеры программ и так далее — а то устроили этакое кровавое побоище ---


    Да. Надо было. Лопухнулся я.
    Re[3]: FOR
    От: Mamut Швеция http://dmitriid.com
    Дата: 24.06.05 11:40
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    F>> Это, конечно, цикл for.


    СГ>Дело в том, что в Обероне (1987) цикла FOR нет вообще (вспомните: циклы бывают всего трех типов... и FOR-а среди них нет).


    Ну кто сказал, что их всего три типа? Да еще таких, как в Обероне?
    en.wiki:Control_Structures#Loops:

    Count-controlled loops
    Condition-controlled loops
    Collection-controlled loops
    General iteration
    Infinite loops


    В обероне присутствуют первый, второй и пятый.

    Более того! Читаем Missing control structures:

    In his 1974 article, Donald Knuth identified two situations which were not covered by the control structures listed above, and gave examples of control structures which could handle these situations. Despite their utility, these constructions have not yet found their way into main-stream programming languages.

    Loop with test in the middle
    Multiple early exit/exit from nested loops


    Да-да! Даже в "правильном во всех отношениях Обероне" (с) их нет


    dmitriid.comGitHubLinkedIn
    Re[12]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 24.06.05 11:45
    Оценка:
    Здравствуйте, qwertyuiop, Вы писали:

    SJA>>>Какие ещё будут предположения ?


    СГ>>Предлагаю Вам найти тот форум и всех там разбомбить.


    Q>Кажется это конец...


    Сдают, сдают нервы у Серёги...
    Я — свихнувшееся сознание Джо.
    Re[21]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 24.06.05 11:47
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>А пример аналогичный на Обероне так и останется заигноренным?


    Не вижу смысла, но ладно. Например, что-то вроде такого:
    n = N; 
    IF n > 0 THEN
      LOOP
        ...
        (* здесь может вызываться DEC(n), но не более N раз, поэтому n >= 0 *)
        ...
      END;
      ASSERT(n >= 0);
    
      использование "n"
    
    END

    я уже подзабыл с чего началось...
    Re[12]: Яркий пример
    От: Cyberax Марс  
    Дата: 24.06.05 11:51
    Оценка:
    Сергей Губанов wrote:

    > S>Иначе мы дойдем до маразма.

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

    1. Компилятор может оценить сложность ветки, и соптимизировать учитывая
    эту сложность.
    2. Существет PGO — Profile Guided Optimization. То есть сначала
    программа запускается под профайлером, в котором собирается статистика
    по путям исполнения (и много чему еще), а потом на основании этой
    статистики программа перекомпилируется с оптимизациями.

    > S> частоиспользуемые переменные до редкоиспользуемых?

    > В Дельфи это между прочим официально рекомендуют на полном серьезе
    > (Тейксейра, Пачеко). А откуда компилятору-то знать?

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

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[22]: Яркий пример
    От: xBlackCat Россия  
    Дата: 24.06.05 11:52
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:


    СГ>Не вижу смысла, но ладно. Например, что-то вроде такого:

    СГ>
    СГ>n = N; 
    СГ>IF n > 0 THEN
    СГ>  LOOP
    СГ>    ...
    СГ>    (* здесь может вызываться DEC(n), но не более N раз, поэтому n >= 0 *)
    СГ>    ...
    СГ>  END;
    
    СГ>  ASSERT(n >= 0);
    
    СГ>  использование "n"
    
    СГ>END
    СГ>

    И за какое время выполнится код, выделенный жирным? Не может быть, что за 8 сек! (Или сколько там его выполняет супер быстрая машина?)
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Rojac &mdash; Rsdn Offline JAva Client
    Анонсы и обсуждение здесь
    Автор: xBlackCat
    Дата: 08.02.10
    Re[22]: Яркий пример
    От: Sergey J. A. Беларусь  
    Дата: 24.06.05 11:55
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    К>>А пример аналогичный на Обероне так и останется заигноренным?


    СГ>Не вижу смысла, но ладно. Например, что-то вроде такого:

    СГ>
    СГ>

    СГ>я уже подзабыл с чего началось...

    Я напомню !

    Переписывать ничего не надо.

    Вопрос такой: Вы допустили ошибку и посетовали, что Оберон бы такого не допустил. Я взял да и написал аналог на обероне тут
    Автор: Sergey J. A.
    Дата: 23.06.05
    , и допустил такую-же ошибку. Но "оберонистый оберон" не поправил меня. Вот это пожалста и прокоментируйте.
    Я — свихнувшееся сознание Джо.
    Re[3]: Неприятность
    От: achp  
    Дата: 24.06.05 12:01
    Оценка:
    Здравствуйте, qwertyuiop, Вы писали:

    Q>А может это знак свыше?


    Что, опять Чубайс подгадил?
    Re[11]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 24.06.05 12:15
    Оценка:
    Здравствуйте, Lepsik, Вы писали:

    L>догадаешся на чем написана ?


    А я слышал байку, что там все сосчитали вручную по старинке на бумаге... (надо полагать, что машина лишь пользовалась готовыми ответами)
    Re[5]: Идеологически правильный мегарулез
    От: Пацак Россия  
    Дата: 24.06.05 12:17
    Оценка:
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Я приведу компиляющийся код, иначе Серегй объяснит где у вас ошибка в листинге, и уйдёт с гордо поднятой головой, проигнорировав остальное.

    SJA>Дааа... какая неожиданность. После WHILE i не равно 0 !

    Супер.
    Теория, мой друг, сера, но древо жизни вечно зеленеет. (с)
    Ку...
    Re: Синтаксический оверхед
    От: achp  
    Дата: 24.06.05 12:18
    Оценка:
    Здравствуйте, Сергей Губанов,

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

    Я действительно нахожу, что синтаксис, основанный на отсустствии понятия "составная инструкция", удобнее и практичнее, а именно: он более устойчив к ошибкам, исключает проблему "чей else?" и прочая, и прочая.

    Однако не считаю, что это такой уж важный вопрос. Ценность языка программирования составляется из многих источников, и удобный синтаксис — лишь один из них, и далеко не самый важный. В конце концов, Си-образный синтаксис (Си, Си++, Си-шарп, Ява и другие) хоть и не идеален, но он достаточно удобен для практического применения. В итоге вопросы совместимости по коду — они важнее, чем вопросы совершенствования синтаксиса.
    Re[9]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 24.06.05 12:25
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:


    СГ>Вы определили i внутри for, а надо было определить ее снаружи так как в Delphi, иначе смысл сравнения отсутствует.


    Если неправ, то пусть в меня кинут помидором, но АФАИК по стандарту это совершенно эквивалентные определения, которые обязаны порождать одинаковый код.

    СГ>Почему сишный for медленнее дельфийского я уже объяснил: 1) в Delphi значение переменной цикла for не определено после его завершения, 2) значение переменной цикла запрещено самому менять.


    Не вижу тут поводов для ускорения.
    Ку...
    Re[24]: Яркий пример
    От: Sergey J. A. Беларусь  
    Дата: 24.06.05 12:40
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Sergey J. A., Вы писали:


    SJA>>Вопрос такой: Вы допустили ошибку и посетовали, что Оберон бы такого не допустил. Я взял да и написал аналог на обероне тут
    Автор: Sergey J. A.
    Дата: 23.06.05
    , и допустил такую-же ошибку. Но "оберонистый оберон" не поправил меня. Вот это пожалста и прокоментируйте.


    СГ>Чего я могу сказать. Фигово всё это...


    Даааа. Этим ответом вы меня поставили в тупик
    Я — свихнувшееся сознание Джо.
    Re[4]: Неприятность
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 24.06.05 12:43
    Оценка:
    Здравствуйте, achp, Вы писали:

    A>Что, опять Чубайс подгадил?


    AMD Athlon перегрелся, я думаю.
    Re[10]: Синтаксический оверхед
    От: merlin.fs Украина  
    Дата: 24.06.05 12:44
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    П>Здравствуйте, Сергей Губанов, Вы писали:



    СГ>>Вы определили i внутри for, а надо было определить ее снаружи так как в Delphi, иначе смысл сравнения отсутствует.


    П>Если неправ, то пусть в меня кинут помидором, но АФАИК по стандарту это совершенно эквивалентные определения, которые обязаны порождать одинаковый код.


    СГ>>Почему сишный for медленнее дельфийского я уже объяснил: 1) в Delphi значение переменной цикла for не определено после его завершения, 2) значение переменной цикла запрещено самому менять.


    П>Не вижу тут поводов для ускорения.


    Повод есть, если переменная используется только как счетчик, то делфя создаст приблизительно такой вод код:

        mov edx, _count_
    @@repeat:
        ...
        _чото_делаем_
        ...
        dec edx
        jne repeat
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[5]: Определение циклов
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 24.06.05 12:50
    Оценка:
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Ну, конкчно кроме случаев, когда из REPEAT ... UNTIL можно выйти по EXIT.


    Выход выходу рознь. http://www.rsdn.ru/Forum/Message.aspx?mid=1239021&amp;only=1
    Автор: Сергей Губанов
    Дата: 24.06.05
    Re[6]: Определение циклов
    От: Sergey J. A. Беларусь  
    Дата: 24.06.05 13:03
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Sergey J. A., Вы писали:


    SJA>>Ну, конкчно кроме случаев, когда из REPEAT ... UNTIL можно выйти по EXIT.


    СГ>Выход выходу рознь. http://www.rsdn.ru/Forum/Message.aspx?mid=1239021&amp;only=1
    Автор: Сергей Губанов
    Дата: 24.06.05


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

    http://en.wikipedia.org/wiki/Structured_programming

    1. Jackson Structured Programming, which is based on aligning data structures with program structures,
    2. Dijkstra's structured programming, which is based on splitting programs into sub-sections, each with a single point of entry and of exit,
    3. and a view derived from Dijkstra's which also advocates splitting programs into sub-section with a single point of entry, but is strongly opposed to the concept of a single point of exit.


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

    Скажем просто. Оберон не соответсвует принципам структурного програмирования.
    Я — свихнувшееся сознание Джо.
    Re[9]: Синтаксический оверхед
    От: jazzer Россия Skype: enerjazzer
    Дата: 24.06.05 13:12
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

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

    Q>>Большинство современных компиляторов выдают на такую строчку предупреждение
    S>А большинство совремнных PM заставляют компилять с treat warnings as errors ;)

    Правильно, но они же не знают про прагмы ;)
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[6]: Определение циклов
    От: Mamut Швеция http://dmitriid.com
    Дата: 24.06.05 13:16
    Оценка:
    СГ>>>В Си-образных языках, циклы while/do не удовлетворяют этим определениям так как могут быть завершены еще и по break и goto.

    M>>Не соглашусь.


    СГ>Не соглашусь с несоглашением...




    И все же, свою точку зрения я подтвердил фактами. Ваш ход


    dmitriid.comGitHubLinkedIn
    Re[12]: Синтаксический оверхед
    От: merlin.fs Украина  
    Дата: 24.06.05 13:18
    Оценка:
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Ну, что-ж. Хоть кто-то возразил аргументированно.

    SJA>Однако, вот во что превращается следующий код:

    [skip]

    SJA>
    SJA>_f    PROC NEAR                    ; COMDAT
    
    SJA>; 6    : {
    
    SJA>    push    esi
    
    SJA>; 7    :     int i;
    SJA>; 8    :     for(i=10;i>0;i--)
    
    SJA>    mov    esi, 10                    ; 0000000aH
    SJA>$L863:
    
    SJA>; 9    :         puts("+");
    
    SJA>    push    OFFSET FLAT:??_C@_01MIFGBAGJ@?$CL?$AA@
    SJA>    call    _puts
    SJA>    add    esp, 4
    SJA>    dec    esi
    SJA>    jne    SHORT $L863
    
    SJA>; 10   : 
    SJA>; 11   :     return 0;
    
    SJA>    xor    eax, eax
    SJA>    pop    esi
    
    SJA>; 12   : }
    
    SJA>    ret    0
    SJA>_f    ENDP
    SJA>


    SJA>Как видим — практически один в один.

    Согласен, только почему esi? для счетчиков естественей edx использовать, моя информация наверно устарела
    (давно не изучал эту тему), но на сколько я помню, проц inc/dec с edx, eax, ebx и ecx выполняет быстрее чем esi, edi.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[5]: Неприятность
    От: qwertyuiop Российская Империя  
    Дата: 24.06.05 13:33
    Оценка:
    A>>Что, опять Чубайс подгадил?

    СГ>AMD Athlon перегрелся, я думаю.


    Да нет, просто всевышний намекнул ему, что пора заканчивать эту пустопорожнюю болтовню.
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[10]: Синтаксический оверхед
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 24.06.05 18:27
    Оценка:
    Здравствуйте, jazzer, Вы писали:
    J>Правильно, но они же не знают про прагмы
    Вот как раз знают. Ни разу не встречал такого, чтобы кто-то искал такие прагмы грепом, но в случае необоснованного применения можно нарваться очень и очень тяжело. Потому как намеренная попытка обмануть руководство гораздо хуже, чем банальная некомпетентность.
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[8]: Определение циклов
    От: Mamut Швеция http://dmitriid.com
    Дата: 25.06.05 07:31
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    M>>И все же, свою точку зрения я подтвердил фактами. Ваш ход


    СГ>Я написал:

    СГ>

    СГ>В Си-образных языках, циклы while/do не удовлетворяют этим определениям так как могут быть завершены еще и по break и goto.

    СГ>это так. Ну такие определения я написал. А Вы в ответ: "Не соглашусь." Как можно не согласится с тем что они не удовлетворяют указанным мной определениям?

    Просто в оригинальном сообщении было дано:

    По определению цикл REPEAT может завершиться...
    По определению цикл WHILE может завершиться...


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

    СГ>А на счет тех определений, вот еще информация:


    [skip]

    СГ>То что цикл WHILE не завершится никаким другим способом, кроме как тогда когда будет отмерено не меньше семи раз, гарантирует то, что отрезано будет правильно.


    СГ>Если бы не было таких гарантий, то нельзя было бы так программировать


    Ну дык. Никто не мешает и в С/С++ так же написать. Дело в том, что С не мешает писать "идеально-структурный" код (по Дейкстре), но и не мешает писать и код по "обновленной концепции структурного кода" (пункт третий здесь). И еще многим другим парадигмам программирования он тоже не мешает.

    "структурный Дейкстры"
    int measurement_count = 0;
    while(i != 7)
    {
      i++;
      measure();
    }


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


    dmitriid.comGitHubLinkedIn
    Re[7]: Синтаксический оверхед
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 25.06.05 08:38
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    F>>Посмотрел в интернете, кажется, Паскаль действительно не запрещает. Позор! Интересно, как с этим в Аде и Обероне?


    СГ>В Дельфи (начиная с какой-то версии) запрещает (компилятор ругается — переменная цикла всегда размещается в регистре процессора и, вообще говоря даже не обязана сохранятся потом в память (после завершения цикла ее значение НЕ ОПРЕДЕЛЕНО), об этом даже много спорили на форумах когда выяснялось, что дельфийский for работает значительно быстрее чем сишный for для целых чисел (ведь сишный for обязан сохранять значение переменной-счетчика из регистра обратно в оперативную память на каждой итерации, а это долго), лично однажды проверял), а в Обероне 2 FOR — это сахар над WHILE — запрещать нечего. В Ада — понятия не имею.

    Сергей, ваши представления о компиляторах просто чудовищны.
    Во-первых, Delphi не обязан размещать переменную цикла в регистре. Это очевидный бред. Иначе бы при количество вложенных циклов было ограничено количеством регистров процессора. Даже такой тупой компилятор позволяет некоторую гибкость в назначении регистров.
    Во-вторых, сишный фор никому ничего не обязан. Компилятор не только умеет размещать переменную в регистре; он также умеет разворачивать циклы, выносить константы за цикл, выделять общие подвыражения и еще очень много чего. Более того, большинство синтетических примеров, которые вам удастся придумать, вообще выкинут цикл напрочь. Например вот такой код:
    int n=0;
    for(int i=0; i<5;i++)
    n +=i;
    // дальше некоторое использование n

    Современный компилятор приведет этот код к такому же бинарнику, как и
    int n = 10;
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[8]: А эхо в ответ: мать...мать...мать...
    От: moudrick Россия http://community.moudrick.net/
    Дата: 25.06.05 08:59
    Оценка:
    MN>>Ну продемонстрировали вы числа... И что? Я тоже много чисел знаю...

    СГ>Так продемонстрируйте! Создайте новую ветку в форуме. Покажите числа. Кто знает, может быть народ тоже накинется их обсуждать. А может проигнорирует. Мои числа почему-то не проигноровали, хотя могли бы. Наверное мои числа получились числятее чем обычные.


    Были и числа. Только народ на них реагировал не опровержениями, а положительными высокими оценками. И оценки на числах, опровергающивх Ваши, куда выше, нежели у Ваших первоначальный чисел.

    Сравните хотя бы это
    Автор: Сергей Губанов
    Дата: 22.06.05
    и здесь
    Автор: Сергей Губанов
    Дата: 09.06.05
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[21]: Синтаксический оверхед
    От: Alex Alexandrov США  
    Дата: 25.06.05 12:47
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


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


    СГ>Не английский, а США-совский. И это очень существенное уточнение. Это потому, что мог бы быть русский, если бы произошла мировая революция; или немецкий если бы планы фашистов сбылись; или китайский если бы китайцы завоевалю всю евразию. Или японский, если бы у них у первых появилась ядерная бомба. А так как в холодной войне победили именно США, то и язык по всему миру ихний. Кроме того они и компы с программами для них первее всех расплодили. Аналогично у Java нет преимуществ перед Оберонами кроме как то, что за плечами Java стоит Sun. Аналогично про .NET с Microsoft.


    Всегда думал, что именно английский. Великобритания имела в свое время огромное количество колоний, оттуда язык и начала распространяться.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    It's kind of fun to do the impossible (Walt Disney)
    Re[8]: Синтаксический оверхед
    От: qwertyuiop Российская Империя  
    Дата: 25.06.05 16:30
    Оценка:
    S>Во-вторых, сишный фор никому ничего не обязан. Компилятор не только умеет размещать переменную в регистре; он также умеет разворачивать циклы, выносить константы за цикл, выделять общие подвыражения и еще очень много чего.

    При определенных условиях он может вообще выкинуть переменную цикла. У меня однажды был примерно такой цикл:
    const int indx[] = { 1, 2, 4, 5, 10 };
    for(int i = 0; i < sizeof(indx)/sizeof(indx[i]); ++i)
        {
        process(indx[i]);
        // какая-то обработка...
        }

    Вместо переменной цикла он создал указатель на этот массив и завершал цикл когда он указывал на 10. Очевидно, такое возможно если массив константный (кстати, о пользе константных массивов) и если последнее значение больше нигде в массиве не встречается.
    Я отвечаю за свои слова, а не за то как вы их интерпретируете!
    Re[9]: Синтаксический оверхед
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 25.06.05 19:30
    Оценка:
    Здравствуйте, qwertyuiop, Вы писали:
    Q>Вместо переменной цикла он создал указатель на этот массив и завершал цикл когда он указывал на 10. Очевидно, такое возможно если массив константный (кстати, о пользе константных массивов) и если последнее значение больше нигде в массиве не встречается.
    Очевидно, что для неконстантного массива можно заранее вычислить адрес конца и сравнивать указатель именно с ним. Скорее всего, так и было дело в вашем случае (потому, что сравнение адреса с константой быстрее, чем сравнение значения по адресу с константой).
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[13]: *
    От: Кодт Россия  
    Дата: 25.06.05 21:22
    Оценка:
    Здравствуйте, mister-AK, Вы писали:

    К>>Только не говори, что THEN короче, чем {}


    MA>пожалста — замените на односимвольный терм и будет короче,


    На здоровье: cond() ? ontrue() : onfalse()

    MA>а вообще на сишных фэнов в этом форуме смотреть становиться всё неинтереснее и не интереснее, чем на данную ветку в которой они кусаются и вообще от синтаксических программистов меня уже тошнит аттавизм, мда {}ХЪ


    Не в синтаксисе дело (хотя отдельные участники и пытаются вернуть разговор в это русло).
    Перекуём баги на фичи!
    Re[9]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 26.06.05 18:30
    Оценка:
    Здравствуйте, jazzer, Вы писали:

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


    M>>С++, кстати, тоже начинался с академической разработки. А практики его потом подхватили.

    M>>Ссылку навскидку не нашел, извините.

    J>И не найдешь.

    J>Потому что он создавался именно для облегчения программирования на С (как и С по отношению к асму, кстати).
    J>Цель сугубо практическая.
    J>И обкатывался язык не на теоремах, а в руках действующих программистов на С.

    J>Почитай D&E.

    Моя настольная книга.
    AT&T (где начинал разрабатываться C++), да будет Вам известно — исследовательская лаборатория, стало быть там академическая среда, не так ли?
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[13]: *
    От: Amidlokos Россия  
    Дата: 26.06.05 18:50
    Оценка:
    Здравствуйте, mister-AK, Вы писали:

    MA>пожалста — замените на односимвольный терм и будет короче, а вообще на сишных фэнов в этом форуме смотреть становиться всё неинтереснее и не интереснее, чем на данную ветку в которой они кусаются и вообще от синтаксических программистов меня уже тошнит аттавизм, мда {}ХЪ


    "Мы прочитали ваш пост и приняли решение приобрести такую же траву"
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[2]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 27.06.05 03:56
    Оценка:
    Вот еще избыточность. Почему при динамическом создании объектов надо указывать имя класса два раза? Вот смотрите:

    LongAndMeaningfulClassName *obj = new LongAndMeaningfulClassName(...)


    Да-да-да, я знаю, что obj можно объявить переменной базового класса. А все-таки в большинстве случаев классы совпадают и получается избыточность.

    А теперь насчет неестественностей.

    1. Почему операция, обратная к new, называется delete? Во-первых, эти слова не антонимы, как, скажем, create/destroy, open/close и т.п. Никто, кроме программиста на C++, не догадается, что антонимом к new может служить delete. Во-вторых, почему вообще new — операция? new — это прилагательное, а delete — глагол. Как глагол и прилагательное могут означать противоположные понятия? И как _дейстие_ (создание объекта) можно обозначать прилагательным?

    2. Эта претензия уже не столько к самому языку, сколько к разработчикам библиотек. Почему операцию конкатенации строк обозначают символом `+'? Что у нее общего с операцией сложения? Гораздо меньше, чем, скажем, с умножением. Конкатенация некоммутативна. А в математике принято символом плюса обозначать коммутативные операции. Поэтому даже использование символа `*' для конкатенации было бы естественнее, потому что умножение имеет право быть некоммутативным. А еще лучше было бы сделать отдельный оператор для конкатенации, чтобы, глядя на код

    x = y + z


    не приходилось гадать, складываются ли здесь числа или склеиваются строки.
    Re[10]: Синтаксический оверхед
    От: Аноним  
    Дата: 27.06.05 04:38
    Оценка:
    M>AT&T (где начинал разрабатываться C++), да будет Вам известно — исследовательская лаборатория,

    Разве? Я всегда считал, что American Telephone & Telegraph — сугубо коммерческая организация...
    Re[3]: Синтаксический оверхед - Новая порция
    От: Аноним  
    Дата: 27.06.05 04:44
    Оценка:
    F>
    F>LongAndMeaningfulClassName *obj = new LongAndMeaningfulClassName(...)
    F>


    F>А теперь насчет неестественностей.

    F>1. Почему операция, обратная к new, называется delete?

    Черт, а ведь и правда! Действительно, куда естественней было бы писать:
    old obj;
    Re[27]: Синтаксический оверхед
    От: Privalov  
    Дата: 27.06.05 04:51
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    Т>А разве на этом форуме принято обосновывать? Но специально для Вас.


    С учетом специфики данного форума я не буду подвергать Ваш пост ревизионизму. Отмечу только, что юмор оценил.
    Re[3]: Синтаксический оверхед - Новая порция
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 27.06.05 05:02
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>А теперь насчет неестественностей.


    F>1. Почему операция, обратная к new, называется delete? Во-первых, эти слова не антонимы, как, скажем, create/destroy, open/close и т.п. Никто, кроме программиста на C++, не догадается, что антонимом к new может служить delete. Во-вторых, почему вообще new — операция? new — это прилагательное, а delete — глагол. Как глагол и прилагательное могут означать противоположные понятия? И как _дейстие_ (создание объекта) можно обозначать прилагательным?

    Все очень просто. Дело в том, что new type() — это выражение. Оно возвращает новый объект указанного типа. А delete — это оператор, который ничего не возвращает, т.е. просто инициирует действие. Вот и глагол. По этой логике, воображаемый оператор create type() должен был бы создавать новый объект, но не возвращать ничего
    F>2. Эта претензия уже не столько к самому языку, сколько к разработчикам библиотек. Почему операцию конкатенации строк обозначают символом `+'? Что у нее общего с операцией сложения? Гораздо меньше, чем, скажем, с умножением. Конкатенация некоммутативна. А в математике принято символом плюса обозначать коммутативные операции.
    F>Поэтому даже использование символа `*' для конкатенации было бы естественнее, потому что умножение имеет право быть некоммутативным. А еще лучше было бы сделать отдельный оператор для конкатенации, чтобы, глядя на код
    F>
    F>x = y + z
    F>

    F>не приходилось гадать, складываются ли здесь числа или склеиваются строки.
    В принципе верно. Кстати, в VB конкатенация — это &. Что можно было бы перегрузить для строк. Тем не менее, в программировании традиция использования + для конкатенации имеет достаточно большую историю применения, и особых проблем не вызывает.
    Вообще, перегрузка операторов в плюсах — довольно-таки специфическая штука. Ну вот к примеру — для ввода-вывода используются операторы сдвига. Неожиданно, правда? Однако никто не мучается тем, что операция "сдвинуть поток на 4" не эквивалентна "умножить поток на 16". Поэтому выбор операторов для нематематических классов — дело вкусв.
    Для математики — да, все верно. Стоит сохранять известные тождества:
    (a+b)*c == a*c+b*c
    a+b==b+a
    a*1==1*a==a
    a+0=a
    a*0==0*a==0
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[9]: Определение циклов
    От: Трурль  
    Дата: 27.06.05 06:00
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M> Просто дело в том, что надо уметь работать с тем инструментом, что есть на руках.


    1023  IF I .EQ. 7 GOTO 1024
          I=I+1
          CALL measure
          GOTO 1023
    1024  CONTINUE
    Re[4]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 27.06.05 06:34
    Оценка:
    Здравствуйте, Аноним, Вы писали:

    А>Черт, а ведь и правда! Действительно, куда естественней было бы писать:

    А>
    А>old obj;
    А>


    Кстати, в языке Eiffel конструкция old var есть и обозначает старое значение переменной var, т.е. то, чему она была равна на момент входа в метод. Используется в постусловиях, которые там встроены в язык.
    Re[10]: Определение циклов
    От: Mamut Швеция http://dmitriid.com
    Дата: 27.06.05 06:37
    Оценка:
    Т>
    Т>1023  IF I .EQ. 7 GOTO 1024
    Т>      I=I+1
    Т>      CALL measure
    Т>      GOTO 1023
    Т>1024  CONTINUE
    Т>


    А почему бы и нет?


    dmitriid.comGitHubLinkedIn
    Re[4]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 27.06.05 06:51
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    F>>1. Почему операция, обратная к new, называется delete? Во-первых, эти слова не антонимы, как, скажем, create/destroy, open/close и т.п. Никто, кроме программиста на C++, не догадается, что антонимом к new может служить delete. Во-вторых, почему вообще new — операция? new — это прилагательное, а delete — глагол. Как глагол и прилагательное могут означать противоположные понятия? И как _дейстие_ (создание объекта) можно обозначать прилагательным?

    S>Все очень просто. Дело в том, что new type() — это выражение. Оно возвращает новый объект указанного типа. А delete — это оператор, который ничего не возвращает, т.е. просто инициирует действие. Вот и глагол. По этой логике, воображаемый оператор create type() должен был бы создавать новый объект, но не возвращать ничего

    К сожалению, не могу согласиться. Вызов, например, функции open — это тоже выражение, которое возвращает дескриптор файла. Ничто не мешает "воображаемому оператору create" возвращать новый объект.

    Кстати, теоретически, delete может возвращать значение. Если написать свой распределитель памяти, то при неудачном освобождении (передали не тот указатель) можно сообщить об ошибке, бросив исключение. Исключение — это, в каком-то смысле, тоже возвращаемое значение.

    S>В принципе верно. Кстати, в VB конкатенация — это &. Что можно было бы перегрузить для строк. Тем не менее, в программировании традиция использования + для конкатенации имеет достаточно большую историю применения, и особых проблем не вызывает.


    Привыкнуть можно к очень многому. Однако есть большое число языков, где конкатенация и сложение разделены. И VB не стоит отметать — все-таки язык рассчитан на "нормальных" людей, не "программистов".

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


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

    S>Для математики — да, все верно. Стоит сохранять известные тождества:

    S>
    S>(a+b)*c == a*c+b*c
    S>a+b==b+a
    S>a*1==1*a==a
    S>a+0=a
    S>a*0==0*a==0
    S>


    Давайте посмотрим. Операция конкатенации (обозначим ее через #) удовлетворяет тождествам:

    a # (b # c) == (a # b) # c
    a # "" == "" # a


    Т.е. присутствует ассоциативность и нейтральный элемент. Коммутативности и обратного элемента нет. Знатоки алгебры, как называется такая структура? В любом случае это больше похоже на умножение, чем на сложение.
    Re[5]: Синтаксический оверхед - Новая порция
    От: xBlackCat Россия  
    Дата: 27.06.05 07:07
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>Давайте посмотрим. Операция конкатенации (обозначим ее через #) удовлетворяет тождествам:


    F>
    F>a # (b # c) == (a # b) # c
    F>a # "" == "" # a
    F>


    F>Т.е. присутствует ассоциативность и нейтральный элемент. Коммутативности и обратного элемента нет. Знатоки алгебры, как называется такая структура? В любом случае это больше похоже на умножение, чем на сложение.


    А что, сложение уже не удовлетворяет этим условиям?

    '#' = '+' и "" = 0 — и выражения верны
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Rojac &mdash; Rsdn Offline JAva Client
    Анонсы и обсуждение здесь
    Автор: xBlackCat
    Дата: 08.02.10
    Re[5]: Синтаксический оверхед - Новая порция
    От: Трурль  
    Дата: 27.06.05 07:25
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>Давайте посмотрим. Операция конкатенации (обозначим ее через #) удовлетворяет тождествам:


    F>
    F>a # (b # c) == (a # b) # c
    F>a # "" == "" # a
    F>


    F>Т.е. присутствует ассоциативность и нейтральный элемент. Коммутативности и обратного элемента нет. Знатоки алгебры, как называется такая структура? В любом случае это больше похоже на умножение, чем на сложение.


    Моноид aka "полугруппа с единицей". (N.B. не с нулем)
    Re[6]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 27.06.05 07:31
    Оценка:
    Здравствуйте, xBlackCat, Вы писали:

    F>>
    F>>a # (b # c) == (a # b) # c
    F>>a # "" == "" # a
    F>>


    BC>А что, сложение уже не удовлетворяет этим условиям?


    Сложение-то удовлетворяет, да вот конкатенация не удовлетворяет условиям сложения.

    BC>'#' = '+' и "" = 0 — и выражения верны


    Но a + b == b + a неверно при таком обозначении, а `+' все-таки в математике обозначает коммутативную операцию.
    Re[6]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 27.06.05 07:33
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    F>>
    F>>a # (b # c) == (a # b) # c
    F>>a # "" == "" # a
    F>>


    F>>Т.е. присутствует ассоциативность и нейтральный элемент. Коммутативности и обратного элемента нет. Знатоки алгебры, как называется такая структура? В любом случае это больше похоже на умножение, чем на сложение.


    Т>Моноид aka "полугруппа с единицей". (N.B. не с нулем)


    Всегда в этих названиях путаюсь. Что как минимум полугруппа, я догадался, но "моноид" — этого я уже не помню. Ну тогда вопрос, как знатоку: часто ли в математических книгах операцию в моноиде обозначают символом `+'?
    Re[10]: Определение циклов
    От: Privalov  
    Дата: 27.06.05 08:03
    Оценка:
    Здравствуйте, Трурль, Вы писали:

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


    M>> Просто дело в том, что надо уметь работать с тем инструментом, что есть на руках.


    Т>
    Т>1023  IF I .EQ. 7 GOTO 1024
    Т>      I=I+1
    Т>      CALL measure
    Т>      GOTO 1023
    Т>1024  CONTINUE
    Т>


    Этот цикл пишется так:
          DO 1024 I = 1, 7
          CALL measure
     1024 CONTINUE
    Re[8]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 27.06.05 08:05
    Оценка:
    Здравствуйте, xBlackCat, Вы писали:

    F>>Но a + b == b + a неверно при таком обозначении, а `+' все-таки в математике обозначает коммутативную операцию.


    BC>Как говорил мой преподаватель Математического Анализа: "Вместо этого обозначения операции мы можем поставить любой своё — хоть мягкий знак". И у меня нет причин, чтобы ему не верить


    Он говорит совершенно правильно. Поставить можно что угодно, и компилятору будет все равно. Только человек — не компилятор, и не все обозначения для него равнозначны. Если в каком-нибудь языке программирования операция сложения будет обозначаться символом `-', это проектное решение вызовет справедливые нарекания.
    Re[11]: Определение циклов
    От: Трурль  
    Дата: 27.06.05 08:10
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    P>Этот цикл пишется так:

    P>
    P>      DO 1024 I = 1, 7
    P>      CALL measure
    P> 1024 CONTINUE
    P>

    Это другой цикл. А вдруг I используется в measure?
    Re[7]: Синтаксический оверхед - Новая порция
    От: Трурль  
    Дата: 27.06.05 08:12
    Оценка:
    Здравствуйте, faulx, Вы писали:

    Т>>Моноид aka "полугруппа с единицей". (N.B. не с нулем)


    F>Всегда в этих названиях путаюсь. Что как минимум полугруппа, я догадался, но "моноид" — этого я уже не помню. Ну тогда вопрос, как знатоку: часто ли в математических книгах операцию в моноиде обозначают символом `+'?

    Ни разу не видел.
    Re[9]: Синтаксический оверхед - Новая порция
    От: raskin Россия  
    Дата: 27.06.05 08:37
    Оценка:
    faulx wrote:
    > Здравствуйте, Трурль, Вы писали:
    >
    > F>>Всегда в этих названиях путаюсь. Что как минимум полугруппа, я
    > догадался, но "моноид" — этого я уже не помню. Ну тогда вопрос, как
    > знатоку: часто ли в математических книгах операцию в моноиде обозначают
    > символом `+'?
    > Т>Ни разу не видел.
    >
    > Я так и думал. Итак, строки с операцией конкатенации образуют моноид, а
    > операцию в моноиде не принято обозначать как `+'. Спрашивается, почему
    > для строк должно быть сделано исключение?

    Наиболее принято, я бы сказал, её обозначать символами не из ASCII...
    Поэтому то, что * чуть более (не идеально) корректно, превосходится
    традициями...
    Posted via RSDN NNTP Server 1.9
    Re[8]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 27.06.05 08:43
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>В высшей алгебре вообще достаточно вольно обращаются со знаками операций


    C>Очень часто групповую/моноидную/... операцию пишут как знак плюс в

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

    Вот и мне думается, что операцию конкатенации надо обозначать отдельным символом, а не плюсом. Плюс уже занят сложением, а конкатенация на сложение не похожа.
    Re[9]: Синтаксический оверхед - Новая порция
    От: Cyberax Марс  
    Дата: 27.06.05 08:57
    Оценка:
    faulx wrote:

    > C>Очень часто групповую/моноидную/... операцию пишут как знак плюс в

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

    Так нету в ASCII более подходящих символов. Есть более-менее подходящий
    '&', но он уже занят под логику.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[4]: Синтаксический оверхед - Новая порция
    От: Amidlokos Россия  
    Дата: 27.06.05 09:06
    Оценка:
    Здравствуйте, <Аноним>, Вы писали:

    А>Черт, а ведь и правда! Действительно, куда естественней было бы писать:

    А>
    А>old obj;
    А>


    К слову, после Perl, в котором цикл прерывается словечком last, я лично уже ничему не удивлюсь
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[10]: Синтаксический оверхед - Новая порция
    От: Аноним  
    Дата: 27.06.05 09:11
    Оценка:
    >> Вот и мне думается, что операцию конкатенации надо обозначать
    >> отдельным символом, а не плюсом. Плюс уже занят сложением, а
    >> конкатенация на сложение не похожа.

    C>Так нету в ASCII более подходящих символов.


    В Юникоде есть куча. Например вот:


    Re[10]: Синтаксический оверхед - Новая порция
    От: Amidlokos Россия  
    Дата: 27.06.05 09:16
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>faulx wrote:


    C>Так нету в ASCII более подходящих символов. Есть более-менее подходящий

    C>'&', но он уже занят под логику.

    Ну, в некоторых языках под это дело точку застолбили... PHP, Perl.

    $a = "Make ";
    $b = "love" . " not ";
    $a .= $b . "war";


    Тоже не очень, но уже решение.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[6]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 27.06.05 09:21
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    F>>Кстати, теоретически, delete может возвращать значение. Если написать свой распределитель памяти, то при неудачном освобождении (передали не тот указатель) можно сообщить об ошибке, бросив исключение. Исключение — это, в каком-то смысле, тоже возвращаемое значение.

    S>Не могу с вами согласится. Исключение не является ни в каком смысле возвращаемым значением. Например, как бы мы ни переписывали delete, мы не сможем использовать его в выражении:
    S>
    S>SomeType something = delete pMyObj;
    S>


    Вы трактуете "возвращаемое значение" в конкретном смысле возвращаемого значения какой-либо функции, а я имел в виду нечто более общее — возможность получить тем или иным способом информацию о том, что было результатом выполнения операции delete. Что-то вроде:

    bool my_delete(void *p)
    {
      try
      {
        delete p;
      }
      catch (...)
      {
        return false;
      }
      return true;
    }


    Кстати, то, что delete не имеет возвращаемого значения — это всего лишь волевое решение. Могло бы что-нибудь и возвращаться, и проверяли бы это значение только самые дотошные программисты, из тех, кто проверяет возвращаемое значение printf и close.

    F>>Думаю, большинство современных программистов на C++ мучаются с тем, что операция вывода в поток, оказывается, может означать битовый сдвиг.

    S>Попробуйте спросить это большинство современных программистов на C++. Найдите мне хотя бы одного, испытавшего мучения по этому поводу.

    Надеюсь, было понятно, что я имел в виду, что в случае операции << в C++ в настоящее время еще неизвестно, какое из значений этой операции первичнее (в восприятии программистов) — сдвиг или вывод в поток. Думается, в качестве операции вывода она используется чаще. Да и изучают, вероятно, сначало именно перегруженное значение.

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


    Неужели они не удивяться, если символ `+' будет означать вычитание?

    S>Покажите мне хотя бы одного человека, который ожидал увидеть * для конкатенации строк.


    Если он ничего не ждет от `+', то тем более не ждет и от `*'. Однако, по вашей же логике, это его и не удивит. Впрочем, я не предлагал использовать `*' для конкатенации, я всего лишь сказал (на правах шутки), что это было бы естественнее, чем `+', хотя лучше использовать отдельный оператор.

    S>Покажите мне любой другой перегружаемый оператор, который бы с первого взгляда ассоциировался с конкатенацией.


    Уже указывалось, что в VB используется символ `&'. Тут надо спрашивать англоговорящих граждан. Для нас `&' — это всего лишь еще одна закорючка, но "у них" эту закорючку используют уже давно и она имеет укоренившийся смысл за пределами программирования. В Haskell используется `++', также как и для конкатенации списков, потому что строка там — это список . В OcaML используют `^'. В каком-то еще языке (кажется, в PHP, но, может, и нет) конкатенацию обозначают символом `,' (запятая). Потом еще где-то видел `|'. Итого:

    a + b
    a ++ b
    a & b
    a ^ b
    a , b
    a | b


    Мне лично нравится второй, третий и последний варианты. Второй мне привычнее, но третий, вероятно, лучше во-первых, по приведенным выше соображениям (на правах гипотезы), а во-вторых, он единственный и вариантов (если не считать запятой), в котором оператор выглядит несимметрично, что подчеркивает несимметричность операции конкатенации. С другой стороны, в C++ этот символ уже занят операцией AND. И `++' в бинарную операцию не переопределишь. Пожалуй, в C++ выбор гораздо меньше. С другой стороны, привыкли же к <<. Может, и к `&' привыкли бы. Кстати, еще претензия : почему в C++ нельзя опредить произвольный оператор, как в Haskell, а только предопределенный набор?
    Re[7]: Синтаксический оверхед - Новая порция
    От: Трурль  
    Дата: 27.06.05 09:54
    Оценка:
    Здравствуйте, faulx, Вы писали:
    О, идея!

    a then b
    Re[11]: Синтаксический оверхед - Новая порция
    От: Cyberax Марс  
    Дата: 27.06.05 09:56
    Оценка:
    Amidlokos wrote:

    > C>Так нету в ASCII более подходящих символов. Есть более-менее подходящий

    > C>'&', но он уже занят под логику.
    > Ну, в некоторых языках под это дело точку застолбили... PHP, Perl.
    >
    >$a = "Make ";
    >$b = "love" . " not ";
    >$a .= $b . "war";
    >
    > Тоже не очень, но уже решение.

    Точка в С++ уже используется для доступа к членам объекта и не может
    перегружаться. Больше подошла бы запятая, тем более, что ее можно
    перегрузить
    a=a,b,c;

    Такое можно сделать хоть сейчас.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[12]: Определение циклов
    От: Privalov  
    Дата: 27.06.05 10:00
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    P>>Этот цикл пишется так:

    P>>
    P>>      DO 1024 I = 1, 7
    P>>      CALL measure
    P>> 1024 CONTINUE
    P>>

    Т>Это другой цикл. А вдруг I используется в measure?

    Во-первых, из приведенного фрагмента этого не видно (нет I, помещенной в COMMON-блок). А во-вторых Фортран не накладывает, AFAIR, никаких ограничений на изменение переменной цикла где-то в теле цикла. А если начальное значение I отлично от 1, вычислим его перед входом в цикл и положим в целую переменную.
    Re[7]: Синтаксический оверхед - Новая порция
    От: raskin Россия  
    Дата: 27.06.05 10:12
    Оценка:
    faulx wrote:

    >[мечтания об идеальном обозначении]


    > Кстати, еще претензия : почему в C++ нельзя опредить произвольный

    > оператор, как в Haskell, а только предопределенный набор?

    Потому как парсить легче... И правила расстановки скобок определены раз
    и навсегда.. Хотя с точки зрения "сложного, мощного языка" может и надо
    было оставить полный хаос в этой области.. И
    а=а++ + ++а

    показалось бы цветочками!
    Posted via RSDN NNTP Server 1.9
    Re[12]: Синтаксический оверхед - Новая порция
    От: Кодт Россия  
    Дата: 27.06.05 10:51
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Точка в С++ уже используется для доступа к членам объекта и не может перегружаться. Больше подошла бы запятая, тем более, что ее можно перегрузить


    Можно, но нельзя.
    У запятой есть две общепринятые семантики: во-первых, синтаксис разделения списка параметров, а во-вторых, последовательное выполнение.
    Поэтому
    series = make_series(), x, y, z;

    ещё более-менее приемлемо, а вот с конкатенацией уже будут изумления.
    Кроме всего прочего, встроенный operator, определён для любых типов — поэтому в случае ошибочного использования компилятор не мяукнет.
    А operator+ не определён для голых строк (указатель+указатель). Хотя и это не бесспорно: он определён для пары (указатель+число), поэтому
    "abcde" + 'f'

    будет истолковано превратно.
    Лучше перегрузить что-нибудь неуказательно-арифметическое. Например, %.
    Перекуём баги на фичи!
    Re[8]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 27.06.05 11:01
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Я прекрасно понял, что вы имеете в виду. Но мы-то говорим о совершенно конкретном операторе и выборе термина для него.


    Скорее о выборе названий для парной операции создания/удаления объектов.

    S>Стейтмент

    S>delete a
    S>не имеет никакого возвращаемого значения.

    Это всего лишь волевое решение. Мог бы и иметь. Никакой беды бы не произошло.

    S>Да, он может бросить исключение, или модифицировать глобальную переменную — это неважно. Главное, что этот стейтмент не является выражением. Это чисто императивная конструкция.


    А new что, не императивная? Вполне себе императивная. Как fopen().

    S>Попробуйте представить, что С++ написан на русском языке и сравните:

    S>
    S>Экскаватор * мойЭкскаватор = новый Экскаватор();
    S>...
    S>удалить мойЭкскаватор ;
    S>

    S>с
    S>
    S>Экскаватор * мойЭкскаватор = создать Экскаватор();
    S>...
    S>удалить мойЭкскаватор ;
    S>

    S>Теперь понятно, почему прилагательное лучше подходит?

    Нет. Второй пример лучше. Почему для открытия файла, для создания окна, объекта ядра (мутекс, событие) и проч. прекрасно подходит глагол, а для создания объекта — только прилагательное?

    S>Кстати, в другом контексте подойдет именно глагол:

    S>
    S>Экскаватор * мойЭкскаватор = ФабрикаЭкскаваторов.Создать();
    S>


    В чем различие контекстов? И там и там создается объект. Кстати, new, если его переопределить, может и не создавать _новый_ объект, а вернуть что-нибудь закэшированнное.

    F>>Кстати, то, что delete не имеет возвращаемого значения — это всего лишь волевое решение. Могло бы что-нибудь и возвращаться, и проверяли бы это значение только самые дотошные программисты, из тех, кто проверяет возвращаемое значение printf и close.

    S>Если бы возвращал, то и называться мог по другому

    Не вижу, как из значения или написания слова "delete" следует отсутствие возвращаемого значения.

    F>>Неужели они не удивяться, если символ `+' будет означать вычитание?

    S>Что может означать "вычитание" в контексте строк?

    Почему строк? Я понял вас так, что вы говорили о "нематематическом контексте", к которому, как я понял, относится программирование. Вот ваши слова:

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


    Впрочем, возможно, я вас не так понял. Тем не менее:

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

    F>>Кстати, еще претензия : почему в C++ нельзя опредить произвольный оператор, как в Haskell, а только предопределенный набор?

    S>Об этом хорошо написано у Страуструпа в Design and Evolution.

    Я бросил читать Страуструпа еще в прошлом веке. Впрочем, я верю, что там есть убедительное обоснование, почему этого никак нельзя было сделать. Тем не менее, как пользователь языков программирования, я вижу: в Haskell и ML произвольный оператор определить можно, и никакой трагедии из этого не делают.
    Re[9]: Синтаксический оверхед - Новая порция
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 27.06.05 11:34
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>Это всего лишь волевое решение. Мог бы и иметь. Никакой беды бы не произошло.

    Тогда бы он, возможно, назывался по другому.
    F>Нет. Второй пример лучше.
    Ок. Фраза "Отправь по почте создать документ" ухо не режет? В сравнении с "Отправь по почте новый документ"?
    F>Почему для открытия файла, для создания окна, объекта ядра (мутекс, событие) и проч. прекрасно подходит глагол, а для создания объекта — только прилагательное?
    Гм. А кто сказал, что он прекрасно подходит? Чем создается берклеевский сокет? Учти, что все эти чудесные глаголы жили во времена процедурного программирования. Когда мы открываем файл в стиле nix или winapi, ни о каком создании речь не идет. В OOP мы просим дать нам новый файловый поток.
    F>В чем различие контекстов? И там и там создается объект.
    Ну и что? выражение new Type() читается "новый экземпляр типа Type". В то время как вызов фабрики является командой "создай новый объект".
    F>Кстати, new, если его переопределить, может и не создавать _новый_ объект, а вернуть что-нибудь закэшированнное.
    Вот именно. Он возвращает новый объект. Не обязательно создавая eго.
    F>Не вижу, как из значения или написания слова "delete" следует отсутствие возвращаемого значения.
    F>Впрочем, возможно, я вас не так понял. Тем не менее:
    F> Делается неверное умозаключение. Я очень удивлюсь, если сложение будет обозначаться чем-то, кроме +. Однако, из этого не следует, что все "+" — это сложение. Как правило, мозг программиста не настолько забит математикой, чтобы он фанатично требовал от плюса, не обведенного защитным кружочком, коммутативности во всех ситуациях.
    Ни разу не видел программиста, ожидавшего от "World!" + "Hello," того же результата, что и "Hello," + "World!". Имхо, проблема является целиком надуманной.
    Есть только одна известная мне причина избегать обозначения + для конкатенации — слабая типизация. В VB не стали делать + не от хорошей жизни. Между прочим, там "Hello," + "World!" имеет в точности то же значение, что и в С++. Разница между + и & проявляется при обработке чисел. "5" + "2" вернет "7", тогда как "5" & "2" — "52". В плюсах типизация сильная, неявного приведения строки к числу нет, потому и бояться нечего.
    F>Я бросил читать Страуструпа еще в прошлом веке.
    Напрасно. Если есть желание понять, что и почему в С++, то имеет смысл почитать первоисточники, а не задавать риторические вопросы в темноту .
    F>Тем не менее, как пользователь языков программирования, я вижу: в Haskell и ML произвольный оператор определить можно, и никакой трагедии из этого не делают.
    Зато в Haskell и ML нельзя сделать много чего из С++. Нельзя вот так просто брать и переносить что-то из одного языка в другой.
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[9]: Синтаксический оверхед - Новая порция
    От: Трурль  
    Дата: 27.06.05 11:40
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>Нет. Второй пример лучше. Почему для открытия файла, для создания окна, объекта ядра (мутекс, событие) и проч. прекрасно подходит глагол, а для создания объекта — только прилагательное?


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

    Кстати,

     f:=Files.New();
     f:=Files.Old(fileName);
     t:=Types.This(mod,typeName);
    Re[23]: Яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.06.05 11:41
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    П>Сериозно чтоль?

    П>
    П>PROCEDURE Test*();
    П>VAR  i: INTEGER; END
    П>    {тело процедуры начинается здесь}
    П>......
    П>......
    П>    {тело процедуры заканчивается здесь}
    П>END Test;
    П>

    П>И где здесь необходимость использования BEGIN? Нема таковой, окромя продиктованной желанием величественной виртовской левой пятки.

    Гениальная идея. Только, тогда придется кроме VAR ... END еще сделать TYPE ... END, и еще CONST ... END. Потом впомнить, что процедуры могут быть вложеными и из вложенной процедуры видны локальные константы, переменные, типы и другие вложенные процедуры процедуры-агрегата, вот на этом месте-то и тормознуться...(где писать ее?)

    У меня есть другая идея. Лично я бы вместо слова BEGIN выбрал бы слово CODE — ведь оно обозначает именно начало исполнимого кода, а перед ним была декларация констант, типов, переменных — что не есть исполнимый код.
      PROCEDURE...
        (* декларации констант, типов, переменных и вложенных процедур *)
        CONST ... (* константы *)
    
        TYPE ... (* типы *) 
       
        VAR ...  (* локальные переменные *)
    
        PROCEDURE... (* вложенная процедура *)
        ...
        END
    
      CODE (* вместо слова BEGIN ---> слово CODE *)
        исполнимый код
      END...

    Аналогично для тела инициализации модуля. Вот тогда слово BEGIN исчезло бы вовсе.

    СГ>>Сам по себе блок BEGIN END отсутсвуют напрочь.


    П>Присутствует. В составе описания модулей и процедур. Про то, что "там без него нельзя" петь военных песен не надо — пример выше.


    Блоки # тело. Вот блоки:
      код...
      BEGIN
        код...
        BEGIN
          код...
        END
        код...
      END
      код...
    Re[9]: register
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.06.05 12:01
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>- что компиляторы С умеют выдавать warning на практически все ошибочные ситуации, которые можно только придумать.


    Жаль что фразу "практически все" нельзя поставить перед словом компиляторы.

    Вот совсем недавно закончил курсы повышения квалификации "Проектирование систем на DSP процессорах". Так вот в Code Composer Studio от Texas Instruments такая неприятность случилась:

    Было
    int encode(int sample, struct State &state)
    {
      ...
    }

    я поменял местами аргументы (для красоты — типа в ООП стиле, сначала объект, потом аргументы)
    int Encode(struct State &encoder, int sample)
    {
      ...
    }

    Другие слушатели курсов воспользовались моим кодом (свой писать лень было), но у них почему-то программа не правильно работала. Позвали меня спросить почему у меня работает правильно, а у них на выходе какая-то ерунда. Посмотрел, увидел вызов Encode(sample, &encoder) поменял на Encode(&encoder, sample) заработало. А ведь компилировалось не то что без ошибок, а даже без варнингов! И даже выполнялось (не правильно, но выполнялось же)!!!

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


    Для этого только надо перед переменной написать слово register... Кстати о размещении наиболее используемых переменных в начале списка переменных — так это про Дельфи. Как там на счет оберонных компиляторов с этим дело обстоит я не знаю.
    Re[10]: Синтаксический оверхед - Новая порция
    От: Cyberax Марс  
    Дата: 27.06.05 12:09
    Оценка:
    Трурль wrote:

    > F>Нет. Второй пример лучше. Почему для открытия файла, для создания

    > окна, объекта ядра (мутекс, событие) и проч. прекрасно подходит
    > глагол, а для создания объекта — только прилагательное?
    > Мне кажется, что и для открытия файла, создания окна и т.п. больше
    > подходят прилагательные. А глагол лучще бы смотрелся в контексте
    >
    >Экскаватор * мойЭкскаватор;
    >создать(мойЭкскаватор);
    >
    >
    Не лучше — функция принимает параметр по неконстантной ссылке, а это ПЛОХО.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[11]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.06.05 12:32
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Sergey J. A., Вы писали:


    SJA>>Какие ещё будут предположения ?


    Вспомнил. Там речь шла о C++ Builder 6.0 и Delphi 7.0.
    Re[4]: FOR
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.06.05 12:39
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Кстати говоря, при step=0 в "эквивалентном коде" мы наблюдаем 6-секундную задержку


    step — константа известная на момент компиляции (с нулем просто не скомпилируется).

    А что такое 6-секундная задержка?
    Re[6]: str1 := str2 << str3;
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.06.05 12:50
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Покажите мне любой другой перегружаемый оператор, который бы с первого взгляда ассоциировался с конкатенацией.


    str1 := str2 << str3;
    Re[10]: Определение циклов
    От: Sergey J. A. Беларусь  
    Дата: 27.06.05 12:51
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Sergey J. A., Вы писали:


    SJA>>Оотлично. Ну, раскажите почему try ... finnaly ... end структурная конструкция, а С-шный while — нет.

    SJA>>Подсказка:
    SJA>> throw -> break.
    SJA>>А ?

    СГ>По определению цикла WHILE, которое я дал выше.


    Это вы на что ответили ? почему С-шный while — нет ? Так я спрашивал

    почему try ... finnaly ... end структурная конструкция

    Он ведь он может иметь более одного выхода ?

    Короче говоря. Дайте правила, по которым можно определить — структрная конструкция или нет. Только пожалста не на уровне

    структурное оно и значит структурное


    SJA>>И кстати, почему замечательно структурной try ... finnaly ... end нет в Обероне ?


    СГ>Там исключений нет.


    Да ????? А что будет, если обратится по неверному индексу ? Уж не исключение, ли ?
    Опять же Stack Overflow это что ?
    Я — свихнувшееся сознание Джо.
    Re[3]: Идеологически правильный мегарулез
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.06.05 12:54
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Это даже не синтаксический сахар. Это синтаксический самогон


    За термин спасибо, понравился.

    К>Программа становится офигенно понятной. Уж лучше иметь break с меткой, чтобы явно указывать точку отстрела.


    EXIT дешево и сердито завершает ближайший LOOP. Чего такого-то?
    Re[7]: str1 := str2 << str3;
    От: Cyberax Марс  
    Дата: 27.06.05 13:10
    Оценка:
    Сергей Губанов wrote:

    > S>Покажите мне любой другой перегружаемый оператор, который бы с

    > первого взгляда ассоциировался с конкатенацией.
    > str1 := str2 *<<* str3;

    Совсем не ассоцируется.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[5]: FOR
    От: Cyberax Марс  
    Дата: 27.06.05 13:11
    Оценка:
    Сергей Губанов wrote:

    > К>Кстати говоря, при step=0 в "эквивалентном коде" мы наблюдаем

    > 6-секундную задержку
    > step — константа известная на момент компиляции (с нулем просто не
    > скомпилируется).
    > А что такое 6-секундная задержка?

    "Новые процессоры Intell Pentium 3647 такие быстрые, что выполняют
    бесконечный цикл всего за 6 секунд!" (с) анекдот.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[12]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 27.06.05 13:12
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    SJA>>>Какие ещё будут предположения ?


    СГ>Вспомнил. Там речь шла о C++ Builder 6.0 и Delphi 7.0.


    Ну вот.... Нехорошо, однако обобщать C++ Builder 6.0 => C++
    Я — свихнувшееся сознание Джо.
    Re[4]: Идеологически правильный мегарулез
    От: Sergey J. A. Беларусь  
    Дата: 27.06.05 13:18
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    К>>Программа становится офигенно понятной. Уж лучше иметь break с меткой, чтобы явно указывать точку отстрела.


    СГ>EXIT дешево и сердито завершает ближайший LOOP. Чего такого-то?


    break дешево и сердито завершает ближайший while/for/do-while. Чего такого-то?
    Я — свихнувшееся сознание Джо.
    Re[12]: Определение циклов
    От: Sergey J. A. Беларусь  
    Дата: 27.06.05 13:37
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Sergey J. A., Вы писали:


    SJA>> Дайте правила, по которым можно определить — структрная конструкция или нет.


    СГ>Не дам. Тут смысл нужно понимать.


    SJA>>Да ????? А что будет, если обратится по неверному индексу ? Уж не исключение, ли ?

    SJA>>Опять же Stack Overflow это что ?

    СГ>Будет остановлена исполняющаяся команда. Термина "исключение" нет.


    Да ?
    Из хелпа к чёрному коробку:

    In the first line, the exception or trap number is given, e.g., "Index out of range" or "TRAP 0".


    Наверное авторы тоже не знали, что там нет исключений ?

    Но терминология не так интересна. Меня больше интересует как спастись от "index out of range" например ? Перехватить нельзя.... Что ж делать то ???
    Я — свихнувшееся сознание Джо.
    Re[9]: Синтаксический оверхед
    От: Cyberax Марс  
    Дата: 27.06.05 13:40
    Оценка:
    Сергей Губанов wrote:

    > Хорошо конечно.

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

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

    В релизном режиме — действительно не поставите.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[13]: Определение циклов
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 27.06.05 13:43
    Оценка:
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Но терминология не так интересна. Меня больше интересует как спастись от "index out of range" например ? Перехватить нельзя.... Что ж делать то ???


    Ну что делать оберонщикам — погибнуть в ходе эволюции, больше вариантов особо я не вижу
    Re[9]: Синтаксический оверхед
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 27.06.05 13:53
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:
    СГ>Хорошо конечно.
    СГ>Я это запомню, чтобы потом когда мне будут говорить чего это я в одну строчку несколько инструкций написал — дебажить же не удобно будет, я этот пример покажу и спрошу, а куда Вы здесь точку останова поставите...

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

    int n=0;
    for(
        int i=0; 
        i<5;
        i++)
            n +=i;

    Вы что, полагаете от этого лишний ассемблерный код сгенерится?
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[6]: Идеологически правильный мегарулез
    От: xBlackCat Россия  
    Дата: 27.06.05 14:02
    Оценка:
    У меня всё больше и больше возникает желание посмотреть на лично Ваш код работающей (пусть даже не комерческой) программы. Не удовлетворите любопытство ссылочкой?
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Rojac &mdash; Rsdn Offline JAva Client
    Анонсы и обсуждение здесь
    Автор: xBlackCat
    Дата: 08.02.10
    Re[5]: FOR
    От: Кодт Россия  
    Дата: 27.06.05 14:05
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    К>>Кстати говоря, при step=0 в "эквивалентном коде" мы наблюдаем 6-секундную задержку


    СГ>step — константа известная на момент компиляции (с нулем просто не скомпилируется).


    То есть, нельзя записать
    PROCEDURE Iterate(x1,x2:INTEGER)
    VAR i:INTEGER;
    BEGIN
      FOR i:=x1 TO x2 STEP Sign(x2-x1) DO ..... END;
    END;

    ? Абыдна, да!

    СГ>А что такое 6-секундная задержка?


    Время выполнения LOOP END на машине Cray-II.
    Перекуём баги на фичи!
    Re[6]: Идеологически правильный мегарулез
    От: Sergey J. A. Беларусь  
    Дата: 27.06.05 14:08
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>>>EXIT дешево и сердито завершает ближайший LOOP. Чего такого-то?


    SJA>>break дешево и сердито завершает ближайший while/for/do-while. Чего такого-то?


    СГ>Циклом WHILE или REPEAT называется цикл, который может завершиться только по 1 условию.

    Короче, это уже не смешно.
    На всякий случай, напомню, что EXIT может выбросить из WHILE или REPEAT по совершенно другому условию, если WHILE находится внутри LOOP.
    А может вы решились на моё предложение называть такие циклы LOOP-n-WHILE. Тогда да. WHILE сможет выйти только по одному условию. Но тогда в Обероне будет оверхед по циклам ! Выбирайте !
    Я — свихнувшееся сознание Джо.
    Re[6]: Синтаксический оверхед - Новая порция
    От: achp  
    Дата: 27.06.05 14:12
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Попробуйте спросить это большинство современных программистов на C++. Найдите мне хотя бы одного, испытавшего мучения по этому поводу.


    Наверное, они не в курсе данной возможности.
    Re[13]: Определение циклов
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 27.06.05 14:23
    Оценка:
    Здравствуйте, Sergey J. A., Вы писали:

    SJA>Но терминология не так интересна. Меня больше интересует как спастись от "index out of range" например ? Перехватить нельзя.... Что ж делать то ???


    А что делать когда в Си происходит buffer overflow и ни каких exception при этом нет (программа хромает дальше пока совсем не скопытится)?

    Ответ: Надо писать правильные программы.
    Re[13]: Определение структурного программирования
    От: Mamut Швеция http://dmitriid.com
    Дата: 27.06.05 14:35
    Оценка:
    SJA>Ок. Отвественно заявляю, что Оберон ни для чего не пригоден. Доказательств не дам. Тут смысл нужно понимать.



    Ладно, эксперта по поиску в Гугле вызывали? Тута я

    define: strucutred programming

    This is a design approach where complex systems are broken down into smaller, more manageable pieces.
    www.davidgould.com/Glossary/Glossary.htm

    (IEEE) Any software development technique that includes structured design and results in the development of structured programs. See: structured design.
    www.validationstation.com/glossary/glossarys.htm

    A style of programming in which the programmer divides his program's source code into logically structured chunks of code.
    docs.rinet.ru/KofeynyyPrimer/ch38.htm

    Structured programming can be seen as a subset or subdiscipline of procedural programming, one of the major programming paradigms. It is most famous for removing or reducing reliance on the GOTO statement (also known as "go to").
    en.wikipedia.org/wiki/Structured_programming



    dmitriid.comGitHubLinkedIn
    Re[7]: Синтаксический оверхед - Новая порция
    От: xBlackCat Россия  
    Дата: 27.06.05 14:50
    Оценка:
    Здравствуйте, achp, Вы писали:

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


    S>>Попробуйте спросить это большинство современных программистов на C++. Найдите мне хотя бы одного, испытавшего мучения по этому поводу.


    A>Наверное, они не в курсе данной возможности.


    Возможности угрызения совести?
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Rojac &mdash; Rsdn Offline JAva Client
    Анонсы и обсуждение здесь
    Автор: xBlackCat
    Дата: 08.02.10
    Re[8]: Идеологически правильный мегарулез
    От: xBlackCat Россия  
    Дата: 27.06.05 14:50
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>
    СГ>while (отмерено меньше семи раз) {отмерять +"break", +"goto"}
    СГ>if(отмерено не меньше семи раз) // лишняя проверка
    СГ>{
    СГ>  Отрезать
    СГ>}
    СГ>else
    СГ>{
    СГ>  Error!!!
    СГ>}
    
    СГ>do {узнавать где брод +"break", +"goto"} while (не узнал)
    СГ>if(узнал) // лишняя проверка
    СГ>{
    СГ>  Соваться в воду 
    СГ>}
    СГ>else
    СГ>{
    СГ>  Error!!!
    СГ>}
    СГ>


    А кто вам сказал, что в такого смысла циклах будут белать break или goto? Поясните их смысл, пожайлуста. А лучше — нарисуйте
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Rojac &mdash; Rsdn Offline JAva Client
    Анонсы и обсуждение здесь
    Автор: xBlackCat
    Дата: 08.02.10
    Re[6]: Идеологически правильный мегарулез
    От: Mamut Швеция http://dmitriid.com
    Дата: 27.06.05 14:53
    Оценка:
    СГ>Циклом WHILE или REPEAT называется цикл, который может завершиться только по 1 условию. Цикл завершающийся более чем по одному условию или не завершающийся ни по какому условию называется по другому. Только и всего. В Oberon это LOOP, WHILE, REPEAT, в Си циклы while/for/do-while — есть по сути модификации цикла LOOP, а циклов WHILE и REPEAT нету. (На всякий случай еще раз напоминаю о существующей разнице между завершением цикла и прерыванием цикла.)


    Сергей, это исключительно ваши определения, ничего общего с определениями этих циклов не имеющие. Приводимые вами дальше примеры точно также пишутся и на С/С++, Яве, С#, PHP и вообще на любом современном языке программирования.

    Едиственное, в чем нужен LOOP, — это когда надо выйти из нескольких вложенных циклов. Вне этой функции он нафиг не нужен, если возможность выхода по условию внутри цикла можно встроить в иклы while и for. То, что такая возможность появится в while/for не сделает их каким-то другими циклами.


    dmitriid.comGitHubLinkedIn
    Re[7]: Синтаксический оверхед - Новая порция
    От: Mamut Швеция http://dmitriid.com
    Дата: 27.06.05 14:54
    Оценка:
    S>>Попробуйте спросить это большинство современных программистов на C++. Найдите мне хотя бы одного, испытавшего мучения по этому поводу.

    A>Наверное, они не в курсе данной возможности.


    Абсолютно не в курсе. По С++ практически первые примеры программ — это cout << "Hello, world". Сдвиги по битам учатся этак в главе 15-й...


    dmitriid.comGitHubLinkedIn
    Re[5]: FOR
    От: Пацак Россия  
    Дата: 27.06.05 17:32
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    К>>Кстати говоря, при step=0 в "эквивалентном коде" мы наблюдаем 6-секундную задержку

    СГ>step — константа известная на момент компиляции (с нулем просто не скомпилируется).

    То есть вычислить шаг цикла в рантайме я не могу? В печку такой язык! (с) проф. Преображенский.
    Ку...
    Re[6]: Идеологически правильный мегарулез
    От: Пацак Россия  
    Дата: 27.06.05 17:35
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Циклом WHILE или REPEAT называется цикл, который может завершиться только по 1 условию.


    Если не сложно, подсчитайте, пожалуйста, количество условий, по которым может завершиться внутренние WHILE и UNTIL здесь
    Автор: Сергей Губанов
    Дата: 24.06.05
    .
    Ку...
    Re[6]: FOR
    От: Кодт Россия  
    Дата: 27.06.05 17:39
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>"Новые процессоры Intell Pentium 3647 такие быстрые, что выполняют

    C>бесконечный цикл всего за 6 секунд!" (с) анекдот.

    Кстати, интересно: как должен отреагировать пень с предсказанием на такой код
    @@infinite: jmp @@infinite
    Перекуём баги на фичи!
    Re[7]: FOR
    От: raskin Россия  
    Дата: 27.06.05 17:50
    Оценка:
    Кодт wrote:
    > Здравствуйте, Пацак, Вы писали:
    >
    > П> То есть вычислить шаг цикла в рантайме я не могу? В печку такой язык!
    > (с) проф. Преображенский.
    >
    > Так вот кто был первым падонком? "Фтопку", понимаешь!

    Не надо грязи!! У Булгакова Преображенский был грамотным, и этого не
    скрывал, как некоторые (хотя и не подчёркивал). Кроме того, можно
    вспомнить, что он приказал кинуть в печку...
    Posted via RSDN NNTP Server 1.9
    Re[8]: Идеологически правильный мегарулез
    От: Пацак Россия  
    Дата: 27.06.05 17:52
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Существует разница между завершением и прерыванием цикла.

    СГ>EXIT — завершает цикл LOOP, но прерывает вложенные в LOOP другие циклы навроде WHILE/REPEAT
    СГ>Прервать циклы WHILE/REPEAT можно несколькими способами: HALT(), ASSERT(FALSE), RETURN, LOOP-ный обертывающий EXIT.
    СГ>Но завершить циклы WHILE/REPEAT можно только одним единственным способом.

    Я рыдалЪ!!! Честно!
    Сергей, может поясните чем одно отличается от другого? А заодно прокомментируете следующее словоблудие в вашем стиле:

    while (a < 10) {
        ++a;
         if (foo()) break;
    }


    Имеем два сценария:
    1) значение a стало равно 10 и цикл завершился
    2) функция foo вернула true и цикл был прерван

    Вывод: в C++ имеется только один способ завершить цикл while, и много способов (в т. ч. break) его прервать.
    Ку...
    Re[8]: FOR
    От: Кодт Россия  
    Дата: 27.06.05 18:16
    Оценка:
    Здравствуйте, raskin, Вы писали:

    R>Не надо грязи!! У Булгакова Преображенский был грамотным, и этого не

    R>скрывал, как некоторые (хотя и не подчёркивал). Кроме того, можно
    R>вспомнить, что он приказал кинуть в печку...

    Всё-всё-всё, извиняюсь и молчу.
    (В скобках и шёпотом замечу, что Кропоткин и Бакунин тоже были грамотными и даже дворянами... а развели, понимаешь, анархию! )
    Перекуём баги на фичи!
    Re[7]: str1 := str2 << str3;
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 28.06.05 02:45
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

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


    S>>Покажите мне любой другой перегружаемый оператор, который бы с первого взгляда ассоциировался с конкатенацией.


    СГ>str1 := str2 << str3;


    Странные какие-то у вас ассоциации... У меня, например, он ассоциируется с поразрядным сдвигом влево, ну или, на крайний случай, с перенаправлением стандартного вывода. Но только ни как не с конкатенацией...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[10]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 28.06.05 03:38
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Тогда бы он, возможно, назывался по другому.


    Объясните все-таки, как из написания или значения слова delete следует отсутствие у оператора delete возвращаемого значения?

    F>>Нет. Второй пример лучше.

    S>Ок. Фраза "Отправь по почте создать документ" ухо не режет? В сравнении с "Отправь по почте новый документ"?

    Создай документ. Отправь его по почте.

    Открой файл. Запиши в него данные.

    Создай окно. Нарисуй на нем картинку.

    F>>Почему для открытия файла, для создания окна, объекта ядра (мутекс, событие) и проч. прекрасно подходит глагол, а для создания объекта — только прилагательное?

    S>Гм. А кто сказал, что он прекрасно подходит?

    Все неправы, один Страуструп прав? Глагол подходит потому, что

    1. Обозначает действие, которое в данном случае и производится — создание объекта.

    2. Обладает противоположным смыслом с обратным действием — разрушением (удалением) объекта, которое тоже обозначается глаголом.

    Интересно, если бы "левая пятка Страуструпа" захотела создавать объекты ключевым словом "green" (а что, новый, еще "зеленый" объект), а удалять, скажем, "explode", этому бы тоже отыскали глубокое идеологическое обоснование? Кстати, explode возвращал бы значение?

    S>Чем создается берклеевский сокет?


    Давайте еще найдем глубокое обоснование отсутствию буквы 'e' в системном вызове creat().

    S>Учти, что все эти чудесные глаголы жили во времена процедурного программирования. Когда мы открываем файл в стиле nix или winapi, ни о каком создании речь не идет.


    winapi: CreateFile().

    S>В OOP мы просим дать нам новый файловый поток.


    В каком OOP? В языке C++ и его наследниках, вы хотите сказать? А вот например, в Eiffel объект создается ключевым словом create. Он уже не относится OOP?

    F>>В чем различие контекстов? И там и там создается объект.

    S>Ну и что? выражение new Type() читается "новый экземпляр типа Type". В то время как вызов фабрики является командой "создай новый объект".

    _Читается_ — да, как "новый". Потому что так написано. Про это и речь. Было бы написано "create Type()", читалось бы "создай".

    F>>Кстати, new, если его переопределить, может и не создавать _новый_ объект, а вернуть что-нибудь закэшированнное.

    S>Вот именно. Он возвращает новый объект. Не обязательно создавая eго.

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

    F>>Не вижу, как из значения или написания слова "delete" следует отсутствие возвращаемого значения.


    Так все таки?


    S>Делается неверное умозаключение. Я очень удивлюсь, если сложение будет обозначаться чем-то, кроме +. Однако, из этого не следует, что все "+" — это сложение. Как правило, мозг программиста не настолько забит математикой, чтобы он фанатично требовал от плюса, не обведенного защитным кружочком, коммутативности во всех ситуациях.


    Вот и печалит пренебрежение "программиста" к математике.

    S>Ни разу не видел программиста, ожидавшего от "World!" + "Hello," того же результата, что и "Hello," + "World!". Имхо, проблема является целиком надуманной.


    Эквивалентно ли a + b и b + a? Речь, естественно, не про константы.

    F>>Я бросил читать Страуструпа еще в прошлом веке.

    S>Напрасно. Если есть желание понять, что и почему в С++, то имеет смысл почитать первоисточники, а не задавать риторические вопросы в темноту .

    У меня нашлись более интересные книги. Когда они закончатся, вернусь к Страуструпу. На самом деле я давно хотел прочитать эту книгу, но покупать не хотелось, в сети с налету не нашел, а потом стало не до него. Будет время, прочту.

    F>>Тем не менее, как пользователь языков программирования, я вижу: в Haskell и ML произвольный оператор определить можно, и никакой трагедии из этого не делают.

    S>Зато в Haskell и ML нельзя сделать много чего из С++. Нельзя вот так просто брать и переносить что-то из одного языка в другой.

    Не хочу затевать спор, но, во-первых, не "нельзя", а "трудно", а во-вторых, мы же говорим про синтаксис, а не про то, что можно сделать в одном Тюринг-полном языке и нельзя в другом.
    Re: Синтаксический оверхед
    От: Аноним  
    Дата: 28.06.05 05:10
    Оценка:
    Здравствуйте, Сергей Губанов:

    Ну и баян!
    А вот такие конструкции, не прокатывают?


    (1)
    while(a)x();

    (2)
    while(true){
        x();
        if(a) {y(); break;}
        z();}

    и далее в этом же духе
    Re[12]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 28.06.05 05:48
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    >> S>Тогда бы он, возможно, назывался по другому.

    >> Объясните все-таки, как из написания или значения слова delete следует
    >> отсутствие у оператора delete возвращаемого значения?

    C>Вам это по-моему уже раза два сказали. Но раз уж вам так хочется, то вот

    C>мой подарок:
    C>
    C>template<class T> bool destruct(T *ptr)
    C>{
    C>    delete ptr;
    C>    return true;
    C>}
    C>

    C>Теперь лучше?

    Видимо, я не очень доходчиво выражаю свои мысли. Спрашиваю в очередной раз. Было сказано: "если бы delete возвращал значение, он назывался бы по-другому". Из этого я заключил, что существует какая-то неведомая мне связь между _словом_ delete и тем фактом, что обозначаемый этим словом оператор не имеет права возвращать значения. Я пытаюсь выяснить, в чем же заключается эта связь. Как назывался бы оператор удаления объекта, если бы он возвращал значение? На конкретном примере — если бы он назывался, скажем, explode, возвращал бы он значение или нет?

    >> Все неправы, один Страуструп прав? Глагол подходит потому, что


    C>Кто "все"? Может один только faulx?


    Вместе с авторами POSIX и WinAPI.

    >> 1. Обозначает действие, которое в данном случае и производится —

    >> создание объекта.

    C>new — это _выражение_, возвращающее новый объект. delete — это

    C>_оператор_, уничтожающий объект по указателю.

    1. Вызов open() — это тоже выражение, возвращающее дескриптор открытого (или созданного) файла.

    2. delete тоже мог бы возвращать значение (пока мне не докажут обратного)

    3. new производит _действие_, поэтому его логичнее обозначить глаголом.

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

    >> 2. Обладает противоположным смыслом с обратным действием — разрушением

    >> (удалением) объекта, которое тоже обозначается глаголом.
    >> Интересно, если бы "левая пятка Страуструпа" захотела создавать
    >> объекты ключевым словом "green" (а что, новый, еще "зеленый" объект),
    >> а удалять, скажем, "explode", этому бы тоже отыскали глубокое
    >> идеологическое обоснование?

    C>Нет, такие предложения бы отклонили в комитете по стандартизации, а до

    C>этого пользователи написали бы в адрес Страуструпа гору мата.

    Это произошло бы до создания комитета по стандартизации. Почему на green/explode мат был бы, а на new/delete не было? Есть этому логические обоснования?

    C>В отличие от Виртовских поделок процесс разработки С++ открыт и публичен.


    new и delete не были введены в язык в результате открытого и публичного процесса.

    C>ЗЫ: как смешно читать нападки на С++


    Форум такой, так что стараемся.

    C>Каждый раз находятся либо

    C>абсолютно мелочные моменты, которые никто и не замечает, либо заезженные
    C>"висячие указатели"/утечки памяти/...

    Тема обязывает.

    Кстати, кроме new/delete я сделал еще кое-какие замечания, например про

    LongClassName *obj = new LongClassName(...)


    Все молчат. Нечем крыть?
    Re[13]: Синтаксический оверхед - Новая порция
    От: Cyberax Марс  
    Дата: 28.06.05 06:03
    Оценка:
    faulx wrote:

    > From: *faulx* </Users/Profile.aspx?uid=30417>

    > </search/?group=33> </Users/Private/AddFav.aspx?mid=1243814>
    > <NewMsg.aspx?gid=33> <NewMsg.aspx?mid=1243814> <?mid=1243814>
    > <Message.aspx?mid=1243814#1243814> <NewMsg.aspx?mid=1243814&edit=1>
    > <Private/Self.aspx?mid=1243814>
    >
    > Здравствуйте, Cyberax, Вы писали:
    >
    >>> S>Тогда бы он, возможно, назывался по другому.
    >>> Объясните все-таки, как из написания или значения слова delete следует
    >>> отсутствие у оператора delete возвращаемого значения?
    >
    > C>Вам это по-моему уже раза два сказали. Но раз уж вам так хочется, то
    > вот
    > C>мой подарок:
    > C>
    >
    >C>template<class T> bool destruct(T *ptr)
    >C>{
    >C> delete ptr;
    >C> return true;
    >C>}
    >C>
    >
    >
    > C>Теперь лучше?
    >
    > Видимо, я не очень доходчиво выражаю свои мысли. Спрашиваю в очередной
    > раз. Было сказано: "если бы delete возвращал значение, он назывался бы
    > по-другому". Из этого я заключил, что существует какая-то неведомая
    > мне связь между _словом_ delete и тем фактом, что обозначаемый этим
    > словом оператор не имеет права возвращать значения. Я пытаюсь
    > выяснить, в чем же заключается эта связь. Как назывался бы оператор
    > удаления объекта, если бы он возвращал значение? На конкретном примере
    > — если бы он назывался, скажем, explode, возвращал бы он значение или нет?
    >
    >>> Все неправы, один Страуструп прав? Глагол подходит потому, что
    >

    > C>Кто "все"? Может один только faulx?

    > Вместе с авторами POSIX и WinAPI.

    POSIX зародился в седой древности, так что к нему претензий нет. А
    WinAPI созад MS.

    > C>new — это _выражение_, возвращающее новый объект. delete — это

    > C>_оператор_, уничтожающий объект по указателю.
    > 1. Вызов open() — это тоже выражение, возвращающее дескриптор
    > открытого (или созданного) файла.

    В С++ его можно было бы записать как:
    file *fl=new File(....);


    Просто в С нет конструкторов.

    > 2. delete тоже мог бы возвращать значение (пока мне не докажут обратного)


    А зачем? В С++ есть такая вещь — автоматические объекты, их деструкторы
    вызываются автоматически при выходе за границы диапазона. То есть:
    {
        file fl(...);
    }; //Здесь будет вызван деструктор fl.

    То есть результат деструктора читать некому. Более того, резултат
    деструктора бессмысленен при уничтожении массива объектов.

    > 3. new производит _действие_, поэтому его логичнее обозначить глаголом.


    Ладно, специально для вас:
    #define new create


    > C>Нет, такие предложения бы отклонили в комитете по стандартизации, а до

    > C>этого пользователи написали бы в адрес Страуструпа гору мата.
    > Это произошло бы до создания комитета по стандартизации.

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

    > Почему на green/explode мат был бы, а на new/delete не было? Есть

    > этому логические обоснования?

    Есть. Никого new/delete не напрягает (кстати, new быстрее писать, чем
    create).

    > C>В отличие от Виртовских поделок процесс разработки С++ открыт и

    > публичен.
    > new и delete не были введены в язык в результате открытого и
    > публичного процесса.

    Они были введены Страуструпом и что-то я не помню дальнейших возражений
    против них. Зато обсуждались такие вещи как renew (перемещающий new),
    например.

    > Кстати, кроме new/delete я сделал еще кое-какие замечания, например про

    >
    >LongClassName *obj = new LongClassName(...)
    >
    > Все молчат. Нечем крыть?

    В новом С++0x можно будет делать так:
    auto *obj=new LongClassName(...);

    Тип переменной obj будет автоматически выведен из типа правой части.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[13]: Синтаксический оверхед - Новая порция
    От: Дарней Россия  
    Дата: 28.06.05 06:12
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>3. new производит _действие_, поэтому его логичнее обозначить глаголом.


    Попробуй прочитать выражение:
    Foo tmp = new Foo();

    Переменной типа Foo присвоить новый объект типа Foo
    А теперь подставь туда "создать". Ну как, звучит?

    F>Кстати, кроме new/delete я сделал еще кое-какие замечания, например про


    F>
    F>LongClassName *obj = new LongClassName(...)
    F>


    Это действительно не очень хорошо, спорить не с чем
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[14]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 28.06.05 06:33
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    >> C>Кто "все"? Может один только faulx?

    >> Вместе с авторами POSIX и WinAPI.

    C>POSIX зародился в седой древности, так что к нему претензий нет. А

    C>WinAPI созад MS.

    А я надеялся, что вы припишите их создание мне.

    >> C>new — это _выражение_, возвращающее новый объект. delete — это

    >> C>_оператор_, уничтожающий объект по указателю.
    >> 1. Вызов open() — это тоже выражение, возвращающее дескриптор
    >> открытого (или созданного) файла.

    C>В С++ его можно было бы записать как:

    C>
    C>file *fl=new File(....);
    C>


    Ну и что? Здесь происходит _создание_ объекта File. Почему _создание_ обозначается не глаголом, а прилагательным?

    >> 2. delete тоже мог бы возвращать значение (пока мне не докажут обратного)


    C>А зачем?


    А зачем возвращают значения close() и IUnknown::Release()? А доказательства, что невозврат значения как-то связан с названием оператора удаления объекта, мне не дождаться?

    C>В С++ есть такая вещь — автоматические объекты, их деструкторы

    C>вызываются автоматически при выходе за границы диапазона. То есть:
    C>
    C>{
    C>    file fl(...);
    C>}; //Здесь будет вызван деструктор fl.
    C>

    C>То есть результат деструктора читать некому. Более того, резултат
    C>деструктора бессмысленен при уничтожении массива объектов.

    1. С++ я знаю.

    2. Здесь нет new/delete (по крайней мере, снаружи), так что пример не про то.

    >> 3. new производит _действие_, поэтому его логичнее обозначить глаголом.


    C>Ладно, специально для вас:

    C>
    C>#define new create
    C>


    1. C++ я знаю.

    2. Такое переопределение создаст больше проблем, чем решит.

    3. Разговор не про то, _как_, а про то, _почему_.

    >> Почему на green/explode мат был бы, а на new/delete не было? Есть

    >> этому логические обоснования?

    C>Есть. Никого new/delete не напрягает


    Это же не доказательство. Надо сохраниться, отмотать время назад и посмотреть, будет ли мат. Какие есть _внутренние_ доказательства того, что green/explode объективно хуже new/delete?

    C>Они были введены Страуструпом и что-то я не помню дальнейших возражений

    C>против них. Зато обсуждались такие вещи как renew (перемещающий new),
    C>например.

    Move constructors? Да, это тоже большая западня C++, но к синтаксису не относится, поэтому про нее я не писал. (Про MOJO знаю).

    >> Кстати, кроме new/delete я сделал еще кое-какие замечания, например про

    >>
    >>LongClassName *obj = new LongClassName(...)
    >>
    >> Все молчат. Нечем крыть?

    C>В новом С++0x можно будет делать так:

    C>
    C>auto *obj=new LongClassName(...);
    C>

    C>Тип переменной obj будет автоматически выведен из типа правой части.

    Кстати, про это я знал. Маленькая провокация
    Re[14]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 28.06.05 06:38
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>Попробуй прочитать выражение:

    Д>
    Д>Foo tmp = new Foo();
    Д>

    Д>Переменной типа Foo присвоить новый объект типа Foo
    Д>А теперь подставь туда "создать". Ну как, звучит?

    Да. Также как:

    File f = open();
    Window w = create_window();
    Re[8]: Идеологически правильный мегарулез
    От: Mamut Швеция http://dmitriid.com
    Дата: 28.06.05 06:51
    Оценка:
    СГ>Поэтому следующий код корректен
    СГ>
    СГ>WHILE отмерено меньше семи раз DO отмерять END;
    СГ>Отрезать (* Режем не делая более ни каких проверок.  Мы уже не спрашиваем можно ли отрезать, а просто режем!!! *)
    
    СГ>REPEAT узнавать где брод DO узнал END
    СГ>Соваться в воду (* Суемся в воду не делая более ни каких проверок. Просто суемся!!! *)
    СГ>

    СГ> В Си while/do можно завершить несколькими способами (+break, +goto), поэтому они не могут называться WHILE/REPEAT циклами.
    СГ>Для Си код аналогичный вышепреведенному, вообще говоря может быть не корректен, так как причина завершения сишных циклов while/do с break и goto на момент написания и компиляции программы не известна. Истинная причина завершения сишных while/do с break и goto может быть выяснена только динамически во время работы программы.

    Что за бред?
    int i = 0;
    while(i < 7)
    {
       measure();
    }
    
    cut();


    И еще раз. То, что вы называете определением циклов — это, извините, плод вашего больного воображения. Вы бы хоть раз сходили по ссылкам, что тут приводят:
    Control flow:Minimal structured control flow, Loops
    Structured programming
    While loop
    For loop


    dmitriid.comGitHubLinkedIn
    Re[15]: Синтаксический оверхед - Новая порция
    От: Дарней Россия  
    Дата: 28.06.05 07:40
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>Да. Также как:


    F>
    F>File f = open();
    F>Window w = create_window(); 
    F>


    Это в процедурном стиле — более старом, чем ООП, соответственно и названия функций не самые удачные. С таким же успехом можно придраться к тому, что в выньАПИ файлы открывают функцией CreateFile
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[16]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 28.06.05 08:05
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    F>>
    F>>File f = open();
    F>>Window w = create_window(); 
    F>>


    Д>Это в процедурном стиле — более старом, чем ООП, соответственно и названия функций не самые удачные. С таким же успехом можно придраться к тому, что в выньАПИ файлы открывают функцией CreateFile


    Так все-таки, необходимость, чтобы создание объекта обозначалось прилагательным, следует из необходимости соблюдать стиль ООП, или из того, что создание объекта — это выражение, а не оператор? Если из второго, то open() и create_window() — тоже выражения. Это я и хотел показать приведенными примерами.

    Кстати, к языкам с GC такой претензии нет. В Java/C#/Smalltalk объекты тоже создаются new, но там нет обратной операции, поэтому все нормально. А тезис мой такой: противоположные по смыслу действия должны обозначаться противоположными по смыслу словами (одной и той же грамматической категории). Есть возражения против этого тезиса?

    PS. А насчет CreateFile() как раз все понятно. Создается объект ядра "файл", связанный с объектом файловой системы.
    Re[6]: FOR
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.06.05 08:24
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    СГ>>step — константа известная на момент компиляции (с нулем просто не скомпилируется).


    П> То есть вычислить шаг цикла в рантайме я не могу?


    В FOR — нет. Это, видимо, предусмотрено для возможной оптимизации. Иначе FOR ну вообще бы ни чем не отличался от WHILE. А зачем в точности дублировать то что и так уже есть? Используйте WHILE...
    Re[12]: Синтаксический оверхед - Новая порция
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.06.05 08:27
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>В отличие от Виртовских поделок процесс разработки С++ открыт и публичен.


    Клевета.
    Re[17]: Синтаксический оверхед - Новая порция
    От: Дарней Россия  
    Дата: 28.06.05 08:30
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>Так все-таки, необходимость, чтобы создание объекта обозначалось прилагательным, следует из необходимости соблюдать стиль ООП


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

    F>Кстати, к языкам с GC такой претензии нет. В Java/C#/Smalltalk объекты тоже создаются new, но там нет обратной операции, поэтому все нормально. А тезис мой такой: противоположные по смыслу действия должны обозначаться противоположными по смыслу словами (одной и той же грамматической категории). Есть возражения против этого тезиса?


    Мне вообще без разницы, как он называется — есть дела и поважнее

    F>PS. А насчет CreateFile() как раз все понятно. Создается объект ядра "файл", связанный с объектом файловой системы.


    Эта функция называется не CreateKernelObjectFile. Она называется CreateFile.
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[18]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 28.06.05 08:41
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    F>>Так все-таки, необходимость, чтобы создание объекта обозначалось прилагательным, следует из необходимости соблюдать стиль ООП


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


    Смысл выражения — _создание_ объекта. Его логично записывать формально в виде глагола. Противоположное созданию действие — _разрушение_ (удаление) объекта. Его тоже логично обозначать глаголом. Эти два глагола обозначают противоположные действия, поэтому они должны быть антонимами.

    Д>Мне вообще без разницы, как он называется — есть дела и поважнее


    Сдаетесь?

    F>>PS. А насчет CreateFile() как раз все понятно. Создается объект ядра "файл", связанный с объектом файловой системы.


    Д>Эта функция называется не CreateKernelObjectFile. Она называется CreateFile.


    В winapi много странностей. Но если создание других объектов ядра выглядит просто как CreateXXX(), делать исключение для файла было бы излишеством. Некоторая непонятность, конечно, получилось, но она другого рода. Просто объект ядра и объект файловой системы называются одинаково. Синонимы.
    Re[19]: Синтаксический оверхед - Новая порция
    От: Дарней Россия  
    Дата: 28.06.05 08:49
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>Сдаетесь?


    лень ввязываться в религиозные споры

    F>В winapi много странностей. Но если создание других объектов ядра выглядит просто как CreateXXX(), делать исключение для файла было бы излишеством. Некоторая непонятность, конечно, получилось, но она другого рода.


    Как насчет OpenWindow? А OpenFile тоже существует, просто его объявили obsolete. Причем, что характерно, с помощью этой функции можно не только открывать файлы, но также создавать и даже удалять Можно списать это название на общую нелогичность выньАПИ.
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[19]: Синтаксический оверхед - Новая порция
    От: Трурль  
    Дата: 28.06.05 08:55
    Оценка:
    Здравствуйте, faulx, Вы писали:


    F>Смысл выражения — _создание_ объекта. Его логично записывать формально в виде глагола. Противоположное созданию действие — _разрушение_ (удаление) объекта. Его тоже логично обозначать глаголом. Эти два глагола обозначают противоположные действия, поэтому они должны быть антонимами.


    Записывать выражение в виде глагола нелогично. Так логично записывать предложение.
    Открой файл  - логично
    Пусть а есть открой файл - нелогично
    Re[20]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 28.06.05 08:55
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    F>>Сдаетесь?


    Д>лень ввязываться в религиозные споры


    Так ведь уже ввязались, а теперь что?

    Посмотрите, в каком форуме эта тема.

    Д>Как насчет OpenWindow?


    В моем MSDN этой функции нет.

    Д>А OpenFile тоже существует, просто его объявили obsolete. Причем, что характерно, с помощью этой функции можно не только открывать файлы, но также создавать и даже удалять Можно списать это название на общую нелогичность выньАПИ.


    Ну ведь сделали же ее obsolete, значит, показалась нелогичной. "Автор думал, слова подбирал!"
    Re[11]: Идеологически правильный мегарулез
    От: Трурль  
    Дата: 28.06.05 08:59
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>взялся бы ты лучше за функциональные языки, честное слово

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

    Знаете, приходилось наблюдать как эти самые функциональные языки назавали мертворожденными и даже похлеще.
    Re[20]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 28.06.05 09:02
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    Т>Записывать выражение в виде глагола нелогично. Так логично записывать предложение.

    Т>
    Т>Открой файл  - логично
    Т>Пусть а есть открой файл - нелогично
    Т>


    Что же делать, если в C++ у каждого выражения может быть вагон побочных эффектов? Тем более у new. И потом:

    let a = OpenFile()


    Нормально.
    Re[21]: Синтаксический оверхед - Новая порция
    От: Дарней Россия  
    Дата: 28.06.05 09:02
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>Посмотрите, в каком форуме эта тема.


    в "юморе"
    я же говорю — лень стало. Все равно никто никому и ничего не докажет.
    Останется только вздохнуть и сказать "здесь так принято"

    F>В моем MSDN этой функции нет.


    наверно, он у тебя какой-то неправильный
    как минимум, в MSDN 2004 она еще есть

    F>Ну ведь сделали же ее obsolete, значит, показалась нелогичной. "Автор думал, слова подбирал!"


    а OpenWindow почему не убрали?
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[9]: Идеологически правильный мегарулез
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 28.06.05 09:02
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    П>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Существует разница между завершением и прерыванием цикла.

    СГ>>EXIT — завершает цикл LOOP, но прерывает вложенные в LOOP другие циклы навроде WHILE/REPEAT
    СГ>>Прервать циклы WHILE/REPEAT можно несколькими способами: HALT(), ASSERT(FALSE), RETURN, LOOP-ный обертывающий EXIT.
    СГ>>Но завершить циклы WHILE/REPEAT можно только одним единственным способом.

    П>Я рыдалЪ!!! Честно!

    П>Сергей, может поясните чем одно отличается от другого? А заодно прокомментируете следующее словоблудие в вашем стиле:

    Человек, как истинный физик теоретик, просто попытался разделить все способы выхода из цикла на две разные группы по признаку удалённости точки завершения перехода от точки завершения цикла. Вот только названия этим группам дал не совсем удачное: в его понимании завершается — это когда переход из цикла осуществляется в точку, следующую сразу за телом цикла, прерывается — это когда переход из цикла осуществляется в точку, находящуюся в любой позиции за точкой, следующей сразу за телом цикла (прошу не принимать эту классификацию как серьёздный научный тезис). Вот только смысла в таком разделении я не вижу, потому что:
    1) циклу глубоко фиолетово, "завершился" он или "прервался" (по сути — это одно и то же) — главное, что был покинут локальный контекст и вызваны деструкторы;
    2) необходимо тогда как минимум ввести ещё один термин обозначающий ситуации, когда цикл снова начался с начала или был совершён переход на точку находящуюся далеко перед циклом;
    3) во вторую группу попали такие методы как goto далеко за пределы и выброс исключения, хотя эти 2 метода "прерывания" цикла не идентичны — goto нарушает естественный поток управления за счёт того, что может выполнить переход в середину включающего цикл контекста, перескочив, например, вызов конструкторов (например, для динамически создаваемых объектов), что в этом случае приключиться, предсказать не берусь, в отличие от него throw ведёт себя вполне естественно и такой проблемы решена; поэтому объединение этих методов в один класс как минимум не допустимо..
    4) а как классифицировать завершения цикла в таком случае, как прерывание или как завершение:
    bool func()
    {
        while(some_condition())
        {
            do_cation();
            if(other_condition()) return false;
        }
        return true;
    }
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[12]: Идеологически правильный мегарулез
    От: Дарней Россия  
    Дата: 28.06.05 09:04
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    Т>Знаете, приходилось наблюдать как эти самые функциональные языки назавали мертворожденными и даже похлеще.


    Не думаю, что это были очень умные люди. ФЯ конечно своеобразная штука, но в определенных областях они рулят
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[10]: Идеологически правильный мегарулез
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 28.06.05 09:07
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

    MN>Здравствуйте, Пацак, Вы писали:


    П>>Здравствуйте, Сергей Губанов, Вы писали:


    П>>Я рыдалЪ!!! Честно!

    П>>Сергей, может поясните чем одно отличается от другого? А заодно прокомментируете следующее словоблудие в вашем стиле:

    MN>Человек, как истинный физик теоретик, просто попытался разделить все способы выхода из цикла на две разные группы по признаку удалённости точки завершения перехода от точки завершения цикла.


    Сорри не дописал мысль.
    Сергей! Хватит гнать! Структура и классификация — это конечно хорошо, НО ТАМ, ГДЕ ОНИ НУЖНЫ! И разницы между завершением и прерыванием цикла нет — есть разница между дальним и ближним переходом, есть разница между переходом с нарушением нормально потока управления и без онаго, но не между завершением и прерыванием цикла... Вобщем идите займитесь делом или поучите мат. часть.
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[22]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 28.06.05 09:20
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    F>>Посмотрите, в каком форуме эта тема.


    Д>в "юморе"

    Д>я же говорю — лень стало. Все равно никто никому и ничего не докажет.

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

    F>>В моем MSDN этой функции нет.


    Д>наверно, он у тебя какой-то неправильный

    Д>как минимум, в MSDN 2004 она еще есть

    На микрософтовском сайте тоже нет. Мой MSDN 2003 года. А был ли мальчик? Или это работа принципа Педро Дамиани?

    F>>Ну ведь сделали же ее obsolete, значит, показалась нелогичной. "Автор думал, слова подбирал!"


    Д>а OpenWindow почему не убрали?


    Да где же она?
    Re[23]: Синтаксический оверхед - Новая порция
    От: Дарней Россия  
    Дата: 28.06.05 09:39
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>Да где же она?


    ой, немного перепутал
    Та функция, про которую я подумал, называется FindWindow.

    Ну возьмем лучше RegOpenKey. Принцип тот же самый.
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[13]: Синтаксический оверхед - Новая порция
    От: Amidlokos Россия  
    Дата: 28.06.05 09:43
    Оценка:
    Здравствуйте, faulx, Вы писали:

    C>>ЗЫ: как смешно читать нападки на С++


    F>Форум такой, так что стараемся.


    Спасибо, у вас получается — коллеги улыбаются
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[8]: Народ упорно не врубается
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.06.05 09:50
    Оценка:
    Попробую объяснить свою мысль еще раз



  • Универсальный цикл LOOP

    Есть универсальный цикл LOOP
      LOOP
        ...
        ...
        ...
      END;
      СледующаяИнструкция;
      ...

    который может либо исполняться вечно, либо завершиться с помощью вызова внутри него инструкции EXIT.
      LOOP
        ...
        IF c1 THEN EXIT END;
        ...
        IF c2 THEN EXIT END;
        ...
        IF c3 THEN EXIT END;
        ...
      END;
      СледующаяИнструкция;
      ...

    Условий завершения цикла LOOP может быть произвольное количество 0, 1, 2, 3, ... . Если их 0, то цикл ни когда не завершается.



  • Разница между завершением и прерыванием цикла

    После того как цикл завершается начинает выполняться следующая после него интсрукция — "СледующаяИнструкция;".

    Если цикл прерывается, то управление передается в неизвестном (для него) направлении, и следующая после него инструкция — "СледующаяИнструкция;" — УЖЕ НЕ ВЫПОЛНЯЕТСЯ!

    Как можно прервать любой цикл:
    1) HALT — останов системы
    2) ложный ASSERT — останов команды
    3) RETURN из процедуры
    Во всех этих случаях управление передается в неизвестном (для "самого цикла") направлении, и следующая после него инструкция — "СледующаяИнструкция;" — уже не выполняется. Вот в чем состоит отличие между завершением цикла и прерыванием цикла.



  • Количество условий завершения цикла

    Рассмотрим случай, когда цикл может быть завершен более чем одним способом.
      LOOP
        ...
        IF c1 THEN EXIT END;
        ...
        IF c2 THEN EXIT END;
        ...
        IF c3 THEN EXIT END;
        ...
      END;
      СледующаяИнструкция;
      ...

    Если инструкция "СледующаяИнструкция;" когда-нибудь будет выполнена, значит цикл все-таки завершился, а раз он завершился, значит сработало какое-то из условий завершения c1 или c2 или c3 и т.д. А теперь приготовьтесь — сейчас будет ключевая мысль. На момент написания программы не известно какое именно из условий ci сработает, это можно выяснить только лишь динамически во время работы программы. То есть "СледующаяИнструкция;" не знает наперед почему завершился цикл, а она должна это динамически узнать. Например, вот так:
      LOOP
        ...
        IF c1 THEN EXIT END;
        ...
        IF c2 THEN EXIT END;
        ...
        IF c3 THEN EXIT END;
        ...
      END;
    
      IF c1 THEN быть может цикл loop завершился по условию c1 END;
      IF c2 THEN быть может цикл loop завершился по условию c2 END;
      IF c3 THEN быть может цикл loop завершился по условию c3 END;
      ...

    или каким-то другим способом, например, через вспомогательную переменную complete:
      LOOP
        ...
        IF c1 THEN complete := 1; EXIT END;
        ...
        IF c2 THEN complete := 2; EXIT END;
        ...
        IF c3 THEN complete := 3; EXIT END;
        ...
      END;
      CASE complete OF
        1: цикл loop точно завершился по условию c1 |
        2: цикл loop точно завершился по условию c2 |
        3: цикл loop точно завершился по условию c3 |
        ...
      END
      ...




  • Зачем нужны циклы WHILE и REPEAT

    Спрашивается зачем нужны циклы WHILE и REPEAT если достаточно универсального цикла LOOP? Ответ — для удобства. Это примерно тоже самое как иметь инструкцию IF когда достаточно иметь универсальную инструкцию CASE. Существует много случаев, когда вариантов всего два, поэтому и есть IF кроме CASE, просто так удобнее. Аналогично существует много случаев когда условие завершения цикла всего одно.

      WHILE продолжить DO
        ...
      END;  
      СледующаяИнструкция;
      ...

    Поскольку условие завершения цикла WHILE всего одно, то "СледующаяИнструкция" выполняется при полной уверенности, что "продолжить = FALSE". Ни каких дополнительных проверок во время исполнения не требуется — условие завершения и так известно наперед.
      REPEAT
        ...
      UNTIL остановить;
      СледующаяИнструкция;
      ...

    Поскольку условие завершения цикла REPEAT всего одно, то "СледующаяИнструкция" выполняется при полной уверенности, что "остановить = TRUE". Ни каких дополнительных проверок во время исполнения не требуется — условие завершения и так известно наперед.

    Циклы WHILE и REPEAT нельзя завершить по другому. Но их можно прервать передав управление в неизвестном (для "самих циклов") направлении. К уже известным способам прерывания HALT, ASSERT(FALSE), RETURN добавляется еще один способ прерывания — EXIT который работает в том случае, если сам цикл WHILE или REPEAT является вложенным внутрь агрегирующего его цикла LOOP.
    Например:
      LOOP
        ...
        IF c1 THEN complete := 1; EXIT END;
        ...
        REPEAT
          ...
          IF c2 THEN complete := 2; EXIT END;
          ...      ...
        UNTIL остановить;
        СледующаяПослеRepeatИнструкция;
      END;
      СледующаяПослеLoopИнструкция;
      ...

    Условие c2 одновременно прерывает вложенный цикл REPEAT, так что инструкция "СледующаяПослеRepeatИнструкция;" НЕ ВЫПОЛНЯЕТСЯ, но оно одновременно же завершает цикл LOOP, так что инструкция "СледующаяПослеLoopИнструкция;" — выполняется. Прерывает одно и завершает другое, понимаете тонкость момента?
      LOOP
        ...
        IF c1 THEN complete := 1; EXIT END;
        ...
        REPEAT
          ...
          IF c2 THEN complete := 2; EXIT END;
          ...      ...
        UNTIL остановить;
        СледующаяПослеRepeatИнструкция;
      END;
      CASE complete OF
        1: Цикл loop завершился по условию c1 |
        2: Цикл loop завершился по условию c2 |
        ...
      END
      ...




  • А что в Си?

    В С/C++/C#/Java цикл while может быть завершен вовсе не только одним способом, а несколькими: добавляется break и goto на конец цикла (кроме Java, там goto нет).

    Понимаете? break и goto на конец цикла while тоже ЗАВЕРШАЮТ его, а вовсе не прерывают. После этого начинает выполняться СЛЕДУЮЩАЯ после цикла инструкция. И она не может наперед знать причину завершения цикла, а должна ее динамически узнавать.
  • Re[20]: Синтаксический оверхед - Новая порция
    От: Cyberax Марс  
    Дата: 28.06.05 09:55
    Оценка:
    Трурль wrote:

    > F>Смысл выражения — _создание_ объекта. Его логично записывать

    > формально в виде глагола. Противоположное созданию действие —
    > _разрушение_ (удаление) объекта. Его тоже логично обозначать глаголом.
    > Эти два глагола обозначают противоположные действия, поэтому они
    > должны быть антонимами.
    > Записывать /выражение/ в виде глагола нелогично. Так логично
    > записывать /предложение/.
    >
    >Открой файл — логично
    >Пусть а есть открой файл — нелогично
    >
    File *fl=new File(...);
    //Пусть указатель на fl равен новому объекту-файлу.

    Чего не так?

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[13]: Синтаксический оверхед - Новая порция
    От: Cyberax Марс  
    Дата: 28.06.05 09:59
    Оценка:
    Сергей Губанов wrote:

    > C>В отличие от Виртовских поделок процесс разработки С++ открыт и

    > публичен.
    > Клевета.

    На что? На открытость С++?
    Так есть сайты http://open-std.org/JTC1/SC22/WG21/ и
    comp.lang.c++.moderated. Процесс разработки С++ соответствует стандарту
    качества ISO, а в нем есть фаза публичного фидбека. Четко определены
    процедуры голосования и разрешения конфликтов и т.п.

    Что там у нас у Оберона? Хоть список рассылки-то есть?

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[21]: Синтаксический оверхед - Новая порция
    От: Трурль  
    Дата: 28.06.05 10:04
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>Что же делать, если в C++ у каждого выражения может быть вагон побочных эффектов? Тем более у new.

    Тут да, делать нечего

    F> И потом:

    F>
    F>let a = OpenFile()
    F>


    F>Нормально.

    Пусть a означает "открыть файл"?
    Re[10]: Народ упорно не врубается
    От: xBlackCat Россия  
    Дата: 28.06.05 10:04
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>Эх, вот бы эту энергию и на благо человечества


    Баян! Я первый эту фразу сказал
    ... << RSDN@Home 1.1.4 beta 3 rev. 185>>
    Rojac &mdash; Rsdn Offline JAva Client
    Анонсы и обсуждение здесь
    Автор: xBlackCat
    Дата: 08.02.10
    Re[11]: Народ упорно не врубается
    От: Privalov  
    Дата: 28.06.05 10:08
    Оценка:
    Здравствуйте, xBlackCat, Вы писали:

    К>>Эх, вот бы эту энергию и на благо человечества


    BC>Баян! Я первый эту фразу сказал


    Кто бы ни сказал, должного эффекта она не возымела...

    Само последнее сочинение — нехилый баян в рамках топика.
    Re[21]: Синтаксический оверхед - Новая порция
    От: Трурль  
    Дата: 28.06.05 10:09
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Чего не так?

    200!
    Re[13]: Народ упорно не врубается
    От: Privalov  
    Дата: 28.06.05 10:16
    Оценка:
    Здравствуйте, Курилка, Вы писали:

    К>Баянами будем меряться?


    Дак весь топик кто-то чем-то меряется. Вон избыточность (оверхед по-русски) уже сколько меряют, и ничего. Все какое-то разнообразие.Посмотрим, чей баян баянистее, а потом еще конкурс на самый баянистый баян всех времен и народов объявим. Победителю — приз: сборник баянов.
    Re[9]: Народ упорно не врубается
    От: Mamut Швеция http://dmitriid.com
    Дата: 28.06.05 10:17
    Оценка:
    СГ>
  • А что в Си?

    СГ>В С/C++/C#/Java цикл while может быть завершен вовсе не только одним способом, а несколькими: добавляется break и goto на конец цикла (кроме Java, там goto нет).


    СГ>Понимаете? break и goto на конец цикла while тоже ЗАВЕРШАЮТ его, а вовсе не прерывают. После этого начинает выполняться СЛЕДУЮЩАЯ после цикла инструкция. И она не может наперед знать причину завершения цикла, а должна ее динамически узнавать.


    Тьфу, блин. Я так и не понял, чем это плохо. Тем более, что никто не мешает и в С++ написать while/for с одной только точкой выхода.

    А в Обероне единственный плюс от LOOP'a — это возможность выйти из нескольких вложенный циклов сразу.


  • dmitriid.comGitHubLinkedIn
    Re[10]: Народ упорно не врубается
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.06.05 10:41
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    P>И что, опять нельзя узнать?


    Что нельзя узнать?
    Re[9]: Народ упорно не врубается
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 28.06.05 10:44
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Попробую объяснить свою мысль еще раз


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


    СГ>
  • Универсальный цикл LOOP
    [skipped] — не вижу ничего существенного и никакого смысла для спора.


    СГ>
  • Разница между завершением и прерыванием цикла

    СГ>После того как цикл завершается начинает выполняться следующая после него интсрукция — "СледующаяИнструкция;".

    СГ>Если цикл прерывается, то управление передается в неизвестном (для него) направлении, и следующая после него инструкция — "СледующаяИнструкция;" — УЖЕ НЕ ВЫПОЛНЯЕТСЯ!
    СГ>...Во всех этих случаях управление передается в неизвестном (для "самого цикла") направлении, и следующая после него инструкция — "СледующаяИнструкция;" — уже не выполняется. Вот в чем состоит отличие между завершением цикла и прерыванием цикла.

    Циклу глубоко фиолетово, на какю инструкцию совершён переход. Более того, он всегда знает, на какую именно инструкцию переход осуществляется, будь то goto, return, break или нормальное завершение по условию... Почему — это вам в архитектуру x86 и язык ассемблер, если простыми словами, то для выполнения этих инструкций нужно знать точный адрес точки перехода. Есть единственный метод "завершения" цикла, при котором точка перехода неизвестна — это выброс исключения...

    СГ>
  • Количество условий завершения цикла

    СГ>Если инструкция "СледующаяИнструкция;" когда-нибудь будет выполнена, значит цикл все-таки завершился, а раз он завершился, значит сработало какое-то из условий завершения c1 или c2 или c3 и т.д. А теперь приготовьтесь — сейчас будет ключевая мысль. На момент написания программы не известно какое именно из условий ci сработает, это можно выяснить только лишь динамически во время работы программы. То есть "СледующаяИнструкция;" не знает наперед почему завершился цикл, а она должна это динамически узнать.


    Применение любого из указанных методов выхода, за исключением return и throw, непосредственно контролируется автором цикла, поскольку они имеют воздействие только в локальном контексте, которому принадлежит цикл. Поэтому нет никаких сложностей с тем, чтобы обеспечить нужные гарантии завершения цикла, если этого требует алгоритм. Бывают алгоритмы, в которых таких условий может быть несколько, причём такие алгоритмы бывают даже в обероне и даже в обероне в таком случае придётся выполнять динамическую проверку.
    Пример (поиск символа в строке):
    int i = 0;
    while(str[i] != ch || str[i] != 0) i++;
    if(str[i] == 0)
        // символ не найден
    else
        // символ найден

    Или вы утверждаете, что в обероне вы обойдётесь без последней проверки? Извините, в силу своего не очень маленького опыта в программировании не поверю в это!

    А делать поверку просто так не всякий случай — извинте это нонсенс... Или вы утверждаете, что всегда нужно делать так, только потому что в цикле невзначай, по какому-то щучьему велению могут оказаться break`и:
    long fact = 1;
    int i = 0;
    for(i = 1; i < 10; i++) fact *= i;
    if(i < 10)
    {
        // по какой-то причине цикл не выполнился до конца...
    }

    Если да, то можете дальше не читать, и дальнейший спор я считаю бессмысленным, по причине вашей фанатичной упёртости.

    Есть 2 способа выхода из цикла при котором автор кода использующего цикл не контролирует его код return и выброс исключения. В этом случае гарантии нужного завершения цикла предоставить не удасться и придётся выполнять динамическую проверку. НО так будет и в C++, и в Обероне, и в любом другом языке, потому что:
    1) результат работы функции вам проверить всё равно необходимо, если таковой есть, иначе зачем вы её вызывали;
    2) перехватить исключение (именно это и есть динамическая проверка на выход посредством ислючения) вам придётся, анче ваша программа завершиться.

    Вот и выходит, сударь, что вся ваша теория с прерыванием/завершением цикла и гарантиями мало того, что не имеет никакого смысла, но более того — ошибочна.
    Единственный случай, при котором потребуются дополнительные проверки — это дальний goto в середину локального контекста, но это справедливо не только для циклов, но и для любых других управляющих структур. Поэтому его лучше не сипользовать без сущей на то необходимости.
  • Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[11]: Народ упорно не врубается
    От: Mamut Швеция http://dmitriid.com
    Дата: 28.06.05 10:52
    Оценка:
    M>>А в Обероне единственный плюс от LOOP'a — это возможность выйти из нескольких вложенный циклов сразу.

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


    Для этого уже достаточно двух вложенных LOOP'ов с вложенными циклами. Мне это сразу напомнило разбор XML DOM На Обероне можно будет повеситься его разбирать.


    dmitriid.comGitHubLinkedIn
    Re[10]: Идеологически правильный мегарулез
    От: Кодт Россия  
    Дата: 28.06.05 10:55
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

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




    MN>Вот только смысла в таком разделении я не вижу, потому что:

    MN>1) циклу глубоко фиолетово, "завершился" он или "прервался" (по сути — это одно и то же) — главное, что был покинут локальный контекст и вызваны деструкторы;
    MN>2) необходимо тогда как минимум ввести ещё один термин обозначающий ситуации, когда цикл снова начался с начала или был совершён переход на точку находящуюся далеко перед циклом;
    MN>3) во вторую группу попали такие методы как goto далеко за пределы и выброс исключения, хотя эти 2 метода "прерывания" цикла не идентичны — goto нарушает естественный поток управления за счёт того, что может выполнить переход в середину включающего цикл контекста, перескочив, например, вызов конструкторов (например, для динамически создаваемых объектов), что в этом случае приключиться, предсказать не берусь, в отличие от него throw ведёт себя вполне естественно и такой проблемы решена; поэтому объединение этих методов в один класс как минимум не допустимо..

    Здоровый компилятор не позволит выполнить такой манёвр, как goto в середину кода, которое игнорирует обязательные действия.
    В Си нельзя делать goto в другую функцию (блюдётся кадр стека). В С++ — нельзя перепрыгнуть через конструирование.

    MN>4) а как классифицировать завершения цикла в таком случае, как прерывание или как завершение:


    Один преподаватель русского языка объяснял разницу между дополнением и определением.
    Если "аттачмент" является неотъемлимым атрибутом предмета — это определение. Иначе — дополнение.
    — "Блин с икрой": икра — дополнение (её намазали на уже готовый блин)
    — "Пирог с капустой": "с капустой" — определение (внутрь положена)
    Естественно, нашёлся студент, который спросил: "А если блин икрой намазать и в трубочку свернуть?"

    (кажется, Лев Успенский, "Слово о словах")
    Перекуём баги на фичи!
    Re[11]: Народ упорно не врубается
    От: Privalov  
    Дата: 28.06.05 11:15
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Что нельзя узнать?


    Причину завершения цикла.
    Здесь
    Автор: Сергей Губанов
    Дата: 28.06.05
    в самом конце.
    Re[9]: Синтаксический оверхед
    От: ZayatsZ Россия  
    Дата: 28.06.05 11:20
    Оценка:
    Здравствуйте, Дарней, Вы писали:


    Д>А это идея! Надо просто выпустить клавиатуры а-ля Спектрум, на которых будут нанесены все ключевые слова оберона — IF, THEN, END и т.д. И клавишу Enter спрятать подальше, чтобы поощрить написание кода в "однострочном" стиле.

    История развивается по спирали
    ... << RSDN@Home 1.1.4 beta 7 rev. 501>>
    Re[10]: Народ упорно не врубается
    От: Privalov  
    Дата: 28.06.05 11:20
    Оценка:
    Здравствуйте, Mr. None, Вы писали:


    MN>Пример (поиск символа в строке):

    MN>
    MN>int i = 0;
    MN>while(str[i] != ch || str[i] != 0) i++;
    MN>if(str[i] == 0)
    MN>    // символ не найден
    MN>else
    MN>    // символ найден
    MN>

    MN>Или вы утверждаете, что в обероне вы обойдётесь без последней проверки? Извините, в силу своего не очень маленького опыта в программировании не поверю в это!

    Здесь
    Автор: Privalov
    Дата: 28.06.05
    я привожу аналогичный пример. Думаете, помогло?
    Re[11]: Идеологически правильный мегарулез
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 28.06.05 11:26
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>В Си нельзя делать goto в другую функцию (блюдётся кадр стека).

    Ну это ясно божий пень!

    К>Здоровый компилятор не позволит выполнить такой манёвр, как goto в середину кода, которое игнорирует обязательные действия.

    К>В С++ — нельзя перепрыгнуть через конструирование.
    Возможно, что VC 7.1 (VS.NET 2003) не самый здоровый компилятор, но такой код он пропускает не икнув:
    class TestClass
    {
    public:
        TestClass(){}
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        goto label;
        TestClass *ptr = new TestClass();
    label:
        return 0;
    }

    При этом в точке, на которую выполняется переход ptr содержит всякий мусор, по которому не возможно определить корректный указатель или нет.
    Он реагирует только на случай (и то предупреждением, а не ошибкой), когда класс содержит конструктор (любой), а goto перепрыгивает через локальное (не динамическое) объявление переменной.
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[13]: Идеологически правильный мегарулез
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 28.06.05 11:32
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    >> Лисп — ваще сынок, там по скобкам оверхед.


    C>Смеялся 5 минут Как представлю подсчет скобочек в Лиспе и Обероне по

    C>"звездному" принципу...

    Скорее "звезданутому"...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[12]: Идеологически правильный мегарулез
    От: Трурль  
    Дата: 28.06.05 11:49
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Джей и Кей — пара братьев-уродцев, совершенно нечитаемый код.


    Зато оверхед минимальный.
    a:10#0

    int a[10];for(int i=0;i<10;i++)a[i]=0;

    По символам и лексемам у C оверхед> 500%

    Применяем звездный метод
    a*10*0

    * a *10* * * * * * * * * * * 10* * * * a* * * *0*
    Re[12]: Народ упорно не врубается
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.06.05 12:29
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    P>Здравствуйте, Сергей Губанов, Вы писали:


    СГ>>Что нельзя узнать?


    P>Причину завершения цикла.

    P>Здесь
    Автор: Сергей Губанов
    Дата: 28.06.05
    в самом конце.


    Там два разных условия завершения. Какое из них сработает можно узнать лишь динамически во время исполнения программы. На момент написания можно лишь утверждать, что будет истинным
    выражение "(i >= LEN(a)) OR (a[i] < 0)". Кстати, тот цикл как раз и превращается тождественным преобразованием в цикл WHILE:

    i := 0;
    WHILE (i < LEN(a)) & ~(a[i] < 0) DO INC(i) END

    после завершения которого как раз является истинным указанное выше выражение.
    Re[10]: Народ упорно не врубается
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.06.05 12:36
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

    MN>Пример (поиск символа в строке):

    MN>
    MN>int i = 0;
    MN>while(str[i] != ch || str[i] != 0) i++;
    MN>if(str[i] == 0)
    MN>    // символ не найден
    MN>else
    MN>    // символ найден
    MN>

    MN>Или вы утверждаете, что в обероне вы обойдётесь без последней проверки? Извините, в силу своего не очень маленького опыта в программировании не поверю в это!

    Вы путаете. Цикл WHILE гарантирует лишь то, что выражение "str[i] != ch || str[i] != 0" будет ложным после его завершения (если он завершиться конечно когда-нибудь). Больше он ничего не гарантирует. То что это выражение само в свою очередь состоит из нескольких — совершенно другой вопрос.
    Re[13]: Идеологически правильный мегарулез
    От: Amidlokos Россия  
    Дата: 28.06.05 12:44
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    Т>Зато оверхед минимальный.

    Т>
    a:10#0

    Т>
    int a[10];for(int i=0;i<10;i++)a[i]=0;

    Т>По символам и лексемам у C оверхед> 500%

    Т>Применяем звездный метод

    Т>
    a*10*0

    Т>
    * a *10* * * * * * * * * * * 10* * * * a* * * *0*


    Ещё один занят подтасовкой фактов, но уже не так талантливо. Что, i, 0 и 10 посчитать забыли? И каждую скобку вынесли лексемой? Даже если так, звёздочек всё равно многовато.

    В общем, > /dev/null
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[17]: Определение структурного программирования
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.06.05 12:44
    Оценка:
    Здравствуйте, Privalov, Вы писали:

    P>Потому как не читатель, а писатель...


    Да. Вы меня раскусили.
    Re[14]: Идеологически правильный мегарулез
    От: Amidlokos Россия  
    Дата: 28.06.05 12:48
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:

    Т>>
    int a[10];for(int i=0;i<10;i++)a[i]=0;


    Т>>Применяем звездный метод

    Т>>
    a*10*0

    Т>>
    * a *10* * * * * * * * * * * 10* * * * a* * * *0*


    A>Ещё один занят подтасовкой фактов, но уже не так талантливо. Что, i, 0 и 10 посчитать забыли? И каждую скобку вынесли лексемой? Даже если так, звёздочек всё равно многовато.


    Насчёт 10 поправка — всё же есть, а в целом:

    * a * 10 * * * i * 0 * i * 10 * i * * a * i * * 0 *
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[4]: Идеологически правильный мегарулез
    От: Socrat Россия  
    Дата: 28.06.05 12:54
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    П>Не-е-е-е-е-е-е, стоп!!! ИМХО нас морочат.

    П>Я чот не пойму. Не так давно СГ убеждал всех, что EXIT из while вывести не может и что компилитор не даст соорудить такую инструкцию и вот — на тебе! Этак я тогда из любого while могу то же самое сделать:

    П>
    П>LOOP
    П>    WHILE (1=1) DO 
    П>         IF ... THEN EXIT END;
    П>    END
    П>    EXIT;
    П>END
    П>


    П>2СГ: так пропустит компилятор такую конструкцию или не пропустит? Позволяет писать EXIT из WHILE или не позволяет?


    "КРЯК!" — сказала пила.
    "То-то же!!!" — сказали суровые сибирские лесорубы!

    Re[12]: Идеологически правильный мегарулез
    От: Amidlokos Россия  
    Дата: 28.06.05 13:02
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

    [Поскипано]

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

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

    Такое впечатление, что никто не понимает основных принципов C/C++, но всем надо покритиковать.

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

    И "warning на стековый объект с непустым конструктором" — тоже предельно ясно и понятно. Потому что:

    1. Раз объект стековый (а не указатель на какую-то память где-то в куче), то всё же компилятор заботится о его создании. Вот он и ругается.
    2. В случае с пустым конструктором достаточно (а может быть, слишком) умный компилятор определяет, что разницы между вызовом конструктора и отсутствием такого вызова не будет никакой. Вот и не ругается.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[14]: Идеологически правильный мегарулез
    От: Трурль  
    Дата: 28.06.05 13:05
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:

    A>Ещё один занят подтасовкой фактов, но уже не так талантливо. Что, i, 0 и 10 посчитать забыли?

    i,0 и т.п.- чистый оверхед.
    A>И каждую скобку вынесли лексемой?
    А скобки разве не лексемы?
    A>Даже если так, звёздочек всё равно многовато.
    Нам уже разъяснили что пробела тоже надо учитывать.
    Re[13]: Идеологически правильный мегарулез
    От: Amidlokos Россия  
    Дата: 28.06.05 13:08
    Оценка:
    P.S. Mr. None, только на мою фразу про "никто не понимает" обижаться не нужно Сгоряча сказалось.

    Ведь правда же — пример, в котором указатель не отличают от стекового объекта... Нехорошо это даже для флейма
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[15]: Идеологически правильный мегарулез
    От: Amidlokos Россия  
    Дата: 28.06.05 13:22
    Оценка:
    Здравствуйте, Трурль, Вы писали:

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


    A>>Ещё один занят подтасовкой фактов, но уже не так талантливо. Что, i, 0 и 10 посчитать забыли?

    Т> i,0 и т.п.- чистый оверхед.

    Ага, но при этом 10 почему-то всё же не оверхед?

    Ловлю на слове: с этого момента дружно начинаем считать оверхедом объявление и использование переменной

    Да, кстати, маленький секрет... Этот for коротко записывается так:

    int a[10]={0};


    A>>И каждую скобку вынесли лексемой?

    Т>А скобки разве не лексемы?

    Так я же согласен — пусть будут лексемами каждая по отдельности.

    A>>Даже если так, звёздочек всё равно многовато.

    Т>Нам уже разъяснили что пробела тоже надо учитывать.
    Это разъясняли про значащие пробелы. Иначе код:

    int                            a   ;

    Побьёт по оверхеду код
    int a;


    Впрочем, к вашей чести, в вашем коде незначащих пробелов нет.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[16]: Идеологически правильный мегарулез
    От: Трурль  
    Дата: 28.06.05 13:35
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:


    A>Ага, но при этом 10 почему-то всё же не оверхед?


    Оверхед — все, что не относится к делу.

    A>Да, кстати, маленький секрет... Этот for коротко записывается так:


    A>
    A>int a[10]={0};
    A>


    А вот этот
    int a[10];for(int i=0;i<10;i++)a[i]=1;
    Re[12]: Народ упорно не врубается
    От: Privalov  
    Дата: 28.06.05 13:51
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

    P>>Здесь
    Автор: Privalov
    Дата: 28.06.05
    я привожу аналогичный пример. Думаете, помогло?


    MN>Даже смотреть не буду (трафик не резиновый) — уверен, что не помогло !


    Судя по всему все гораздо хуже. Состояние весьма запущено. Требуется принципиально иной подход к лечению.
    Re[17]: Идеологически правильный мегарулез
    От: Amidlokos Россия  
    Дата: 28.06.05 13:55
    Оценка:
    Здравствуйте, Трурль, Вы писали:

    Т>Оверхед — все, что не относится к делу.


    К какому делу? Делу коммунистической партии?

    Только вот не надо ерунды с "делом", а то получите симметричный ответ, что там "не по делу" во всяких оберонах (и я уже вижу, как он будет выглядеть — скажем, получается чудная куча звёзд в цикле WHILE с нестандартным выходом — см. в теме). Анализируете язык — вот и анализируйте. Как вам такое:

    int a[10];for(int i=0;i<10;i++)a[i]=i;


    (специально пишу в том же беспробельно-минималистическом стиле)
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[14]: Народ упорно не врубается
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 28.06.05 14:12
    Оценка:
    Здравствуйте, Sergey J. A., Вы писали:

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


    MN>>>Даже смотреть не буду (трафик не резиновый) — уверен, что не помогло !


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


    SJA>Я бы даже сказал, структурный подход к лечению


    А лечение будет иметь точки прерывания или завершения? И сколько?
    Re[10]: Идеологически правильный мегарулез
    От: Пацак Россия  
    Дата: 28.06.05 20:50
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>!(a < 10) — ЗАВЕРШАЕТ

    СГ>break — ЗАВЕРШАЕТ!!!!!!!!!!!!!!!!!!!!!!!!!
    СГ>goto на конец — ЗАВЕРШАЕТ

    СГ>return — ПРЕРЫВАЕТ

    СГ>throw куда подальше — ПРЕРЫВАЕТ
    СГ>goto куда подальше — ПРЕРЫВАЕТ
    СГ>assert — ПРЕРЫВАЕТ
    СГ>...

    Я тоже так умею:

    !(a < 10) — ЗАВЕРШАЕТ
    break — ПРЕРЫВАЕТ!!!!!!!!!!!!!!!!!!!!!!!!!
    return — ЗАВЕРШАЕТ
    throw куда подальше — ПРЕРЫВАЕТ
    и т. д....


    Детский сад, честное слово. Вы таки объяснить можете, чем одно от другого отличается? Про "выполняется или нет следующая команда" рассказывать не надо: вот здесь, например, она вполне себе выполняется в обоих случаях:

    LOOP
        WHILE 1<2 DO
        IF 3<4 THEN EXIT END
        END
    END
    A := B;


    while (1<2) {
        if (3<4) break;
    }
    a = b;


    Ку...
    Re[5]: Идеологически правильный мегарулез
    От: Пацак Россия  
    Дата: 28.06.05 21:11
    Оценка:
    Здравствуйте, Socrat, Вы писали:

    S>

    S>"КРЯК!" — сказала пила.
    S>"То-то же!!!" — сказали суровые сибирские лесорубы!



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

    Ку...
    Re[16]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 29.06.05 03:08
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:

    A>Кто сказал, что вызов close() будет удачным?


    А delete?

    A>И уж простите меня, КТО вам сказал, что Release() удаляет объект?! Этот кто-то врал и не краснел. См. MSDN.


    Ну если говорить точно, он _может_ удалить объект. Но я нигде и не говорил, что он удаляет объект. Я всего лишь говорил, что противоположные по смыслу действия должны обозначаться противоположными по смыслу словами. Может, Release() на самом деле и не удаляет объект (наверняка мы этого знать не можем), но этот метод образует логическую пару с созданием объекта (CreateInstance()). Такую же пару образуют new и delete, но в отличие от Create/Release эти слова не противоположны по смыслу (разве что в сознании, испорченном C++), и к тому же вообще из разных грамматических категорий.
    Re[24]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 29.06.05 03:08
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>Ну возьмем лучше RegOpenKey. Принцип тот же самый.


    А что, ключ реестра — это объект ядра? К тому же тезис о глаголах, обознающих действия создания/открытия и о противоположных словах для противоположных действий эта функция только подтверждает.
    Re[14]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 29.06.05 03:08
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:

    C>>>ЗЫ: как смешно читать нападки на С++


    F>>Форум такой, так что стараемся.


    A>Спасибо, у вас получается — коллеги улыбаются


    Главное, самому весело.
    Re[18]: Идеологически правильный мегарулез
    От: Трурль  
    Дата: 29.06.05 04:52
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:


    A> Как вам такое:


    A>
    A>int a[10];for(int i=0;i<10;i++)a[i]=i;
    A>


    A>(специально пишу в том же беспробельно-минималистическом стиле)


    Асимметричный ответ
    a:!10
    Re[17]: Синтаксический оверхед - Новая порция
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 29.06.05 04:52
    Оценка:
    Здравствуйте, faulx, Вы писали:
    F>Ну если говорить точно, он _может_ удалить объект. Но я нигде и не говорил, что он удаляет объект. Я всего лишь говорил, что противоположные по смыслу действия должны обозначаться противоположными по смыслу словами. Может, Release() на самом деле и не удаляет объект (наверняка мы этого знать не можем), но этот метод образует логическую пару с созданием объекта (CreateInstance()). Такую же пару образуют new и delete, но в отличие от Create/Release эти слова не противоположны по смыслу (разве что в сознании, испорченном C++), и к тому же вообще из разных грамматических категорий
    А с каких это пор у нас CreateInstance противоположно по смыслу Release? Не пора ли заглянуть в словарь?
    Парой к CreateInstance была бы, очевидно, DeleteInstance. Парой к Release — Lock. А парой к AddRef (которая на самом деле парная к Release в Com — CreateInstance штука неспаренная) была бы RemoveRef.
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[14]: Идеологически правильный мегарулез
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 29.06.05 04:53
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:

    A>P.S. Mr. None, только на мою фразу про "никто не понимает" обижаться не нужно Сгоряча сказалось.


    В следующий раз досчитайте до 10, прежде чем горячиться и перечтите всю ветку дискуссии.

    A>Ведь правда же — пример, в котором указатель не отличают от стекового объекта... Нехорошо это даже для флейма


    Отличий между указателем (именно указетелем, а не объектом, на который он указывает) и стековым объектом POD-типа нет. Потому что указатель такой же POD-тип, подчинённый тем же правилам поведения.
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[14]: Народ упорно не врубается
    От: Privalov  
    Дата: 29.06.05 04:56
    Оценка:
    Здравствуйте, Sergey J. A., Вы писали:

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


    SJA>Я бы даже сказал, структурный подход к лечению


    Может, это и хороший способ, только с принципиальными отличиями от традиционных методов не все ясно. Лечение подобным? Нет, здесь что-то совсем другое требуется. А вот что... В общем, тема для хорошего флейма...
    Re[18]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 29.06.05 05:01
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>А с каких это пор у нас CreateInstance противоположно по смыслу Release? Не пора ли заглянуть в словарь?

    S>Парой к CreateInstance была бы, очевидно, DeleteInstance. Парой к Release — Lock. А парой к AddRef (которая на самом деле парная к Release в Com — CreateInstance штука неспаренная) была бы RemoveRef.

    К счастью, антонимы неоднозначны. К одному слову может существовать несколько противоположных. Скажем, в вашем же примере — почему DeleteInstance, а не DestroyInstance? Так что в словарь заглядывать рано.

    Что парной к Release() является AddRef() я, естественно, знаю. Но ведь CreateInstance() вызывает AddRef(), разве нет? И "паттерн" использования COM-объекта чаще всего именно такой: создать по CreateInstance(), поработать с ним и освободить по Release().
    Re[11]: Народ упорно не врубается
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 29.06.05 05:19
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    MN>>Или вы утверждаете, что в обероне вы обойдётесь без последней проверки? Извините, в силу своего не очень маленького опыта в программировании не поверю в это!


    СГ>Вы путаете. Цикл WHILE гарантирует лишь то, что выражение "str[i] != ch || str[i] != 0" будет ложным после его завершения (если он завершиться конечно когда-нибудь). Больше он ничего не гарантирует. То что это выражение само в свою очередь состоит из нескольких — совершенно другой вопрос.


    Вы русский язык понимаете вообще? Вам были заданы простейшие вопросы, вы можете на них ответить предельно просто: да или нет.

    1)
    int i = 0;
    while(str[i] != ch || str[i] != 0) i++;
    if(str[i] == 0) // символ не найден
    else // символ найден

    Реализация подобного алгоритма на Обероне будет содержать проверку результата завершения в конце (и не надо дискуссий на тему, что строки в Обероне реализованы по другому): да или нет?

    2) Можно подобный алгоритм в Обероне реализовать иным способом без проверки завершения в конце: да или нет?

    3)
    long fact = 1;
    int i = 0;
    for(i = 1; i < 10; i++) fact *= i;
    if(i < 10)
    {
        // по какой-то причине цикл не выполнился до конца...
    }

    Вы всегда в C++ делаете подобную проверку на причину завершения в конце цикла, контекст которого вы контролируете и который не содержит явно вставленых команд прерывания: да или нет?
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[19]: Синтаксический оверхед - Новая порция
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 29.06.05 05:33
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>К счастью, антонимы неоднозначны. К одному слову может существовать несколько противоположных. Скажем, в вашем же примере — почему DeleteInstance, а не DestroyInstance? Так что в словарь заглядывать рано.

    Потому, что антонимом к DestroyInstance является ConstructInstance.

    F>Что парной к Release() является AddRef() я, естественно, знаю. Но ведь CreateInstance() вызывает AddRef(), разве нет?

    Неважно, кто кого вызывает. Иначе мы так до чего угодно договоримся. От того, что CreateInstance вызывает парную к Release функцию, она сама парной не становится.
    F>И "паттерн" использования COM-объекта чаще всего именно такой: создать по CreateInstance(), поработать с ним и освободить по Release().
    А какое отношение имеет паттерн использования COM объекта? В него обычно входит еще много других вызовов. У CreateInstance пары нет.
    Теоретически, можно считать, что есть приватная DeleteInstance, которая вызывается из Release при достижении нулевого количества ссылок.
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[19]: Синтаксический оверхед - Новая порция
    От: Amidlokos Россия  
    Дата: 29.06.05 07:41
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>Что парной к Release() является AddRef() я, естественно, знаю. Но ведь CreateInstance() вызывает AddRef(), разве нет? И "паттерн" использования COM-объекта чаще всего именно такой: создать по CreateInstance(), поработать с ним и освободить по Release().


    Спасибо хоть "чаще всего", а не "всегда"...

    Не знаю как у кого, но лично мне практически при каждом серьёзном использовании COM приходится несколько раз ручками вызывать AddRef() при передаче указателей на COM-объекты. Конечно, это не слишком актуально для "одноразовых" объектов, но когда объект глобальный и длительного использования — приходится для надёжности. Только так есть гарантия, что все экземпляры классов и все потоки не получат "мусор", уже удалённый кем-то.

    А в конце работы, кстати, в отладочной версии всегда ставлю проверку и вывод значения, возвращаемого Release(). Вот такое оно бесполезное.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[15]: Идеологически правильный мегарулез
    От: Amidlokos Россия  
    Дата: 29.06.05 07:41
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

    A>>P.S. Mr. None, только на мою фразу про "никто не понимает" обижаться не нужно Сгоряча сказалось.


    MN>В следующий раз досчитайте до 10, прежде чем горячиться и перечтите всю ветку дискуссии.


    for (int i = 1; i <= 10; i++) printf("%i\n", i);


    MN>Отличий между указателем (именно указетелем, а не объектом, на который он указывает) и стековым объектом POD-типа нет. Потому что указатель такой же POD-тип, подчинённый тем же правилам поведения.


    Верно. Но это же УКАЗАТЕЛЬ.

    А у меня, кстати, вообще не компилится никакой пример с пропущенным стековым объектом. Студия 7.1 слопала только примитивный тип (int и тот самый указатель), да и то изматерилась warning-ами и assert-ами. На любой класс, даже на такой:

    class a
    {
    a() {}
    ~a() {}
    }


    Ругалась ошибками "initialization of 'two' is skipped by 'goto lbl'".
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[11]: Идеологически правильный мегарулез
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.06.05 08:23
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    П>Детский сад, честное слово. Вы таки объяснить можете, чем одно от другого отличается? Про "выполняется или нет следующая команда" рассказывать не надо: вот здесь, например, она вполне себе выполняется в обоих случаях:

    П>
    П>LOOP
    П>    WHILE 1<2 DO
    П>    IF 3<4 THEN EXIT END
    П>    END
    П>END
    П>A := B;
    П>


    П>
    П>while (1<2) {
    П>    if (3<4) break;
    П>}
    П>a = b;
    П>

    П>

    Тяжелый случай. Бывает хуже но реже. Объясняю на пальцах A := B; — это инструкция следующая после LOOP она выполняется потому, что EXIT завершает цикл LOOP.

    LOOP
      WHILE 1<2 DO
        IF 3<4 THEN EXIT END
      END;
      B := C
    END;
    A := B

    Следующей после цикла WHILE инструкцией будет B := C и вот она-то никогда не выполнится, так как этот цикл WHILE никогда не будет завершен. Он будет прерван LOOP-ным EXIT-ом.

    P. S. break — завершает, а не прерывает. Прерывает, например, return.
    Re[16]: Идеологически правильный мегарулез
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 29.06.05 08:25
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:

    MN>>Отличий между указателем (именно указетелем, а не объектом, на который он указывает) и стековым объектом POD-типа нет. Потому что указатель такой же POD-тип, подчинённый тем же правилам поведения.


    A>Верно. Но это же УКАЗАТЕЛЬ.


    И что?


    A>А у меня, кстати, вообще не компилится никакой пример с пропущенным стековым объектом. Студия 7.1 слопала только примитивный тип (int и тот самый указатель), да и то изматерилась warning-ами и assert-ами. На любой класс, даже на такой:


    A>Ругалась ошибками "initialization of 'two' is skipped by 'goto lbl'".


    Здесь подробно
    Автор: Mr. None
    Дата: 29.06.05
    .
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[14]: Идеологически правильный мегарулез
    От: Кодт Россия  
    Дата: 29.06.05 08:38
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

    MN>А теперь к сути дискуссии, поскольку вы, судя по всему, её не поняли. Кодт утверждал, что правильный компилятор не позволит перескочить (goto) через определение локальных переменых. Однако, согласно пункту 6.7/3 стандарта C++ — это не так:

    MN>It is possible to transfer into a block, but not in a way that bypasses declarations with initialization. A program
    MN>that jumps77) from a point where a local variable with automatic storage duration is not in scope to a point where it is in scope is illformed unless the variable has POD type (3.9) and is declared without an initializer (8.5).
    MN>[Example:

    MN>void f()
    MN>{
    MN>    // ...
    MN>    goto lx; // illformed: jump into scope of a
    MN>    // ...
    MN>ly:
    MN>    X a = 1;
    MN>    // ...
    MN>lx:
    MN>    goto ly; // OK, jump implies destructor
    MN>    // call for a followed by construction
    MN>    // again immediately following label ly
    MN>}

    MN>—end example]


    То есть, насколько я понял,
    void foo() {
      ...
      goto after_x; // нет проблем: x не инициализируется
      .../*1*/
      int x;
      .../*2*/
    after_x:;
      ...
      goto after_y; // а вот за это - бьём по пальцам
      ...
      int y = 123;
      ...
    after_y:;
      ...
    }

    И в этом есть своя правда: С/С++ позволяет иметь дело с неинициализированными POD-переменными, так что, достигнув точки after_x прямым путём (через точку объявления x), мы имеем право на мусор. То есть, это не отличается от
    void foo() {
      int x; // объявили переменную в начале функции - как это принято в С
      ...
      goto after_x;
      .../*1*/
      // начиная с этого места, x упоминается в коде
      .../*2*/ // возможно, где-то здесь мы делали присваивание
    after_x:;
      ...
    }
    Перекуём баги на фичи!
    Re[8]: FOR
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.06.05 08:39
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    П>
    П>step := get_step();
    П>i := 0;
    П>LOOP 
    П>    IF i >= max_level THEN EXIT END;
    П>    sound_level(i);
    П>    i := i + step;
    П>    IF manual_interrupt() THEN EXIT END;
    П>END
    П>


    Вы забыли проверить истинность выражения "step > 0"
    step := GetStep();
    IF (step > 0) & (maxLevel > i0) THEN
      i := i0;
      REPEAT SoundLevel(i); INC(i, step) UNTIL (i >= maxLevel) OR ManualInterrupt()
    END
    Re[12]: Идеологически правильный мегарулез
    От: Sergey J. A. Беларусь  
    Дата: 29.06.05 08:42
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>P. S. break — завершает, а не прерывает. Прерывает, например, return.


    Да не. break прерывает, а не завершает. Он так и переводится — прервать.
    Завершить будет finish, complete.

    Вот, если бы было слово finish, а не break, ваш выпад имел бы какой-то смысл.
    while(i < x)
    {
        if(a)
            finish;
    }


    Так что, запомните. break прерывает, а не завершает !
    Я — свихнувшееся сознание Джо.
    Re[16]: Идеологически правильный мегарулез
    От: jazzer Россия Skype: enerjazzer
    Дата: 29.06.05 08:52
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:

    MN>>Отличий между указателем (именно указетелем, а не объектом, на который он указывает) и стековым объектом POD-типа нет. Потому что указатель такой же POD-тип, подчинённый тем же правилам поведения.


    A>Верно. Но это же УКАЗАТЕЛЬ. :???:


    т.е. объект POD-типа. Что за низкопоклонство перед указателями? :)

    A>А у меня, кстати, вообще не компилится никакой пример с пропущенным стековым объектом. Студия 7.1 слопала только примитивный тип (int и тот самый указатель), да и то изматерилась warning-ами и assert-ами. На любой класс, даже на такой:


    A>
    A>class a
    A>{
    A>a() {}
    A>~a() {}
    A>}
    A>


    A>Ругалась ошибками "initialization of 'two' is skipped by 'goto lbl'".


    Потому что этот класс — не POD-тип, так как имеет определенный пользователем конструктор.
    Вот если ты его объявишь как-нть так:
    struct a
    {
       int a;
       double b;
    };

    — это будет POD-типом и компилятор это пропустит.
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[15]: Идеологически правильный мегарулез
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 29.06.05 09:01
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Здравствуйте, Mr. None, Вы писали:


    MN>>А теперь к сути дискуссии, поскольку вы, судя по всему, её не поняли. Кодт утверждал, что правильный компилятор не позволит перескочить (goto) через определение локальных переменых. Однако, согласно пункту 6.7/3 стандарта C++ — это не так:

    MN>>...

    К>То есть, насколько я понял,

    К>...
    К>И в этом есть своя правда: С/С++ позволяет иметь дело с неинициализированными POD-переменными, так что, достигнув точки after_x прямым путём (через точку объявления x), мы имеем право на мусор. То есть, это не отличается от
    К>...

    Абсолютно верно . Но сермяжная правда жизни такова, что например MS VC, включая VC 7.1, на эту самую приписку относительно is declared without an initializer благополучно забивает и позволяет перескакивать через определения скалярных, вещественных типов и указателей, даже если они имеют иницилизатор. Как пример перескакивание через TestClass *ptr = new TestClass();. В итоге ptr мы видим, но забит он фигнёй и нет никакой возможности проверить был он проинициализирован или нет . Согласен, что это явное не соответствие стандарту, но поскольку этот компилятор сильно распространён с этим фактом приходится считаться . Именно с этим и было связано моё заявление, относительно того, что я не берусь предсказать, что будет если выполнить такой прыжок.
    А в остальном вы правы — здравый компилятор такое не пропустит, а перепрыгивание скалярных типов без инициализаторов не приведёт ни к каким катострофическим последствиям... так что
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[17]: Идеологически правильный мегарулез
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 29.06.05 09:08
    Оценка:
    Здравствуйте, jazzer, Вы писали:

    A>>
    A>>class a
    A>>{
    A>>a() {}
    A>>~a() {}
    A>>}
    A>>


    A>>Ругалась ошибками "initialization of 'two' is skipped by 'goto lbl'".


    J>Потому что этот класс — не POD-тип, так как имеет определенный пользователем конструктор.

    Не конструктор, а деструктор . Наличие конструктора не превращает класс в POD-тип:

    Стандарт, 9.4
    ...A POD-struct is an aggregate class that has no nonstatic data members of type pointer to member, non-POD-struct,
    non-POD-union (or array of such types) or reference, and has no userdefined copy assignment operator and no userdefined destructor...

    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[12]: Идеологически правильный мегарулез
    От: Пацак Россия  
    Дата: 29.06.05 09:14
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Тяжелый случай. Бывает хуже но реже. Объясняю на пальцах A := B; — это инструкция следующая после LOOP она выполняется потому, что EXIT завершает цикл LOOP.


    Случай и правда тяжелый. А какая инструкция в этом коде следует за WHILE? Про END не вспоминать — это не инструкция, это признак конца теля цикла.

    СГ>Следующей после цикла WHILE инструкцией будет B := C и вот она-то никогда не выполнится, так как этот цикл WHILE никогда не будет завершен. Он будет прерван LOOP-ным EXIT-ом.


    Это-то понятно. Но вернемся к исходной задаче —

    LOOP
      WHILE bool DO
        IF 3<4 THEN EXIT END
        bool := false;
      END;
    END;
    IF Not bool THEN print("We did it!");


    Непосредственно после WHILE стоит проверка его условия на ложность. Условие не срабатывает. Таким образом в обероне можно создать условия, при которых после окончания (не суть важно — "завершения" или "прерывания") его условие все еще будет =TRUE, т.е. не глядя на код внутри и вокруг цикла полагаться на это, увы, нельзя. Равно как и в C++. Предвижу возражение "это в случае "прерывания" нельзя, а в случае "нормального" завершения — можно". Увы, нет:

    WHILE random(0,1) > 0.5 DO
        ...
    END;
    IF random(0,1) <= 0.5 THEN print("We did it!");


    В итоге — грабли ничем не лучше, чем в C++ с break'ом.
    Ку...
    Re[14]: Народ упорно не врубается
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.06.05 09:24
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

    MN>>>Вы русский язык понимаете вообще? Вам были заданы простейшие вопросы, вы можете на них ответить предельно просто: да или нет.


    СГ>>Да.


    СГ>>(В смысле русский язык понимаю)


    MN>Вы как всегда в своём амплуа. Если ответы на вопросы угрожают вашей теории, вы на них не отвечаете... Вобщем продолжать дискуссию считаю абсолютно бесполезно. Потому что вы не умеете слушать и отвечать на вопросы аппонента. А всё остальное смысла не имеет.


    Я просто не отвечаю на вопросы ответы на которые и так очевидны, за исключением некоторых случаев (например сейчас). Собеседник должен это понимать и формулировать свои якобы вопросы не как вопросы, а как безусловные утверждения, повествования. Вместо якобы вопроса "В **** языке программирования 2 + 2 тоже равно 4. Вы можете ответить предельно просто Да или Нет?" надо писать безусловное утверждение "В **** языке программирования 2 + 2 тоже равно 4", не требующее какого-либо подтверждения. Ведь если это не так, то с большой вероятностью кто-то это сразу же опровергнет, но если это так, то экономя время и трафик ответа=подтверждения дано не будет.
    Re[10]: FOR
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.06.05 09:28
    Оценка:
    Здравствуйте, Пацак, Вы писали:

    П>Ма-а-аленькая тонкость. Если в моем коде maxLevel изначально = 0 (звук выключен), то цикл не выполнится ни разу. В вашем — выполнится один раз.


    А если повнимательнее посмотреть на мой код
    step := GetStep();
    IF (step > 0) & (maxLevel > i0) THEN
      i := i0;
      REPEAT SoundLevel(i); INC(i, step) UNTIL (i >= maxLevel) OR ManualInterrupt()
    END

    и увидеть сделанную в начале проверку "maxLevel > i0", то цикл тоже не выполнится ни разу.
    Re[14]: Идеологически правильный мегарулез
    От: Пацак Россия  
    Дата: 29.06.05 09:43
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    П>>после окончания (не суть важно — "завершения" или "прерывания")

    СГ>В своем сообщении я показал как раз обратное — важно!

    Примеры (в частности последний, с вызовом функции в условии цикла) так и будут игнорироваться?
    Минус вам за это.
    Ку...
    Re[17]: Идеологически правильный мегарулез
    От: Amidlokos Россия  
    Дата: 29.06.05 10:53
    Оценка:
    Здравствуйте, jazzer, Вы писали:

    Бррр, туплю. Простите грешного. Не на ту тему вообще отвечал .
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re: Синтаксический оверхед
    От: eandr  
    Дата: 29.06.05 11:06
    Оценка:
    Здравствуйте, Сергей Губанов.

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

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


    Абсолютная глупость.
    Re[20]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 29.06.05 11:42
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Потому, что антонимом к DestroyInstance является ConstructInstance.


    Антоним для практически любого слова, если он существует, не единственный. Так что то, что вы написали — правда, но не вся правда. Также антонимами могут быть CreateInstance, MakeInstance, BuildInstance и еще куча других.

    F>>И "паттерн" использования COM-объекта чаще всего именно такой: создать по CreateInstance(), поработать с ним и освободить по Release().

    S>А какое отношение имеет паттерн использования COM объекта?

    Потому что программист пишет именно в терминах этого паттерна (не всегда, конечно).

    S>В него обычно входит еще много других вызовов. У CreateInstance пары нет.

    S>Теоретически, можно считать, что есть приватная DeleteInstance, которая вызывается из Release при достижении нулевого количества ссылок.

    Ну вот видите, сами нашли ответ.

    Вообще, все эти рассуждения никак не опровергают тех тезисов, которые я здесь продвигаю, и которые повторю еще раз:

    1. Действие должно обозначаться глаголом.

    2. Противоположные по смыслу действия должны обозначаться противоположными по смыслу словами (одной и той же грамматической категории).

    Найдется ли смелый человек, который прямо выступит против этих тезисов, без увода разговора в сторону? Например, прямо скажет: тезис 1 неправильный, действие может обозначаться как угодно, например, существительным, наречием, предлогом и т.п. (Естественно, весь разговор ведется в рамках языков программирования). Или скажет про тезис 2: он неверный, противоположные действия могут обозначаться синонимами (создать объект с помощью ключевого слова yes, а удалить — ключевым словом of_course).
    Re[16]: Народ упорно не врубается
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 29.06.05 14:35
    Оценка:
    Здравствуйте, Mr. None, Вы писали:

    MN> Я жду вашего ответа до завтрашнего утра


    Можете не ждать. Ложитесь спать спокойно.
    Re[3]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 29.06.05 14:48
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    E>>Абсолютная глупость.


    СГ>Однако же Вы зарегистрировались на этом форуме и первое Ваше сообщение посвятили именно этой абсолютной глупости. Задело за живое, я полагаю...


    Скорее всего, твоё эссе уже стало достоянием интернета. Кто-то где-то на полном серьёзе ссылочку тиснул, вот реакция и случилась
    Перекуём баги на фичи!
    Re[4]: Синтаксический оверхед
    От: Mamut Швеция http://dmitriid.com
    Дата: 29.06.05 15:14
    Оценка:
    СГ>>Однако же Вы зарегистрировались на этом форуме и первое Ваше сообщение посвятили именно этой абсолютной глупости. Задело за живое, я полагаю...

    К>Скорее всего, твоё эссе уже стало достоянием интернета. Кто-то где-то на полном серьёзе ссылочку тиснул, вот реакция и случилась


    Это, наверное, как и с приснопамятным распараллеливанием кода на геймдеве (или где он там был). Кстати, а Оберон поддерживает распараллеливание кода?


    dmitriid.comGitHubLinkedIn
    Re[21]: Синтаксический оверхед - Новая порция
    От: Amidlokos Россия  
    Дата: 29.06.05 16:34
    Оценка:
    Здравствуйте, faulx, Вы писали:

    A>>Не знаю как у кого, но лично мне практически при каждом серьёзном использовании COM приходится несколько раз ручками вызывать AddRef() при передаче указателей на COM-объекты. Конечно, это не слишком актуально для "одноразовых" объектов, но когда объект глобальный и длительного использования — приходится для надёжности. Только так есть гарантия, что все экземпляры классов и все потоки не получат "мусор", уже удалённый кем-то.


    F>Как-то звучит подозрительно, видимо, я не очень хорошо понимаю? Что значит "для надежности"? А присваивание по два раза для надежности вы не пишете?


    Не пишу, да и в чушь не пишите... Вызов AddRef() гарантирует, что СОМ-объект будет удалён только после освобождения всеми использующими его экземлярами классов в моей программе (соответственно, он освобождается в деструкторах). А также даёт мне возможность не реализовывать хитрую сложную логику ("а нет ли у нас сейчас кого-то, кому ЭТО ещё может понадобиться? Освобождать ли объект?"), а просто написать obj->Release() по мере необходимости.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[2]: Теория
    От: Аноним  
    Дата: 29.06.05 16:51
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>Наткнулся на следующее выражение в книге "Прорри Гаттер. Двенадцать повигов Сена Аесли. Подвиги 9-12":

    M>

    M>Я люблю вовсе не расчеты, а рассуждения. Настоящей, чистой теории не нужны ни расчеты, ни наблюдения, ни подтверждения опытными фактами. А самое главное – у теории не должно быть практических применений, иначе она не будет теорией


    M>Эту фразу можно применить к доброй половине высказываний в этой ветке


    А еще есть мысль, что

    Нет ничего более практичного чем хорошая теория

    Хорошая теория — это мощный инструмент практика.
    Но данный топик — это не тот случай
    Re[2]: Теория
    От: Пацак Россия  
    Дата: 29.06.05 17:02
    Оценка:
    Здравствуйте, Mamut, Вы писали:

    M>

    M>Я люблю вовсе не расчеты, а рассуждения. Настоящей, чистой теории не нужны ни расчеты, ни наблюдения, ни подтверждения опытными фактами. А самое главное – у теории не должно быть практических применений, иначе она не будет теорией




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


    (с) Станислав Лем "Как уцелела вселенная".
    Ку...
    Re[21]: Синтаксический оверхед - Новая порция
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 30.06.05 03:06
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>Антоним для практически любого слова, если он существует, не единственный. Так что то, что вы написали — правда, но не вся правда. Также антонимами могут быть CreateInstance, MakeInstance, BuildInstance и еще куча других.

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

    F>Потому что программист пишет именно в терминах этого паттерна (не всегда, конечно).

    Это бред. Программист пишет в рамках и совершенно других паттернов. Множество объектов он получает вовсе не при помощи CreateInstance. И что теперь, объявлять IConnection.CreateCommand обратной к Release? Не слишком ли много антонимов к одному Release получится?
    F>Ну вот видите, сами нашли ответ.
    Нет.
    F>Вообще, все эти рассуждения никак не опровергают тех тезисов, которые я здесь продвигаю, и которые повторю еще раз:
    F>1. Действие должно обозначаться глаголом.
    F>2. Противоположные по смыслу действия должны обозначаться противоположными по смыслу словами (одной и той же грамматической категории).
    Ну то есть COM неверен, так? Ведь там противоположные по смыслу действия не обозначаются противоположными по смыслу словами.
    F>Найдется ли смелый человек, который прямо выступит против этих тезисов, без увода разговора в сторону? Например, прямо скажет: тезис 1 неправильный, действие может обозначаться как угодно, например, существительным, наречием, предлогом и т.п. (Естественно, весь разговор ведется в рамках языков программирования). Или скажет про тезис 2: он неверный, противоположные действия могут обозначаться синонимами (создать объект с помощью ключевого слова yes, а удалить — ключевым словом of_course).
    Тезис 1 неправильный, действие может обозначаться как угодно, например существительным, наречием, пригагательным, предлогом. Главное — чтобы применение было очевидным и не вызывало отторжения.
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[22]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 30.06.05 03:13
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:

    A>Не пишу, да и в чушь не пишите... Вызов AddRef() гарантирует, что СОМ-объект будет удалён только после освобождения всеми использующими его экземлярами классов в моей программе (соответственно, он освобождается в деструкторах). А также даёт мне возможность не реализовывать хитрую сложную логику ("а нет ли у нас сейчас кого-то, кому ЭТО ещё может понадобиться? Освобождать ли объект?"), а просто написать obj->Release() по мере необходимости.


    Ну это-то понятно, на то AddRef() и нужен. Просто ваше первоначальное описание процесса выглядело так, словно вы получаете объект, делаете на него подряд штук пять AddRef()-ов (для надежности ) и только потом работаете. Не сочтите за наезд
    Re[19]: Идеологически правильный мегарулез
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 30.06.05 03:15
    Оценка:
    Здравствуйте, jazzer, Вы писали:

    J>Здравствуйте, Mr. None, Вы писали:


    J>>>Потому что этот класс — не POD-тип, так как имеет определенный пользователем конструктор.

    MN>>Не конструктор, а деструктор . Наличие конструктора не превращает класс в POD-тип:

    J>Ты хотел сказать, в не-POD-тип?


    Ага...

    J>

    MN>>Стандарт, 9.4
    MN>>...A POD-struct is an aggregate class that has no nonstatic data members of type pointer to member, non-POD-struct,
    MN>>non-POD-union (or array of such types) or reference, and has no userdefined copy assignment operator and no userdefined destructor...


    J>Превращает.

    J>

    J>Стандарт, 8.5.1/1
    J>An aggregate is an array or a class (clause 9) with no user-declared constructors (12.1), no private or protected non-static data members (clause 11), no base classes (clause 10), and no virtual functions (10.3).


    Странно... выходит если я добавлю закрытое поле — это уже будет не-POD-тип... Ну ладно — комитету по стндартизации виднее...
    Но конкретно в данном случае (goto через определение) студия реагирует ошибкой именно на деструктор — конструктор ей по барабану, на него она реагирует предупреждением...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[25]: Синтаксический оверхед - Новая порция
    От: Дарней Россия  
    Дата: 30.06.05 03:41
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>А что, ключ реестра — это объект ядра?


    А что, он чем то принципиально отличается от файла? Все те же самые хэндлы, никакой разницы я не вижу

    F>К тому же тезис о глаголах, обознающих действия создания/открытия и о противоположных словах для противоположных действий эта функция только подтверждает.


    Просто здесь так принято
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[22]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 30.06.05 04:28
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Оттенки смысла у разных глаголов разные. Если уж подбирать пару, то именно противоположностей, а не "почти противоположностей". Дискуссия на эту тему была в "Проблемах перевода".


    Естественно, оттенки разные, потому и антонимов много (и синонимы не означают совершенно одного и того же). Выбор, что же является "точной противоположностью" среди множества "почти противоположностей" — зачастую вопрос вкуса, привычки и традиции. И по большому счету не так уж важен (особенно для нас, у кого английский язык не родной). Гораздо важнее следование сделанному выбору.

    F>>Потому что программист пишет именно в терминах этого паттерна (не всегда, конечно).

    S>Это бред. Программист пишет в рамках и совершенно других паттернов. Множество объектов он получает вовсе не при помощи CreateInstance. И что теперь, объявлять IConnection.CreateCommand обратной к Release? Не слишком ли много антонимов к одному Release получится?

    Вам что, жалко? Паттернов, конечно, много, но тот, о котором мы говорим, описывается простой схемой: произвести действие, в результате которого в наше распоряжение поступит объект (это может произойти в результате CreateInstance(), IConnection.CreateCommand(), AddRef() и еще кучи других), поработать с ним, после чего произвести действие, в результате которого система, с которой мы работаем (в данном случае COM) будет считать, что эта "единица владения" объектом (в случае COM реализованная как счетчик ссылок) нам больше не нужна. Эти два действия описываются глаголами, противоположными по смыслу. Мои тезисы подтверждаются.

    F>>Вообще, все эти рассуждения никак не опровергают тех тезисов, которые я здесь продвигаю, и которые повторю еще раз:

    F>>1. Действие должно обозначаться глаголом.
    F>>2. Противоположные по смыслу действия должны обозначаться противоположными по смыслу словами (одной и той же грамматической категории).
    S>Ну то есть COM неверен, так? Ведь там противоположные по смыслу действия не обозначаются противоположными по смыслу словами.

    По крайней мере они обозначаются глаголами с более-менее противоположным смыслом. Хотя, конечно в паре AddRef/Release шероховатость есть (Release() можно было бы назвать RemoveRef() или UnRef()), тем не менее, она гораздо меньше, чем в паре new/delete.

    S>Тезис 1 неправильный, действие может обозначаться как угодно, например существительным, наречием, пригагательным, предлогом. Главное — чтобы применение было очевидным и не вызывало отторжения.


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

    Кстати, а второй тезис верный? Тогда в паре new/delete все равно есть несообразность — слова разных грамматических категорий и не противоположные по смыслу.
    Re[23]: Синтаксический оверхед - Новая порция
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 30.06.05 05:12
    Оценка:
    Здравствуйте, faulx, Вы писали:

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


    A>>Не пишу, да и в чушь не пишите... Вызов AddRef() гарантирует, что СОМ-объект будет удалён только после освобождения всеми использующими его экземлярами классов в моей программе (соответственно, он освобождается в деструкторах). А также даёт мне возможность не реализовывать хитрую сложную логику ("а нет ли у нас сейчас кого-то, кому ЭТО ещё может понадобиться? Освобождать ли объект?"), а просто написать obj->Release() по мере необходимости.


    F>Ну это-то понятно, на то AddRef() и нужен. Просто ваше первоначальное описание процесса выглядело так, словно вы получаете объект, делаете на него подряд штук пять AddRef()-ов (для надежности ) и только потом работаете. Не сочтите за наезд

    Он имел в виду, что хитрые пацаны могут рисковать не вызывать AddRef для временных ссылок с гарантированно коротким временем жизни. При помощи статического анализа можно доказать для конкретного случая валидность такого поведения; при этом не вызывается дорогостоящая операция интерлокед инкремента/декремента. Внутри циклов это может оказать существенное влияние на производительность. Небезопасность такого подхода в том, что последующие изменения, внесенные в код (например, добавление еще одного потока, работающего с данным объектом), могут привести к потере инвариантов и устареванию результатов того самого статического анализа.
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[24]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 30.06.05 05:34
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Он имел в виду, что хитрые пацаны могут рисковать не вызывать AddRef для временных ссылок с гарантированно коротким временем жизни. При помощи статического анализа можно доказать для конкретного случая валидность такого поведения; при этом не вызывается дорогостоящая операция интерлокед инкремента/декремента. Внутри циклов это может оказать существенное влияние на производительность. Небезопасность такого подхода в том, что последующие изменения, внесенные в код (например, добавление еще одного потока, работающего с данным объектом), могут привести к потере инвариантов и устареванию результатов того самого статического анализа.


    Вроде был, то ли в MFC, то ли просто так, класс, оборачивающий AddRef/Release в конструктор/деструктор? Кстати, а если завернуть COM-объект в обычный shared pointer (возможно, через промежуточный класс), мы разве что-то потеряем (в однопоточном случае, конечно)?
    Re[27]: Синтаксический оверхед - Новая порция
    От: Дарней Россия  
    Дата: 30.06.05 05:46
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>Там не HANDLE, а HKEY. И ключ реестра — не объект ядра.


    Есть точные данные?
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[24]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 30.06.05 05:48
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Я боюсь, что если для тебя глагол "Создать экземпляр" является антонимом глаголу "Отпустить", то дальше дискутировать не о чем.


    "Создать экземпляр" — это не глагол. Понятие создания экземпляра может быть и противоположно понятию "отпустить", зависит от многих факторов. Кстати, почему именно "отпустить"? www.lingvo.ru выдает довольно много вариантов для release, есть из чего выбрать.

    S>Еще раз: new является аналогом CreateInstance в том смысле, что может включать в себя скрытый вызов чего-то с функциональностью create. А может и не включать, если аллокатор ничего не создает, а возвращает готовый объект — главное, чтобы он был новым в том смысле, который заложен в него разработчиком.


    А вызов CreateInstance() обязан всегда создавать новый объект? В чем же разница, и кто неправ? И потом, не так уж важно, что он делает на самом деле — логически вызов new создает новый объект (то, что повторно используется старый — деталь реализации. Ведь память new тоже выделяет, но явно не вставляет в компьютер новые DIMM-ы, а повторно использует уже существующую память). Да еще и конструктор вызывает.

    F>>Приведите, пожалуйста, примеры, когда действие обозначается предлогом, причем это очевидно и не вызывает отторжения. Аналогично для наречия.

    S>
    S>MyObject as IInterface
    S>

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

    Вызов QueryInterface и возможное создание объекта — это деталь реализации. Логически здесь действия не происходит, просто меняется точка зрения на объект. Эдак что угодно можно объявить действием, хоть with в Паскале (тоже, кстати, предлог) или using в C# (в любом из смыслов).

    S>Остальное оставляю в качестве упражнения — мне еще и работать иногда надо.


    То есть ответа нет. Так и запишем.
    Re[28]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 30.06.05 06:01
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    F>>Там не HANDLE, а HKEY. И ключ реестра — не объект ядра.


    Д>Есть точные данные?


    По крайней мере в MDSN их нет в списке объектов ядра. (Но вообще этот список отражает нелегкий путь, по которому двигалась разработка WinAPI )
    Re[25]: Синтаксический оверхед - Новая порция
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 30.06.05 06:14
    Оценка:
    Здравствуйте, faulx, Вы писали:
    F>Вроде был, то ли в MFC, то ли просто так, класс, оборачивающий AddRef/Release в конструктор/деструктор?
    Есть такой класс.
    F>Кстати, а если завернуть COM-объект в обычный shared pointer (возможно, через промежуточный класс), мы разве что-то потеряем (в однопоточном случае, конечно)?
    Конечно потеряем. Завертывание может привести только к удорожанию операции, но никак ее не удешевит.
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[25]: Синтаксический оверхед - Новая порция
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 30.06.05 06:14
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>"Создать экземпляр" — это не глагол. Понятие создания экземпляра может быть и противоположно понятию "отпустить", зависит от многих факторов. Кстати, почему именно "отпустить"? www.lingvo.ru выдает довольно много вариантов для release, есть из чего выбрать.

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

    оффтоп поскипан.
    F>Вызов QueryInterface и возможное создание объекта — это деталь реализации. Логически здесь действия не происходит, просто меняется точка зрения на объект.
    Я проавильно понимаю, что логически в данном контексте означает "можно подтасовать под мою точку зрения"? new, который логически всего лишь возвращает новый объект, значит не устраивает. А as, который выполняет запрос интерфейса, значит не устраивает. Такая логика далеко тебя заведет.
    F>Эдак что угодно можно объявить действием, хоть with в Паскале (тоже, кстати, предлог) или using в C# (в любом из смыслов).
    Совершенно верно. Ну, with мы вряд ли объявим действием, хотя в старые времена оно имело вполне конкретный смысл и действие таки выполнялось. Молодец, пять.
    S>>Остальное оставляю в качестве упражнения — мне еще и работать иногда надо.
    F>То есть ответа нет. Так и запишем.
    А зачем? Ты вон уже и сам привел примеры — with и using
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[26]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 30.06.05 06:31
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    F>>Вроде был, то ли в MFC, то ли просто так, класс, оборачивающий AddRef/Release в конструктор/деструктор?

    S>Есть такой класс.

    Тогда зачем вызывать AddRef/Release руками?

    F>>Кстати, а если завернуть COM-объект в обычный shared pointer (возможно, через промежуточный класс), мы разве что-то потеряем (в однопоточном случае, конечно)?

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

    Я имел в виду, что если мы работаем с COM-объектом из одного потока, то можно делать по крайней мере одно из трех:

    1. Не считать ссылки на него.

    2. Считать их с помощью AddRef/Release

    3. Считать их с помощью, например, boost::shared_pointer

    Если вариант 1 по каким-либо причинам не устраивает, есть ли разница (не в производительности) между вариантами 2 и 3? И если нет, то, как мне кажется, по соображениям той же производительности, лучше использовать вариант 3. Напоминаю, что речь идет об однопоточном приложении. Я прав?
    Re[27]: Синтаксический оверхед - Новая порция
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 30.06.05 06:55
    Оценка:
    Здравствуйте, faulx, Вы писали:
    F>Тогда зачем вызывать AddRef/Release руками?
    Этот вопрос в данном контексте не нужен.
    F>Я имел в виду, что если мы работаем с COM-объектом из одного потока, то можно делать по крайней мере одно из трех:
    F>1. Не считать ссылки на него.
    F>2. Считать их с помощью AddRef/Release
    F>3. Считать их с помощью, например, boost::shared_pointer
    Вариант 1 — это как раз рискованный способ, о небезопасности которого писал Amidlokos.
    F>Если вариант 1 по каким-либо причинам не устраивает, есть ли разница (не в производительности) между вариантами 2 и 3?
    Есть. вариант 3 укорачивает запись, вариант 2 поддерживается везде (напомню, что COM работает не только в С++).
    F> И если нет, то, как мне кажется, по соображениям той же производительности, лучше использовать вариант 3. Напоминаю, что речь идет об однопоточном приложении. Я прав?
    По соображениям производительности вариант 3 гарантированно не лучше, чем вариант 2. Ты не прав.
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[26]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 30.06.05 07:01
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    F>>"Создать экземпляр" — это не глагол. Понятие создания экземпляра может быть и противоположно понятию "отпустить", зависит от многих факторов. Кстати, почему именно "отпустить"? www.lingvo.ru выдает довольно много вариантов для release, есть из чего выбрать.

    S>Ок, нет проблем. Покажи мне вариант из лингвы, противоположный "созданию". Уж не "опубликовать" ли?

    Насчет "опубликовать" — это надо спросить у писателей. Очень может быть Есть и другие варианты, например "сбросить бомбы".

    А если серьезно, то нам трудно рассуждать о значении слов неродного языка. Перевод не дает всего. Даже если пройтись по синонимам release, можно найти много интересного, например dismiss. У него есть значения "распускать (организацию, общество и т.п.)", "отвергать". Уже ближе. В любом случае, даже если мы согласимся, что Release — не точный антоним Create, значения у них лежат в противоположных смысловых полях.

    Однако вспомним, из-за чего возникла дискуссия. Хорошо, пусть у CreateInstance нет противоположного действия. Пусть Release — антоним только к AddRef (с этим-то вы согласны? Впрочем, я уже говорил, что пара AddRef/Release не кажется мне слишком удачной). Мои тезисы, которые я повторял столько раз, что уже устал, эти факты только подтверждают.

    S>оффтоп поскипан.


    Жаль. Не такой это форум, чтобы "оффтопы скипать"

    F>>Вызов QueryInterface и возможное создание объекта — это деталь реализации. Логически здесь действия не происходит, просто меняется точка зрения на объект.

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

    Да ведь все просто. new Object(a, b) заведомо предполагает выполнение некоторого кода — кода конструктора. new не просто возвращает новый объект, он создает его (логически), выполняет конструктор, в котором может быть куча побочных эффектов. Если бы объявление и создание нового объекта были бы разделены, вопросов бы не было:

    Object *a = new Object(...);
    create a;
    a->do();
    delete a;


    Разница же с вашим примером простая: если мы будем думать о new как о декларативной операции, мы напоремся на какую-нибудь неожиданную неприятность гораздо раньше, чем когда мы полагаем декларативной операцией As. Это в первую очередь относится к C++ (а мы именно о нем и говорим), где полагание чего бы то ни было декларативным — очень рискованное занятие.

    Кстати, какой был язык в вашем примере? VB или C#? В любом случае, явно не C++.

    S>А зачем? Ты вон уже и сам привел примеры — with и using


    Это не действия, это инструкции компилятору У меня есть примеры и получше — скажем, лисповский with-open-file. Но это тоже не действие.
    Re[28]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 30.06.05 07:08
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    F>>Тогда зачем вызывать AddRef/Release руками?

    S>Этот вопрос в данном контексте не нужен.

    Этот вопрос был вызван фразой

    приходится несколько раз ручками вызывать AddRef()


    F>>1. Не считать ссылки на него.

    F>>2. Считать их с помощью AddRef/Release
    F>>3. Считать их с помощью, например, boost::shared_pointer
    S>Вариант 1 — это как раз рискованный способ, о небезопасности которого писал Amidlokos.

    Это я понял.

    F>>Если вариант 1 по каким-либо причинам не устраивает, есть ли разница (не в производительности) между вариантами 2 и 3?

    S>Есть. вариант 3 укорачивает запись, вариант 2 поддерживается везде (напомню, что COM работает не только в С++).

    Ну мы же пишем программу, которая использует COM-объект, и пишем, как подразумевается, на C++.

    F>> И если нет, то, как мне кажется, по соображениям той же производительности, лучше использовать вариант 3. Напоминаю, что речь идет об однопоточном приложении. Я прав?

    S>По соображениям производительности вариант 3 гарантированно не лучше, чем вариант 2. Ты не прав.

    Почему? Ведь в boost::shared_ptr (или самодельном умном указателе)

    не вызывается дорогостоящая операция интерлокед инкремента/декремента

    Re[29]: Синтаксический оверхед - Новая порция
    От: Дарней Россия  
    Дата: 30.06.05 07:27
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>>>Там не HANDLE, а HKEY. И ключ реестра — не объект ядра.


    F>По крайней мере в MDSN их нет в списке объектов ядра. (Но вообще этот список отражает нелегкий путь, по которому двигалась разработка WinAPI )


    Что характерно, в этом списке есть
    1. Функции, которые начинаются с Open (и которые действительно открывают! )
    2. Типы, отличные от HANDLE

    Ну и что ты этим доказал?
    Всех излечит, исцелит
    добрый Ctrl+Alt+Delete
    Re[27]: Синтаксический оверхед - Новая порция
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 30.06.05 07:36
    Оценка:
    Здравствуйте, faulx, Вы писали:

    F>А если серьезно, то нам трудно рассуждать о значении слов неродного языка. Перевод не дает всего. Даже если пройтись по синонимам release, можно найти много интересного, например dismiss. У него есть значения "распускать (организацию, общество и т.п.)", "отвергать". Уже ближе. В любом случае, даже если мы согласимся, что Release — не точный антоним Create, значения у них лежат в противоположных смысловых полях.

    Зато нам нетрудно. Я достаточно много читаю технического английского, чтобы с уверенностью судить об оттенках смысла таких терминов. Если тебе это затруднительно, то не стоит и начинать дискуссию о корректности new/delete.

    F>Однако вспомним, из-за чего возникла дискуссия. Хорошо, пусть у CreateInstance нет противоположного действия. Пусть Release — антоним только к AddRef (с этим-то вы согласны? Впрочем, я уже говорил, что пара AddRef/Release не кажется мне слишком удачной). Мои тезисы, которые я повторял столько раз, что уже устал, эти факты только подтверждают.

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


    F>Разница же с вашим примером простая: если мы будем думать о new как о декларативной операции, мы напоремся на какую-нибудь неожиданную неприятность гораздо раньше, чем когда мы полагаем декларативной операцией As.

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

    F>Это в первую очередь относится к C++ (а мы именно о нем и говорим), где полагание чего бы то ни было декларативным — очень рискованное занятие.

    F>Кстати, какой был язык в вашем примере? VB или C#? В любом случае, явно не C++.
    Язык был Delphi.
    Мы говорим о программировании вообще. Не надо замыкаться на С++. А если сильно хочется замкнуться там, то скажи мне, о великий лингвист, какая часть речи соответствует оператору reinterpret_cast?
    S>>А зачем? Ты вон уже и сам привел примеры — with и using
    F>Это не действия, это инструкции компилятору
    В таком случае new — тоже инструкция компилятору.
    ... << RSDN@Home 1.1.4 beta 5 rev. 395>>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[28]: Синтаксический оверхед - Новая порция
    От: faulx  
    Дата: 30.06.05 08:00
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Зато нам нетрудно. Я достаточно много читаю технического английского, чтобы с уверенностью судить об оттенках смысла таких терминов. Если тебе это затруднительно, то не стоит и начинать дискуссию о корректности new/delete.


    Не будем мерятся тем, кто и сколько чего читает. Не думаю, что вы владеете всеми оттенками смысла любого произвольно взятого английского слова. Но на то, чтобы понять, что Create и Release — из противоположных смысловых полей, моего знания английского хватает.

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


    Create, AddRef, Release обозначают действия? Хоть одно из перечисленных в дискуссии действий обозначалось словом, не содержащим глагола, несущего основной смысл? Противоположные действия обозначались противоположными по смыслу словами (сочетаниями слов, если учесть AddRef)? Где же опровержение?

    S>Замечательно. То есть теперь уже скорость напарывания на неожиданность считается аргументом? Ну-ну. С учетом того, что я не могу себе представить таких неприятностей вообще (вылет исключения возможен где угодно), аргументация уже совсем теряет смысл.


    Скорость напарывания — это отражение степени дырявости абстракции. Абстракция new гораздо более дырявая, чем as. Хотя бы потому, что требует delete.

    S>Язык был Delphi.


    Понятно.

    S>Мы говорим о программировании вообще. Не надо замыкаться на С++. А если сильно хочется замкнуться там, то скажи мне, о великий лингвист, какая часть речи соответствует оператору reinterpret_cast?


    Существительному. Но это только подтверждает корявость и непоследовательность C++. new/delete из той же серии.

    S>В таком случае new — тоже инструкция компилятору.


    Нет, это действие, которое может произойти, даже когда последний экземпляр компилятора, которым new был скомпилирован, исчезнет со всех носителей информации во Вселенной
    Re[2]: Синтаксический оверхед
    От: Privalov  
    Дата: 30.06.05 10:15
    Оценка:
    Здравствуйте, Gemel, Вы писали:

    G>Я, например, если язык хоть отдаленно напоминает паскаль никогда не буду на нем писать!!! Работаю в С++Builder 6!


    Вот я не стал бы так категорично. Возьмется, к примеру, твой работодатель поддерживать чью-нибудь систему на паскалеподобном языке и на тебя все технические дела навесит. И что тогда делать будешь?
    Re[10]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 01.07.05 16:37
    Оценка:
    Здравствуйте, ZayatsZ, Вы писали:

    ZZ>Здравствуйте, Дарней, Вы писали:



    Д>>А это идея! Надо просто выпустить клавиатуры а-ля Спектрум, на которых будут нанесены все ключевые слова оберона — IF, THEN, END и т.д. И клавишу Enter спрятать подальше, чтобы поощрить написание кода в "однострочном" стиле.

    ZZ>История развивается по спирали

    Которая скручивается внутрь себя и сжимается в точку.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[13]: Так Вы определитесь
    От: prVovik Россия  
    Дата: 05.07.05 06:47
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:


    A>Да, Сергей... Видно, что никогда у вас не было необходимости к уже созданному дополнительно привинтить мгновенный фоновый экспорт в excel, а затем возможность быстрой остановки всего процесса, а затем индексацию...


    А что мы делаем, чтобы энтропия проекта не росла очень сильно?


    (хором) Р-Е-Е-Е-Ф-А-А-А-К-Т-О-О-О-Р-И-И-И-Н-Г

    ... << RSDN@Home 1.1.4 @@subversion >>
    лэт ми спик фром май харт
    Re[3]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 05.07.05 11:30
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А теперь, благодаря этой ветке форума, известно!

    СГ>Более того, известны даже количественные данные в предельных случаях, а именно 235% и 700%.

    Да, да. Теперь это извесно, хотя и раньше не вызывало сомнений. Только Вы напутали с цифрами. Должны быть 233% и 600%
    Это расписано здесь
    Автор: Sergey J. A.
    Дата: 24.06.05
    и здесь
    Автор: Sergey J. A.
    Дата: 27.06.05
    .

    Таким образом, средний оверхед Оберона — (233+600)/2 = 416%
    Я — свихнувшееся сознание Джо.
    Re[14]: Так Вы определитесь
    От: Amidlokos Россия  
    Дата: 05.07.05 11:39
    Оценка:
    Здравствуйте, prVovik, Вы писали:

    V>(хором) Р-Е-Е-Е-Ф-А-А-А-К-Т-О-О-О-Р-И-И-И-Н-Г


    Вы это Сергею скажите
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    WARNING: expression "to_be || !to_be" is always true
    Re[4]: Синтаксический оверхед
    От: peterbes Россия  
    Дата: 05.07.05 11:40
    Оценка:
    Здравствуйте, Sergey J. A., Вы писали:

    [offtopic]

    Sergey, вы идею с прохождением полтиника под водой не забросили?
    В Питере бассейны позакрывали на лето, жабры у меня сохнут. Ребята ополоумели, решили со стрелки Васильевского острова до Кронштадта плыть, 29 км, Сухорученков (Jeka) пердрекает что количество утопленников будет равно количеству участников заплыва.
    Re[5]: Синтаксический оверхед
    От: Sergey J. A. Беларусь  
    Дата: 05.07.05 11:53
    Оценка:
    Здравствуйте, peterbes, Вы писали:

    P>[offtopic]


    P>Sergey, вы идею с прохождением полтиника под водой не забросили?


    Не, не забросил. Но пока не получается...

    P>В Питере бассейны позакрывали на лето, жабры у меня сохнут. Ребята ополоумели, решили со стрелки Васильевского острова до Кронштадта плыть, 29 км, Сухорученков (Jeka) пердрекает что количество утопленников будет равно количеству участников заплыва.


    Маньяки
    Я — свихнувшееся сознание Джо.
    Re[15]: Так Вы определитесь
    От: moudrick Россия http://community.moudrick.net/
    Дата: 06.07.05 12:32
    Оценка:
    Здравствуйте, Amidlokos, Вы писали:

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


    V>>(хором) Р-Е-Е-Е-Ф-А-А-А-К-Т-О-О-О-Р-И-И-И-Н-Г


    A>Вы это Сергею скажите


    Пусть лучше он скажет, знает ли он, что такое вообще энтропия и когда он последний раз открывал Шеннона.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[3]: Синтаксический оверхед
    От: Gemel  
    Дата: 07.07.05 05:14
    Оценка:
    Здравствуйте, Privalov, Вы писали:

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


    G>>Я, например, если язык хоть отдаленно напоминает паскаль никогда не буду на нем писать!!! Работаю в С++Builder 6!


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


    Работу искать!!!
    Пытались такое провернуть невышло..... хотели на атлантис меня посадить, это ваабще бред какойто а не язык.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[9]: Синтаксический оверхед
    От: ZayatsZ Россия  
    Дата: 07.07.05 06:33
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    M>Чем бы дитя не тешилось, лишь бы не вешалось.


    Чем бы дитя не тешилось, лишь бы на проезжей части матом трахаться не просило
    ... << RSDN@Home 1.1.4 beta 7 rev. 501>>
    Re[4]: Синтаксический оверхед
    От: Privalov  
    Дата: 07.07.05 09:32
    Оценка:
    Здравствуйте, Gemel, Вы писали:

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


    G>Работу искать!!!

    G>Пытались такое провернуть невышло..... хотели на атлантис меня посадить, это ваабще бред какойто а не язык.

    Во-первых, поиск работы занимает какое-то время (как правило). А во-вторых, что будешь делать, если найдешь баг в VCL? Он вроде на Паскале написан. Пользователя язык реализации не интересует, как и источник падений программы.

    Кстати, а что такое атлантис? Мне тоже приходилось иногда с экзотикой работать, было бы интересно посмотреть.
    Re[5]: Синтаксический оверхед
    От: Gemel  
    Дата: 07.07.05 09:41
    Оценка:
    Здравствуйте, Privalov, Вы писали:

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


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


    G>>Работу искать!!!

    G>>Пытались такое провернуть невышло..... хотели на атлантис меня посадить, это ваабще бред какойто а не язык.

    P>Во-первых, поиск работы занимает какое-то время (как правило). А во-вторых, что будешь делать, если найдешь баг в VCL? Он вроде на Паскале написан. Пользователя язык реализации не интересует, как и источник падений программы.

    как нибудь выкрутимся.

    P>Кстати, а что такое атлантис? Мне тоже приходилось иногда с экзотикой работать, было бы интересно посмотреть.


    Это помесь С, паскаля и еще какойто дряни....

    Систему Корпоации Галактика видел когда нибудь? Это Москвичи зробили.... Комплекс тематики 1С но мощнее и сложнее на порядки. Короче работает на первазиве, SQL... базами данных, сопровождать ее блин — геморрой такой что мама не горюй....
    Пытались меня научить на атлантисе всякие приколы для выгрузки данных писать — ага мне на билдере сейчас ровно день нужен что бы все что хош с базами сделать.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[12]: Oberon - Примеры кода
    От: Аноним  
    Дата: 07.07.05 11:04
    Оценка:
    Здравствуйте, Socrat, Вы писали:

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


    СГ>>>2) Если не могу выполнить пункт (1), то делаю так что программа сама сообщает где ошибка.


    M>>С указанием (номера строки) / (номера символа) начала и конца ошибочной инструкции?


    M>>Или как? Можно поподробнее, желательно с примером, приближенным к реальности.


    S>Да. И распечатывает все глобальные переменные и локальные переменные функции.


    Т.е. падает и выдает core dump
    Re[6]: Синтаксический оверхед
    От: Privalov  
    Дата: 07.07.05 13:10
    Оценка:
    Здравствуйте, Gemel, Вы писали:

    G>как нибудь выкрутимся.


    Правильно, главное — относиться ко всему с юмором.

    G>Систему Корпоации Галактика видел когда нибудь? Это Москвичи зробили.... Комплекс тематики 1С но мощнее и сложнее на порядки. Короче работает на первазиве, SQL... базами данных, сопровождать ее блин — геморрой такой что мама не горюй....


    Только на картинках, да еще рекламу какой-то киевской конторы (распространителя, видимо) читал. Так на тех картинках вполне нормальные экраны, без малейшего намека на что-нибудь плохое.
    Re[7]: Синтаксический оверхед
    От: Gemel  
    Дата: 08.07.05 04:59
    Оценка:
    Здравствуйте, Privalov, Вы писали:

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


    G>>как нибудь выкрутимся.


    P>Правильно, главное — относиться ко всему с юмором.


    G>>Систему Корпоации Галактика видел когда нибудь? Это Москвичи зробили.... Комплекс тематики 1С но мощнее и сложнее на порядки. Короче работает на первазиве, SQL... базами данных, сопровождать ее блин — геморрой такой что мама не горюй....


    P>Только на картинках, да еще рекламу какой-то киевской конторы (распространителя, видимо) читал. Так на тех картинках вполне нормальные экраны, без малейшего намека на что-нибудь плохое.


    Ага, мы тож так думали.... свиду ничего красиво, виндово, а как копнули на чем писано , так и попадали..... Атлантис неимеет визуальной среди разработки, писать можно в ЛЮБОМ редакторе (досковом), отладчика НЕТ, что бы посмотреть что получилось нужно собрать весь проект и запустить в реальную работу — бред, да ище и смесь всех языков — это же вообще херь какаято.
    ... << RSDN@Home 1.1.4 beta 7 rev. 447>>
    Re[9]: Синтаксический оверхед
    От: DJ KARIES Россия  
    Дата: 15.07.05 14:18
    Оценка:
    Здравствуйте, Sheridan, Вы писали:

    S>Лучше на brainfuck или вообще на whitespace...

    b-fuck и w-space — куета, сам писал bf-интерпретер.
    А вот форт — это СИЛА!

    http://www.giref.forthworks.com
    ntr soft: www.dkdens.narod.ru :: ref: http://giref.forthworks.com
    Re[10]: Синтаксический оверхед
    От: Sheridan Россия  
    Дата: 18.07.05 03:14
    Оценка:
    Здравствуйте, DJ KARIES, Вы писали:

    DK>А вот форт — это СИЛА!


    Знаю
    Автор: Sheridan
    Дата: 27.07.04

    [RSDN@Home][1.2.0][alpha][578]
    [Hе ропщи по мелочам. [Авессалом Подводный]]
    Matrix has you...
    Re[11]: Синтаксический оверхед
    От: DJ KARIES Россия  
    Дата: 18.07.05 15:14
    Оценка:
    Здравствуйте, Sheridan, Вы писали:

    DK>>А вот форт — это СИЛА!


    S>Знаю
    Автор: Sheridan
    Дата: 27.07.04


    Не, не перевариваю CAPS'ы.
    И стандарты 79-83 годов.

    Retroforth и мой куа, тьфу, ref — рулят.

    Вот из ref — файл rtl/io.f:
    uses rtl/string.f
    
    : io.r $80000000 ;
    : io.w $40000000 ;
    
    : io.create_new 1 ;
    : io.create_always 2 ;
    : io.open_existing 3 ;
    : io.open_always 4 ;
    : io.trunc_existing 5 ;
    
    : io.pos.begin 0 ;
    : io.pos.current 1 ;
    : io.pos.end 2 ;
    
    {
      KERNEL32 " CreateFileA" 7 stdcall CreateFile
      KERNEL32 " CloseHandle" 1 stdcall CloseHandle
      KERNEL32 " ReadFile" 5 stdcall ReadFile
      KERNEL32 " WriteFile" 5 stdcall WriteFile
      KERNEL32 " GetFileSize" 2 stdcall GetFileSize
      KERNEL32 " SetFilePointer" 4 stdcall SetFilePointer
      
      2 vars: access mode
    
      : io.open ( name access mode -- handle )
        to mode  to access
        access 0 0 mode 0 0 CreateFile
      ; {:}
    
      : io.close ( handle -- success )
        CloseHandle
      ; {:}
    
      4 vars: handle buffer size outsize
    
      : io.read ( handle buffer size -- written )
        to size  to buffer  to handle
        handle buffer size addr outsize 0 ReadFile drop
        outsize
      ; {:}
    
      : io.write ( handle buffer size -- written )
        to size  to buffer  to handle
        handle buffer size addr outsize 0 WriteFile drop
        outsize
      ; {:}
    
      : io.size ( handle -- size )
        0 GetFileSize
      ; {:}
    
      2 vars: pos mode
    
      : io.setpos ( handle pos mode -- pos )
        to mode  to pos  to handle
        handle pos 0 mode SetFilePointer
      ; {:}
    
      : io.pos ( handle -- pos )
        0 io.pos.current io.setpos
      ; {:}
    }


    Вот генератор wav-файла на ref:
    ( http://retroforth.org/board/index.php?topic=211.0 )
    console
    
    uses rtl/io.f
    
    2 vars: fwave buf
    
    {
      var buf
      : emit ( byte -- )
        to buf
        fwave addr buf 1 io.write drop
      ; {:}
    
      : emit2 ( word -- )
        to buf
        fwave addr buf 2 io.write drop
      ; {:}
    
      : emit4 ( dword -- )
        to buf
        fwave addr buf 4 io.write drop
      ; {:}
    }
    
    : channels 2 ;
    : samples/sec 44100 ;
    : bits/sample 16 ;
    
    var DataHeaderPosition
    
    : WriteHeader
      str" RIFF" @ emit4
      0 emit4
      str" WAVE" @ emit4
      str" fmt " @ emit4
      16 emit4
    
      1 emit2
      channels emit2
      samples/sec emit4
      bits/sample 8 / channels * samples/sec * emit4
      bits/sample 8 / channels * emit2
      bits/sample emit2
      
      str" data" @ emit4
      0 emit4
      fwave io.pos to DataHeaderPosition
    ;
    
    2 vars: DataSize FileDataSize
    
    : CloseHeader
      fwave io.pos DataHeaderPosition - to DataSize
      fwave io.pos 8 - to FileDataSize
      fwave 4 io.pos.begin io.setpos drop
      FileDataSize emit4
      fwave DataHeaderPosition 4 - io.pos.begin io.setpos drop
      DataSize emit4
    ;
    
    4 vars: ls rs bs osc
    
    : Wave.Size [ 44100 20 * ] literal ;
    
    : WriteWave
      Wave.Size 4 * getmem to buf
      buf to bs
      
      Wave.Size repeat
        osc $1ff * ls + to ls
        osc $4ff * rs + to rs
        osc 1+ to osc
        ls 16 >> rs $ffff0000 and or bs !
        bs 4 + to bs
      until
    
      fwave buf Wave.Size 4 * io.write drop
      buf freemem
    ;
    
    : test
      str" 1.wav" io.w io.create_always io.open to fwave
      WriteHeader
      WriteWave
      CloseHeader
      fwave io.close drop
    ;
    
    cr
    ." Test Wave Generator v0.0.1 by Alexey Abramov" cr
    ." With 32bit fixed point 44100 stereo" cr
    ." Play file '1.wav'" cr
    test
    
    bye
    ntr soft: www.dkdens.narod.ru :: ref: http://giref.forthworks.com
    Re[14]: Синтаксический оверхед
    От: DJ KARIES Россия  
    Дата: 19.07.05 18:11
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>"И эти люди запрещают мне ковырять в носу!"

    К>
    К>main(){printf("Try to simplify!");}
    К>


    ." Try to simplify!"

    Ибо Форт рулит!
    ntr soft: www.dkdens.narod.ru :: ref: http://giref.forthworks.com
    Re[9]: Очередной яркий пример
    От: fddima  
    Дата: 22.07.05 12:15
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>


    Объясните мне пожалуйста. Присутствует в Обероне слова... перечисленные здесь
    Автор: Сергей Губанов
    Дата: 09.06.05
    , где вы утверждаете что в оберонах их нет.
    А на картинке...
    ... << RSDN@Home 1.2.0 alpha rev. 569>>
    Re[10]: Очередной яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.07.05 12:17
    Оценка:
    Здравствуйте, fddima, Вы писали:

    C>procedure

    C>function
    C>var
    C>do
    C>to, downto

    F> А на картинке...


    Нету их и на картинке.
    Re[14]: Очередной яркий пример
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 28.07.05 12:28
    Оценка:
    Здравствуйте, fddima, Вы писали:

    F>Обероне/Паскале абсолютно ненужные лексемы:

    F>procedure
    F>function
    F>var
    F>do
    F>to, downto
    F>...

    Если не обращать внимания на регистр, то лишние здесь function и downto.
    Для процедур-функций используется то же самое служебное слово, что и для процедур — PROCEDURE.
    Слова downto, нет вообще. Дело в том, что в оригинальном обероне нет цикла FOR. Во втором обероне цикл FOR есть, но в нем есть слово BY после которого надо написать шаг (положительный или отрицательный, так что downto не нужен).

    FOR i := 0 TO -100 BY -5 DO ... END

    BY — не обязательное слово. Если его нет, то по умолчанию полагается шаг = +1.

    F> Я в искренном недоумении.


    Теперь что касается искреннего недоумения... Переисленные лексемы не являются абсолютно не нужными, а наоборот, причем это очевидно для любого кто знает этот язык и понимает почему он именно такой, а не другой. Отсюда, собственно, и происходит мой шуточный ответ.
    Re[15]: Очередной яркий пример
    От: fddima  
    Дата: 28.07.05 12:56
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Если не обращать внимания на регистр, то лишние здесь function и downto.

    СГ>Для процедур-функций используется то же самое служебное слово, что и для процедур — PROCEDURE.
    Т.е. вывод => procedure всё таки нужное служебное слово.

    СГ>Слова downto, нет вообще. Дело в том, что в оригинальном обероне нет цикла FOR. Во втором обероне цикл FOR есть, но в нем есть слово BY после которого надо написать шаг (положительный или отрицательный, так что downto не нужен).

    СГ>FOR i := 0 TO -100 BY -5 DO ... END
    СГ>BY — не обязательное слово. Если его нет, то по умолчанию полагается шаг = +1.
    Принципиально не обязательное. А по факту оно есть.

    F>> Я в искренном недоумении.

    СГ> Теперь что касается искреннего недоумения... Переисленные лексемы не являются абсолютно не нужными, а наоборот, причем это очевидно для любого кто знает этот язык и понимает почему он именно такой, а не другой. Отсюда, собственно, и происходит мой шуточный ответ.
    Ну, мы уже давно не в "Коллеги, улыбнитесь". Притом даже смайликов нет.
    ... << RSDN@Home 1.2.0 alpha rev. 569>>
    Re[8]: Синтаксический оверхед
    От: SilverCloud Россия http://rodonist.wordpress.com
    Дата: 02.08.05 15:17
    Оценка:
    Здравствуйте, Oleg A. Bachin, Вы писали:
    current^.LeftInline^.RightInline := current^.RightInline;


    Кстати, обртите внимание на цепочку операторов разыменования указателей в Паскале
    В C в этом случае пришлось вводить новый оператор абсолютно на пустом месте, просто из-за непродуманного синтаксиса
    ... << RSDN@Home 1.1.4 beta 4 rev. 0>>
    Re[9]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 02.08.05 15:50
    Оценка:
    Здравствуйте, SilverCloud, Вы писали:

    SC>Кстати, обртите внимание на цепочку операторов разыменования указателей в Паскале

    SC>В C в этом случае пришлось вводить новый оператор абсолютно на пустом месте, просто из-за непродуманного синтаксиса

    А что, в C нет оператора разыменования указателя?
    Ку...
    Re[10]: Синтаксический оверхед
    От: SilverCloud Россия http://rodonist.wordpress.com
    Дата: 02.08.05 18:05
    Оценка:
    Здравствуйте, Пацак, Вы писали:

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


    SC>>Кстати, обртите внимание на цепочку операторов разыменования указателей в Паскале

    SC>>В C в этом случае пришлось вводить новый оператор абсолютно на пустом месте, просто из-за непродуманного синтаксиса

    П>А что, в C нет оператора разыменования указателя?

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

    Запикал illformed слово русского языка. — Кодт
    Re[11]: Синтаксический оверхед
    От: Пацак Россия  
    Дата: 02.08.05 18:08
    Оценка:
    Здравствуйте, SilverCloud, Вы писали:

    SC>Блин, ты, похоже, не вкурил, о чём речь. В том-то и дело, что оператор "звёздочка" в C есть, и оператор "точка" тоже есть, но опльзоваться ими в такой ситуации, как в приведённом коде — 3.14здец (напиши, и сам увидишь). Поэтому введён оператор "стрелка", который, в общем-то нужен только для обхода этого ужасного синтаксиса. Паскаль без этого костыля прекрасно обходится.


    А, ну это да, согласен. Хотя меня лично стрелка никогда не напрягала.
    Ку...
    Re[9]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 03.08.05 06:40
    Оценка:
    Здравствуйте, SilverCloud, Вы писали:

    SC>Здравствуйте, Oleg A. Bachin, Вы писали:

    SC>
    SC>current^.LeftInline^.RightInline := current^.RightInline;
    SC>


    SC>Кстати, обртите внимание на цепочку операторов разыменования указателей в Паскале

    SC>В C в этом случае пришлось вводить новый оператор абсолютно на пустом месте, просто из-за непродуманного синтаксиса

    Кстати, в оберонах символ разыменования "^" в очевидных (однозначных) случаях писать не обязательно:
    current.LeftInline.RightInline := current.RightInline;

    аналогично обстоит дело и в Дельфи. Компилятор понимает что имеется в виду.
    Re[11]: Синтаксический оверхед
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 04.08.05 08:52
    Оценка:
    Здравствуйте, merlin.fs, Вы писали:

    MF>Здравствуйте, Сергей Губанов, Вы писали:



    СГ>>Кстати, в оберонах символ разыменования "^" в очевидных (однозначных) случаях писать не обязательно:

    MF>Лучше это было не так.
    СГ>>
    СГ>>current.LeftInline.RightInline := current.RightInline;
    СГ>>

    СГ>>аналогично обстоит дело и в Дельфи. Компилятор понимает что имеется в виду.
    MF>А потом сидишь в чужом коде разбираешься, и не может понять, как оно работает, пока не посмотришь на объявление переменной.

    То есть Вы за то чтобы всегда писать "^." вместо "." даже если это очевидно? Суровый Вы человек, однако...
    Re[16]: Читать всем - статистикаи читаемость
    От: Пацак Россия  
    Дата: 23.12.07 15:07
    Оценка:
    Здравствуйте, Chervyachok, Вы писали:

    M>>Тогда зачем там слово procedure? Оверхед

    C>У вас void (либо тип возвращаемой переменной) — что с того?

    Ты топик (довольно старый кстати, нафига вообще было его поднимать? ) весь прочитал или просто ткнул "ответить" на случайном письме? Начинался он с того, что C++ обвинили в обилии "лишних" синтаксических элементов, не нужных, дескать, компилятору. Когда разумные аргументы о том, что на трудности компилятора программеру начхать, и куда важнее читабельность программы, не возымели действия — над оберонистами начали банально стебаться, указывая на бревна в их собственном глазу. Отквоченое тобой — один из таких примеров, не надо воспринимать его серьезно, никто не заставляет оберонистов выкидывать все "лишнее" из своего языка — пусть только не трогают чужие.

    C>Служебные слова — это не шум, это должно быть отделено от творчества программиста тем или иным образом.


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

    1.
    VAR 
      len : INTEGER;
      i : INTEGER;
      item : SomeClass;
    BEGIN
      len = collection.length;
      FOR i := 1 TO len DO
        item := collection.get(i);
        IF item.isAccessible() THEN 
            process(collection.get(i));
        END
      END
    END


    2.
    Iterator iterator = Iterator.create(...);
    Filter filter = new AccessibleFilter(...);
    Processor processor = Processor.create(...);
    iterator.forEach(filter.filter(collection), processor);


    Куда важнее ИМХО возможность выделения не "слов", а именно "предложений" — корректно расставленные отступы, например, или единый для команды coding-style. Но это-то как раз лежит за пределами использования цветовой подсветки и/или заглавных букв.
    Ку...
    Re[2]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 24.12.07 10:38
    Оценка:
    Здравствуйте, x-code, Вы писали:

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


    XC>Я надеюсь, что еще очнеь долго


    Нет, эта мегаветка будет жить вечно!

    XC>ЗЫ: наверняка все это уже отвечали, читать тему не стал, ибо это нереально


    Ты знал!!!
    По-моему, это лучшая отмазка для некропостинга!
    ... << RSDN@Home 1.2.0 alpha rev. 655>>
    Перекуём баги на фичи!
    Re[4]: Синтаксический оверхед
    От: x-code  
    Дата: 24.12.07 15:46
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Кодт wrote:

    >> XC>ЗЫ: наверняка все это уже отвечали, читать тему не стал, ибо это
    >> нереально
    >> Ты знал!!!
    >> По-моему, это лучшая отмазка для некропостинга!
    C>О Боже! Я же в эту ветку еще и писал!

    ну не я ее поднял а ответил в общем от нечего делать
    Re[4]: Синтаксический оверхед
    От: Mr. None Россия http://mrnone.blogspot.com
    Дата: 25.12.07 08:46
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Кодт wrote:

    >> XC>ЗЫ: наверняка все это уже отвечали, читать тему не стал, ибо это
    >> нереально
    >> Ты знал!!!
    >> По-моему, это лучшая отмазка для некропостинга!
    C>О Боже! Я же в эту ветку еще и писал!

    C>Может сделать специальный форум для таких веток: "Музей RSDN"


    Лучше "Почётные дятлы RSDN"...
    Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
    Re[5]: Синтаксический оверхед
    От: Кодт Россия  
    Дата: 25.12.07 12:09
    Оценка:
    Здравствуйте, x-code, Вы писали:

    >>> По-моему, это лучшая отмазка для некропостинга!

    XC>ну не я ее поднял а ответил в общем от нечего делать

    Извини, действительно, не ты её поднял. Я по датам в дереве смотрел, а не в простыне, пропустил.
    Но всё равно фраза для отмазки хорошая!
    ... << RSDN@Home 1.2.0 alpha rev. 655>>
    Перекуём баги на фичи!
    Re[6]: Синтаксический оверхед
    От: Dio Elocloire Россия  
    Дата: 25.12.07 14:33
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Здравствуйте, x-code, Вы писали:


    >>>> По-моему, это лучшая отмазка для некропостинга!

    XC>>ну не я ее поднял а ответил в общем от нечего делать

    К>Извини, действительно, не ты её поднял. Я по датам в дереве смотрел, а не в простыне, пропустил.

    К>Но всё равно фраза для отмазки хорошая!

    Классика... может, обратно в КУ вернуть?
    Re[4]: зря вы так
    От: alzt  
    Дата: 25.12.07 18:37
    Оценка:
    Здравствуйте, Аноним, Вы писали:

    А>Здравствуйте, Кодёнок, Вы писали:


    Кё>>Ну серьёзно, неужели количество лексем — одна из важных проблем в разработке ПО? "Во время боя командир автоматически переходит на мат, и результативность возрастает втрое?" Какие выгоды автор надеется получить, уменьшив число лексем на оператор? На сколько % ускорить разработку? Или что?


    А>Согласен со всем.

    А>Автор похоже не совсем в курсе проблем программирования

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

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