LINUX.ORG.RU

Вышла первая версия компилятора D, написанная на D

 


3

6

Сегодня состоялся очень важный релиз компилятора языка D — DMD 2.069.0. До настоящего момента компилятор D был написан на С++, однако новая версия теперь написана на самом D. Процесс конвертации исходного кода с С++ на D занял значительный промежуток времени, однако позволил многократно упростить поддержку компилятора.

Значительным улучшениям подверглась стандартная библиотека Phobos. Теперь ещё больше функций в ней были рэнджефицированы (ranges — концепция, позволяющая упростить доступ и переборку элементов структур и классов).

DMD теперь поддерживает формат mscoff, используемый в библиотеках VS2015.

Активно ведутся работы над поддержкой мобильных платформ. В настоящий момент сообщается, что рантайм языка и библиотека Phobos проходят практически все тесты на устройствах Android. О полноценной поддержке разработки под iOS пока говорить нельзя, однако благодаря усилиям проекта LDC-iphone несложные приложения на D под iOS писать можно уже сегодня.

Для пользователей Linux выложена первая пробная версия компилятора Calypso, позволяющая в D использовать практически все существующие С++-библиотеки, даже такие большие и сложные, как Qt5 и Ogre3D.

Продолжаются активные работы над улучшением документации, и в долговременной перспективе рассматривается возможность включения в базовую поставку высокопроизводительного веб-сервера vibed.

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

Противники и сторонники сборщика мусора (GC) могут ознакомиться с дискуссией о том, что безопасную сборку мусора невозможно реализовать на базе исключительно библиотечных функций.

Новая версия сервера DCD, реализующая автодополнения исходного кода, также готова к использованию с новой версией DMD.

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

★★

Проверено: Shaman007 ()
Последнее исправление: Wizard_ (всего исправлений: 5)

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

Именно так. Я просто к тому, что обертка immutable<T> — это хорошо, но это не полноценная замена immutable из D.

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

Ты перескакиваешь с одного на другое. То у тебя «совместимость не нужна», то «D ничего и не ломал (почти)».

Я на D не пишу и ни за ни против не агитирую, но ты-то заводил разговор о совместимости в целом. И я тебе точно могу сказать, что изначальная «нестабильность» раста проблемы доставляла: скажем, интересуешься языком, ищешь ответ на вопрос в интернете и находишь кучу устаревших советов, которые просто не работают. Другое дело, что это было оправдано и теперь они взялись тащить груз совместимости и правильно делают.

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

непродумывают про шаблоны — а потом у них буст компилируется по полчаса, хотя более другие шаблоны нормально и быстро отрабатывают.

Это сейчас о каких языках?

Кстати, в D шаблоны быстрее компилируются?

DarkEld3r ★★★★★
()

Отличная новость, желаю долгой жизни такому языку как D.

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

удобные CTFE с доступностью почти всех функций (которым в отличие от шаблонов в С++ можно пользоваться). как CTFE функции в D или макросы в Rust.

В расте с CTFE сейчас, к сожалению, не всё так хорошо. Оно доступно только через «сompiler рlugins», а это нестабильная фича, значит пользователи стабильных версий языка вынуждены обходиться без неё. Ну и хотелось бы какого-то сахара без необходимости написания плагинов к компилятору.

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

Никто не думал о скинах, анимации, декларативном дизайне, динамическом позиционировании (и какие вообще должны быть лэйауты), локализация прибивалась гвоздями

Ты Qt хотя бы видел? Советую посмотреть - там и лэйауты и локализация есть. И много ещё чего.

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

Как макросы в C/C++, только лучше.

Такое сравнение не настраивает на позитивный лад.

В остальном, спасибо за уточнение. Ну и макросы работающих с AST в D есть или нет?

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

Например, вот наколенные бенчмарки различных циклов:

Возможно, плохо смотрел, но не увидел там превосходства Qt-шного итерирования. Куда именно смотреть?

PS Кстати, QVariant довольно годная штука, например.

boost::variant/boost::any.

PPS /flame Qt хотя бы из pre-alfa вышел в отличие от буста!

Это о чём?

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

Возможно, плохо смотрел, но не увидел там превосходства Qt-шного итерирования. Куда именно смотреть?

В исходное сообщение, для начала. Потом на числа для q_foreach. Потом опять в исходное сообщение:

Если ты тащишь qt, то лучше использовать qt контейнеры для улучшения производительности.

boost::variant/boost::any.

Кто то тащит буст, кто то qt. Какая принципиальная разница между этими двумя людьми?

Это о чём?

О том, что с qt ты не будешь при каждом новом релизе пересобирать свое приложение: https://imgur.com/iNN2XP3.png. А также breaking changes поменьше.

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

а не фонатика-задрота, кушающего настоящий борщик из капусточки

С капусткой, но не красный

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

Изменить «макросом» что-то ранее написанное – нельзя. (А хотелось бы. Можно было бы делать декораторы...)

