Введение в D

На официальном википроекте D появилась хорошая вводная статья по языку на русском. Для начинающих программистов она, правда, не подходит – скорее, для тех, кто уже состоялся в одном из других C-подобных языков.

http://wiki.dlang.org/Reading_the_documentation_(in_Russian)

DGL без сборки мусора

На данный момент на D, к сожалению, нет полноценных игровых движков с ручным управлением памятью. И, если в общем случае с производительностью мы ничего сделать не можем (Benjamin Thaut, чтобы оптимизировать производительность игровых приложений, использовал модифицированный рантайм языка), то пусть хотя бы управление ресурсами будет детерминированным.
Новая ветка проекта DGLgc-free – является попыткой достичь этого путем полного отказа от выделения динамической памяти через сборщик мусора. Вместо этого все классы  используют dlib.core.memory и dlib.container.array вместо оператора new и встроенных динамических массивов D.
В данный момент переписана примерно половина функциональности DGL, добавлено и много нового: например, новая система событий, поддержка многоязыкового ввода с клавиатуры и т.д.

dlib 0.5

Не так давно состоялось очередное крупное обновление коллекции библиотек dlib – вышла версия 0.5, наиболее значительным нововведением которой стала поддержка ручного управления памятью (РУП). Но – обо всем по порядку…

  • Новый модуль dlib.core.memory предоставляет средства для ручного выделения и высвобождения динамической памяти, независимые от сборщика мусора и основанные на malloc/free. Имеется поддержка структур, классов и массивов. При использовании классов рекомендуется использовать интерфейс ManuallyAllocatable и перегружать метод free, который ответственен за удаление объекта – в противном случае корректное удаление в некоторых случаях не гарантировано (например, при доступе через интерфейс или родительский класс).
  • Началась работа по переводу всей dlib на РУП. Так, загрузчики изрбражений (PNG, JPEG, TGA, BMP) в новой версии полностью независимы от сборщика мусора. Для этого активно используется паттерн абстрактной фабрики, ответственный за создание изображений  в памяти. Кстати, в загрузчике PNG значительно улучшена поддержка индексированных изображений, для них добавлена поддержка альфа-канала.
  • Кроме того, на РУП переведены некоторые контейнеры из dlib.container – BST, ассоциативный массив. Реализован полностью ручной динамический массив (dlib.container.array).
  • Еще одна новинка – ООП для структур (dlib.core.oop). Это экспериментальный модуль, реализующий для структур прототипный стиль ООП с поддержкой множественного наследования и параметрического полиморфизма. Полностью заменить классы он, конечно, не может, но окажется весьма полезен, если нужно создавать объекты с наследованием в стеке. В будущем планируется переписать некоторые внутренние механизмы dlib с использованием этой легковесной объектной системы.
  • В пакете dlib.math появилась поддержка дуальных кватернионов. Это частный случай алгербы Клиффорда, обобщение кватернионов на поле дуальных чисел. Их можно использовать, например, для описания движения тел в кинематике – один дуальный кватернион охватывает и перенос, и вращение. Кстати, реализация обычных кватернионов через инкапсуляцию теперь совместима с векторами.
  • Изменения коснулись и пакета вычислительной геометрии. Усеченная пирамида (dlib.geometry.frustum) теперь задается с нормалями ограничивающих плоскостей, указывающими наружу пирамиды. Подвергся изменению API проверки пересечения Frustum с AABB. Исправлены ошибки в реализации AABB и плоскости.

dcraw

В поисках удобного и не слишком требовательного к ресурсам RAW-проявщика под Linux, я остановился на RAWTherapee и его бэкенде dcraw. Последний в виде консольной утилиты поддерживает RAW-файлы моей Sony ILCE-3000 и показывает неожиданно хорошие результаты, по сравнению с JPEG’ом из камеры:

Команда, которую я использовал:
dcraw -a -b 0.7 -w -m 1 -C 1 1 -n 400 -q 3 DSC01269.ARW
“Невооруженным глазом” видны лучшие показатели яркости и практически полное отсутствие шума. dcraw способен сохранять в несжатый формат PPM, что позволяет проводить дальнейшую обработку в GIMP или другом редакторе, а уже потом экспериментировать со сжатием.

Освещение в Atrium

Atrium теперь использует новую систему освещения в DGL, описанную постом ниже.