LINUX.ORG.RU

Язык D включен в коллекцию компиляторов GNU (gcc 9)

 


3

7

GCC 9.1 будет первым стабильным релизом с поддержкой GDC.

Его выход ожидается приблизительно в конце первого квартала 2019 г.

Код для поддержки GDC включает библиотеку libphobos (D run-time library) и фреймворк для тестов D2.

Поддержка D потребовала внесения изменений в приблизительно 1 миллион строк кода.

>>> Подробности



Проверено: jollheef ()
Ответ на: комментарий от Partisan

Множественные наследование в С++ не является однозначным достоинством. Оно мешает делать программу модульной, так как не видно, к какому именно суперклассу принадлежит исполняемые код.

Смешались в кучу кони, люди.

Вы про множественное наследование и его убогость Бертранду Мейеру расскажите. Автору языка Eiffel (в котором множественное наследование реализовано в полной мере). И автору книги «Объектно-ориентированное конструирование программных систем», которую вы вряд ли даже в глаза видели.

То, что кроме Eiffel и C++ множественное наследование нигде больше не сделали говорить о сложности этого вопроса, а вовсе не его нужности.

Ещё до него фирма Microsoft придумала COM - способ проектирования программы на основе компонентов, клторый вообще не предусматривал наследования. C++ тогда уже был, но не годится для этого.

И на чем же тогда COM объекты писали, если C++ для этого не годился, эрудированный вы наш? Ничего, что в Visual C++ прям готовые шаблоны были для реализации COM-объектов на C++? Вашей вымышленной реальности сей прискорбный факт не мешает существовать?

eao197 ★★★★★ ()
Ответ на: комментарий от missxu

большая часть примеров не работает(вываливается с ошибками(даже синтаксиса))

Потыкал наугад штук 15. Нашел только один нерабочий пример, скобки [] не там стояли.

devzero ()
Ответ на: комментарий от missxu

по скорости оно как питон, или есть надежды?

Сравнивал 2 года назад dmd с C++14 MSVC под виндой. Скорость разнилась в зависимости от того как написан код, хотя делал он одно и то же. Он что-то вычислял в цикле на миллион итераций. Если в D цикл был записан как for(int i; i < 1000000; i++), то работал быстро как C++, но если использовал foreach с указанием диапазона, то работал медленнее.

SR_team ★★ ()
Ответ на: комментарий от Partisan

Включение поддержки D расширило бы применение D, если бы оно было. А может, оно появится. Но я сомневаюсь в этом: почему раньше не применяли, если язык хороший.

А кто говорит то что не применяли? Те кто не применяли? Забавно слышать. Особенностью сообщества является то, что люди на нем просто берут и пишут, а ждут, когда кто-то весомый в их глазах скажем им - используйте этот язык. Это грамотные специалисты, которые в состоянии _самостоятельно_ принять решение.

Просто вокруг языка абсолютно нет хайпа и это в основном прекрасно ибо нет всяких code of conduct и прочей нечисти. Очень высокий технический уровень у сообщества. В исходники языка приятно взглянуть, хотя и есть легаси проблемы, конечно.

yetanother ()
Ответ на: комментарий от unDEFER

А библиотека для использования gobject introspection уже есть для реального использования? (Gtkd, вроде, написан вручную. А кроме GTK есть ещё много чего. Да и сам GTK уже не 3.22, а 3.24, хоть особо там ничего и не поменялось.)

gag ★★★★★ ()
Ответ на: комментарий от unDEFER

когда всё в языке продумано до мелочей

Это в D все продумано до мелочей? Да ладно.

В нем до сих пор торчат следы длительной эволюции (см. scoped class в качестве примера). И, местами, признаки того, что авторы сами не знают, как его позиционировать (это про betterC речь).

eao197 ★★★★★ ()
Ответ на: комментарий от cetjs2

ну круто... стоит ли учить D? в чем плюсы D?

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

yetanother ()
Ответ на: комментарий от missxu

по синтаксису-какаято джава на минималках

