1. Куча / Говнокод #16028

    +127

    1. 1
    2. 2
    3. 3
    4. 4
    <local name="jhgjkgdfghd" />
    <loadfile property="jhgjkgdfgh" srcfile="@{filepath}" failonerror="false">
    	...
    </loadfile>

    Я очень долго втыкал, почему один из овер 9000 Ant-скриптов валится....

    Запостил: kostoprav, 21 Мая 2014

    Комментарии (148) RSS

    • Я не знаю что это, но видимо jhgjkgdfghd != jhgjkgdfgh
      Ответить
      • Это 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.
        Ответить
        • Ага, ужасный-императивный-сборщик-скрипты-для-которого-впадлу-писать-руками. Даже мейкфайлы будут подекларативней муравья.
          Ответить
          • люди-юзайте-градл-будет-счастье-жаль-тормозной-тварь
            Ответить
            • Я-бы-с-радостью-но-legacy-есть-legacy
              Ответить
              • ок-я-разве-спорю-но-сам-недавно-портировал-жабопроект-из-38-модулей-с-анта-на-градл-и-не-жалею
                Ответить
                • Я-почему-то-больше-maven-люблю
                  Ответить
                  • OMake - вполне себе ничего.
                    SCons - могло бы быть вообще замечательно, но разработчики заточены исключительно на компиляцию Ц/Ц++ кода, и забивают немного на все остальное.
                    Fabric - вообще замечательно.

                    С того момента как открыл для себя scriptdef жизнь с Антом стала вполне сносной. Хотя, конечно, могло бы быть и лучше...
                    Ответить
                    • сивоконь традиционно перданул в лужу

                      Какое отношение Fabric -- library designed to execute shell commands remotely -- имеет к системам сборки?

                      Ты похоже вообще не понимаешь, что такое Make, и думаешь, что это шелл-скрипт такой
                      Ответить
                      • c чего ты взял, что он про этот фабрик вообще говорил? он ни разу не питонист

                        скорее всего, 10 лет назад была какая-то херота под таким названием, только всплыла кверху брюхом с тех пор
                        Ответить
                        • ну тогда она гуглилась бы, но нет
                          так что скорее всего это типичная сивоноская шизифазия
                          Ответить
                          • чего б ей гуглиться, если она например померла в 2017? учитывая, что сейчас на запрос fabric прилетает куча всего, оно в поисковиках уже на таком дне может быть, что и не достанешь
                            Ответить
                            • она должна была бы гуглиться по хуйням типа "make vs fabric"
                              Ответить
                              • По omake гуглятся матрасы. Значит, omake тоже не существует?
                                Ответить
                                • Omake (御負け, usually written おまけ) means extra in Japanese. Its primary meaning is general and widespread.

                                  На самом деле

                                  OMake is a build system designed for scalability and portability. На перле
                                  Ответить
                        • >он ни разу не питонист

                          Это не правда
                          https://govnokod.xyz/_16028/#comment-228653
                          Ответить
                  • > Я-почему-то-больше-maven-люблю
                    Честно говоря, я сначала портировал на maven, но мне нужно было делать нестандартные вещи, а тут gradle-у нет равных
                    Ответить
                    • >а тут gradle-у нет равных
                      Groovy so slooow. Скалка хоть на этапе конпеляции тупит, зато потом быстро.
                      Ответить
                      • Gradle перевели на котлин, а он все еще слоооу
                        Ответить
                        • Именно поэтому я за «PHP».
                          Ответить
                          • а в пыхокале есть системы сборки?
                            Ответить
                            • В «PHP» нет вообще никакой «сборки».
                              Ответить
                              • а зенд чото там?
                                Ответить
                                • Что в пхп собирать? Заливаешь по фтп на сервер и течёшь, пока другие собирают.
                                  Ответить
                                  • Как инфузория пыховка решит такую задачу:

                                    Есть .md файл, из него нужно сделать .html файл и .pdf файл.

                                    Гомосапиенс решит ее makeом (или одним из сотни его колонов на разных языках). А пыхоинфузория?
                                    Ответить
                                    • Покажи решение.
                                      Ответить
                                      • ну вот в лоб на GNU Make
                                        #
                                        .PHONY: clean all
                                        
                                        DST_FILES := $(foreach ext, html pdf, $(subst .md,.$(ext), $(wildcard *.md)))
                                        
                                        %.html: %.md
                                                pandoc $< -o $@
                                        
                                        %.pdf: %.md
                                                pandoc $< -o $@
                                        
                                        all:  ${DST_FILES}
                                        
                                        clean:
                                                rm -f *.html *.pdf


                                        Если результирующие файлы известны сначала, то физгармонию с foreach можно убрать.
                                        Вот как работает
                                        $ la
                                        Makefile  bye.md  hello.md
                                        $ cat bye.md
                                        h1. Bye
                                        
                                        I hate __you__
                                        $ cat hello.md
                                        h1. Hello
                                        
                                        The *senence*
                                        $ time make
                                        pandoc bye.md -o bye.html
                                        pandoc hello.md -o hello.html
                                        pandoc bye.md -o bye.pdf
                                        pandoc hello.md -o hello.pdf
                                        
                                        real    0m0.620s
                                        user    0m0.527s
                                        sys     0m0.070s
                                        $ time make
                                        make: Nothing to be done for 'all'.
                                        
                                        real    0m0.002s
                                        user    0m0.000s
                                        sys     0m0.002s
                                        $ make clean
                                        rm -f *.html *.pdf
                                        $ time make
                                        pandoc bye.md -o bye.html
                                        pandoc hello.md -o hello.html
                                        pandoc bye.md -o bye.pdf
                                        pandoc hello.md -o hello.pdf
                                        
                                        real    0m0.621s
                                        user    0m0.499s
                                        sys     0m0.103s
                                        $ touch hello.md
                                        $ make
                                        pandoc hello.md -o hello.html
                                        pandoc hello.md -o hello.pdf
                                        $


                                        002s, понимаешь?
                                        Ответить
                                        • А вот представь, Иканус, что на сервере есть кроновый скрипт из трех строк: git pull, make и rsync.

                                          Ты тупо кладешь .md файлы в git, а он их собирает в html и выкладывает в documet root nginxа.

                                          Система надежная как понос, и быстрая как швейцарские часы. Ей не то что j123, есть и селерон Тараса сгодится.

                                          Причем поскольку перебираются и выкладываются только измененные файлы, то дата не сбивается, и работает и http кеш. А еще бекап. Всё правильно и удобно.

                                          А что бы сделала пыхомакака вчера вкатившаяся в айти из ноготочного салона?

                                          Макака поствила бы свой обоссаный мускуль, написала бы там обоссаный скрипт на пхп который генерил бы на лету html из говна в базе, обосаралась бы с кешем стопудово, и вручную напилила бы версионирование.
                                          Ответить
                                        • У тебя всё самое интересное делает pandoc, который для тебя чёрный ящик, всё остальное — лишь клей для него.
                                          Ответить
                                          • А у CMake самое интересное делает компилятор си плюс плюс: поддержка всяких стандартов там, c++20 и пр. (зеленый)

                                            А пыхер бы что, и генерацию HTML сам писал?
                                            Ответить
                                            • У меня два варианта:

                                              1. Как у тебя. Зачем ты вообще ЯП упоминал?

                                              2. Есть нативные расширения для парсинга Марка-дауна:
                                              https://pecl.php.net/package/markdown

                                              https://pecl.php.net/package/sundown

                                              И ненативные библиотеки:
                                              https://packagist.org/?query=markdown
                                              Ответить
                                              • Кстати, что моднее: md или rst?
                                                Ответить
                                              • Ну тобишь я был прав: пыхер сохранит md в mysql, и потом какимнить sundown будет его рендерить на каждое обращение в HTML?
                                                Ответить
                                                • Как ты сделал такой вывод?
                                                  Ответить
                                                  • Ты сказал, что пыхеру не нужны системы сборки.


                                                    Я спросил, как тогда пыхер решит такую задачу:

                                                    >>>
                                                    Есть .md файл, из него нужно сделать .html файл и .pdf файл.
                                                    >>>

                                                    Ты скинул ссылки на pecl.

                                                    Ну так как он её решит?
                                                    Ответить
                                                    • Да 100500 вариантов.

                                                      Про ненужность систем сборки ты сам сделал вывод.

                                                      Да, я скинул ссылки на pecl. Эти парсеры не обязывают конвертировать md в HTML на каждый запрос. Никто не мешает сделать кэш. А как его реализовать, в файле или в СУБД, зависит от условий задачи.
                                                      Ответить
                                                      • >Про ненужность систем сборки ты сам сделал вывод.

                                                        Твои слова: В «PHP» нет вообще никакой «сборки».


                                                        >> Никто не мешает сделать кэш. А как его реализовать, в файле или в СУБД

                                                        "Никто не мешает" слудет читать как "но можно намкароёбить"?

                                                        Я привел систему с "кешем" из коробки, а мне предлагается сделать свой.
                                                        Ответить
                                                        • Ради метаданных всё равно к бд придёшь скорее всего
                                                          Ответить
                                                          • >метаданных
                                                            каких?
                                                            Ответить
                                                            • Дата создания/изменения

                                                              Возможно теги
                                                              Ответить
                                                              • >Дата создания/изменения
                                                                Эта информация есть на файловой системе. Именно она позволяет мне пересобирать и копировать только измененные, а браузеру клиента позволяет кешировать.

                                                                SO предлагает теги хранить прямо в md

                                                                ### My post title [#mytag]()
                                                                Ответить
                                                                • А завтра ты переедешь на новую vps, сделаешь git clone и файловая система тебе скажет что?
                                                                  Ответить
                                                                  • Я сделаю туда rsync лучше.

                                                                    Если я сделаю clone, то даты проебутся, увы
                                                                    Ответить
                                                                • > SO предлагает теги хранить прямо в md

                                                                  А поиск по ним как будет работать?
                                                                  Ответить
                                                                  • grep будет. F7 в фаре или MC будет.

                                                                    А зачем мне поиск в статическом сайте? Где его запускать?

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

                                                                    Сейчас будет доказано, что решение не скейлится на миллион одновременных пользователей, и не поддерживает хранение видео-кружочков.
                                                                    Ответить
                                                                    • Твоё решение имеет право на жизнь, только вот оно очень хреново скейлится. Если твои требования никогда не поменяются, то и ок
                                                                      Ответить
                                                                      • Решение с PHP/MySQL тоже плохо скейлится, иначе фейсбукам и вконтактам не пришлось бы писать свои костыли которые превращают подмножество PHP в код на плюсах со встроенным HTTP сервером.

                                                                        Да и MySQL у FB стопудово кастомно собранная и перепатченная.
                                                                        https://launchpad.net/mysqlatfacebook/51
                                                                        Ответить
                                                              • Вышла хозяюшка и манит гусей домой: ⟪Теги-теги-теги! Гуси белые, гуси серые, ступайте домой!» А гуси шеи длинные вытянули, лапы.
                                                                Ответить
                                                        • >
                                                          Твои слова: В «PHP» нет вообще никакой «сборки».

                                                          Но ведь нет же.
                                                          Ответить
                                                        • > Я привел систему с "кешем" из коробки, а мне предлагается сделать свой.

                                                          Да, неплохо. А теперь представь себе, что ты пишешь аналог Гитхаба.
                                                          Ответить
                          • https://pbs.twimg.com/media/F5FzThpXsAAbOmr?format=jpg&name=900x900
                            Ответить
                    • > мне нужно было делать нестандартные вещи, а тут gradle-у нет равных
                      Чем sbt не угодил?
                      Ответить
            • >>люди-юзайте-градл-будет-счастье-жаль-тормозной-тварь


              9 лет прошло, а всё еще тормозной
              Ответить
          • >ужасный
            >Даже мейкфайлы будут подекларативней муравья.
            В мейкфайлах свои бутхурты типа табов, переносов строк.
            Об autoconf/automake даже говорить не буду - срань жуткая.
            Ответить
            • > В мейкфайлах свои бутхурты типа табов, переносов строк.
              И он не умеет в пробелы в именах. Зато умеет пересобирать только необходимый минимум, в зависимости от даты модификации (очень актуально для тормознутых крестокомпиляторов). Ант так уже научился?

              > Об autoconf/automake даже говорить не буду - срань жуткая.
              Согласен. Об этом даже есть анекдот: "Увидел книгу 'die autoconf', согласился с автором. И только потом узнал, что она на немецком".
              Ответить
              • > Зато умеет пересобирать только необходимый минимум, в зависимости от даты модификации (очень актуально для тормознутых крестокомпиляторов)
                Сталкивался, полезнейшая мега-фича, очень порадовала, особенно когда поменял пару строк.
                >тормознутых крестокомпиляторов
                yasm бывает дольше крестокомпилера работает.

                >Ант так уже научился?
                Дык просто юзайте инкрементальный компилер.
                Ответить
                • > 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
                      Ответить
                      • > or even have the hash table automatically expanding when necessary
                        Бугага, я тоже посмеялся. Потому привёл сцылочку как "сделать асм, который работает медленнее крестокомпиляторов".
                        Ёпты, ну нету в сишке нормальных мап из коробки.
                        Хотя тот же fasm (написанный сам на себе) летает с дикой скоростью.
                        Ответить
                        • > Ёпты, ну нету в сишке нормальных мап из коробки.
                          Ну ёпты, можно ведь написать/позаимствовать.

                          Как вариант - можно писать компилер не на сишке, а на чем-то более высокоуровневом. Все-таки компилятор - не неотъемлемая часть системы, а девелоперы вполне потерпят небольшую зависимость (рантайм крестов к примеру).

                          P.S. Сейчас гентоводы закидают меня какашками.
                          Ответить
                          • >Как вариант - можно писать компилер не на сишке, а на чем-то более высокоуровневом.
                            Это хорошая иллюстрация к стереотипу: "сишка - это поцарски и быстро. потому что в ней ничего сложного и лишнего".

                            А так же подтверждение истины:
                            Губят ЦП не ЯВУ, губят ЦП O(N³).
                            Потому что экспоненциальность алгоритмов важнее языка
                            Ответить
                          • > Все-таки компилятор - не неотъемлемая часть системы, а девелоперы вполне потерпят небольшую зависимость (рантайм крестов к примеру).
                            Пользователи Gentoo и (чуть в меньшей степени) FreeBSD негодуют.
                            Ответить
                            • >Пользователи 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 это хеш с бакетами.
                            Ответить
                      • >Хотя в php еще хуже было - там ключем в хеше была длина имени.
                        > И автор старался называть функции так
                        Лол, так это у них таблица виртуальных функций!

                        >У них там каменный век? Пришло время растянуть хеш. Хеш сам не растянется.
                        Так это просто левый чувак, который много им компиляет заебался ждать и прислал такой quik'n'dirty фикс.
                        Ответить
                • Вот, Сконс так умеет, он в Сиквелайте хранит какие файлы создали поменяли и т.д. Сам же создает clean и т.п. служебные таргеты на их основе. Плюс контролирует какие переменные окружения попадают в какую среду, плюс на Питоне, что значит, на нем не недоделаные макросы, в которых не то что арифметику, а даже просто нижний регистр еще не изобрели, а вполне вменяемый язык. Можно писать модули, чтобы потом каждый проект не копипастой создавать, а использовать уже существующую базу, как библиотеки.
                  Ответить
                • > Дык просто юзайте инкрементальный компилер.
                  Жабий компилятор настолько оптимизирован на батч-обработку, что в 99.9% случаев существенно быстрее просто перекопмилять весь проект целиком, чем пофайлово проверять, что нуждается в перекомпиляции и натравливать жабий компилер на отдельных файлах.
                  Ответить
                  • А может он, как и вообще Java, просто не оптимизирован на быстрый запуск? :)
                    Ответить
                    • В частности. Провел эксперимент, javac 1.7.0_55 компиляет минимальный жабо-класс в ~25 раз медленней, чем gcc 4.8.2 / clang 3.4 компиляет минимальную сишную программу (0.8 сек vs 0.03 сек).
                      Ответить
                      • Это с холодным запуском? В топку такой эксперимент.
                        Ответить
                        • > Это с холодным запуском?
                          Что значит с холодным запуском? Ты про кэш файловой системы?
                          Несколько раз подряд запускал, результаты одинаковые.
                          Ответить
                          • Нет, с запуском с нуля javac. Да и где ты видел инкрементальное конпелирование жаваком? Все иде имеют свой.
                            Ответить
                            • > Все иде имеют свой.
                              Иде, вестимо, не нужно пофайлово проверять, что поменялось, она и так знает. Речь о том, что инкрементальный компилер для типичных жабосборок не особо и нужен.
                              Ответить
                              • Если единицией компиляции являлся бы модуль (с джигсоу это стало возможно) то впринципе оно не так уж и плохо, а вот считать зависимости между классами, которых в джаве обычно двести тыщ нинужно
                                Ответить
                      • то-есть тупой, не оптимиизирующий javac, компилирующий под тупейший асембрел в котором 256 тупых опкодов работает МЕДЛЕНЕЕ чем оптимизирующий компилятор, компилирующий сложный язык под сложную архитектуру?

                        Во истиниу, место жаваебов и их скриптодрузей на помойке
                        Ответить
                        • > компилирующий сложный язык
                          > минимальную сишную программу
                          – проснись, ты обосрался
                          Ответить
                          • ну ты примерно предоставляешь сколько всего нужно заинклудить для того же stdio.h, например?
                            Ответить
                            • с чего ты взял, что там был stdio.h?

                              и в чём там такая сложность? склеить хедеры препроцессором и?
                              Ответить
                              • >с чего
                                define "минимальную сишную программу"

                                > склеить хедеры препроцессором и?
                                да, ну все макросы раскрыть
                                Ответить
                                • int main(void) {
                                      return 0;
                                  }
                                  Ответить
                                  • А зачем воид?
                                    Ответить
                                    • В 70-е года, когда Десктоп учился программировать, эта часть сигнатуры функции была опциональна, и таким образом отличиь отсутствие аргументов от пропущенных аргументов было никак нельзя. Ну вот и стали явно писать void.


                                      И да: это значит, что в его молодости функцию можно было вызвать с неправильным числом аргументов неправильного типа, все скомпилировать, слинковать, и пососать письку уже в рантайме, да еще и очень необычную.

                                      Такая кукарямба бывает еще в древнейшей скриптушне типа перла с башем
                                      Ответить
                                      • Это я понял, но речь шла про минимальную программу, а воид - это дополнительные 4 символа.
                                        Ответить
                                        • Не тупи
                                          Ответить
                                          • Нету пи, а купи
                                            Ответить
                                          • Какой газлайтинг )))

                                            Вот минимальная программа на С:

                                            int main(){}
                                            Ответить
                                            • Возьми С постарее и можно
                                              main(){}
                                              Ответить
                                              • не знаю, у меня компилируется


                                                Ноль байт. Меньше не могу.

                                                Линкер падает потом, но тут уж я не виноват
                                                Ответить
                                              • какой в итоге сложный язык
                                                Ответить
                                              • Сокращаем на один символ:
                                                main=0;

                                                https://gcc.godbolt.org/z/Tc4d8s48d
                                                Компилируется, линкуется.
                                                Ответить
                                                • обожемой это в няшную из крестов завезли синтаксис для удаления или что?
                                                  Ответить
                                                  • Нет, это определение целочисленной переменной «main» и инициализация её нулём.

                                                    Линкер для линковки ищет символы, и такой вот «main» его вполне устраивает (хотя с точки зрения Стандарта это наверняка UB).
                                                    Ответить
                                                • Сокращаем:
                                                  main;

                                                  ASM generation compiler returned: 0
                                                  Execution build compiler returned: 0

                                                  https://gcc.godbolt.org/z/Wj979386G
                                                  Ответить
                                                  • ну поняно, джамп или кол в этот символ приведет к сегфолту
                                                    Ответить
                                                    • Это же пельменная, зачем вызывать? Гост же выше написал, что линькеру совершенно похуй на то, что это за символ, главное чтобы был.

                                                      А вот смычка компилера с линкером из конца прошлого века в жопу клюнула.
                                                      Ответить
                                                      • потому что эльф начинается с кола в эту пельменную.
                                                        на самом деле в _start но тут не важно
                                                        Ответить
                                                        • Если объектный файл создан, то уже значит что ввод компилируется. Так то даже не эльф, а кофф.
                                                          Ответить
                                                  • touch hueta.c
                                                    gcc -Wl,--defsym,_main=0 hueta.c
                                                    Ответить
                                                    • Меня плюсанули, а просто ноль не работает, потому что ноль кладётся не в ту секцию.

                                                      Смотрите, как надо:
                                                      gcc -Wl,--defsym,_main=ADDR(.text) hueta.c


                                                      Теперь хуета должна слинковаться.
                                                      Ответить
                                                      • В MINGW такая хуета даже запускается и успешно завершается:

                                                        gcc -Wl,--defsym,WinMain=ADDR(.text) hueta.c
                                                        Ответить
                                                        • P.S. А нет, работает через раз. Настоящий царский код!
                                                          Ответить
                                                          • давай теперь придумаем самый милипиздрический бинарь

                                                            я думаю, это com под дос из одной инструкции прерывания 21 для выхода в дос

                                                            скольо это байт?

                                                            ps; или ее нужно по смещению типа 100h пхать?
                                                            Ответить
                                                            • По смещению 100h её пихнёт сам DOS, в COM-файле же PSP вообще никак не представлен, в том его и прелесть, это же не EXE.

                                                              INT 20h — два байта.

                                                              Лайфхак: вместо неё использовать RETN — один байт. В стеке обычно на момент запуска лежит ноль, а PSP[0] — это те самые два байта INT 20h.

                                                              Итого: минимальный размер COM-файла — один байт.
                                                              Ответить
                                                              • В хехе нет никакого PSP, DoS одинаково их заполнит независимо от формата, а в сом надо писать ORG 100, чтобы правильно установить DS
                                                                Ответить
                                                                • ORG 100H мы пишем, чтобы конпелятор правильно преобразовал метки в смещения относительно начала сегмента.

                                                                  RIP-based адресация до amd64 была только для инструкций jmp и call, а для инструкций с данными нужно было указывать смещение относительно начала текущего сегмента, а для этого нужно знать, куда ОС загрузила образ.

                                                                  Для EXE директива ORG не нужна, ибо нам пофигу, по какому адресу он загрузится: DOS заполнит таблицу фиксапов (которой у кома нету).
                                                                  Ответить
                                                              • И это поведение с RET унаследовано от CP/M, кстати.
                                                                Ответить
              • Я тут повыёбываюсь полузабытым немецким, но вроде как автоконфов должно быть много, или он должен быть женского рода, спасибо-пожалуйста.
                Ответить
                • > автоконфов должно быть много
                  Все верно, там множественное число. А название книги я переврал:
                  http://www.amazon.co.uk/Die-GNU-Autotools-Leitfaden-Softwaredistribution/dp/3936546487
                  Ответить
                  • Ага, это понятно, шутка-то известная.
                    Ответить
                  • Мне очень доставляет описание automake
                    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-файлов.
                    Ответить
                    • Не так страшен autoconf, как написание своих тестов для него...

                      А вот бремя написания мейкфайла он таки убирает. Руками мейкфайл с поддержкой out of source build и всех стандартных целей (all, clean, distclean, install с кошерной поддержкой DESTDIR, dist, check и т.п.) писать вообще заибешься. И если где-то попадается мейкфайл, написанный руками - он представляет собой либо унылое и неподдерживаемое говно, либо в нем всего пара таргетов (all и clean).
                      Ответить
                      • >Руками мейкфайл с поддержкой всех стандартных целей (all, clean, distclean, install с кошерной поддержкой DESTDIR, dist, check и т.п.) писать вообще заибешься.

                        Ну то что мейкфайлы какаша не означает что автоконф шоколад. И что убрав одно бремя, он не заменит его на еще более тяжелое.

                        А кто что думает про cmake? В сравнении с гнусными тулзами мне он как-то больше нравится.
                        Ответить
                        • > А кто что думает про cmake?
                          Синтаксис - ебанутый. Но в целом, если не требуется писать свои модули на его языке, то для крестов и сишки очень даже юзабельно, мне нравится.
                          Ответить
                        • > И что убрав одно бремя, он не заменит его на еще более тяжелое.
                          Он еще вторую проблему пытается решить - как-то адаптировать сборочную среду и хидеры ко всякому нахуй не нужному говну мамонта, которое ты никогда не увидишь.

                          Если проект простой, и если свои тесты и реакцию на них не мутить - входные файлы для автотулзов получаются довольно компактными, буквально десять-двадцать строчек.
                          Ответить
                        • > А кто что думает про cmake?
                          Абсолютное говно, но лучше ничего пока нет. Юзать в принципе можно:
                          1) Out-of-source билды из коробки. Must Have.
                          2) Можно писать реюзабельные сборки. Если написать makefile для модуля, то соединить его с другим makefile довольно проблематично. Грамотно написанный CMakeLists.txt приклеивается к произвольному cmake-проекту гораздо проще.
                          3) Терпимое апи для поиска внешних либ.
                          В остальном cmake-полный финиш.

                          Упоротые гугловцы написали свой gyp для хромиума, который чуть лучше в плане дизайна, но настолько сырой, что это даже не смешно. Например, в случае ошибок во входном файле, он иногда падает с ошибкой обращения по индексу. А теперь они додумались написать Генератор Генераторов (gn - на самом деле, он должен просто генерить ниндзя-файлы, но должен заодно генерить и gyp-файлы), гнушники оценят.
                          Что показательно, у гугла есть нормальная внутренняя система сборки, но они никому её не показывают.

                          я джва года жду аналог gradle для крестов с менеджментом зависимостей, автозагрузкой модулей с гитхаба и декларативным скриптовым дсл (lua в теории подходит, груви не нужен). Когда-нибудь терпение кончится и я сяду писать свой.
                          Ответить
                          • > gradle для крестов
                            А у гредла нету модулей для крестов? Только жаба, только хардкор?
                            Ответить
                            • > А у гредла нету модулей для крестов?
                              Есть. Но распространять сишные либы в бинарном виде - это кощунство. Только исходники, только хардкор.
                              Ответить
                          • >я джва года жду аналог gradle для крестов с менеджментом зависимостей
                            вроде как qbs от Qt'шников подходит
                            Ответить
                            • про qbs знаю, НО

                              > от Qt'шников
                              Qt-way мне никогда не был близок. + очередной язык.

                              Как дистрибьютятся модули? В собранном виде? Как резолвятся конфликтующие версии в транзитивных зависимостях (A -> (B v1.0 -> C v0.5), A -> (D v2.0 -> C v0.8))? Можно указать репу с гитхаба как модуль?

                              Есть положительный опыт использования в случае произвольных проектов, не Qt?
                              Ответить
                          • > и декларативным скриптовым дсл (lua в теории подходит,
                            зачот

                            > терпение кончится и я сяду писать свой.

                            ну как, сел?
                            Ответить
                  • Autotools, а не автоконфы.
                    Ответить
                    • Спасибо кэп, я уже давно признал ошибку, и даже ссылку кинул с настоящим названием.
                      Ответить
                      • Я вашу простынь шириной в 4 сантиметра не читал.
                        Ответить
        • >>Ant can be used to pilot any type of process which can be described in terms of targets and tasks.

          Любая система сборки начиная с Make это может, но не у всех есть ебланский XMLный синтаксис
          Ответить
    • Кто соснул ИТТ?
      Ответить
    • чудна штука лисапед
      жопа едет, ноги нет
      Ответить
    • в чём причина течки по скале?
      import math._
      def moelijkeFunctieMetDerdeMachtsEnLog(num: Int) = {
       val numSquare = num * num
       (cbrt(numSquare) + log(numSquare)) toInt
      }
      Ответить
      • В чём причина течки по пхп?
        В чём причина течки по ЛГБТ?
        В чём причина течки?
        Ответить
    • какой бугор ))
      https://pbs.twimg.com/media/F22RLyWW4AAkqg4?format=png&amp;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`, и вот там уже можно императивно на рустне писать чо угодно. Хоть блядь котиков в твиттер пости при сборке.

      Получается пиздато

      А разве нет??
      Ответить

    Добавить комментарий