Вышел компилятор языка D 2.076
Главным нововведением является режим "-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 на русском языке.
Источник: http://www.opennet.ru/opennews/art.shtml?num=47120
|
0 | Tweet | Нравится |
|