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

D *

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

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

Как я студентам язык D преподавал

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

Два года назад я начал читать курс “Язык программирования Ди” в самом настоящем университете, провёл в общей сложности 40 лекций, примерно столько же практических занятий даже дважды принял экзамен, один раз удалённо. Как так случилось, кому вообще может быть нужен D, и как ученик превосходит учителя, под катом.

Читать далее
Всего голосов 58: ↑58 и ↓0+58
Комментарии67

Новости

Баги, которые разрушили ваш замок

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

Уолтер Брайт — «великодушный пожизненный диктатор» языка программирования D и основатель Digital Mars. За его плечами не один десяток лет опыта в разработке компиляторов и интерпретаторов для нескольких языков, в числе которых Zortech C++ — первый нативный компилятор C++. Он также создатель игры Empire, послужившей основным источником вдохновения для Sid Meier’s Civilization.


Цикл статей о Better C
  1. D как улучшенный C
  2. Баги, которые разрушили ваш замок
  3. Портируем make.c на D

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


А может, дело не в вас? Я покажу вам, что эти ошибки не ваша вина: это вина инструментов, и если только улучшить инструменты, то ваш замок будет в безопасности.


И вам даже не придётся идти ни на какие компромиссы.

Читать дальше →
Всего голосов 29: ↑27 и ↓2+25
Комментарии44

D как улучшенный C

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

Уолтер Брайт — «великодушный пожизненный диктатор» языка программирования D и основатель Digital Mars. За его плечами не один десяток лет опыта в разработке компиляторов и интерпретаторов для нескольких языков, в числе которых Zortech C++ — первый нативный компилятор C++. Он также создатель игры Empire, послужившей основным источником вдохновения для Sid Meier’s Civilization.


Цикл статей о Better C

Язык D был с самого начала спроектирован так, чтобы легко и напрямую обращаться к C и, в меньшей степени, C++. Благодаря этому в нём доступны бесчисленные C-библиотеки, стандартная библиотека C и конечно же системные API, которые как правило построены на API языка C.


Но C — это не только библиотеки. На C написаны многие большие и неоценимо полезные программы, такие как операционная система Linux и значительная часть программ для неё. И хотя программы на D могут обращаться к библиотекам на C, обратное неверно. Программы на C не могут обращаться к коду на D. Невозможно (или по крайней мере очень сложно) скомпилировать несколько файлов на D и слинковать их в программу на C. Проблема в том, что скомпилированные файлы на D могут обращаться к чему-то, что существует только в рантайме D, а добавлять его в линковку обычно оказывается непрактично (рантайм довольно объёмный).


Также код на языке D не может существовать в программе, если D не контролирует функцию main(), потому что именно так происходит запуск рантайма D. Поэтому библиотеки на D оказываются недоступны для программ на C, а программы-химеры (смесь C и D) становятся непрактичными. Нельзя взять и «просто попробовать» язык D, добавляя модули на D в существующие модули программы на C.


Так было до тех пор, пока не появился Better C.

Читать дальше →
Всего голосов 32: ↑31 и ↓1+30
Комментарии89

Статический анализ в GCC 10

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

Я работаю в Red Hat над GCC, GNU Compiler Collection. Для следующего основного релиза GCC, GCC 10, я реализовывал новую опцию -fanalyzer: проход статического анализа для выявления различных проблем во время компиляции, а не во время исполнения.

Я думаю, что лучше выявлять проблемы как можно раньше по мере написания кода, используя компилятор, как часть цикла компиляции-редактирования-отладки, а не использовать статический анализ в качестве дополнительного инструмента «на стороне» (возможно, проприетарного). Поэтому, представляется целесообразным иметь встроенный в компилятор статический анализатор, который видит код в точности такой же, какой видит компилятор — ведь это и есть компилятор.
Читать дальше →
Всего голосов 28: ↑27 и ↓1+26
Комментарии26

Истории

Topleaked: инструмент ловли утечек памяти

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

История, как это часто бывает, началась с того, что упал один из сервисов на сервере. Точнее процесс был убит мониторингом за превышение использования памяти. Запас должен был быть многократным, а значит у нас утечка памяти.
Есть полный дамп памяти с отладочной информацией, есть логи, но воспроизвести не получается. То ли утечка безумно медленная, то ли сценарий зависит от погоды на Марсе. Словом, очередной баг, который не воспроизводится тестами, но встречается в дикой природе. Остаётся единственная реальная зацепка — дамп памяти.

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

Мой опыт разработки на языке Nim

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


Привет, Хабр!


Уже довольно давно я пишу свой игровой фреймворк — такой pet project для души. А так как для души нужно выбирать что-то, что нравится (а в данном случае — на чём нравится писать), то выбор мой пал на nim. В этой статье я хочу поговорить именно про nim, про его особенности, плюсы и минусы, а тема геймдева лишь задаёт контекст моего опыта — какие задачи я решал, какие трудности возникли.


