The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]

08.02.2011 11:12  Разработчики из компании Google открыли код системы сборки Ninja

Под лицензией Apache открыты исходные тексты проекта Ninja, созданного разработчиками из компании Google в процессе портирования web-браузера Chrome для Linux и Mac OS X. Ninja представляет собой упрощенный вариант программы make, оптимизированный для значительного ускорения процесса повторной сборки крупных проектов, после внесения незначительных изменений в код. Ninja не поддерживает сложные сценарии принятия решений и оперирует простейшими правилами для описания зависимостей между файлами собираемого проекта. Вопрос учета системных зависимостей выносятся на плечи внешних инструментов, таких как пакет autotools.

Изначально, прототип Chrome был создан только для Windows и разработчики для упрощения переноса на другие платформы попытались адаптировать для данной задачи систему Scons, но столкнулись с рядом трудностей. В частности, ценой простоты использования написанной на языке Python утилиты Scons была низкая производительность - на предсборочный анализ 30 тыс. файлов уходило примерно 40 секунд, а на пересборку бинарного файла после изменения всего одного файла с кодом тратилось до 8 минут. Не желая мириться с подобными задержками, подрывающими производительность труда, разработчики переписали правила сборки с использованием классических Make-сценариев, использование которых позволило сократить время сборки до 10-20 секунд, которые, благодаря высокопроизводительному линкеру, в основном уходили на предсборочный анализ.

Но и 10 секунд показалось разработчикам большим расточительством, что дало повод задуматься о дальнейшей оптимизации и провести анализ узких мест в стандартой утилите GNU Make. В итоге за несколько дней на языке С++ была написана утилита Ninja, концептуально очень похожая на Make, но избавленная от некоторых тяжеловесных возможностей, таких как правила-суффиксы, функции, встроенные правила, такие как поиск в RCS. Использование Ninja позволило свести время выполнения служебных операций в процессе пересборки Chrome до 1 секунды. Общее время пересборки после модификации одного файла было уменьшено до 6 секунд.

