Вы задумывались, как ReSharper анализирует ваш код? В докладе Андрей с практическими примерами расскажет о том, как писать кросс-процедурные анализы кода и почему это теперь необходимо для самых разнообразных анализаторов C#-кода, неважно, написаны они на базе ReSharper, Roslyn или собственных моделях кода. В качестве примера в общих чертах будет описано, как работает data-flow анализ в ReSharper и как на него повлияли локальные функции, появившиеся в C# 7. Будет итеративно рассмотрен алгоритм сбора данных для кросс-процедурных анализов без привязки к конкретным API Roslyn/ReSharper и дана оценка сложности построения модели по памяти/времени на каждом шаге. Андрей также приведет несколько примеров использования полученной модели вне рамок исходного примера. Доклад будет наиболее интересен и полезен людям, заинтересованным в написании собственных анализаторов кода, в первую очередь для языка C#, однако принципы, которые будут показаны в докладе, применимы к любым языкам. Кроме того, итеративное усложнение, оценка и оптимизация алгоритма построения модели данных и работа с графом вызовов могут быть интересны как примеры практических алгоритмических задач.
Каковы связи между обновлениями, работающими в режиме реального времени, инкрементными сборками, кэшированием, избыточностью микросервиса и, наконец, популярностью React? Александр покажет, как набор…
Developing cross-platform apps for Windows, iOS, macOS, Android, and WebAssembly can be a complex process, especially when it comes to the user interface. Each platform has its ways of defining dynam…
The SOLID principles. The five commandments of the software world. Forgotten for years, as developers focused on JavaScript frameworks with stupid names and complicated patterns. Not grasping that th…
. Performance is at the heart of .NET, with an incredible amount of energy invested in every release towards making the stack faster and more scalable. In this talk, Stephen Toub will walk through ex…
Ошибки и проблемы использования многопоточности в .NET. Платформа .NET предоставляет множество готовых примитивов синхронизации и потокобезопасных коллекций. Если при разработке приложения нужно реа…
Создание парсеров и лексических анализаторов — затратное по времени дело. Обычно к ним прибегают при необходимости реализации различного рода формальных грамматик, в том числе предметно-ориентированн…
Задаём тренд — пишем на C# в браузере. Blazor is a client-side framework capable of running C# code that unlike its notorious far ancestor Silverlight doesn't suffer from plugin-itis and doesn't for…
Всё ли известно про async/await? Мы уверены, что нет — Дмитрий расскажет все тонкости работы с ними. Появление async/await в C# привело к пересмотру того, как писать простой и корректный параллельны…
In 2018, Dylan Beattie created an esoteric programming language called Rockstar, designed for creating computer programs that are also rock song lyrics. The language was initially created as a joke..…
Новых фич C# 8 много, надо про все знать. Очередной релиз C# приносит достаточно много новых фич, которые хочется обсудить. Тут присутствуют как кардинальные изменения, которые затрагивают весь язык…
Научитесь пользоваться async streams уже сейчас. Язык C# продолжает интенсивно развиваться. Готовящаяся к выходу новая версия добавляет поддержку асинхронных итераторов. Что это такое? Для чего это …
Founded in April 2017, NUKE is a free, open source build automation system for C#/.NET that runs cross-platform on .NET Core, .NET Framework, and Mono. While builds are bootstrapped with conventional…
Забудем ужасы C++/CLI и рассмотрим альтернативу. При всей простоте использования технологии P/Invoke, она, увы, пригодна лишь для использования библиотек, предоставляющих функции в C-стиле. Объектно…
This talk shows how to write a 2D game using the MonoGame framework with C# that runs on Windows, Linux, Android, and other platforms supported by MonoGame. MonoGame is a framework originally modele…
Immutable objects - aka objects whose properties and fields can't change after instantiation - are one of the fundamental pillars of functional programming. Yet, it also has other great uses in class…