Просто чудесный
пост у
thesz, наглядно демонстрирующий мой лозунг из сабжа.
Давайте пройдёмся по пунктам:
> Большое неудобство, однако, составляет отсутствие подсказок компилятора в сообщении об ошибке
Rust прекрасно всё подсказывает, вплоть до того, что явно указывает как именно тебе надо исправить код, чтобы всё заработало.
> но сама необходимость
(
Read more... )
В Rust объект - это значение, или изменяемый кусок памяти? Если последнее, то увы.
>Ведь его же создавали люди, которые много программировали на C++ :)
Его создавали люди, которые мало программировали на Хаскеле, иначе бы его не было.
Надо мне собраться с силами. :(
Reply
emptyASTWST :: ASTWST
emptyASTWST = A (error "no AST") (error "no ST")
setAST :: ASTWST -> AST -> ASTWST
setAST (A _ _) ast = A ast (error "no ST")
setST :: ASTWST -> ST -> ASTWST
setST (A ast _) st = A ast st
computeASTST :: ASTWST -> ASTWST
computeASTST a@(A ast _) = setST a (computeSTFromAST ast)
computeASTWST :: AST -> ASTWST
computeASTWST ast = computeASTST $ setAST emptyASTWST ast
Здесь error используется для 1) уменьшения нагрузки на меня, любимого (тесты покажут) и 2) упрощения проектирования.
Значения лучше объектов.
Reply
Исходная постановка звучала так: "Моя проблема в C++ как раз в согласованности инициализации. Типа, программу разобрал, но таблицу символов не положил.".
Это делается просто возвратом из инициализатора заполненной структуры с двумя полями (AST и ST) - на компиляции гарантируется, что они были проинициализированы (а вот в С++ не гарантируется). "Забыть" положить что-то невозможно.
Но я понял, какую конкретно фичу ты хочешь продемонстрировать. Если что, то в Rust можно вот ровно то же самое написать, что у тебя в сниппете выше (если хочешь, я тебе приведу код, но ты же его всё равно читать не будешь). Просто в Rust это ни за чем не надо, делается по-другому и проще.
Reply
Изменение ранее созданных данных это неявный канал обмена информацией.
Вдумайся, чтобы понять.
Если ржавчина помозволяет менять ранее созданные данные, то она позволяет сделать данные несогласованными. Как и любой другой язык с изменяемыми данными (эффектами), не ограниченными типами.
Например, разбор чего-то во что-то может поменять что-то до обнаружения ошибки и оставить так, как получилось вмето того, чтобы оставить так, как было.
Reply
> Например, разбор чего-то во что-то может поменять что-то до обнаружения ошибки и оставить так, как получилось вмето того, чтобы оставить так, как было.
Нет, не может. Для этого функция разбора должна получить объект по unique-ссылке, а не по shared.
В остальном всё то же самое, что и в хаскеле - там же тоже можно вернуть не то, что получил, главное ведь чтобы по типам сошлось.
Reply
Reply
Reply
А тебе уже больше 30.
С другой стороны, интересный опыт и новое понимание меня настигали и вот тут недавно, в районе 45 лет.
Так что, не отчаивайся.
Reply
Да блин, тридцать пять уже скоро, даже не напоминай :(
Слушай, кстати, а правду пишут, что после 35 в мозгу начинается интенсивная гибель нейронов, и, вообще, человек становится консервативным и перестаёт воспринимать всё новое?
Reply
И это правда.
У нас организм умеет вырабатывать нейротрофический фактор мозга, который увеличивает ветвистость старых нейронов и растит новые. Он вырабатывается в ответ на три стресса - долго идти (нагрузка на выносливость), быстро бежать (нагрузка на силу) и голод. Для ходьбы доказано, что она растит мозг (и бег, и велик, и плавание). Сила имеет немного другое действие. Как и голод - сила и голод улучшают гормональный баланс и улучшают концентрацию внимания, стремление к новому и живость мышления.
Я до 42 лет очень много ходил, да и сейчас стараюсь тоже.
Очень рекомендую. ;)
Статью в википедии про нейротрофический фактор мозга прочитай. Там не все, но достаточно, чтобы изменить образ жизни. ;)
Reply
Reply
Reply
Пример отличается от Си наличием "значений", а не объектов.
Журнал, что ли, взломали?
Reply
Reply
Похоже, журнал thedeemon таки взломали.
Reply
А вот наоборот - нет. ;)
Reply
Leave a comment