Разделы презентаций


Истории из жизни одного Null Guard презентация, доклад

Содержание

О себеЗарабатываю на жизнь программированием с 2005 годаПрограммировал еще на .net framework 1.0Помню С# без Generics

Слайды и текст этой презентации

Слайд 1Истории из жизни
одного Null Guard
Константин Рудниченко
CTO, Cadwise

Истории из жизни одного Null GuardКонстантин Рудниченко CTO, Cadwise

Слайд 2О себе
Зарабатываю на жизнь программированием с 2005 года
Программировал еще на

.net framework 1.0
Помню С# без Generics

О себеЗарабатываю на жизнь программированием с 2005 годаПрограммировал еще на .net framework 1.0Помню С# без Generics

Слайд 3О докладе
Null Guard
Зачем
Как
Производительность

О докладеNull GuardЗачемКакПроизводительность

Слайд 4NullReferenceException

NullReferenceException

Слайд 5NullReferenceException

NullReferenceException

Слайд 6Null references:
The Billion-dollar mistake
Sir Charles Antony Richard Hoare, 2009

Null references: The Billion-dollar mistakeSir Charles Antony Richard Hoare, 2009

Слайд 7Наш герой: две (четыре) строчки кода

Наш герой: две (четыре) строчки кода

Слайд 8FAIL FAST

FAIL FAST

Слайд 9“У меня всё обмазано NotNullAttribute. За меня Resharper всё проверит!”

“У меня всё обмазано NotNullAttribute. За меня Resharper всё проверит!”

Слайд 10R#: value and nullability analysis modes
Optimistic / Pessimistic

R#: value and nullability analysis modesOptimistic / Pessimistic

Слайд 11“Это же мой код,
я всегда знаю, где и что

передаю!”

“Это же мой код, я всегда знаю, где и что передаю!”

Слайд 12“Есть же стек-трейс!”

“Есть же стек-трейс!”

Слайд 13Стек-трейса не всегда достаточно

Стек-трейса не всегда достаточно

Слайд 14Стек-трейс. Пример #1.
Object reference not set to an instance of

an object
Program.Sample1(Foo foo, Boo boo) Program.Main(String[] args)

Стек-трейс. Пример #1.Object reference not set to an instance of an objectProgram.Sample1(Foo foo, Boo boo) Program.Main(String[] args)

Слайд 16System.ArgumentNullException: Value cannot be null.
Parameter name: foo
Program.Sample1(Foo foo, Boo boo)

Program.Main(String[] args)

System.ArgumentNullException: Value cannot be null.Parameter name: fooProgram.Sample1(Foo foo, Boo boo) Program.Main(String[] args)

Слайд 17Стек-трейс. Пример #2
Object reference not set to an instance of

an object Samples.Sample2(IReadOnlyList`1 collection) Program.Main(String[] args)

Стек-трейс. Пример #2Object reference not set to an instance of an object Samples.Sample2(IReadOnlyList`1 collection) Program.Main(String[] args)

Слайд 18Стек-трейс. Пример #3
Samples.Sample3(Foo foo) Program.Main(String[] args)

Стек-трейс. Пример #3Samples.Sample3(Foo foo) Program.Main(String[] args)

Слайд 19Стек-трейс. Пример #3. Debug
Boo.Net(Foo foo) Boo.Dot(Foo foo) Boo.Nsk(Foo foo) Boo.Hello(Foo

foo) Boo.DoSmth(Foo foo) Samples.Sample3(Foo foo) Program.Main(String[] args)

Стек-трейс. Пример #3. DebugBoo.Net(Foo foo) Boo.Dot(Foo foo) Boo.Nsk(Foo foo) Boo.Hello(Foo foo) Boo.DoSmth(Foo foo) Samples.Sample3(Foo foo) Program.Main(String[] args)

Слайд 20“А как так-то?”

“А как так-то?”

Слайд 21Компиляция и исполнение
в среде .NET

Компиляция и исполнение в среде .NET

Слайд 22Компилятор C# (Roslyn)
C# → Common Intermediate Language (CIL)
Никаких оптимизаций

Компилятор C# (Roslyn)C# → Common Intermediate Language (CIL)Никаких оптимизаций

Слайд 23JIT-компилятор (JIT-x86, JIT-x64, RyuJIT)
CIL → native code
В runtime
Оптимизации (Release)
Method In-lining
Range-check

elimination
Loop unrolling
etc.

JIT-компилятор (JIT-x86, JIT-x64, RyuJIT)CIL → native codeВ runtimeОптимизации (Release)Method In-liningRange-check eliminationLoop unrollingetc.

Слайд 24В примерах используется RyuJIT x64

В примерах используется RyuJIT x64

Слайд 25“Ну давай, расскажи мне,
как ты будешь везде писать
эти

две строчки кода...”

“Ну давай, расскажи мне, как ты будешь везде писать эти две строчки кода...”

Слайд 26Эволюция. Выделяем метод

Эволюция. Выделяем метод

