Почему продукты на базе управляемого кода могут стать эффективнее


В скором времени в публичных версиях C# появятся две новые конструкции языка Span<T> и Memory<T>. Это может оказать заметное позитивное влияние на PowerShell и Exchange Server (как впрочем и на другие продукты написание на управляемом коде (managed code)).

В чём суть? C# построен таким образом, чтобы исключить проблемы с переполнением буфера и указатели в никуда — основные проблемы в низкоуровневых языках и языках вроде C и C++. Если взять пример строки, то в C# они неизменяемые: если вы пишите «изменить один символ в строке», то фактически происходит выделение памяти под новую строку, куда происходит копирование символов из исходной строки с заменой нужного символа. И так для всех операций со строками. Можно представить сколько «мусора» создаётся в программе активно обрабатывающей строки (тексты, письма, имена файлов и т.п.) и сколько ресурсов процессора и шины уходит на эти операции. Аналогичная ситуация с массивами и буферами.

Так вот Span<T> и Memory<T> позволяют выполнять многие операции на строками, массивами, буферами без перераспределения памяти — как говорят «на месте», при этом сохраняя строгое типирование и все преимущества C# безопасной работы без переполнений и битых указателей.

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

Самое приятное, что все это будет в библиотеке времени исполнения (Corelib, mcorlib) и остальных библиотеках .Net и будет совместимо с .Net Standard 1.1 — последнее означает, что множество существующих программ могут получить эти выгоды без перекомпиляции!

Новинки появятся сначала в .Net Core 2.1, соответственно версия C# 7.2. Только затем в .Net Framework. Публичный релиз .Net Core 2.1 ожидается во втором квартале 18-го года, что подразумевает хорошие шансы, что PowerShell 6.1 будет выпущен уже на базе этой версии. Если так, то безусловно он будет быстрее и экономичнее не только за счёт новых библиотек .Net Core, но и будет использовать новые конструкции в своём коде. (Напомню, что это открытый проект, в котором вы можете легко принять участие https://github.com/PowerShell/PowerShell/).

Возможно в конце 18-го года уже выйдет версия .Net Framework (4.7.3?), которая будет включать эти новинки. Только после этого мы увидим, как это сказалось на Exchange Server и других продуктах. Exchange Server достаточно ресурсоёмкий продукт по использованию процессорных ресурсов и памяти. Было бы интересно увидеть, как изменится калькулятор расчёта конфигурации Exchange Server — не удивлюсь, если требования уменьшатся на заметные несколько процентов. Если же команда разработчиков проведет оптимизацию собственного кода с использованием новых языковых конструкций, то эффект будет ещё более значительный.

Прочитать подробнее про суть Span<T> и Memory<T> можно в статье C# — All About Span: Exploring a New .NET Mainstay.

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s

%d такие блоггеры, как: