| |
Вышла версия 2.066 кроссплатформенного компилятора языка программирования D: Digital Mars D (DMD). Язык D использует статическую типизацию, обладает синтаксисом, схожим с C/C++, и обеспечивает производительность компилируемых языков, при этом заимствуя некоторые полезные возможности динамических языков в области эффективности разработки и обеспечения безопасности. Например, предоставляется поддержка ассоциативных массивов, косвенное определение типов, автоматическое управление памятью, средства параллельного программирования и т.п.
Краткий список изменений:
- Изменения в компиляторе DMD и языке:
- Опция "-w" теперь выводит предупреждение про неиспользованное значение, возвращаемое pure-функцией. Так как pure-функции не могут иметь побочных эффектов, то подобный код, скорее всего, возник из-за невнимательности.
- Опция "-noboundscheck" объявлена устаревшей и заменена на опцию "-boundscheck={on|safeonly|off}". Это позволяет гибко управлять проверками на выход из диапазона массивов в режиме -release (раньше включить проверку на выход из диапазона для relese-режима было невозможно).
- Добавлена опция "-vgc", которая выводит места, где программа неявно выделяет память (это могут быть изменения размеров динамических массивов, объединения строк и т.п.). Опция использует новый атрибут "@nogc" для анализа.
- Добавлена опция "-vcolumns", которая в диагностических сообщениях включает вывод не только номера строки, но и позиции в строке.
- Добавлена опция "-color", которая расцвечивает диагностические сообщения об ошибках и предупреждения.
- Добавлена языковая конструкция extern (C++, namespace), позволяющая использовать прямые вызовы функций C++ из пространств имён.
- Добавлена возможность перегружать оператор многомерного слайсинга (multi-dimensional slicing).
- Добавлен новый трэйт: __traits(getFunctionAttributes). Он позволяет получить атрибуты функции, такие, как "pure", "nothrow", "@safe" и пр.
- Улучшен механизм автоматического определения типов в шаблонах. Шаблон вида "void foo(T)(T[] arr, T elem)" теперь может быть вызван как "foo(a, 1)", если a определено как "short[] a". Раньше было необходимо явно приводить 1 к типу short.
- Операции Read-Modify-Write на разделяемых (shared) переменных объявлены устаревшими. Вместо "foo += 2" теперь следует использовать "atomicOp!"+="(foo, 2)".
- Добавлена поддержка конструкторов для встроенных типов: "auto foo = long(1)".
- Изменения в стандартной библиотеке
- В модуле core,time операция Duration.get объявлена устаревшей и заменена на универсальный шаблон Duration.split, позволяющий более гибко управлять получением нужных частей временного промежутка. Duration.get всегда вычисляла все части (недели, дни, часы, минуты, секунды и т.д.), но возвращала только запрошенные; Duration.split вычисляет только то, что запросил пользователь. Вдобавок Duration.split может возвращать значения как в out-переменных, так и структуру с запрошенными полями.
- Некоторые свойства встроенных типов заменены на библиотечные функции. Благодаря универсальному синтаксису вызова функций программисту не надо исправлять код. Такая замена позволяет более гибко управлять деталями реализации встроенных типов - динамических массивов и ассоциативных массивов.
- Типы-ключи ассоциативных массивов теперь нуждаются в операции opEqu (сравнение на идентичность), а не в операции opCmp (сравнение "больше-меньше-равно").
|
|
- Главная ссылка к новости (http://forum.dlang.org/thread/lstig7$utn...)
- OpenNews: В GDC, компилятор для языка D, добавлена поддержка архитектуры ARM
- OpenNews: Вышли DCD 0.3.0 и DScanner 0.1.0, инструменты для разработчиков на языке D
- OpenNews: Компания Google расширила действие инициативы по повышению безопасности свободного ПО
- OpenNews: Для текстовых редакторов KDE и IDE KDevelop представлена поддержка языка D
- OpenNews: Вышла новая версия dmd 2.063, компилятора для языка D
| Автор новости: anonymous | Тип: Программы | Ключевые слова: dlang, (найти похожие документы) | При перепечатке указание ссылки на opennet.ru обязательно | Реклама |
id=adv>
| |
1.2, Resonance, 10:26, 19/08/2014 [ответить] [смотреть все] | +1 +/– |
Единственный шанс сделать язык нужным - портировать на Android/iOS. Нативить на плюсах не в кайф.
| | |
|
3.4, Resonance, 10:50, 19/08/2014 [^] [ответить] [смотреть все] | +6 +/– |
> У D практически не осталось явных преимуществ перед C++. Сегодня C++14 вышел,
> ещё дальше толкнул развитие языка.
Ну вот тут не соглашусь, пакетная организация кода чего только стоит в D, а так же не нужно разделять на .cpp и .h исходники. Да и вообще С++ слишком переусложнен. Вот пример кода с хабра:
int& (*fpi)(int*) = [](auto* a) -> auto& { return *a; }; // OK
Все понятно?
| | | 4.7, Сука, 11:34, 19/08/2014 [ ^] [ ответить] [ смотреть все] +1 +/– 4.8, RazrFalcon, 11:36, 19/08/2014 [ ^] [ ответить] [ смотреть все] +1 +/–
4.9, Пиони, 11:44, 19/08/2014 [ ^] [ ответить] [ смотреть все] +1 +/–Это непонятно только тем, кто на C никогда толком и не писал ... весь текст скрыт [ показать] 4.10, Наноним, 11:49, 19/08/2014 [ ^] [ ответить] [ смотреть все] +/–Кто ни будь, разтолкуйте, интересно стало ... весь текст скрыт [ показать] 5.13, Аноним, 12:12, 19/08/2014 [ ^] [ ответить] [ смотреть все] –2 +/–указатель на функцию принимающую указатель на int и возвращающую ссылку на int к... весь текст скрыт [ показать] 6.16, Пиони, 12:25, 19/08/2014 [ ^] [ ответить] [ смотреть все] +4 +/–Привет чудакам, которые любят писать везде тип, а потом много рефакторить, от чу... весь текст скрыт [ показать] 6.21, arisu, 12:38, 19/08/2014 [ ^] [ ответить] [ смотреть все] +1 +/–google dlang voldemort types вперёд сделать это без auto ... весь текст скрыт [ показать] 4.28, ями, 14:12, 19/08/2014 [ ^] [ ответить] [ смотреть все] +/–Господи, шо это ... весь текст скрыт [ показать] 4.48, Аноним, 21:14, 19/08/2014 [ ^] [ ответить] [ смотреть все] +/–это не C , а C На C будет как-то так std function int int fpi ... весь текст скрыт [ показать] 4.57, Аноним, 00:45, 20/08/2014 [ ^] [ ответить] [ смотреть все] [ к модератору] +/–Плохой пример Откройте книжку Шаблоны С - именно они причина, почему Александ... весь текст скрыт [ показать] |
5.70, arisu, 05:15, 20/08/2014 [^] [ответить] [смотреть все] [к модератору] | +/– |
но всё это перекрывается тем, что на C++ уже написано огромное количество кода, и переписать его на другом языке часто попросту нереально по трудозатратам. а вот постепенно чистить и улучшать, используя новые фичи C++ — вполне возможно.
| | | 3.18, chinarulezzz, 12:34, 19/08/2014 [ ^] [ ответить] [ смотреть все] +1 +/–c пухнет, а не развивается ... весь текст скрыт [ показать] 3.20, arisu, 12:37, 19/08/2014 [ ^] [ ответить] [ смотреть все] +5 +/–ага кроме отсутствия идиотского legacy и нормальной системы шаблонов, а не того... весь текст скрыт [ показать] |
5.61, arisu, 04:27, 20/08/2014 [^] [ответить] [смотреть все] [к модератору] | +/– |
> Теперь инфернальные ужасы C++ и легаси есть и в D - ведь
> можно подцеплять С++ код :).
не весь, шаблоны нельзя пока. Уолтер по этому поводу думает, но дело непростое.
| | | 3.45, Yaisis, 18:47, 19/08/2014 [ ^] [ ответить] [ смотреть все] +/–Сколько бы С не развивали, основной его синтаксис уже вряд ли изменится Обрас... весь текст скрыт [ показать] 3.49, Kodir, 21:27, 19/08/2014 [ ^] [ ответить] [ смотреть все] +/–
Жирный плюсовый троль, ты хоть Ди в глаза-то видел??
2.19, arisu, 12:36, 19/08/2014 [ ^] [ ответить] [ смотреть все] [ показать ветку] +4 +/–
1.11, yet another anonymous, 12:05, 19/08/2014 [ ответить] [ смотреть все] +/–
Позиционирование D какое-то мутное.
Если C --- достаточно низкоуровневый язык, C++ --- мультипарадигменный, позволяющий выбирать уровень абстракции/модель в зависимости от задачи, то D --- "ещё один язык с C-подобным синтаксисом".
2.22, arisu, 12:39, 19/08/2014 [ ^] [ ответить] [ смотреть все] [ показать ветку] –2 +/–ценное экспертное мнение от знатока ди, чо хоть 171 приветмир 187 -то сделал... весь текст скрыт [ показать] [ показать ветку] 2.24, Mihail Zenkov, 13:40, 19/08/2014 [ ^] [ ответить] [ смотреть все] [ показать ветку] +1 +/– |
4.46, anonymous, 19:14, 19/08/2014 [^] [ответить] [смотреть все] | +/– |
>> Скорее аналог C++ с более адекватным синтаксисом.
> а потом туда пришёл Александреску и добавил:
> «and templates done right».
Я не пойму, ты сейчас серьёзно пишешь или иронизируешь?
| | |
|
5.63, arisu, 04:35, 20/08/2014 [^] [ответить] [смотреть все] [к модератору] | +/– |
> Я не пойму, ты сейчас серьёзно пишешь или иронизируешь?
совершенно серьёзно. и, в общем-то, по фактам: оно примерно так и было. одна из мегафич D — действительно удобные шаблоны, которые не выглядят белибердой, которые удобно использовать, которые можно не только писать, но и читать без труда. также Александреску ответственен за довольно большую часть std.algorithm (и не только).
а начиналось у него всё с того, что: «я попробую, вдруг интересное что?» мне сейчас лень статью об этом искать, но по-моему, она где-то в доббсе была.
| | |
1.17, Anonym0uz, 12:31, 19/08/2014 [ ответить] [ смотреть все] +/–
К сожалению самолёт получился слишком тяжёлым. А так хорошо всё начиналось…
1.26, анон, 13:56, 19/08/2014 [ ответить] [ смотреть все] +/–
в этом вашем цпп есть аналог mixin-ов?
|
|
6.64, arisu, 04:39, 20/08/2014 [^] [ответить] [смотреть все] [к модератору] | +/– |
>> дык на то Александреску в ди и пришёл: нормальные шаблоны сделать. и ему таки удалось.
> А что, Александреску правда в D ушел?
не то, чтобы «ушёл с концами»: C++ он не бросил, пишет статьи, выступает на конференциях. но в то же время он весьма активный разработчик на D, написал практически весь костяк std.algorithm (это такой дальний родственник алгоритмов из STL, только использует ranges) и ещё много всякой шаблонной магии в D.
книгу, опять же, написал: «The D Programming Language» (TDPL). как и полагается — отличная книга. её даже перевели на русский, и не так уж плохо, скорее даже хорошо.
| | |
|
7.72, anonymous, 10:09, 20/08/2014 [^] [ответить] [смотреть все] [к модератору] | +/– |
> не то, чтобы «ушёл с концами»: C++ он не бросил, пишет статьи, выступает на конференциях.
Хорошо, что ушел. Плохо, что не бросил C++.
"Не читайте Александреску." (C) А. Степанов.
| | | 3.33, Crazy Alex, 14:40, 19/08/2014 [ ^] [ ответить] [ смотреть все] +1 +/–Ну, constexpr уже весьма близок к ctfe А вот более гибкая объектная система за ... весь текст скрыт [ показать] |
6.65, arisu, 04:44, 20/08/2014 [^] [ответить] [смотреть все] [к модератору] | +/– |
> А за что так?
как минимум потому, что alias this допускается только одно. то есть, никакая это не альтернатива, а именно чемодан без ручки.
если уж так надо — есть интерфейсы, их можно присобачивать к классу много. а лучше вообще писать на шаблонах, которые тупо проверяют наличие нужных методов, и тогда совершенно пофиг на типы и наследования: нужные методы есть? ок, поехали. ranges, например.
единственное, что даёт alias this и чего нельзя добиться иначе (и то не всегда, есть нюансы) — неявное преобразование типов. то есть, когда класс A можно использовать как класс B, хоть они и не особо родственники. я, впрочем, считаю, что это лишняя фича, только затрудняющая понимание кода.
| | |
|
7.83, Crazy Alex, 14:39, 20/08/2014 [^] [ответить] [смотреть все] [к модератору] | +/– |
То, что alias this единственный - насколько я помню, бага, которая есть в багзилле.
А интерфейсы (хоть формальные, хоть проверки через is и тому подобное) - это хорошо, но тогда надо для всего подряд ляпать прокси, если у тебя данный интерфейс реализуется отдельным готовым объектом, от которого ты не хочешь наследоваться. Как примитивный пример - допустим, есть объект и ты хочешь иметь возможность его лочить снаружи. Одно дело - когда ты создал внутри мьютекс, написал alias myMutex this и всё. Другое - когда тебе lock|unlock надо явным образом пробрасывать. Шаблонам оно ортогонально.
| | |
|
8.84, arisu, 14:46, 20/08/2014 [^] [ответить] [смотреть все] [к модератору] | +/– |
> То, что alias this единственный - насколько я помню, бага, которая есть
> в багзилле.
и давно. и всем пофигу.
алсо, template mixins. на кой тебе этот alias? спокойно делаешь mixin template и миксинишь его в класс/структуру. с методами lock и unlock. потому что высовывать детали реализации (mutex) наружу — моветон. а для универсальной лочки — опять же шаблон, который проверит наличие нужного метода.
хватит уже крестами мыслить, D — не кресты.
| | | 2.47, Аноним, 20:18, 19/08/2014 [ ^] [ ответить] [ смотреть все] [ показать ветку] +/–Не знаю, как в цпп, а в этом нашем С есть примитивный аналог, хоть и не часть ст... весь текст скрыт [ показать] [ показать ветку] |
3.50, Kodir, 21:33, 19/08/2014 [^] [ответить] [смотреть все] | +1 +/– |
> Не знаю, как в цпп, а в этом нашем С есть примитивный аналог
С таким успехом и ассемблер - примитивный аналог Си. :)
Разработчикам не нужны "аналоги", "копии", "обходные пути" - им нужен ПРЯМОЙ инструмент для выражения своих мыслей. Ну и надёжный, конечно - что Ди и сделал как замена таймбомбовому Цэ-пи-пи.
Линуксу давно уже нужен нормальный язык, позволяющий хотя бы в 21 веке забыть кошмарный сон "buffer overflow" (а количество этих потенциальных уязвимостей растёт десятикратно с каждой новой перделкой/библиотекой, потому что пишется всё головотяпами-энтузиастами).
| | |
|
4.52, rob pike, 23:15, 19/08/2014 [^] [ответить] [смотреть все] [к модератору] | +/– |
> Разработчикам не нужны "аналоги", "копии", "обходные пути" - им нужен ПРЯМОЙ инструмент для выражения своих мыслей
Такого человечество не придумало.
Включая язык, секретаршу и энцефалографию.
| | | 4.55, angra, 23:41, 19/08/2014 [ ^] [ ответить] [ смотреть все] [ к модератору] +2 +/–
> Линуксу давно уже нужен нормальный язык, позволяющий хотя бы в 21 веке
> забыть кошмарный сон "buffer overflow" (а количество этих потенциальных уязвимостей растёт
> десятикратно с каждой новой перделкой/библиотекой, потому что пишется всё головотяпами-энтузиастами).
Вот в php нет buffer overflow. Как там с безопасностью рассказать или сам знаешь?
3.53, rob pike, 23:16, 19/08/2014 [ ^] [ ответить] [ смотреть все] [ к модератору] +2 +/–
Ну да. А еще эксепшны есть. В setjmp.h
3.66, arisu, 04:53, 20/08/2014 [ ^] [ ответить] [ смотреть все] [ к модератору] +2 +/–
это, мягко говоря, соооовсем не то. mixin'ы в D — это геренация кода во время компиляции. проще говоря: mixin('int a=42;') во время компиляции будет заменено на «int a=42;».
с первого взгляда эта фича кажется бессмысленной, но если узнать, что в ди во время компиляции можно исполнять код на ди (ограничение — нет глобальных переменных; но на функциональщине можно много всего сделать; например, функция toHash(), вычисляющая SuperFastHash, работает как во время компиляции, так и во время исполнения), то mixin'ы сразу становятся намного более интересными. потому что строки для них можно генерировать довольно сложным ди-кодом.
например, парзить дишным кодом во время компиляции некие файлы с диска и на их основе генерировать дишный код (привет, шаблоны страниц в vide.d).
|
4.67, arisu, 04:59, 20/08/2014 [^] [ответить] [смотреть все] [к модератору] | +/– |
p.s. например, библиотека std.regex активно пользуется этой фичей для того, чтобы превратить регулярку в обычный ди-код. при этом ей хватает мозгов использовать автоматы, когда регулярка без бэктрэйсинга и делать другие разные гитики.
конечно, буст тоже нечто подобное умеет на шаблонной магии, но попробуйте почитать код буста для этого, а потом — код std.regex.
| | | 3.69, arisu, 05:12, 20/08/2014 [ ^] [ ответить] [ смотреть все] [ к модератору] +/–
кстати, спасибо. как-то я пропустил чудесный ключ «-fplan9-extensions».
1.73, Бутират, 10:21, 20/08/2014 [ ответить] [ смотреть все] [ к модератору] +/–
Если язык такой бодрый. Почему он не пришел на замену c++? Не думаю что дело исключительно в традициях. PHP же смогли свергнуть. Причем за более короткое время чем существует C++
|
3.75, Бутират, 10:44, 20/08/2014 [^] [ответить] [смотреть все] [к модератору] | +/– |
Видимо чтобы меня поняли, придется изъясняться в школьных традициях вашего сообщества.
Этот ваш Дэ задумывался как c++ done right, но в итоге смачно лососнул у c++. О чем говорит текущая его популярность, а вернее его отсутствие. Видать не совсем уж и done right
| | | 2.80, Аноним, 11:20, 20/08/2014 [ ^] [ ответить] [ смотреть все] [ показать ветку] [ к модератору] +/–Язык не так давно немного устаканился Была революционная 1-я версия, теперь 2-... весь текст скрыт [ показать] [ показать ветку] 2.82, Аноним, 14:12, 20/08/2014 [ ^] [ ответить] [ смотреть все] [ показать ветку] [ к модератору] +/–
1.85, Аноним, 15:26, 20/08/2014 [ ответить] [ смотреть все] [ к модератору] +/–и как же они умудрились запилить эту фичу при полном отсутствии ABI и linking on... весь текст скрыт [ показать]
|
2.86, arisu, 15:34, 20/08/2014 [^] [ответить] [смотреть все] [показать ветку] [к модератору] | +/– |
> и как же они умудрились запилить эту фичу при полном отсутствии ABI
> и linking onvention на плюсовые ф-ии и методы?
для винды: -m64 поддерживает m$vc. -m32 поддерживает dmc. -m32mscoff поддерживает m$vc.
для пигвинуса: gcc 4.
точно так же, как и просто extern (C++).
| | |
Ваш комментарий
Read more |