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 ()

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

Я читал ваш блог и помню дискуссию с вами в одном из прошлых топиков. Не могу понять ваше отношение, честно. Вы потеряли интерес к языку. Но при этом не забываете отметиться в комментариях к каждой новости на тему того, как же все плохо. «Достали» новости о D? Они нечасто бывают, чтобы успеть достать. Так почему столь болезненный интерес?

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

Добавлю еще, что сейчас нужность D стала еще более непонятна. Раньше D был единственным актуальным C++killer-ом. Потом появился Go, за которым стоит не кто-нибудь, а Google (одного этого хватает для того, чтобы сотни леммингов с восторгом бросились жрать кактус, не смотря на откровенную убогость Go как языка программирования). Но в этом году еще и Rust официально зарелизили. И не просто зарелизили, а еще и несколько обновлений выкатили. И за Rust-ом так же есть более-менее серьезная сила: Mozilla (плюс Samsung, если мне склероз не изменяет). Так что на пятачке под названием «C++killer» стало еще более тесно.

Имхо, у D было больше шансов пока Александреску в Facebook-е работал. Тогда хоть громкое имя за спиной у D маячило и рассказы об опыте использования D в разработках Facebook-а выглядели несколько посерьезнее, чем аналогичные рассказы про sociomantic. Но, как многим представляется, D в Facebook применялся именно с подачи Александреску, а вот нужен он там будет без главного идеолога — хз, скорее всего нет.

Вот и получается в очередной раз, что люди, которые не хотят быть innovator-ами и early-adopter-ами, а по складу характера больше соответствуют категориям early majority (не говоря уже про late majority) до сих пор не видят в D стабильной платформы для проектов, которые будут жить не один год.

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

Да ладно, разве я в этом топике поливал D чем-нибудь?

Участвую в таких обсуждениях по разным причинам. Отчасти потому, что в этой теме хоть что-то понимаю. Отчасти потому, что в свое время высказывал свое мнение Брайту и Александреску о том, что создавая D2 (да еще и с транзитивной иммутабельностью), они губят язык. И до сих пор нахожу подтверждение тому, что был прав :(

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

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

они губят язык

Они превратили его в подобие boost. И это даже хорошо. Пусть обкатывают, может потом из этого будет создан другой язык, или в тот же С++ что-то попадает.

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

Я просто привёл цитату, что разработчики Git называют его СУБД. Насчёт именно ООСУБД там ничего не написано, действительно, каюсь.

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

Ув.тов.tailganner уже несколько раз говорил: не нужно путать понятие БД и СУБД.

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

Вот и получается в очередной раз, что люди, которые не хотят быть innovator-ами и early-adopter-ами, а по складу характера больше соответствуют категориям early majority (не говоря уже про late majority) до сих пор не видят в D стабильной платформы для проектов, которые будут жить не один год.

Я бы сказал, что, скорее, люди, которые позиционируют себя как early-adopters, не способны использовать язык по назначению и таким образом показать остальным «недальновидным» (таким как я) его преимущества как инструмента в комплексе. Мне даже порой кажется, что эти early-adopters и не программисты вовсе, а просто любители поболтать на завалинке. То же и с Rust. А вот с убогим Go этого не происходит. Или с язычком под названием Vala, который совсем никто не пиарет, который очень нишевый, но на котором делают реально полезные вещи.

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

Vala, который совсем никто не пиарет, который очень нишевый, но на котором делают реально полезные вещи

Vala «жив» только потому-что его в Gnome местами используют. А так это еще более ненужный язык чем D.

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

А в фейсбуке он не D занимался, можно подумать.

Наверное, это и есть причина такой странной интерпретации :) Нет, в Facebook Александреску занимался D только в контексте каких-то внутренних проектов, без какого-либо выхлопа в апстрим. Facebook вообще, вопреки популярному мнению, никак не поддерживает D кроме спонсирования двух конференций и копеечного присутсвия на bountysource. Во внутренних проектах используют, но для сообщества никакой пользы.

Поэтому, несмотря на то, что количество консультаций по C++ могло увеличилось (чтобы компенсировать выскооплачиваему должность в FB), количество реальной работы над D увеличилось ещё больше. Это заметно даже по его активности в newsgroup / GitHub.

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

