Учим язык 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

Установка VisualD

Внимание! На момент написания статьи Антивирус Касперского активно видел в visuald.dll троян, но могу Вас заверить - это ложное срабатывание, и результаты проверки на VirusTotal тому лишнее подтверждение, так что можете смело заносить данный файл в исключения.

Теперь давайте попробуем создать проект. Запустите Visual Studio, выберите команду создать новый проект, в списке других языков выберите D, и выберите шаблон Console Application.

Создание нового проекта на D

Создание нового проекта на D

Как видим - в результате наших действий мы имеем полноценный 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 (673)

  Один комментарий в “Учим язык D на примере рейтрейсинга”

 Оставить комментарий

(required)

(required)

Вы можете использовать HTML теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© 2011 3D-Orange.com.ua
e-mail me

3D-Orange.com.ua is proudly powered by WordPress.
Suffusion theme by Sayontan Sinha