The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

02.09.2017 13:47  Вышел компилятор языка D 2.076

Команда разработчиков языка D представила новую версию компилятора 2.076. Язык D использует статическую типизацию, обладает синтаксисом, схожим с C/C++, и обеспечивает производительность компилируемых языков, при этом заимствуя некоторые полезные возможности динамических языков в области эффективности разработки и обеспечения безопасности. Например, предоставляется поддержка ассоциативных массивов, косвенное определение типов, автоматическое управление памятью, средства параллельного программирования, опциональный сборщик мусора, система шаблонов, компоненты для метапрограммирования, возможность использовать библиотеки на языке C, а также некоторые библиотеки на C++ и Objective-C. Компилятор DDMD поддерживает системы GNU/Linux, Windows, OS X, FreeBSD, и архитектуры x86, x86_64, x64.

Главным нововведением является режим "-betterC", который позволяет разрабатывать на D полностью совместимые с Си библиотеки, при этом ликвидируя огромное количество проблем чистого Си. Краткий список особенностей данного режима:

  • Отсутствие препроцессора
  • Более высокая скорость компиляции
  • Полноценная модульность. Поддержка различных видов импорта (статический импорт, частичный импорт, ренейминг при импорте и тд)
  • В момент компиляции возможна: генерация кода, интроспекция, проверка различных условий.
    • Ветвление на этапе компиляции через "static if" и "static foreach"
    • возможны работа блоков вида version(linux) { ... }
    • возможность написания циклов вида: "foreach(i; 1 .. 11) { ...}"
  • Шаблоны
  • Аналог borrow checking из Rust через "scope pointers (scope T*)", "scope slices (scope T[])" и "scope references (scope ref T)"
  • Поддержка модификаторов доступа "const" и "immutable"
  • TLS по умолчанию
  • Поддержка контрактного программирования
  • Удобные массивы с поддержкой слайсинга
  • Ускорение работы с массивами за счет SIMD
  • Удобные unit-тесты
  • Встроенная система профилирования
  • User-defined атрибуты
  • Встроенный и очень удобный генератор документации
  • Привычный каждому программисту Си синтаксис
  • Поддержка Unicode
  • Лучшие чем у C средства безопасного доступа памяти (memory safety)
  • Замыкания
  • RAII

