Как стать автором
Обновить
66
0
Михаил Панков @mkpankov

Системный программист

Отправить сообщение
Как я понял, можно написать return «Вася», а можно — result = «Вася», итог один и тот же.
В чём смысл этой конструкции тогда?
  1. Неявная переменная. Получается, ради возврата я должен присвоить в неё, и не могу вернуть оттуда, где у меня уже лежит результат.
  2. Значение по-умолчанию для неявной переменной в случае указательного типа — nil. Получается, если я забыл сделать возврат, я возвращаю nil. Привет, «NoneType has no 'foo' method»!
  3. Мало этого, ещё и маскирование добавили в коктейль. Т.е. если я объявил переменную, а потом сделал return result, что вернётся — моя или неявная?
На момент старта функции переменная result всегда уже объявлена, так что попытка объявить её снова, например, с помощью var result, приведёт к затенению её обычной переменной с тем же именем. Переменная result всегда инициализируется значением по умолчанию для своего типа. Поэтому ссылочные типы данных будут иметь значение nil, так что их при необходимости придётся инициализировать вручную.
Адище.
В связи с этой книгой у автора (Zed Shaw) случилась большая драма. Например, вот здесь он пишет, что хотел донести мысль о том, что с самого момента изобретения на Си писали неправильно. С ним много кто не соглашался в интернете.
На днях видел. Внизу есть пример с Node.js.

Это вообще классный ресурс — там много примеров с разными типами данных и разными языками, рекомендую.
С главной репозитория:
The contained functions avoid… input validation.
Пояснение: они разбирают столько полей, сколько просят, и не проверяют, что данный JSON-объект вообще соответствует структуре, куда происходит десериализация.
По поводу 8.:
8. На D был написан самый быстрый парсер Json в мире fast, обогнавший почти в два раза самую быструю реализацию парсера Json на С++.
Как ни прискорбно, это не следствие классности Ди. Этот парсер не валидирует входные данные полностью, в отличие от многих других, участвующих в этих тестах производительности. Такая разница в производительности — как всегда, из-за разницы в используемых алгоритмах.
Я попробовал посмотреть на разницу в LLVM IR для ссылки и указателя: is.gd/EyTrrF

Как видим, ссылка явно dereferenceable. Я думаю, что для LLVM указатели с возможностью обнуления — особый случай, и они специально поддержаны. Обобщённого же механизма нет. Да и в core только NonZero, а общего типа с возможностью указать, какие значения особые, нет.
Да, это интересная идея. Я думаю, что сейчас это требует поддержки в LLVM, поэтому сложно делать это для любых типов.
Это не «бескомпромиссно», это небезопасно.

Если для этого нужно усложнять концепцию, вставив в описание Option ручное указание значения-исключения для NONE, такое усложение стоит выигрыша в скорости.
Да, а вы как себе представляете решение этой проблемы без этого, но чтобы нельзя было забыть обработать ошибку?

Позвольте вопрос: вы на Си пишете или так, сопереживаете?
Не понимаю зацикленной логики. Да, в Си это часто решалось значениями-исключениями. Да, это было быстрее. Но это менее безопасно. Сделали более безопасно. Нам не нравится что это стало медленнее. Так что же мы изначально хотели, быстро или безопасно?
На правах безумной идеи: тегированная память, как в Эльбрусах, была бы весьма кстати.
Компилятор сообщает о синтаксической ошибке на «hello world», взятый из учебника.
Какая ошибка у вас?
Компилятор Rust выдаёт не исполняемый код, а код в LLVM IR.
Это не так, компилятор Rust как исполняемый файл rustc выдаёт исполняемый код. LLVM IR используется внутри и скрыто от пользователя. Visual C++ используется не здесь, а при компоновке с системными библиотеками и нужен если вам нужно MSVC ABI — из всего Visual C++ нужен лишь link.exe.
Ни к чему нападать на человека, который заинтересовался языком, задаёт нормальные вопросы и пытается разобраться.
Нехорошо людей за глаза неадекватами называть.
Деньги зарабатывают? Зарабатывают. Нормально для языка, который стабилизовался вот ещё меньше, чем полгода назад.
больше, чем полтора ботана, надеюсь
Линус вон вообще один начинал, в чём проблема-то?

Да и, что меня ловить-то, я и сам поймаюсь.

Redox SLOCs


А code churn на уровне 200 000 — 2 000 000 строк это уже извините меня не «поделка», как ни крути.

А до продакшена этой поделке лет 5 в лучшем случае, 20 в обычном.
Сколько лет пройдёт до того, как махровая индустрия возьмёт на вооружение Rust обсуждать есть смысл только с учётом того, что Go появился на 3 года раньше Rust. Прямые сравнения неуместны.
На Skylight-то посмотрите, прежде чем обвинять в некомпетентности.
Логика на уровне «я не слышал, значит этого нет». А я слышал про Skylight и MaidSafe, и чего, кто теперь прав?

Да, это боевой код, который работает в реальных условиях — это production. Его размер здесь не важен, но если хотите, то вот цифры (это честные SLOC, без пробелов и комментариев):

У MaidSafe всё ядро распределённой сети на Rust (14000 строк).

Redox — это активно разрабатываемая ОС на Rust. 40000 строк кода на Rust. И пока вы не возразили, что этим «никто не пользуется» или «вы про это не слышали» — вспомните, как начинался Linux.
Да нет, не рано:

Все ссылки, кроме последней — на релевантные статьи или код.

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность