LINUX.ORG.RU

Вышла очередная референсная реализация компиляторов языков D1 и D2

 ,


1

3

10 июля стала доступна для загрузки очередная референсная реализация компиляторов языков D1 и D2. Как повелось с предыдущего выпуска, готовы пакеты для Ubuntu, Fedora, и openSUSE, как 32-х, так и 64-хбитные.

Некоторые нововведения:

  • введены атрибуты @safe, @property, сделан автоматический интерфейс для @safe, pure, nothrow;
  • В inline assembler добавлена поддержка инструкций SSSE3;
  • добавлены новые предупреждения о свойствах, подлежащих удалению, часть свойств объявлены удалёнными;
  • расширены ядро языка и стандартная библиотека, в частности, добавлены core.sys.posix.netdb, td.array.uninitializedArray, std.array.minimallyInitializedArray;
  • часть функций, в первую очередь в модулях std.string и std.uni, была переименована для соответствия с разработанными правилами именования, старые названия частично сохранены для совместимости, но будут удалены из последующих версий;
  • добавлена возможность использовать логические переменные в качестве ключей в ассоциативных массивах, ранее с этою целью можно было использовать только целые числа и строки.

Авторы также рапортуют об устранении 127 ошибок различной природы.

Подробный список изменений можно посмотреть на официальном сайте.

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

★★★★★

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

Ответ на: комментарий от A-234

> Так прямо сразу и «врага» :)

Именно. Есть «теоретические придирки», а есть «практические грабли». У вас пока только первые. Хотелось бы услышать наоборот: «вот я делаю проект, а в языке вот такая беда - ...».

А как дело обстоит с поддержкой не x86?


См. выше. В теории, можно написать хоть 100 «придирок» «а как у него там с...». На практике лучше сходить на сайт и почитать про сам язык и его платформы. Если даже он не поддерживает АРМ/СПАРК/БК0010, ему ничто не мешает стать главным языком на Wintel платформе - уже ГРОМАДНЫЙ рынок.

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

Няша, может ты уже назовешь хотя бы пару более-менее известных проектов на нем? Я ни одного найти не могу, кроме вышеупомянутого OpeMW(который его выкинул, да).

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

> Кстати, а можно в D сделать чтобы микс-ины могли пользоваться интерфейсом класса, в который они подмешиваются?

Я не настолько хорошо влез в миксины, но если судить по этому:
===========================================================
Mixins are evaluated in the scope of where they appear, not the scope of the template declaration:
int y = 3;
mixin template Foo() {
int abc() { return y; }
}
void test() {
int y = 8;
mixin Foo; // local y is picked up, not global y
assert(abc() == 8);
}
======================================================
...то вполне возможно.

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

Там в первой же строчке написано:

While D is fully capable of interfacing to C, its ability to interface to C++ is much more limited.

much more limited

more limited

limited

Там же,ниже есть такое: D understands how C++ function names are «mangled» and the correct C++ function call/return sequence. только вот проблема в том, что name mangling is compiler business. Как компилятор Д узнает, какую схему использует компилятор с++? В общем случае это сделать нельзя, можно только предложить поддержку какого-то конкретного компилятора, или нескольких компиляторов.

Короче, я вам про бинарную совместимость хочу сказать. Если у меня есть библиотека на с++, как я могу её использовать из Д? Никак. Мне надо делать сишный врапер к ней. Или же пользоватся костылями, что не есть хорошо.

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

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

>А примеров поновее нет?

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

БНФ - это не спецификация языка, а спецификация _синтаксиса_ языка.

Да, но в те стародавние времена Алгол и БНФ развивались вместе, разделение спецификаций языка и синтаксиса произошло позднее, благодаря патриархам программирования типа Н.Вирта и др.

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

>> А примеров поновее нет?

Нет

О чем и речь.

БНФ - это не спецификация языка, а спецификация _синтаксиса_ языка.

Да, но

Без всяких «но'.

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

> у D аж две стандартных библиотеки: Phobos и Tango.

Официальная стандартная библиотека - одна, Phobos.
Мне Танго не совсем нравится, думаю стоит придерживаться Фобоса.

И ФП в нем какое-то странное.


Ди ни разу не ФП, можете считать его «ООЯ с элементами ФП».
Для апологетов ЛП у меня тоже есть ответ: Ди - это не ЛП. :)
Время «чистых теорий» прошло, на свет появились такие трупы как Си, ЛИСП, Фортран, Пролог, Рефал, но сейчас нужно уже как-то отрываться от ковыряния в носу и делать практические вещи - вот Ди и собирает в себе всё то, что _реально_ нужно.

Зачем прикручивали?


Затем, что _некоторые_ элементы ФП очень даже неплохо подходят для облегчения сложности кода. А в чём ваша претензия? Что бывший оккамловец/хацкелист не может писать на Ди? Ну... вот улицы ещё можно подметать...

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

> справедливости ради - over 90% по ссылке можно скорее назвать проектами для D, а не на D

Согласен. Но с другой стороны, для кого написана strcmp? Для Си? А библиотекой пользуется куча софта!
Многочисленность и разнообразие этих проектов показывает, что у Ди нет «особых применений» - это язык общего назначения.

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

> Никто еще ни разу не вспомнил, что у D аж две стандартных библиотеки: Phobos и Tango.
Что-то не получается загуглить Tango для D2. Можно ссылочку?

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

>Без всяких «но'.

Несимметричные кавычки в „но' опровергают твою академическую строгость :)

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

Перечитайте вот этот мой пост. Особенно внимательно читайте слова которые

Д подходит только для новых проектов

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

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