Vala «жив» только потому-что его в Gnome местами используют.

Вот именно! Более того, он для этого и был создан. Но ключевое слово - используют.

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

а что такого сложного в понимании lifetime & ownership, на твой взгляд?

А что в них простого? :)

(1) понимать, зачем это вообще нужно и что за зверь dangling pointer (2) понимать концепцию borrow как расширение к интуитивному «владелец \ не владелец» (3) понимать систему правил, которые разрешают borrow в одной ситуации и запрещают в других (тесно завязано ещё и на понимание immutability) (4) понимать, почему в некоторых ситуациях borrow checker требует явных аннотаций (несколько borrowed аргументов + return), а в некоторых справляется сам (5) понимать как раздельная компиляция / WPO влияется на конкретный набор правил по аннотации

Это может быть интуитивно понятно для матёрого embedded С-шника, который привык к использованию похожих правил by convention. Но в общей массе? Едва ли.

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

Нет, в Facebook Александреску занимался D только в контексте каких-то внутренних проектов, без какого-либо выхлопа в апстрим. Facebook вообще, вопреки популярному мнению, никак не поддерживает D кроме спонсирования двух конференций и копеечного присутсвия на bountysource.

То есть D не нужен даже фейсбуку, даже вместе с Александреску? И какие же основания верить в его успех после ухода Александреску?

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

А реализация такого интерфейса как выглядеть будет? Примерно как в плюсах?

Реализация будет выглядеть точно так же, как и без .di файла. Интерфейсный файл это просто копия .d модуля из которой удалены все тела не-template функций (есть флаг компилятора для генерации), на реализацию как таковую не влияет. Предназначено для распространения black box статических библиотек.

В этом смысле оно очень сильно отличается от C++, где с написания заголовочных файлов всё как раз начинается.

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

То есть D не нужен даже фейсбуку, даже вместе с Александреску?

Нужен примерно на том же уровне, что и какой-нибудь OCaml (ЕМНИП кто-то из них упоминал о сравнимом количестве внутренних проектов на эти языках, хотя память может меня подводить).

Но да, это всегда было на уровне «отдельные энтузиасты пользуются, есть пара проектов, там посмотрим».

И какие же основания верить в его успех после ухода Александреску?

Значительно больший, чем до его ухода - ведь теперь языком на full-time занимаются два человека, а не один :)

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

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

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

Здесь ты намекаешь на фейсбук, которому Ди «нужен примерно на том же уровне, что и какой-нибудь OCaml»?

Остальные (и их, увы большинство) просто выбирают предмет очередного хайпа и прячут нежелание разбираться за словами вроде «успех».

Или на фейсбук ты намекаешь в этом месте?

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

Здесь ты намекаешь на фейсбук, которому Ди «нужен примерно на том же уровне, что и какой-нибудь OCaml»?

Да, в том числе. Принцип, которым они так гордятся «пусть инженеры выбирают, что хотят» - ИМХО является полным идиотизмом, по крайней мере доведённый до такого абсурда. Но у Facebook достаточно денег, чтобы заниматься любым идиотизмом :)

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

Я бы сказал, что, скорее, люди, которые позиционируют себя как early-adopters, не способны использовать язык по назначению и таким образом показать остальным «недальновидным» (таким как я) его преимущества как инструмента в комплексе.

Мне думается, что это даже не early-adopters, а именно что innovators (иногда их еще называют technologist). Если early-adopters заинтересованы в новой технологии потому, что видят в ней серьезное конкурентное преимущество в сравнении с мейнстримом, то innovator-ам и technologist-ам важна именно новизна инструмента: главное достоинство инструмента для них — это непохожесть и маргинальность.

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

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

Нет, особую комичность всегда придают не лисперы, а мастера лавировок и извращений - знатоки язычка для «закатывания солнца» вручную, но на котором банально нельзя сгенерировать строчку во время компиляции. Этот язычок называется цепепе :-)

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

но на котором банально нельзя сгенерировать строчку во время компиляции. Этот язычок называется цепепе :-)

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

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

