Уолтер Брайт. Обзор языка ДИ
Метки: Уолтер Брайт, Обзор языка ДИ, Динрус, рулада
|
|
|
Виталий Кулич
23-09-2012 13:20 (ссылка)
Сергей Крутой
23-09-2012 17:24 (ссылка)
Re: Уолтер Брайт. Обзор языка ДИ
спасибо за приглашение в обсуждение(изучу материал позже),но пользуясь случаем призываю срочно подумать над мониторами-ПОРТЯТСЯ ГЛАЗА!...лично я вижу корень в этой проблеме-пещерная примитивность в подходе к изобретённому на данный момент передачи изображения...вся соль в стекле и плёнке...НЕ ДОЛЖНО БЫТЬ ТАКОГО ПЕРЕХОДНОГО МАТЕРИАЛА ДЛЯ РАЗЛИЧЕНИЯ ВИДИМОЙ ИНФОРМАЦИИ!...глаз теряет фокусировку из-за этого и начинаются проблемы со зрением!...необходимо чтобы не было прослойки между видимой информацией и глазом...ну не ужели вы этого не замечаете?!...
Комментарии запрещены
Отладочные Атрибуты и Инструкции
Теперь debug является частью синтаксиса языка. Код можно активировать или дезактивировать при компиляции, без применения макросов или команд препроцессора. Отладочный синтаксис даёт консистентное, портабельное и понятное распознавание, позволяя генерировать исходный код как в отладочных, так и в релизных целях.
Обработка Исключений
Используется превосходная модель try-catch-finally, нежели просто try-catch. Нет необходимость в создании «мутных» объектов ( dummy objects) лишь с тем, чтобы деструктор мог реализовать семантику finally.
Синхронизация
Многопоточное программирование всё более и более входит в жизнь, и ДИ предоставляет примитивы для построения многопоточных программ. Синхронизация может выполняться как на уровне метода, так и объекта.
synchronized int func() { ... }
Для синхронизированных функций допустима одновременно только одна нить, выполняющая эту функцию.
Синхронизированная инструкция ставит мютекс вокрух блока инструкций, контролируя доступ либо по объекту, либо глобально.
Поддержка Гибких Техник
Проверки Во Время Компиляции
Рантаймная Проверка
Совместимость
Приоритет операторов и правила эвалюации
ДИ сохраняет операторы СИ и их правила приоритета, порядок оценки и продвижения. Это избавляет от деликатных ошибок, следующих из привычки работать по-сишному, - ошибок, возникающих из-за большой семантической разницы языков.
Прямой Доступ к C API
ДИ не только имеет типы данных, соответствующие типам СИ, он также предоставляет прямой доступ к функциям СИ. Нет нужды писать функции-обёртки, «свизлеры» параметров, или код для поштучного копирования членов агрегата.
Поддержка всех типов данных СИ
Делает возможной создание интерфейса к любым C API или существующей библиотеке кодов на СИ. В эту поддержку включены структуры, юнионы, перечни, указатели и все типы стандарта C99. В ДИ также включена возможность установки раскладки членов структуры, что обеспечивает совместимость с внешне обусловленными форматами данных.
Обработка Исключений ОС
Механизм обработки исключений ДИ примыкает к тому способу, которым обрабатывает исключения в приложениях данная операционная система.
Использование Существующих Инструментов
ДИ производит код в стандартном формате файла объекта, что позволяет использовать стандартные ассемблеры, компоновщики, отладчики, профилировщики, компрессоры экзе и прочие анализаторы, а также компоновку с кодом, написанным на других языках.
Управление Проектом
Версификация
ДИ имеет встроенную поддержку генерации нескольких версий программы из одного и того же кода. Это заменяет приём препроцессора СИ #if/#endif.
Депрекация
С развитием кода во времени старый библиотечный код заменяется на новые, лучшие версии. Старые версии могут быть доступны для поддержки унаследованного кода, но их можно пометить как deprecated. Как правило, код, где используются депрекированные версии, помечается как «нелегальный», но переключатель компилятора может разрешить его использование. Программистам будет легче определять зависимость кода от каких-либо устаревших средств.
Пример Программы на ДИ (sieve.d)
/* Решето Эратосфена */
import ru.dinrus;
pragma(lib,"dinrus.lib");
бул[8191] флаги;
цел main()
{ цел i, счёт, прайм, k, обход;
скажи("10 обходов\n");
for (обход = 1; обход <= 10; обход++)
{ счёт = 0;
флаги[] = 1;
for (i = 0; i < флаги.length; i++)
{ if (флаги[i])
{ прайм = i + i + 3;
k = i + прайм;
while (k < флаги.length)
{
флаги[k] = 0;
k += прайм;
}
счёт += 1;
}
}
}
скажи (фм("\n%d праймов", счёт));
return 0;
}
//////////////////////////////////////////////////////////////////
Вывод в консоль: 10 обходов 1899 праймов