Я с сабжем не знаком от слова совсем, кроме разве что "там есть borrow checker", что бы это ни значило.
Но попалась ссылка на туториал:
Стал смотреть, и, внезапно, даже все понятно.
Весьма толково освещены основные проблемы C++ (lifetime & aliasing) и показано, как раст их решает.
Все по делу, кто сталкивался, тот поймет.
Досмотрел видео, проникся, пошел читать про раст.
И что я вижу?
В языке нет исключений.
В ЯЗЫКЕ НЕТ ИСКЛЮЧЕНИЙ.
.
.
.
KURWA.
Я не понимаю, кем надо быть, чтобы после 70 или скольки там лет развития индустрии продолжать сочинять языки без исключений.
И вообще, почему каждый очередной "убийца C++" с самого рождения себе что-то отстреливает?
Но попалась ссылка на туториал:
Стал смотреть, и, внезапно, даже все понятно.
Весьма толково освещены основные проблемы C++ (lifetime & aliasing) и показано, как раст их решает.
Все по делу, кто сталкивался, тот поймет.
Досмотрел видео, проникся, пошел читать про раст.
И что я вижу?
В языке нет исключений.
В ЯЗЫКЕ НЕТ ИСКЛЮЧЕНИЙ.
.
.
.
KURWA.
Я не понимаю, кем надо быть, чтобы после 70 или скольки там лет развития индустрии продолжать сочинять языки без исключений.
И вообще, почему каждый очередной "убийца C++" с самого рождения себе что-то отстреливает?
no subject
Date: 2021-12-04 01:50 am (UTC)no subject
Date: 2021-12-04 02:10 am (UTC)Exceptions на современных архитектурах - (почти) zero overhead, пока их не бросать.
Т.е. чтобы не замедляло, бросать надо пореже, в исключительных ситуациях (внезапно) а не строить на них логику.
Вообще, замедлять код может много чего. Хороший погромист на ровном месте родит квадратичный алгоритм, так что теперь, вложенные циклы запрещать?
no subject
Date: 2021-12-04 04:23 am (UTC)Это цитата, а ваша отсылка к криворуким программистам не имеет никакого отношения к стремлению добиться максимальной скорости и производительности.
Также многие считают, что код, рассчитанный на работу с исключениями, теряет линейность и предсказуемость. Если в классическом коде выходы из блока, процедуры или функции находятся только там, где их явно указал программист, то в коде с исключениями исключение (потенциально) может произойти в любом операторе и анализом самого кода невозможно узнать, где именно исключения могут происходить. В коде же, рассчитанном на исключения, предсказать, в каком месте произойдёт выход из блока кода, невозможно, и любой оператор должен рассматриваться как потенциально последний в блоке, в результате сложность кода возрастает, а надёжность снижается.
Так что разработчики Rust имели основания…
nz
Date: 2021-12-04 04:21 pm (UTC)Несомненно, как и поддержка чего угодно в принципе (также см. ниже).
Несомненно, но исключение, как правило, обрабатывается в одном месте, а код ошибки надо обрабатывать в каждой функции в стеке вызовов. Чем глубже, тем веселее. Пять старушек - уже рубль.
Несомненно, я примерно это выше и написал.
Вот-вот.
Отсылка к тому, что всякий инструмент можно применять правильно, а можно и неправильно, и непосредственной вины инструмента в его неправильном применении нет.
Именно, и это и есть the big idea и the killer feature. Если наши ожидания перестали совпадать с действительностью, код не будет сам по себе исполняться дальше и делать неизвестно что, будет откат назад. Да, это не очень хорошо вписывается в классическую парадигму C, где в начале функции ручками malloc и fopen, а в конце fclose и free, опять же ручками. Это требует несколько иного подхода (RAII) и способа мышления (транзакции).
Сложность - понятие сложное (pun intended). Фактическая сложность уходит в типы данных, а то, что остается, становится на порядок проще и надежнее (пример).
Надежность - см. выше, при возникновении нештатной ситуации продолжения не будет без отката до того места, где ее возможно безопасно обработать. Как по мне, так надежнее не бывает.
Слишком часто основания сводятся к "нам это не нравится, а значит, это не нужно никому, потому что мы не ошибаемся".
Я пока не смог нагуглить внятных обоснований такого дизайна от самих авторов, а технических причин как бы нет вообще - сам механизм в языке есть, но его использование максимально затруднено.
Религиозные войны
Date: 2021-12-04 05:23 pm (UTC)Приводить пример с С++ о сложности и надежности - это все равно что прострелить себе ногу. Не помню кто сказал, что если программируя на С - ты стреляешь себе в ногу, то на С++ ногу просто оторвёт!
“Я пока не смог нагуглить внятных обоснований такого дизайна от самих авторов”
Вы мне напоминаете участника религиозных войн, который пытаются найти ошибки и ложь в священных книгах. Это сразу наталкивает на иудеев, которые недовольны христианами и мусульманами, которые извратили их ученье и пошли дальше. Брюзжание и ничего более…
Re: Религиозные войны
Date: 2021-12-04 05:51 pm (UTC)Тот, кто ничего не понимал ни в одном, ни в другом.
П.С. Я, если что, совсем не утверждаю, что раст плох. Напротив, очень многое выглядит замечательно и не вызывает иных эмоций, кроме "ну наконец-то!". На фоне этого отказ от исключений в пользу ручных проверок результата, даже приправленных Result<> и pattern matching, выглядит дико, примерно как построить шикарный звездолет USS Enterprise, но сортиры на нем сделать вида "дырка в полу", потому что так проще, быстрее и диды так делали.
Я вполне могу ошибаться и, может быть, по каким-то причинам именно в расте это оправдано, однако, я таких причин пока что не увидел.
Re: Религиозные войны
Date: 2021-12-04 06:20 pm (UTC)Если С - это удачная попытка заменить ассемблер, то С++ - это путь в никуда… можете меня цитировать…
“Придуманный только что (по историческим меркам) язык уже аналог т.н. "священных" книг?”
Священные книги не были придуманны, а базировались на опыте и мудрости людей и не даром говорят, что это язык на котором с нами разговаривает Бог. Алгоритмический язык не придуман, а точно также основывается на опыте и ошибках старых языков и иногда это случается, что он ведёт не туда, куда надо идти, как это случилось с С++…
“На фоне этого отказ от исключений в пользу ручных проверок результата, даже приправленных Result<> и pattern matching, выглядит дико…”
Они либо добавят исключения в новой версии Rust или предложат, что-то новое, например, если вы не можете жить без исключений, то тогда - plug-in и будет вам счастье!
Re: Религиозные войны
Date: 2021-12-04 06:55 pm (UTC)Надеюсь, вас услышат. Будем ждать.
Re: Религиозные войны
Date: 2021-12-04 08:21 pm (UTC)