Предприняла ли ISO C++ какую-либо попытку стандартизировать `unsafe {}` блоки/функции/пространства имен в языке?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Предприняла ли ISO C++ какую-либо попытку стандартизировать `unsafe {}` блоки/функции/пространства имен в языке?

Сообщение Anonymous »

Ключевое слово unsafe — это относительно знакомая функция языка, известная в основном из C# и Rust.
Общая идея этой функции состоит в том, чтобы определить «безопасное» подмножество, а затем требуют отметки любого использования функций за пределами этого подмножества. Таким образом, небезопасным кодом можно лучше управлять и учитывать в более крупной базе кода или при оценке сторонних зависимостей.
Изображение

(https://www.youtube.com/watch?v =6H-V-0oQvCA)
Были ли попытки внедрить эту функцию в стандарт ISO C++?
Единственное, что мне удалось найти это один из примеров самостоятельного решения с помощью clang-query (https://gist.github.com/htfy96/24b8d6ec ... 8595984315).
В статье Бьярна Страуструпа 2021 года Процветание в многолюдном и меняющемся мире: C++ 2006–2020 (https://dl.acm.org/doi/10.1145/3386320) нет никаких ссылок на реальные предложения по стандартизации. Поначалу обсуждение кажется недружелюбным по отношению к идее unsafe

Комитету неоднократно предлагалось улучшить безопасность типов, запретив
небезопасные функции (например, отказ от C-измов, таких как встроенные массивы и приведения). Однако попытки
удалить функции («объявить их устаревшими») неоднократно терпели неудачу, поскольку пользователи игнорировали предупреждения об
удалении и настаивали на том, чтобы их поставщики реализации продолжали их предоставлять.

также

С самых первых дней «C с классами» люди предлагали создавать безопасные подмножества
переключатели языка и компилятора обеспечивают такую ​​безопасность. Однако эти предложения провалились по одной
из многих причин:
  • Недостаточное количество людей смогли прийти к согласию относительно определения понятия «безопасный».
  • Небезопасные функции (для каждого определения «небезопасного») — это те, которые необходимы для построения основных
    безопасных абстракций.
  • Безопасного подмножества недостаточно. выразительно.
  • Безопасное подмножество неэффективно.
    Вторая причина подразумевает, что невозможно определить безопасный C++, просто запретив небезопасные функции.
    Подход «совершенствование через ограничение» проектирование языков программирования в лучшем случае работает в очень
    ограниченных ситуациях. Вам необходимо учитывать контекст и характер использования функций, которые в целом
    небезопасны, но имеют безопасное использование. Более того, стандарт не может отказаться от обратной совместимости
    (1.1), поэтому нам нужен другой подход.
но в заключительных частях становится гораздо более дружелюбным.

Основной подход — это не простое ограничение, а то, что я назвал подходом «подмножество супермножества»
или ПРОДАТЬ [Stroustrup 2005]:
  • Во-первых, дополните язык библиотечными возможностями, чтобы создать прочную основу для использования.
  • Затем выполните подмножество, удалив небезопасные, подверженные ошибкам и чрезмерно дорогостоящие объекты.


Подробнее здесь: https://stackoverflow.com/questions/788 ... ns-namespa
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»