LINUX.ORG.RU

Новая версия референсного компилятора языка D2

 ,


0

1

13 декабря вышла новая версия 2.057 dmd — референсного компилятора языка программирования D версии 2 от компании DigitalMars. Основные изменения (первоисточник):

  • Оптимизации работы на 64-разрядных архитектурах, в частности, улучшения алгоритма использования регистра XMM, добавление поддержки March-O для obj2asm и dumpobj, исправление нескольких ошибок оптимизации, характерных исключительно для 64-разрядных систем: 7026, 6997, 6354.
  • Произведена чистка дублирующего функционала — объявлены устаревшими целый ряд функций или их вариантов в модулях стандартной библиотеки:
    • убран идентификатор invariant, который дублировал функционал immutable;
    • из двух вариантов std.array.replace оставлен только тот, который создаёт новый массив, замена на месте теперь производится только с помощью std.array.replaceInPlace;
    • toISOExtendedString и fromISOExtendedString заменены на toISOExtString и fromISOExtString соответственно;
    • вместо std.file.getTimesPosix следует использовать универсальную функцию std.file.getTimes;
    • варианты функций isDir, isFile и isSymlink из std.file, принимавшие в качестве аргумента целое беззнаковое число, убраны в пользу attrIsDir, attrIsFile и attrIsSymlink (варианты с аргументом в виде строки оставлены).
    Как всегда, изменения пока носят не окончательный характер, при использовании старых форм выдаётся предупреждение, препятствующее компиляции, которое вы можете игнорировать. Полное удаление запланировано на май 2012 (см., например, replace)
  • Убрана декларация typedef, как следствие, перестанут работать некоторые механизмы, которые были завязаны на неё, например, некоторые варианты std.conv.to.
  • Произведён большой пересмотр реализации модуля std.regex.
  • Как всегда исправлены около сотни ошибок библиотеки и компилятора.

На сайте загрузки доступны пакеты для ubuntu (работает и на debian), fedora и opensuse для архитектур i386 и amd64, а также универсальный zip архив с бинарниками.

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

★★★★★

Проверено: anonymous_incognito ()
Последнее исправление: post-factum (всего исправлений: 1)

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

Идеология *NIX всегда была всегда была в переносимости. Не только между разными версиями компиляторов, но и между разными архитектурами!!!

В этом твоем звездочка три буквы даже командную строку за 40 лет так и не причесали - кто в лес кто по дрова; шелл с врожденным пробельно-кавычным заворотом кишок. Отменная идеология.

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

мда, уж лучше фрипаскаль, а то за этими изменениями не угонишься =)

Фрипаскаль хороший язык, но у него есть немало врождённых проблем. Например, я хочу скопировать часть массива в другой, в D я могу просто написать a2 = a1[$/2 .. $], при этом просто появится новый указатель, во фрипаскале придётся создавать новый массив с копированием элементов, что не есть хорошо.

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

при этом просто появится новый указатель, во фрипаскале придётся создавать новый массив с копированием элементов

Ну да. По хорошему тут нужно Copy-on-write.

Интересно, в каких-нибудь низкоуровневых языках такое есть?

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

> Например, я хочу скопировать часть массива в другой, в D я могу просто написать a2 = a1[$/2 .. $], при этом просто появится новый указатель, во фрипаскале придётся создавать новый массив с копированием элементов, что не есть хорошо.

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

type 
  Arr1=array[1..100] of real;
  Arr2=array[1..5] of real;

var
  a1:Arr1;
  a2:Arr2 absolute a1[10];

Просто присваивание указателей тоже никто не отменял. Вроде pointer((@a2)^):=@a2[10]; правда в таких хаках с указателями уже легко запутаться в том, что на чего указывает, я вот даже не уверен, что правильно написал :)

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

ко-ко-ко

Я не понимаю ваш диалект.

anonymous
()

А что теперь вместо typedef? alias?

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

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

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

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

А ведь этот typedef выставляли преимуществом языка. А оказалось что он и не нужен.

Не помню такого, а где можно посмотреть?

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

