> i: u64
> vs
> uint64_t i Хмм... Заглянул в википедию: я думал, что первое как раз и есть алголовский синтаксис, но оказывается, что нет.
Нуок, тогда преимущества, _паскалевского_ способа декларации: он проще. Как с точки зрения алгоритмического парсера (прочитав i в "i: u64", парсер уже знает, что i -- это имя декларируемой переменной, прочитав : он знает, что дальше пойдёт имя типа, прочитав u64 он знает, что это имя типа, даже не сверяясь со списком имён типов), так и с точки зрения человека.
Почему важна такая простота с точки зрения компилятора? Да потому что она избавляет от необходимости декларировать тип _до_ того, как задекларирована переменная этого типа. В C и C++ из-за этого приходится отдельно писать декларации, отдельно дефиниции. Из-за этого в C и C++ возникают интересности, когда изменение порядка деклараций может изменить семантику. В C++ с этим всё совсем плохо на фоне возможностей перегрузки.
С точки же зрения человека, я думаю, полезность простоты обосновывать не нужно, но может быть неочевиден сам факт простоты, так? Ну глянь на C'шное что-нибудь:
int (*fns[16])(int * const * p);
Ты чуешь в чём дело? Тут синтаксис типа перемешан с синтаксисом переменной. Чтобы в этом разобраться нужно аж целое спиральное правило. Без которого плюс-минус можно обойтись, но когда в типе появляются словечки типа const, перетасованные с * -- сам чёрт ногу сломит к чему именно относится этот самый const -- к указателю или к тому на что он указывает?
rust'овый синтаксис отделяет имя типа от имени переменной. Имя типа всегда одинаково, вне зависимости от того, суёшь ли ты его в sizeof, или объявляешь переменную такого типа, или объявляешь функцию, возвращающую значение такого типа.
И кстати обрати внимание на int*const*p: замечаешь, что оно выглядит как два умножения? Прикинь теперь:
a * b;
Что это? декларация переменной b с типом указателя на a, или умножение a на b с игнорированием результата умножения? Чтобы распарсить такое надо знать, что a -- это имя типа. То есть, чтобы понять синтаксис, надо заглянуть в семантику. За такое, если по хорошему, надо руки отрывать, и если разработчикам алгола можно простить ещё -- они писали в такой древности, когда разницу люди не понимали, то разработчикам C совершенно точно надо было бы оторвать руки за то, что они полезли пилить язык, не ознакомившись с современной им литературой о языках и компиляторах.