Как стать автором
Обновить
7.5

D *

Мультипарадигмальный компилируемый язык

Сначала показывать
Порог рейтинга
Уровень сложности

Идиома Ranges

Время на прочтение11 мин
Количество просмотров14K
image
Идиома ranges — крайне удачное развитие итераторов. Она позволяет писать высокопроизводительный код, не выделяющий память, где это не надо, находясь на предельно высоком уровне абстракции. Кроме того делает библиотеки гораздо более универсальными, а их интерфейсы гибкими. Под катом краткое описание и практические примеры использования идиомы, тесты производительности, а так же сравнение с популярными реализациями итераторов в C++ и C#.
Читать дальше →
Всего голосов 22: ↑20 и ↓2+18
Комментарии23

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

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

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

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

Встречайте Mir GLAS! Нативная реализация библиотеки линейной алгебры на чисто D без единой вставки на ассемблере!
Читать дальше →
Всего голосов 44: ↑37 и ↓7+30
Комментарии26

Свой блог на vibe-d, часть 1: простое веб приложение с использованием шифрования

Время на прочтение8 мин
Количество просмотров5.3K

Доброго времени суток, Хабр! Если Вы давно хотели сделать себе, соседке или её собаке сайт, но пока не сделали, то эта статья для Вас! В этой серии статей я покажу основы работы с vibe для создания сайтов на примере простого блога.
В первой части мы разберём базовые моменты и добавим к получившемуся приложению шифрование.

Сделать свой блог на vibe
Всего голосов 18: ↑17 и ↓1+16
Комментарии3

REST-сервер и тонкий клиент с использованием vibe-d

Время на прочтение5 мин
Количество просмотров9K
Доброго времени суток, Хабр! Если Вам хотелось разделить своё приложение на сервер и клиент, если Вы хотите добавить API к своему vibe-сайту или если Вам просто нечего делать.
добро пожаловать под кат
Всего голосов 22: ↑22 и ↓0+22
Комментарии10

Истории

Реализация reference counting или жизнь без GC (почти)

Время на прочтение7 мин
Количество просмотров7K
Доброго времени суток, хабр!

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

Как Вам, скорее всего, известно — в D сборщик мусора, отчасти, опционален. Но ручное управление памятью это прошлый век.
Поэтому сегодня я покажу как можно реализовать сборку мусора самому через «полуавтоматический» подсчёт ссылок, а так же как при этом минимизировать обращения к встроенному в runtime сборщика мусора на основе сканирования памяти.

Поехали
Всего голосов 11: ↑10 и ↓1+9
Комментарии17

dlang-requests — типа python-requests, только для D (часть 2)

Время на прочтение5 мин
Количество просмотров4.2K
Доброго времени суток!

Во второй части статьи опишу использование библиотеки dlang-requests для менее стандартных случаев.

Читать дальше →
Всего голосов 7: ↑6 и ↓1+5
Комментарии3

dlang-requests — типа python-requests, только для D

Время на прочтение4 мин
Количество просмотров4.4K
Доброго времени суток!

Хочу познакомить вас с библиотекой dlang-requests. Для чего она? Для D она хочет быть тем-же, чем python-requests является для python, то есть — удобным http-(и ftp) клиентом. Автор клялся, что при написании библиотеки его целями были:

  1. удобный, простой интерфейс
  2. производительность сопоставимая с libcurl
  3. сочетаемость со стандартной библиотекой D

Первая часть статьи будет состоять из примеров использования dlang-requests для наиболее часто встречающихся задач.
С чего начать?
Всего голосов 7: ↑6 и ↓1+5
Комментарии25

DConf2016

Время на прочтение3 мин
Количество просмотров3.8K
Доброго времени суток, хабр!

Как-то на хабре обошли стороной это событие, хочется восполнить этот пробел.

image

Проходила конференция 4-6 мая в Берлине, спонсором выступала компания Sociomantic.

Тут я вкрадце расскажу о чём были выступления.

Читать дальше →
Всего голосов 6: ↑6 и ↓0+6
Комментарии14

Сравнение прозводительности D и Go для веб

Время на прочтение4 мин
Количество просмотров18K
Доброго времени суток, хабр!

Так как мне скоро предстоит разрабатывать веб-приложение, а писать на интерпретирумых языках как-то нет желания, тем более, что есть такие ЯП как D и Go, возникло желание сравнить их производительность при работе с веб (в сети не нашёл тестов, которые были бы свежими). Для D это vibe.d, а для Go, как я понял, не используются фреймворки. Так как Go я знаю менее чем «никак» решил не выпендриваться: тестовые приложения просто отдают страничку с некоторым текстом (ни баз данных, ни сложного роутинга, ни изображений).

Нагрузка давалась с помощью Apache Benchmark.

Читать дальше →
Всего голосов 27: ↑15 и ↓12+3
Комментарии57

man!(C => D => Rust)

Время на прочтение10 мин
Количество просмотров12K

Предыдущую статью восприняли лучше, чем я ожидал, так что решился на продолжение эксперимента. Это своеобразный ответ на перевод статьи Programming in D for C Programmers за авторством Дмитрия aka vintage. Как мне кажется, в области применения C Rust более уместен, чем замена Go, как предполагалось в прошлой статье. Тем интереснее будет сравнить. Опять таки, код на С приводить не буду, тем более что аналог на D всё равно смотрится лаконичнее.

Читать дальше →
Всего голосов 21: ↑20 и ↓1+19
Комментарии35

man!(D => Rust).basics

Время на прочтение7 мин
Количество просмотров8.2K
Просьба не воспринимать эту статью слишком серьёзно, переходить с D на Rust не призываю, просто после прочтения серии переводов за авторством Дмитрия aka vintage, мне стало любопытно переписать примеры кода на Rust, тем более, что автор добавил этот язык в голосование. Мой основной рабочий инструмент — С++, хотя в последнее время активно интересуюсь Rust. За D несколько раз пытался взяться, но каждый раз что-то отталкивало. Ни в коем случае не хочу сказать, что это плохой язык, просто местами он "слишком радикален" для "убийцы плюсов", например, имеется GC (пусть и отключаемый), а в других местах наоборот слишком близок к С++ со всеми его неочевидными нюансами.

Самое забавное тут то, что после изучения Rust отношение к D несколько изменилось — в плане лаконичности и выразительности последний сильно выигрывает. Впрочем, "явность" Rust-сообщество наоборот считает преимуществом. По моим ощущениям, в Rust чаще руководствуются "академической правильностью", а в D более практичный подход. Что лучше — сложный вопрос, лично я и сам не всегда могу определиться.

Впрочем, это всё очень субъективно, так что давайте вместе посмотрим на код. Код на Go приводить не буду, при желании, можно посмотреть в оригинальной статье.
Читать дальше →
Всего голосов 21: ↑21 и ↓0+21
Комментарии53

man!( Go => D ).concurrency

Время на прочтение8 мин
Количество просмотров14K

Многозадачность — это то, что реализовано в Go по настоящему хорошо, хоть и не идеально. Приятный синтаксис с терпким послевкусием, простые и мощные абстракции, подкупают своим изяществом по сравнению с остальными императивными языками. А попробовав лучшее, уже так не хочется скатываться к посредственности. Поэтому, если и переходить на другой язык, то он должен быть ещё более выразителен и с не менее толковой реализацией многозадачности.

Если вы уже наигрались с Go, устали от копипасты, ручного жонглирования мьютексами и всерьёз подумываете о приобретении протезов для рук, то позвольте предложить вашему вниманию перевод Tour of the Go с эквивалентным кодом на D и краткими пояснениями.


Часть первая. Основы.


Часть пятая. Сопрограммы.

Читать дальше →
Всего голосов 28: ↑22 и ↓6+16
Комментарии93

man!( Go => D ).basics

