Clean не нужен

May 31, 2015 01:38

Когда-нибудь задумывались, зачем в билд-системах команда clean? То есть, понятно, почему она в них была, но почему она до сих пор есть? Почему иногда билд собирается только с чистого листа ( Read more... )

девелопмент, мир будующего, очень просто, инструментарий, неонка included, формула успеха

Leave a comment

Comments 43

wizzard0 May 30 2015, 20:01:17 UTC
Ага, всё так.

Reply


anonymous May 30 2015, 20:04:02 UTC
Небольшой оффтоп. Посмотри на пакет-менеджер nix. Он исповедует абсолютно те-же идеологии, которые расписаны в этом посте.

Reply

avnik May 31 2015, 10:03:01 UTC
тогда уж целиком nixos, у которого вся генерация системы имеет хеш.

PS Хотя там не все идеально пока, побитное сравнение двух сборок с одинаковым хешем тебе никто не гарантирует (хотя над этим тоже работают)

Reply

anonymous May 31 2015, 11:18:03 UTC
nixos это все-таки целый дистрибутив. То есть слишком уж радикальное изменение. А сам nix можно использовать отдельно в любом дистрибутиве, и в мак оси тоже.

Reply

avnik May 31 2015, 11:24:40 UTC
ну я помучался с отдельным nix пару дней, потом плюнул и поставил на отдельный раздел nixos, так и живу на нем с тех пор (чуть меньше чем полгода)

Reply


max630 May 30 2015, 20:43:05 UTC
> Но все вот эти ребята, которые на C++ игры пишут и у которых ночной «чистый» билд по шесть часов, они как до сих пор к этой схеме не пришли?

ccache же

хотя те у кого вижуал студия - те не пришли, да

Reply

max630 May 30 2015, 21:06:03 UTC
Те, кто не может писать на С++ нормально, без буста и прочей ереси, чтобы не собиралось по 6 часов - те не пришли.

Нормальным С++ людям эта схема просто не нужна, у них и так скорость итерации сравнима с Питоном.

Reply

archaicos May 30 2015, 21:48:32 UTC
С ccache таки приходится использовать make clean. Сборка ускоряется, но кривость сама по себе не исправляется.

Reply

tonsky May 30 2015, 21:51:31 UTC
а почему? ccache не сечет зависимости правильно?

Reply


anonymous May 30 2015, 20:50:21 UTC
docker run docker2.dev.flocktory.com:5000/widget:0875e4456f8addd3542d1c06f2bef11b7a8e39ea

И так от любого коммита. Есть команда, которая запустит все нужные контейнеры для прогона тестов. Все изолировано.

И, довольно пофиг, выполняется билд 2 секунды или 300, все в ci, доступно любому разработчику в одну команду. Инкрементальность, в определенной степени, обеспечивает докер (без изменения зависимостей поменяется только слой, отвечающий за сам код, если изменились, то и слой с зависимостями изменится, все автоматически, без участия человека).

Reply

tonsky May 30 2015, 21:50:55 UTC
Ох, докер головного мозга. Быстрые и стабильные билды решаются, оказывается, внимание, тем, что make надо запускать в докере!

Reply

prepor May 31 2015, 09:25:30 UTC
Стабильные, в том числе, да. Изолированное, иммутабельное окружение, clean не нужен бай дизайн.

Быстрые с точки зрения доставки новых версий со всеми зависимостями, да. Скачивая, только последний слой.

А ставить диагнозы это круто, да.

Reply

tonsky May 31 2015, 12:22:17 UTC
Прости, Андрей, просто меня раздражает хайп вокруг докера, явно непропорциональный не то чтобы его достоинствам, но даже его потенциалу. Ты просто под руку подвернулся первым :)

Понятно что если делать make clean вообще всегда жить станет проще и веселей. Но это нереалистичное количество времени для таких языков как C++. Да что там, меня даже в boot раздражает что он ничего не помнит при перезапуске, хотя у меня полный билд 45 cек. Я хочу 1 секунду.

Докер явно не подходит на роль менеджера иммутабельных зависимостей, потому что у него дерево растет не в ту сторону. У него от базового образа можно отнаследовать N детей, а в сборке надо наооборот конечный образ отнаследовать от N базовых. Т.е. единственное когда он подходит - когда билд строго линеен. Что в жизни не встречается.

Reply


max630 May 30 2015, 20:59:06 UTC
Использование mtime, оно хоть теоретически и грязно, но на практике я не припомню чтобы подводило. Ну если не играться с системным временем и не использовать vcs которые его ставят в прошлое при чекауте. Главное - это вот:

> окружения, версии компилятора, флагов

и тут уже полный ад творится. В том числе, например, и то что при параллельной сборке "окружение" на входе может меняться случайным образом. Вот, например, такое бывает: http://max630.livejournal.com/217018.html

Ну и дело не в инструменте, на басе makefile всё может работать как часы, наверное даже msbuild можно использовать правильно. Просто депенденсы всегда прописаны как попало, плюс что-то где-то генерится, и там всё ещё хуже, и может даже меняется существуещее, что совсем плохо

Reply

tonsky May 30 2015, 21:42:58 UTC
> Использование mtime, оно хоть теоретически и грязно, но на практике я не припомню чтобы подводило. Ну если не играться с системным временем и не использовать vcs которые его ставят в прошлое при чекауте.

Это размен по мелочам. Мы чуууууууть чуууууууууть выиграем в скорости, но потеряем кучу возможностей: пайплайны (A->B->C, A поменялся, но B сгенерировался такой же, C можно не билдить), распределенный кэш. Плюс у него точность секундная, поэтому опять же может что-то пропустить. Надо думать не о том, что вау вау оптимизация, скорость, скорость, а о том, купит она нам счастье или нет. Эта - не купит.

Reply

_winnie May 31 2015, 00:13:21 UTC
mtime хорошо работает так: "если в базе данных сборки mtime и размер файла совпадает, то можно не пересчитывать хеш файла".

Reply

tonsky May 31 2015, 08:11:21 UTC
Можно много оптимизаций придумать, но зачем? Ты рискуешь корректностью и предсказуемостью ради непонятных целей

Reply


Leave a comment

Up