big
можно использовать как scoped global var
Anonymous
То есть если поменять шило на мыло - сразу код станет понятным и удобным?
doc
удобнее станет, да
Anonymous
с хорошей фантазией, мне кажется, можно сделать даже pure-функцию непонятной, сложной и ненавистной
big
если взять шило - асм, поменять на мыло - си
big
то станет удобнее)
big
с хорошей фантазией, мне кажется, можно сделать даже pure-функцию непонятной, сложной и ненавистной
ага, никто и не говорит что чистые функции панацея. С другой стороны они проще отлаживаются и рассуждать проще
doc
а почему бы просто не писать хороший понятный код используя лучшие практики? все уже давно известно - изучи и пиши. тебе язык все дал, язык тебя ограничил. нет, я хожу глобальный мутабельный стейт
Andrei
я не ругаюсь, это с одной стороны даже хорошо, хоть с другой мне и обидно, что чужой unsafe код из стандартной библиотеки использовать хорошо, а писать свой - плохо, ты не справишься, ты засегфолтишь, ты глупый программист"
openssl всякие тоже умные программисты пишут ну и вообще сишечька для умных. только такие и могут свободно оперировать всей информацией, которая требуется для разработки на C, не допуская при этом ошибок.
doc
родина дала звезды на погоны, носи не хочу. нет! я буду гавно жрать
doc
сорян не удержался(
Andrei
эти знаменитые 10х разработчики
ага. да только гугл уже несколько лет подряд по миллиону-другому выплачивает за уязвимости
Anonymous
Вообще с рефакторингом я не разбираюсь и не могу спорить об удобстве работы с кодовыми базами. Могу спорить о читабельности всяких X.unwrap().or_else().rewrap() и деревьев из треугольных скобок
Andrei
родина дала звезды на погоны, носи не хочу. нет! я буду гавно жрать
опять же чтобы увидеть пользу от иммутабельности и прочей функциональщины умозрительно, т.е. не хлебнув ведерко-другое самостоятельно, надо быть сильно умнее меня
doc
code of conduct
Ilyas
Народ, смысл unsafe вообще в чём? Не в том чтобы избежать сегфолтов как таковых вообще, а чтобы если таковой случится, было понятно где конкретно багу искать, не так ли?
Cuno
Собственно, смысл unsafe в том, что без него непонятно где safe.
Anonymous
Народ, смысл unsafe вообще в чём? Не в том чтобы избежать сегфолтов как таковых вообще, а чтобы если таковой случится, было понятно где конкретно багу искать, не так ли?
чтобы можно было писать код ближе к железу, драйверы, указатели, ручное управление памятью. В общем, доступ к низкоуровневым вещам, чтобы увеличить скорость работы или чтобы писать код там, где проверки Rust работают неправильно, например. когда железо пишет в память по адресу х0324023, а тебе надо из этой памяти считать данные, без unsafe Rust будет думать, что ты обращаешься к случайному куску памяти и запретит компиляцию
Ilyas
Дабы не приходилось весь стектрейс переворашивать, если где-то там что-то отвалилось
Cuno
Дабы не приходилось весь стектрейс переворашивать, если где-то там что-то отвалилось
Не совсем так. Это помогает с локализацией ошибок, но не факт, что ты увидишь этот unsafe в стектрейсе. Ошибка в unsafe может привести к падению в safe коде.
Ilyas
Не совсем так. Это помогает с локализацией ошибок, но не факт, что ты увидишь этот unsafe в стектрейсе. Ошибка в unsafe может привести к падению в safe коде.
На этот случай можно ещё валидацию состояния в кастомных типах реализовать в рантайме, которую потом можно будет через #[cfg()] или тот же debug_assert!() из релизных билдов вырезать.
Andrei
Heartbleed
дык отож. А писал это небось высокий профессионал, да и кодревью не менее высокий профессионал делал. А поди ж ты.
Cuno
пожалуй откажусь
Хорошая практика, на самом деле.
Ilyas
По типу того как если бы в дебаговых сборках тип str опционально проверял на валидность содержимого по юникоду после unsafe
doc
Хорошая практика, на самом деле.
хз. звучит сложно если честно. я бы выбрал простое железобеннотое решение
Ilyas
Если конечно завести привычку совать их на каждый чих... %)
Cuno
хз. звучит сложно если честно. я бы выбрал простое железобеннотое решение
Писать по паре ассертов в каждой функции не так уж и сложно.
doc
Rm rf?
нет. я просто предпочитаю простое сложному. надо понимать почему код сложный - потому что написали сложно, или потому что задача действительно сложная.
でゲソ
Как-то так разгребаю копипасту
Ilyas
Задачи бывают с подковырками, особенно в плане задействия секьюрити
Αλεχ
точно также с помощью unsafe можно делать небезопасные высокоабстрактные вещи
Αλεχ
типа split_at_mut
でゲソ
Можно и статическим анализатором пробегать, но это же не сивей
doc
там в расте компилятор ~= статических анализитор
でゲソ
Именно. Бороучек не нужон. Надо чтоб пяткой левого уха знать что там точно ничего не сегфолтнется
պլհկ
Сегфолта не будет
でゲソ
Зуб чтоб ставил
Loo
истинное лицо
Loo
айти комьюнити
でゲソ
Ничего страшного что их всего 32. Тут всего по 64 потока
Anonymous
ага, конечно https://github.com/redox-os/drivers
Что? Там и unsafe, и #![feature(asm)], и #![deny(warnings)]
Ilyas
Как-то видел ТЗ, где перед установкой сеанса в пределах коннекта по TLS надо было ставить таймер на строгое количество миллисекунд сразу после получения запроса, а потом уже считать ключи и прочую муть. Причём если бы ключи до конца таймера не успевали бы посчитаться, надо было дропать сокет будто бы он и не был открыт, причём если с той стороны шли keep-alive, надо было отвечать TCP RST на каждый из них, причём ещё и время отправки выбирать с учётом TTL
Ilyas
Это всё безопасники заморочились, чтобы "ни бита инфы о ключах не слить, даже (и особенно) по таймингам"
Αλεχ
Что? Там и unsafe, и #![feature(asm)], и #![deny(warnings)]
ну так это хренак хренак и в продакшн
doc
безопасники новые потенциальные дырки в коде придумали
Αλεχ
никто не говорит, что так надо делать
Anonymous
никто не говорит, что так надо делать
Так и зачем этот репозиторий прислали с сообщением "ага, конечно" в ответ на моё объяснение применения unsafe?
Andrei
Можно и статическим анализатором пробегать, но это же не сивей
заставлять компьютер делать работу, для которой его изобретали? еретик! сжечь его!
Αλεχ
Ну, можно посчитать, сколько там использований unsafe
Αλεχ
и сколько там слово fn встречается
Anonymous
Ну, можно посчитать, сколько там использований unsafe
по-моему мы спорим о чем-то, о чем нет смысла спорить
Αλεχ
вот и я так думаю
Αλεχ
unsafe нужен для того, чтобы упростить компилятор
Αλεχ
чтобы тот проверял только наиболее вероятные сценарии
Αλεχ
а не все вообще