Время на прочтение6 мин
Количество просмотров16K
Если вы уже наигрались с Go, устали от копипасты, ручного жонглирования типами и подумываете вернуться на какой-нибудь Python или, прости господи, PHP, то позвольте предложить вам попробовать язык D, где типизация хоть и тоже статическая, но она не путается под ногами и позволяет писать не менее выразительный код, чем на языках с динамической типизацией. А чтобы переход был не такой болезненный, вашему вниманию предлагается перевод Tour of the Go c эквивалентным кодом на D и краткими пояснениями.

Часть первая. Основы.

Читать дальше →
Всего голосов 39: ↑24 и ↓15+9
Комментарии107

Ближайшие события

12 – 13 июля
Геймтон DatsDefense
Онлайн
14 июля
Фестиваль Selectel Day Off
Санкт-ПетербургОнлайн
19 сентября
CDI Conf 2024
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн

Разбор функции из стандартной библиотеки D

Время на прочтение12 мин
Количество просмотров6.2K
Привет Хабр, хочу пригласить всех на небольшую экскурсию по языку D. Зачем? Ну зачем люди вообще на экскурсии ходят — чтобы развлечься, увидеть что-то новое и вообще — это интересно. D трудно назвать новым или хотя бы молодым, однако в последние пару лет шло бурное развитие, в сообщество пришел Андрей Александреску и быстро стал ведущим разработчиком, с его способностью предвидеть тренды он внес огромный вклад в концепции самого языка и особенно в стандартную библиотеку.

С самого своего возникновения D позиционировался как улучшенный C++ (по крайней мере в моем прочтении истории). Возможность отбросить некоторые устаревшие конструкции и внести вместо них то новое, что не могло быть реализовано в классическом C++, и одновременно бережное сохранение низкоуровневых возможностей, таких как встроенный ассемблер, указатели и использование библиотек С, делают D уникальным претендентом на звание «следующего в ряду C — C++ — ...». Ну это с моей точки зрения, сам я (наверное вежливо было бы добавить «к сожалению») абсолютно моноязычен, много лет пишу на C++ и любые попытки познакомиться с другими языками неизбежно заканчивались крепким здоровым сном. Однако я слышал от представителей других конфессий что D для них тоже интересен как язык, так что на экскурсию приглашаю всех.

Что я буду показывать? По D уже написано несколько очень хороших книг, поэтому я решил просто взять функцию getopt() из стандартной библиотеки и посмотреть на ее код, неоценимо полезное упражнение позволяющее оживить прочитанное в книгах. Почему именно эту функцию? Ну, она же всем знакома и системно независима, я лично ее использую 3-4 раза в неделю и в деталях представляю как она могла бы быть написана на 3-х различных языках. Кроме того, автором кода значится Александреску, я много раз видел учебные примеры его кода в книгах и никогда не видел кода написанного в продакшн, любопытно же. В конце я конечно же не удержался и написал свой велосипед (естественно улучшенный), в данном случае это совершенно уместно и не менее полезно чем разбор чужого кода.

Увидим мы далеко не все из того что бы стоило посмотреть, да и сам я далеко не эксперт, поэтому читайте сами кому интересно, ссылки в конце.
Итак, поехали
Всего голосов 21: ↑20 и ↓1+19
Комментарии11

Пишем на D для Raspberry Pi

Время на прочтение5 мин
Количество просмотров10K

Dlang, или просто D — молодой язык программирования с многолетней историей. Не смотря на то, что язык с таким названием появился очень давно, то, что сейчас называется D2 или просто D, появилось недавно и слабо напоминает предшественника. Писать на D очень удобно, а произодительность не уступает C++, поэтому не удивительно, что он добрался до ARM и его мобильных представителей Android и iOS. Кроме того растёт интерес к интернету вещей и просто портативным устройствам.
В статье рассмотрена задача кросскомпиляции кода на dlang для Raspberry Pi. В этом нет ничего сложного, да и подводных камней не замечено. Данная публикация — простой мануал для начала использования D на разных устройствах в целом и Raspberry Pi в частности.
Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии12

D std.ndslice как замена Python Numpy