Код на Си:



   /* Eratosthenes Sieve prime number calculation. */

   #define true    1
   #define false   0
   #define size    8190
   #define sizepl  8191

   char flags[sizepl];

   int main() {
    int i, prime, k, count, iter;

    printf ("10 iterations\n");
    for (iter = 1; iter ‹= 10; iter++) {
        count = 0;
        for (i = 0; i {= size; i++)
            flags[i] = true;
        for (i = 0; i {= size; i++) {
            if (flags[i]) {
                prime = i + i + 3;
                k = i + prime;
                while (k ‹= size) {
                    flags[k] = false;
                    k += prime;
                }
                count += 1;
            }
        }
    }
    printf ("\n%d primes", count);
    return 0;
   }

Код в режиме betterC:



   import core.stdc.stdio;

   extern (C):

   __gshared bool[8191] flags;

   int main() {
       int count;

       printf("10 iterations\n");
       foreach (iter; 1 .. 11) {
           count = 0;
           flags[] = true;
           foreach (i; 0 .. flags.length) {
               if (flags[i]) {
                   const prime = i + i + 3;
                   auto k = i + prime;
                   while (k ‹ flags.length) {
                       flags[k] = false;
                       k += prime;
                   }
                   count += 1;
               }
           }
       }
       printf("%d primes\n", count);
       return 0;
   }

Для включения данного режима в dub.sdl необходимо добавить строку:


   dflags "-betterC"

Для dub.json строка будет:


   "dflags" : ["betterC"],

Предыдущая версия получила также возможность работы компилятора как библиотеки, что сделало возможным развитие средств качественного автодополнения. Частично данные возможности уже используются плагином для Visual Studio.

Кроме этого следует отметить выпуск компилятора LDC 1.4.0-beta1 в котором появилась полная поддержка разработки под Android и режим кросскомпиляции. Для тех кто только начинает изучать программирование доступна альфа версия русской книги по программированию на D на русском языке.

  1. Главная ссылка к новости (http://forum.dlang.org/thread/...)
  2. OpenNews: В состав GCC одобрено включение языка программирования D
  3. OpenNews: Официальный компилятор языка D переведён в разряд свободного ПО
  4. OpenNews: Релиз компилятора D версии 2.068.0
  5. OpenNews: В рамках проекта PowerNex развивается ядро, написанное на языке D
  6. OpenNews: В GDC, компилятор для языка D, добавлена поддержка архитектуры ARM
Автор новости: Xroft
Тип: Программы
Ключевые слова: dlang
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Линейный вид | Ajax | Показать все | RSS
 
  • 1.1, Аноним, 20:09, 02/09/2017 [ответить] [смотреть все]
  • –1 +/
    Интересно, они какую траву употребляют ... весь текст скрыт [показать]
     
     
  • 2.8, Аноним, 20:45, 02/09/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +8 +/
    >> Главным нововведением является режим "-betterC"...:
    >> Отсутствие препроцессора
    > Интересно, они какую траву употребляют?!

    А что не так? В "улучшенной Сишечке" этот костыль по-любому лишний.

     
     
  • 3.25, Аноним, 02:22, 03/09/2017 [^] [ответить] [смотреть все]  
  • +/
    Правда?
     
  • 3.27, Аноним, 02:28, 03/09/2017 [^] [ответить] [смотреть все]  
  • –1 +/
    Ну не нравится - не используй - никто же не заставляет Но зачем же выкидывать с... весь текст скрыт [показать]
     
     
  • 4.31, Аноним, 04:11, 03/09/2017 [^] [ответить] [смотреть все]  
  • +9 +/
    >> А что не так? В "улучшенной Сишечке" этот костыль по-любому лишний.
    > Ну не нравится - не используй - никто же не заставляет!

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

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

    Все это так называемое защищательство Священной Коровы выглядит как "слаще морковки ничего не едали".

    Чего только стоит "include", по сути вставляющий кусок текста целиком (привет инклудгвардам, привет выводам об ошибках в стопицотой строке, привет отсутствующему пространству имен и частичного импорта). Также привет "грязным" макросам с их кучей нюансов.
    Все это наследие инструмента, который по задумке отрабатывает еще до компилятора.
    Кстати, костыль этот прикрутили к си отдельно и чуть позже, о чем можно почитать
    http://sites.harvard.edu/~lib113/reference/c/c_history.html (Dennis M. Ritchie)
    И если для того времени решение было еще приемлимым компромиссом, то в современных реалиях оно смотрится блекло. Кстати, никто не предлагал выкинуть, просто сделать нормально.

     
     
  • 5.32, Аноним, 07:56, 03/09/2017 [^] [ответить] [смотреть все]  
  • –8 +/
    Для тебя #include и #define одно и тоже?
     
     
  • 6.38, Аноним, 15:06, 03/09/2017 [^] [ответить] [смотреть все]  
  • +3 +/
    С чего это вдруг я так считаю Может, просто ты не в курсе, что именно делает п... весь текст скрыт [показать]
     
  • 5.60, dq0s4y71, 18:28, 04/09/2017 [^] [ответить] [смотреть все]  
  • +/
    Это, конечно, всё правильно, но есть ли в этом вашем Д адекватные средства метап... весь текст скрыт [показать]
     
     
  • 6.67, Аноним, 21:42, 04/09/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    Эм, причем тут замена или выкидывание макросов Речь в контексте ветки в перву... весь текст скрыт [показать]
     
  • 6.68, Аноним, 00:32, 05/09/2017 [^] [ответить] [смотреть все]  
  • +/
    https dlang org mixin html Первый пример CODE For example, here we can crea... весь текст скрыт [показать]
     
  • 4.34, Crazy Alex, 12:25, 03/09/2017 [^] [ответить] [смотреть все]  
  • +3 +/
    Потому что в D есть инструменты получше - модули и макросы - которые дают все во... весь текст скрыт [показать]
     
  • 1.2, Аноним, 20:12, 02/09/2017 [ответить] [смотреть все]  
  • +1 +/
    Удивило, что разработчики написали учебник на русском.
     
  • 1.3, Аноним, 20:14, 02/09/2017 [ответить] [смотреть все]  
  • –9 +/
    Эти чудики никак не поймут причину популярности C и C Ну пусть думают дальше ... весь текст скрыт [показать]
     
     
  • 2.20, nc, 23:53, 02/09/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +2 +/
    Ну и в чем же эта причина?
     
     
  • 3.26, Аноним, 02:25, 03/09/2017 [^] [ответить] [смотреть все]  
  • –16 +/
    В том, что их проектировали далеко не полные идиоты Иначе синтаксис Си сегодня ... весь текст скрыт [показать]
     
     
  • 4.41, Аноним, 16:40, 03/09/2017 [^] [ответить] [смотреть все]  
  • +3 +/
    Это слишком абстрактно для причины.
     
  • 4.77, Аноним, 23:44, 07/09/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    Это же следствие, а не причина
     
  • 2.43, Ordu, 17:20, 03/09/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +6 +/
    > Эти чудики никак не поймут причину популярности C и C++. Ну пусть
    > думают дальше.

    Причина популярности C -- это популярность C. Если мы представим альтернативную вселенную в которой весь unix написан на pascal'е, то в той вселенной было бы столь же сложно слезть с pascal'я как в нашей с C.

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

     
     
  • 3.63, dq0s4y71, 18:51, 04/09/2017 [^] [ответить] [смотреть все]  
  • +/
    Хм Тогда, по этой логике, причина популярности Юникс - это популярность Юникс, ... весь текст скрыт [показать]
     
     
  • 4.66, Ordu, 20:47, 04/09/2017 [^] [ответить] [смотреть все]  
  • +/
    Ну В некотором смысле, да Каждый уважающий себя программист должен написать ... весь текст скрыт [показать]
     
     
  • 5.70, Очередной аноним, 15:19, 05/09/2017 [^] [ответить] [смотреть все]  
  • +/
    Возражу справедливости ради WebAssembly должен быть независимой от языка просло... весь текст скрыт [показать]
     
     
  • 6.73, Ordu, 16:42, 05/09/2017 [^] [ответить] [смотреть все]  
  • +/
    Но javascript при этом никуда не денется Он останется в top10 ... весь текст скрыт [показать]
     
  • 3.76, pripolz, 15:52, 06/09/2017 [^] [ответить] [смотреть все]  
  • –1 +/
    1 Действительно, если бы не было бы Си - тогда программисты не писали бы на Си,... весь текст скрыт [показать]
     
  • 1.4, Lester, 20:28, 02/09/2017 [ответить] [смотреть все]  
  • +/
    Код для С явно калька с кода на D, сишник написал бы по другому.
     
     
  • 2.7, Аноним, 20:39, 02/09/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +2 +/
    Валяй свой вариант
     
     
  • 3.17, Аноним, 23:13, 02/09/2017 [^] [ответить] [смотреть все]  
  • +/
    Предыдущий коммент не мой, но include stdbool h include stdio h define... весь текст скрыт [показать]
     
     
  • 4.36, Ordu, 13:41, 03/09/2017 [^] [ответить] [смотреть все]  
  • +/
    - define size 8190 define size 8191 Там в исходном примере явно кто-то пытал... весь текст скрыт [показать]
     
     
  • 5.47, Аноним, 23:16, 03/09/2017 [^] [ответить] [смотреть все]  
  • +/
    Да.
     
  • 4.39, pripolz, 16:28, 03/09/2017 [^] [ответить] [смотреть все]  
  • +2 +/
    > [0 ... size-1]

    может быть gnu99 ?

     
  • 4.46, Аноним, 23:01, 03/09/2017 [^] [ответить] [смотреть все]  
  • +2 +/
    #define SIZE 8190
     
  • 4.55, freehck, 16:48, 04/09/2017 [^] [ответить] [смотреть все]  
  • +/
    А чем так принципиально было важно для настоящего сишника заменить i i на 2 ... весь текст скрыт [показать]
     
     
  • 5.58, Аноним, 18:16, 04/09/2017 [^] [ответить] [смотреть все]  
  • –1 +/
    Да пофиг Ну почти пофиг, потому что с отключёнными оптимизациями 2 i может сэко... весь текст скрыт [показать]
     
     
  • 6.61, Аноним84701, 18:34, 04/09/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    Это на какой платформе IMUL шустрее простого ADD o_O... весь текст скрыт [показать]
     
  • 6.69, труляляй, 09:11, 05/09/2017 [^] [ответить] [смотреть все]  
  • –1 +/
    Если умножение целого на 2, то компилятор автоматом преобразовывает в shl
     
     
  • 7.71, Аноним84701, 15:52, 05/09/2017 [^] [ответить] [смотреть все]  
  • +2 +/
    Сильно зависит от контекста кроме платформы, само-собой CODE echo int ... весь текст скрыт [показать]
     
     
  • 8.72, труляляй, 16:26, 05/09/2017 [^] [ответить] [смотреть все]  
  • –1 +/
    Конечно, зависит от того, на сколько всё может распараллелиться и прочих мелоче... весь текст скрыт [показать]
     
  • 2.9, Crazy Alex, 20:58, 02/09/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +2 +/
    Если для Obfuscated C Contest - то да Если нормальный индустриальный код - то п... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.18, Аноним, 23:18, 02/09/2017 [^] [ответить] [смотреть все]  
  • +/
    То есть тебя даже define size 8190 define sizepl 8191 исключительно ... весь текст скрыт [показать]
     
     
  • 4.21, Crazy Alex, 00:58, 03/09/2017 [^] [ответить] [смотреть все]  
  • +/
    Ну залип человек на каком-то злобном и замшелом coding standard, не первый он ... весь текст скрыт [показать]
     
  • 1.5, Аноним, 20:28, 02/09/2017 [ответить] [смотреть все]  
  • +/
    Сколько там еще букв осталось для языков в одну букву?
     
     
  • 2.6, Zloy, 20:35, 02/09/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Язык изначально вообще Mars назывался Просто коллеги разраба в шутку звали его ... весь текст скрыт [показать] [показать ветку]
     
  • 1.10, Аноним, 21:05, 02/09/2017 [ответить] [смотреть все]  
  • –7 +/
    код на выходе из под д компилятора быстрее работает, чем из под си размер испол... весь текст скрыт [показать]
     
     
  • 2.11, Аноним, 21:07, 02/09/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +2 +/
    А проверить сначала?
     
  • 2.12, Аноним, 21:09, 02/09/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +2 +/
    Получается идентичное, используя фишки языка D Если бы оно было быстрее и с дру... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.16, Mihail Zenkov, 23:07, 02/09/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    Не уверен на счет betterC, но иногда D может быть действительно быстрее C https... весь текст скрыт [показать]
     
     
  • 4.22, Crazy Alex, 01:02, 03/09/2017 [^] [ответить] [смотреть все]  
  • +/
    Ну, в варианте betterC он в принципе может что-то распараллелить на foreach, но ... весь текст скрыт [показать]
     
     
  • 5.56, freehck, 16:52, 04/09/2017 [^] [ответить] [смотреть все]  
  • +/
    foreach от for не так уж сильно отличается Блок внутри foreach, как я понимаю, ... весь текст скрыт [показать]
     
  • 1.13, Анонимный Алкоголик, 21:25, 02/09/2017 [ответить] [смотреть все]  
  • +/
    10 итераций? :-)
    Ну и вообще-то пример полон ошибок.
     
     
  • 2.14, Crazy Alex, 21:48, 02/09/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Хм, кажется, что-то со знаками сотворило что-то плохое - где на юникод замен... весь текст скрыт [показать] [показать ветку]
     
  • 1.15, Аноним, 21:56, 02/09/2017 [ответить] [смотреть все]  
  • +2 +/
    Максим, поменяй уже шаблон ... весь текст скрыт [показать]
     
  • 1.19, uchiya, 23:51, 02/09/2017 [ответить] [смотреть все]  
  • +1 +/
    Где Книга? Сайт упал?
     
  • 1.23, Вареник, 01:02, 03/09/2017 [ответить] [смотреть все]  
  • –4 +/
    Отличный язык, особенно на фоне вырвиглазного Хруста Но проблема та же - не нуж... весь текст скрыт [показать]
     
  • 1.24, Аноним, 01:45, 03/09/2017 [ответить] [смотреть все]  
  • –2 +/
    Я вот думаю, сегодня заказчик хочет сразу готовый продукт и не готов платить и ж... весь текст скрыт [показать]
     
     
  • 2.29, Crazy Alex, 03:07, 03/09/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +3 +/
    В целом - для тех, для кого конкретно их соотношение достоинств и недостатков по... весь текст скрыт [показать] [показать ветку]
     
  • 1.33, Аноним, 08:01, 03/09/2017 [ответить] [смотреть все]  
  • +1 +/
    Почему они auto считают достижением Пришлось в начале программы искать использу... весь текст скрыт [показать]
     
     
  • 2.35, Crazy Alex, 12:34, 03/09/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Оно и есть достижение Во-первых, им пользуются там, где нужен просто правильны... весь текст скрыт [показать] [показать ветку]
     
  • 2.37, Ordu, 14:11, 03/09/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +4 +/
    Я не знаю, зачем это в D, потому что с D знаком на уровне как-то раз пролистал ... весь текст скрыт [показать] [показать ветку]
     
  • 1.45, Аноним, 22:57, 03/09/2017 [ответить] [смотреть все]  
  • +/
    А классы-то можно использовать режиме -betterC ?
     
     
  • 2.48, Mihail Zenkov, 00:29, 04/09/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Нет https dlang org spec betterc html... весь текст скрыт [показать] [показать ветку]
     
  • 1.53, Аноним, 12:21, 04/09/2017 [ответить] [смотреть все]  
  • –1 +/
    Подскажите, нормальный дебаггер там запилили Пытался вкатиться пару лет назад, ... весь текст скрыт [показать]
     
     
  • 2.54, Mihail Zenkov, 12:42, 04/09/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Компиляторы d dmd, gdc, ldc генерируют немного по-разному дебаговую информацию... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.59, Аноним, 18:19, 04/09/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    Не надо уходить так глубоко в рекурсию ... весь текст скрыт [показать]
     
  • 1.57, J.L., 17:23, 04/09/2017 [ответить] [смотреть все]  
  • –1 +/
    >LDC 1.4.0-beta1 в котором появилась полная поддержка разработки под Android

    можно писать под андройд на D ?
    а под iOS нельзя ?

     
     
  • 2.62, Аноним, 18:44, 04/09/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Под iOS пока нельзя
     
  • 2.74, n12, 17:10, 05/09/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +1 +/
    Если "под Андройд", тогда уже и "под йOS"
     
  • 1.75, анон, 18:04, 05/09/2017 [ответить] [смотреть все]  
  • –1 +/
       __gshared  в примере всё меняет.  Если для простейшего примера в виде алгоритма потребовались два подчеркивания в начале имени, то вот именно поэтому и не взлетел, и вот именно поэтому когнитивный диссонанс "ну я же столько времени потратил, ну может взлетит" и не отпустит вас
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:


      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor