В этой статье я расскажу о двухлетнем эксперименте, проводимом над моим пет-проектом, интерпретатором ЯП HydraScript. Почему к разработке из области системного программирования были применены промышленные практики, и зачем конструированию компиляторов нужен Domain Driver Design с чистой архитектурой?
Рубрика «csharp»
Что будет, если скрестить конструирование компиляторов, 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
.Читать полностью »
Разобраться раз и навсегда: Task.WhenAll или Parallel.ForEachAsync в C#
2024-02-08 в 9:06, admin, рубрики: .net, async, csharp, parallel, parallel programming, parallel.foreach, ruvds_статьи, task, tplВсе хотят писать код, который работает быстро. Часто мы сидим, просматривая написанные алгоритмы и пытаясь понять, что можно сделать, чтобы настроить их производительность. В таком случае часто прибегают к параллельному выполнению задач. Конечно, если можно выполнять задачи параллельно и делать эту работу одновременно, то ожидаемо общее количество времени на обработку сократиться.
Если быстро посмотреть на результаты, которые появляются в интернете при поиске советов по реализации подобных вещей, то можно увидеть, что есть как много похожих, так и различных предложений от различных программистов. В какой-то момент поиска вы, вероятно, столкнётесь с поиском идеей использования Task.WhenAll
или Parallel.ForEachAsync
.
При чтении некоторых из этих материалов будет видно много различных противоречивых ответов как на StackOverflow, так и по всему интернету. Сегодня я собираюсь сравнить эти два метода с помощью определённых бенчмарков, которые стравят их друг против друга, чтобы, наконец, выяснить применимость каждого из двух методов.
Читать полностью »
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 года.Читать полностью »
C# Linq для GraphQL-запросов
2023-06-25 в 6:56, admin, рубрики: .net, csharp, expressions, graphql, graphql-client, linq, linq2graphql, open source, translation, translator, Алгоритмы, Разработка веб-сайтовНемного про GraphQL
Дисклеймер: В статье рассматриваются только Query (аналог GET-запросов). Мутации и подписки не рассматриваются.
GraphQL - это инструмент, позволяющий заменить привычное API. Вместо написания контроллеров и методов, вы пишете методы в Query:
public class GraphQLQuery
{
public IQueryable<UserModel> GetUsers([Service] IUsersRepository repository)
{
return repository.Users;
}
}
Всего пару строк и вы добавили в приложение новый GraphQL-endpoint. Теперь к нему можно обратиться POST-запросом (обычно), передав вот такую строку:
users {
id
userName
roles {
code
description
}
}
Как изменять строки в 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# может дойти до предела своих возможностей.
NBomber как альтернатива JMeter для .NET разработчика
2022-05-07 в 18:20, admin, рубрики: .net, C#, csharp, dotnet core, jmeter, NBomber, performance, performance analysis, performance tests, высокая производительность, Тестирование веб-сервисовКак и многие разработчики, впервые столкнувшиеся с нагрузочным тестированием, я начал с JMeter. Для ознакомления и простых сценариев JMeter полностью меня устраивал, но с усложнением задач и потребностью в большем контроле я начал задумываться о поиске более удобной альтернативы. Особенно хотелось чтобы инструмент легко адаптировался или уже был адаптирован под экосистему .NET.
В этой статье мы рассмотрим NBomber как легкую для освоения альтернативу JMeter, а также постараемся ответить на вопрос "Почему я должен проводить нагрузочное тестирование именно с NBomber ?".
Поговорим о фичах в предварительной версии C# 11
2022-02-28 в 20:55, admin, рубрики: .net, C#, csharp, null, open source, skillfactory, Блог компании SkillFactory, дизайн, интерполяция, итераторы, проверки, Программирование, строки, строки кодаК старту курса по разработке на C# рассказываем о новых конструкциях в предварительной версии языка C# 11. Среди них шаблоны списка, проверка Parameter на null и возможность переноса строки при интерполяции строк. За подробностями приглашаем под кат.
Ускоряем цикл foreach до for
2021-09-01 в 8:35, admin, рубрики: .net, C#, csharp, performance, высокая производительностьПривет! Хочу рассказать об интересном опыте, как я писал енумератор для типа Range
, который был бы таким же дешевым, как цикл for
.
Что мы хотим?
У System.Range, как известно, очень красивый синтаксис создания:
var a = 1..2; // эквивалент new Range(1, 2)
Поэтому, как эксперимент, я решил абузить его для цикла foreach
, как замена for
:
foreach (var i in 1..5)
Console.Write(i);
(выводит 12345)
Для foreach Розлин требует метод GetEnumerator
, который возвращал бы что-то, у чего есть bool MoveNext()
и T Current. Этот метод можно добавить как метод расширения:
Читать полностью »