> Д подходит только для новых проектов

Эта фраза вообще странноватая. Давайте возьмём, например, Дельфи. Он подходит под проект на С#? Нет? Значит «Дельфи подходит только для новых проектов». Логично? :)

Ди подходит подо всё, не надо пудрить мозги. Хотите юзать С++ либы - это ВОЗМОЖНО. Пусть через враппер, но ПРИНЦИПИАЛЬНО возможность есть.
Если вы считаете это неприемлемым, могу только огорчить - для вас и вешей С++ библиотеки Ди не подходит. Остальные тысячи прогеров ну никак не огорчатся от вашей потери!

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

> Ди подходит подо всё, не надо пудрить мозги. Unlambda подходит подо всё. SKI-комбинаторов достаточно, чтобы написать программу любой сложности - это давно известный факт. Надеюсь не надо объяснять, сколько говна придется покушать, чтобы написать на нем что-то сложнее факториала? То-то же.

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

>> Ди подходит подо всё,

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

Пиши на Unlambda, кто тебе запрещает?

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

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

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

Вы всегда так внимательно читаете текст или только сегодня? Я вам дал ссылку на сжатую и уже переведенную информацию по поддержке Tango в dmd2, но вы, видимо, увидели только, что поддержка экспериментальная? А последний пост о том, что поддержка будет, когда D2 наконец-то стабилизируют, вы не заметили? Это вообще-то из официальной переписки разработчиков Tango информация. Ну и на даты сообщений посмотрите, что ли...

delete83 ★★
()

вопрос к тем, кто пишет на D - насколько тривиально использование сишных библиотек? просмотренные обертки к sqlite и cairo явно устарели, а «выхлоп» bcdgen для того же cairo.h надо править руками, т.к. сам D на него ругается:

extern (C) void _BCD_set__ZN18_cairo_path_data_t3$_44typeE(void *, int); 

cairo.d:62: semicolon expected to close declaration, not '$'

и т.д.

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

>Интересно, вот обычно сначала спецификацию разрабатывают, а потом по спецификации делают проект

O RLY?

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

вы, видимо, увидели только, что поддержка экспериментальная?

Увидел двухлетней давности тему на ЛОР, в которой аналогичный вопрос, аналогичный ответ и были ссылки на dsource.org/projects, какую-то IDE и сайт DigitalMars. ЧЯДНТ?
Вообще дровишки брал на FAQ на dsource.

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

> с++? ява?

Ты хочешь сказать, что сначала были написаны спецификации Си++ и Явы, а потом реализованы эти языки?

tailgunner ★★★★★
()

Мда. Прошелся по проектам на dsource.org...
Из тех, что смотрел, нашел один живой. Шикарная статистика.

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

>Вопрос: У меня есть so с классом, написан на с++. Как мне его использовать из Д?

Ответ: Никак.

Вопрос: У меня есть so с классом, написан на с++. Как мне его использовать из какого угодно другого языка, за исключением c++?

Ответ: Без танцев с бубном - никак, т.к. у плюсов не стандартизирован ABI.

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

в cairoD вообще используют такой код:

cast(pf_cairo_matrix_init_identity)getProc(lib, "cairo_matrix_init_identity");

т.е. судя по всему решили не бороться с bcdgen, а написать все руками, но как-то это невесело

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

> Ответ: Без танцев с бубном - никак, т.к. у плюсов не стандартизирован ABI.

да ладно С++ - мне интересно можно ли из D без лишних трат времени использовать библиотеки на С

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

> Можно юзать биндинги из GtkD.

он кстати gtk3 «умеет»?

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

> Вопрос: У меня есть so с классом, написан на с++. Как мне его использовать из какого угодно другого языка, за исключением c++?

Ответ: Без танцев с бубном - никак, т.к. у плюсов не стандартизирован ABI.

Никак, но не из-за отсуствия стандарта - стандарт как раз есть.

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

На «интерфейс» и «реализацию»? Похоже ты с 89 года так и не осилил основные парадигмы ООП.

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

Поддрержка платформ отличных от x86 это как раз конкретика на которую вам нечего возразить. А вот размеры винтельного рынка это уже материи в которые я не лезу поскольку меня интересует поддержка x86, Sparc и ARM. И что в результате, один проект писать под x86 на D а потом все переписывать на плюсы поскольку под другие платформы это чудо не собирает? Вопрос риторический конечно.

A-234 ★★★★★
()
Ответ на: комментарий от V_L_A_D

Для такого рода задач принято использовать механизмы ipc, предоставляемые системой. Тебе предоставляют интерфейс, а на чем написана релизация - личное дело разработчика.

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

> И что в результате, один проект писать под x86 на D а потом все переписывать на плюсы поскольку под другие платформы это чудо не собирает?

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

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

_реально_ нужно

Кстати, фортран реально нужен, что доказано его 50+ летним использованием в промыщленности. Чего нельзя сказать о новомодных поделках в стиле D и прочих питонов на яве.

Ниша системного программирования давно и плотно занята С, С++ и АДА.

И разработчика в первую очередь интересует, соберется ли нужный ему софт текущей реализацией gcc под арм или avr.

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

>только плохо, что он с с++ никак не совместим.

Это как раз хорошо

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

>А примеров поновее нет?

Ершол, он же «Школьный алгоритмический» ;P

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

> Обёртка к Sqlite 3.5.9 сильно устарела?

3.5.9 - нет, мне гугль выдал ссылки на 3.0 и 3.3, последнюю я также нашел в вики sqlite

aho
()

> часть свойств объявлены удалёнными

«Объявлены удалёнными» — это как?

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

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

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