Немногие слышали о молодом языке программирования, претендующем на звание языка-мэйнстрима — 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.
Начинал я на фобосе, но после долгих мучений с D2, а затем и фобосом на D1 — перешел на танго. Надеюсь к выходу книжки они допилят D2 до такого же стабильного уровня, как D1.
В языке D есть какой-то общепринятый стиль программирования? Меня немного удивило отсутствие пробелов после «if», привычных для C/C++ (возможно, кто-то их не ставит и в C, но я не часто вижу такой код).
Программы класса «Hello world» существуют для того, чтобы продемонстрировать минимальный функционал языка, а не размер исходного бинарника. Когда речь заходит о серьезных приложениях, размер дистрибутива программы как-то отходит на последний план.
К сожалению таких тестов не видел. В основном сравнивают различные компиляторы(dmd, ldc, gdc и т.п.) между собой. Видел где-то пару тестов на сравнение с Java(видимо автор чем-то тесно с ней связан), там результаты предсказуемы.
Нет, это я погорячился. В рассылке недавно как раз было. Там и C/C++, Java, C#, Python. Вобщем есть на что посмотреть. Там лежат архивы с кодом и текстовыми файлами с описанием и результатами. Тесты довольно свежие.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
А есть более конкретная информация о производительности?
Опции оптимизации не помогают.