Дополнительно в Ninja была добавлена поддержка некоторых новых возможностей, например:

  • Буферизация вывода всех параллельно выполняемых команд, что позволило более точно ассоциировать ошибку с вызвавшей её командой, без смешивания с выводом от других процессов;
  • Правило может ссылаться на дополнительную информацию о разрешении неявных зависимостей, что позволяет, например, обеспечить корректный учет зависимостей заголовочных файлов;
  • Процесс сборки может приводить к созданию сразу нескольких целевых файлов;
  • Формирование целевого файла косвенно зависит от формирующей его командной строки, т.е. изменение опций компилятора приводит к пересборке соответствующих файлов;
  • Директории для помещения результатов сборки создаются до выполнения связанных с ними правил;
  • При выполнении правил могут использоваться краткие описания выполняемых команд, например, "CC foo.o" вместо длинной командной строки.


  1. Главная ссылка к новости (http://neugierig.org/software/...)
  2. OpenNews: Google представила инструментарий разработчика ПО с открытым исходным кодом
Лицензия: CC-BY
Тип: Программы
Ключевые слова: make, build, ninja, google
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Ajax/Линейный | Раскрыть все сообщения | RSS
 
  • 1.1, dimqua (ok), 12:11, 08/02/2011 [ответить] [показать ветку] [···]    [к модератору]
  • +5 +/
    Хм, странно что сразу не открыли.
     
  • 1.2, Аноним (-), 12:15, 08/02/2011 [ответить] [показать ветку] [···]    [к модератору]
  • –9 +/
    ничего странного, могли вообще не открывать - не обязаны
     
     
  • 2.11, dimqua (ok), 13:15, 08/02/2011 [^] [ответить]    [к модератору]
  • +1 +/
    Если уж решили открывать, то странно что не сделали этого сразу. Чего ждали интересно.
     
     
  • 3.29, QuAzI (ok), 18:54, 08/02/2011 [^] [ответить]     [к модератору]
  • +1 +/
    Ждали, когда оно маленько заработало и стабилизировалось А то много вечно недов... весь текст скрыт [показать]
     
     
  • 4.32, dimqua (ok), 22:25, 08/02/2011 [^] [ответить]    [к модератору]  
  • +/
    Если бы сабж был игрой какой-нибудь, тогда было бы понятно. Но вариант программы make это ведь не для хомячков, ну. :)
     
  • 1.4, Аноним (-), 12:17, 08/02/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Интересно, на каком железе у них за 6 секунд собирается?
     
     
  • 2.6, Lain_13 (?), 12:31, 08/02/2011 [^] [ответить]    [к модератору]  
  • +7 +/
    За 6 секунд при изменении одного файла. В этом вся идея, как я понял. Т.е. сидишь ты, колупаешься с одним файликом. Тыц — пересобрал, запустил, погонял и колупаешься дальше. Представляешь каково оно минут 10 минут ждать пока весь проект пересоберётся ради проверки одного мелкого изменения? Тут даже минуту ждать невыносимо.
     
     
  • 3.8, paulus (ok), 12:47, 08/02/2011 [^] [ответить]    [к модератору]  
  • +/
    гентушники говорят, что хромиум собирается как опенофис (сам не проверял), так что ускорение данного процесса явно не лишнее :-)
     
     
  • 4.14, h31 (ok), 14:10, 08/02/2011 [^] [ответить]    [к модератору]  
  • +1 +/
    Тут немного не то. В топике идет речь о времени, которое уходит на служебные операции. Сама по себе компиляция не успорится.
     
  • 4.19, anonix (?), 14:58, 08/02/2011 [^] [ответить]     [к модератору]  
  • +/
    Сборка в дженту, арче, да вообще везде не изменится по скорости никак Потому ка... весь текст скрыт [показать]
     
  • 4.24, User294 (ok), 17:43, 08/02/2011 [^] [ответить]     [к модератору]  
  • +/
    Редкий гентушник что-то меняет в собираемых исходниках, так что реально мало к... весь текст скрыт [показать]
     
  • 1.5, Aleksey (??), 12:19, 08/02/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Перешел с Scons на Waf (https://code.google.com/p/waf/) и крайне доволен. Особенно радует скорость на крупных проектах.
     
     
  • 2.16, cdome (ok), 14:37, 08/02/2011 [^] [ответить]    [к модератору]  
  • +/
    +1. Согласен,

    Причем у меня waf быстрее даже make работает

     
  • 2.25, Аноним (-), 17:49, 08/02/2011 [^] [ответить]     [к модератору]  
  • +/
    А мы не видим альтернативы cmake В waf в отличие от scons даже о портабельнос... весь текст скрыт [показать]
     
     
  • 3.28, Aleksey (??), 18:18, 08/02/2011 [^] [ответить]     [к модератору]  
  • +/
    Согласен, что waf еще не достаточно распространен, но из этого не следует, что о... весь текст скрыт [показать]
     
     
  • 4.30, Аноним (-), 20:30, 08/02/2011 [^] [ответить]     [к модератору]  
  • +/
    Ещё Никогда не будет, потому что маргинален И не он не портабельный, а скрипты... весь текст скрыт [показать]
     
     
  • 5.33, Alexey (??), 22:30, 08/02/2011 [^] [ответить]     [к модератору]  
  • +/
    Во-первых, Python всяко лучше, чем тот недоязык который есть в cmake Во-вторых,... весь текст скрыт [показать]
     
     
  • 6.35, Аноним (-), 02:19, 09/02/2011 [^] [ответить]     [к модератору]  
  • +/
    Это недалёкий фанатизм Система сборки должна иметь простой и понятный синтаксис... весь текст скрыт [показать]
     
     
  • 7.45, Yaro (?), 21:10, 12/02/2011 [^] [ответить]    [к модератору]  
  • +/
    Согласен с вами,
    В cmake нет ничего для C# потому что C# и кросс-платформенность - взаимоисключающие пункты.
     
  • 1.7, LuckAs (ok), 12:39, 08/02/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Маньяки, им 10 секунд было много компилировать то, что они разрабатывают как минимум несколько дней.
     
     
  • 2.26, Одмин (?), 17:58, 08/02/2011 [^] [ответить]    [к модератору]  
  • +/
    Эти несколько дней они сотни раз проект пересобирают. По крайней мере надеюсь что хром это не write-only проект :)
     
  • 1.9, Аноним (-), 12:55, 08/02/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • –2 +/
    А про cmake они наверное не слышали.. Их Ninja только с -j1 собирать может :(
     
     
  • 2.10, Сергей (??), 12:58, 08/02/2011 [^] [ответить]    [к модератору]  
  • +1 +/
    cmake пользуется make-ом
     
     
  • 3.23, Аноним (-), 17:35, 08/02/2011 [^] [ответить]     [к модератору]  
  • +/
    Это отнюдь не исключает того факта что Ninja только с -j1 собирать может А CMa... весь текст скрыт [показать]
     
     
  • 4.27, Аноним (-), 18:08, 08/02/2011 [^] [ответить]     [к модератору]  
  • +/
    gt оверквотинг удален Это не замена CMake Это вместо make, возможно будет нов... весь текст скрыт [показать]
     
  • 2.12, Аноним122333 (?), 13:15, 08/02/2011 [^] [ответить]    [к модератору]  
  • +1 +/
    тогда к чему было это:

    >>>Буферизация вывода всех параллельно выполняемых команд, что позволило более точно ассоциировать ошибку с вызвавшей её командой, без смешивания с выводом от других процессов;<<<

    ???

     
  • 1.13, Аноним (-), 13:23, 08/02/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +1 +/
    Из README:

    Though the code is copyright Google, don't take that as an
    endorsement; I wrote this in my spare time for fun.

    Вот с этого надо было начать новость.

     
  • 1.15, sluge (ok), 14:28, 08/02/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    ccache+distcc спасут гиганта мысли
     
     
  • 2.31, Аноним (-), 22:00, 08/02/2011 [^] [ответить]     [к модератору]  
  • +1 +/
    Читать и думать вообще не умеем Когда изменяется один исходник нужно - скомпили... весь текст скрыт [показать]
     
     
  • 3.37, Вова (?), 12:51, 09/02/2011 [^] [ответить]    [к модератору]  
  • +/
    И как часто случается, самые грамотные каменты от анонимов. Я вчера ровно на этом месте впал в эйфорию, начитавшись серебряных пуль в вышестоящих комментариях. Отокомментил по смыслу то же самое, что и вы, как обычно - по делу, без оффтопа, кратко и осмысленно. Но сервер, видимо, сбоит (фс сыпется?) каменты пропадают.
     
  • 1.34, Аноним (-), 23:34, 08/02/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    > высокопроизводительному линкеру

    Что за производительный линкер? Не binutils/ld надеюсь?

     
  • 1.36, Аноним (-), 11:48, 09/02/2011 [ответить] [показать ветку] [···]     [к модератору]  
  • +/
    На haskell отличная система сборки ghc --make someModule hs Дальше парсится код... весь текст скрыт [показать]
     
     
  • 2.38, Аноним (-), 14:11, 09/02/2011 [^] [ответить]     [к модератору]  
  • +/
    Ну в песочнице из одного файла я так и для C могу сделать Напомню, что в реальн... весь текст скрыт [показать]
     
     
  • 3.39, Аноним (-), 15:00, 09/02/2011 [^] [ответить]    [к модератору]  
  • +/
    Для C такое и не сделаешь - обычно задача стоит собрать нечто из
    кучи разнородного содержимого.
    Но для управляемых языков отсутствие действительно удобных средств сборки странно.
     
  • 1.40, Ne01eX (??), 16:46, 09/02/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Так-то если столмановский мейк кастрировать, то он тоже будет шустро работать... :-\
     
     
  • 2.42, Andrey Mitrofanov (?), 18:50, 09/02/2011 [^] [ответить]    [к модератору]  
  • +1 +/
    Тебе тож не отрезать, а даже прищемить -- ещё не так _забегаешь

     
     
  • 3.44, Ne01eX (??), 00:23, 11/02/2011 [^] [ответить]    [к модератору]  
  • +/
    Ну так и я про тоже =)
     
  • 1.41, Аноним (-), 18:33, 09/02/2011 [ответить] [показать ветку] [···]     [к модератору]  
  • +1 +/
    А нехрен было все внешние либы тащить в проект, у них там в исходниках 5 хромиу... весь текст скрыт [показать]
     
     
  • 2.43, LuckAs (ok), 16:25, 10/02/2011 [^] [ответить]    [к модератору]  
  • +/
    Думаю так оно и есть, пусть делают типа как Опера:
    - shared (работает с либами установленными в системе)
    - static (слинкованый с своими внутренними либами и работает с инсталятора)
    тогда видно разницу будет.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:


      Закладки на сайте
      Проследить за страницей
    Created 1996-2018 by Maxim Chirkov  
    ДобавитьПоддержатьВебмастеруГИД  
    Hosting by Ihor