.NET дайджест #21: фичи .NET Framework 4.7.1, Ben.Demystifier, доступен пререлиз Rider 2017.3
В выпуске: основательный обзор .NET Core 2.0 и ASP.NET Core 2.0; Windows Compatibility Pack for .NET Core, который добавляет много новых API; как улучшить производительность приложений; Trunk Based Development.
.NET
.NET Framework 4.7.1 Runtime and Compiler Features
Поддержки .NET Standard 2.0 на уровне BCL, улучшение производительности GC, ValueTuple
теперь сериализуемые, Runtime Feature Detection.
DotNetAnywhere: An Alternative .NET Runtime
Осмотр древнего проекта, который используется в экспериментальном Blazor для выполнения C# в браузере.
.NET Core 2.0 and ASP.NET Core 2.0 are Here
Основательный обзор нововведений, плюсов и минусов платформы.
Welcome to C# 7.1
Async Main, выведение имен элементов кортежа, default литералы.
Detect blocking waits
Интересный метод, как можно найти блокирующие ожидания задач, такие как Task.Result
или Task.Wait
.
C# 7.2: Understanding Span
Хорошее вводное видео о Span<T>
: для чего нужен и как помогает минимизировать аллокации при работе с массивами и строками.
Introducing Nullable Reference Types in C#
Plain Functional Programming by Martin Odersky
Еще не успел посмотреть видео, но там интересный слайд, что синтаксис C# сильно больше, чем в С++, Java, Haskell и многих других.
Announcing the Windows Compatibility Pack for .NET Core
Пакет, который добавляет много новых API, включая долгожданный System.Drawing. Некоторые только под Win.
HashCode based on xxHash32
Генератор хороших хеш-кодов в corefx.
Migrating from ASP.NET Identity to Service Stack Authentication
In C# 7 is it possible to deconstruct tuples as method arguments
Не сразу было очевидно, как использовать деконструктор в параметрах лямбда-выражения, поэтому решил поделиться: ((string s, int i) _) => ...
Архитектура
Using Akka.NET Actor Systems in Xamarin Apps
Why does Kafka scale better than other messaging systems like RabbitMQ?
Основной поинт в том, что MQ системы запоминают, какие сообщения какой потребитель обрабатывает, и это добавляет много накладных расходов. В Kafka (и EventStore) клиент сам запоминает позицию для чтения, освобождая ресурсы системы и увеличивая пропускную способность.
The Dark Side of Event Sourcing: Managing Data Conversion
Пока не читал, но должно быть интересно.
Software architecture is failing
Статья, вызвавшая много споров в интернетах. Опять же, нужно понимать, что делаешь и зачем. Дискуссия.
Scaling Event-Sourcing at Jet
Крутая статья о архитектуре ES системы, в которой EventStore используется как single source of truth, а проекции строятся на основе Kafka. Дискуссия.
Event Store Internals and SEDA
Интересное видео о внутренностях Event Store от разработчика, к сожалению, с плохим звуком и качеством картинки.
The 7 Ways to Wash Dishes and the Case for Message-driven Reactive Systems
Неблокирующая, асинхронная параллельная обработка сообщений на примере мытья посуды.
Инструменты
Real-World ASP.NET Core Logging Configuration
REST Client for VS Code, an elegant alternative to Postman
The Icon Journey
В VS Code вернули синюю иконку. Немного деталей и размышлений на тему.
Beta Docker for Mac and Windows with Kubernetes
Ben.Demystifier
Крутой инструмент для создания более читабельных stack-traces. Уже можно найти расширения для фреймворков логирования.
Bundling .NET build tools in NuGet
В новой системе пакетов PackageReference появилась возможность добавлять команды MSBuild. Новые версии OctoPack уже умеют с этим работать.
.NET debugger and assembly editor
dotnet xunit fails for .NET Core 2.0.3 with .NET Core SDK 2.0.3
Задуманное поведение, о котором стоит знать.
.NET (Micro)ORM fetch benchmark results and the fine details
Analyzing performance of asynchronous .NET code with dotTrace
Фича, которой очень не хватало и которую VS умела. Здорово, что они ее наконец добавили.
Code formatting engine updates in ReSharper and Rider
Rider 2017.3 Early Access Program is open
Помимо прочего, добавили поддержку PackageReference, отсутствие которой мешало нашей команде мигрировать на .NET Standard 2.0. Отличная новость для пятницы :)
UI
Documenting the Web together
MS решили использовать MDN как единый актуальный источник документации для веба.
2018: 120fps and no jank
Размышления о том, как можно добиться лучшей производительности приложений в виду того, что новые девайсы поддерживают частоту обновления 120 Гц.
The Cost Of JavaScript
Очень интересная статья о производительности JS.
Книги
Exploring .NET Core with Microservices, ASP.NET Core, and Entity Framework Core
Бесплатная книга, сам пока не читал, но, возможно, стоит полистать.
Free Ebook: The Cloud Native Attitude
Разное
5 challenges in the developer to CEO transition
Life Is About to Get a Whole Lot Harder for Websites Without HTTPS
Becoming Foolish
О том, почему стоит поинтересоваться функциональными языками программирования.
The QUIC transport protocol: design and Internet-scale deployment
Новый протокол от Гугла, который совершает шифрование и транспортировку за один запрос, т. е. экономит на запросах, но сильнее нагружает процессор.
My First Day at Accenture — The Start of the
О рабстве на работе.
Promise Theory — Basic Concepts (part 1)
Trunk Based Development
Сайт, посвященный Trunk Based Development. Отличный ресурс, чтобы понять почему, зачем и как.
Architecting for Continuous Delivery
How to choose (and contribute to) your first open source project
Generations of programmers have been confused because the wrong word is used...
Its «offset» from start, not «index» — and that’s why it starts at zero!November 11, 2017
Reminded of a past conversation ...
X: We’re going to spend $1bn on this effort.
Me: I can deliver the same result for $20m.
X: How?
Me: pay me $20m to sit on a beach drinking and in five years I’ll phone you up to say «we failed».
... 5 years later
X: I wish we paid you $20m.November 21, 2017
«Haskell is faster than C++, more concise than Perl, more regular than Python, more flexible than Ruby, more typeful than C#, more robust than Java, and has absolutely nothing in common with PHP.» — Autrijus TangNovember 23, 2017
← Предыдущий выпуск: .NET Дайджест #20