• Так ли быстр ваш любимый С или нативная реализация линейной алгебры на D

    Тем, кто занимается системами машинного обучения и компьютерным зрением, хорошо знакома такая библиотека как OpenBLAS (Basic Linear Algebra Subprograms). OpenBLAS написан на C и используется повсеместно там где нужна работа с матрицами. Так же у него есть несколько альтернативных реализаций таких как Eigen и двух закрытых имплементацией от Intel и Apple. Все они написаны на С\С++.

    В настоящий момент OpenBLAS используется в матричных манипуляциях в таких языках как Julia и Python (NumPy). OpenBLAS крайне хорошо оптимизирована и значительная её часть вообще написана на ассемблере.

    Однако так ли хорош для вычислений чистый C, как это принято считать?

    Встречайте Mir GLAS! Нативная реализация библиотеки линейной алгебры на чисто D без единой вставки на ассемблере!
    Читать дальше →
  • Передача сообщений между потоками. Классические блокирующие алгоритмы

      Когда-то я вылез из песочницы с совочком в руке и постом о неблокирующих очередях и передаче данных между потоками. Тот пост был не столько об алгоритмах и их реализации, сколько об измерении быстродействия. Тогда же мне в комментариях задали совершенно резонный вопрос об обычных, блокирующих алгоритмах передачи — насколько они медленнее и вообще как выбрать оптимальный алгоритм под конкретную задачу.
      Я конечно обещал и с энтузиазмом принялся за дело, даже получил забавные результаты, однако… какой-то изюминки не хватало, выходило скучно и плоско. В результате мой внутренний перфекционист обьединился с моим нескрываемым прокрастинатором и вдвоем они меня одолели, пост надолго осел в черновиках и даже совесть уже не вздрагивала при виде забытого заголовка.
      Однако все меняется, появляются новые технологии, старые исчезают в архивах, и я вдруг решил что пришло время отдавать долги и сдерживать обещания. В качестве наказания мне пришлось все переписать с нуля, если скупой платит дважды, то ленивый дважды переделывает, так мне и надо.
      Да, за КДПВ извиняюсь — оно конечно совсем из другой предметной области, но для иллюстрации взаимодействия между потоками подходит тем не менее идеально.
      Читать дальше →
    • man!( C => D )

      • Перевод

      Каждый С-программист с опытом накапливает привычный багаж техник и идиом. Зачастую бывает сложно понять, как сделать то же самое в новом языке. Так вот, вашему вниманию предлагается коллекция распространенных паттернов на C и их эквивалентов на D. Если вы собираетесь перевести свою программу с C на D или ещё сомневаетесь стоит ли это делать, то эта статья для вас.

      Читать дальше →
    • Дайджест событий из мира D

      Предлагаю вашему вниманию дайджест интересных событий из мира D.

      Событий за последнее время произошло не мало.

      Новости языка


      1. Состоялся новый релиз компилятора dmd 2.067.
      Среди основных новшеств — значительные улучшения в скорости работы GC. В некоторых случаях количество потребляемой памяти сократилось в два раза. Появилась экспериментальная поддержка полного отключения GC:

      app "--DRT-gcopt=profile:1 minPoolSize:16" arguments to app
      
      Читать дальше →
    • DlangUI — кросплатформенный GUI для D (Часть 1)

        Мне нравится язык D. Давно слежу за его развитием. Для D есть несколько GUI библиотек и биндингов, но я решил изобрести свой велосипед.
        Хочу рассказать о своём проекте DlangUI. Надеюсь, что он кому-нибудь будет полезен.



        На КДПВ скриншот DlangIDE — приложения, написанного на DlangUI.

        Особенности:

        • Кроссплатформенность — поддерживаются Windows, Linux, Mac OSX; легкость портирования на другие платформы
        • Написан на D — легкорасширяемый
        • Использование Layouts для позиционирования элементов интерфейса
        • Масштабирование шрифтов и иконок в приложении в зависимости от разрешения экрана
        • Поддержка Unicode
        • Интернационализация — поддержка перевода UI на несколько языков
        • Аппаратное ускорение с помощью OpenGL (опционально)
        • Возможность отрисовки виджетов поверх OpenGL сцены (например, для UI в игре)
        • Небольшой размер исполняемого файла
        • Внешний вид интерфейса настраивается с помощью тем (две стандартные темы — светлая и темная)
        • Встраивание ресурсов в исполняемый файл
        • Открытый исходный код, под лицензией Boost License 1.0
        Подробности
      • Реклама помогает поддерживать и развивать наши сервисы

        Подробнее
        Реклама
      • Tree — убийца JSON, XML, YAML и иже с ними

        Здравствуйте, меня зовут Дмитрий Карловский и я… много думал. Думал я о том, что не так с XML и почему его в последнее время променяли, на бестолковый JSON. Результатом этих измышлений стал новый стандарт формат данных, который вобрал в себя гибкость XML, простоту JSON и наглядность YAML.

        image Tree — двумерный бинарно-безопасный формат представления структурированных данных. Легко читаемый как человеком так и компьютером. Простой, компактный, быстрый, выразительный и расширяемый. Сравнивая его с другими популярными форматами, можно составить следующую сравнительную таблицу:
        Больше — лучше JSON XML YAML INI Tree
        Человекопонятность 3 1 4 5 5
        Удобство редактирования 3 1 4 5 5
        Произвольная иерархия 3 3 3 1 5
        Простота реализации 3 2 1 5 5
        Скорость парсинга/сериализации 3 1 1 5 5
        Размер в сериализованном виде 3 1 4 5 5
        Поддержка поточной обработки 0 0 5 5 5
        Бинарная безопасность 3 0 0 0 5
        Распространённость 5 5 3 3 0
        Поддержка редакторами 5 5 3 5 1
        Поддержка языками программирования 5 5 3 5 1
        Читать дальше →
      • Учебник по языку программирования D. Часть 1

        • Перевод
        • Tutorial
        Данный пост начинает серию переводов D Programming Language Tutorial, дабы компенсировать информационный вакуум об этом системном языке. Каждая часть будет содержать константое количество материала из книги, так как оригинальные главы имеют широкий разброс в размере: от пары абзацев до нескольких печатных страниц. Все примеры кода проверяются на текущем релизе компилятора dmd 2.065, и если возникают проблемы с технической частью, прошу отписываться в комментариях.

        Читать дальше →
      • Функциональная обработка изображений в D

        • Перевод
        image

        Недавно я завершил переработку графического пакета для моей D библиотеки. Вдохновленный модулями std.algorithm и std.range, я пытался достичь следующих целей:
        • Представить все в виде малых комбинируемых компонентов
        • Избежать неявного копирования и предпочтительно использовать ленивые вычисления
        • Использовать шаблоны для улучшения производительности и эффективности написания кода


        Начиная с первой версии, все компонеты пакета обработки изображений были параметризированы типом цвета. Это не стандартный способ реализации графических библиотек — большинство абстрагируют конкретный тип цвета изображения через ООП интерфейс, или просто конвертируют все изображения в единый формат пикселей, с которыми далее работают в памяти. Однако для большинства случаев это является тратой памяти и времени, обычно разработчики заранее знают в каком конкретно формате будет представлено изображение, за исключением приложений, где графические данные вводятся пользователем (например, граф. редакторы). Вместо этого моя библиотека объявляет все типы изображений как шаблоны с типом-параметром для цвета.

        Я весьма доволен результатами работы над библиотекой, поэтому я хочу поделиться несколькими интересными моментами в данном посте.

        Читать дальше →
      Самое читаемое