Компанія Microsoft планує суттєво переробити модель безпеки пам’яті в мові програмування C#. Продакт-менеджер .NET Річард Лендер опублікував розгорнутий допис, в якому описав, як команда збирається переосмислити роботу з ключовим словом unsafe — зробити небезпечний код більш помітним і керованим, зберігши при цьому автоматичне управління пам’яттю, пише The Register.
Читайте также: Скільки Років Тіні Кароль: Вік, Біографія та Кар’єра

«Ми бачимо майбутнє, де C# входить до переліку мов, які обирають і відзначають саме за контроль над безпекою типів і пам’яті», — заявив Лендер.
Що таке unsafe і навіщо він взагалі потрібен
Більшість C#-розробників ніколи не стикається з unsafe — це вузькоспеціалізований інструмент, що існує в мові з першого релізу. По суті, написання unsafe-коду — це написання коду на C всередині C#-програми. Він потрібен там, де без прямого доступу до пам’яті не обійтись: взаємодія з операційною системою, робота з пристроями, що відображаються у пам’ять, або реалізація критично важливого за швидкістю коду. Unsafe дозволяє використовувати вказівники, які не відстежуються збирачем сміття .NET.
Що зміниться в C# 16
Нова модель з’явиться в C# 16 — до неї ще дві версії попереду, реліз заплановано на кінець 2027 року разом із .NET 12 (версія з довгостроковою підтримкою). Preview-версію слід очікувати вже в C# 15 і .NET 11.
Головна зміна: позначення методу як unsafe тепер автоматично вимагатиме, щоб усі його виклики також перебували в unsafe-контексті — якщо тільки це явно не обмежено всередині методу. Іншими словами, «небезпечність» тепер поширюватиметься вгору по ланцюжку викликів, а не ізолюватиметься всередині одного блоку.
Також зміниться область застосування модифікатора: позначати цілий тип як unsafe стане неможливо — дія звужується до окремих методів, властивостей і полів. Крім того, використання самих вказівників і деяких виразів із ними перестане вважатися unsafe — небезпечним залишиться лише безпосереднє розіменування вказівника та доступ до некерованої пам’яті.
Видимість, а не заборона
Принципово важливо: мета змін не в тому, щоб зробити небезпечний код технічно менш небезпечним, а в тому, щоб зробити його більш помітним і зрозумілим при рев’ю. До цього додаються вимоги до документування — спеціальні коментарі на unsafe-членах із описом контракту використання, які заохочуватимуться статичними аналізаторами.
Читайте также: Штучний інтелект для далекого космосу. НАСА тестує унікальний надпотужний процесор
Розглядається також відображення спеціальних значків на пакетах у NuGet — щоб одразу було видно, чи дотримується пакет нової моделі безпеки.
Для C# 16 зміни будуть опціональними: розробники зможуть продовжувати працювати за старою моделлю C# 1.0. Проте стандартні бібліотеки .NET вже підключаться до нової моделі. У майбутніх версіях мови Microsoft планує зробити нову поведінку поведінкою за замовчуванням.
«Наш намір — зробити нову модель безпеки C# новою нормою», — підкреслив Лендер.
Реакція спільноти
Розробники загалом відреагували позитивно. Один із коментаторів на Reddit зазначив, що активно пише на обох мовах і вітає зближення C# з підходами Rust, не заперечуючи проти того, щоб C# ставав дедалі більш схожим на керований Rust.
Є й парадокс: розробники, які пишуть бізнес-застосунки, взагалі не відчують жодних змін — вони ніколи не використовують unsafe. Проте Лендер наполягає, що ця зміна входить до числа найбільш важелевих покращень, які можна зробити для підвищення довіри до безпеки C#-коду загалом.
Нагадаємо, кілька тижнів тому Microsoft опублікувала код найстарішої версії DOS, яку вважали втраченою десятки років.
Читайте также: Невтішний прогноз. Через сорок років населення Землі може скоротитися вдвічі – дослідження
Підписуйтесь на нас у соцмережах: Telegram | Facebook | LinkedIn