Слайд 27“Поменяется стек!
И вообще всё будет тормозить!”

“Поменяется стек!И вообще всё будет тормозить!”

Слайд 28CALL внутри тела метода - CIL


CALL внутри тела метода - CIL

Слайд 29CALL внутри тела метода - ASM


CALL внутри тела метода - ASM

Слайд 30MethodImplAttribute
AggressiveInlining
NoInlining
NoOptimization
ForwardRef
InternalCall
PreserveSig
Synchronized
Unmanaged

MethodImplAttributeAggressiveInliningNoInliningNoOptimizationForwardRefInternalCallPreserveSigSynchronizedUnmanaged

Слайд 31Эволюция. Переименуем и размножим

ThrowIf.Argument.IsNull
ThrowIf.Variable.IsNull
ThrowIf.Field.IsNull

Эволюция. Переименуем и размножимThrowIf.Argument.IsNullThrowIf.Variable.IsNullThrowIf.Field.IsNull

Слайд 33“Метод стал больше,
теперь-то точно будет тормозить!”

“Метод стал больше, теперь-то точно будет тормозить!”

Слайд 34Упс! А инлайнинга-то не случилось


Упс! А инлайнинга-то не случилось

Слайд 35Inlining Analizer

Inlining Analizer

Слайд 36Нет инлайнинга. Причины

Нет инлайнинга. Причины

Слайд 38ThrowHelper

ThrowHelper

Слайд 40Эволюция. Guard в Generic-контейнере

Эволюция. Guard в Generic-контейнере

Слайд 41where T : class

where T : class

Слайд 42Value Types vs. Reference Types

Value Types vs. Reference Types

Слайд 44“Boxing же!”

“Boxing же!”

Слайд 45Boxing
STACK
HEAP
i
123
int i = 123;
o

int
123
i boxed
object o = i;

BoxingSTACKHEAPi123int i = 123;oint123i boxedobject o = i;

Слайд 46Boxing - CIL

Boxing - CIL

Слайд 47Boxing - asm



Boxing - asm

Слайд 48No Boxing!

No Boxing!

Слайд 49“Покажи asm c Guard’ом!”

“Покажи asm c Guard’ом!”

Слайд 50Generic контейнер

Generic контейнер

Слайд 51Guard отсутствует

Guard отсутствует

Слайд 52Guard присутствует

Guard присутствует

Слайд 54“А как так-то?”

“А как так-то?”

Слайд 55JIT и Generics

JIT и Generics

Слайд 56Generics: Reference Type
Одна общая реализация
все ссылки имеют одинаковый размер

- размер указателя
какими бы ни были объекты, все операции над

указателями на них - одинаковые

Generics: Reference Type Одна общая реализациявсе ссылки имеют одинаковый размер - размер указателякакими бы ни были объекты,

Слайд 57Generics: Value Type
Для каждого Value Type отдельная реализация
int и

double имеют разный размер (4 и 8 байт). Невозможно выделить

одинаковый объем памяти на стеке
в зависимости от платформы могут использоваться разные регистры и команды
специальные оптимизации

Generics: Value TypeДля каждого Value Type отдельная реализация int и double имеют разный размер (4 и 8

Слайд 58“А что, если
переопределен оператор ==?”

“А что, если переопределен оператор ==?”

Слайд 59А что, если переопределен оператор ==?
НИЧЕГО

А что, если переопределен оператор ==?НИЧЕГО

Слайд 60“Покажи мне цифры!”

“Покажи мне цифры!”

Слайд 61Цифры

Цифры

Слайд 62Пустой метод vs. метод с Guard`ом

Пустой метод vs. метод с Guard`ом

Слайд 63// * Warnings *
ZeroMeasurement
With: The method duration is indistinguishable from

the empty method duration
Without: The method duration is indistinguishable from

the empty method duration
// * Warnings *ZeroMeasurementWith: The method duration is indistinguishable from the empty method durationWithout: The method duration

Слайд 64Методы с установкой поля

Методы с установкой поля

Слайд 66“А как так-то?”

“А как так-то?”

Слайд 67CPU: Branch Prediction

CPU: Branch Prediction

Слайд 69Любопытные факты

Любопытные факты

Слайд 70JIT x86
не всегда оптимизирует boxing

JIT x86не всегда оптимизирует boxing

Слайд 75/dotnet/coreclr: Faster null checks #21736
== null → is null
!= null

→ is object

/dotnet/coreclr: Faster null checks #21736== null → is null!= null → is object

Слайд 76Защищайся! Проверяй!
Не доверяй никому! Даже себе!

Защищайся! Проверяй! Не доверяй никому! Даже себе!

Слайд 77Константин Рудниченко
технический директор Cadwise
rudnichenko.k@gmail.com
https://t.me/krudnichenko
https://twitter.com/KRudnichenko
http://cadwise.ru







Константин Рудниченкотехнический директор Cadwiserudnichenko.k@gmail.comhttps://t.me/krudnichenkohttps://twitter.com/KRudnichenkohttp://cadwise.ru

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика