единообразие кода чисел
варьируемая длина операндов
единственность операции сдвига
трехзначность функции знак числа
оптимальное округление чисел простым отсечением младших разрядов
взаимокомпенсируемость погрешностей округления в процессе вычисления
Неявная переменная. Получается, ради возврата я должен присвоить в неё, и не могу вернуть оттуда, где у меня уже лежит результат.
Значение по-умолчанию для неявной переменной в случае указательного типа — nil. Получается, если я забыл сделать возврат, я возвращаю nil. Привет, «NoneType has no 'foo' method»!
Мало этого, ещё и маскирование добавили в коктейль. Т.е. если я объявил переменную, а потом сделал return result, что вернётся — моя или неявная?
На момент старта функции переменная result всегда уже объявлена, так что попытка объявить её снова, например, с помощью var result, приведёт к затенению её обычной переменной с тем же именем. Переменная result всегда инициализируется значением по умолчанию для своего типа. Поэтому ссылочные типы данных будут иметь значение nil, так что их при необходимости придётся инициализировать вручную.
В связи с этой книгой у автора (Zed Shaw) случилась большая драма. Например, вот здесь он пишет, что хотел донести мысль о том, что с самого момента изобретения на Си писали неправильно. С ним много кто не соглашался в интернете.
Пояснение: они разбирают столько полей, сколько просят, и не проверяют, что данный JSON-объект вообще соответствует структуре, куда происходит десериализация.
8. На D был написан самый быстрый парсер Json в мире fast, обогнавший почти в два раза самую быструю реализацию парсера Json на С++.
Как ни прискорбно, это не следствие классности Ди. Этот парсер не валидирует входные данные полностью, в отличие от многих других, участвующих в этих тестах производительности. Такая разница в производительности — как всегда, из-за разницы в используемых алгоритмах.
Я попробовал посмотреть на разницу в LLVM IR для ссылки и указателя: is.gd/EyTrrF
Как видим, ссылка явно dereferenceable. Я думаю, что для LLVM указатели с возможностью обнуления — особый случай, и они специально поддержаны. Обобщённого же механизма нет. Да и в core только NonZero, а общего типа с возможностью указать, какие значения особые, нет.
Если для этого нужно усложнять концепцию, вставив в описание Option ручное указание значения-исключения для NONE, такое усложение стоит выигрыша в скорости.
Да, а вы как себе представляете решение этой проблемы без этого, но чтобы нельзя было забыть обработать ошибку?
Позвольте вопрос: вы на Си пишете или так, сопереживаете?
Не понимаю зацикленной логики. Да, в Си это часто решалось значениями-исключениями. Да, это было быстрее. Но это менее безопасно. Сделали более безопасно. Нам не нравится что это стало медленнее. Так что же мы изначально хотели, быстро или безопасно?
Отлов гонок данных во время компиляции.
Код, в котором невозможно забыть обработать ошибку.
И при всём при этом:
Предсказуемое и высокое быстродействие.
Высокоуровневые возможности вроде замыканий и итераторов.
Он пользователь, и для него интерфейс мьютекса — такой. Возможность забыть разблокировку есть.
И вообще, в случае mutex guard за эту часть дизайна отвечает разработчик языка/стандартной библиотеки, а не конечный разработчик.
Это вообще классный ресурс — там много примеров с разными типами данных и разными языками, рекомендую.
Пояснение: они разбирают столько полей, сколько просят, и не проверяют, что данный JSON-объект вообще соответствует структуре, куда происходит десериализация.
Как ни прискорбно, это не следствие классности Ди. Этот парсер не валидирует входные данные полностью, в отличие от многих других, участвующих в этих тестах производительности. Такая разница в производительности — как всегда, из-за разницы в используемых алгоритмах.
Как видим, ссылка явно dereferenceable. Я думаю, что для LLVM указатели с возможностью обнуления — особый случай, и они специально поддержаны. Обобщённого же механизма нет. Да и в core только NonZero, а общего типа с возможностью указать, какие значения особые, нет.
Да, а вы как себе представляете решение этой проблемы без этого, но чтобы нельзя было забыть обработать ошибку?
Позвольте вопрос: вы на Си пишете или так, сопереживаете?