Просто присваивание указателей тоже никто не отменял.
Вроде pointer((@a2)^):=@a2[10]; правда в таких хаках с указателями уже
легко запутаться в том, что на чего указывает, я вот даже не уверен, что
правильно написал :)

Теоретически должно получится, но только не для динамических массивов - в них не всё так просто, там в начале ещё длина (вроде) хранится. Или что-то другое, не помню.

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

а есть какое-нить сравнение о производительности....

Угадаю с первой попытки: месье - юный фапатель на скорость, «крутость» и «элитарность», где ни одно из слов не относится к мэйнстриму.
Мой совет: уберите линейки от пениса и займитесь реальным делом. Как только у вас появятся задачи из реального мира, все писькомерки померкнут перед тем, что в десятизвенную архитектуру (реализованную не вами) надо будет вставить, к примеру, модуль workflow. Вот тут и вылезет, что языку куда важнее понимабельность, широта библиотек, гибкость и прочие непопулярные качества. хехе...

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

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

Ok.

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

Здесь reference - «эталонный», «образцовый» и т. п. «Референсный» по-русски будет «референсный».

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

Здесь reference - «эталонный», «образцовый» и т. п. «Референсный» по-русски будет «референсный».

Скорее эталонный.

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

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

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

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

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

Скорее эталонный.

Назови мне десять различий между значениями слов «эталонный» и «образцовый».

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

Ты слился жиденько, но предсказуемо.

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

Назови мне десять различий между значениями слов «эталонный» и «образцовый».

А почему именно 10, а не 8 или там 100500? Одного различия было бы достаточно.

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

Человеку скучно и хочется поболтать.

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

Ну да. По хорошему тут нужно Copy-on-write.

Интересно, в каких-нибудь низкоуровневых языках такое есть?

rvalue references в С++11?

anonymous
()

Не понял, как его собирать. Самому мейкфайлы для него писать? ~/dmd2$ find . -name Makefile* (nothing) ~/dmd2$ find . -iname *make* (nothing)

В README там только про libstdc++. Файла INSTALL нет. ~/dmd2$ find . -iname INSTALL* (nothing)

В дебиановских репах есть вот что, но походу это что-то другое, а не symantec mars digital D v2: $ apt-cache search dmd ldc - LLVM D Compiler

Бинарники в зипболл зачем-то засунули, и только для хэ86. Зачем-то изобретают реальные велосипеды при живых objdump и readelf: obj2asm Elf file disassembler dumpobj Elf file dumper

Ничего не понимаю.

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

Назови мне десять различий между значениями слов «эталонный» и «образцовый».

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

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

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

Самому мейкфайлы для него писать? ~/dmd2$ find . -name Makefile* (nothing) ~/dmd2$ find . -iname *make* (nothing)

Вот и выросло поколение «линукс-хомячков», ничего не мыслящих в системе без знакомых флажков. :) Просто качаешь zip с офсайта, там внутри каталог linux с бинарями. Как всё удивительно просто, да?

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

Как всё удивительно просто, да?

Нет, не просто. Эти бинарии просто-напросто для чужеродных мне архитектур же:

$ ./linux/bin32/dmd
bash: ./linux/bin32/dmd: cannot execute binary file
$ ./linux/bin64/dmd
bash: ./linux/bin64/dmd: cannot execute binary file
$ readelf -h ./linux/bin64/dmd | grep Machine
  Machine:                           Advanced Micro Devices X86-64
$ uname -m
ppc64

И исходники-то вроде бы есть, но как бы это собрать? Нет ну можно, конечно по одному файлику скармливать gcc/g++ и грепать потом, что ему нужно. Но это же бред, не так ли? Я тут представил, что так придётся бутстрапать GCC и чуть не сошёл с ума.

В общем, не труъ без мейкфайлов, не труъ. Исходники там чисто для формальности, похоже, чтобы не кричали те, у кого x86_16, x86_32 и прочие x86, брали и пользовались тем, что для них собрано. OfftopicOS-вей.

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

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

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

ну и есть ещё версия на LLVM, но с ppc там есть косяки, которые вроде не исправили до сих пор.

