Similar presentations:
Язык программирования D
1. Тема: “Язык программирования D”
Выполнил: студент 4 курса группыИСТ 13/1 Протасов А.Э.
Руководитель: К.Т.Н. Исаева Г.Н.
2. Введение
D — язык программирования общегоназначения, предназначенный для
прикладного и системного
программирования.
В D собран опыт разработки десятков
компиляторов для самых разнообразных
языков программирования, а также
попыток создания крупных проектов на
этих языках. Язык D вобрал в себя
лучшее из тех языков (больше всего из
C++) и практично применил эти
возможности.
2
3. Основные особенности D
O Облегчает написание кода, который без особыхO
O
O
O
O
O
усилий может быть перенесен от компилятора к
компилятору, от компьютера к компьютеру, от
одной операционной системы к другой;
Поддержка нескольких подходов к
программированию: структурный и объектноориентированный, как минимум;
Лёгкость изучения языка для тех, кто имел дело с
языками C и C++;
Обеспечение прямого низкоуровневого доступа к
оборудованию;
Наличие контекстно-независимой грамматики;
Легкость создания интернациональных программ;
Возможность создания легковесных и
самостоятельных программ
3
4. Возможности, унаследованные от C/C++
O Сохранены синтаксис и семантика языков C иC++.
O Программы на D могут быть написаны с
использованием функционального и объектноориентированного подходов.
O Поддерживается модель разработки по этапам
компиляция/линкование/отладка
O Обработка исключений (exception handling).
O Приведение типов в реальном времени..
O D поддерживает совместимость с соглашением
о вызове функций в языке C.
O Перегрузка операторов.
O Использование шаблонов.
4
5. Для кого и чего предназначен язык D
O Дляпрограммистов, регулярно пользующихся анализаторами кода для
выявления ошибок еще до компиляции;
O Для людей, которые компилируют код с максимальным количеством
включенных уровней предупреждений (warning levels).
O Для тех, кто решил, что обещание лёгкого объектно-ориентированного
подхода к программированию в языке C++ не выполняется из-за его
сложности и запутанности;
O Для программистов, которых впечатляет мощь языка C++, но
разочаровывает необходимость ручного управления памятью и ловля багов,
связанных с указателями;
O Для проектов, нуждающихся во встроенных средствах тестирования и
верификации;
O Для команд разработчиков, разрабатывающих приложения, исходные
тексты которых содержат миллионы строк кода;
O Для программистов, которые считают, что язык программирования должен
поддерживать достаточное количество возможностей для абстрактной
работы с указателями;
O Для математических программистов. Язык D поддерживает работу с
комплексными числами и операторами определения NaN’ов (not a number) и
бесконечностей (infinity). Они были добавлены в стандарт C99, но не в C++.
5
6. Введение
D — язык программирования общегоназначения, предназначенный для
прикладного и системного
программирования.
В D собран опыт разработки десятков
компиляторов для самых разнообразных
языков программирования, а также
попыток создания крупных проектов на
этих языках. Язык D вобрал в себя
лучшее из тех языков (больше всего из
C++) и практично применил эти
возможности.
6
7. Для кого и чего D не предназначен
O Язык D не предназначен для ужесуществующих программ (однако, D
поддерживает существующие API для
языка C).
O Для очень маленьких программ.
O В качестве первого языка
программирования.
O Для борцов за чистоту языка.
7
8. Особенности языка D
Объектно-ориентированное программированиеКлассы
Объектно-ориентированная природа языка D
происходит от классов. Модель наследования
не поддерживает наследования от нескольких
классов, зато расширяется за счет
использования интерфейсов.
Перегрузка операторов
Классы могут быть приспособлены для
работы с уже существующими операторами.
Благодаря перегрузке операторов можно
создавать новые типы данных. Например,
можно создать тип данных для работы с
большими числами.
8
9. Особенности языка D
ЭффективностьМодули
Файлы исходного кода взаимно однозначно
соответствуют модулям. Вместо включения
(#include) файлов исходного кода достаточно
импортировать модуль. В этом случае нет
необходимости беспокоиться о том, что один и
тот же модуль будет импортирован несколько
раз, а, значит, и нет необходимости обрамлять
код в заголовочных файлах с использованием
макросов
препроцессора #ifndef/#endif или #pragma
once.
9
10. Особенности языка D
ЭффективностьОбъявление против описания
C++ обычно требует, чтобы функции и классы
были объявлены дважды — объявление происходит
в заголовочных файлах (*.h), а описание происходит
в файлах исходного кода (*.cpp). Это утомительный
и подверженный ошибкам процесс. Очевидно, что
программисту достаточно объявить функцию или
класс лишь однажды, а компилятор должен
впоследствии извлечь информацию об объявлении и
сделать ее доступной для импортирования. Именно
так работает язык программирования D, например:
10
11. Особенности языка D
ЭффективностьОбъявление против описания
И более нет необходимости отдельного описания
функций-членов, атрибутов и спецификаций
внешних объявлений (extern), как в языке C++:
11
12. Особенности языка D
ЭффективностьОбъявление против описания
Заметка: Конечно же, в C++ тривиальные функции вроде
{ return 7; } тоже описаны внутри класса, но более сложные
должны быть описаны отдельно. Вдобавок, если нужны
опережающие ссылки (ссылки на класс или функцию, которые
объявлены, но ещё не определены), то для этих объектов нужны
прототипы (prototype). Следующий код не будет работать в C++:
Но эквивалентный код на языке D будет
рабочим:
12
13. Особенности языка D
ЭффективностьШаблоны
Шаблоны в языке D предлагают простой путь
поддержки обобщенного программирования, в
то же время обеспечивая использование
частичной специализации.
Ассоциативные массивы
Ассоциативные массивы — это массивы, в
качестве индекса в которых можно
использовать любой тип данных, а не только
целые числа. По существу, ассоциативные
массивы являются хеш-таблицами, которые
облегчают создание быстрых, эффективных и
устойчивых к ошибкам таблиц символов.
13
14. Особенности языка D
ЭффективностьНастоящий typedef
В языках C и C++ оператор typedef на самом
деле просто создает синоним типа данных и
никакого нового типа данных не объявляется. В
языке D оператор typedef объявляет новый тип
данных. Таким образом, код
создает новый тип данных handle. К новому
типу данных применяется проверка на
соответствие типу данных, а также при
перегрузке функций новый тип данных
отличается от того типа данных, на основе
которого он был создан. Например:
14
15. Особенности языка D
ФункцииЯзык D имеет поддержку обычных функций, включая глобальные функции,
перегруженные функции, встраивание функций, методы классов,
виртуальные методы классов, указатели на функции. Также в D реализованы:
Вложенные функции
Функции могут быть объявлены в теле других функций, что очень полезно
для ограничения области видимости вспомогательных функций.
Функциональные литералы (function literals)
Анонимные функции могут быть встроены напрямую в выражение.
Динамические делегирования (closure)
Встроенные функции и методы классов могут использоваться при
делегировании обязанностей, что делает обобщенное программирование
проще.
Спецификаторы доступа к параметрам функций: in, out и inout
Данные спецификаторы не только делают объявления функций
говорящими сами за себя, но и открывает возможности компилятора для
помощи в нахождении ошибок.
Все эти возможности D позволяют использовать больше различных
программных интерфейсов, а также избавляет от необходимости
использовать различные искусственные приемы, как, например IDL (Interface
Definition Languages).
15
16. Особенности языка D
МассивыМассивы в языке C имеют несколько недостатков,
которые приходится корректировать:
O Информация о размерности массива не прилагается к
массиву, поэтому должна извлекаться дополнительно и
передаваться отдельно.
O Когда массив передается в функцию, на самом деле
передается ссылка на него, даже когда прототип
функции говорит, что должен быть передан массив.
O Размерность массивов языка C не может быть изменена.
O В языке C нельзя произвести проверку на нарушение
границ массива.
O Массивы объявляются с использованием
оператора [ ] после названия массива. Это ведет к
использованию очень неуклюжего синтаксиса при
объявлении, скажем, ссылки на массив:
16
17. Особенности языка D
МассивыВ языке D оператор [ ] при объявлении
массива ставится после типа данных:
Этот код более легок для восприятия. В
языке D можно использовать несколько
видов массивов: указатели, статические
массивы, динамические массивы и
ассоциативные массивы.
17
18. Особенности языка D
Управление ресурсами (resource management)Автоматическое управление памятью
Выделение памяти в языке D полностью контролируется
методикой сбора мусора. Опыт показывает, что
большинство сложных возможностей языка C++ требуют
последующего освобождения памяти. Методика сбора
мусора делает жизнь проще.
Явное управление памятью
Несмотря на то, что язык D поддерживает
автоматический сбор мусора, операторы new и delete могут
быть перегружены для определенных классов.
RAII
RAII — это современная методика разработки для
управления распределением и освобождением ресурсов.
Язык D поддерживает методику RAII в контролируемой и
предсказуемой манере, независимой от цикла сбора мусора.
18
19. Особенности языка D
ПроизводительностьЛегковесные составные типы данных
Язык D поддерживает простые структуры в
стиле языка C не только для совместимости с
этим языком, но и потому что они очень полезны
в тех случаях, когда возможностей классов
слишком много.
Встроенный ассемблер
Драйверы устройств, высокопроизводительные
системные приложения, а также встраиваемые
системы (embedded systems) требуют углубления
до уровня команд ассемблера. Программирование
на языке D не требует использования ассемблера,
но он реализован и является частью языка.
19
20. Особенности языка D
НадёжностьСовременный язык программирования должен сделать все, чтобы
помочь программисту отловить ошибки в коде. Эта помощь может
проявляться по-разному: от обеспечения лёгкости использования
устойчивых методик до эвристического поиска компилятором явно
некорректного кода и проверок во время выполнения программы.
Отладочный код
Теперь отладка является частью языка. Отладочный код может
быть включен или отключен перед компилированием, при этом не
требуется использовать макросы или команды препроцессора.
Обработка исключений
Модель try-catch-finally предпочтительнее, чем просто try-catch,
потому что не требует создания временных (dummy) объектов,
деструктор которого будет выполнять то, что может сделать finally.
Синхронизация
Многопоточное программирование становится всё более
распространенным, поэтому в языке D реализованы базовые
возможности для создания многопоточных приложений.
20
21. Особенности языка D
НадёжностьУстойчивые к ошибкам методики
O Динамические массивы вместо указателей;
O Переменные-ссылки вместо указателей;
O Ссылки на объекты вместо указателей;
O Сбор мусора вместо явного управления памятью;
O Встроенные возможности синхронизации потоков;
O Встраиваемые функции вместо макросов;
O Уменьшение необходимости использовать
указатели;
O Явные размеры целого типа данных;
O Отсутствие неопределенности, касающейся
наличия знака у символьного типа;
O Отсутствие необходимости повторного объявления;
21
22. Особенности языка D
НадёжностьПроверки во время компиляции
O Более строгая проверка на соответствие
типа данных;
O Никаких пустых условий в цикле for;
O Присвоения не возвращают булевого
значения;
O Проверка использования устаревших API;
22
23. Особенности языка D
СовместимостьПриоритеты операторов и правила вычисления
Язык D сохранил операторы из языка C, а также их
приоритеты и правила вычисления.
Прямой доступ к API языка C
Язык D не только имеет типы данных, соответствующие
типам данных языка C, но и обеспечивает прямой доступ к
функциям языка C.
Поддержка всех типов данных языка C
Это делает возможным взаимодействие с API языка C или с
кодом существующей библиотеки языка C.
Обработка исключений операционной системы
Механизм обработки исключений языка D совместим с
механизмом обработки исключений операционной системы.
Использование существующих инструментариев
Код на языке D преобразуется в объектный файл
стандартного формата.
23
24. Список использованной литературы:
O https://ru.wikibooks.org/wiki/Язык_программирования_D
O Язык Программирования D.
Андрей Александреску. СанктПетербург – Москва 2012г.
24