[Кто-нибудь знает] другие грамматические «особенности» современных языков программирования?
Один из моих любимых, Modula-3, был разработан в 1990 году с благословения Никлауса Вирта в качестве последнего на тот момент языка в «Семья Паскаля». Кто-нибудь еще помнит те ужасные споры о том, где точка с запятой должна быть разделителем или терминатором? В Modula-3 выбор за вами! EBNF для последовательности утверждений:
stmt ::= BEGIN [stmt {; stmt} [;]] END
Точно так же при написании альтернатив в операторе CASE
Modula-3 позволяет использовать вертикальную черту |
как разделитель или префикс. Чтобы вы могли написать
CASE c OF
| 'a', 'e', 'i', 'o', 'u' => RETURN Char.Vowel
| 'y' => RETURN Char.Semivowel
ELSE RETURN Char.Consonant
END
или вы можете оставить начальную полосу, возможно, потому что вы предпочитаете писать OF
в этой позиции.
Я думаю, что мне больше всего понравилось, как и сам дизайн, так это осознание дизайнерами того, что идет религиозная война, и их настойчивость в поиске способов поддержать обе стороны. Пусть выбирает программист!
P.S. Objective Caml допускает разрешающее использование |
в выражениях case, тогда как более ранний и тесно связанный диалект Standard ML - нет. В результате выражения case в стандартном коде машинного обучения часто выглядят более уродливыми.
РЕДАКТИРОВАТЬ: увидев ответ T.E.D., я проверил грамматику Modula-2, и он верен, Modula-2 также поддерживает точку с запятой в качестве терминатора, но через устройство пустого оператора, что делает такие вещи, как
x := x + 1;;;;;; RETURN x
юридический. Полагаю, это неплохо. Однако Modula-2 не позволяла гибко использовать разделитель регистра |
; который, кажется, произошел от Модулы-3.
person
Norman Ramsey
schedule
23.02.2010
enum
) каждый элемент находится в отдельной строке: добавление нового значения в конце является просто дополнительной строкой (не требующей изменения новой предпоследней строки), что потенциально позволяет избежать зависимости от / за счет любые изменения в новой предпоследней строке. - person jhfrontz   schedule 15.02.2018