LINUX.ORG.RU

Очередная версия референсного компилятора языков D1/D2

 , digital mars,


0

2

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

Основные улучшения и изменения в языке D2 и его стандартной библиотеке:

  • Полностью реализована поддержка 64-битной архитектуры для Линукса, теперь представляются отдельные инсталляционные пакеты для 32-х и 64-хбитных архитектур (то же справедливо и для D1).
  • Модуль std.intrinsic перенесён в ядро и теперь называется core.intrinsic.
  • Добавлены средства для работы с сетью --- модули etc.c.curl для работы с libcurl и std.net.isemail.
  • Добавлены дополнительные средства для параллельного программирования --- модуль std.parallelism.
  • Модули std.algorithm и std.range дополнены новыми функциями, частично оптимизированы, для std.algorithm обновлено описание.
  • Убран модуль std.iterator, вместо которого предлагается использовать std.range.ElementType либо std.range.ElementEncodingType.

Устранено около сотни ошибок в том числе 14 ошибок стандартной библиотеки и 3 ошибки рантайма.

Кроме этого, следует отметить, что теперь для пользователей Fedora и SUSE собраны отдельные rpm пакеты для обеих поддерживаемых архитектур.

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

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

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

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

> К сожалению, всё это счастье работает только для D1

Блин, а мужики-то и не знают!
http://www.dprogramming.com/dfl.php - D2
http://www.dsource.org/projects/dwt - D2
:)

D2 уже вполне себе стабильна, не надо с этим париться. Это так же «стабильно» как любой опенсорс - до каких-то пределов это надёжно, но баги постоянно находятся и фиксятся.

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

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

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

Смысл итератора в таком случае вместо запуска функции в цикле --- отсутствие дублирования выполнения части кода. Кстати, меня гложет мысль, что это можно сделать на шаблонах.

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

> Понял, но в Питоне для этого нужно писать генераторы, как правило.

Необязательно. До 2.4 вот не было, жили же люди. А то, что генератор есть iterable — не смущает?

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

DFL и DWT уже поддерживают D2

Спасибо, попробую.

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

Range в D - паттерн объединяющий Iterator из плюсового STL и Iterator из книги GOF. Диапазоны выстроены в иерархию по операциям, которые можно с ними совершать.

anonymous
()

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

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

Вот-вот! Вы и повторили, что Ди не нужен. (в том виде, в каком он сейчас есть - третий Ди в презентациях очень хорош).
На Ди я писал, конечно, немного. Но где-то 10 KLOC будет. И _любое_ изменение в отлаженных модулях вызывает крайне негативные эмоции. То эти ребята модули переименуют, то функции выкинут, то синтаксис изменят (с операторными методами одно время просто кошмар творился).
А вы что написали на Ди?

bik ★★
()

Что-то как-то с оптимизацией грустно у dmd.

module aaa;
import std.stdio;

void main()
{
	double a = 0;
	double b = 3 / 180.0;
	foreach (i; 0..180)
		a += i * b;
	writeln(a);
}

Компиляю с -O -release:

__Dmain: ; Function begin
        sub     esp, 44  
        mov     dword [esp+4H], 0
        mov     dword [esp+8H], 0
        mov     dword [esp+0CH], 0
?_138:  fild    dword [esp+0CH]   
        fmul    qword [?_001]     
        inc     dword [esp+0CH]   
        cmp     dword [esp+0CH], 180
        fadd    qword [esp+4H]      
        fstp    qword [esp+4H]      
        jc      ?_138               
        push    dword [esp+8H]      
        push    dword [esp+8H]      
        call    _D3std5stdio14__T7writelnTdZ7writelnFdZv
        add     esp, 44                               
        xor     eax, eax                              
        ret                
; __Dmain End of function

Счетчик цикла на стеке - бида-бида

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

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

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

А вы, кстати, не задавались вопросом - почему это в Д вечно условный синус в условном модуле нетворк оказывается? :) Чем брайт с александреску раньше думали? Ди второй версии уже не один год

bik ★★
()

я уже 11 лет как говорю не нужно.

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

Это он иронизирует в общетеоретическом плане. Настроение плохое, вот нужно что-то обосрать, а тут Д попался.

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

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

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

С 2007-го года много воды утекло. Прежде чем набросы устраивать, почитал бы новостные группы или TDPL что-ли.

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

В то-то и дело, что из заявленных фич за __4__ года практически ничего не сделали. Всё ваги вылавливают. Александреску, похоже, типичный научный сотрудник - работать не умеет вовсе (хоть и книги хорошие пишет). А Брайт, похоже, просто стар стал.

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

> Счетчик цикла на стеке - бида-бида

кхм... и *этот-то* бэкенд они не хотят раздавать под свободной лицензией? было бы что зажимать...

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

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

А зажимать могут потому, что часть кода принадлежит кому-то ещё и её так просто не откроешь, например (это как одна из возможных причин, может и не правда).

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

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

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

Всё, что там написано, относится только к STL Iterators. В Pyдругих упомянутых в связи с итераторами языках таких проблем нема.

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

В то-то и дело, что из заявленных фич за __4__ года практически ничего не сделали. Всё ваги вылавливают. Александреску, похоже, типичный научный сотрудник - работать не умеет вовсе (хоть и книги хорошие пишет). А Брайт, похоже, просто стар стал.

