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 есть и в ассемблере, но это, сука, надо очень постараться)
      Ответить
      • Как может быть UB в асемблере? Разве что в UB в наборе инструкций процессора?
        Ответить
        • В некоторых ассемблерах был неочевидный парсинг косвенной адресации, из-за чего программисты делали ошибки. Но всё-таки это не 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.
            Ответить
    • >Дата рождения 7 сентября 1991 г.
      >Я писал на плюсах лет 17
      молоток!

      Питуху стоит попробовать Йажу, и узнать как там с потреблением памяти
      Ответить
      • > с потреблением памяти

        Компилятором то? Да почти ноль по сравнению с крестами. У йажи конпелятор же вообще игрушечный.
        Ответить
        • яжин компилятор это джит. Джавак вообще нихуя не делает. Так что надо говорить о потреблении памяти джвмом
          А так же ИДЕ
          а так же тестами
          Ответить
          • > IDE

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

            Количество файлов и сложность их парсинга и автодополнения там просто несопоставимые.
            Ответить
            • то-есть с остальным ты согласен?

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

                    А что у вас еще принято делать на шаблонах в хедер онли? Документацию генерить можно? Рест апи декларативно описывать?
                    Ответить
                    • У крестов компайлтайм пока слабоват для генерации доков или рестов - не умеет поля и классы перечислять, надо вручную помогать через какой-нибудь boost::fusion.
                      Ответить
                  • Надо сделать чтоб можно было любую внешнюю тулу перекомпилировать в крестометушню (например, если это какой-нибудь bison, надо сделать на шаблоноговне какую-то минимальную виртуалку с линуксом, где этот бизон запускается), и потом эту поебень юзать как header-only
                    Ответить
                    • Это ж сколько терабайт памяти понадобится...
                      Ответить
              • Там есть проблемка, что за ожиданием компиляции некоторых грамматик можно встретить тепловую смерть Вселенной.
                Ответить
      • Звучит как очередная порнуха на гитхабе.
        Ответить
    • не понял нахрюка про репродюсибл билд
      Как может билд быть не препродюсибл? они всегда последнюю девелопмент версию либы скачивают?
      Ответить
      • > скачивают

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

        Видимо у ОПа тупо юзаются конпелятор и либы из системы со всеми вытекающими последствиями.
        Ответить
        • ну пускай велосипед, но почему он не репродюсибл-то? На разных агентах CI разные тулчейны? Так он может сам себе питух тогда?

          На прыще вообще собирать можно докером, там можно иметь какую хош версию чего угодно, бо от платформы там только ядро.

          на пинде можно поставить нужный тулчейн (везде одинаковый) и течь.

          В жабе, знаеш, тоже можно поставить на один агент JDK 8, а на другой JDK-11, и жаловаться потом, что билд то работает на восьмой джаве, то не работает.

          >Жопа в том, что для крестов нет какого-то де-факто способа
          опять таки: способы есть, но они ос-специфик, и к языку не привязаны.
          Собирай себе дебы или рпмы скачивая аптом или юмом нужные зависимости
          Ответить
          • Oh, my sweet summer child...

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

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

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

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

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

              >Но людям то хочется и локально с исходниками поработать.
              Научить тебя запускать докер локально?)))

              >Виндовые тулчейны разных версий плохо друг на друга влияют,
              Что значит "влияют"? У меня в студии тулчейн выбирается на уровне проекта, что я делаю не так?

              Разумеется, CRT у меня тоже 100500 разных.

              >100500 версий либ надо на диске параллельно держать, а они в крестах далеко не по мегабайту весят,

              А в других языках не надо держать? Кто-то как-то по-другому решает эту проблему? Может, node_modules меньше весят? Или .m2?

              >Собирают тем, что от предков досталось.
              Да ради бога. Но почему разными то?
              Почему не унифицировать софт на CI и компах разрабов?
              Или типа я собираю проект шлангом на маке, а ты гццой на линуксе, и потом у меня твои баги не репродюсятся?
              Ответить
              • > меньше весят

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

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

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

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

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

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

                  >В основном это проблема с драйверными китами
                  вот это правда пиздец. Правда, не понятно причем тут С++. Это проеб майкрософта и его команды, которая делает DDK.

                  >Кто с msvc работал - тот в цирке не смеётся.
                  Ты же сам выше написал, что с обычными SDK и тулчейнами проблем нет.
                  Да собссно и у меня их нет. Правда я использую подмножество чистей сишечки обычно.

                  >Потому что если удобной и быстрой доставки всего этого говна
                  Какого говна? Тулчейнов?
                  А есть быстрый способ доставки дждки? или питона?

                  >, люди будут собирать тем, что у них на компе завалялось
                  Ну вот у меня на компе завалялся питон2, а у тебя завалялся питон3. Чем это отличается от ситуации с плюсами?
                  Ответить
                  • ответ на первый вопрос я уже сам нагулил
                    https://www.boost.org/doc/libs/1_53_0/tools/bcp/doc/html/index.html
                    Ответить
                  • Буст можно ставить частями, но там дофига внутренних зависимостей. Обычно его целиком собирают чтобы не ебать мозг и не плодить кастрированные сборки.

                    Питон с ждк весят сраные копейки, да и к системным путям гвоздями не прибиты. Их можно даже в репу закоммитить и никто не заметит, лол. И если в прыщах тулчейн можно отпилить от системных путей путём его пересборки, то с доставкой msvc всё гораздо веселее.
                    Ответить
                    • На прыщах отпилить можно, а на винде всё хуже отпиливается. Попробуй отпилить .NET, например. А еще лучше попробуй иметь два разных IIS:)

                      И так, проблемы C++ следующие:
                      * Довольно популярная (хотя и не обязательная) библиотека Буст весит дохуя. Весит она дохуя потому, что в ней дохуя всего есть, например инструмент для генерации парсеров/лексеров. В пыхе например такого инструмента нет, и потому весит он меньше.
                      * На винде тулчейн нельзя скопировать в папочку и положитьь на локальынй сервер, потому что он срет в реестр недокументированным говном. Причем например если собирать не msvc а gcc на цигвине, то такой проблемы тоже нет.

                      Ничего не забыл?
                      Ответить
                      • > gcc на цигвине такой проблемы нет

                        Ну да, там будут проблемы похуже, но этой проблемы там нет :)

                        К слову, у майков таки есть готовый докерный образ msvc, но это прям совсем свежатина. Ну и раньше был автономный пакет, но у него свои заморочки (чего-то там не хватало, не помню уже).
                        Ответить
                        • ЕМНИП, руби собирается гццой на цигвине, и как-то работает на винде. Правда скорость работы руби на винде конечно никого не интересует.)

                          У майков есть пакет для сборки говна для питона.
                          https://www.microsoft.com/en-us/download/details.aspx?id=44266

                          Там есть консолька и vc*чототам*bat, ну и cl
                          Ответить
                          • Цигвин - говно. Там экзешники иногда падают из-за попытки натянуть сову на глобус. И это by design и фиксить никто не будет.
                            Ответить
                            • Разумеется говно: пытаться эмулить позикс поверх винды это ожидаемое говно

                              Но написать сразу и под позикс и под вин32 это надо быть очень крутым
                              Ответить
                      • > буст весит дохуя

                        Да если бы только буст... Почти любая крестолиба в собранном виде весит дохуя. И твой код тоже будет весить дохуя. Потому что 90% этого веса - отладочная инфа.
                        Ответить
                        • А если Qt решил собрать, то 100 Гб на диске будет мало.
                          Ответить
                          • Да там вебкит большую часть занимает... Но да, я его сборку юзал как стресс-тест для нового сервака.
                            Ответить
                        • А нельзя не собирать отладочную? Ключ копулятора же есть. Да и гцц умеет выпилить ее в отдельыне файлы (дварфы вроде), а майки вроде только пдб и могут
                          Ответить
                          • Можно, но как тогда дампы читать и отлаживаться?
                            Ответить
                            • так собрать символы для бустовых либ, покласть их на символсервер, и всем качать только при необходимоси

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

                                  ты статически слинковался с либами petih.lib и syoma.lib

                                  а я с либами stertor.lib и petih.lib

                                  Мало того, что в наши бинари могли попасть разные функции (линкер же сувнет только те символы, котоыре реально нужны), так они еще и по разным адресам попадут.
                                  Зашарить символы не получится


                                  Кстати, зачем майкам сраные стаблибы? Почему даже для динапической ликовки им нужен lib, а gccу не нужен?
                                  Ответить
                                  • > зачем майкам сраные стаблибы

                                    Х.з., чтобы линкеру сами dll'ки для сборки не требовались?

                                    На самом деле мне виндовая реализация динамических библиотек больше нравится. Всё-таки символ ищется в конкретной dll'ке. А в прыщах он уже в рантайме берётся из первой попавшейся.
                                    Ответить
                                    • Так дллка все равно должна совпадать с либой же. Просто саму дллку можно не качать. Хотя как тогда тестить?

                                      Пр разницу с прыщами не оч понял: ты имеешь ввиду, что имя импортируемого символа содержит имя дллки на винде, а имя сошки на прыщх -- нет?
                                      Ответить
                                      • Ну видимо сборку можно ускорить - собирать экзешник и дллку параллельно.

                                        Да, на венде символ привязан к конкретной дллке, на прыщах он берётся из рандомной сошки. Предвижу ответ "а ты символы не повторяй и всё будет норм".
                                        Ответить
                                        • именно!

                                          называй все функции bormand_имя_модуля_имя_функции
                                          Ответить
                      • Ну и ещё одна проблема - у каждой крестолибы своя система сборки. Поэтому собрать либу, да ещё и так, чтобы она подхватила зависимости - целое искусство.
                        Ответить
                        • воот, это я понимаю) Но эта проблема есть только у кросс-платфомернных либ.

                          Если я чисто виндовый чел, то у меня будут вижалстудийные проекты. Или cmake, если я clion.

                          Если я гнутый, то у меня убдет ауто-всё с мейкфайлом итд

                          То0есть жопа именно в том, что надо уметь в десять разных систем сборок?

                          У жобы тоже есть гредл и мавен и еще гант и еще какая-то хуита

                          Причем гред может быть на груви или на котлине
                          Ответить
                          • Если ты виндовый чел, то у тебя будут msbuild, cmake, qmake, b2 (буст) и ебанутые батники от гнутых либ.
                            Если гнутый - то cmake, автолулзы, qmake и b2.

                            Проблема в том, что тебе придётся юзать и собирать либы с разными системами сборки. И твой личный выбор их авторов не ебёт.
                            Ответить
                            • хорошо

                              если я жабаеб, то мне надо уметь в гредл, мавен, базел (им тоже собирают), гант и еще парочку антовых скриптов из говна и палочек

                              и конечно же никого не ебет, что я там хочу. Правда, либы можно скачать уже собраннеые, и тут конечно С++ в пролете.


                              В обещм я понял, в чем отсос наконец.

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

                              Мне похуй как там и чем его собирали, хоть перловым скриптом.

                              А в С++ нет ABI, и потому мне надо его собирать локально своим компилятором. А значит, мне нужно уметь в тот способ сборки, который там есть.

                              так?
                              Ответить
                              • Тип того. Ну и у жабьих и питоньих либ обычно нет каких-то настроек во время сборки. Обычно всё уже в рантайме тюнится.
                                Ответить
                                • Угу. Во многом потому, что там нет препроцессора
                                  Ответить
                            • но ведь уже есть несколько разных менеджеров с пакетами для плюсов - vcpkg, conan. Можно не париться самому хотя бы с настройкой и сборкой либ.
                              Ответить
                              • Ну это да, хоть какой-то свет в конце тоннеля.
                                Ответить
                                • У vcpkg даже сервера с либами нет. Лишь пути в конфиге на github.
                                  Ответить
                                  • а как может быть сервер с либами? сырцы там нет смыла дублировать, а бинарные либы придется иметь под все версии компилятора
                                    Ответить
                            • cmake в последнее время всё более популярен, и вроде устраивает всех.

                              >Если гнутый - то cmake, автолулзы, qmake и b2.
                              А ещё всякие ninja и mesonы.

                              https://github.com/systemd/systemd/pull/6266
                              Ответить
                              • лол, да
                                я собирал как-то под винду опенджк с джаваjx, и всё проклял

                                там встретил меня и cmake и ninja, и всё это в такой обертке, что собиралось только в цигвине (хотя и вижалсями) и всё равно никогда не собиралось из за тупых багов с кривыми путями

                                Почему, блин, не поставить CI, и не тетировать сборку своего говна под винду -- не знаю
                                Ответить
                  • > причём здесь с++

                    При том, что это пример из практики разработки на с++. Можешь привести подобный пример из практики разработки под йажу или питон? Я думаю нет.
                    Ответить
                    • До появления докера такая проблема вполне имела место и с питоном, и с JDK.

                      Представь себе процесс установки нескольких версий третьего питона на Linux без докера. Что будет с симликом python3? Что будет с системными скриптами?

                      Теперь проблема менее актуальна, а на виндах для MS технологий она осталась.

                      ХЗ как сейчас, но раньше версия asp.net была привязана к IIS. Просто web.config был IIS-специфичный. А IIS зависел от версии ОС.

                      Так что для обновления версии фреймворка тебе нужно было обновлять ОС. Да и сейчас не каждый .NET на каждый Windows встанет.

                      Еще пример: CRT распилили на винде на две части: одна часть идет со тулчейном/студией, другая с ОС.

                      ОС обновилась -- что-то сломалось. На одну ОС обновления накатили, на другую нет. Все работает по разному.

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

      И вокруг тебя будут не крутые перцы, которые по какой-то причине чего-то не знают, а прошедшие курсы джангогелрс и денисы поповы.

      Пиздуй в жжаву, и не будет у тебя никаких УБ. Вместо этого будут километры боейлерплейтового говна и мемори дампы на 4 гига, и да: тамошние питухи скорее всего тоже нихуя не будут знать, они даже в собственной жабе плавают (заловите галерного жабоёба, и поговорите с ним про хеппнс бефор например)

      В конце концов пиздуй в пхп, и имей все вышеперечисленное в одном флаконе, плюс класс Bd с XSS и sql injection.
      Ответить
      • Пиздую в хаскель, уязвимостей нет, бойлерплейта нет, денисов поповых нет, экзепшонов про поля нет, падений нет, UB нет, работы нет (на самом деле есть).
        Ответить
        • Ну раз так, то вы большой молодец.
          А что за работа?
          Ответить
          • На самом деле на любой вкус, от вёбизянства через блокчейн до разработки компиляторов до какой-то херни в банках. Мне раньше какие-то вакансии сваливались, надо будет посмотреть, что всё ещё релевантно.
            Ответить
    • &#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
          Ответить
          • удобно смотреть на экспортируемые из либы символы
            Ответить
            • Как-будто ты сгенерённую хуйню на 64 килобайта стал бы читать...
              Ответить
              • не стал бы, правда


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

                    Потому что во втором случае будет оче нерепродюсибл билд
                    Ответить
                    • Вроде просто будет ругаться на задвоившийся символ, т.е. не фатально.
                      Ответить
                      • В общем вы убедили меня, что С++ смокчет буй.
                        Но смокчут его и все остальные языки и платформы тоже. Везде есть свое говно. Конкретно этого говна нет, но есть другие говны, не менее паскудные.

                        Почему принято ругать именно С++?
                        Думаю потому, что С++сники все таки боле-ли-менее смышленые чуваки, и видят недостатки своего языка.

                        Остальные пыхеры с жабоебами слишком тупы, чтобы понять, что их язык говно
                        Ответить
                        • > Почему принято ругать именно С++?
                          > Остальные пыхеры с жабоебами слишком тупы

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

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

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

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

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

                                  https://habr.com/ru/post/215777/
                                  Ответить
                                  • ну так это чуть ли не единственная статья про плохой пых, и она вызвала кучу тупых ответов типа: "вот вы говорите что пых плохой, а он на самом деле хороший, потому что я его знаю"

                                    Большинство пыхеров не знает никаких других языков, чтобы сравнить

                                    Про отсос джаваскрипта забавно, читану на досуге
                                    Ответить
                                    • Вы просто очень не любите всё советское php
                                      Ответить
                                      • Это правда..
                                        Ответить
                                        • > В нем появились пространства имен, >реализация ООП по уровню сравнимая с >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" - питушня вербозная.
                                          Ответить
                                          • А == 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"]
                                        Ответить
                                    • >Финансовая мотивация для изучения Javascript тоже весьма сомнительна.

                                      хаха, как сказал бы Сёма: "и сколько тебе платят за"
                                      Ответить
                                      • Про жс: "Количество людей колеблющихся вокруг и около энергетического барьера, разделяющего профессию программиста и верстальщика, просто не поддается исчислению"
                                        Ответить
                                        • Да, в скриптушне кажуал программистов дофига.
                                          Раньше в питончике было более-менее тихо, но и туда уже набижали
                                          Ответить
                                  • >Говоря о 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!) "
                      Ответить
                    • первые 300 символов манглированного имени тоже не очень приятно читат
                      Ответить
                      • ага, только до завязки дошел и хоба - уже закончилось, слово намек на следующую серию в седьмом сезоне дешевой драмы
                        Ответить
                        • 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;

          Выведет:
          [email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]@[email protected]@
          
          [email protected]@
          Ответить
          • а кто-то эту хуйню умеет кроме линкера? депенденси вокер какойнить? как ее разгребать та?

            всмысле, как разманглить её обратно? по символьным файлам?
            Ответить
            • Нет, это всё недокументированная питушня, о которой знает только конкретная версия конкретного линкера. Разманглить это можно либо за счёт отладочных данных (точно не знаю, есть ли там оригинальные имена), либо за счёт реверс-инжиниринга. Собственно, не в последнюю очередь благодаря недокументированности и нестандартизированности манглинга у крестов и нет ABI.
              Ответить
              • cppfilter. Бля, забыл как он правильно пишется.

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


                  Какой багор (((
                  Ответить
                  • https://owa.cppfilter.com/owa же небось
                    ова это вебморда к искченджу -- аутгюк веб аксесс. Админко ее поставил, и не асилил получить сертификат на два доменных имен сразу (в пинде это делается в нескока кликов, но не все могут)
                    Ответить
                    • Интересно, чем эта контора вообще занимается?
                      Ответить
                      • Продает фильтры

                        Our mission is simple - we strive to be easy to buy from.
                        We were going to give you a few reasons why our customers buy filters from us but we thought they could say it better...
                        Ответить
                      • Фильтры. Без www открывается чудесный сайт в чисто штатовском стиле
                        Ответить
                • О. В ебаной 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, что это личная находочка.
                        Ответить
                        • > я так понял по 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 и проинсталлить, что превращается в квест на целый день. А всё из-за косоруких уебней, не желающих нормально чинить баги.

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

                            Есть xperf правда на ETW, но простые пользователи про него не знают
                            Ответить
                        • >зачем пользовтелю убуты перф?

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

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

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

                          любят же убунтята пирдолица


                          Белые господа в Слакаваре просто пеерсобирают slackbuild, и он ложится в тоже самое место, куда бы его и Пат положил.
                          Слакбилд это тупо шелскрипт с опциями. Исправил опцию, и потек.
                          Никакие ar, tar, и прочий deb тебе не нужны
                          Ответить
                          • > никакие tar

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

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

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

                            На самом деле, в убунте что-то пересобирать надо довольно редко, поэтому мне тупо лень разбираться с пакетами.
                            Ответить
                            • слакбилд tgz, это правда
                              но когда я его пересобираю, то мне не нужно его обратно тарить.

                              А deb нужно?

                              Слак билд состоит из README, патчей (опционально) и файла

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

                              >а и с ld path особых проблем не помню.
                              ну собери мне libpetuh.so в /opt/hujopt/petih, а потом запусти зависящий от него бинарник

                              ld_library_path же надо править, не?
                              или ты это в /etc/ld.so.conf пхаеш?
                              Ответить
                              • > ld_library_path

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

                                  ну если ты что-то суперкастомное ставишь, то да.

                                  А я обычно ставлю тоже самое, что есть в стоке, но с нужными мне опциями.
                                  Ответить
                                  • > суперкастомное

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

                                    Уже давно ничего не собирал, на самом деле. Совсем охомячился.
                                    Ответить
                                    • Вертайся на слаку. Там тебе придется чонить собирать постоянно. Правда, собирать по слакбилдам много ума не надо. Опции подправил, да и всё.
                                      Ответить
                  • Кстати, а в дебиане это исправлено? Чисто убунтовый баг?
                    Ответить
              • Понятно. Посмотреть какие функции экспортирует либа не представляется возможным.

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

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

              Первый пример ([email protected][email protected]$00$01$02$0 [email protected][email protected][email protected][email protected][email protected]$ [email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]$ [email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]$ [email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]$ [email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]$ [email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]$ [email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]$ [email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]$ [email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]$ [email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]$ [email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]$ [email protected][email protected][email protected][email protected]@[email protected]@) можно разманглить обратно с помощью какой-то утилиты (что-то типа «demangle»), второй пример ([email protected]@) похож на криптографическую сумму, которую напрямую разманглить нельзя. Во втором примере спасут только символьные файлы.
              Ответить
              • какой крестец)
                Ответить
              • Вторая штука с хешем - это лямбда вроде.
                Ответить
                • Не, это та же самая integer_sequence, только с 1000 элементов вместо 100 (как в первой).
                  Ответить
                  • А, туплю, это же как раз из твоего примера. Лямбды, кстати, независимо от длины так называются.
                    Ответить
          • В стандартной библиотеке есть даже оператор создания длинных имён?! Охренеть.
            Ответить
          • Кстати, именно поэтому я за «Java»: там манглинг строго стандартизирован, человекопонятен (однобуквенные примитивы, вроде I для интов, и классы в виде «Ljava/lang/String;») и вообще очень удобен.
            Ответить
        • Вот блин, не написал в посте (да, я автор того поста) — gdb в том проекте с темплейтами на 5 минут пришлось патчить, потому что иначе он падал из-за слишком длинных мангленных имён.
          Ответить
          • Рад приветствовать Вас на сайте, где программисты общаются по душам. Оставайтесь здесь, у нас интересно.
            Ответить
            • >рограммисты общаются по душам.
              https://govnokod.xyz/_24815
              Ответить
      • >вылезла проблема с превышением длины mangled-имен (лимит то ли 64 Кб, то ли больше).

        Надо хешировать. Чтоб вместо "my_very_long_shitty_mangled_name" было md5("my_very_long_shitty_mangled_name")
        Ответить
        • В «MSVC», судя по реальному примеру gost'а, так и сделали, если замангленное имя в лимит не влезает.
          Ответить
    • тупой нахрюк, лол
      https://habr.com/ru/company/ruvds/blog/499322/
      Ответить
      • > Надеюсь вы понимаете потенциальные последствия разработки и отладки кода в системе с принципиально неверным поведением системных вызовов.

        > 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-сектанты распоясались, некому урезонить анскильных питухов.
        Ответить
      • Роман прав: заебаться можно любым языком

        Потому некоторые предпочитают раз в три-пять лет язык менять.
        С одной стороны будешь вечно обнулять экспертизу, с другой -- не заебешься
        Ответить
        • Потому что надо думать категориями продукта, а не языка.
          Ответить
        • Заебаться может и да, а вот хуита вроде «бля, как же много времени я проебал на изучение этого блядского кривого говна, и основная моя ценность как специалиста заключается в том, что я с этим блядским кривым говном умею работать» может возникнуть только от параши вроде крестов. Сишку так задрачивать не надо.
          Ответить
          • Кажется что ценность программиста в первую очередь совсем не знании синтаксиса языка, не?

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

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

                        >есть public private protected,
                        Они в джаве есть, и в C#

                        >множественное наследование
                        Оно есть в питоне, и даже активно используется

                        > где этой херни просто нет, типа хаскеля?
                        а, ты говорил про конкретный язык) А я думал вообще про любой.

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

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

                          Хотя возможно стоило сделать наоборот — немутабельные по умолчанию, и модификатор для включения мутабельности.
                          Ответить
                          • Вообще единственное полезное разделение это internal и не internal (или static в терминах няшной).

                            Ты либо экспортируеш символ из модуля, либо нет.
                            В джаве еще более глупая концепция пакетной видимости есть. Кажется что почти ничто в крупном проекте не бывает пекедж визибл
                            Ответить
                          • Не только синтаксический. С помощью рефлекшьёна можно логику ифать.
                            Ответить
                            • Типа "если есть пубдличный метод такой-то, то мы его дергаем"?
                              Как writeObject в джаве?
                              Это чтб сразу на говнокод?
                              Ответить
                              • А в жабе так можно разве? Звучит, как очередной «SFINAE».
                                Ответить
                                • рефлексией можно, тыж сам написал.
                                  Ответить
                                  • А вызывать можно рефлексией?
                                    Ответить
                                    • чоб нетта?
                                      https://docs.oracle.com/javase/tutorial/reflect/member/methodInvocation.html
                                      Ответить
                                  • Смешно, но сейчас в жабе можно аннотациями симитировать любой жопулярный модификатор (кроме static).

                                    Хотим read-only? @lombok.Getter
                                    Хотим write-only? @lombok.Setter
                                    Хотим public? @Getter @Setter
                                    Хотим transient? @JsonIgnore
                                    Хотим private? Ничего не пишем, оставляем package private
                                    Ответить
                                    • >Хотим read-only? @lombok.Getter
                                      или пишем руками, да.

                                      Зачем это еще не часть стандартной либы? зачем?
                                      Почему в С# давно часть?
                                      Ответить
                                      • Смысл в том что аннотации — не прибитая гвоздями спецификации часть языка, а пользовательский конструктор.

                                        Из них можно собрать что угодно, написав ЛЮБУЮ логику обработки.

                                        Допустим в жабе из коробки нету никакого write-only модификатора.
                                        Ответить
                                        • Годная идея.

                                          А можно написать аннотацию, которая пускает только на EDT треде? Или только если ты ауентифицировался как админ (и в тредлокале лежит токен)?
                                          Ответить
                                          • Можно даже по стеку найти callera и послать нахуй, если вдруг нас спрашивают не из того пакета или например класса.

                                            Я так когда-то ставил квоты количества запросов по rmi.
                                            Ответить
                                            • Какой багор )))
                                              Ответить
                                            • Не быстро всё это только)

                                              А так запахло питонячими декораторами.
                                              К примеру, в джаве есть @cache
                                              Угадайте, что делает
                                              Ответить
                                              • Зато можно вместо унылого package private и friend насочинять правила видимости любой сложности.

                                                А классы, имеющие доступ матчить хоть по регулярке.
                                                Ответить
                                                • Сейчас скажу, что это почти AOP, и меня заклюют
                                                  Ответить
                                                  • >Сейчас скажу, что это почти AOP

                                                    Так и есть.
                                                    АОП кстати в последнее время часто ебошат именно аннотациями. Всякие @Around и @Before

                                                    >запахло питонячими декораторами
                                                    Да. По сути то же, только более оопешно и строготипизированно.
                                                    Ответить
                                    • А зачем может понадобиться write-only проперти?
                                      Ответить
                                      • After some Googling, this is all I could find: a write-only property could be used to set a password on a User object. Since passwords are usually stored in hashed form, there is (and should be) no way to retrieve a password after it has been set.
                                        Ответить
                                      • [ванишд]

                                        Пример с паролем уберохуенен
                                        Ответить
                                        • А у тебя хотя бы реальный пример был?
                                          Ответить
                                          • Был, но он был скучный, вам бы не понравился.
                                            Ответить
                              • >если есть метод такой-то, то мы его дергаем

                                Раньше для этих целей использовали маркерные интерфейсы.

                                Сейчас завезли сложную систему аннотаций с метаданными.

                                Зачем питушиться с модификаторами — загадка.
                                Ответить
                          • >немутабельные по умолчанию, и модификатор для включения мутабельности.

                            +1. Существует не так много поводов делать что-то мутабельным.

                            >сишнки
                            ну во-первых кажется что появился он в с++, а отткуда перекочевал в сишку (или нет?)
                            во-вторых const в C# гораздо тупее крестового же
                            Ответить
                            • А в крестах есть «mutable». Именно поэтому я за «C++».
                              Ответить
                              • Я помню, да
                                По умолчанию mutable, но если const, то не mutable, а если mutable, то всё таки не const, но я бы еще добавил force_const, который борол бы mutable
                                Ответить
                                • Типичные кресты: придумали правило, и шесть исключений, как это правило наебать.
                                  Ответить
      • Капец. Он собрался писать на D. Он же его хуесосил вроде на ГК раньше.
        Ответить
        • На D разве что в better-C режиме писать, потому что в D завезли GC, GC - говно
          Ответить
          • Есть предложения для указателей с подсчетом ссылок https://wiki.dlang.org/FatPointer
            GC можно отключать в любом месте атрибутом @nogc.
            Но наличие GC ломает привычный подход с RAII.
            Итог - сойдет вместо питона для среднего размера скриптов (особенно если GIL напрягает).
            Ответить
            • В D хотя бы можно отключить GC. В «Йаже» такого выбора нет.

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

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

                    При использовании с «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
                      Ответить
                  • можно писать со стеком

                    Втом же Сширапе можно
                    Ответить
                    • Но стек можно порвать, это опассно.
                      Ответить
                      • У моей подруги с ее парнем как-то порвался, потом врачи защивали.

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

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

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

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

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

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

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

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

                                              Или это про (U)EFI?
                                              Ответить
                                              • Да и запуска прикладнухи длинее сектора в биосе нет.
                                                Ответить
                                                • Что мешает скопировать в память нужное количество секторов и джампнуться туда???
                                                  Ответить
                                                  • Ну дык это уже я должен сам сделать, а не "ось". А сама "ось" без моей помощи больше 512 не может. Т.е. если bios это ось, то очень хуёвая ось.
                                                    Ответить
                                                    • Слушай, ну вот в MS-DOS не было из коробки средств для загрузки програм, превышающих RAM по объему. Тоже вроде бы отстой, но ведь MS-DOS же все считали ОСью.

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

                  ЗЫ. ненавижу грамматики 0 уровня
                  Ответить
                  • да, понять мокакины слова -- НППолная зодача
                    Ответить
                  • Есть люди, которые пишут в стиле «казнить нельзя помиловать», а потом удивляются тому, что ты не можешь разобрать их писанину.
                    Ответить
                    • А зачем ты водишься с такими людьми?
                      Ответить
                      • C соседкою Светкой не буду водиться
                        Она то смеется, то плачет, то злится
                        Ответить
            • > 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»?
      Ответить
      • помню arj

        arj x prince.arj
        Ответить
        • А я ещё помню «ARJZ» и «JAR». А ещё HA и LHA (попрошу не путать).
          Ответить
          • я помню tui RARа, похожее на vc. Долго я пытался запустить из него .exe файл, и не понимал, почему не работает
            Ответить
            • Я помню белые обои...
              Ответить
              • Я помню только комнату и стол
                И желтый свет над ним

                А рар ты видел наверняка этот
                https://i.piccy.info/i7/c42fed0e64bfe6c86de10ea96cf7b559/4-57-1886/35790228/RAR_102938.png

                >memory in use: 363KB
                милениалы соста6
                Ответить
                • Я ещё до 2.50 видел какие-то версии. А после 2.50 туёвые версии делать перестали, если моя память не спит с другим.
                  Ответить
                  • вот тебе 2.0 :)
                    https://macsplex.com/28423

                    может и пеерстали.. Я в какой-то момент ушел на фар, и напрямую винрар инвокать перестал
                    Ответить
                    • 3.x уже был только под винконсоль (без туя, тупо чтобы одной командой распаковывать или запаковывать) и под гуй. Тогда уже появился «FAR» (видимо, в «RARLABS» вдохновились «Нортоном» и туёвым «раром», потому и создали «FAR» на замену).
                      Ответить
                      • фар начали пилить в 1996м году емнип, но острая необходимость в нем появилась в районе года так 2000-го, когда питухи перешли на w2k, и vc в ntvdm стал уже не очень хорошо работать.

                        Огромное количество людей пользовалось (и до сих пор пользуется) wincommander, который последение 20 лет называется тоталкоммандер

                        Кстати, у его есть 16ти битная версия. Для win311
                        Ответить
          • джар жабоёы и сейчас помнят, да не тот
            Ответить
            • Жавоёбский — это тупо зиг-хайль же, только в него добавили теги для каких-то жавоёбских атрибутов.
              Ответить
      • Это ж какая-то навороченная либа сетевая. https://en.wikipedia.org/wiki/Adaptive_Communication_Environment
        Выглядела такой же страшной как CORBA. Никогда не пользовался.
        Ответить

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