- 1
- 2
- 3
- 4
<local name="jhgjkgdfghd" />
<loadfile property="jhgjkgdfgh" srcfile="@{filepath}" failonerror="false">
...
</loadfile>
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+127
<local name="jhgjkgdfghd" />
<loadfile property="jhgjkgdfgh" srcfile="@{filepath}" failonerror="false">
...
</loadfile>
Я очень долго втыкал, почему один из овер 9000 Ant-скриптов валится....
Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files as targets and extension points dependent upon each other. The main known usage of Ant is the build of Java applications. Ant supplies a number of built-in tasks allowing to compile, assemble, test and run Java applications. Ant can also be used effectively to build non Java applications, for instance C or C++ applications. More generally, Ant can be used to pilot any type of process which can be described in terms of targets and tasks.
SCons - могло бы быть вообще замечательно, но разработчики заточены исключительно на компиляцию Ц/Ц++ кода, и забивают немного на все остальное.
Fabric - вообще замечательно.
С того момента как открыл для себя scriptdef жизнь с Антом стала вполне сносной. Хотя, конечно, могло бы быть и лучше...
Какое отношение Fabric -- library designed to execute shell commands remotely -- имеет к системам сборки?
Ты похоже вообще не понимаешь, что такое Make, и думаешь, что это шелл-скрипт такой
скорее всего, 10 лет назад была какая-то херота под таким названием, только всплыла кверху брюхом с тех пор
так что скорее всего это типичная сивоноская шизифазия
На самом деле
OMake is a build system designed for scalability and portability. На перле
Это не правда
https://govnokod.xyz/_16028/#comment-228653
Честно говоря, я сначала портировал на maven, но мне нужно было делать нестандартные вещи, а тут gradle-у нет равных
Groovy so slooow. Скалка хоть на этапе конпеляции тупит, зато потом быстро.
Есть .md файл, из него нужно сделать .html файл и .pdf файл.
Гомосапиенс решит ее makeом (или одним из сотни его колонов на разных языках). А пыхоинфузория?
Если результирующие файлы известны сначала, то физгармонию с foreach можно убрать.
Вот как работает
002s, понимаешь?
Ты тупо кладешь .md файлы в git, а он их собирает в html и выкладывает в documet root nginxа.
Система надежная как понос, и быстрая как швейцарские часы. Ей не то что j123, есть и селерон Тараса сгодится.
Причем поскольку перебираются и выкладываются только измененные файлы, то дата не сбивается, и работает и http кеш. А еще бекап. Всё правильно и удобно.
А что бы сделала пыхомакака вчера вкатившаяся в айти из ноготочного салона?
Макака поствила бы свой обоссаный мускуль, написала бы там обоссаный скрипт на пхп который генерил бы на лету html из говна в базе, обосаралась бы с кешем стопудово, и вручную напилила бы версионирование.
А пыхер бы что, и генерацию HTML сам писал?
1. Как у тебя. Зачем ты вообще ЯП упоминал?
2. Есть нативные расширения для парсинга Марка-дауна:
https://pecl.php.net/package/markdown
https://pecl.php.net/package/sundown
И ненативные библиотеки:
https://packagist.org/?query=markdown
Я спросил, как тогда пыхер решит такую задачу:
>>>
Есть .md файл, из него нужно сделать .html файл и .pdf файл.
>>>
Ты скинул ссылки на pecl.
Ну так как он её решит?
Про ненужность систем сборки ты сам сделал вывод.
Да, я скинул ссылки на pecl. Эти парсеры не обязывают конвертировать md в HTML на каждый запрос. Никто не мешает сделать кэш. А как его реализовать, в файле или в СУБД, зависит от условий задачи.
Твои слова: В «PHP» нет вообще никакой «сборки».
>> Никто не мешает сделать кэш. А как его реализовать, в файле или в СУБД
"Никто не мешает" слудет читать как "но можно намкароёбить"?
Я привел систему с "кешем" из коробки, а мне предлагается сделать свой.
каких?
Возможно теги
Эта информация есть на файловой системе. Именно она позволяет мне пересобирать и копировать только измененные, а браузеру клиента позволяет кешировать.
SO предлагает теги хранить прямо в md
Если я сделаю clone, то даты проебутся, увы
А поиск по ним как будет работать?
А зачем мне поиск в статическом сайте? Где его запускать?
В изначальном варианте таких требований не было, но вот уже появился поиск по тагам, а Иканус там уже наверное хайлоад несет, судя по вопросу про гитхаб.
Сейчас будет доказано, что решение не скейлится на миллион одновременных пользователей, и не поддерживает хранение видео-кружочков.
Да и MySQL у FB стопудово кастомно собранная и перепатченная.
https://launchpad.net/mysqlatfacebook/51
Твои слова: В «PHP» нет вообще никакой «сборки».
Но ведь нет же.
Да, неплохо. А теперь представь себе, что ты пишешь аналог Гитхаба.
Чем sbt не угодил?
9 лет прошло, а всё еще тормозной
>Даже мейкфайлы будут подекларативней муравья.
В мейкфайлах свои бутхурты типа табов, переносов строк.
Об autoconf/automake даже говорить не буду - срань жуткая.
И он не умеет в пробелы в именах. Зато умеет пересобирать только необходимый минимум, в зависимости от даты модификации (очень актуально для тормознутых крестокомпиляторов). Ант так уже научился?
> Об autoconf/automake даже говорить не буду - срань жуткая.
Согласен. Об этом даже есть анекдот: "Увидел книгу 'die autoconf', согласился с автором. И только потом узнал, что она на немецком".
Сталкивался, полезнейшая мега-фича, очень порадовала, особенно когда поменял пару строк.
>тормознутых крестокомпиляторов
yasm бывает дольше крестокомпилера работает.
>Ант так уже научился?
Дык просто юзайте инкрементальный компилер.
Пиздец. Сделать асм, который работает медленнее крестокомпиляторов - это надо было постараться.
Но там еще и свой препроцессор есть, и когда много глобальных переменных он начинает жутко тупить.
Кстати. Недавно квадратичную сложность таки пофиксили, причем я даже знаю кто и почему. Если кто юзает старый 1.20 - бегите обновляться.
Increases compilation speed of files with a large number of macros by around 20x.
https://github.com/yasm/yasm/commit/e32ff2c2abc22532a58c9b687d922500d23fd709
Эээ, размер хеш-таблички под глобалки - 32 корзинки? О_о
> or even have the hash table automatically expanding when necessary
О_о. У них там каменный век? Пришло время растянуть хеш. Хеш сам не растянется. И ведь это довольно свежий форк nasm'а, а не окаменелости 20го века...
Хотя в php еще хуже было - там ключем в хеше была длина имени. И автор старался называть функции так, чтобы они не кучковались по длине... Пруф: http://www.i-programmer.info/news/98-languages/6758-the-reason-for-the-weird-php-function-names.html
Бугага, я тоже посмеялся. Потому привёл сцылочку как "сделать асм, который работает медленнее крестокомпиляторов".
Ёпты, ну нету в сишке нормальных мап из коробки.
Хотя тот же fasm (написанный сам на себе) летает с дикой скоростью.
Ну ёпты, можно ведь написать/позаимствовать.
Как вариант - можно писать компилер не на сишке, а на чем-то более высокоуровневом. Все-таки компилятор - не неотъемлемая часть системы, а девелоперы вполне потерпят небольшую зависимость (рантайм крестов к примеру).
P.S. Сейчас гентоводы закидают меня какашками.
Это хорошая иллюстрация к стереотипу: "сишка - это поцарски и быстро. потому что в ней ничего сложного и лишнего".
А так же подтверждение истины:
Губят ЦП не ЯВУ, губят ЦП O(N³).
Потому что экспоненциальность алгоритмов важнее языка
Пользователи Gentoo и (чуть в меньшей степени) FreeBSD негодуют.
А чего им негодовать. Кресты чтоли где-то не поддерживаются? Да для сборки разного софта зачастую нужны всякие скриптовые языки типа пёрла, и обоих пейсонов 2/3, а в запущенных случаях руби. Те же асмы, и куча всяких мелких тулзов - стоит пособирать разок всё руками чтобы знать что негодовать тут нечего.
Пользователям генту надо наоборот радоваться что сборка будет вестись десятки раз быстрее, с мапой из std.
Или жизнь станет скучна и неинтересна без самого процесса сборки и томного ожидания её окончания, если всё быстро отработает?
https://govnokod.ru/27644#comment671001
Их подозрительно много.
Джавушок -- анскильный путишок прибегает, и кукаречет:
Ко-ко-ко, наш джавий хешмеп перформанснее сишного `std::map`, джава победила плюсы.
Конечно, говно, только плюсовый
Keys are sorted by using the comparison function Compare. Search, removal, and insertion operations have logarithmic complexity. Maps are usually implemented as Red–black trees
А hashMap это хеш с бакетами.
> И автор старался называть функции так
Лол, так это у них таблица виртуальных функций!
>У них там каменный век? Пришло время растянуть хеш. Хеш сам не растянется.
Так это просто левый чувак, который много им компиляет заебался ждать и прислал такой quik'n'dirty фикс.
Жабий компилятор настолько оптимизирован на батч-обработку, что в 99.9% случаев существенно быстрее просто перекопмилять весь проект целиком, чем пофайлово проверять, что нуждается в перекомпиляции и натравливать жабий компилер на отдельных файлах.
Что значит с холодным запуском? Ты про кэш файловой системы?
Несколько раз подряд запускал, результаты одинаковые.
Иде, вестимо, не нужно пофайлово проверять, что поменялось, она и так знает. Речь о том, что инкрементальный компилер для типичных жабосборок не особо и нужен.
Во истиниу, место жаваебов и их скриптодрузей на помойке
> минимальную сишную программу
– проснись, ты обосрался
и в чём там такая сложность? склеить хедеры препроцессором и?
define "минимальную сишную программу"
> склеить хедеры препроцессором и?
да, ну все макросы раскрыть
И да: это значит, что в его молодости функцию можно было вызвать с неправильным числом аргументов неправильного типа, все скомпилировать, слинковать, и пососать письку уже в рантайме, да еще и очень необычную.
Такая кукарямба бывает еще в древнейшей скриптушне типа перла с башем
Вот минимальная программа на С:
main(){}
Ноль байт. Меньше не могу.
Линкер падает потом, но тут уж я не виноват
https://gcc.godbolt.org/z/Tc4d8s48d
Компилируется, линкуется.
Линкер для линковки ищет символы, и такой вот «main» его вполне устраивает (хотя с точки зрения Стандарта это наверняка UB).
https://gcc.godbolt.org/z/Wj979386G
А вот смычка компилера с линкером из конца прошлого века в жопу клюнула.
на самом деле в _start но тут не важно
Смотрите, как надо:
Теперь хуета должна слинковаться.
я думаю, это com под дос из одной инструкции прерывания 21 для выхода в дос
скольо это байт?
ps; или ее нужно по смещению типа 100h пхать?
INT 20h — два байта.
Лайфхак: вместо неё использовать RETN — один байт. В стеке обычно на момент запуска лежит ноль, а PSP[0] — это те самые два байта INT 20h.
Итого: минимальный размер COM-файла — один байт.
RIP-based адресация до amd64 была только для инструкций jmp и call, а для инструкций с данными нужно было указывать смещение относительно начала текущего сегмента, а для этого нужно знать, куда ОС загрузила образ.
Для EXE директива ORG не нужна, ибо нам пофигу, по какому адресу он загрузится: DOS заполнит таблицу фиксапов (которой у кома нету).
Все верно, там множественное число. А название книги я переврал:
http://www.amazon.co.uk/Die-GNU-Autotools-Leitfaden-Softwaredistribution/dp/3936546487
The goal of Automake is to remove the burden of Makefile maintenance from the back of the individual GNU maintainer (and put it on the back of the Automake maintainer).
Цель утилит Automake - убрать бремя сопровождения Makefile-файлов с плеч программиста и переложить его на разработчиков Automake.
Вопрос только в том кто же будет нести бремя сопровождения am-файлов.
А вот бремя написания мейкфайла он таки убирает. Руками мейкфайл с поддержкой out of source build и всех стандартных целей (all, clean, distclean, install с кошерной поддержкой DESTDIR, dist, check и т.п.) писать вообще заибешься. И если где-то попадается мейкфайл, написанный руками - он представляет собой либо унылое и неподдерживаемое говно, либо в нем всего пара таргетов (all и clean).
Ну то что мейкфайлы какаша не означает что автоконф шоколад. И что убрав одно бремя, он не заменит его на еще более тяжелое.
А кто что думает про cmake? В сравнении с гнусными тулзами мне он как-то больше нравится.
Синтаксис - ебанутый. Но в целом, если не требуется писать свои модули на его языке, то для крестов и сишки очень даже юзабельно, мне нравится.
Он еще вторую проблему пытается решить - как-то адаптировать сборочную среду и хидеры ко всякому нахуй не нужному говну мамонта, которое ты никогда не увидишь.
Если проект простой, и если свои тесты и реакцию на них не мутить - входные файлы для автотулзов получаются довольно компактными, буквально десять-двадцать строчек.
Абсолютное говно, но лучше ничего пока нет. Юзать в принципе можно:
1) Out-of-source билды из коробки. Must Have.
2) Можно писать реюзабельные сборки. Если написать makefile для модуля, то соединить его с другим makefile довольно проблематично. Грамотно написанный CMakeLists.txt приклеивается к произвольному cmake-проекту гораздо проще.
3) Терпимое апи для поиска внешних либ.
В остальном cmake-полный финиш.
Упоротые гугловцы написали свой gyp для хромиума, который чуть лучше в плане дизайна, но настолько сырой, что это даже не смешно. Например, в случае ошибок во входном файле, он иногда падает с ошибкой обращения по индексу. А теперь они додумались написать Генератор Генераторов (gn - на самом деле, он должен просто генерить ниндзя-файлы, но должен заодно генерить и gyp-файлы), гнушники оценят.
Что показательно, у гугла есть нормальная внутренняя система сборки, но они никому её не показывают.
я джва года жду аналог gradle для крестов с менеджментом зависимостей, автозагрузкой модулей с гитхаба и декларативным скриптовым дсл (lua в теории подходит, груви не нужен). Когда-нибудь терпение кончится и я сяду писать свой.
А у гредла нету модулей для крестов? Только жаба, только хардкор?
Есть. Но распространять сишные либы в бинарном виде - это кощунство. Только исходники, только хардкор.
вроде как qbs от Qt'шников подходит
> от Qt'шников
Qt-way мне никогда не был близок. + очередной язык.
Как дистрибьютятся модули? В собранном виде? Как резолвятся конфликтующие версии в транзитивных зависимостях (A -> (B v1.0 -> C v0.5), A -> (D v2.0 -> C v0.8))? Можно указать репу с гитхаба как модуль?
Есть положительный опыт использования в случае произвольных проектов, не Qt?
зачот
> терпение кончится и я сяду писать свой.
ну как, сел?
Любая система сборки начиная с Make это может, но не у всех есть ебланский XMLный синтаксис
http://husa.su/media/cache/c0/a8/c0a8ad6ebf9f529ab032fc3c30911a80.jpg
жопа едет, ноги нет
В чём причина течки по ЛГБТ?
В чём причина течки?
https://pbs.twimg.com/media/F22RLyWW4AAkqg4?format=png&name=smal l
Если ваш проект собирается одной очевидой командой, be it msbuild, make all, configure && make, gradle build итд итп, то вы straight.
Если нужно почитать небольшой ридми, поставить Ruby нужной версии и m4, а затем запустить вот такую команду, то вы латентный.
Наконец если для сборки вашего продукта нужно связаться с вами в слаке или "почитать код", то вы пидарас.
Бывают еще такие продукты, которые собираются только на машине разработчика. Их писали копрофаги
Обычно декларативный DSL превращается адскую императивную лапшу, и всё портит.
Давайте я порекламирую друстню и ее систему сборки -- каргу.
У карги есть `Cargo.toml` (toml -- Tom's non obvious fuckup language или как-то так), он чисто декларативный, примерно как `.ini` файлы (тут знактоки `.inf` формата хрюкнули, но пофиг).
Зависимости и таргеты и всякие профили сборки описываются там.
Но
У карждого крейта может быть ` build.rs`, и вот там уже можно императивно на рустне писать чо угодно. Хоть блядь котиков в твиттер пости при сборке.
Получается пиздато
А разве нет??