FireForgeПрактика программирования на языке D

Немногие слышали о молодом языке программирования, претендующем на звание языка-мэйнстрима — D. Однако о нем все чаще и чаще начинают писать в интернете. Я тоже хочу сделать свой вклад в распространение данного языка.
О самом языке можно достаточно легко найти информацию в интернете, поэтому я только приведу неполный список его особенностей:
?Наличие сборщика мусора, однако остается возможность ручного выделения памяти, или полного отключения сборщика мусора.
?Легкий доступ к функциям на С. Также поддерживает все типы С.
?Встроенный ассемблер.
?С-style синтаксис.
?Очень быстрая компиляция.
?Поддержка стандартными дебаггерами.
?Контрактное программирование, юнит-тестирование и другие техники программирования являются частью языка.
?Отсутствие макросов и заголовочных файлов.

Это далеко не все, но я закончу и добавлю от себя: язык достаточно отличается как от С/С++, так и от Java/C#. Однако писать на нем приятно и легко. Он одновременно позволяет быстро писать программы и оставляет возможность для глубокой оптимизации. Единственное что мешает, так это 2 несовместимых версии языка, 2 стандартных библиотеки и малое число книг по языку: я знаю о Learn Tango with D и The D programming language, которую Александреску собирается выпустить в марте. Кстати он выложил в открытый доступ 4 главу из будущей книги.

Как многие знают, изучать новый язык легче всего не на вымышленных примерах, а на реальных задачах. Поэтому могу предложить свой небольшой проект, который изначально намечался как маленький скрипт на шеле, но позже был отмечен как хороший пример для изучения возможностей языка и стандартной бибилиотеки.

Суть проекта — получение актуального расписания электричек между двумя станциями на заданную дату/время. Т.к. при последнем изменении расписания(из-за запуска так называемого «сапсана») tutu очень долго не хотел обновляться, то пришла в голову идея о своего рода агрегаторе расписаний. На данный момент программа может тянуть данные с tutu.ru и rasp.yandex.ru. Данные об источниках расписания берутся из xml файла, поэтому если вы найдете еще какие-либо места, и при этом в строке запроса не будет каких-либо хитрых параметров(а тут впринципе им неоткуда взяться), то можете просто поправить файлик с конфигом без перекомпиляции программы(ну и конечно оповестить меня, чтобы я добавил его в дефолтный конфиг). Собственно это не все, что входит в рамки данного проекта. Как минимум есть планы на написание средства для более быстрой отправки смс с полученным расписанием. Да, я ленивый:), собственно именно из-за лени и пришлось писать такой агрегатор.

И так, чем может быть полезен код этого проекта? Он писался с использованием D1 и Tango(trunk-r5273). На данный момент в нем можно посмотреть такие вещи как:
?Работу с xml.
?HttpGet запросами (думаю в скором времени появятся и Post).
?Конвертирование строк из cp-1251 в Utf-8.
?Парсинг аргументов командной строки.
?Работу с регулярными выражениями.
?Ну и мелочевка типа: форматированный I/O, ассоциативные массивы, динамические массивы, slicing, локальное время, обработка исключений…

Нестоит смотреть на данный код как на какое-либо руководство, и тем более считать его качественным. При его написании был сделан упор на раскрытие языка, поэтому в нем можно легко найти какие-либо неоптимизированные участки кода или вообще ошибки (пару я уже знаю).

Проект выложен на FireForge под лицензией GPLv3. Также хочу отдельно поблагодарить fireball'а за оперативность и индивидуальный подход к каждому проекту. Так держать!

ЗЫ: Код тестировался на 32-битных линуксах(Arch+Kubuntu) и частично на WindowsXP. На 64-битном арче не работает конвертирование cp-1251 -> Utf-8. Но думаю компилирование исходников на родной машине дело исправит. На данный момент сборка доступна только под linux32, но надеюсь, что в ближайшее время сделаю сборку для win32.
  • +8
  • 4ybaka
  • 12 января 2010, 12:13

Комментарии (17)

отлично, посмотрим, жаль только что танго — его в репах нету :(
не могу найти исходников, не могли бы вы кинуть прямую линку?
Тут описание как вытянуть из SVN репозиотрия. Если не нужно, то тут веб интерфейс.
спасибо
Начинал я на фобосе, но после долгих мучений с D2, а затем и фобосом на D1 — перешел на танго. Надеюсь к выходу книжки они допилят D2 до такого же стабильного уровня, как D1.
Спасибо, впервые читаю код на языке D. Но о существовании языка узнал раньше, из статьи по ссылке с ЛОРа: www.linux.org.ru/view-message.jsp?msgid=4243077
Мне одному кажется, что уж очень ни C# похоже? :)
Просто я программирую именно на C#:) Как известно, программист на ассемблере и из С++ сделает ассемблер…
В языке D есть какой-то общепринятый стиль программирования? Меня немного удивило отсутствие пробелов после «if», привычных для C/C++ (возможно, кто-то их не ставит и в C, но я не часто вижу такой код).
Вообще есть, но про пробелы после if я ничего не видел. Да и на работе по стандартам тоже их нет, поэтому даже желания не возникает)
  • avatar
  • Q2W
  • 14 января 2010, 01:16
  • #
  • 0
А как у него с производительностью? В сравнении с C/C++.
ходят слухи, что на уровне, правда вот бинари впечатляют размером по сравнению с С
Размер бинарика в наше время не сильно важен.
А есть более конкретная информация о производительности?
Попробовал собрать «Hello, world!» — 511 КБ.
Опции оптимизации не помогают.
Программы класса «Hello world» существуют для того, чтобы продемонстрировать минимальный функционал языка, а не размер исходного бинарника. Когда речь заходит о серьезных приложениях, размер дистрибутива программы как-то отходит на последний план.
К сожалению таких тестов не видел. В основном сравнивают различные компиляторы(dmd, ldc, gdc и т.п.) между собой. Видел где-то пару тестов на сравнение с Java(видимо автор чем-то тесно с ней связан), там результаты предсказуемы.
Нет, это я погорячился. В рассылке недавно как раз было. Там и C/C++, Java, C#, Python. Вобщем есть на что посмотреть. Там лежат архивы с кодом и текстовыми файлами с описанием и результатами. Тесты довольно свежие.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.