. NET: Почему небезопасный вариант стал неактуальным? - PullRequest
0 голосов
/ 25 февраля 2020

Я только что понял, что сейчас там System.Runtime.CompilerServices.Unsafe. Вы можете создать консольное приложение, написать

Unsafe.AddByteOffset(ref (new int[1])[0], (IntPtr)Int32.MaxValue) = 42;

, и вы получите System.AccessViolationException.

, скомпилированный без блоков /unsafe, fixed или unsafe, просто так , Как с net472, так и с netcore.

Я бы подумал, что если я явно не скажу компилятору, что я хочу делать небезопасные вещи, нарушения памяти невозможны (безопасные ошибки во время выполнения).

Итак когда была потеряна эта гарантия и что ее заменило?

Кроме того, зачем создавать сборку, которая в любом случае позволяет вам делать то, что вы можете делать с unsafe блоками и указателями? Такая сборка не прошла бы PEverify, и это правильно. Теперь ситуация такова, что любая сборка, очищенная PEverify, все еще может использовать Unsafe и быть абсолютно небезопасной на практике, верно? Пахнет странно.

...