Pull to refresh

Comments 21

Когда рассказываете давно всем очевидные и 1000 раз пережеванные всеми, кому не лень, вещи, рассказывайте хотя бы в контексте популярных и хайповых языков. Есть шанс, что хотя бы не заминусуют.

Грамотное решение проблемы нулевых указателей — использование алгебраических типов данных.

Когда мы имеем вместо void* func() что-то вида fn func() -> Enum_Option, то мы дальше предоставляем программисту простую возможность обработать 'Err' (кодирование которого и стало причиной появления NULL), и возможность безопасно вынуть значение из 'Ok' посредством исчерпывающего pattern matching'а.

Впервые оно появилось в заумных ML'ных языках, но сейчас оно дошло до мейнстрима и его можно использовать не взрывая себе мозг монадками.
UFO just landed and posted this here
Если честно, я аппликативные функторы считаю как раз тем самым «взрывом мозга», который нам пытаются всучить под эгидой удобства от алгебраических типов данных. Так что лучше взять алгебраические типы данных и обойтись без взрыва мозга. Viva Rust, так сказать.
UFO just landed and posted this here
Напишите «что-то вида» на с\с++. Если уж сравнивать примеры кода то хотябы со схожими языками.
Ну, я его только учу, до реального кода пока далеко. Но мои эксперименты показали, что в работе с аллокатором он (Rust) существенно обгоняет Go и находится на одном и том же уровне с Сишным кодом (при использовании одинаковых структур данных, потому что наивный тест на сишном string.h прососал даже python'у из-за неэффективного strlen).
На плюсах вы можете возвращять не голый указатель а обертку, которая может защищать от обращения к нулевому указателю.
Главная проблема в том, что в С++ — МОЖНО. Можно почти всё. В том числе стрелять себе в ногу без предупреждения по модели С. В этом смысле совместимость с С — фатальна для языка, т.к. компилятор не имеет возможности защитить человека от ошибок, и уровень дисциплины что в С, что в С++ оказывается одинаковый.
UFO just landed and posted this here
C++ строго типизируемый, о чём вы?
UFO just landed and posted this here
Тоже об этом подумал. К тому же это явно более зрелый язык.

> избавились от ошибок управления памятью с помощью сборки мусора

Особенно смешно читать вот это.
Вот вот. Сборка мусора — отдельный источник проблем в совсем неожиданных местах
UFO just landed and posted this here
Ну, например запуск сбора мусора в неподходящий момент или нехватка памяти, которая в нужный момент не была освобождена сборщиком. Счетчик ссылок, например как в Objective C мне кажется лучшим решением
UFO just landed and posted this here
>Счётчик ссылок не очень хорошо работает с циклами, приходится извращаться.
А чем плох счетчик ссылок с циклами?

>Запуск в неподходящий момент — это да. Другое дело, правда, что в случае счётчика ссылок вы >тоже не знаете, держите ли вы последнюю ссылку на объект или нет, и запустится ли, скажем, >тяжёлый деструктор вот прям у вас здесь и сейчас, когда вы отпустите потенциально последнюю >ссылку, или нет.
Но вы можете явно на это влиять, может не очень красиво, костыльно, но можно.

Вот кстати еще против аргумент сбора мусора: данные можно организовать так, что будет утечка памяти, сборщик мусора ее не освободит

UFO just landed and posted this here
разыменование нулевого указателя — дефект, который справедливо считается «чумой» современного программирования

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

перегрузка фунции заслуженно считается холокостом современного программирования

ну а серьезно, ну не нравятся указатели, испльзуйте референсы.
Sign up to leave a comment.