1. C++ / Говнокод #26609

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    https://habr.com/ru/post/497114/
    
    А, кстати о темплейтах. Рабочий проект, где каждый .cpp-файл компилируется по 5-7
    минут даже без оптимизаций? Время до первой диагностики компилятора в те же 5
    минут? Пердёж компилятора на десятки мегабайт в случае ошибок? Да, я сохранял в
    файл и замерял ради интереса. Потребление памяти компилятором в 5-10 гигов на
    файл? Билдсервер с 32 ядрами и 64 гигами памяти, на которой нельзя запускать
    больше чем этак 8 параллельных потоков компиляции? Проект на несколько десятков
    kloc, собирающийся на ней полчаса? Получите, распишитесь.
    
    И тулинг. Мне куда проще находить, на что у меня тратится память, в том же хаскеле,
    который, как известно, только для факториалов и годится. Системы сборки? Ха. Апгрейд
    компилятора для прода? Жди лет пять после релиза стандарта. Пакетный менеджер? Ха-ха.
    Reproducible builds? Ха-ха-ха. Все места, где я работал, на это либо вообще забивали,
    либо вкладывали какое-то совершенно неадекватное количество ресурсов. Я понимаю,
    почему так происходит, у этого всего есть абсолютно логичные и объективные причины,
    по-другому и выйти не могло, но я устал так жить.

    Какой багор )))

    Запостил: j123123, 27 Апреля 2020

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

    • сегда удивлялся тому, что у си и отвевтвлений при их сроке жизни самый бедный тулчейн
      Ответить
    • > Тварь я дрожащая или право имею? Получу UB тут или нет? А тут? А тут? Да что там вектор, мы не так давно с khim довольно долго обсуждали, как написать строку, и едва смогли определиться с тем, каким может (или должен) быть тип элементов строки, чтобы не было алиасинга.

      То ли дело ассемблер - там всей этой хуйни с алиасингом и UB тупо нет. (хотя на самом-то деле кое в чем UB есть и в ассемблере, но это, сука, надо очень постараться)
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • В некоторых ассемблерах был неочевидный парсинг косвенной адресации, из-за чего программисты делали ошибки. Но всё-таки это не UB, а плохой дизайн.
          Ответить
        • Ну например в процессора может не быть описано, какая конкретно хуйня произойдет, если при инструкции push адрес стекпоинтера перешагнет из 0x00000000 в 0xffffffff область, в доках на проц такой хуйни не описывалось, и процессор может на такой хуйне натурально глюкануть, даже если в адреса 0xffffffff писать можно. А может и не глюкнуть, это как повезет, поведение может зависеть от конкретной ревизии процессора, версии микрокода и прочей хуйни

          Ну и можно тут например почитать про ошибки и варнинги ассемблера https://developer.arm.com/docs/dui0807/e/assembler-errors-and-warnings/list-of-the-armasm-error-and-warning-messages

          A1316E: Shifted register operand to MSR has undefined effect

          A1319E: Undefined effect (using PC as Rs)

          A1320E: Undefined effect (using PC as Rn or Rm in register specified shift)

          A1321E: Undefined effect (using PC as offset register)

          A1322E: Unaligned transfer of PC, destination address must be 4 byte aligned, otherwise result is UNPREDICTABLE

          This error is reported when you try to use an LDR instruction to load the PC from a non word-aligned address. For example:

          AREA Example, CODE
          LDR pc, [pc, #6] ; Error – offset must be a multiple of 4
          END

          This code gives an UNPREDICTABLE result.
          Ответить
    • j123123, ты здесь на говнокоде только write-only?
      Ответить
      • Нет. Откуда такие выводы?
        Ответить
        • Что-то в тредах тебя мало заментно.
          Ответить
          • В тредах обсуждают компы с помойки и скриптушню/GCшню. Это не уровень j123123.
            Ответить
    • показать все, что скрытоvanished
      Ответить
      • > с потреблением памяти

        Компилятором то? Да почти ноль по сравнению с крестами. У йажи конпелятор же вообще игрушечный.
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • > IDE

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

            Количество файлов и сложность их парсинга и автодополнения там просто несопоставимые.
            Ответить
    • #include <boost/spirit.hpp>
      
      // получите 5-7 минут конпеляции
      Но прекомпайлед хедеры сильно помогают против буста, на самом деле.
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • Генератор парсеров.
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • Не требует внешнюю тулу, клеит парсер в крестокомпайлтайме. В общем-то это единственное его преимущество. Если есть возможность заюзать внешний генератор - нахуй и впизду этот спирт.
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • Если ты хочешь упороться и написать header-only либу, к примеру.
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • У крестов компайлтайм пока слабоват для генерации доков или рестов - не умеет поля и классы перечислять, надо вручную помогать через какой-нибудь boost::fusion.
                      Ответить
                  • Надо сделать чтоб можно было любую внешнюю тулу перекомпилировать в крестометушню (например, если это какой-нибудь bison, надо сделать на шаблоноговне какую-то минимальную виртуалку с линуксом, где этот бизон запускается), и потом эту поебень юзать как header-only
                    Ответить
                    • Это ж сколько терабайт памяти понадобится...
                      Ответить
              • Там есть проблемка, что за ожиданием компиляции некоторых грамматик можно встретить тепловую смерть Вселенной.
                Ответить
      • Звучит как очередная порнуха на гитхабе.
        Ответить
    • показать все, что скрытоvanished
      Ответить
      • > скачивают

        Жопа в том, что для крестов нет какого-то де-факто способа сборки и доставки зависимостей, как в тех же йаже или педоне. Плюс геморрой с версиями конпеляторов и стандартной либы, особенно на винде. В итоге у всех свои велосипеды со своими костылями и багами.

        Видимо у ОПа тупо юзаются конпелятор и либы из системы со всеми вытекающими последствиями.
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • Oh, my sweet summer child...

            Докеры-хуёкеры это круто, конечно (отбросим тот факт, что с виндой они буквально год-два как стали более-менее юзабельными). Но людям то хочется и локально с исходниками поработать.

            И вот тут-то и начинаются проблемы. Виндовые тулчейны разных версий плохо друг на друга влияют, особенно если тебе дрова собирать. 100500 версий либ надо на диске параллельно держать, а они в крестах далеко не по мегабайту весят, да ещё и умножаются на всякие debug/release да 32/64. Как-то это всё ещё разводить в системе сборки, чтобы лишнего говна не натянуло (а у систем сборки в крестах полно своих заскоков).

            Оно реализуемо, конечно, но ОП про неадекватное количество ресурсов не просто так пишет. Там даже на чистом докере без локальной сборки неплохо поебаться придётся.

            Но у большинства контор всё проще - некогда с докерами пердолиться, код пилить надо. Собирают тем, что от предков досталось.
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • > меньше весят

                Сколько там ваши ноде модулес да жабьи кеши весят то? Пара гигов на тыщу либ? Одна сборка буста весит гига полтора. А их надо хотя бы штуки 4.

                > что значит влияют

                В основном это проблема с драйверными китами, обычные сдк они походу тестируют. Ставишь новый тулчейн, а предыдущий пошёл по пизде, в нём теперь пары тулов не хватает. Ставишь следующий, а после него у предыдущих какая-то переменная проебалась. Кто с msvc работал - тот в цирке не смеётся.

                > почему не унифицировать софт

                Потому что если удобной и быстрой доставки всего этого говна нет, люди будут собирать тем, что у них на компе завалялось. Пока совсем собираться не перестанет. Реальность она такая.

                А если потом ньюфагу надо собрать древнюю ветку - это отдельное веселье :)
                Ответить
                • > Одна сборка буста весит гига полтора. А их надо хотя бы штуки 4.
                  Кстати да, подтверждаю. У меня папка с либами «Vcpkg» (там буст для x64-windows и x64-windows-static и ещё пара мелких либ) весит «2.99 ГБ (3 219 287 415 байт)», а внутри — «Файлов: 57 155; папок: 4 699».
                  Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                  • Буст можно ставить частями, но там дофига внутренних зависимостей. Обычно его целиком собирают чтобы не ебать мозг и не плодить кастрированные сборки.

                    Питон с ждк весят сраные копейки, да и к системным путям гвоздями не прибиты. Их можно даже в репу закоммитить и никто не заметит, лол. И если в прыщах тулчейн можно отпилить от системных путей путём его пересборки, то с доставкой msvc всё гораздо веселее.
                    Ответить
                  • > причём здесь с++

                    При том, что это пример из практики разработки на с++. Можешь привести подобный пример из практики разработки под йажу или питон? Я думаю нет.
                    Ответить
    • показать все, что скрытоvanished
      Ответить
      • Пиздую в хаскель, уязвимостей нет, бойлерплейта нет, денисов поповых нет, экзепшонов про поля нет, падений нет, UB нет, работы нет (на самом деле есть).
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • На самом деле на любой вкус, от вёбизянства через блокчейн до разработки компиляторов до какой-то херни в банках. Мне раньше какие-то вакансии сваливались, надо будет посмотреть, что всё ещё релевантно.
            Ответить
    • &#128546;
      Ответить
    • В D шаблонная метушня вообще в почете, да и пишется проще чем в плюсах.
      Но как-то вылезла проблема с превышением длины mangled-имен (лимит то ли 64 Кб, то ли больше).
      Ответить
      • D D D

        А ты на нём на работе пишешь или дома?

        Есть ли вообще вакансии, проекты? Какой класс задач стоит решать с D, если это хобби?

        У меня валяется книжка Александреску редакции начала десятых, но она увы как памятник.
        Ответить
        • На работе плюсы, D по приколу.
          По мне так в D хорошо писать сетевые тулзы/сервера, т.к. есть либа vibed на фиберах, т.е. он подходит для тех же целей, для которых создавался Go.
          Проекты и конторы использующие есть, вакансий не видел.
          Ответить
          • https://novosibirsk.hh.ru/vacancy/24221598
            Ответить
          • А как у D c ABI? FFI через сишные ебеня или что-то своё есть?

            Я понимаю, что это гуглится, но интереснее послушать из первых рук.
            Ответить
        • J J J

          А ты на нём на работе пишешь или дома?

          Есть ли вообще вакансии, проекты? Какой класс задач стоит решать с J, если это хобби?
          Ответить
      • > вылезла проблема с превышением длины mangled-имен (лимит то ли 64 Кб, то ли больше).
        Какой багор )))
        А в крестах там можно? Сделать какую-нибудь рекурсивную экспоненциальную питушню.
        Ответить
        • Можно, буст изкоробки планку в килобайт спокойно пробивает.
          Ответить
        • В итоге прикрутили md5 к именам https://github.com/ldc-developers/ldc/pull/1445
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • Как-будто ты сгенерённую хуйню на 64 килобайта стал бы читать...
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • А студия вроде так и делает, правда с ворнингом. Про гцц не знаю, возможно тоже.
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • Вроде просто будет ругаться на задвоившийся символ, т.е. не фатально.
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • > Почему принято ругать именно С++?
                          > Остальные пыхеры с жабоебами слишком тупы

                          PHP (5585)
                          C++ (2489)
                          Java (1441)

                          Если пользоваться твоей классификацией, то эрэнэрщики умнее крестовиков более, чем в два раза. А вот йажевики да, потупее будут.
                          Ответить
                          • Что это? Кол-во вакансий? На одного сишника требуется 2 пхпшника и 0.5 джависта?
                            Ответить
                          • показать все, что скрытоvanished
                            Ответить
                            • Половину цэплюсплюсного говнокода запостил jциферки, который тоже не крестовик так-то)
                              Ответить
                              • Половину цппшного кода j123123 - это вообще не код.
                                Ответить
                              • показать все, что скрытоvanished
                                Ответить
                                • Пхпшники плодоносят скудоумием и просто друг друга ругают.
                                  Ответить
                                • Ругать пхп на хабре было модно почти десять лет назад

                                  https://habr.com/ru/post/142140/

                                  Пока искал статью, наткнулся на другую, с впечатляющим названием:

                                  https://habr.com/ru/post/215777/
                                  Ответить
                                  • показать все, что скрытоvanished
                                    Ответить
                                    • Вы просто очень не любите всё советское php
                                      Ответить
                                      • показать все, что скрытоvanished
                                        Ответить
                                        • > В нем появились пространства имен, >реализация ООП по уровню сравнимая с >Java, автоподгрузка классов.

                                          питухи думают, что проблема пхп была в плохой реализации ООП, лол
                                          Ответить
                                    • Если можно, потом напишите, пожалуйста, саммари и рецензию на ГК.
                                      Я мельком глянул, а там какие-то килобайты текстовой психозы, потом пара примеров кода, потом снова психоза. Что-то там про тупых программистов, которые используют питушню в качестве инструментов (не знаю, лучше ли было повысить порог вхождения, чтобы только доктора наук осилили?), что-то ещё.

                                      Примеры какие-то питушарские
                                      // Поскольку выше было сказано, что на Javascript пишет много кто, то нередка ситуация, когда одну и ту же функцию С-шник напишет так:
                                      function isEven(arg) {
                                        if (arg % 2 == 0)
                                          return 1;
                                        else
                                          return 0;
                                      }
                                      
                                      // Любитель Perl выдаст
                                      function isEven(arg) {
                                        if (arg % 2 == 0)
                                          return 1;
                                        else
                                          return undefined;
                                      }
                                      
                                      // Программист на PHP может выдать и:
                                      function isEven(arg) {
                                        if (arg % 2 == 0)
                                          return 1;
                                        else
                                          return null;
                                      }
                                      
                                      // Тем не менее в случае такого вызова, корректно будет работать только первый вариант.
                                      
                                      if (isEven(3) == false) {
                                          alert("ба, нечетное число!");
                                      }


                                      Такое ощущение, что у автора проблемы с абстракциями, и он пришёл из какой-нибудь вербозной йажи. Или с PHP, где во всех случаях вместо null возвращают false. Мне кажется, все написали бы
                                      function isEven(arg) {
                                        return arg % 2 == 0;
                                      }

                                      И проверяли бы так:
                                      if (isEven(3)) {
                                          alert("ба, нечетное число!");
                                      }


                                      Хотя, я, разумеется, привык к языку, а он развивает абстрактность мышления и чувство семантики.
                                      1. "== false" использовал редко, в основном в рамках триады true/false/null, когда == false отличается от !
                                      2. "!" использую, когда автор сказал бы "== false"
                                      3. "== null" использую для сравнения с пустотой - отсутствием поля либо явно возвращённой нулстотой
                                      4. "!!" или "Boolean" - когда надо кастануть в Boolean, .filter(Boolean) - когда надо убрать пустошню
                                      5. "" использую, когда автор сказал бы "== true"
                                      Ответить
                                      • Нафига писать === false если не требуется отличать null или 0 от false? Странный пример какой-то. Если функция с префиксом is возвращает что-то, что я не могу поюзать в обычном if и надо писать именно === false, то её автор мудак.
                                        Ответить
                                        • Там "== false", а не "=== false". Он как раз говорит, что вариант сишника с нулём работает.

                                          И теперь мне чуть больше понятен бугурт автора
                                          1. ! работает для false, 0, "", null, undefined
                                          2. == false работает для false, 0, ""
                                          3. === false работает только для false
                                          Какой багор )))

                                          P.S. Но явное "== false" - питушня вербозная.
                                          Ответить
                                        • Кстати, это именно в той статье было про проверку паролей в JS, которую недавно вспоминали, когда обсуждали сравнение в жс.

                                          Если случайно выбрать не то поле и подставить вместо пароля undefined, то создастся пользователь с паролем "undefined". Если тот же код использовать и при проверке пароля, на сайт можно будет ещё и заходить. Разумеется, с любым паролем.

                                          var request = {
                                            "user"     : "alex",
                                            "password" : "sdjk23h78dg2"
                                          };
                                          
                                          // опа, опечатка
                                          if ( /^[a-zA-Z0-9]{8,}$/.test(request["pasword"]) ) {
                                            save_user_to_database(request);
                                          }


                                          Отличный способ выстрелить себе в ногу.
                                          Ответить
                                      • Чот какой-то совсем тупой нахрюк.
                                        [isEven_1_0, isEven_1_undefined, isEven_1_null].forEach((f) => console.log([3, 4].map((x) => { if (f(x)) return "even"; else return "odd"; } )));
                                        VM162:1 (2) ["odd", "even"]
                                        VM162:1 (2) ["odd", "even"]
                                        VM162:1 (2) ["odd", "even"]
                                        Ответить
                                    • показать все, что скрытоvanished
                                      Ответить
                                  • >Говоря о PHP мне нравится идея что плохой дизайн приложений получается из-за сообщества которое советует плохие советы. Т

                                    Человек под ником zviryatko получает от меня лучи добра и уважения в далекий 2014-й.
                                    Ответить
                  • Питушня какая-то. Надо брать первые 300 символов (помните, кто-то говорил, что >300 - вореции) и, если длина была больше 300, добавлять дайджест от исходного. Тогда и читаемость останется, и с уникальностью меньше проблем.
                    Ответить
                    • По ссылке выше и ввели ключ -hash-threshold, длиннее которого имена хешируются.
                      "Linking Weka's code fails with a threshold of 500: phobos contains a few large symbols (one larger than 8kb!) "
                      Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • ага, только до завязки дошел и хоба - уже закончилось, слово намек на следующую серию в седьмом сезоне дешевой драмы
                        Ответить
                        • std::basic_string<std::generic_allocator <std::generic_allocator_traits, читать далее >>>
                          Ответить
        • Запросто, даже используя только изкоробочные типы (а ещё говорят, что в крестах стдлиба плохая!): https://ideone.com/InsIxO.

          На «MSVC» можно прямо mangled имя получить через нестандартный («raw_name()»):
          std::cout << typeid(std::make_integer_sequence<int, 100>).raw_name() << std::endl << std::endl;
          std::cout << typeid(std::make_integer_sequence<int, 1000>).raw_name() << std::endl;

          Выведет:
          .?AU?$integer_sequence@H$0A@$00$01$02$03$04$05$06$07$08$09$0L@$0M@$0N@$0O@$0P@$0BA@$0BB@$0BC@$0BD@$0BE@$0BF@$0BG@$0BH@$0BI@$0BJ@$0BK@$0BL@$0BM@$0BN@$0BO@$0BP@$0CA@$0CB@$0CC@$0CD@$0CE@$0CF@$0CG@$0CH@$0CI@$0CJ@$0CK@$0CL@$0CM@$0CN@$0CO@$0CP@$0DA@$0DB@$0DC@$0DD@$0DE@$0DF@$0DG@$0DH@$0DI@$0DJ@$0DK@$0DL@$0DM@$0DN@$0DO@$0DP@$0EA@$0EB@$0EC@$0ED@$0EE@$0EF@$0EG@$0EH@$0EI@$0EJ@$0EK@$0EL@$0EM@$0EN@$0EO@$0EP@$0FA@$0FB@$0FC@$0FD@$0FE@$0FF@$0FG@$0FH@$0FI@$0FJ@$0FK@$0FL@$0FM@$0FN@$0FO@$0FP@$0GA@$0GB@$0GC@$0GD@@std@@
          
          .??@e478c360da54a681ea25f5e24da4d618@
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • Нет, это всё недокументированная питушня, о которой знает только конкретная версия конкретного линкера. Разманглить это можно либо за счёт отладочных данных (точно не знаю, есть ли там оригинальные имена), либо за счёт реверс-инжиниринга. Собственно, не в последнюю очередь благодаря недокументированности и нестандартизированности манглинга у крестов и нет ABI.
              Ответить
              • cppfilter. Бля, забыл как он правильно пишется.

                c++filt, во.
                Ответить
                • Не удалось подтвердить, что это сервер www.cppfilter.com.
                  Его сертификат безопасности относится к owa.cppfilter.com.
                  Возможно, сервер настроен неправильно или кто-то пытается перехватить ваши данные.


                  Какой багор (((
                  Ответить
                • О. В ебаной 16ой убунте был баг с деманглером в perf.

                  https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1396654

                  Приходилось через c++filt пайпать выхлоп.
                  Ответить
                  • А самое гнусное (за что я особенно люблю убунту), они как-то вроде и чинят, но баг вылазит в каждой новой версии.

                    Судя по репортам он и в 15ой и в 17ой, и в 18ой, итд.
                    Ответить
                    • Прямо как в «ЙАЖА»: https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6798979#. Когда на компе больше одного лупбек-интерфейса, NetworkInterface.getNetworkInterfaces() вместо списка интерфейсов возвращает хуй с маслом. И висит эта прелесть уже больше одиннадцати лет.

                      (UPD: встретил этот баг в реальном мире на своём компе, когда расследовал — нашёл его в исходниках «OpenJDK».)
                      Ответить
                      • Традиции Sun.
                        Они были известны своим похуистичным отношением к багам.

                        UPD: я так понял по Russian, что это личная находочка.
                        Ответить
                  • Какой багор )))
                    Ответить
                    • Люди рассказывающие что убунта юзер-френди дистрибутив — нагло врут.

                      На SO хинты, в стиле: скачайте исходники, поправьте седом пару строк и пересоберите perf.
                      https://stackoverflow.com/questions/33057653/perf-enable-demangling-of-callgraph/34061874#34061874

                      apt-get source linux-tools-`uname -r`
                      sudo apt-get build-dep linux-tools-`uname -r`
                      cd linux-`uname -r | sed 's/-.*//'`/tools/perf
                      make
                      
                      # now you should see the new "perf" executable here
                      ./perf
                      
                      There should be also some way to create a new linux-tools-common package to really integrate it into your system. For now to override the official perf with your new one, just set your PATH:
                      
                      export PATH=~/install/linux-`uname -r | sed 's/-.*//'`/tools/perf:$PATH

                      При том там попутно куча всякой питушни вылезет, при компиляции.

                      Потом нужно запаковать это в deb и проинсталлить, что превращается в квест на целый день. А всё из-за косоруких уебней, не желающих нормально чинить баги.

                      Если смотреть с этой точки зрения та же слака будет попроще.
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • Действительно. В «Windows» вот вообще нет никакой компиляции.
                          Ответить
                        • >зачем пользовтелю убуты перф?

                          Тут недавно https://govnokod.ru/26589#comment541916 репортили об установке серверной убунты.

                          Да и Роман когда-то рассказывал, что в Яндексе жарились с переходом с 14ой на 16ю.
                          Ответить
                      • > запаковать в deb и проинсталлить

                        Нахуй и в пизду. Всё, что я пересобрал, я тупо накатываю в /opt/<имя проги>
                        Ответить
                        • показать все, что скрытоvanished
                          Ответить
                          • > никакие tar

                            Да ладно? Слакбилды как раз tar'ки делали последним шагом. В них даже установочный скрипт можно было присунуть, насколько я помню.

                            Собственно подобной хуйнёй я и собираю бинарники для /opt.

                            В path далеко не всё нужно. Да и с ld path особых проблем не помню.

                            На самом деле, в убунте что-то пересобирать надо довольно редко, поэтому мне тупо лень разбираться с пакетами.
                            Ответить
                            • показать все, что скрытоvanished
                              Ответить
                              • > ld_library_path

                                Да банальным враппером на шелле. Я не хочу пересобранные либы всей системе показывать - ей от этого может стать плохо. Именно поэтому я против установки чего-либо в системные каталоги.
                                Ответить
                                • показать все, что скрытоvanished
                                  Ответить
                                  • > суперкастомное

                                    Да ну, казуальщина всякая. Какой-нибудь gcc'шный тулчейн под arm. Няшный ffmpeg во времена унылого avconf'а и т.п.

                                    Уже давно ничего не собирал, на самом деле. Совсем охомячился.
                                    Ответить
                                    • Вертайся на слаку. Там тебе придется чонить собирать постоянно. Правда, собирать по слакбилдам много ума не надо. Опции подправил, да и всё.
                                      Ответить
                  • Кстати, а в дебиане это исправлено? Чисто убунтовый баг?
                    Ответить
              • показать все, что скрытоvanished
                Ответить
                • Под прыщами можешь пропустить список символов через c++filt. Но это тебе не особо поможет, поверь. Ибо настоящие имена там читаются ничуть не лучше замангленых.
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • Ну да, каждому компилеру своя тула нужна. Это скорее для парсинга каких-нибудь логов, чем для разглядывания символов.
                      Ответить
                      • Я видел такие тулы для разных компиляторов. Проблема не только в том, что каждому компилеру своя тула нужна, но ещё и в том, что каждой версии компилера нужна своя версия тулы.

                        Время от времени к алфавиту манглинга добавляются новые буквы из-за того, что в языке появляются новые конструкции.
                        Ответить
            • >> всмысле, как разманглить её обратно?

              Первый пример (.?AU?$integer_sequence@H$0A@$00$01$02$0 3$04$05$06$07$08$09$0L@$0M@$0N@$0O@$0P@$ 0BA@$0BB@$0BC@$0BD@$0BE@$0BF@$0BG@$0BH@$ 0BI@$0BJ@$0BK@$0BL@$0BM@$0BN@$0BO@$0BP@$ 0CA@$0CB@$0CC@$0CD@$0CE@$0CF@$0CG@$0CH@$ 0CI@$0CJ@$0CK@$0CL@$0CM@$0CN@$0CO@$0CP@$ 0DA@$0DB@$0DC@$0DD@$0DE@$0DF@$0DG@$0DH@$ 0DI@$0DJ@$0DK@$0DL@$0DM@$0DN@$0DO@$0DP@$ 0EA@$0EB@$0EC@$0ED@$0EE@$0EF@$0EG@$0EH@$ 0EI@$0EJ@$0EK@$0EL@$0EM@$0EN@$0EO@$0EP@$ 0FA@$0FB@$0FC@$0FD@$0FE@$0FF@$0FG@$0FH@$ 0FI@$0FJ@$0FK@$0FL@$0FM@$0FN@$0FO@$0FP@$ 0GA@$0GB@$0GC@$0GD@@std@@) можно разманглить обратно с помощью какой-то утилиты (что-то типа «demangle»), второй пример (.??@e478c360da54a681ea25f5e24da4d618@) похож на криптографическую сумму, которую напрямую разманглить нельзя. Во втором примере спасут только символьные файлы.
              Ответить
          • В стандартной библиотеке есть даже оператор создания длинных имён?! Охренеть.
            Ответить
          • Кстати, именно поэтому я за «Java»: там манглинг строго стандартизирован, человекопонятен (однобуквенные примитивы, вроде I для интов, и классы в виде «Ljava/lang/String;») и вообще очень удобен.
            Ответить
        • Вот блин, не написал в посте (да, я автор того поста) — gdb в том проекте с темплейтами на 5 минут пришлось патчить, потому что иначе он падал из-за слишком длинных мангленных имён.
          Ответить
      • >вылезла проблема с превышением длины mangled-имен (лимит то ли 64 Кб, то ли больше).

        Надо хешировать. Чтоб вместо "my_very_long_shitty_mangled_name" было md5("my_very_long_shitty_mangled_name")
        Ответить
        • В «MSVC», судя по реальному примеру gost'а, так и сделали, если замангленное имя в лимит не влезает.
          Ответить
    • показать все, что скрытоvanished
      Ответить
      • > Надеюсь вы понимаете потенциальные последствия разработки и отладки кода в системе с принципиально неверным поведением системных вызовов.

        > sumanai
        > сегодня в 16:41
        > Как будто в оригинале оно в 100% случаев верное. Ошибки есть везде.
        > Моей разработке (бекенд на PHP) известные ошибки WSL не мешают.

        пока читал первую строчку, удивлялся такому ответу
        Ответить
        • Один хер это лучше, чем цыгвин.

          Первые сборки WSL конечно трешовые были, но в последних виндах они вполне рабочие.
          Ответить
        • Ну и это же для разработки и отладки, не для продакшен серваков...
          Ответить
          • потом мы его увидим на стековерфлоу с вопросом "а че так медленно работает" и отстуствующим описанием контекста, из которого можно будет понять, что это WSL
            Ответить
    • https://habr.com/ru/post/497114/#comment_21551234 там кстати roman_kashitsyn объявился, и я ему даже откомментировал
      Ответить
      • >От Haskell я тоже порядком устал. "Знать" Haskell становится всё сложнее и сложнее, в GHC льётся нескончаемый поток плохо документированных, несогласующихся расширений.

        А я тут говорил много лет назад, что не стоит серьёзно морочить себе голову этой хуетой.
        Ответить
      • Классный линк

        Я не прочитал ни одной статьи по плюсам с прошлого лета, и мне офигенно.
        Я не написал ни строчки осмысленного кода на плюсах за последние три месяца, с тех пор, как распустили отдел, где я работал, и мне просто супер.
        Я позволил себе хотеть больше никогда не писать на плюсах, и у меня появились крылья.


        Читал и мысленно комментировал сентециями с ебаного.it.
        Ответить
        • Отрывок из книги "Как перестать писать на крестах и начать жить".
          Ответить
          • Кто уже попробовал? Плюсы, минусы, подводные камни?
            Ответить
            • Я даже и не начинал.

              Чувствую себя, как пустой сосуд, зато счастливый.
              Ответить
      • >Сравнить два POD одним memcmp? Нельзя.
        >Использовать строки, где внутри char*, не думая об алиасинге? Нельзя.

        >паддинг
        >алиасинг
        Сишкопроблемы.

        Кстати Царь же пояснял что PODы в общем не нужны, и нужно юзать массивы.
        Но анскильные животные как обычно не послушали.

        Там в треде остро не хватает Царя. Rust-сектанты распоясались, некому урезонить анскильных питухов.
        Ответить
      • показать все, что скрытоvanished
        Ответить
        • Потому что надо думать категориями продукта, а не языка.
          Ответить
        • Заебаться может и да, а вот хуита вроде «бля, как же много времени я проебал на изучение этого блядского кривого говна, и основная моя ценность как специалиста заключается в том, что я с этим блядским кривым говном умею работать» может возникнуть только от параши вроде крестов. Сишку так задрачивать не надо.
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • > Кажется что ценность программиста в первую очередь совсем не знании синтаксиса языка, не?
              В C++ одного знания синтаксиса мало. Там надо умение писать и читать всякую метушню на шаблоноговне, понимать что вот так делать можно, а вот так нельзя потому что UB, знание всяких подводных камней, best practices и далее по списку. И да, вся эта херня достаточно много ценности программиста составляет, и она завязана на конкретный говноязык.
              Ответить
              • Ну шаблоны же это тоже язык со своим синтаксисом и семантикой) И я к тому, что знающий кресты программист уровня вон Романа вполне перейдет на любой другой язык, не?
                Ответить
                • Ну вообще хуй его знает. Для крестов надо знать кучу крестоспецифичной питушни, которая в другом языке будет вообще нахуй не нужна, и есть даже вероятность, что знание какого-то шаблоноговна будет даже мешать т.к. человек будет рассуждать категориями этих говношаблонов, а в том языке к этому может быть совсем другой подход.
                  Ответить
                  • >крестоспецифичной питушни, которая в другом языке будет вообще нахуй не нужна,
                    например?

                    > в том языке к этому может быть совсем другой подход.
                    Это правда, но такая хрень есть со всеми языками.
                    Переходя на новый язык, петух берет с собой в голове частичку старого.
                    Я видел как жабисты писались на питоне писать как на жабе, например (один файл -- один класс, сеттеры/геттеры итд)
                    Ответить
                    • >>крестоспецифичной питушни, которая в другом языке будет вообще нахуй не нужна,
                      >например?
                      Например, нахуй тебе знать про то, что в крестоговне вот та хуйня UB а вот та хуйня не UB, есть public private protected, множественное наследование, friend классы, если ты пишешь на каком-нибудь языке, где этой херни просто нет, типа хаскеля?
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • > Знание понятия "UB" в целом полезно, UB даже в сишечке есть.
                          Есть языки, где нет
                          > Они в джаве есть, и в C#
                          Есть языки, где нет
                          > Оно есть в питоне, и даже активно используется
                          Есть языки, где нет
                          > а, ты говорил про конкретный язык) А я думал вообще про любой.
                          Я говорил что некая питушня в каком-то другом языке может быть нахуй не нужна. Про любой - не любой я вообще не уточнял.
                          Ответить
                          • >> Знание понятия "UB" в целом полезно, UB даже в сишечке есть.
                            > Есть языки, где нет
                            Это только те хорошие языки, где код просто не скомпилируется, если ты не докажешь, что вон в ту функцию передал отсортированный массив квадратов простых чисел, лежащих в пределах от 100500 до 10005000. В остальных найдётся контрактная питушня, которая за себя не отвечает. Не так разрушающе, как UB, но по эффектам где-то на том же уровне.
                            Ответить
                        • >>есть public private protected,
                          >Они в джаве есть, и в C#

                          Синтаксический мусор для анскильных отбросов.
                          Единственный полезный модификатор — сопзт.
                          Но его отребье украло из Сишки.

                          Хотя возможно стоило сделать наоборот — немутабельные по умолчанию, и модификатор для включения мутабельности.
                          Ответить
      • Капец. Он собрался писать на D. Он же его хуесосил вроде на ГК раньше.
        Ответить
        • На D разве что в better-C режиме писать, потому что в D завезли GC, GC - говно
          Ответить
          • Есть предложения для указателей с подсчетом ссылок https://wiki.dlang.org/FatPointer
            GC можно отключать в любом месте атрибутом @nogc.
            Но наличие GC ломает привычный подход с RAII.
            Итог - сойдет вместо питона для среднего размера скриптов (особенно если GIL напрягает).
            Ответить
            • В D хотя бы можно отключить GC. В «Йаже» такого выбора нет.

              Без RAII писа́ть можно, но придётся себя контролировать, чтобы не забыть что-то освободить.
              Ответить
            • А вообще обидно. Всё начиналось хорошо, но из-за увлечения модным GC получился колосс на глиняных ногах.

              Кстати, почему в веб-браузерах утечки памяти, хотя их писа́ли на языках с RAII?
              Ответить
              • Утечки есть везде. И в плюсах, и в PHP, и сортах джавы. Никакой GC не спасет от рукожопов.
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • Подтверждаю.

                    При использовании с «FastCGI» обычно даже сбрасывают FastCGI-сервер через каждые 500 запросов, чтобы нейтрализовать утечки в самом интерпретаторе, если таковые вдруг имеются.
                    Ответить
                    • Ого. Петухи обычно какие-то. А ты какой?
                      Ответить
                    • Хорошие костыли. Забудешь PHP скрипт прибить и прощайте гигабайты оперативы.
                      Ответить
                      • Тут в каком-то говнокоде обсуждали специальную сборку «Java» без GC. При нехватке памяти её просто перезагружают.

                        https://govnokod.ru/26026#comment514049
                        Ответить
                      • >> Забудешь PHP скрипт прибить и прощайте гигабайты оперативы.

                        Вообще в настройках интерпретатора есть параметр memory_limit, ограничивающий выделение памяти.

                        https://www.php.net/manual/ru/ini.core.php#ini.memory-limit
                        Ответить
              • А где их нет? Как избавиться? Уже нашли универсальное решение?
                Ответить
              • Человек, рассказывающий что GC помогает справится с memory leaks в 20% случаев мразь и сектант, а в 80% просто обманутый, неразобравшийся человек.

                GC заметает мемори лики под ковер усложняя их поиск, вот и всё
                Ответить
                • Надо писать все статически, без кучи.
                  Ответить
                  • Вообще нужно писа́ть отдельные маленькие программки, каждая из которых будет выполнять одну операцию, но хорошо.

                    Например, написа́ть программу, которая вычисляет сумму 100 чисел. Поскольку размер известен, память будет выделяться статически. А если нужно сложить 199 чисел, нужно просто эту программу вызвать два раза (при втором вызове вместо одного аргумента подставить результат первого вызова).
                    Ответить
                    • Нада писать программу которая считает сумму 2 чисел, и программу которая запрашивает числа по очереди и передаёт в программу переданную в параметре.

                      $ acummulate sum 199
                      Ответить
                  • показать все, что скрытоvanished
                    Ответить
                  • Надо писать всё на ассемблере, без операционки.
                    Ответить
                    • На форте тогда уж. И достаточно низкоуровнево и не закат солнца вручную.
                      Ответить
                      • Тоже вариант, но пацаны не поймут.

                        Фортеры засели в большинстве своём в омерике, в среде контроллеров трамваев и прочего лоу левел.

                        Хотя в рашке были удачнве попытаки на десктоп и серверные, но сейчас почему-то тишина.
                        Ответить
                        • Форт и Qt - друзья http://mgw.narod.ru/
                          Ответить
                        • А на ассемблере без операционки пацаны поймут?
                          Ответить
                          • Есть вообще возможность не использовать операционку? Вот купил я комп, я не обязан (или не хочу) ставить на него какое либо гавно.
                            Ответить
                            • Есть. Можешь компилить uefi бинарники и запускать их без операционки. Хотя, наверное, это окружение тоже можно назвать операционкой - дрова, файлуха, менеджер памяти...
                              Ответить
                              • показать все, что скрытоvanished
                                Ответить
                                • Ну в принципе да, но в биосе нет интерфейса для дров, нет менеджера памяти да и бинарники длиннее 512 байт надо руками грузить.
                                  Ответить
                                  • показать все, что скрытоvanished
                                    Ответить
                                    • Ну это уже вырожденная хуйня какая-то...

                                      Я вот на ARM'овом контроллере без всяких биосов могу свой код запустить и с железом напрямую работать. Доступ к флешке есть, в сериал порт срать можно. Значит я запускаю свой код на операционке нулевого размера? Лол.
                                      Ответить
                                      • на x86 ты тоже можешь срать в ком порт через IO, и доступ к флешке (через 13h, если бивис ее умеет) тоже есть.

                                        что не так?
                                        Ответить
                                        • Я х.з. что не так, но гуест8 предлагает считать подобную вырожденную хуйню осью.
                                          Ответить
                                          • управление аппаратными средствами - есть, работа с файлами - есть, выполнение прикладных программ - есть, ввод и вывод данных - есть. Формально ОС, фактически - херня
                                            Ответить
                                            • Работы с файлами в BIOS нет, в нём есть только работа с блочными устройствами, а файловую систему нужно самому наворачивать.

                                              Или это про (U)EFI?
                                              Ответить
                                              • Да и запуска прикладнухи длинее сектора в биосе нет.
                                                Ответить
                                                • показать все, что скрытоvanished
                                                  Ответить
                                                  • Ну дык это уже я должен сам сделать, а не "ось". А сама "ось" без моей помощи больше 512 не может. Т.е. если bios это ось, то очень хуёвая ось.
                                                    Ответить
                                                    • показать все, что скрытоvanished
                                                      Ответить
                                                      • Ну MS-DOS таки файлы умела читать. Причём достаточно большие, чтобы можно было какую-никакую прикладнуху делать. И даже немного управлять памятью и процессами. Не такой уж и отстой для того времени.
                                                        Ответить
                                                        • DOS умел читать файлы то ли до 2, то ли до 4 гигов (я не помню, знаковое там было смещение или беззнаковое). Дальше просто fseek не работала. Да, загрузить больше (640 килобайт - размер DOS - размер программы) в conventional было нельзя, но можно было воспользоваться костылями (XMS, EMS, DPMI).
                                                          Ответить
                    • показать все, что скрытоvanished
                      Ответить
                • А указанные проценты к чему относятся, к количеству утечек или к человеку?

                  ЗЫ. ненавижу грамматики 0 уровня
                  Ответить
            • > GC можно отключать в любом месте атрибутом @nogc.

              Говно в том, что рантайм D требует этот GC и если постоянно его держать выключенным, память утечет.
              Ответить
              • Как работает атрибут @nogc?
                Ответить
                • Навешиваешь на функцию и в ней нельзя использовать фичи со сборщиком мусора. Компилятор заругает. https://dlang.org/spec/function.html#nogc-functions
                  Ответить
                  • Но при обращении из этой функции к стандартной библиотеке внутри стандартной библиотеки сборщик мусора будет работать?

                    Я пытаюсь понять, чего боится j123123.
                    Ответить
                  • Читаю: «No-GC functions cannot call functions that are not @nogc».

                    Значит, кучу фишек мы использовать не сможем. Это плохо. С другой стороны, ничего не утечёт, потому что функции, требующие сборщика мусора, мы вызвать не сможем.

                    @nogc void foo()
                    {
                        auto a = ['a'];    // error, allocates
                        a.length = 1;      // error, array resizing allocates
                        a = a ~ a;         // error, arrays concatenation allocates
                        a ~= 'c';          // error, appending to arrays allocates
                    
                        auto aa = ["x":1]; // error, allocates
                        aa["abc"];         // error, indexing may allocate and throws
                    
                        auto p = new int;  // error, operator new allocates
                    }
                    Ответить
                    • Навешиваешь @nogc на main и пользуешься режимом BetterC с malloc
                      Ответить
                    • Да, точно, это в шарпе эта хуйня так с отрубанием GC работает:
                      https://docs.microsoft.com/ru-ru/dotnet/api/system.gc.trystartnogcregion?view=netcore-3.1

                      https://docs.microsoft.com/ru-ru/dotnet/api/system.gc.endnogcregion?view=netcore-3.1

                      В языке D это иначе.
                      Ответить
                      • Сейчас проверил, в «D» пример из справки вообще не компилируется с @nogc:
                        a.d(3): Error: array literal in `@nogc` function `a.foo` may cause a GC allocation
                        a.d(4): Error: setting `length` in `@nogc` function `a.foo` may cause a GC allocation
                        a.d(5): Error: cannot use operator `~` in `@nogc` function `a.foo`
                        a.d(6): Error: cannot use operator `~=` in `@nogc` function `a.foo`
                        a.d(8): Error: associative array literal in `@nogc` function `a.foo` may cause a GC allocation
                        a.d(9): Error: indexing an associative array in `@nogc` function `a.foo` may cause a GC allocation
                        a.d(11): Error: cannot use `new` in `@nogc` function `a.foo`

                        Значит, если указать @nogc в мейне, то мы вообще не сможем из программы вызывать функции, которые используют мусоросборщик.
                        Ответить
                      • В шарпе:

                        Параметры: totalSize

                        Объем памяти в байтах для выделения без запуска сборки мусора. Он должен быть меньше или равен размеру временного сегмента.


                        Если я правильно понял, он выделяет блок памяти, но внутри NoGCRegion временно приостанавливает сборку. Это всего лишь временная задержка сборки мусора, чтобы увеличить скорость на участке, обрабатывающем что-нибудь в реальном времени.
                        Ответить
    • В комментах смешное

      >Для общего развития давно уже хочу освоить Python, но отпугивает толщина

      лол, кажется что проще выучивания питона ничего не может быть. Разве что пивка попить проще
      Ответить
      • может быть, толщина троллей, которые его заклюют?
        Ответить
    • >> помнит ли сейчас кто-то ACE?

      Angiotensin-converting enzyme, он же ангиотензин-превращающий фермент?

      Формат архива, который разрабатывали как альтернативу «RAR»?
      Ответить

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