Время на прочтение9 мин
Количество просмотров13K
Предисловие: Я пишу на Python более 6 лет и могу назвать себя профессионалом в этом языке. Недавно я даже написал о нем книгу. Однако последние 8 месяцев я переключился на D и уже 4 месяца активно участвую в разработке этого языка по части расширения стандартной библиотеки Phobos. Так же я участвовал в код-ревью модуля std.ndslice о котором и пойдет речь.

std.ndslice так же как и Numpy предназначен для работы с многомерными массивами. Однако в отличие от Numpy ndslice имет крайне низкий оверхэд так как базируется на ranges (диапазонах), которые используются в штатной библиотеке повсеместно. Ranges позволяют избежать лишние процедуры копирования, а так же позволяют красиво организовать ленивые вычисления.

В этой статье мне хотелось бы рассказать о том какие преимущества std.ndslice дает по сравнению с Numpy.
Читать дальше →
Всего голосов 28: ↑21 и ↓7+14
Комментарии24

UFCS в языке программирования D

Время на прочтение4 мин
Количество просмотров7.2K
Наверняка вы уже видели некоторые посты о D. Шаблоны, псевдочлены, потоки… Сегодня я вам расскажу о такой фиче языка, как UFCS, или Universal Function Call Syntax. Начнем с простого.

Рассмотрим некий класс A и функцию, принимающую указатель на его экземпляр:

class A {
	int a;
}

void foo(A a) {}

Спросите любого программиста на Си, как бы он её вызвал. Наверняка вы услышите что-то подобное:

void main() {
	auto b = new A;

	foo(b);
}

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

b.foo();

Это открывает большой простор для построения очень интересных, последовательных(и даже быстрых) конструкций.

Осторожно: в конце цветное изображение!
Читать дальше →
Всего голосов 11: ↑9 и ↓2+7
Комментарии8

Передача сообщений между потоками. Классические блокирующие алгоритмы

Время на прочтение12 мин
Количество просмотров36K
Когда-то я вылез из песочницы с совочком в руке и постом о неблокирующих очередях и передаче данных между потоками. Тот пост был не столько об алгоритмах и их реализации, сколько об измерении быстродействия. Тогда же мне в комментариях задали совершенно резонный вопрос об обычных, блокирующих алгоритмах передачи — насколько они медленнее и вообще как выбрать оптимальный алгоритм под конкретную задачу.
Я конечно обещал и с энтузиазмом принялся за дело, даже получил забавные результаты, однако… какой-то изюминки не хватало, выходило скучно и плоско. В результате мой внутренний перфекционист обьединился с моим нескрываемым прокрастинатором и вдвоем они меня одолели, пост надолго осел в черновиках и даже совесть уже не вздрагивала при виде забытого заголовка.
Однако все меняется, появляются новые технологии, старые исчезают в архивах, и я вдруг решил что пришло время отдавать долги и сдерживать обещания. В качестве наказания мне пришлось все переписать с нуля, если скупой платит дважды, то ленивый дважды переделывает, так мне и надо.
Да, за КДПВ извиняюсь — оно конечно совсем из другой предметной области, но для иллюстрации взаимодействия между потоками подходит тем не менее идеально.
Читать дальше →
Всего голосов 37: ↑37 и ↓0+37
Комментарии37

man!( C => D )

Время на прочтение14 мин
Количество просмотров23K

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

Читать дальше →
Всего голосов 38: ↑33 и ↓5+28
Комментарии61

[Перевод] Ассоциативные массивы в языке D

Время на прочтение3 мин
Количество просмотров7.6K
Это перевод статьи «Associative arrays», опубликованной 1 января 2016 года. На мой вкус статья несколько излишне поверхностна и не содержит большого количества подробностей, но она может быть полезной тем, кто знаком с ассоциативными массивами в других языках программирования.

В языке D есть встроенная поддержка ассоциативных массивов, также известных как хэш-таблицы.
Они аналогичны Map в Java или std::unordered_map в C++.

Объявление ассоциативного массива



Чтобы объявить ассоциативный массив, используйте следующий синтаксис:

// Прим. перев.: value — тип значения, key — тип ключа
value[key] myAssociativeArray;


Читать дальше →
Всего голосов 12: ↑10 и ↓2+8
Комментарии6