<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF93%3A%D0%A7%D1%82%D0%BE_%D0%B7%D0%B0_%D1%88%D1%82%D1%83%D0%BA%D0%B0</id>
		<title>LXF93:Что за штука - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF93%3A%D0%A7%D1%82%D0%BE_%D0%B7%D0%B0_%D1%88%D1%82%D1%83%D0%BA%D0%B0"/>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF93:%D0%A7%D1%82%D0%BE_%D0%B7%D0%B0_%D1%88%D1%82%D1%83%D0%BA%D0%B0&amp;action=history"/>
		<updated>2026-05-13T21:15:16Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.11.1</generator>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF93:%D0%A7%D1%82%D0%BE_%D0%B7%D0%B0_%D1%88%D1%82%D1%83%D0%BA%D0%B0&amp;diff=4032&amp;oldid=prev</id>
		<title>Makoron в 17:23, 5 апреля 2008</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF93:%D0%A7%D1%82%D0%BE_%D0%B7%D0%B0_%D1%88%D1%82%D1%83%D0%BA%D0%B0&amp;diff=4032&amp;oldid=prev"/>
				<updated>2008-04-05T17:23:42Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 17:23, 5 апреля 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Что за штука...D?&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;== &lt;/ins&gt;Что за штука...D? &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Вам наскучил B? Надоел C? '''Пол Хадсон '''проследует по алфавиту и покажет новый способ программировать.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Вам наскучил B? Надоел C? '''Пол Хадсон '''проследует по алфавиту и покажет новый способ программировать.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Makoron</name></author>	</entry>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF93:%D0%A7%D1%82%D0%BE_%D0%B7%D0%B0_%D1%88%D1%82%D1%83%D0%BA%D0%B0&amp;diff=4031&amp;oldid=prev</id>
		<title>Makoron: Новая: Что за штука...D?  Вам наскучил B? Надоел C? '''Пол Хадсон '''проследует по алфавиту и покажет новый способ п...</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF93:%D0%A7%D1%82%D0%BE_%D0%B7%D0%B0_%D1%88%D1%82%D1%83%D0%BA%D0%B0&amp;diff=4031&amp;oldid=prev"/>
				<updated>2008-04-05T17:21:56Z</updated>
		
		<summary type="html">&lt;p&gt;Новая: Что за штука...D?  Вам наскучил B? Надоел C? '''Пол Хадсон '''проследует по алфавиту и покажет новый способ п...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Что за штука...D?&lt;br /&gt;
&lt;br /&gt;
Вам наскучил B? Надоел C? '''Пол Хадсон '''проследует по алфавиту и покажет новый способ программировать.&lt;br /&gt;
&lt;br /&gt;
'''»Это была шутка насчет «B», так ведь?'''&lt;br /&gt;
&lt;br /&gt;
Э-э-э...?&lt;br /&gt;
&lt;br /&gt;
'''»Я слышал про C. Так называется язык программирования, на котором написано ядро Linux.'''&lt;br /&gt;
&lt;br /&gt;
Ну да. А еще - большая часть Gnome, ''X.org, Apache ''и тысячи других проектов.&lt;br /&gt;
&lt;br /&gt;
'''» Достаточно, я понял. Но неужели вы хотите сказать, что язык программирования B тоже существует?'''&lt;br /&gt;
&lt;br /&gt;
Уверяю вас, так оно и есть. Язык B существовал еще до C, и вообще говоря, С является прямым потомком B. Такие хорошо известные элементы C, как операторы ++ и --, а также комментарии вида /* */ впервые появились в B. Но у B были свои ограничения, и поэтому его создатели, Кен Томпсон (Ken Thompson) и Дэннис Ричи (Dennis Ritchie), разработали кое-что получше.&lt;br /&gt;
&lt;br /&gt;
'''»И назвали C?'''&lt;br /&gt;
&lt;br /&gt;
Точно! Так как эта буква следует за B в латинском алфавите.&lt;br /&gt;
&lt;br /&gt;
'''»Выходит, шутка про C++ не такая уж и оригинальная!'''&lt;br /&gt;
&lt;br /&gt;
Ну да, хотя любой хороший программист подтвердит вам, что правильнее было бы назвать его ++С.&lt;br /&gt;
&lt;br /&gt;
'''» Простите, не понял...'''&lt;br /&gt;
&lt;br /&gt;
Неважно. Сегодня мы говорим про D. По этому названию вы можете видеть, что авторы рассчитывают сделать очередное улучшение над C и С++.&lt;br /&gt;
&lt;br /&gt;
'''» Примерно как Java и C#?'''&lt;br /&gt;
&lt;br /&gt;
Ну, их создатели тоже считали, что занимаются улучшением C и С++. Но, в отличие от Java и C#, D разрабатывается как расширение C++, каким в свое время С++ был для C. Благодаря этому программистам на C++ будет легко выучить его. При этом у D есть много новых возможностей, таких как встроенная поддержка Unicode и сборка мусора.&lt;br /&gt;
&lt;br /&gt;
'''»Хм, но про Java и C# говорят в точности то же самое! Разве нам не достаточно существующих перепевок С++?'''&lt;br /&gt;
&lt;br /&gt;
Но вы не слышали еще об одном важном отличии! Java и C# работают в виртуальных машинах и благодаря этому могут обеспечить самую причудливую защиту памяти. А D компилируется в родной машинный код, точно так же как C. Это означает, что (теоретически) код, написанный на D и на С будет работать с одинаковой скоростью. Кроме того, системные вызовы D совместимы со стандартом С, чего не скажешь о Java или C#, которым требуется специальный промежуточный слой, чтобы выбраться из виртуальной песочницы.&lt;br /&gt;
&lt;br /&gt;
'''»А какие еще функции D унаследованы от C#?'''&lt;br /&gt;
&lt;br /&gt;
Как и C# или Java, язык D содержит string в числе базовых типов данных, а это значит, что про символьные массивы можно счастливо забыть. В стандартной библиотеке C++ уже есть концепция строкового типа, но там он прикручен сбоку и не является неотъемлемой частью языка. Например, вы пробовали сделать блок switch/case на основе строковой переменной? Нет? Это потому, что в C++ это было бы невозможно.&lt;br /&gt;
&lt;br /&gt;
Превращение строк в более сложные объекты нарушает совместимость с C, но это не проблема - вы всегда можете использовать для любой D-строки метод c_str(), который возвращает обычный символьный массив, пригодный для передачи в любую функцию C.&lt;br /&gt;
&lt;br /&gt;
Кстати, в D стали умнее не только символьные массивы. Фактически, все массивы в D автоматически обзавелись метаданными, такими как размер. В C эту информацию приходилось сопровождать и обрабатывать вручную.&lt;br /&gt;
&lt;br /&gt;
Некоторые новые ключевые слова, такие как finally (выполнить некий блок кода в любой ситуации) или foreach (быстрый перебор элементов массива), тоже были привнесены в D из C#.&lt;br /&gt;
&lt;br /&gt;
'''»Итак, D - это некоторое расширение C++?'''&lt;br /&gt;
&lt;br /&gt;
У D есть много функций, привнесенных из других языков программирования, но помимо этого, его разработчики воспользовались случаем избавиться от некоторых элементов C++, которые им нравились меньше всего. Например, под нож попало множественное наследование. Препроцессор тоже был уничтожен, а это значит, что макросы погибли вместе с ним. Пропали заголовочные файлы, пространства имен и ранние объявления (forward declarations). Последние оставались еще с тех времен, когда компиляторы были гораздо менее умными. Ну и, конечно, появилась автоматическая сборка мусора...&lt;br /&gt;
&lt;br /&gt;
'''» Погодите, разве вы не говорили только что, что D совместим с C?'''&lt;br /&gt;
&lt;br /&gt;
Э нет, я говорил что D совместим с системными вызовами C, то есть вы можете пользоваться C-функциями вроде printf() в D-программах. Но, из-за большого объема добавлений и удалений, D и C не совместимы на уровне исходного кода. Это значит, что вы не можете взять C-код и скомпилировать его с помощью компилятора D. Но некоторые новшества D, вроде использования int[3] foo вместо int foo[3], в целях обратной совместимости можно и проигнорировать, так что переносите свой код на D, когда будете к этому готовы.&lt;br /&gt;
&lt;br /&gt;
'''»Если D включает в себя сборку мусора, как он может создавать столь же быстрый код, что и C?'''&lt;br /&gt;
&lt;br /&gt;
Ну, на самом деле современные системы сборки мусора позволяют программам работать даже быстрее, чем программы с ручным управлением памятью. Да, я знаю, что это противоречит вашим интуитивным ощущениям, но подождите, и я все объясню.&lt;br /&gt;
&lt;br /&gt;
Во-первых, сборка мусора запускается только тогда, когда памяти становится слишком мало, а это значит, что память не освобождается, пока в этом не появится необходимость. Для большинства программ может оказаться, что за время их работы сборка мусора не запустится ни разу - а это большой выигрыш в производительности по сравнению с С, в котором память освобождается всегда, вне зависимости от того, нужна она сейчас для чего-нибудь еще или нет.&lt;br /&gt;
&lt;br /&gt;
Во-вторых, объекты C++ освобождают память с помощью вызова метода деструктора, что может сильно замедлить работу, особенно если нужно освободить несколько тысяч объектов. В-третьих, сборка мусора автоматически перегруппирует кучу, что улучшает производительность памяти.&lt;br /&gt;
&lt;br /&gt;
'''» Достаточно! Но ведь в сборке мусора должны быть и отрицательные моменты.'''&lt;br /&gt;
&lt;br /&gt;
Да, и вполне обычные - она увеличивает объем кода, а также вполне может запуститься в тот момент, когда вам меньше всего этого хотелось бы, что может время от времени приводить к появлению маленьких пауз в работе вашего приложения. Но эти проблемы совершенно ничтожны по сравнению с тем, сколько времени сборка мусора экономит для программиста! Последней сложностью является необходимость модифицировать ее код так, чтобы он мог запускаться на различных операционных системах.&lt;br /&gt;
&lt;br /&gt;
'''»О, вы меня просто заинтриговали этим D! Как бы мне попробовать его на практике?'''&lt;br /&gt;
&lt;br /&gt;
Никак. D существует только в теории.&lt;br /&gt;
&lt;br /&gt;
'''»Что? Вы хотите сказать, что я провел последние 10 минут, забивая свою голову этой...'''&lt;br /&gt;
&lt;br /&gt;
Шучу, шучу. На самом деле уже существует два работающих компилятора D - ''DMD ''и ''GDC. ''Первый из них -это официальный пример реализации компилятора, а второй - модуль к GCC. Официальный компилятор хорош своей 100% совместимостью со стандартом, чего пока нельзя сказать по ''GDC. ''Но при этом ''DMD ''имеет частично закрытые исходные тексты - часть, преобразующая D в промежуточный код, открыта, а вот компилятор промежуточного кода в тот или иной машинный - проприетарный. Сейчас эту проблему решают так: CDG использует открытый модуль, а результат его работы передает GCC, имеющему свой собственный слой генерации машинного кода. Благодаря этому ''GDC ''работает на большом числе платформ, включая Linux, Mac OS X, FreeBSD, Windows и AIX, как на 32-х, так и на 64-битных компьютерах.&lt;br /&gt;
&lt;br /&gt;
'''»Мне казалось, что GCC работает на большем количестве платформ.'''&lt;br /&gt;
&lt;br /&gt;
Так и есть, но как я уже упоминал, код сборщика мусора приходится модифицировать для каждой новой операционной системы. Это не такая уж большая работа, и ее нужно сделать только один раз при портировании GCD на новую платформу, но пока ее сделали только для тех систем, которые я перечислил выше.&lt;br /&gt;
&lt;br /&gt;
'''»Вам пора привести список ссылок, поскольку доступное место уже кончается.'''&lt;br /&gt;
&lt;br /&gt;
Хе, вовремя подмечено! О’кей, если вы хотите побольше узнать про D, зайдите на его официальную домашнюю страницу по адресу http://www.digitalmars.com/d/index.html. Вы можете скачать компилятор ''DMD ''на этой же странице (посмотрите под меню Tool в левой ее части). Компилятор ''GDC ''расположен на SourceForge: http://dgcc.sourceforge.net/.&lt;br /&gt;
&lt;br /&gt;
Если вы любите работать с подсветкой синтаксиса при редактировании кода, то вам будет приятно узнать, что многие редакторы уже поддерживают синтаксис D. ''Vim, ''начиная с версии 6.3, включает режим D как один из стандартных. Пользователи ''Emacs ''могут скачать модуль для D с http://www.prowiki.org/wiki4d/wiki.cgi?EditorSupport/EmacsDMode . Если вы используете Kate, то вам не повезло. Но даже если ваш любимый редактор не понимает D, вы можете попытать счастья с режимами Java или C#, поскольку их синтаксис наиболее близок к синтаксису D.&lt;br /&gt;
&lt;br /&gt;
'''»Круто! Большое спасибо за то, что рассказали мне про D. Если на этом все, то я пойду и попробую поработать с ним прямо сейчас!'''&lt;br /&gt;
&lt;br /&gt;
Пожалуйста! А в следующем месяце мы с вами рассмотрим E.&lt;br /&gt;
&lt;br /&gt;
'''»E?! Это шутка, так ведь?'''&lt;br /&gt;
&lt;br /&gt;
Подождите немного, и увидите.&lt;/div&gt;</summary>
		<author><name>Makoron</name></author>	</entry>

	</feed>