банально нельзя сгенерировать строчку во время компиляции

И как они без этого живут вообще непонятно. Вот садится человек писать программу, и тут в голове мысль - а может взять и сгенерировать строку еще во время компиляции!!! Гениально же. Но цепепе, облом, и гениальная программа не состоялась. В то время как довольный лиспер улыбается и ест борщ, у него строка сгенерировалась, а что еще для счастья надо.

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

Но цепепе, облом, и гениальная программа не состоялась.

Тут и добавить то нечего. Цепепе - это действительно облом и фэйл :-)

лиспер улыбается и ест борщ

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

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

Да, в том числе. Принцип, которым они так гордятся «пусть инженеры выбирают, что хотят» - ИМХО является полным идиотизмом, по крайней мере доведённый до такого абсурда. Но у Facebook достаточно денег, чтобы заниматься любым идиотизмом :)

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

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

Мне думается, что это даже не early-adopters, а именно что innovators (иногда их еще называют technologist). Если early-adopters заинтересованы в новой технологии потому, что видят в ней серьезное конкурентное преимущество в сравнении с мейнстримом, то innovator-ам и technologist-ам важна именно новизна инструмента: главное достоинство инструмента для них — это непохожесть и маргинальность.

А школьники-фанбои на ЛОРе - просто подражатели этих innovators?)) Впрочем, в D как-то новизной совсем не пахнет, учитывая его возраст.

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

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

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

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

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

Но вообще-то в C++14 тоже нет никаких проблем сгенерировать строку во время компиляции))

Может продемонстрируешь, как не через огромную жопень это сделать на цепепе-14? :-) Можешь даже на цепепе-17, если хочешь. Лишь бы не через жопень. :-)

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

А школьники-фанбои на ЛОРе - просто подражатели этих innovators?))

Ну уж точно не early adopter-ы.

Впрочем, в D как-то новизной совсем не пахнет, учитывая его возраст.

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

А вот в D2 попытались реализовать строгую иммутабельность, присущую функциональным языкам, но в насквозь императивном и объектно-ориентированном языке. Другое дело, что, на мой взгляд, с транзитивной иммутабельностью они переборщили, но ведь попробовали же.

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

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

Эти ребята обычно зовутся архитекторами. И это совершенно стандартная практика. В фейсбуке как-то по-другому? Там нет архитекторов?

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

Потому что он самый-самый... ущербный :-)

Ну приведите пару-тройку не ущербных статически-типизированных языков в качестве примера того, «как надо».

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

В фейсбуке как-то по-другому? Там нет архитекторов?

Насколько мне известно - нет. Любая команда любого размера пилящая какой-либо проект может выбрать что угодно её разработчикам. Информация со слов сотрудника FB в неофициальном ответе на вопрос от меня «вам что, так трудно проинвестировать в языки, которым вы пользуетесь?» на одном из DConf :) Не знаю, есть ли публичные подтверждения.

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

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

immutable добавляли прежде всего ради concurrency, поэтому транзитивность была необходима. Иначе в этом вообще никакого смысла нет. В D1 как раз был head const как storage class и от него не было никакой практической пользы.

В D2 immutable сам по себе работает как надо, просто он очень редко нужен - прежде всего в архитектурах, где можно за счёт увеличенного потребления памяти убрать mutex'ы и сильно улучшить многопоточный доступ.

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

immutable добавляли прежде всего ради concurrency, поэтому транзитивность была необходима.

Вот блин мне-то не нужно сказки рассказывать, оставьте их для неофитов с неокрепшими умами.

Транзитивная иммутабельность, например, не позволяет передать между нитями иммутабельный объект-сообщение, в котором будет ссылка на мутабельные данные. Т.е. поток A открыл, скажем, файл и передает его для обработки потоку B. Экземпляр сообщения, в котором хранится ссылка на объект File, иммутабельный. Но вытянуть из него мутабельную ссылку на File было нельзя.

Или этот маразм уже исправили?

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

Ну приведите пару-тройку не ущербных статически-типизированных языков в качестве примера того, «как надо».

