Синтаксический оверхед
От: Сергей Губанов Россия 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: Перенесено модератором из 'Коллеги, улыбнитесь' — Хитрик Денис
  •  
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.