Не ясно, какие свойства вам нужны. За эти годы был проделан огромный объём работы, достаточно почитать официальные changelog'и. И новые модули в стандартную библиотеку портированы, и старые улучшены, сделано множество изменений в компиляторе, рантайме и проч. Существенно изменён язык.

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

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

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

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

ЧТО они довели до ума?? Надо было еще года 2 назад заморозить 2ую ветку и править баги. А так - добавили библиотеки, добавили кучу багов, исправили эти баги. Вы-то эти логи читали?
Ди - личный проект Брайта и Александреску. И этом состоянии бесполезен. Не комьюнити-драйвен, не коммерчески. Так, игрушка.

bik ★★
()

В Gentoo d-overlay заброшен и не обновлялся около года. Копируем dev-lang/dmd-1.061.ebuild и dmd-2.046.ebuild в dmd-1.068.ebuild и dmd-2.053.ebuild в локальном репозитории, переподписываем. То же самое делаем с dev-libs/phobos. Собираем. В итоге: dmd 1.068, 2.053 собираются, dev-libs/phobos не собирается. Для D2 ругается на errno в zlib: надо подпилить phobos-2.053 чтобы добавить #include <errno.h> в тот файл, на котором вылазит ошибка, после этого фобос 2.053 собирается нормально тем же ебилдом. Для D1 вылазят ошибки сборки. Лог вида:


>>> Starting src_compile
chmod: cannot access `/var/tmp/portage/paludis/dev-libs-phobos-1.068/work/dmd/linux/bin/dmd': No such file or directory
gcc -c -O -m32 internal/complex.c
dmd -c -O -release -w -m32 gcstats.d
gcc -c -O -m32 internal/critical.c
dmd -c -O -release -w -m32 internal/object.d
gcc -c -O -m32 internal/monitor.c
dmd -c -O -release -w -m32 std/c/linux/linux.d
dmd -c -O -release -w -m32 std/c/linux/socket.d -oflinuxsocket.o
dmd -c -O -release -w -m32 std/c/posix/posix.d
dmd -c -O -release -w -m32 std/c/posix/socket.d -ofposixsocket.o
dmd -c -O -release -w -m32 std/c/posix/pthread.d -ofposixpthread.o
dmd -c -O -release -w -m32 crc32.d -ofDcrc32.o
gcc -c -O -m32 errno.c
dmd -c -O -release -w -m32 std/c/stdarg.d -ofstd_c_stdarg.o
dmd -c -O -release -w -m32 etc/c/zlib.d -ofCzlib.o
dmd -c -O -release -w -m32 std/c/linux/pthread.d
make DMD=dmd MODEL=32 -C ./internal/gc -f linux.mak
make[1]: Entering directory `/var/tmp/portage/paludis/dev-libs-phobos-1.068/work/dmd/src/phobos/internal/gc'
dmd -c -release -O -inline -m32 -I../.. gc.d
../../std/c/stdio.d(195): Error: undefined identifier va_list
../../std/c/stdio.d(451): Error: undefined identifier va_list
../../std/c/stdio.d(452): Error: undefined identifier va_list
../../std/c/stdio.d(454): Error: undefined identifier va_list
../../std/c/stdio.d(504): Error: undefined identifier va_list
../../std/c/stdio.d(505): Error: undefined identifier va_list
../../std/c/stdio.d(507): Error: undefined identifier va_list
../../std/c/stdio.d(509): Error: undefined identifier va_list
make[1]: Leaving directory `/var/tmp/portage/paludis/dev-libs-phobos-1.068/work/dmd/src/phobos/internal/gc'
../../std/thread.d(643): Error: undefined identifier Error, did you mean function ferror?
../../std/thread.d(643): Error: class std.thread.ThreadError base type must be class or interface, not _error_
../../std/thread.d(645): Error: undefined identifier string
../../std/thread.d(1015): Error: undefined identifier string
make[1]: *** [gc.o] Error 1
[...]

Лечится расстановкой симлинков /var/tmp/portage/paludis/dev-libs-phobos-1.068/work/dmd/linux/{bin,lib} на нужный /var/tmp/portage/paludis/dev-libs-phobos-1.068/work/dmd/linux/{bin,lib}{32,64}

и правкой с переподписанием ебилда.

Вообще это gcc -m32 в ебилде смущает, надо бы выкинуть — dmd уже должен нормально собираться на 64 битах.

=dev-libs/tango-9999 вроде бы нормально собирается.

Ну или, как вариант, собирать руками и делать cave import.

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

Насколько понял, для того чтобы заморозить 2-ую ветку не хватает Shared libraries for Linux.

Ди - личный проект Брайта и Александреску. И этом состоянии бесполезен. Не комьюнити-драйвен, не коммерчески. Так, игрушка.

Согласен, но есть gdc и ldc

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

ЧТО они довели до ума?? Надо было еще года 2 назад заморозить 2ую ветку и править баги. А так - добавили библиотеки, добавили кучу багов, исправили эти баги. Вы-то эти логи читали?

Я --- читал. Начиная с 2.038, в более ранние не заглядывал.

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

Вообще, открою вам тайну, так развиваются все большие проекты: пишут базовый функционал, правят ошибки, потом добавляют функционал, снова правят ошибки и т.д.

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

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


p.s. я следил с 22, кажется версии и где-то на 37й устал править программы после каждого релиза (т.е. каждый 2 недели). Скоро и вам надоест следить за очередным поворотом сюжета в развитии Ди :)

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

а нет, первая версия которой пользовался, была 15й (2й ветки, понятно) :)

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