C. И хоть в нём и нельзя программировать компилятор, который бы генерировал строчки во время компиляции, но его размер, если мериться толщиной стандарта, меньше в 3 раза по сравнению с цепепе. :-) Т.е. спич о том, что даже измучив себя зубрёжкой 1300 страниц стандарта цепепе, так и не получится написать эффективный генератор строчек во время компиляции. Ну и зачем этот толстенный урод нужен? :-)

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

но его размер, если мериться толщиной стандарта

Мериться толщиной стандарта, с легкой руки Вирта, модно в кругах упоротых Обероном.

Ну и зачем этот толстенный урод нужен?

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

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

Включите мозги и поймете.

Можно я воспользуюсь Вашими? Я хочу увидеть аргументированный ответ на свой вопрос.

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

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

А модулей так и нет...

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

Можно я воспользуюсь Вашими?

Нет, за ваше обучение мне не платят.

Я хочу увидеть аргументированный ответ на свой вопрос.

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

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

А модулей так и нет...

Т.к. временами очень плотно приходилось использовать pre-compile-time кодогенерацию, то наличие include-ов в C++ сильно помогало в этих ситуациях.

В том же D1 использовать такую кодогенерацию было не очень просто, помнится, до тех пор, пока в D 1.001 или 1.002 не добавили крутую инструкцию mixin.

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

Ну вот, значит архитекторам D не интересен, не архитекторам - тоже не особенно интересен. Большинству и подавно. В чем проблема?

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

Нет, за ваше обучение мне не платят.

Решил просто нахамить? Что ж, Ваше право, будем считать что аргументов нет.

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

Т.к. временами очень плотно приходилось использовать pre-compile-time кодогенерацию, то наличие include-ов в C++ сильно помогало в этих ситуациях.

Да ради бога, пусть будут инклуды, почему модулей-то нет?

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

Да ради бога, пусть будут инклуды, почему модулей-то нет?

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

Во-вторых, видимо, никто не придумал, как подружить include и модули не сломав совместимость.

В-третьих, видимо, не сильно-то это и нужно. Было бы лучше, если бы в C++ не модули добавили, а сделали бы для C++ менеджер зависимостей вроде Maven, RubyGems или Cabal.

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

Мериться толщиной стандарта, с легкой руки Вирта, модно в кругах упоротых Обероном.

Нет, Вирт тут не причём. Речь о неадекватно больших усилиях, необходимых на изучение огромного, но говённо спроектированного языка, который в итоге не позволит даже банально сгенерировать строчку в время компиляции :-)

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

Профессионалу ничего этого и даром не надо. Многократно доказано, что для написания реально полезного программного продукта достаточно возможностей C. :-)

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

В-третьих, видимо, не сильно-то это и нужно. Было бы лучше, если бы в C++ не модули добавили, а сделали бы для C++ менеджер зависимостей вроде Maven, RubyGems или Cabal

Ага, зелен виноград...

Во-вторых, видимо, никто не придумал, как подружить include и модули не сломав совместимость.

А вот это ближе к истине. И таких мест в С++ полно. В общем, не нужно выдавать нужду за добродетель.

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

Транзитивная иммутабельность, например, не позволяет передать между нитями иммутабельный объект-сообщение, в котором будет ссылка на мутабельные данные.

Да, потому что смешивать mutable и immutable в таком виде - поиск приключений на свою голову. Добавлять поддержку откровенно дурного стиля программирования да ещё и ценой большего усложнения системы типов (т.к. нужно отслеживать квалификаторы для каждого уровня отдельно)? Нет уж, лучше передавайте мутабельный объект-аггрегатор.

Чего на самом деле не хватает, так это полноценных Unique типов и их поддержки в std.concurrency (решаемо, но не элегантно, тут Rust впереди планеты всей). А иммутабельность это полностью отдельный мир.

Или этот маразм уже исправили?

Если такой подход кажется маразмом, лучше просто игнонировать существование immutable.

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

Ну вот, значит архитекторам D не интересен, не архитекторам - тоже не особенно интересен. Большинству и подавно. В чем проблема?

В утверждении, что Александреску забросил D :) А что, была ещё какая-то тема обсуждения?

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