Введение раскрывает все карты: язык Ди задумывался как переработанная, доведенная до совершенства, соответствующая новейшим требованиям версия языка С++. Ответ на вопрос, а почему именно так, я нашел в третьем абзаце:
“Язык Ди — это кульминация многолетнего опыта написания компиляторов для различных языков программирования”
Уолтер Брайт, создатель языка
Очевидно, всю свою жизнь он только и занимается тем, что создает основу для языков программирования. Под основой здесь понимается не синтаксис, а то, без чего языки не существуют: компилятор, линковщик, кодогенератор. Находясь в такой ситуации, грех было не воспользоваться накопленным опытом и создать новый язык, который бы решил «давно наболевшие» проблемы. Никто не знает язык лучше, чем тот, кто писал к нему компилятор, не так ли? Похоже, именно такой логикой оперировал Уолтер, когда создавал свой новый С++.
И вот, вооружившись прошлым опытом, он создает язык, который будет практичным (читай удобным в использовании), мощным (читай широкий спектр возможностей и областей применения языка) и продуктивным (читай продлевающим жизнь). Главными постулатами и ориентирами языка признаются:
Осталось понять, как это реализовано на уровне языка. Беру первый попавшийся пример - классический (правда, далеко не в каноническом виде) «hello world» с главной страницы языка:
- “Облегчение написания кода, который без особых усилий может быть перенесен от компилятора к компилятору, от компьютера к компьютеру, от одной операционной системы к другой.
- Поддержка нескольких подходов к программированию: структурный и объектно-ориентированный, как минимум.
- Легкость изучения языка для тех, кто имел дело с языками C и C++.
- Обеспечение прямого низкоуровневого доступа к оборудованию
- Наличие контекстно-независимой грамматики.
- Легкость создания интернациональных программ.
- Возможность создания легковесных и самостоятельных программ.”
#!/usr/bin/dmd -run /* sh style script syntax is supported */ /* Hello World in D To compile: dmd hello.d or to optimize: dmd -O -inline -release hello.d */ import std.stdio; void main(string[] args) { writefln("Hello World, Reloaded"); // auto type inference and built-in foreach foreach (argc, argv; args) { // Object Oriented Programming auto cl = new CmdLin(argc, argv); // Improved typesafe printf writeln(cl.argnum, cl.suffix, " arg: ", cl.argv); // Automatic or explicit memory management delete cl; } // Nested structs and classes struct specs { // all members automatically initialized int count, allocated; } // Nested functions can refer to outer // variables like args specs argspecs() { specs* s = new specs; // no need for '->' s.count = args.length; // get length of array with .length s.allocated = typeof(args).sizeof; // built-in native type properties foreach (argv; args) s.allocated = argv.length * typeof(argv[0]).sizeof; return *s; } // built-in string and common string operations writefln("argc = %d, " ~ "allocated = %d", argspecs().count, argspecs().allocated); } class CmdLin { private int _argc; private string _argv; public: this(int argc, string argv) // constructor { _argc = argc; _argv = argv; } int argnum() { return _argc 1; } string argv() { return _argv; } string suffix() { string suffix = "th"; switch (_argc) { case 0: suffix = "st"; break; case 1: suffix = "nd"; break; case 2: suffix = "rd"; break; default: break; } return suffix; } }Код, пожалуй, даже в объяснении не нуждается. В глаза бросились ключевые моменты:
- Модульная философия. Каждый файл выступает как функциональная единица.
- Диагноз «ООП головного мозга» отменяется. Заметно по тому, как main лихо расположилась в глобальном контексте.
- Вложенные в функцию конструкции. Приятно удивило, хотя, возможно, ведет к созданию плохого кода. Время покажет.
- Переменным присваиваются значения по-умолчанию. Ох, как же этого не хватало в С++!
- Выведение типов. Компилятор может сообразить в определенных контекстах, какого типа должна быть переменная.
- Ручная и автоматизированная работа с памятью.
Помимо всего вышеприведенного, Ди включает в себя:
- свое видение обобщенного программирования
- «продвинутые» массивы
- средства для быстрого создания документации к коду
- встроенные инструменты unit-тестирования
- и многое другое
Важно отметить вот еще что: присутствует поддержка совместимости с языком C. Можно напрямую взаимодействовать с уже готовыми библиотеками. Есть только одно но: понятия строк в D и C отличаются. Самое важное, что необходимо запомнить, — в Си все строки заканчиваются двоичным нулем. В Ди же, они представляются как массив символов.
Итак, после подобного инструктажа, я вполне могу перейти к коду. Все-таки проще будет познакомится с языком на конкретных примерах.
Спасибо за полезную информацию по D на русском. Я тоже решил изучать этот язык (после C++ и Java). Как вы думаете, какая IDE наиболее развита на данный момент для D ?
ОтветитьУдалитьДмитрий, здравствуйте! Прежде всего, хотел бы поблагодарить за комментарий — я уже и не надеялся увидеть в этом блоге посетителей.
ОтветитьУдалитьНасчет вашего вопроса. Вы должны понимать, что «язык Ди» — это требующая уточнения фраза. В обществе последователей языка давно существует четкое разделение на два лагеря: приверженцы первой версии и приверженцы второй.
Какая версия языка лучше — не мне судить. Но тематика этого блога такова, что я веду речь именно о первой версии языка. Поэтому советовать могу лишь только по части D1.
Учитывая ваше Солнечное™ прошлое (привет Sun Microsystems!), можно посоветовать решение на базе некогда родного и уютного Eclipse: плагин Descent (http://www.dsource.org/projects/descent/). Он покрывает абсолютно все фичи языка и делает это на невероятно качественном уровне: продвинутый, гибкий intellisense; всевозможные настройки (в том числе и автоформатирования кода); …хотя, что я вам тут рассказываю?! Можете сами посмотреть, на что способен плагин: http://www.youtube.com/view_play_list?p=1DFFABD495A9072E
Кстати, возможно даже использовать Ant для построения проекта — http://gim.jogger.pl/2009/01/14/eclipse-3-4-descent-ant-tango-linux/ (хоть речь и о Linux, но принципы настройки Ant одинаковые)
Должен предостеречь: проект был заброшен и больше не развивается. Хотя, на мой скромный взгляд, плагин полностью жизнеспособен. Если решитесь его использовать, держите при себе список «горячих клавиш» — http://www.dsource.org/projects/descent/wiki/Shortcuts — сильно помогающих во время работы.
Считаю, что это самое лучшее «IDE» (формально обозвать Descent средой разработки нельзя) для D1.
Хорошо, будем пробывать!) И вам удачи в изучении этого замечательного языка. Кстати был русскоязычный сайт dprogramming.ru , но похоже сейчас он умер (все ссылки идут на главную)
ОтветитьУдалитьПриветствую храбрых D-программистов :)
ОтветитьУдалитьСовсем недавно открыл для себя этот язык. Был приятно удивлен. До этого, в течение некоторого времени я размышлял, чего не хватает в С++, а тут смотрю - все это есть в D, и даже больше!
Сейчас пытаюсь подобрать среду разработки. Споткнулся на отладчике.
Вы все еще используете ddbg в связке с Poseidon? На сколько я смог уяснить - это компромисс между отладкой в командой строке и GUI IDE. Т.е. в редакторе модуля точку останова не поставишь. Но заметно, что посейдон подсвечивает какие-то окошки, связанные с отладкой.
Я попробовал использовать ddgb в режиме эмуляции gdb, в связке с IDE Code::Blocks. Если верить документации ddbg, таким способом можно интегрировать ddbg кодеблоксом. Но не получилось.
Не анализировали другие варианты отладчика? Или есть смысл напрячься и изучить командный интерфейс ddbg? Прежде чем ввязываться хотелось бы узнать, работает ли оно хотя бы в первом приближении?
Владислав, здравствуйте!
ОтветитьУдалитьНа самом деле, в Poseidon встроена полноценная поддержка ddbg (советую брать отсюда: http://www.dsource.org/projects/ddbg_continued). Однако, есть одна маленькая (озвученная вами) проблема: не понятно, как ставить «точки останова». Ответ когда-то давно я нашел на форуме программы: «точки останова» нужно устанавливать с зажатой клавишей Control (в простонародье — Ctrl).
Впрочем, это теперь не единственно возможный способ. Последняя версия Poseidon обзавелась соответствующим пунктом в меню «Debug». Кратенькое введение в мир Посейдоновской отладки читайте здесь: http://dsource.org/projects/poseidon/wiki/debug
Ну и про вашу историю с Code::Blocks. Вы знаете, вы не одиноки. Я тоже пытался заняться отладкой в кодеблоксе. Ничего не вышло, этот «хак» у меня не срабатывал. Хотя это было давно, может чего и изменилось. Но судя по вашему опыту — вряд ли.
А вам, Дмитрий, советую особо не расстраиваться по поводу смерти ресурса: все матерые русские специалисты по языку до сих пор сидят на IRC-канале D (сервер: http://irc.freenode.net/ имя канала: #d). Кстати, там частенько можно встретить одного знатного интеллектуала — Андрея Александреску, слыхали о таком?
Еще раз спасибо вам, дорогие посетители!
Здравствуйте, отличый блог жаль его найти в сети трудно.
ОтветитьУдалитьВсем изучающим язык d1 И d2 предлагаю переехать на ресурс ddevel.org (тематика сайта програмирование, и геймдев) Сайт еще в разработке но уже пора его забивать информацией.