The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Вышел компилятор языка D 2.076, opennews (??), 02-Сен-17, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


33. "Вышел компилятор языка D 2.076"  +1 +/
Сообщение от Аноним (-), 03-Сен-17, 08:01 
Почему они auto считают достижением? Пришлось в начале программы искать используемую в выражении переменную, чтобы определить тип
Ответить | Правка | Наверх | Cообщить модератору

35. "Вышел компилятор языка D 2.076"  +/
Сообщение от Crazy Alex (ok), 03-Сен-17, 12:34 
Оно и есть достижение. Во-первых, им пользуются там, где нужен просто "правильный" тип, а какой конкретно - не важно. Во-вторых, IDE при необходимости тип покажет, если уж совсем невмоготу. Но при корректном использовании в этом нужды нет, и так видно.
Ответить | Правка | Наверх | Cообщить модератору

37. "Вышел компилятор языка D 2.076"  +4 +/
Сообщение от Orduemail (ok), 03-Сен-17, 14:11 
> Почему они auto считают достижением?

Я не знаю, зачем это в D, потому что с D знаком на уровне "как-то раз пролистал википедию", но вообще в этом есть бонус: код становится полиморфизм-френдли. Допустим, есть у тебя какой-нибудь контейнер, для которого тип объявляется "по науке". Тебе нужен итератор, ты пишешь что-то типа: auto iter = v.iter();. Если ты потом меняешь тип контейнера (либо потому что он параметризованный, либо перебивая руками сорцы), тебе не надо переписывать объявление переменной iter. Если ты меняешь итератор: auto iter = v.reverse_iter(), или v.iter().filter(|x| x > 0), тебе не надо выяснять как в результате будет называться тип итератора. При этом любому, кто будет работать с этим кодом, совершенно не важно как называется этот тип, важно что он делает, а что он делает описано справа от знака равенства.

Плюс это по мелочи удобно и для примитивных типов. Если я делаю open, то какого типа я получаю результат? int? int32_t? int64_t? fd_t? Да мне плевать, если по-хорошему, я задумываюсь чтобы сделать хорошо компилятору и не спровоцировать ненужных и потенциально ошибочных преобразований типов -- ну, если я напишу что-то типа int64_t fd = open(...);, то всё будет работать, но потом этот fd будет приводится к int32_t при каждом использовании; компилятор наверное соптимизирует; но зачем проверять?

Ответить | Правка | К родителю #33 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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