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[3]: Ошибка
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 21.06.05 13:28
Оценка: :)
Здравствуйте, moudrick, Вы писали:

M>1. Поддержка максимального количества парадигм программирования (в том числе и структурного)


1) Как Вам только что показали структурную парадигму не поддерживает.
2) Модульную парадигму не поддерживает (в языке нет модулей)
3) Компонентно ориентированное программирование не поддерживает (в языке нет модулей и нет сборки мусора)
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[3]: Мартышка и очки
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 21.06.05 13:31
Оценка: -1
Здравствуйте, Mamut, Вы писали:

M>Например, здесь показано
Автор: Mamut
Дата: 29.10.04
, что вставка объектов в текст


Там показана наглядная демонстрация басни про мартышку и очки — в StdLog написали текст программы.
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[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[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:47
Оценка: -3 :)
Здравствуйте, moudrick, Вы писали:

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


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


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


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

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

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

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


Смотря какие скобки. Скобки в выражении поставленные просто так для наглядности — не считаются. Скобки в инструкции необходимы согласно определению си-образного синтаксиса. Инструкция while написанная без скобок не будет скомпилирована, так как это будет синтаксической ошибкой. В этом случае скобки считаются.
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[4]: Синтаксический оверхед
От: Socrat Россия  
Дата: 21.06.05 13:56
Оценка: +1 :))
Здравствуйте, Курилка, Вы писали:

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


К>Математически доказал, что там -1 вместо 0?


Он же сказал: доказано, что там должен быть 0. А если факты не соответствуют теории, то тем хуже для фактов.
Re[11]: Синтаксический оверхед
От: moudrick Россия http://community.moudrick.net/
Дата: 21.06.05 13:57
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

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


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


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


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


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

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

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

СГ>Но для кого она правильна?
Я написал Вам, как в данном случае понимается выражения "для кого она правильна". Вы же это поскипали. Потрудитесь отвечать по существу.

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


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

Тогда считаются и пробелы. Ибо если убрать пробелы, то будет ошибка и в горячо любимом Обероне. А если их же убрать в C, то не будет. Не надо нас маленьких дурить. А надо внимательно читать обоснованные возражения.
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[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[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 легко настраивается и на один щелчок тоже. Учите матчасть.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.