В этой статье я расскажу о двухлетнем эксперименте, проводимом над моим пет-проектом, интерпретатором ЯП HydraScript. Почему к разработке из области системного программирования были применены промышленные практики, и зачем конструированию компиляторов нужен Domain Driver Design с чистой архитектурой?
Рубрика «dotnet»
Что будет, если скрестить конструирование компиляторов, DDD и Clean Architecture? Опыт HydraScript
2024-09-03 в 14:01, admin, рубрики: clean architecture, compiler design, compilers, csharp, DDD, design patterns, dotnet, github, golang, open source, ruvds_статьи, solid, TypeScriptКак потреблять API с ограничением по RPS в .NET приложениях
2024-05-02 в 9:00, admin, рубрики: api, csharp, dotnet, rate limiter, rate limiting, rate-limit, rps, ruvds_статьи, throttlingОднажды каждый C# программист получает на работе задачу по разработке интеграции с внешней системой, где ограничена максимальная частота запросов в секунду.
Интернет яростно сопротивлялся предоставить мне инструкцию к написанию такого кода, закидывая туториалами по настройке ограничения RPS на сервере, а не клиенте.
Но теперь на Хабре есть эта статья, которая научит отправлять запросы из HttpClient
так, чтобы не получать 429 Too Many Requests
.Читать полностью »
Самый простой и подробный гайд по конкурентным коллекциям в C#
2024-03-12 в 9:00, admin, рубрики: C#, collections, Concurrent, concurrent queue, ConcurrentBag, ConcurrentDictionary, dotnet, frozen, immutable, ruvds_статьиКогда несколько потоков обращаются к общим ресурсам, должна быть обеспечена потокобезопасность, чтобы избежать повреждения данных и неожиданного поведения.
Конкурентные коллекции в C# предлагают встроенные механизмы для обработки конкурентного доступа, что делает их мощным инструментом в программировании с конкурентным доступом.
В рамках статьи я попробую объяснить System.Collections.Concurrent
настолько, насколько это возможно, включая примеры и сценарии использования. Также будет затронута тема сравнения с неизменяемыми (immutable) и замороженными (frozen) коллекциями.Читать полностью »
Dependency Injection контейнеры .NET, допускающие полиморфное поведение
2024-01-02 в 9:00, admin, рубрики: backend, class, csharp, di, dotnet, implementation, inheritance, interface, polymorphism, ruvds_статьиИногда случается так, что при разработке приложения на платформе .NET с внедрением зависимостей и сервисами от контейнера требуется поддержка полиморфного поведения.
Когда, например, у интерфейса есть несколько реализаций, и их нужно грамотно расфасовать по правильным конструкторам так, чтобы всё из коробки работало.
Однако стандартный DI контейнер платформы долгое время не давал этой возможности.
В рамках этой статьи я решил напомнить альтернативы для решения этой задачи на тот случай, если вы ещё не успели переехать на .NET 8 или работаете в каком-нибудь Иннотехе, где в наличии только зеркало NuGet-пакетов, выпущенных до начала 2022 года.Читать полностью »
Swagger и полиморфные контракты в .NET 7
2023-03-07 в 13:00, admin, рубрики: .net, C#, dotnet, dotnet core, dto, json, ruvds_статьи, swagger, Блог компании RUVDS.com, документация, ооп, полиморфизм, ПрограммированиеНе так давно состоялся релиз седьмой версии платформы .NET. Он привнёс множество изменений и интересных нововведений, по которым уже успели пробежаться в рамках новостного обзора.
В этой статье мы рассмотрим развитие сериализации платформы (System.Text.Json
) вместе с возможностями, которые она открывает.Читать полностью »
Как изменять строки в dotnet
2023-02-25 в 11:44, admin, рубрики: .net, C#, csharp, dotnet, invoke, span, изменение строк, ненормальное программирование, строкиСтроки в dotnet являются предназначенной только для чтения последовательностью Char
-ов. Об этом явно написано в документации MicrosoftЧитать полностью »
Simulating Return Type Inference in C#
2022-06-28 в 17:00, admin, рубрики: .net, C#, csharp, dotnet, inference, type inference, обобщения, обобщённое программирование, обобщенные типы, ооп, ПрограммированиеМне по-настоящему нравится больше чего-либо в разработке ПО делать фреймворки, позволяющие другим разработчикам создавать что-то крутое. Иногда, в погоне за идеальным кодом, мне на ум приходят странные идеи, при реализации которых C# может дойти до предела своих возможностей.
Как я сделал Discord бота для игровой гильдии с помощью .NET Core
2021-06-05 в 14:30, admin, рубрики: .net, api, bot, C#, Discord, docker, dotnet, heroku, wow, микросервисВступление
Всем привет! Недавно я написал Discord бота для World of Warcraft гильдии. Он регулярно забирает данные об игроках с серверов игры и пишет сообщения в Discord о том что к гильдии присоединился новый игрок или о том что гильдию покинул старый игрок. Между собой мы прозвали этого бота Батрак.
Генерация типизированных ссылок на элементы управления Avalonia с атрибутом x:Name в XAML с помощью C# Source Generators
2020-11-29 в 15:53, admin, рубрики: .net, avalonia, C#, csharp, dotnet, GUI, mvvm, reactiveui, Разработка под Linux, Разработка под MacOS, разработка под windows
В апреле 2020-го года разработчиками платформы .NET 5 был анонсирован новый способ генерации исходного кода на языке программирования C# — с помощью реализации интерфейса ISourceGenerator
. Данный способ позволяет разработчикам анализировать пользовательский код и создавать новые исходные файлы на этапе компиляции. При этом, API новых генераторов исходного кода схож с API анализаторов Roslyn. Генерировать код можно как с помощью Roslyn Compiler API, так и методом конкатенации обычных строк.
В данном материале рассмотрим процесс реализации ISourceGenerator
для генерации типизированных ссылок на элементы управления AvaloniaUI, объявленные в XAML. В процессе разработки научим генератор компилировать XAML с помощью API компилятора XamlX, используемого в AvaloniaUI, и системы типов XamlX, реализованной поверх API семантической модели Roslyn.
Лучшие практики повышения производительности в C#
2020-05-18 в 9:48, admin, рубрики: best practices, C#, csharp, development, dotnet, performance, software, Блог компании OTUS. Онлайн-образование, Программирование, СофтВсем привет. Мы подготовили перевод еще одного полезного материала в преддверии старта курса «Разработчик С#». Приятного прочтения.
Поскольку недавно мне довелось составлять список лучших практик в C# для Criteo, я подумал, что было бы неплохо поделиться им публично. Цель этой статьи — предоставить неполный список шаблонов кода, которых следует избегать, либо потому что они сомнительны, либо потому что просто плохо работают. Список может показаться немного рандомным, потому что он слегка выдернут из контекста, но все его элементы в какой-то момент были обнаружены в нашем коде и вызывали проблемы в продакшене. Надеюсь, это послужит хорошей профилактикой и предотвратит ваши ошибки в будущем.
Также обратите внимание, что веб-сервисы Criteo полагаются на высокопроизводительный код, отсюда и необходимость избегать неэффективный код. В большинстве приложений не будет заметно ощутимой разницы от замены некоторых из этих шаблонов.
И последнее, но не менее важное: некоторые пункты (например, ConfigureAwait
) уже обсуждались во многих статьях, поэтому я не буду подробно останавливаться на них. Цель заключается в том, чтобы сформировать компактный список моментов, на которые нужно обращать внимание, а не давать подробную техническую выкладку по каждому из них.Читать полностью »