Cіпласпластик
531 subscribers
161 photos
35 videos
2 files
253 links
🇺🇦 Про айті та дотичні теми загалом, ну й трохи про C++.

Мої емоджі:
https://t.me/addemoji/AdaptiveDevIcons
https://t.me/addemoji/VehicleBrands
Download Telegram
Після вчорашніх всесвітніх забавок через CrowdStrike це було питанням часу, коли знов почнуть парити про memory safety звідусіль.

І справді, наразі найбільш помітні та водночас підозрілі факти — це забитий нулями sys-файл драйвера та спроба звернутися до памʼяті через null-вказівник. Про друге я додам від себе «пару» слів.

Навіть якщо тред не дочитали, у вас, мабуть, все одно промайнула думка, мовляв, треба було на #Rust писати — там-то таке не могло трапитися, бо «Rust же — МЕМОРІ-СЕЙФ!!!11», не те що ваш C++.

Теза перша:
Безпека доступу до памʼяті — не єдине, про що треба подбати.

Це далеко не єдиний вид безпеки, який треба забезпечити, і маючи тільки його ви досі маєте нуль гарантій, що ваша програма коректна 🙁, бо купа іншого може наламатися. Я вже скидав сюди відос Страуструпа на тему. З іншого боку, звісно, добре мати на одну проблему менше, але треба б ще бути певним, що воно не додає інших.

Теза друга:
На мій погляд, безпека може забезпечуватися щонайменше двома різними методами: безпекою інструментів та дисциплінарною безпекою.

І вони в жодному разі одна одну не виключають. В універах навіть змушують здавати охорону праці, яку ви, певен, ненавиділи, для отримання диплома. Вгадайте навіщо.

У моєму дитинстві у нас в хаті були спеціальні пластикові заглушки в розетках «від/для дітей». І знаєте що? Це не спинило малого мене перевірити, що буде, якщо встромити в розетку довгогубці, які так чудово пасували під два отвори. Інструмент (заглушки) був, а дисципліни бракувало.

Теза третя:
Найкращий інструмент — не той, що є найбезпечнішим, та не той, що дає результат найшвидше, а той, що забезпечує найкращий баланс цих двох параметрів під конкретну задачу.

Подумайте самі. У вас вдома праска є? Чи безпечний це інструмент? Ну, з розвитком технологій стало краще звісно, та трирічному мені, який вхопився долонею за розпечену поверхню, так не здавалося. Навіть якщо прибрати аспект високої температури, праска може на ногу впасти чи на голову з шафи, чи… ну, я не знаю… у ванну вам, підʼєднана до розетки при цьому. Як ми уникаємо цього? Дисципліною під час використання звісно. А дисципліна потребує навчання, потребує формування навичок — потребує часу, іншими словами.

Або ножі… Ух, це просто протилежність слова «безпечний», і все ж в кожній хаті є щонайменше декілька. Навіть якщо у вас є безпечніша нарізна машина (блендер якийсь абощо), то й звичайні ножі все одно також.

Або варильні поверхні. Ось тут прям прогрес помітний. В дитинстві у більшості газові були. Та й досі є, але я вже років 10 не користувався. Є резистивні електричні. Вони не тільки безпечніші, бо немає відкритого полумʼя або можливості лишити відкритим газ, так у них і ККД більше. А ще є індукційні, які на жаль потребують особливого посуду, але натомість отримуємо миттєвий нагрів, ККД на рівні 90%, неможливість ввімкнути порожню тощо. При цьому місця займає стільки ж, перенавчатися для користування не треба. Оце я розумію — покращення!

Повертаючись до null-поїнтерів… Я великий шанувальник кращих інструментів. Коли я бачу щось, що будь-яким чином покращує мені роботу чи життя — я, не вагаючись, починаю цим користуватися.

Та не буває нічого безпечного на 100%. Всі інструменти небезпечні до певної міри. Просто вчіться, бляха, ними користуватися!

У сучасному C++ писати raw-вказівники взагалі вважається ганьбою, тому що вже існує купа засобів та методів програмувати цією мовою на порядок безпечніше.

І Rust міг би бути інструментом, що ще більше поліпшує життя програмістам, та я не бачу, щоб він ним справді був. Конкретно в цій ситуації з null-поїнтером Rust може й справді б зарадив, але в численних інших — ні, а у деяких випадках може й інші проблеми б приніс. Та в будь-яких розмовах на цю тему мова C++ — це завжди щось чорне-чорне, суцільне зло, винахід диявола, небезпека небезпек, а Rust — це завжди порятунок, манна небесна, silver bullet та ложка з «Матриці». Ні! Заїбало.

Звинуватити C++ легко. Але скажіть мені краще, як так вийшло, що 45-кілобайтний sys-файл був забитий нулями, і це потрапило в реліз. Де дисципліна, Лебовскі?
Please open Telegram to view this post
VIEW IN TELEGRAM
😁10👍6😱1