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, 12:11, 08/02/2011 [ответить] [смотреть все]
  • +5 +/
    Хм, странно что сразу не открыли.
     
  • 1.2, Аноним, 12:15, 08/02/2011 [ответить] [смотреть все]
  • –9 +/
    ничего странного, могли вообще не открывать - не обязаны
     
     
  • 2.11, dimqua, 13:15, 08/02/2011 [^] [ответить] [смотреть все] [показать ветку]
  • +1 +/
    Если уж решили открывать, то странно что не сделали этого сразу Чего ждали инте... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.29, QuAzI, 18:54, 08/02/2011 [^] [ответить] [смотреть все]  
  • +1 +/
    Ждали, когда оно маленько заработало и стабилизировалось А то много вечно недов... весь текст скрыт [показать]
     
     
  • 4.32, dimqua, 22:25, 08/02/2011 [^] [ответить] [смотреть все]  
  • +/
    Если бы сабж был игрой какой-нибудь, тогда было бы понятно Но вариант программы... весь текст скрыт [показать]
     
  • 1.4, Аноним, 12:17, 08/02/2011 [ответить] [смотреть все]  
  • +/
    Интересно, на каком железе у них за 6 секунд собирается?
     
     
  • 2.6, Lain_13, 12:31, 08/02/2011 [^] [ответить] [смотреть все] [показать ветку]  
  • +7 +/
    За 6 секунд при изменении одного файла. В этом вся идея, как я понял. Т.е. сидишь ты, колупаешься с одним файликом. Тыц — пересобрал, запустил, погонял и колупаешься дальше. Представляешь каково оно минут 10 минут ждать пока весь проект пересоберётся ради проверки одного мелкого изменения? Тут даже минуту ждать невыносимо.
     
     
  • 3.8, paulus, 12:47, 08/02/2011 [^] [ответить] [смотреть все]  
  • +/
    гентушники говорят, что хромиум собирается как опенофис сам не проверял , так ч... весь текст скрыт [показать]
     
     
  • 4.14, h31, 14:10, 08/02/2011 [^] [ответить] [смотреть все]  
  • +1 +/
    Тут немного не то В топике идет речь о времени, которое уходит на служебные опе... весь текст скрыт [показать]
     
  • 4.19, anonix, 14:58, 08/02/2011 [^] [ответить] [смотреть все]  
  • +/
    Сборка в дженту, арче, да вообще везде не изменится по скорости никак Потому ка... весь текст скрыт [показать]
     
  • 4.24, User294, 17:43, 08/02/2011 [^] [ответить] [смотреть все]  
  • +/
    Редкий гентушник что-то меняет в собираемых исходниках, так что реально мало к... весь текст скрыт [показать]
     
  • 1.5, Aleksey, 12:19, 08/02/2011 [ответить] [смотреть все]  
  • +/
    Перешел с Scons на Waf (https://code.google.com/p/waf/) и крайне доволен. Особенно радует скорость на крупных проектах.
     
     
  • 2.16, cdome, 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, 12:39, 08/02/2011 [ответить] [смотреть все]  
  • +/
    Маньяки, им 10 секунд было много компилировать то, что они разрабатывают как минимум несколько дней.
     
     
  • 2.26, Одмин, 17:58, 08/02/2011 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Эти несколько дней они сотни раз проект пересобирают По крайней мере надеюсь чт... весь текст скрыт [показать] [показать ветку]
     
  • 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 endorsemen... весь текст скрыт [показать]
     
  • 1.15, sluge, 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, 16:25, 10/02/2011 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Думаю так оно и есть, пусть делают типа как Опера:
    - shared (работает с либами установленными в системе)
    - static (слинкованый с своими внутренними либами и работает с инсталятора)
    тогда видно разницу будет.
     

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


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