Учим язык D на примере рейтрейсинга
Здравствуйте дорогие посетители!
Сегодня я бы хотел начать цикл статей посвященных языку D.
В данной статье мы начнем наше знакомство с языком, попутно создавая каркас нашего приложения.
Итак, D - это современный, высокоуровневый, объектно-ориентированный, компилируемый язык. На свет данный язык программирования появился в далеком 2001-м году в стенах маленькой Американской компании Digital Mars, на счету которой уже был компилятор языков С и С++. В 2006-м году к проекту присоединяется известный гуру С++ - Андрей Александреску. С его приходом D получил новый виток в развитии, в результате которого появился D2 - улучшенный и доработанный D.
На данный момент уже существует 4 реализации компиляторов D:
- DMD - референсный компилятор разрабатываемый Digital Mars
- GDC - фронтенд для GCC
- LDC - использует LLVM бекенд
- D .NET - компилирует в CLI байткод, пригодный для выполнения в CLR машине
D вобрал в себя лучшие стороны С/С++, Python, Java, C#. При этом D придерживается соглашений вызовов С/С++, что позволяет подключать существующие С библиотеки используя их API на прямую, без необходимости написания оберток.
Более подробно ознакомиться со всеми фишками языка можно на Википедии (http://en.wikipedia.org/wiki/D_(programming_language)) и на официальном сайте языка (http://dlang.org/).
А мы приступим к процессу установки и настройки инструментария. Первым делом надо обзавестись компилятором. Заходим сюда (http://dlang.org/download.html) и качаем установочный файл (dmd-2.064.2.exe в моем случае). Процесс установки никаких трудностей вызвать не должен.
Теперь настало время IDE. Я предпочитаю пользоваться Visual Studio, так что расскажу как подружить ее с D. Идем на сайт VisualD (http://rainers.github.io/visuald/visuald/StartPage.html) и качаем установочный файл. Во время установки вам будет предложено выбрать версии Visual Studio для которых нужно добавить поддержку D. Так же нужно будет указать путь к установленному компилятору.
Внимание! На момент написания статьи Антивирус Касперского активно видел в visuald.dll троян, но могу Вас заверить - это ложное срабатывание, и результаты проверки на VirusTotal тому лишнее подтверждение, так что можете смело заносить данный файл в исключения.
Теперь давайте попробуем создать проект. Запустите Visual Studio, выберите команду создать новый проект, в списке других языков выберите D, и выберите шаблон Console Application.
Как видим - в результате наших действий мы имеем полноценный Hello World на D да еще и в Visual Studio. Соберите и запустите проект. Можете убедиться что работает отладка. Замечательно.
Приступим к написанию кода. Как я уже говорил - писать мы будем рейтрейсер, а значит нам понадобится математическая библиотека, библиотека для работы с окнами и графикой. Для графики и работы с операционной системой решено было выбрать SDL2. Однако как же с ней работать на D? Комьюнити у языка еще не такое огромное как у того же С++, но довольно динамично развивающееся. Один очень небезразличный человек написал биндинги к самым распространенным в геймдеве библиотекам - https://github.com/aldacron/Derelict3. Давайте скачаем ZIP архив с мастер веткой и распакуем удобное место. Теперь можно собрать эти биндинги. Перейдем в папочку derelict/build и выполним команду dmd build.d. Таким образом мы собрали сборщик биндингов (ухх как завернул). В результате появился новый исполняемый файл - build.exe. Запустив его мы соберем биндинги. Модули лежат в папочке import, собранные библиотеки в папочке lib. Да, забыл сказать - окромя SDL тут еще имеется очень хорошая библиотечка - gl3n - математическая библиотека повторяющая синтаксис GLSL. Очень удобная.
Да, пока не забыл - мы скачали биндинги, но не сами библиотеки. Потому нам надо еще скачать саму динамическую библиотеку SDL2. Перейдем сюда (http://www.libsdl.org/download-2.0.php) и скачаем бинарную версию для Windows 32 bit. Распакуем SDL2.dll и положим ее в корень проекта.
Давайте теперь подключим необходимые библиотеки к проекту. Для этого создадим в корне проекта две папки - _imp и _lib. В первой будут лежать модули для импорта, во второй - собственно библиотеки. В D нет заголовочных файлов, за то есть модули, очень близкие по своей идеологии к Питоновским. Теперь давайте в папку _lib скопируем библиотеки DerelictUtil.lib и DerelictSDL2.lib, а в _imp создадим папку derelict и в нее скопируем папки sdl2 и util. Должна получиться следующая структура:
Теперь перейдем к настройкам проекта. Откройте свойства проекта, в разделе Compiler->General в поле Additional Imports пропишите $(ProjectDir)\_imp. Таки образом мы указали в какой папке стоит искать сторонние модули для импорта. Теперь в раздере Linker->General в поле Library Files пропишите $(ProjectDir)\_lib\DerelictSDL2.lib $(ProjectDir)\_lib\DerelictUtil.lib. Таким образом мы указываем линковщику что хотим слинковаться с данными библиотеками при сборке. Как видите - довольно похоже на C++.
Теперь давайте создадим новый файл, назовем его app.d и положим его в папку rayd. В D как и в Python - структура папок отражается на пути импорта для модуля. В данном случае наш модуль app надо будет импортировать строкой import rayd.app; Все довольно просто. Осталось наполнить новый файл кодом. Приводить код я не буду, его вы можете найти в прилагающемся к статье архиве. Там пока все очень похоже на С++, потому пока подробно останавливаться на нем не будем.
Осталось изменить main.d. Для этого заменим его содержимое на следующее:
import rayd.app; int main(string[] argv) { Application app = new Application(); if (app.Initialize()) { app.Run(); app.Destroy(); } return 0; } |
Как видим - здесь пока тоже все предельно понятно, и пока не сильно отличается от С++. Более углубленно вникать в фишки языка D мы начнем в следующей статье, которая на подходе. А пока вы можете поиграться приложенным к статье проектом.
RayD_p1.zip (1522)
[…] Читать далее » […]