Введение раскрывает все карты: язык Ди задумывался как переработанная, доведенная до совершенства, соответствующая новейшим требованиям версия языка С++. Ответ на вопрос, а почему именно так, я нашел в третьем абзаце:
“Язык Ди — это кульминация многолетнего опыта написания компиляторов для различных языков программирования”
Уолтер Брайт, создатель языка
Очевидно, всю свою жизнь он только и занимается тем, что создает основу для языков программирования. Под основой здесь понимается не синтаксис, а то, без чего языки не существуют: компилятор, линковщик, кодогенератор. Находясь в такой ситуации, грех было не воспользоваться накопленным опытом и создать новый язык, который бы решил «давно наболевшие» проблемы. Никто не знает язык лучше, чем тот, кто писал к нему компилятор, не так ли? Похоже, именно такой логикой оперировал Уолтер, когда создавал свой новый С++.
И вот, вооружившись прошлым опытом, он создает язык, который будет практичным (читай удобным в использовании), мощным (читай широкий спектр возможностей и областей применения языка) и продуктивным (читай продлевающим жизнь). Главными постулатами и ориентирами языка признаются:
Осталось понять, как это реализовано на уровне языка. Беру первый попавшийся пример - классический (правда, далеко не в каноническом виде) «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 (тематика сайта програмирование, и геймдев) Сайт еще в разработке но уже пора его забивать информацией.