Comments 9
1. Код, который выполняется до Main
.cctor, не? С классическим TypeInitializerException?
В 21-м месте библиотеки классов. Например, ArgumentNullException.ThrowIfNull:
Штука прикольная и в некоторых местах прям очень интересная, но я предпочитаю избегать stackwalk при проверке на null (Старая привычка с шаблонов в C++):
_ = value ?? throw new ArgumentNullException(nameof(value));
_privateField = argumentValue ?? throw new ArgumentNullException(nameof(value));
var methodResult = InvokeSomeMethod(arg1, arg2)
?? throw new InvalidOperationException(nameof(value));Спасибо за внутрянку :)
Да, он самый — .cctor модуля и исключение оборачивается в TypeInitializerException.
Про ?? throw. Да как бы рабочее но по замерам там нет особой разницы, чистая мелочь 0,3944 против 0,3969 нс.
По поводу скорости, то есть ещё атрибут:
[MethodImpl(MethodImplOptions.AggressiveInlining)]Но я его на проде ни разу не видел. Т.к. в момент появления он был "на будущее".
И так его все и забыли...
Там это уже на откуп конткретному CLR, а там уже как карта ляжет, по аналогии с Мьютексами на *nix машинах.
"С++ сложен и небесопасен для бизнеса. Вот придет .Net и все будет хорошо, зачем вам указатели и работать с памятью ?" говорили они в 1999 ...2001 году. Как сейчас помню 😳🧐 Прошло всего-то 20+ лет...
Такого наворотили, мама не горюй..
Разве кто то Вас заставляет всё это использовать в своих программах? Как по мне, 99% написанного в "А чё, так можно было?" это для "чтения на ночь" - что бы спалось лучше. IMHO, вряд ли это когда то пригодится в реальной жизни. Согласен с ZetaTetra - спасибо автору за описание таких тонкостей.
Как по мне, 99% написанного в "А чё, так можно было?" это для "чтения на ночь" - что бы спалось лучше. IMHO, вряд ли это когда то пригодится в реальной жизни.
Я бы так не сказал: почти из каждой статьи беру что‑то полезное для своих числодробилок на C#. Вот тот же SkipLocalsInit из этой статьи — очень полезная вещь, если у вас много массивов на стеке лежит (я их в одном проекте столько пложу, что даже приходится увеличивать в разы стандартный размер стека в тредах).
Можно подробнее?
> Разве кто то Вас заставляет всё это использовать в своих программах?
Никто не заставляет. Я отлично помню как маркетинг пропихивал .Net, пытались и в бизнес его впихнуть и подвинуть Java. Я отлично помню .Net 1 beta 2, и тестовые миграции кода VB 6 в VB.Net. И отлично помню с чего начиналось, вплоть до обещаний. Кто-то ее помнит "Windows.NET is the next generation of Windows. " ?
У меня еще пару проектов на C# и .Net 1.0 осталось. И я вижу эволюции платформы, видно сколько усилий в нее вложено за это время и видно что все более и более дает доступа к низкоуровневым вещам, а они требуют весьма нетривиальных знаний что бы их правильно использовать.
А чё, так можно было? Три недооценённых атрибута.NET