Давным-давно, когда трава была зеленее, а небо чище, я встретил nim. Хотя нет, не так. Давным-давно я хотел заниматься разработкой игр, чтобы написать свою Самую Классную Игру — думаю, многие проходили через это. В те времена Unity и Unreal Engine только-только стали появляться на слуху и, вроде как, ещё не были бесплатными. Я не стал их использовать, не столько из-за жадности, сколько из-за желания написать всё самому, создать игровой мир полность с нуля, с самого первого нулевого байта. Да, долго, да, сложно, зато сам процесс приносит удовольствие — а что ещё для счастья надо?

Читать дальше →
Всего голосов 44: ↑43 и ↓1+42
Комментарии51

Мое видение будущего D

Время на прочтение3 мин
Количество просмотров12K
Когда Андрей Александреску покинул пост заместителя руководителя отдела языка программирования D, меня попросили взять на себя эту роль в будущем. Нет необходимости говорить об этом, но я все равно скажу, что эта шапка на меня великовата.
Я все еще вхожу в свою новую роль в обществе и выясняю, как я хочу действовать и что это вообще такое. Этот процесс происходит не в вакууме, так как Уолтер тоже с нами.

На форумах D меня попросили написать в блоге о моих «мечтах и дальнейших шагах для D», так вот результат. Что бы я хотел, чтобы стало с D в ближайшем будущем:
Читать дальше →
Всего голосов 47: ↑44 и ↓3+41
Комментарии34

Какой язык — D, Go или Rust имеет лучшие перспективы заменить C и почему?

Время на прочтение7 мин
Количество просмотров71K
Несмотря на мой статус и очевидную предвзятость как одного из создателей D, я постараюсь отвечать откровенно; Я следовал путям Go и Rust, и я абсолютно точно знаю, где стирают грязное белье в D. Я поощряю людей на аналогичных позициях в сообществах Rust и Go чтобы и они делились своим мнением. Так вот.

Для начала, где то в вопросе должен фигурировать и C++. Должен ли он быть заменен вместе с С, или же он один из кандидатов на замещение С, но в любом случае С++ это ключевой элемент уравнения. Это ближайший язык к С и очевидный шаг вперед. Учитывая возраст С++, я в дальнейшем полагаю в этом вопросе что С++ вместе с С является целью для замены.
Читать дальше →
Всего голосов 109: ↑104 и ↓5+99
Комментарии393

Категории вместо директорий, или Семантическая файловая система для Linux

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

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

Читать дальше →
Всего голосов 41: ↑40 и ↓1+39
Комментарии56

Почему дизайн Go плох для умных программистов

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

На протяжении последних месяцев я использую Go для имплементаций Proof of Concept (прим.пер.: код для проверки работоспособности идеи) в свободное время, отчасти для изучения самого языка программирования. Программы сами по себе очень просты и не являются целью написания статьи, но сам опыт использования Go заслуживает того, чтобы сказать о нем пару слов. Go обещает быть (прим.пер.: статья написана в 2015) массовым языком для серьезного масштабируемого кода. Язык создан в Google, в котором активно им пользуются. Подведя черту, я искренне считаю, что дизайн языка Go плох для умных программистов.

Читать дальше →
Всего голосов 175: ↑159 и ↓16+143
Комментарии358

Так ли быстр ваш любимый С или нативная реализация линейной алгебры на 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

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

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

man!( C => D )

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

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

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

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

Python и D

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

Здесь мы не будем рассуждать о плюсах и минусах языков.



Мы будем использовать их вместе!


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

Дайджест событий из мира D

Время на прочтение2 мин
Количество просмотров6.8K
Предлагаю вашему вниманию дайджест интересных событий из мира D.

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

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


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

app "--DRT-gcopt=profile:1 minPoolSize:16" arguments to app
Читать дальше →
Всего голосов 29: ↑28 и ↓1+27
Комментарии14

DlangUI — кросплатформенный GUI для D (Часть 1)

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



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

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

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

Tree — убийца JSON, XML, YAML и иже с ними

Время на прочтение11 мин
Количество просмотров172K
Здравствуйте, меня зовут Дмитрий Карловский и я… много думал. Думал я о том, что не так с 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
Читать дальше →
Всего голосов 275: ↑168 и ↓107+61
Комментарии629

Учебник по языку программирования D. Часть 1

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

Читать дальше →
Всего голосов 40: ↑33 и ↓7+26
Комментарии54

Сравнение D и C++ и Rust на примерах

Время на прочтение8 мин
Количество просмотров37K
Данный пост основывается на Сравнение Rust и С++ на примерах и дополняет приведенные там примеры кодом на D с описанием различий.

Все примеры были собраны с помощью компилятора DMD v2.065 x86_64.
Читать дальше →
Всего голосов 63: ↑58 и ↓5+53
Комментарии50

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

Время на прочтение11 мин
Количество просмотров9K
image

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


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

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

Читать дальше →
Всего голосов 32: ↑31 и ↓1+30
Комментарии13
1