The OpenNET Project / Index page

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



"Выпуск языка программирования Rust 1.51"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Подсказка: Второй уровень иерархии тем в форуме реализован через вкладку "Показ ключевых тем".
. "Выпуск языка программирования Rust 1.51" +/
Сообщение от Урри (ok), 26-Мрт-21, 18:14 
Хм, непонятен вопрос "чем write и writeln! семантически разные вещи?".
Ну ок.

> Под write понимается std::io::Write::write или может std::fs::write...?

Совершенно без разницы, потому что _семантически_ эти функции ничем не отличаются.

Разговор шел и идет о том, что в расте была введена (и до сих пор используется) бессмысленная и, по большому счету, вредная сущность "!", как обозначение макросов.

Семантически, макросы ничем, никогда и никак не отличаются от функций. Макросы и функции - это одно и то же. Есть аргументы на вход, есть некое действие, есть результат на выход. В середине черный ящик.

Программист программирует с помощью языка, а не для языка. Идеальный язык программирования вообще позволяет писать человеческим языком что программисту надо и переводит его слова в последовательность команд процессору.

Так было во времена лиспа, так осталось в современные времена.

В языке С++ реализация правильная. Модификатор constexpr превращает функцию в макрос без каких-либо переделок, потому что это одно и то же (при условии, конечно же, что компилятор с этим может справиться).

В языке С это вообще не сделано. Причина простая - С достаточно низкоуровневой язык с возможностью тонкой оптимизации кода. Программисту приходится думать, что он вычисляет в рантайме, а что на этапе компиляции.
Решение об этом принимает сам программист - если он считает, что не важно когда и как вычисляется функция, то он ее пишет как обычно. И в стандартных хидерах С таких примеров - масса.

В расте решили разницу прибить гвоздями. Не знаю, чем при этом руководствовались авторы - боюсь, что ничем.

Характерный пример: write - печать, writeln! - печать с переводом строки. Программисту надо знать только одно - что эти функции делают, ему не надо знать как эта функция реализована в библиотеке - макросом, функцией, на ассемблере или через виртуальную машину. Ему надо только знать что эта функция делает и настолько эффективно.

Если бы, повторяю, если бы функция write была чистой функцией, а функция writeln ею не была, тогда с целью облегчения жизни функциональщику стоило бы ее как-то выделять. И никаких претензий к этому бы не было.

Почему я к этому придрался? Потому, что это одна из многих вещей, которая делает раст плохим языком и я с удовольствием обращаю на это внимание. Глядишь, меньше будет .овноязыков, качественнее софт и легче наша будущая жизнь.

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

Оглавление
Выпуск языка программирования Rust 1.51, opennews, 26-Мрт-21, 13:52  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



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

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