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

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


СГ>>Также и пишется: str1 := str2, равно как для любых массивов arr1 := arr2 (соответствующих типов — ведь массивы это самый обычный value-type, а значит можно так присваивать — нет исключений из правил).


П>должны сопровождаться некими дополнительными действиями (скажем, изменением состояния некоего третьего объекта). Что тогда? В C++ я переопределю оператор, в питоне — перекрою метод класса, а в Обероне?


Что, что — скопируете и сопроводите "некими дополнительными действиями". Прямо такой вопрос задаете, как буд-то ответ сами не знаете.

У бомжей берут интервью:
— "Скажите пожалуйста, вот вы живете на улице, а что вы делаете когда идет дождь?"
Бомжи недоуменно переглядываются, пожимают плечами и, в конце-концов, отвечают:
— "Как, что? Мокнем мы."

Re[14]: Синтаксический оверхед
От: Пацак Россия  
Дата: 10.06.05 13:42
Оценка: +2
Здравствуйте, Сергей Губанов, Вы писали:

П>>должны сопровождаться некими дополнительными действиями (скажем, изменением состояния некоего третьего объекта). Что тогда? В C++ я переопределю оператор, в питоне — перекрою метод класса, а в Обероне?

СГ>Что, что — скопируете и сопроводите "некими дополнительными действиями". Прямо такой вопрос задаете, как буд-то ответ сами не знаете.

Не надо слов. Код пожалуйста.
Ку...
Re[14]: Синтаксический оверхед
От: Курилка Россия http://kirya.narod.ru/
Дата: 10.06.05 13:44
Оценка: -1 :))
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Что, что — скопируете и сопроводите "некими дополнительными действиями". Прямо такой вопрос задаете, как буд-то ответ сами не знаете.

СГ>

СГ>У бомжей берут интервью:
СГ> — "Скажите пожалуйста, вот вы живете на улице, а что вы делаете когда идет дождь?"
СГ>Бомжи недоуменно переглядываются, пожимают плечами и, в конце-концов, отвечают:
СГ> — "Как, что? Мокнем мы."


Вах, оберонисты сами себя уже бомжами считают...
Однако, неожиданно
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[5]: Синтаксический оверхед
От: Аноним  
Дата: 10.06.05 14:27
Оценка: 1 (1)
Здравствуйте, Сергей Губанов, Вы писали:

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


Сдаётся мне, что за всеми этими "гиперболизациями масштаба" (они же перфомансы) и проходит ваша профессиональная деятельность, а не за работой на реальными программными проектами.
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[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: Синтаксический оверхед
От: Аноним  
Дата: 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[12]: Синтаксический оверхед
    От: Аноним  
    Дата: 11.06.05 12:18
    Оценка: +1
    Здравствуйте, Кодт, Вы писали:

    К>>В С++ потребность в пробельных разделителях меньше: гораздо чаще синтаксис явно требует разделительные лексемы.

    К>>
    К>    if(c)t;else{e}
    К>  //           ^-^--- нейтральные лексемы (ещё и на ; сэкономили)
    К>>

    Не сэкономили. Если не ошибаюсь, должно быть if(c)t;else{e;}
    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: Синтаксический оверхед
    От: 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]: Устаревший блок 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[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[2]: Синтаксический оверхед
    От: Аноним  
    Дата: 12.06.05 20:56
    Оценка: :)))
    Здравствуйте, Airat Burganov, Вы писали:

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


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

    СГ>> [skipped]

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


    Да не...
    Это не провокация.
    Он тут на форуме известен своей любовью к оберонам.
    Просто последние несколько месяцев он хранил молчание.
    Видимо готовил новый удар, занимаясь исследованием синтаксического оверхеда
    Re[10]: Oberon - Примеры кода
    От: Mamut Швеция http://dmitriid.com
    Дата: 13.06.05 06:28
    Оценка:
    G>Гм. На паскаль похоже.

    Просто ноги оттуда же растут


    dmitriid.comGitHubLinkedIn
    Re[3]: Синтаксический оверхед
    От: moudrick Россия http://community.moudrick.net/
    Дата: 13.06.05 12:06
    Оценка: +1 :)
    Здравствуйте, Аноним, Вы писали:

    А>Здравствуйте, Airat Burganov, Вы писали:


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


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

    СГ>>> [skipped]

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


    А>Да не...

    А>Это не провокация.
    А>Он тут на форуме известен своей любовью к оберонам.
    А>Просто последние несколько месяцев он хранил молчание.
    А>Видимо готовил новый удар, занимаясь исследованием синтаксического оверхеда

    А добился одного только — еще несколько человек стали иначе относиться к Оберону.
    Вместо нейтрального "не знаю что за язык такой Оберон" стало негативное "оберон- полное г...о"
    Re[4]: Синтаксический оверхед
    От: Аноним  
    Дата: 13.06.05 12:15
    Оценка:
    Здравствуйте, moudrick, Вы писали:

    M>А добился одного только — еще несколько человек стали иначе относиться к Оберону.

    M>Вместо нейтрального "не знаю что за язык такой Оберон" стало негативное "оберон- полное г...о"

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