Язык программирования D как лучшая альтернатива С++

nikola1956

На днях случайно обнаружил, что существует замечательный язык, предназначенный для тех же целей, что и C++, то есть для системного программирования, низкоуровневой оптимизации и программирования на уровне нативного кода.
Просматривал книжку Alexandrescu "" (2010, zip, pdf) — язык D показался мне довольно красивым и продуманным в отличие от излишне тяжеловесного С++. Остается выяснить, насколько просто можно использовать в D огромное множество C++ библиотек и какое будущее у языка D в качестве замены монструозного С++? Кто-нибудь из читателей раздела знаком с этой темой?
P.S. Кстати, недавно слышал, что Александреску переписал код чего-то с С++ на D и выяснилось, что D работает быстрее. Правда не понятно, насколько плох был этот С++ код и переписывался ли он на D строчка в строчку.

svetaslav212

D — от Dиавола! Проще сразу изучать язык Ада!

Werdna

Всегда думал, что помимо синтаксиса языка есть ещё целый эшелон библиотек и инструментов, которые играют куда бОльшую роль, чем сам язык временами.
Просто ткнул наугад, что у нас в Ди с библиотекой gettext. Получилось что-то невнятное:
http://forum.dlang.org/thread/mailman.257.1328208519.25230.d...
Пока не притащат основные библиотеки говорить, в общем, не о чем.

digenet


недавно слышал, что Александреску переписал код чего-то с С++ на D и выяснилось, что D работает быстрее.
тут было обсуждение: link
вроде под ником andralex пишет этот Александреску

stm5872449

Пока не притащат основные библиотеки говорить, в общем, не о чем.
Насколько я понял из приведенной выше дискуссии на реддите, написание байндингов к сишному коду элементарно, так что вряд ли там прям страдания от недостатка библиотек.

nikola1956

тут было обсуждение
Отличная ссылка, спасибо! :)

nikola1956

что у нас в Ди с библиотекой gettext
Не понятно, кто из нас не прав. :confused:
Вроде бы библиотека gettext написана на С (не на С++! а все С-библиотеки, если я правильно понял из книги Александреску, легко подключаются к D.

Werdna

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

Werdna

Вроде бы библиотека gettext написана на С (не на С++! а все С-библиотеки, если я правильно понял из книги Александреску, легко подключаются к D.
Если это так, то круто.

Whoman-in-white

Вроде пишут , что там еще не все баги из компилятора вычистили

nikola1956

Попрактиковался немного: показалось, что язык D сыроват. Не понравилась организация документации на главном сайте. После Явы она выглядит как-то "по-деревенски". Мало качественной справочной информации, трудно гуглятся конкретные вопросы по языку D и библиотекам.
В общем, похоже, что C++ forever
Но для общего развития все равно еще позанимаюсь с D...

karkar

Я в прошлом году открыл для себя этот язык, и меня он очень радует. Писал на нем кучу консольных мелочей, несколько гуевых программ, в том числе обработчик фоток и анализатор/визуализатор дискового пространства, а также одно "веб-приложение" на vibe.d - сайт соревнования с регистрацией, приемом решений и отображением scoreboard'a (был сделан за день, работал стабильно, ресурсов не жрал). Если раньше для многих своих задач я выбирал окамл, то теперь чаще всего это D, хотя какие-нибудь компиляторы по-прежнему предпочитаю делать на окамле или хаскеле.
Кое-какие впечатления и обсуждения есть тут:
http://thedeemon.livejournal.com/tag/d
Собираюсь следующую крупную версию одного из основных своих продуктов (Video Enhancer) на D делать.
Чисто как язык D прекрасен (хоть и не идеален и отлично может служить заменой как С++, так и питонов/окамлов/сишарпов. Там полный спектр от встроенного асма, SIMD, низкоуровневой работы с памятью до высот функциональщины с выводом типов, иммутабельностью, проверкой чистоты, сильными абстракциями, и компайл-тайм исполнением почти произвольного кода. Плюс удобные средства для параллелизма (parallel for, map, reduce и т.д. в стандартной библиотеке) и concurrency (erlang-style message passing с изоляцией актеров системой типов). Но есть и множество но. Язык делают прожженые практики-плюсовики, далекие от высокой теории CS, поэтому он получается весьма удобным и приятным на практике, но у него нет четкой теории, что в сочетании с компилятором на С++ приводит к череде вечных багов. Последние пару лет багов вроде бы становится заметно меньше (это многие старые пользователи отмечают с каждым релизом правятся сотни этих багов, что наводит на мысли сколько сотен при этом вносится и сколько еще осталось.
Основных компиляторов три - DMD, GDC и LDC. DMD - официальная референсная реализация. Работает быстрее всего (говорят, даже заметно быстрее этого вашего go но код генерит не самый лучший - где-то на уровне VC6. GDC использует фронтенд от DMD, бэкенд от GCC. LDC - фронтенд от DMD, бэкенд LLVM. В винде проще всего поставить DMD, но при компиляции в 32 бита он делает объектные файлы в старинном формате (OMF) и использует свой линкер. Линковать сишные либы можно, либо сконвертировав их в OMF, либо линковать и загружать динамически. При компиляции в 64 бита все проще, используется линкер от VS или гнушный(?).
Отдельного упоминания заслуживает GC. Иметь его в языке очень приятно, можно писать как на шарпе, но получать нативный бинарник, который запускается мгновенно и не имеет левых зависимостей. Но GC там частично консервативный (что на практике не проблема в 64 битах, но бывает проблемой в 32) и главное не generational. Другими словами - тормозной. Если в куче гигабайт мелких объектов, сборка мусора может занять секунд 5. А при неосторожном подходе она может случаться довольно часто. Поэтому с памятью следует обращаться осторожно, что к счастью не так сложно, и средства ручного управления (от delete до умных указателей с подсчетом ссылок) тоже имеются.
Короче, проблем там хватает, но если их представлять и уметь обходить, и они не становятся show-stopper'ами, то получается очень мощная и приятная в использовании штука. Поэтому я и хочу по возможности свои плюсовые проекты на D переводить.

karkar

Из документации книжка Александреску - the best, но она платная.
Из открытых источников стоит отметить такой:
http://ddili.org/ders/d.en/
Еще надавно начали делать tutorial:
http://qznc.github.io/d-tut/

nikola1956

Большое спасибо, что поделились опытом работы с языком D! Спасибо за ценные ссылки! :)
Сначала попробую попрактиковаться с библиотекой DFL, которая использовалась для создания GUI в обработчике фотографий и визуализаторе дискового пространства.

agaaaa

Ты IDE пользуешься или vim/emacs?

karkar

Для D использую VisualD - плагин для студии (написанный на D тоже). vim'ом пользуюсь для ряда других языков.
Оставить комментарий
Имя или ник:
Комментарий: