Zorko писал(а):
"#" имеет преимущество перед "/=" в том, что перечёркивание равности параллельных прямых хоть и двойное, но всё-таки обозначено, а в "/=" его приходится "додумывать", сдвигая "/" вправо ровно на "=". Так что дядька Вирт опять не прогадал. Остаётся только удивиться, почему же символ "#" не использовали для обозначения неравенства раньше, в других языках до Оберона.
1)Ну это опять-таки дело вкуса: мысленно передвигать черточку или в уме убирать лишнюю палочку. Но в целом, да, знак выбран удачно.
2)Символ # в качестве знака "не равно" использовался в Foxpro (наряду с "<>").
Zorko писал(а):
Взять лишние скобки в программах на Си-подобных языках. Чем реально оправдать их наличие в if(), for(), switch(), while(), кроме как упрощением парсера?
Сэкономили на ключевых словах (then, of, do), но пришлось чем-то отделить условие от операторов. Если сравнивать текстуально, то вместо Паскалевского "if" в Си используется "if(", а вместо "then" - закрывающая скобка ")".
Чем это плохо? В условиях очень часто встречаются скобки, а вот "then" может встретиться в условии разве что внутри строковой константы. Чем отличается )"скобка-then" от всех прочих скобок? Только уровнем вложенности - какая это скобка по-порядку. Что будет, если вы скобки в условии перепутаете (довольно обычная ошибка)? В Обероне или Паскале then четко говорит, что условие кончилось: если баланс скобок не соблюден, то можно зафиксировать ошибку в условии и разбирать последующие операторы. В Си при ошибке в условии компилятор может перепутать условие с последующим оператором "++x=...", что вызовет дальнейшую путаницу. Конечно, какое-то сообщение об ошибке появится, но будет непросто понять, что ошибка на самом деле в условии.
Конечно, хорошо, когда ключевых слов немного — и компилятор проще и программисту их легче запомнить и больше осмысленных слов остается для своих идентификаторов. Но при недостатке ключевых слов приходится либо применять «закорючки», либо использовать одно и то же слово в разных смыслах. Ключевые слова более наглядны просто потому, что занимают больше места на экране\бумаге и человеку легче их распознать - взгляду есть за что зацепиться, «рожек и ножек» у нескольких символов суммарно больше, чем у одного. Да и набирая символ на клавиатуре трудно ошибиться так, чтобы из одного ключевого слова получилось другое (если они правильно подобраны): ключевые слова разнесены дальше друг от друга (в смысле расстояния Хэмминга), чем отдельные символы.
Если каждое ключевое слово имеет свой собственный фиксированный смысл, то компилятор уже по самому слову понимает,
что это значит и может зафиксировать ошибку, если слово стоит не там, где должно. Если же смысл слова зависит от его положения, то существует опасность путаницы, когда положение из-за чего-то сдвинется (см. выше про «скобку-then»).
Конечно на каждый смысл слов не напасешься, но тогда надо применять совпадающие слова так, чтобы при сдвиге они не смогли перепутаться. Вот, например, в КП слово IN может означать и отношение «принадлежит» и «параметр для ввода», но перепутаться они не могут, потому что используются совсем в разных местах.
Это еще один объективный критерий оценки ЯП (наряду с «арифметикой синтаксиса» Свердлова): насколько далеко разнесены комбинации символов, признаваемые компилятором верными; легко ли получить из одной синтаксически верной конструкции другую синтаксически верную.
И вот в этом отношении языки Вирта тщательно продуманы: опечатка приведет скорее всего к ошибке компиляции, а не к другой синтаксически допустимой конструкции. «Островки правильных конструкций» разнесены далеко друг от друга в «море ошибок». И если случайно оступиться, то попадешь не на другой островок, а в воду. Это сразу же будет заметно — ошибка компиляции. Чтобы попасть на другой остров, нужно затратить определенные сознательные усилия, что уже не может быть случайным.
Разумеется, если вы при вычисления площади прямоугольника напишите «+» вместо «*», то получите неверный результат. И никакой синтаксис и строгая типизация тут не помогут, ведь никакой компилятор не может знать, что вы хотели получить площадь, а не полупериметр.
Но всё возможное, что можно сделать синтаксисом, в виртовских языках делается!
В отличие от Си-образных, где не «островки в море», а скорее беспорядочная груда. Протянув руку за одним вы вполне можете схватить совсем другое, стоит руке чуть дрогнуть.
И никто вас не предупредит, компилятор вам не поможет, он сам едва-едва в этой свалке разбирается. Вот оно обилие возможностей, вот она свобода — свобода совершать обильные ошибки!
Уж о чем думали создатели Си, но только не об ошибкоустойчивом синтаксисе. "Си-язык для профессионалов, а профессионалы не ошибаются!"
Цитата:
Ну да это уже ладно, но зачем употреблять скобки при вызове функций без параметров? Уже по способу применения можно отличить функцию от переменной во всех случаях, кроме когда функция без параметров возвращает результат. Вот здесь и только здесь в Обероне пишутся скобки: ...
В Обероне легко отличить, а в С синтаксис очень замысловатый и подсказка "это функция" может потребоваться во многих случаях. Описать когда она нужна, когда нет, довольно сложно, проще задать "() нужны всегда!".