Обновления

Dagon 1.5.0

Добавлены расширения dagon:network и dagon:security, реализующие, соответственно, сетевой интерфейс на базе UDP/ENet и безопасный транспортный протокол.
Функции для работы с кубическими картами из dagon.graphics.texproc вынесены в отдельный модуль dagon.graphics.cubemap.
Метод Application.takeScreenshot теперь не использует сборщик мусора.

dlib 1.6.0

Добавлен новый пакет dlib.time с реализацией кроссплатформенного интерфейса к системным функциям времени-даты. Временные метки (DateTime) имеют точность до целых секунд и предназначены для относительно редких событий (логирование, онлайн-переписка, календарные события и т.д.). Для более точного измерения времени следует использовать наносекундный счетчик в std.datetime.stopwatch, либо специализированные таймеры внешних библиотек (например, таймер SDL).
Добавлен новый модуль dlib.container.sorting с реализациями алгоритмов сортировки выбором и вставками. Они лучше всего подходят для сортировки небольших массивов нечасто обновляющихся данных в реальном времени. Например, если массив уже отсортирован, то функция сортировки вставками insertionSort будет в сто раз (!) быстрее, чем std.algorithm.sort, что идеально для игр.
Методы встроенного мьютекса Mutex помечены как @nogc.

Не используйте std.algorithm.sort!

Точнее, не используйте бездумно для всего. Я уже как-то писал о неэффективности std.variant, и вот еще один казус: стандартная функция сортировки в Phobos более чем в 100 раз медленнее, чем сортировка вставками (insertion sort) для маленьких массивов. Вот результат бенчмарка для массива из 6 случайных элементов и миллиона вызовов каждой функции:

std.algorithm.sort: 70 ms, 200 μs, and 6 hnsecs total
Selection sort: 572 μs and 6 hnsecs total
Insertion sort: 570 μs and 8 hnsecs total

На массиве из 50 элементов сортировка выбором уже проигрывает, но вставки по-прежнему намного быстрее:

std.algorithm.sort: 494 ms, 694 μs, and 6 hnsecs total
Selection sort: 638 ms and 800 μs total
Insertion sort: 307 ms, 370 μs, and 2 hnsecs total

На массиве из 100 элементов std.algorithm.sort и сортировка вставками начинают показывать примерно одинаковую производительность:

std.algorithm.sort: 1 sec, 525 ms, 667 μs, and 3 hnsecs total
Selection sort: 2 secs, 847 ms, 63 μs, and 7 hnsecs total
Insertion sort: 1 sec, 552 ms, 324 μs, and 9 hnsecs total

Что интересно, при 200 элементах сортировка вставками снова вырывается вперед:

std.algorithm.sort: 6 secs, 138 ms, 993 μs, and 8 hnsecs total
Selection sort: 11 secs, 592 ms, 87 μs, and 7 hnsecs total
Insertion sort: 5 secs, 193 ms, 42 μs, and 1 hnsec total

При 300 элементах и больше std.algorithm.sort уже эффективнее:

std.algorithm sort: 9 secs, 178 ms, 920 μs, and 1 hnsec total
Selection sort: 26 secs, 875 ms, 201 μs, and 1 hnsec total
Insertion sort: 11 secs, 783 ms, 883 μs, and 5 hnsecs total

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