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 +/
    > Главным нововведением является режим "-betterC"...:
    > Отсутствие препроцессора

    Интересно, они какую траву употребляют?!

     
     
  • 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 (ok), 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 (ok), 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 (ok), 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 (ok), 17:20, 03/09/2017 [^] [ответить]    [к модератору]  
  • +6 +/
    > Эти чудики никак не поймут причину популярности C и C++. Ну пусть
    > думают дальше.

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

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

     
     
  • 3.63, dq0s4y71 (ok), 18:51, 04/09/2017 [^] [ответить]     [к модератору]  
  • +/
    Хм Тогда, по этой логике, причина популярности Юникс - это популярность Юникс, ... весь текст скрыт [показать]
     
     
  • 4.66, Ordu (ok), 20:47, 04/09/2017 [^] [ответить]     [к модератору]  
  • +/
    Ну В некотором смысле, да Каждый уважающий себя программист должен написать ... весь текст скрыт [показать]
     
     
  • 5.70, Очередной аноним (?), 15:19, 05/09/2017 [^] [ответить]     [к модератору]  
  • +/
    Возражу справедливости ради WebAssembly должен быть независимой от языка просло... весь текст скрыт [показать]
     
     
  • 6.73, Ordu (ok), 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 (ok), 13:41, 03/09/2017 [^] [ответить]    [к модератору]  
  • +/
    - #define size 8190
    + #define size 8191

    Там в исходном примере явно кто-то пытался запутать читателя и использовал size не в смысле "количество элементов", а в смысле "самый большой индекс".

     
     
  • 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 (ok), 16:48, 04/09/2017 [^] [ответить]    [к модератору]  
  • +/
    А чем так принципиально было важно для "настоящего сишника" заменить i + i на 2 * i, и почему не i << 1?
     
     
  • 5.58, Аноним (-), 18:16, 04/09/2017 [^] [ответить]    [к модератору]  
  • –1 +/
    Да пофиг. Ну почти пофиг, потому что с отключёнными оптимизациями 2*i может сэкономить такт.
     
     
  • 6.61, Аноним84701 (ok), 18:34, 04/09/2017 [^] [ответить]    [к модератору]  
  • +1 +/
    > Да пофиг. Ну почти пофиг, потому что с отключёнными оптимизациями 2*i может сэкономить такт.

    Это на какой платформе IMUL шустрее простого ADD?  o_O

     
  • 6.69, труляляй (?), 09:11, 05/09/2017 [^] [ответить]    [к модератору]  
  • –1 +/
    Если умножение целого на 2, то компилятор автоматом преобразовывает в shl
     
     
  • 7.71, Аноним84701 (ok), 15:52, 05/09/2017 [^] [ответить]     [к модератору]  
  • +2 +/
    Сильно зависит от контекста кроме платформы, само-собой CODE echo int ... весь текст скрыт [показать]
     
     
  • 8.72, труляляй (?), 16:26, 05/09/2017 [^] [ответить]    [к модератору]  
  • –1 +/
    Конечно, зависит от того, на сколько всё может распараллелиться и прочих "мелочей". Ну и, как в примере, от ключа оптимизации. Даже и не спорю.
     
  • 2.9, Crazy Alex (ok), 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 (ok), 00:58, 03/09/2017 [^] [ответить]    [к модератору]  
  • +/
    Ну залип человек на каком-то злобном (и замшелом) coding standard, не первый он такой и не последний. Собственно, это много по чему видно, начиная с дефайнов для true/false.
     
  • 1.5, Аноним (-), 20:28, 02/09/2017 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Сколько там еще букв осталось для языков в одну букву?
     
     
  • 2.6, Zloy (?), 20:35, 02/09/2017 [^] [ответить]    [к модератору]  
  • +/
    Язык изначально вообще Mars назывался. Просто коллеги разраба в шутку звали его дишечкой и название прижилось.
     
  • 1.10, Аноним (10), 21:05, 02/09/2017 [ответить] [показать ветку] [···]    [к модератору]  
  • –7 +/
    код на выходе из под д компилятора быстрее работает, чем из под си? размер исполняемого файла получается меньше? нет. тогда это ненужно совершенно.
     
     
  • 2.11, Аноним (-), 21:07, 02/09/2017 [^] [ответить]    [к модератору]  
  • +2 +/
    А проверить сначала?
     
  • 2.12, Аноним (-), 21:09, 02/09/2017 [^] [ответить]    [к модератору]  
  • +2 +/
    Получается идентичное, используя фишки языка D. Если бы оно было быстрее и с другим синтаксисом, причем был бы здесь C?
     
     
  • 3.16, Mihail Zenkov (ok), 23:07, 02/09/2017 [^] [ответить]     [к модератору]  
  • +1 +/
    Не уверен на счет betterC, но иногда D может быть действительно быстрее C https... весь текст скрыт [показать]
     
     
  • 4.22, Crazy Alex (ok), 01:02, 03/09/2017 [^] [ответить]    [к модератору]  
  • +/
    Ну, в варианте betterC он в принципе может что-то распараллелить на foreach, но не думаю, что это будет заметно. А вот в плане безопасности - да, выигрыш будет.
     
     
  • 5.56, freehck (ok), 16:52, 04/09/2017 [^] [ответить]     [к модератору]  
  • +/
    foreach от for не так уж сильно отличается Блок внутри foreach, как я понимаю, ... весь текст скрыт [показать]
     
  • 1.13, Анонимный Алкоголик (??), 21:25, 02/09/2017 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    10 итераций? :-)
    Ну и вообще-то пример полон ошибок.
     
     
  • 2.14, Crazy Alex (ok), 21:48, 02/09/2017 [^] [ответить]     [к модератору]  
  • +/
    Хм, кажется, что-то со знаками сотворило что-то плохое - где на юникод замен... весь текст скрыт [показать]
     
  • 1.15, Аноним (-), 21:56, 02/09/2017 [ответить] [показать ветку] [···]     [к модератору]  
  • +2 +/
    Максим, поменяй уже шаблон ... весь текст скрыт [показать]
     
  • 1.19, uchiya (ok), 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 (ok), 03:07, 03/09/2017 [^] [ответить]     [к модератору]  
  • +3 +/
    В целом - для тех, для кого конкретно их соотношение достоинств и недостатков по... весь текст скрыт [показать]
     
  • 1.33, Аноним (-), 08:01, 03/09/2017 [ответить] [показать ветку] [···]    [к модератору]  
  • +1 +/
    Почему они auto считают достижением? Пришлось в начале программы искать используемую в выражении переменную, чтобы определить тип
     
     
  • 2.35, Crazy Alex (ok), 12:34, 03/09/2017 [^] [ответить]     [к модератору]  
  • +/
    Оно и есть достижение Во-первых, им пользуются там, где нужен просто правильны... весь текст скрыт [показать]
     
  • 2.37, Ordu (ok), 14:11, 03/09/2017 [^] [ответить]     [к модератору]  
  • +4 +/
    Я не знаю, зачем это в D, потому что с D знаком на уровне как-то раз пролистал ... весь текст скрыт [показать]
     
  • 1.45, Аноним (-), 22:57, 03/09/2017 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    А классы-то можно использовать режиме -betterC ?
     
     
  • 2.48, Mihail Zenkov (ok), 00:29, 04/09/2017 [^] [ответить]    [к модератору]  
  • +/
    > А классы-то можно использовать режиме -betterC ?

    Нет. https://dlang.org/spec/betterc.html

     
  • 1.53, Аноним (-), 12:21, 04/09/2017 [ответить] [показать ветку] [···]    [к модератору]  
  • –1 +/
    Подскажите, нормальный дебаггер там запилили? Пытался вкатиться пару лет назад, язык понравился, а вот от тулчейна все опустилось. GDB емнип работал через раз и даже полей в структуре не показывал.
     
     
  • 2.54, Mihail Zenkov (ok), 12:42, 04/09/2017 [^] [ответить]    [к модератору]  
  • +/
    > GDB емнип работал через раз
    > и даже полей в структуре не показывал.

    Компиляторы d (dmd, gdc, ldc) генерируют немного по-разному дебаговую информацию. Когда я работал над включением поддержки d в gdb, основной упор был сделан на gdc (так как он самый совместимый с gdb).

    Сейчас поддержку gdb ведет Iain Buclaw, он же автор gdc. Так что для дебаговых сборок по-прежнему лучше использовать gdc. https://github.com/ibuclaw/gdb


     
     
  • 3.59, Аноним (-), 18:19, 04/09/2017 [^] [ответить]    [к модератору]  
  • +1 +/
    > в gdb, основной упор был
    > сделан на gdc (так как он самый совместимый с gdb).

    Не надо уходить так глубоко в рекурсию.

     
  • 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-2018 by Maxim Chirkov  
    ДобавитьПоддержатьВебмастеруГИД  
    Hosting by Ihor