Прочитать «макросом» что-то ранее написанное и, например, сгенерить сериализацию для всех полей – можно. Для того и нужно.

greatperson
()
Последнее исправление: greatperson (всего исправлений: 1)
Ответ на: комментарий от asaw

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

Такое «определение» ОК?

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

тю... чой это «не компилируется»? без проблем и любым компилятором. Паче что в приведённом фрагменте всё цивильно и никакого трэша и угара нет.

если имеется в виду кириллица, то спецификация D требует utf-8 и никакого криминала тут нет.

Я подозреваю, что это не настоящий D, а что-то вроде http://sourceforge.net/projects/dinrus/ (вот где безумие)

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

ПРоверено, работает: скорость увеличивается, число ошибок весьма заметно падает. Глаз не «замыливается».

велкам ту срач :)

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

вообще-то, на машине с Атлоном X2-64 восьмилетней давности и 4Гб ОЗУ, X86_64 ALT Linux с ядром 4.1.11-std-def, отягощённым KDE/4.14.13, насыщенный шаблонами проект (300 кб исходников) собирается ровно 12 секунд.

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

насыщенный шаблонами проект (300 кб исходников) собирается ровно 12 секунд.

Проверил один из своих проектов, 654 Кб исходников на С++14 - 10 секунд. Так что ни о чем.

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

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

или в D? так посмотри на его стандартную библиотеку, она почти вся на шаблонах. характерный, достаточно развесистый код, например --- реализация сопрограм (yield) в D --- образец понятности, код читается мгновенно. Запись в терминах классических шаблонов C++ даже не хочется прикидывать.

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

о чём. я же привёл конфигурацию железа. Да, компилятор dmd, примерно то же время у ldc. gdc не проверял, к сожалению: в репо его нет, самому собирать некогда.

сколько твой проект собирается clang'ом и на каком железе? Насколько он насыщен шаблонным кодом, насколько используется стандартная библиотека?

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

посмотри на реализацию автоматов, например

На какую? Их там минимум две, а то и больше - для разных подходов и целей. И библиотеки эти поддерживают C++03 на секундочку (где в это время был D?).

или в D?

Ни о чем. Я прошу конкретики.

Запись в терминах классических шаблонов C++ даже не хочется прикидывать.

Так, шаблоны уже «классические»? А ничего, что на дворе уже C++14 и шаблоны там сильно другие? Одни только variadic templates чего стоят.

asaw ★★★★★
()
Последнее исправление: asaw (всего исправлений: 1)
Ответ на: комментарий от glebiao

о чём. я же привёл конфигурацию железа

У меня процу 4 года. 16Гб ОЗУ, но вряд ли это имеет какое-либо значение.

Насколько он насыщен шаблонным кодом, насколько используется стандартная библиотека?

140 шаблонов, в том числе variadic, стандартная библиотека используется часто - unordered_map, thread, mutex, string, vector, etc.

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

А ничего, что на дворе уже C++14 и шаблоны там сильно другие? Одни только variadic templates чего стоят.

Стоп, с этого места подробнее. v.t., это хорошо, кто спорит. а в чём СИЛЬНО другие? что, появилась возможность писать код шаблона, не отличимый от регулярного текста? я что-то пропустил?

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

16Гб ОЗУ, но вряд ли это имеет какое-либо значение

ещё как имеет, особенно если сборка параллельная.

компилятор какой? 600 КБ исходников за 10 секунд? ни разу такого не видел. Сколько ядер процессора, в какое число потоков собирается проект, используются ли precompiled headrs и кэширование а-ля ccache?

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

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

На какую? Их там минимум две, а то и больше - для разных подходов и целей.

а неважно. обе ужас-ужас.

И библиотеки эти поддерживают C++03 на секундочку (где в это время был D?).

и что?

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

компилятор какой?

clang 3.8

Сколько ядер процессора, в какое число потоков собирается проект, используются ли precompiled headrs и кэширование а-ля ccache?

ядер 4, 8 потоков, используется, но перед проверкой почистил данные ccache и удалил все файлы от старой сборки.

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

Стоп, с этого места подробнее. v.t., это хорошо, кто спорит. а в чём СИЛЬНО другие? что, появилась возможность писать код шаблона, не отличимый от регулярного текста? я что-то пропустил?

А что, код шаблона когда-то принципиально отличался от регулярного текста?

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

и что?

То, что мы обсуждаем твоё утверждение: «развитие С++, это замечательно. НО! любое развитие C++, отягчено проклятием шаблонов. Деться от унаследованного подхода, не получится».

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

процессор, вероятно, iCore5 ? то есть, втрое более производительный процессор + вдвое больше ядер + сборка в 4 раза больше потоков + в 4 раза больше ОЗУ == сравнимое время.

спасибо, вопросов больше нет.

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

и? где ошибка? что, язык шаблонов радикально изменился?

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

сравнимое время.

Сравнимое, но и кода то у тебя в два раза меньше.

спасибо, вопросов больше нет.

А у меня есть - сколько у тебя шаблонов в коде?

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

Это ты утверждаешь, что там что-то не так - приводи хотя-бы примеры.

и? где ошибка? что, язык шаблонов радикально изменился?

Радикально улучшился: стал более удобным и выразительным.

asaw ★★★★★
()
Последнее исправление: asaw (всего исправлений: 1)
Ответ на: комментарий от glebiao

трэша в бусте?

Не следует про удобство шаблонов в современном C++ судить по трешу в бусте. Во-первых, буст всегда позиционировался как полигон для обкатки новых идей для языка, и наработки из буста потихоньку переползают в стандарт. Поэтому многие вещи написаны на пределе возможностей языка и за гранью возможностей некоторых компиляторов :)

Во-вторых, в современном C++ появились не только вариадики, но и лямбда-функции. Все месте это упростило использование шаблонов в коде. Причем тут еще нужно различать шаблоны в прикладном коде, которые используются для уменьшения дублирования кода. И шаблоны в библиотеках, которые нужны для адаптации библиотек под разные условия.

Если сравнивать шаблоны D и шаблоны C++, то шаблоны D были гораздо покруче шаблонов C++03. Наверное, они все еще круче, чем шаблоны C++11/14, но разрыв уже не столь велик. Конечно, в D есть мега-фича под названием static if, но, как оказывается, в C++ без нее можно достигать похожих эффектов.

Ну и, нужно заметить, что шаблоны D в сочетании с другими наворотами языка (вроде разнообразных mixin-ов и CTFE) позволяют написать такой навороченный код, что простой смертный будет плеваться не меньше, чем от метапрограммирования на шаблонах C++. Если посмотреть презентации того же Александреску про D, то там так же полно кода, за который обычного разработчика нужно бить по рукам :)

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

например --- реализация сопрограм (yield) в D --- образец понятности, код читается мгновенно.

Можете кинуть ссылку конкретно на эту реализацию?

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

например --- реализация сопрограм (yield) в D --- образец понятности, код читается мгновенно.

Можете кинуть ссылку конкретно на эту реализацию?

Наверное, вот это https://github.com/D-Programming-Language/druntime/blob/master/src/core/thread.d

Смотреть class Fiber

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

Видимо, наличием вот таких портянок:

        static if( __traits( compiles, VirtualAlloc ) )
        {
            VirtualFree( m_pmem, 0, MEM_RELEASE );
        }
        else
        {
            import core.sys.posix.sys.mman; // munmap

            static if( __traits( compiles, mmap ) )
            {
                munmap( m_pmem, m_size );
            }
            else static if( __traits( compiles, valloc ) )
            {
                free( m_pmem );
            }
            else static if( __traits( compiles, malloc ) )
            {
                free( m_pmem );
            }
        }
:)

Прям какой-то CPDD — Copy&Paste Driven Development :)

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

Мне больше нравится, когда в одном месте определяются системно-зависимые примитивы вроде MemAlloc/MemFree (или соответствующих RAII-оберток) и там живет лес из #ifdef-ов или static-if-ов. А в остальных местах затем эти примитивы используются уже без низкоуровневых проверок. Код получается проще и при портировании на другие платформы проблем меньше.

Но я ламер, куда мне до серьезных дядек вроде Брайта и Александреску :)))

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

Б-же, а ведь вы правы, это компилируется. Я удивлен.

предметно ориентированная часть представлена записью на родном...

Это, не к ночи помянута, 1С какая-то. Срача не хочется, я просто скромно обозначусь, что технический английский - это не rocket science, а средство передвижения, и этим ограничимся, ок?

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

Буст за счет шаблонов расширяет C++ так, как это мало в каком другом языке вообще возможно.

Шаблоны цепепе - это полное отстоище. Максимум, что можно накарякать с помощью этого говна - это Boost.Sprit. Теперь ты глянешь, хотя бы, на Хацлевский Parsec и, если сможешь, то поймёшь, где именно твои любимые шаблоны цепепе, т.е. в каком месте :-) Язык шаблонов цепепе - это откровенное говно. По той лишь очевидной причине, что язык шаблонов цепепе - это не сам цепепе. И чтобы писать программы, работающие на этапе компиляции, нужно ваять просто запредельные уродства, как это предлагал делать г-н Александреску в своей книжонке про «современное проектирование». Просто особо удивительно, на что способны любители цепепе и на какие жертвы они идут, вместо того, чтобы просто выбрать другой язык. :-)

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

(плюс Samsung, если мне склероз не изменяет)

По моему, самсунг фигурировал только в какой-то одной новости про серво и реально раст они никак не помогают развивать.

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

В свое время была вот такая новость: тыц. Если Samsung как-то материально поддерживал разработку Servo, то это нехило, вообще-то говоря. Т.к. далеко не каждый открытый проект получает хоть какую-то помощь от крупных корпораций.

eao197 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.