можно писать в сишном, плюсовом стиле или стиле джавы. потом люди помаленьку начинают писать идиоматически

по скорости оно как питон, или есть надежды?

по скорости как С/С++

yetanother ()
Ответ на: комментарий от unDEFER

Да я с C++ сравниваю.

Ну это-то да. Хотя какой смысл сравнивать язык с GC с языком без оного — это большой вопрос.

Но сам D выглядит так, как будто его не продумывали изначально, а наслаивали одно на другое. Что, собственно, так и происходило. Достаточно вспомнить, как в нем появились сперва шаблоны, а затем те самые mixin-ы.

Так что как пример удобного, практичного, нативного языка с GC — D очень хорош. Всяко лучше популярного нонче Go. Как пример продуманного... Это вряд ли.

eao197 ★★★★★ ()
Ответ на: комментарий от eao197

Это в D все продумано до мелочей? Да ладно.

В нем до сих пор торчат следы длительной эволюции (см. scoped class в качестве примера). И, местами, признаки того, что авторы сами не знают, как его позиционировать (это про betterC речь).

Согласен, свой легаси у D уже есть. Но все равно поприятнее чем у плюсов дело обстоит.

yetanother ()
Ответ на: комментарий от missxu

по синтаксису-какаято джава на минималках

А по-моему как брейнфак.

Например:

void main()
{
    import std.exception, std.stdio, std.process;

    auto result = ["whoami"].execute;
    enforce(result.status == 0);
    result.output.write;
}

Если бы не whoami, то поди догадайся чего тут происходит.

WitcherGeralt ()
Ответ на: комментарий от gag

А компилятор не такой тормозной как g++/clang++?

Там три компилятора есть (у всех один фронтенд): dmd на бекэнде dmc gdc на бекэнде gcc ldc на бекэнде clang dmd самый быстрый в компиляции, остальные тормознутые как g++/clang, но код у них получше получается и порой заметно. dmd используют для разработки, остальные для релиза. на ldc есть еще отдельные примочки типа calypso - позволяет совместно кодить на С++/D без взаимных биндингов, работа с GPGPU и др.

yetanother ()
Ответ на: комментарий от SR_team

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

Да нормальная там скорость с `dub`. Можно еще отключить проверку обновлений пакетов и еще быстрее будет.

yetanother ()
Ответ на: комментарий от yetanother

Но все равно поприятнее чем у плюсов дело обстоит.

Во-первых, было бы странно, если бы происходило в обратную сторону. Все-таки D изначально создавался как «правильный C++».

Во-вторых, огромная часть удобства при использовании D проистекает от наличия GC. Убери GC и что от D останется?

В-третьих, при всех своих интересных вещах (в частности, модификаторы pure, const, immutable) явно видно, что у D ноги растут из прошлого века. Ну, например, детская ошибка:

class A {
    void f() {}
}

void main()
{
    A a;
    a.f();
}
и валимся при попытке вызвать f() по нулевому указателю. Тогда как современные языки стараются разграничить nullable и not-null указатели/ссылки.

Но при всем при том, у D такая же ниша, как и у Go, Eiffel, OCaml, Haskell (шустрый, нативый и безопасный язык с GC). И лично я бы предпочел D любому другому из этого списка.

eao197 ★★★★★ ()

Компильнул вот этот пример: https://tour.dlang.org/tour/ru/gems/range-algorithms

$ gdc main.d 
$ ll a.out 
-rwxr-xr-x 1 vadim vadim 2,9M окт 31 18:29 a.out
$ strip a.out 
$ ll a.out 
-rwxr-xr-x 1 vadim vadim 1,6M окт 31 18:29 a.out
$ gdc -S main.d 
$ ll main.s 
-rw-r--r-- 1 vadim vadim 5,0M окт 31 18:30 main.s

5 мегабайт ассемблерного листинга. Я понимаю, что пример такой, что требует 100500 функций под капотом, но всё-таки...

Это даже не статика:

$ ldd a.out 
	linux-vdso.so.1 (0x00007ffd67bf9000)
	libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007fb490e73000)
	libm.so.6 => /usr/lib/libm.so.6 (0x00007fb490cee000)
	libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007fb490ccd000)
	libdl.so.2 => /usr/lib/libdl.so.2 (0x00007fb490cc8000)
	libc.so.6 => /usr/lib/libc.so.6 (0x00007fb490b04000)
	/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007fb491048000)
$ nm -D --undefined-only a.out | wc -l
138

Там сишные printf(), qsort() и прочее счастье в списках импорта, то есть родной stdlib не самостоятелен.

Он просто весь свой stdlib по дефолту в файл пихает что ли?

devzero ()
Ответ на: комментарий от eao197

Пример про разыменовывание нулевого показателя показателен - Уолтер явно приводил этот пример и считает что это корректное и безопасное поведение языка. Потому что разыменовывание приведет к падению однозначно. А насчет анализа потока данных у него тоже какие возражения, если не ошибаюсь. Вроде это убъет время компиляции и этот анализ нужно делать отдельным инструментом. Но могу соврать.

yetanother ()
Ответ на: комментарий от gag

Да, можно писать. Есть полная поддержка всех фич GTK. Tilix написан именно на D с GTK+. В отличие от Qt к GTK можно сделать биндинг хоть к PHP (такой кстати есть, правда недопиленный)

anonymous ()
Ответ на: комментарий от yetanother

Уолтер явно приводил этот пример и считает что это корректное и безопасное поведение языка.

Ну Уолтер в этом плане вообще перец еще тот. Где-то до 2004-го или 2003-го года он упорно доказывал, что в D и шаблоны не нужны.

Тем не менее, в такой же древний, как C++, язык Eiffel уже лет 10 как void safety завезли. Kotlin сразу сделали с учетом nullable types. Даже в C++ной GSL тип not_null<T> есть.

Это я не про то, что D плохой. А про то, что он продуманный якобы.

eao197 ★★★★★ ()
Ответ на: комментарий от devzero

Он просто весь свой stdlib по дефолту в файл пихает что ли?

Пихает, а разве есть компилируемые языки, stdlib которого не внесены во все дистрибутивы, которые делают по другому? Тут главное, что потом размер сильно не растёт.

unDEFER ★★★★ ()
Ответ на: комментарий от eao197

Это я не про то, что D плохой. А про то, что он продуманный якобы.

Согласен, первое время он был действительно продуманный, но потом понеслась. Есть теперь и в нем нестыковки.

Но в любом случае плюсам он фору даст. Я не могу понять, почему в плюсы не могут завести рефлексию? Пробежаться по членам структуры это же дает такие возможности. У меня есть две имплементации одного и того же кода, на плюсах и на D, делают одно и тоже. И на D тупо меньше кода. Тот же msgpack - на D чтобы сериализовать структуру как есть не надо вообще ничего писать, а на плюсах нужно в определении структуры макрос прописать. Мелочь? Но когда у вас проходит куча времени, и вы вносите изменения в эту структуру, то на D у вас автоматически изменения учитываются, а на плюсах нужно залезть ручками и поправить.

yetanother ()
Ответ на: комментарий от yetanother

Я не могу понять, почему в плюсы не могут завести рефлексию?

Вы не один такой.

Хорошо хоть, что теперь D как источник идей для коммуниздинга в C++ используется (тот же if constexpr напрямую скопирован со static if в D).

eao197 ★★★★★ ()
Ответ на: комментарий от eao197

Хорошо хоть, что теперь D как источник идей для коммуниздинга в C++ используется (тот же if constexpr напрямую скопирован со static if в D).

Не пользовался пока им (а вот `static if`ом часто), но говорят что он свой скоуп вводит? Вот этого я тоже не пойму - это сильно снижает его полезность.

Ну, а коммуниздинг я думаю это естественное дело. Не всегда плохое, а иногда и полезное.

yetanother ()