Ну и кстати по поводу формальностей и исходников - в обоих упомянутых продуктах (а gdc ещё плюс ко всему скорее всего включат через некоторое время в gcc) используются исходники фронтенда от dmd. То есть все-таки есть люди, которые не кричат и не заморачиваются формальностями, и при этом нашли полезное применение выложенным сорцам.

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

Хотя нет. Не всё так плохо. Есть мейкфайлы, но они только для ``win32":

$ find . -name win32.mak
./html/d/phobos/win32.mak
./src/druntime/win32.mak
./src/phobos/win32.mak
./src/phobos/etc/c/zlib/win32.mak
./src/dmd/win32.mak
$ head -2 src/dmd/win32.mak 
#_ win32.mak
# Copyright (C) 1999-2011 by Digital Mars, http://www.digitalmars.com

То есть при большом желании его можно было превратить в нормальный Makefile, понимаемый GNU Make'ом. Но кто это будет делать? Тем более, у них есть собранные бинарии для линукса, то есть у них есть (был???) какой-то мейкфайл и для не-``win32". Далее, майкфайл-то копирайтнутый. Не GPL-ный. Так что его просто-напросто нельзя ``превращать в нормальный Makefile".

Такие вот дела.

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

К сожалению, не собирается. Оно как-то извращённо патчит код GCC, что с рекомендуемым ими --disable-shared я получаю

configure: error: Link tests are not allowed after GCC_NO_EXECUTABLES

А без --disable-shared:

echo "/* GNU ld script"; echo "   Use the shared library, but some functions are only in"; echo "   the static library.  */"
/usr/bin/ld: cannot find crti.o: No such file or directory

Хех, давно уже не видел проблем с crti и crtn и с libgcc в частности ;)

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

Problem solved. Это пекэйджеры дебиана забыли софтлинкнуть:

$ ls -la /usr/lib/*crt*.o
lrwxrwxrwx 1 root root 24 Dec 21 10:43 /usr/lib/crt1.o -> powerpc-linux-gnu/crt1.o
lrwxrwxrwx 1 root root 24 Dec 21 10:39 /usr/lib/crti.o -> powerpc-linux-gnu/crti.o
lrwxrwxrwx 1 root root 24 Dec 21 10:43 /usr/lib/crtn.o -> powerpc-linux-gnu/crtn.o
lrwxrwxrwx 1 root root 25 Dec 21 10:44 /usr/lib/gcrt1.o -> powerpc-linux-gnu/gcrt1.o
lrwxrwxrwx 1 root root 25 Dec 21 10:44 /usr/lib/Mcrt1.o -> powerpc-linux-gnu/Mcrt1.o
lrwxrwxrwx 1 root root 25 Dec 21 10:44 /usr/lib/Scrt1.o -> powerpc-linux-gnu/Scrt1.o

Multilib такой multilib. И зачем?..

Хотя на этих ваших хэ86 64-битных lidc6-dev включает в себя нормально расположенные /usr/lib/*crt*.o. What the hell...

Они ещё и g++-4.6 забыли софтлинкнуть в g++, как результат:

/bin/bash: g++: command not found
make[3]: *** [d/id.gen.o] Error 127

Но таки решаемо. И собралося с D.

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

Работает, мягко говоря, «не очень». Сейчас общаюсь с разработчиками, с Iain Buclaw (a.k.a ibuclaw on freenode) и другими.

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

Я лучше буду работать с апстримом. Патчи в апстриме — патчи везде: хоть в дебиане, хоть в федоре, хоть в генте, хоть ещё где.

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

dmd которая? Ну естественно, что Symantec хочет венду и венду и венду и... венду. Поэтому там приоритет венды на 1-м месте. Типа всё для венды сначала, а потом уже — все остальные.

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

Интересуюсь компиляторами и языками программирования. Одержим идеей портируемости софта. Поэтому я выбрал GNU/Linux, работающий на ~30 архитектурах. Буду посильно помогать любому проекту, разработчики которого не считают, что "-m32" — это x86_32, а "-m64" — это x86_64 и больше платформ не существует.

Пишу я на C, C++, Java, Python, PHP, StarBASIC, а также балуюсь Scheme.

Текущие планы: написать на базе Guile интерактивный интерпретатор PowerPC assembly.

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

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

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