The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Выпуск языка программирования Rust 1.47"
Отправлено Ordu, 09-Окт-20 15:04 
> 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 совершенно точно надо было бы оторвать руки за то, что они полезли пилить язык, не ознакомившись с современной им литературой о языках и компиляторах.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру