<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Linux Forum &mdash; Разработчики из Google открыли код системы сборки Ninja [opennet]]]></title>
		<link>https://linuxforum.ru/viewtopic.php?id=10754</link>
		<atom:link href="https://linuxforum.ru/extern.php?action=feed&amp;tid=10754&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Разработчики из Google открыли код системы сборки Ninja [opennet]».]]></description>
		<lastBuildDate>Tue, 08 Feb 2011 18:49:10 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Разработчики из Google открыли код системы сборки Ninja [opennet]]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=142585#p142585</link>
			<description><![CDATA[<p>Звучит неплохо. Может, через некоторое время даже и make заменит.</p>]]></description>
			<author><![CDATA[null@example.com (bobr)]]></author>
			<pubDate>Tue, 08 Feb 2011 18:49:10 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=142585#p142585</guid>
		</item>
		<item>
			<title><![CDATA[Разработчики из Google открыли код системы сборки Ninja [opennet]]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=142383#p142383</link>
			<description><![CDATA[<p>Под лицензией Apache <a href="http://neugierig.org/software/chromium/notes/2011/02/ninja.html">открыты</a> исходные тексты проекта <a href="https://github.com/martine/ninja">Ninja</a>, созданного разработчиками из компании Google в процессе портирования web-браузера Chrome для Linux и Mac OS X. Ninja <a href="http://martine.github.com/ninja/manual.html">представляет собой</a> упрощенный вариант программы make, оптимизированный для значительного ускорения процесса повторной сборки крупных проектов, после внесения незначительных изменений в код. Ninja не поддерживает сложные сценарии принятия решений и оперирует простейшими правилами для описания зависимостей между файлами собираемого проекта. Вопрос учета системных зависимостей выносятся на плечи внешних инструментов, таких как пакет autotools.</p><p>Изначально, прототип Chrome был создан только для Windows и разработчики для упрощения переноса на другие платформы попытались адаптировать для данной задачи систему <a href="http://www.scons.org/">Scons</a>, но столкнулись с рядом трудностей. В частности, ценой простоты использования написанной на языке Python утилиты Scons была низкая производительность - на предсборочный анализ 30 тыс. файлов уходило примерно 40 секунд, а на пересборку бинарного файла после изменения всего одного файла с кодом тратилось до 8 минут. Не желая мириться с подобными задержками, подрывающими производительность труда, разработчики переписали правила сборки с использованием классических Make-сценариев, использование которых позволило сократить время сборки до 10-20 секунд, которые, благодаря высокопроизводительному линкеру, в основном уходили на предсборочный анализ.</p><p>Но и 10 секунд показалось разработчикам большим расточительством, что дало повод задуматься о дальнейшей оптимизации и провести анализ узких мест в стандартой утилите GNU Make. В итоге за несколько дней на языке С++ была написана утилита Ninja, концептуально очень похожая на Make, но избавленная от некоторых тяжеловесных возможностей, таких как правила-суффиксы, функции, встроенные правила, такие как поиск в RCS. Использование Ninja позволило свести время выполнения служебных операций в процессе пересборки Chrome до 1 секунды. Общее время пересборки после модификации одного файла было уменьшено до 6 секунд.</p><p>Дополнительно в Ninja была добавлена поддержка некоторых новых возможностей, например:</p><ul><li><p>Буферизация вывода всех параллельно выполняемых команд, что позволило более точно ассоциировать ошибку с вызвавшей её командой, без смешивания с выводом от других процессов;</p></li><li><p>Правило может ссылаться на дополнительную информацию о разрешении неявных зависимостей, что позволяет, например, обеспечить корректный учет зависимостей заголовочных файлов;</p></li><li><p>Процесс сборки может приводить к созданию сразу нескольких целевых файлов;</p></li><li><p>Формирование целевого файла косвенно зависит от формирующей его командной строки, т.е. изменение опций компилятора приводит к пересборке соответствующих файлов;</p></li><li><p>Директории для помещения результатов сборки создаются до выполнения связанных с ними правил;</p></li><li><p>При выполнении правил могут использоваться краткие описания выполняемых команд, например, &quot;CC foo.o&quot; вместо длинной командной строки;</p></li></ul><p><a href="http://www.opennet.ru/opennews/art.shtml?num=29525">http://www.opennet.ru/opennews/art.shtml?num=29525</a></p>]]></description>
			<author><![CDATA[null@example.com (XRevan86)]]></author>
			<pubDate>Tue, 08 Feb 2011 13:30:03 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=142383#p142383</guid>
		</item>
	</channel>
</rss>
