1. PHP / Говнокод #25353

    0

    1. 1
    2. 2
    Обнаружен критический баг в "PHP":
    https://habr.com/ru/post/416573/

    Полный список лулзов:
    https://habr.com/ru/post/438582/

    Запостил: guestinxo, 03 Февраля 2019

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

    • Это вообще царский пост: https://habr.com/ru/post/432488/
      Ответить
      • Что-то в комментариев много питузков с синдромом утёнка.
        "Так работает ОС! Так работает компютер! Так надо! C/C++ - для низкого уровня, JSON и Unicode в них не нужны! Иногда надо стрелять себе в ногу, компилятор в этом случае должен молчать!"

        Чёрт, ну ведь бред же! Компьютеры и ОС разрабатывались для того, чтобы решать проблемы людей, а не для того, чтобы люди подстраивались под них. ЯПы разрабатывались для написания программ для решения проблем, а не для того, чтобы пердолики заучивали крайние случаи для команд процессоров и условия возникновения UB. C/C++ задумывались как языки общего назначения, на C++ пишут браузеры и игры, где активно используются сети и юникод. Если нужен перфоманс - придётся попотеть по многим фронтам, и отслеживание UB - лишняя нагрузка на мозг, вместо которой можно было бы подумать над архитектурой или оптимизацией. Если компилятор не показывает места, где программист явно стреляет себе в ногу, то компилятор - пидор.

        Как же бесит от этого "тут так принято", "оно так работает". Я понимаю, когда на космическом аппарате летишь, а он жутко тормозит потому, что кто-то занизил MAX_VELOCITY до жалких 3e8 и ушёл в отпуск на 2000 лет, а у остальных вообще нет шансов это изменить. Но тут же, мать их, сами сделали себе эти говноограничения, а потом срут "оно так работает" и вообще проблемы не видят.

        Ты им "это же говно", а они "оно так работает". Повторяешь "ну говно же, ну вот в альтернативной реализации сделали же нормально", а они "ты сам - говно, и реализация твоя - говно, а нам норм, давай учи все 50 оттенков UB". Есть, конечно, шанс, что когда выучишь все 50 оттенков UB, код на C/C++ станет писаться так легко, как никогда не было. Но язык должен быть ближе к естественному миру, для написания программы надо понимать предметную область, а не ломать себе мозг и зарабатывать профдеформацию программиста.
        Ответить
        • Пост про баг в PHP и вовсе походит на анатомический театр троллей-уродов.

          -- Мужики, я тут в бассейне был недавно. Вылезаю из воды, захожу в душ отмываться. Всё вроде нормально. Вода тёплая. Задумался, планирую, что буду делать в выходные. Выскользнуло мыло, я только наклоняюсь над ним, как меня уже трахает какой-то бычара. Дурацкий бассейн. Мужики, разберитесь.
          -- Во лошара-то! Это не баг бассейна, это так у зеков принято, а они в бассейнах по программе бесплатного купания проходят ещё с 1980 года. Надо бы знать и жопу сковородой прикрывать.
          -- Но со сковородой ни поплавать, ни помыться. Нельзя ли запретить насиловать людей в душе?
          -- Иди, лошара, читай сборник понятий. Покукарекай тут ещё. Здесь так принято!
          Ответить
        • Я не пойму, против чего ты конкретно?
          Против недостаточно толстой стандартной библиотеки с++?
          Против UB и непродуманного дизайна языка?
          Против апологетов с++ и вышеуказанных пунктов?
          Против мировой несправедливости, где дяде-бизнесмену не похуй на всю нашу эстетику вроде "язык должен быть ближе к естественному миру" только тогда, когда она(эстетика) приносит бизнесу пользу?
          Ответить
          • В том комментарии я был против придания сложившейся (случайно) ситуации статуса святыни. Против того, что люди защищают говно потому, что давно с ним знакомы, а оно работает.

            Если в жизни, то
            > Против недостаточно толстой стандартной библиотеки с++?
            Не против, если есть пакетный менеджер, который быстро подгружает нужные модули, а также репозиторий со стабильными версиями полустандартных пакетов.
            То есть если пакеты стабильно работают, то нафиг не нужна их стандартность с многолетними циклами обновления. В Haskell Platform, например, можно выбрать царскую версию, где сразу установлены гигабайты пакетов.

            > Против UB и непродуманного дизайна языка?
            Да. UB - мерзкая питушня, которая снижает скорость разработки и надёжность программы, обещая призрачную производительность на платформах, под которые программа никогда не будет скомпилирована.
            Непродуманный дизайн языка - штука неизбежная. Но тут главное - не держать говно ради совместимости. Нормально, когда ученик пишет говнокод. Ненормально - когда он этот говнокод через десять лет тащит в рабочие проекты. Совместимость должны обеспечивать отдельные инструменты. Например, тупые компиляторы, с которыми можно новый код скомпилировать бинарник старого формата, который будет взаимодействовать со старыми библиотеками.

            > Против апологетов с++ и вышеуказанных пунктов?
            Против апологетов багофич.

            Против мировой несправедливости, где дяде-бизнесмену не похуй на всю нашу эстетику вроде "язык должен быть ближе к естественному миру" только тогда, когда она(эстетика) приносит бизнесу пользу?
            Немного - да. Но все мы - дядя-бизнесмен. Я бы поступил так же, да и постоянно так поступаю. Работающее говно и новые фичи лучше никогда не написанного кода, которые делает то же самое, но красивее и с производительностью на 1% выше.
            Ответить
            • >> Против мировой несправедливости, где дяде-бизнесмену не похуй на всю нашу эстетику вроде "язык должен быть ближе к естественному миру" только тогда, когда она(эстетика) приносит бизнесу пользу?
              > Немного - да. Но все мы - дядя-бизнесмен. Я бы поступил так же, да и постоянно так поступаю. Работающее говно и новые фичи лучше никогда не написанного кода, которые делает то же самое, но красивее и с производительностью на 1% выше.
              С другой стороны, с точки зрения дяди-бизнесмена программист должен решать поставленную прикладную задачу, а не героически противостоять языку с компилятором заодно. Поэтому язык, более приближенный к рабочим реалиям, будет более привлекательным для дяди (другое дело, что дядя может в этих наших языках не разбираться вообще).
              Ответить
            • > UB
              > под которые никогда не будет конпелироваться
              Ты не понял сути UB'ов. Многие из UB'ов ускоряют код здесь и сейчас, а не на мифических платформах.

              Взять тот же UB про "не true и не false" в bool. Без него в коде будет куча бесполезных cmp + setne.

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

              З.Ы. Но всё это - тёмная сторона силы, конечно.
              Ответить
              • Такое ощущение, что C++ делали специально для азиатов.

                Учишься палочками вылавливать муху из супа; учишься одним пальцем пробивать стены; учишься делать своё дело с невиданной скоростью; учишься не спорить с начальником и выполнять всё, что он прикажет. Учишься помнить все тонкости работы языка и компьютера, запоминаешь все места с UB. Каждый день делаешь одно и то же, пока не становишься поехавшим мастером своего дела. Получаешь большие деньги, хотя за углом автомат делает всё то же гораздо дешевле.
                Ответить
                • > C++ делали специально для азиатов

                  Нет, C++ делали для мазохистов и зубрилок. Чтоб можно было побольше времени проебать на вызубривания языкоспецифичного говна(которое за пределами крестомирка является абсолютно бесполезным багажом знаний), вроде "а как заебашить такую-то хуйню через метапрограммирования на шаблонах с констэкспрами?" или "будет ли вот в этом говне UB?".
                  Ответить
                  • > абсолютно
                    Ну как же, UB'ы в няшной пригодятся. Они там те же самые.
                    Ответить
                    • Не совсем, есть кое-что, что в плюсах UB, а в Си - нет. Насчет "наоборот" - не уверен.
                      Ответить
                      • Хотелось бы увидеть несколько примеров.
                        Ответить
                        • Например, type punning через union

                          http://stackoverflow.com/a/11640603

                          The footnote was added in C99 after Clive D.W. Feather Defect Report #257:

                          Finally, one of the changes from C90 to C99 was to remove any restriction on accessing one member of a union when the last store was to a different one. The rationale was that the behaviour would then depend on the representations of the values. Since this point is often misunderstood, it might well be worth making it clear in the Standard.

                          https://stackoverflow.com/a/11996970

                          The confusion is that C explicitly permits type-punning through a union, whereas C++ (c++11) has no such permission.
                          Ответить
                    • Ну так сишка это почти подмножество крестов. Есть там конечно некоторое количество исключений, типа sizeof('a'), всякого говна с type punning, хотя в новых стандартах сишки еще всякие VLA и type-generic expressions повключали... ну в общем можно выделить такое "почти-Си" из крестоговен, но его вызубривание (и вызубривание его UB-ов) занимает сильно меньше времени, чем всякие там крестовые говношаблоны и классы с неймспейсами и перегрузками
                      Ответить
                      • Где-то (кажется на стековерфлоу) находил еще пример, где из-за каких-то говноразличий в правилах maximal munch какое-то говно вида a = b +++ c; в крестах давало один результат, а в сишке другой. Или в одном из языков оно компилилось, а в другом отказывалось компилиться, в общем что-то такое
                        Ответить
                        • Можно на основе этой хуйни в конпайл-тайме отличать сишку от крестов!
                          Ответить
                          • Можно проще
                            char a[(sizeof('a') == sizeof(char)) - 1];

                            prog.c: In function 'main':
                            prog.c:7:6: error: size of array 'a' is negative
                                7 | char a[(sizeof('a') == sizeof(char)) - 1];
                                  |      ^
                            Ответить
                            • Хотя не, можно ж придумать такую ебанутую data model, где sizeof(int) == sizeof(char)
                              Ответить
                              • Есть архитектуры, в которых единицей адресации является не октет, а что-то побольше (древние мейнфреймы и DSP). Разработчики компиляторов стоят перед нелёгким выбором:
                                1. Сделать огромный байт (стандарты сишки и крестов только требуют, чтобы байт мог вместить символы, которыми набирается программа, ну то есть минимум 7 или 8 битов).
                                2. Эмулировать байты (ну то есть кучей инструкций вытягивать байты из неделимого машинного слова).
                                Ответить
                                • Да нету там выбора, имхо.

                                  Большой байт - путь ленивых распиздяев. Не сэмулирует конпелятор - придётся пердолиться программисту. И оверхед будет ещё больше.
                                  Ответить
                                • З.Ы. CHAR_BIT вроде ради PDP с 9-битными байтами был сделан а не ради машин с огромными (но кратными 8) словами.
                                  Ответить
                                  • У «PDP-10» как раз нет байтов. У него 36-битные слова, просто авторы компилятора их решили разбить на четыре нонета (9-битных байта).
                                    Ответить
                                    • Вот сделаю 37-битный процессор. И хуй кто разобьёт его слово.
                                      Ответить
                                      • «PDP-5», «PDP-8», «PDP-12» были вообще 12-битными. Там тоже слово не очень разобьёшь, хотя число непростое.
                                        Ответить
                                      • «In 1983, IBM introduced 31-bit addressing in the System/370-XA mainframe architecture...»

                                        А нет, там было всё нормально: арифметика 32-битная. Это укокококозатели были 31-битными.
                                        Ответить
                                      • Назло тебе сделаю високосные байты по 10 бит.
                                        Ответить
                                        • Тогда надо процессор с иррациональной длиной слова.

                                          З.Ы. Десятичный таким и будет? log2(10) иррациональное.
                                          Ответить
                                          • На самом деле даже твой вариант с 37 битами пройдёт: стандарты сишки и крестов не разрешают делать високосные байты. Оставлять неадресуемый бит в каждом машинном слове будет жалко: это же потеря 2,7% памяти.

                                            *****

                                            Десятичный процессор –— это типа как «BCD» в плавающем питухе, где количество возможных значений каждого типа выражается степенями десятки? С обычными операциями на таком проблем не будет, а вот битоёбство придётся изобретать с нуля.

                                            Кстати, были микросхемы для двоично-десятичной системы. Например, счётчик К155ИЕ2, который умеет считать от 0000 до 1001, а вместо состояния 1010 происходит сброс на ноль.

                                            http://microshemca.ru/images/img032.jpg
                                            Ответить
                                            • В «BCD» даже умножение на два для чисел больше 4 не совпадает с обычным сдвигом:
                                              0101 * 0010 = 0001 0000
                                              0110 * 0010 = 0001 0010
                                              0111 * 0010 = 0001 0100
                                              1000 * 0010 = 0001 0110
                                              1001 * 0010 = 0001 1000


                                              Мне нравится.
                                              Ответить
                                          • Ещё вот это забавно:

                                            В системе кодирования «2 из 5» одна десятичная цифра кодируется 5 битами, из которых 2 бита установлены в 1, а 3 бита — в 0, что даёт ровно 10 комбинаций. Такая система обеспечивает лучшее обнаружение ошибок, поскольку изменение одного бита всегда даст недопустимую комбинацию; также всегда обнаруживаются однонаправленные изменения (несколько изменений 0→1 или 1→0). Кодирование «2 из 5» использовалось в компьютерах серий IBM 7070, IBM 7072 и IBM 7074; также применяется в некоторых странах для маркирования почты штрих-кодом.

                                            Уплотнённые десятичные числа позволяют разместить 3 десятичные цифры в 10 битах (210=1024 комбинации, что достаточно для 3 десятичных цифр), причём кодирование устроено так, что преобразование между 10-битным кодом и тремя отдельными десятичными цифрами можно осуществить с помощью простой и быстрой логической схемы. Такое кодирование используется в десятичных числах с плавающей запятой, описанных в стандарте IEEE 754-2008.


                                            Тяжело битоёбить в таких системах...
                                            Ответить
                                            • Горшочек, не вари:
                                              https://en.wikipedia.org/wiki/Bi-quinary_coded_decimal
                                              https://en.wikipedia.org/wiki/Binary_integer_decimal
                                              https://en.wikipedia.org/wiki/Chen–Ho_encoding
                                              https://en.wikipedia.org/wiki/Densely_packed_decimal

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

                                              Но как читать/писать файлы и отправлять/принимать данные по сети? Относиться к ним как к массиву чисел (например, байт может принимать значения от 0 до 255, т. е. занимать 3 десятичных разряда, хотя и неэффективно)?
                                              Ответить
                                            • > для маркирования почты штрих-кодом

                                              и не только, у ржд в билетах на пригород используется two of five
                                              Ответить
                                              • Да блядь, он на всех штрих-кодах вообще.
                                                Ответить
                          • «#ifdef __cplusplus» для бедных царей.
                            Ответить
                            • #ifdef ненадёжен, макрос могут переопределить. Лучше самому протестировать.
                              Ответить
                              • Навскидку:
                                #include <stdio.h>
                                #include <stdint.h>
                                
                                uint8_t probe() {
                                    return 255;
                                }
                                
                                int main(void) {
                                    auto x = probe();
                                    if (!++x) {
                                        puts("C++");
                                    } else {
                                        puts("C");
                                    }
                                    return 0;
                                }

                                https://ideone.com/p2tdaz
                                https://ideone.com/10ZvTY
                                Ответить
                                • Эта проверка ещё и проходит полностью в компайл-тайме! Прямо как «if constexpr»: https://gcc.godbolt.org/z/QTaQ7N
                                  Ответить
                                  • Годно! С -O2 проверку выполняют в компайл-тайме «gcc», «clang», «icc», «msvc», причём для всех процессоров, т. е. лишняя ветка выкидывается ещё до кодогенерации.
                                    Ответить
                                    • Хуйня.
                                      #define uint8_t int


                                      и проверка пошла по пизде
                                      Ответить
                                      • Так и if могут передефайнить...
                                        Ответить
                                      • Пожалуйста.
                                        #include <stdio.h>
                                         
                                        int isCpp()
                                        {
                                        #ifdef true
                                        #undef true
                                        #endif
                                        
                                        #if true
                                            return 1;
                                        #else
                                            return 0;
                                        #endif
                                        }
                                         
                                        int main(void)
                                        {
                                            if (isCpp()) {
                                                puts("C++");
                                            } else {
                                                puts("C");
                                            }
                                            return 0;
                                        }

                                        https://ideone.com/Ym6ptI
                                        https://ideone.com/b33fqr
                                        Ответить
                                        • Только лучше так:
                                          #ifdef true
                                          #undef true
                                          #endif
                                          
                                          #if true
                                              #include <iostream>
                                          #else
                                              #include <stdio.h>
                                          #endif
                                          
                                          int main(void)
                                          {
                                              #if true
                                                  std::cout << "C++\n";
                                              #else
                                                  puts("C");
                                              #endif
                                          }
                                          Именно поэтому я за "препроцессор".
                                          Ответить
                                        • int isCpp()
                                          {
                                          #ifdef true
                                          #undef true
                                          #endif
                                          #ifdef return
                                          #undef return
                                          #endif
                                          
                                          #if true
                                              return 1;
                                          #else
                                              return 0;
                                          #endif
                                          }
                                           
                                          int main(void)
                                          {
                                              if (isCpp()) {
                                                  puts("C++");
                                              } else {
                                                  puts("C");
                                              }
                                              return 0;
                                          }
                                          Ответить
                                    • Вот только у вас можно использовать код входящий в множество "C" ∩ "C++". Надо найти какие нибудь отличия в препроцессоре, которое можно в #if заюзать.
                                      Ответить
                                      • #define and
                                        
                                        prog.cc:4:9: error: "and" cannot be used as a macro name as it is an operator in C++
                                            4 | #define and
                                              |         ^~~
                                        Ответить
                                        • #include <cstdio>
                                          
                                          int main()
                                          {
                                            int a = 5;
                                            int *a_ptr = bitand a;
                                            printf("%d\n", *a_ptr);
                                            return 0;
                                          }


                                          Какой багор!
                                          Ответить
                                        • Вхахаха. Кресты пролезли в сишку? А то что переменные можно "class" называть - это норм?
                                          Ответить
                                          • Семантике это не противоречит, начиная со стандарта 14, некоторые конструкции языка вообще напоминают Visual Basic. А ещё говорят, что Страуструп - масон.
                                            Ответить
                                            • гляди-ка, стертор выучил слово "семантика". Теперь ты не только про гомосексуализм и педофилию рассуждать можешь?
                                              Ответить
                              • Какой багор )))
                                Ответить
            • >(эстетика) приносит бизнесу пользу
              А разве не приносит? В виде большего желания работать с этим языком.
              Ответить
              • Возможно.
                Хотя, может, число тех, кто может стабильно и безэмоционально выдавить из себя работающий код, достаточно велико. Или может, вся эта творческая питушня нивелируется в 99% случаев дедлайнами, когда все программисты отдела через не хочу пишут 90% кода в последний день?
                Ответить
        • Вот я удивился — почему там в комментариях никто не вспомнил про «std::wstring», который ввели ещё в 11-м Стандарте?

          Ну а что касается резкого отрицания в комментариях — так то видать реакция на откровенно тупой троллинг со стороны тамошнего ТСа, благодаря которому даже зёрна истины в полотне бреда были проигнорированы. Собственно, большинство придирок там либо совсем идиотские (на уровне неработающего в gcc «String^»), либо относятся не к языку, а к компилятору: так, к примеру, это не язык позволяет получать доступ к элементам за границей массива, а компилятор оказался тупым и подставы не заметил. Другое дело, что косвенная вина языка тут есть: кресты дико переусложнены, что сильно затрудняет написание даже просто полностью поддерживающего все фичи компилятора (вот прямо вчера вечером я сидел и изучал табличку https://gcc.gnu.org/projects/cxx-status.html — увы, оказалось, что «Selection statements with initializer» на моём конпеляторе недоступны).

          А вот претензия про отсутствие «JSON» внезапно совершенно правильная. Вернее, дело даже не столько в «JSON», сколько в совершенно дерьмовой стандартной либе. Такое впечатление, что Комитет добавляет туда только максимально абстрактные и оторванные от прикладного программирования сущности. Я тут уже недавно пригорал на тему добавления в стандартную библиотеку каких-то, блядь, цилиндрических функций Бесселя (первого рода). Нет, я допускаю, что где-то в застенках секретных лабораторий полтора безумных учёных таки используют эти математические колдунства для создания Машины Судного Дня — но что-то мне подсказывает, что множество крестовиков, которым в работе необходимо использование сетей, жсона и прочей прикладной фигни, куда больше, чем множество безумных учёных.
          Особенно повеселил комментарий про то, что в «низкоуровневых крестах» «JSON» нинужен. Ага, блядь, а интегралы — самое то для низкоуровневого языка.
          Ответить
          • Функции Бесселя используются учёными и конструкторами для решения задач механики в полярных (на плоскости) и в цилиндрических координатах (в объёме). Но только учёным может не хватить точности стандартных типов float и double, придётся использовать GMP, значит, всё равно понадобится специализированная библиотека.

            Чуть не забыл. Наверняка уравнение будет записано в комплексных числах и учёному/конструктору будет влом разделять его на вещественную и мнимую части. Напомните мне, какие функции стандартной библиотеки умеют работать с комплексными числами.
            Ответить
            • Полагаю, что функции Бесселя влепили не из-за запроса на них, а только потому, что их было легко реализовать. Для такой точности, кокококоторую обеспечивают типы float и double, аппроксимация функций Бесселя представляет кокококоротенький многочлен с известными коэффициентами, как и аппроксимация синусов и косинусов.
              Ответить
      • int arr[100]={};
        cout<<arr[101]<<endl;

        Царь говорил, что отсутствие bounds checking из коробки — это хорошо, потому что лишние проверки снижают пирфоманс.
        Ответить
        • Правильно говорил. Но можно в компайлтайме проверить.
          Ответить
          • Но ведь это замедлит компиляцию.
            Ответить
          • А он проверяет. И считает, что строка с обращением за границу массива недостижима. Где-то тут был пример когда поиск в массиве превратился в return true из-за того, что лишний элемент задели.
            Ответить
            • https://ideone.com/bL2vGQ
              Ответить
              • Кокококолдун!
                Ответить
              • Лютый! Люты-люты-лютый багор )))
                Ответить
              • Царский код. Без оптимизации и с -O1 выдаёт один элемент (0), с ключом -O2 или с -O3 выдаёт все шесть элементов.

                Прав был Царь, когда говорил, что всё нужно компилировать только с -O2.

                А теперь попробуем подключить анализатор.
                -fbounds-check –— никакого эффекта.
                -Warray-bounds —– никакого эффекта.
                -mmpx -fcheck-pointer-bounds –— в компайлтайме ничего не находит, в рантайме... барабанная дробь... без оптимизации выводит один элемент, с -O2 выводит пять элементов (с 0 по 4), а на 42 падает с сообщением о недопустимой операции.
                Остальные -fchkp-... ничем не помогли.

                То ли я разучился им пользоваться, то ли в данной версии «gcc» этот патч применён криво, то ли он работает только в ограниченных случаях...
                Ответить
                • Погуглил, у всех такая же фигня с неработающим bounds checking. Когда я несколько лет назад для какой-то версии «gcc» сам применял патч «bounds checking», проверка работала. А сейчас готовые бинарники «gcc» по факту ничего не проверяют. Повторить что ли эксперимент с патчем? Только нужно вспомнить, откуда я его качал...
                  Ответить
                  • Я вот этим патчем когда-то пользовался:
                    http://www.doc.ic.ac.uk/~awl03/projects/miro/

                    Но он только для gcc 4.3.0.

                    Есть ещё такой:
                    https://sourceforge.net/projects/boundschecking/files/

                    Но он ещё хуже, потому что он для gcc 3.3.3...4.0.2.

                    Неужели Цари, которые считают, что проверки не нужны, победили?

                    P.S. Есть ещё такой:
                    http://www.netlib.org/c/bcc.tar.gz

                    Но он вообще для gcc 2.7.2.
                    Ответить
                    • Кто придумал этот ёбаный "tar.gz"? Чем обычный "zip" не угодил?
                      Ответить
                      • Непрерывное сжатие. Хотя с размером словаря в 64 кб оно один хер не работает, так что действительно - нахера?
                        Ответить
                        • Именно поэтому я за «Adaptive Huffman coding».
                          Ответить
                          • А я за бескокококонечное сжатие.
                            Ответить
                            • Осторожно, бесконечное сжатие критически близко подходит к ворециям. Может рвануть.
                              Ответить
                        • В "PHP" есть потоковый "ZipArchive". Поэтому я за "PHP".
                          Ответить
            • Есть патч «bounds checking», кокококоторый интегрировали в «gcc», начиная с какой-то версии:
              gcc -v --help | grep bounds

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

              Их можно использовать для отладочной версии и для статического анализа. В продакшне использовать эти опции не рекомендуют, потому что код почему-то получается медленнее, чем в «Паскале».
              Ответить
              • > медленнее паскаля
                Ну видимо оптимизацию "ненужных" проверок заодно отломали. Чтоб не выкидывало.
                Ответить
                • Ситуация на текущий момент такая:
                  1. В современных версиях «gcc» (не знаю, начиная с какой версии) -fbounds-check не работает. Совсем никак. По крайней мере, моему петушиному мозгу не удалось придумать тест, в котором бы оно себя проявило.

                  2. В EMX -fbounds-checking (заметили суффикс «ing»?) работает, только там компилятор совсем древний:
                  Bounds Checking GCC v 2.8.1-1.01 Copyright (C) 1995 Richard W.M. Jones
                  Bounds Checking comes with ABSOLUTELY NO WARRANTY. For details see file
                  `COPYING' that should have come with the source to this program.
                  Bounds Checking is free software, and you are welcome to redistribute it
                  under certain conditions. See the file `COPYING' for details.
                  For more information, set GCC_BOUNDS_OPTS to `-help'
                  0.
                  ideone.c:11:Bounds error: array reference outside bounds of the array.
                  ideone.c:11:  Pointer value: 0x33848
                  ideone.c:11:  Object `table':
                  ideone.c:11:    Address in memory:    0x33838 .. 0x33847
                  ideone.c:11:    Size:                 16 bytes
                  ideone.c:11:    Element size:         4 bytes
                  ideone.c:11:    Number of elements:   4
                  ideone.c:11:    Created at:           ideone.c, line 6
                  ideone.c:11:    Storage class:        static
                  writing core file
                  
                  Process terminated by SIGABRT


                  Попробую скомпилировать другие версии «gcc». Ссылки на патчи я привёл выше.
                  Ответить
                  • > не удалось придумать тест
                    Оно выкинуло все добавленные проверки.
                    Ответить
                    • Конфликт оптимизатора с проверкой границ: оптимизатор считает, что проверка границ снижает пирфоманс, поэтому выкидывает её.
                      Ответить
                      • Да нет, просто не видит в ней никакого смысла. И так же понятно, что в программе ничего за границы буферов не вылетает. А если вылетает - то на её поведение всем похуй.
                        Ответить
                        • Идея библиотеки ввода-вывода: и так же понятно, что никакой ошибки чтения или записи не будет. А если будет, то на поведение программы всем похуй.
                          Ответить
                          • Идея аутентификации: и так же понятно, что юзер введёт правильный пароль. А если не введёт, то всем похуй.
                            Ответить
                  • > Есть патч «bounds checking», кокококоторый интегрировали в «gcc», начиная с какой-то версии:

                    Это какое-то устаревшее говно, судя по всему. Используй -fsanitize
                    https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html
                    Ответить
                    • Ещё у Шланга есть -fsanitize=address, но только там что-то сломали и оно не работает на некоторых платформах.
                      Ответить
                    • cannot find -lasan
                      Ответить
                      • Прыщебляди соснули:
                        https://bugzilla.redhat.com/show_bug.cgi?id=1303766
                        Ответить
                      • Нахрена тебе -lasan, можно тупо -fsanitize=undefined взять, оно тоже кое-какие ошибки ловит
                        Ответить
                        • cannot find -lubsan
                          Ответить
                          • У тебя cygwin наверно
                            http://cygwin.1069669.n5.nabble.com/gcc-cannot-find-lubsan-td122313.html

                            или возможно mingw (не знаю, есть ли там такая проблема)
                            Ответить
                            • Ни там, ни там нет. Тихо компилируется, не предупреждая, что линковаться будет не с чем. Libasan и libubsan ищите, где хотите.
                              Ответить
      • >1. Если это просто желание поделиться радостной эйфорией от первых же граблей, на которые наступил в языке — то явно ресурс выбран неудачно. Лучше публиковать на говнокод ру, например. Там еще можно в пост добавить слово «крестобляди», там вообще такое очень любят.
        Это про местных крестообсуждальников типа борманда?
        Ответить
      • > "кто вы такой, сколько у вас лет опыта С/С++"
        Лол. Сперва добейся?
        Ответить
        • Напоминает одного местного обитателя который сразу спрашивает сколько у тебя зарплата)

          зы: опыта достаточно чтобы не разговаривать с теми, кто использует словосочетание "C/C++"
          Ответить
          • "C/C++/C#/C--/1С/Csh"
            Ответить
            • Ты удивишься, но увы.

              https://toster.ru/q/50326
              https://skillcrush.com/2012/11/30/c-c-c-and-objective-c-2/
              https://hlrnet.com/sites/c-c-c/
              http://citforum.ru/programming/c.shtml

              Бывает еще более крышесносно
              https://dou.ua/forums/topic/10092/
              https://stackoverflow.com/questions/245062/whats-the-difference-between-javascript-and-java
              Ответить
              • Одно дело, когда новичок спрашивает, в чём разница. Над новичком грех смеяться. Совсем другое дело, когда такая каша реально в вакансиях какой-нибудь организации. Так и хочется спросить: а Вам точно нужен программист?
                Ответить
                • > нужен программист
                  Нужен. Иначе кто будет принтеры заправлять?
                  Ответить
              • JavaScript - это изкоробочный скриптовый язык для джавы (rhino). Разве нет?
                Ответить
                • Блевонный совершенно

                  скриптовать под жабу лучше уж на грувях, а то и вовсе на ккокок
                  Ответить
                • А ведь есть ещё CS-script и VB-script...
                  Ответить
                  • Я, извините, ебал такой скрипт
                    using System;
                    using System.Windows.Forms; 
                    
                    class Script
                    {
                        static public void Main(string[] args)
                        {
                            Console.WriteLine("Hello World!" );
                            MessageBox.Show("Hello World!");
                        }
                    }



                    сриптовать под дотнет надо на помершеле, максимум на желеной змее или железном рубине
                    Ответить
                    • Действительно, для скрипта слишком много обёрток: код, завёрнутый в функцию Main, завёрнутую в класс... Сто одёжек и все без застёжек.

                      Обычно у скриптов главные действия происходят в глобальном неймспейсе.
                      Ответить
                      • Совершенно верно
                        Собсно, скрпит он только в том смысле что не нужно явно копулировать.
                        Вот нормальный скрипт
                        p "hello world"


                        за msgbox в срипте вобще нужно убивать
                        Ответить
                      • Даже для обычного языка это овердохуя хуево.

                        В коко можгл
                        print("Hello, этот ёбаный мир")


                        Без всяких static public void
                        Ответить
          • > опыта достаточно чтобы не разговаривать с теми, кто использует словосочетание "C/C++"
            Т.е. никакого опыта в C/C++ нет, приходится избегать общения с теми, кто о них говорит, чтобы они не догадались?
            Ответить
            • Язык "С/С++" - кентавр из няшной и крестов. Си-с-классами, ручное управление памятью посреди крестов, вот это всё.

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

                C/C++ здорового человека - это "C и C++" или "C или C++".

                Например,
                - А вот в C/C++ блоки формируются не отступами, а фигурными скобками
                - В C/C++ придётся явно управлять памятью в отличие от Java
                - Типичная вычислительная программа на C/C++ быстрее таковой на Java/C#/python
                - Хочу изучить основы C/C++/Java/Bash, чтобы лучше понимать своих друзей-гиков
                Ответить
              • "С++" это и так кентавр из сишки и какого-то говна
                Ответить
      • https://habr.com/ru/post/432488/#comment_19480098

        > Требование поддержки JSON в стандартной библиотеке — апофеоз глупости для низкоуровневого языка.

        Ух блядь, как же бесят эти тупорылые хабрабляди. Аж зло берет. Ну как можно такую хуйню написать, а? Какое нахуй имеет отношение "уровневость" языка к тому говну, которое можно или нельзя пихать в стандартную библиотеку? В крестопомойной параше в стандартную либу позапихивали всякой хуйни, которая 99.99% программистам просто нахуй не нужна, типа:
        https://en.cppreference.com/w/cpp/numeric/special_math/cyl_bessel_j

        Что по-вашему чаще требуется, уметь парсить JSON или считать цилиндрическую функцию Бесселя первого рода?
        Ответить
        • Или вот например набор инструкций x86 сопроцессора. Зачем там такие сложные инструкции, как FSIN, FCOS? Это ж ассемблер, такие сложные инструкции — апофеоз глупости для низкоуровневого языка. Они б еще инструкцию для преобразования Фурье в процессор встроили
          Ответить
          • Господа гусары! Ни слова про «MMX», «3D Now!», «SSE», «AVX». Сложение с «сатурацией», скалярное произведение векторов, перемешивание, среднее арифметическое... Мало было этого, добавили «FMA» –— умножение со сложением в одной инструкции.

            А как вам алгоритм «AES», встроенный в процессор? Кому нужна встроенная криптушня, она же устаревает?

            А как вам такое: https://en.wikipedia.org/wiki/Bit_Manipulation_Instruction_Sets

            Ну какой разработчик интернет-магазина будет каждый день вычислять x & (x-1)?
            Ответить
        • Xkcd линукс и флеш.jpg
          Ответить
        • На сях же пишут всякие сервира, воб-сервисы, всякие поебони для IoT, так что неплохо было бы иметь в стандартной билиботеке функции для работы со вяскими сетями, ХуйТыТуПой и прочими протопопами, с домом ХуйТыМЛя, джинсонами и прочей поеботиной.
          Ответить
          • Если в стандартной библиотеке будут функции для Хуй-ты-тупого и для Хуй-ты-мля, то не будет такого количества браузерных движков. Браузерописатели останутся без работы.

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

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

              Всё медленное говно типа ввода-вывода должно быть в операционной системе.
              Ответить
              • Хотя с другой стороны, где-то должен быть описан интерфейс между языком и ОС. Для повышения портируемости программ и приходится изобретать стандартную библиотеку, которая является прослойкой между программой и ОС.
                Ответить
        • JSON разумеется не нужен в стандартной либе. Между нами девочками JSON вообще не нужен: это крайне плохой формат, ни для кого кроме JSерв не полезный. Его нельзя валидировать и делать комплишен (в нем нет схемы) его неудобно писать, по нему неудобно навигироваться итд.

          Кроме того JSON (как и все, порожденное JSерами) через год выйдет из моды и везде будут YAML, TOML и еще что там придумают.

          Так что пускай он лучше будет в boost
          Ответить
          • Почему неудобно писать? Где навигироваться, в языке или просматривать?
            Ответить
          • Схема JSON была же, никто её не удалял.
            В стандартной, в полустандартной или в нестандартной - не так важно. Главное - шаговая доступность.
            kokoko install json - и можно работать
            Ответить
            • Схема в json не стандартна и потому ее никто не использует почти, а значит если я беру какой-нить сервис с JSON REST то там не будет схемы
              Ответить
          • > JSON разумеется не нужен в стандартной либе.

            Тогда и функции Бесселя там тоже не нужны.
            Ответить
    • > Для примера я отправил себе письмо с адреса [email protected]

      1. Не будет зелёного замочка, свидетельствующего о прохождении валидации DKIM. Если отправить кому-нибудь на «Gmail», то сразу уйдёт в спам.
      2. Если отправить не на домашний сервер, а в какую-нибудь известную почтовую службу, то отправят в спам, потому что не прошло проверку SPF.
      Ответить
      • Я когда такую хуйню в первый раз обнаружил, тоже охуел. "mail.ru" никак не помечал такие письма, и не просцышь, что это фейковое письмо. Может если массово рассылать - тогда попадёт в спам.
        Ответить
        • Не умничай. Не к лицу тебе.
          Ответить
          • тебе к лицу только хуй, стертор
            точнее не к лицу, а ко рту
            или даже два хуя
            ну ты это и без меня прекрасно знаешь
            Ответить
      • Тред про почту ёбнули что ли?
        Ответить
      • Вот по этому я за
        v=DMARC1; p=reject;aspf=r;aspf=r;

        а если домен кажет на MTA то даже =s
        Ответить
    • Ответить
      • >> Я ж написал, что не агитация на Rust)
        >> Просто троллинг, возможно не удачный.

        Настоящий тролль не признается, что он троллит.
        Ответить
    • Кстати интересный вид продвижения — сообщить о давно известном косяке и вставить адрес своего сайта.
      Ответить
      • Всегда так делаю. Вот, например, недавно попытался вставить в поле From: [email protected]
        Ответить
        • Так это ты был? Он еще мой пароль спрашивал, говорил, что иначе аккаунт заблокируют. Ещё тогда подумал, хорошо, что я папку "Спам" иногда проверяю!
          Ответить
    • А, ПОЦОНЫ, НЕ КОЧАЙТИ. У МЕНЯ ИЗ-ЗА ЭТОГО ФАЙЛА КОМП РАСПИДОРАСИЛО, БАТЮ В ТОЛЧОК СМЫЛО, Я МЕНЯ ОТРАВИЛО НАХУЙ КОГДА ЖРАЛ БОРЩИ, БРАТА В ГОВНЕ УТОПИЛО, ДЕЦЛ КОГДА ПЕЛ НА КОНЦЕРТЕ УВИДЕВ ЭТУ НОВОСТЬ УПАЛ И УМЕР.
      ПИШУ НА ПХП!
      Ответить
    • Боже, какой пиздец этот ваш хабр.

      Человек одновременно ничего не понимает в SMTP, хостингах и PHP, и зачем-то пишет статью.
      Ответить
      • Зато регистрация по инвайту, кокококоторая якобы должна была оградить Х-р от наплыва дилетантов.
        Ответить
        • Создатели Х-ра уже довольно давно поняли, что чем больше пользователей — тем больше бабла, и теперь инвайт там — вещь практически ненужная (с момента введения «Read & Comment»-аккаунтов). Буквально на днях, кстати, по одному инвайту выслали всем пользователям с положительной кармой (а те, у кого был R&C-акк и положительная карма, получили аккаунт полноценный), лол. Никакой элитарности на этой помойке уже давно нет.
          Ответить
          • Сейчас проверил... Со старой учётки я ничего не могу комментировать. У меня даже кнопки «Ответить» нет. Регистрирую новую... Мне пишут, что я могу комментировать, но только с премодерацией.
            Ответить
            • К — консистентность.

              Собственно, достаточно было оставить пару мейнстримных комментов, получить +1 в карму и радоваться инвайту (который на днях пришёл). Но зачем?..
              Ответить
            • Там (если я правильно помню) премодерация только на первый коммент.

              Скоро год как я там напейсал последний комент, но коментировать могу. Ещё там простолюлинам некропостить нельзя, может ты старый пост открыл? Или тебя зойбанеуи?
              Ответить
              • Старая учётка зашкварена: «Вы можете добиться отмены ограничений на комментирование публикаций, написав полезную для сообщества статью в Песочницу». Она после регистрации два года пролежала вообще без единого комментария, потом меня забанили («Случайно оказался на сайте»), спустя ещё несколько лет я оставил пару комментариев в режиме «Read & Comment», потом почему-то кнопка «Ответить» совсем пропала.

                В любом случае, на «Х-ре» мне скучно. На «ГК» мне всегда находится, что написать, а на «Х-ре» обычное состояние «Нечего добавить».
                Ответить
              • Вроде премодерация в рамках статьи - на первый коммент, в рамках х*ра - 10 комментариев. Только я не помню, что будет, если авторы 10 статей одобрят твои комментарии.
                И вообще у меня информация старая. Только сейчас узнал о питушне с раздачей пачек инвайтов.
                Ответить
          • Единственный более-ли-менее элитарный клуб разработчиков программного обеспечения это сайт govnokod.ru.
            Ответить
      • Англоязычный хабр вообще мёртвый.
        Ответить
    • kokoko}kokoko
      Ответить
      • Сегодня вечером отвезу тебя куда-нибудь
        Оставь это позади
        Мы пойдем в звезды

        Забыть время
        В бесконечной вселенной
        Я знаю, ты чувствуешь себя живым
        Пусть тебя заберут

        Когда-нибудь мы задаемся вопросом, из чего сделаны мечты
        Они говорят
        Как выше, так и ниже
        Всегда, когда мы ищем руку, которая сделала нас
        Они говорят, что все разрушено в пыль

        Так высоко
        Должен спуститься когда-нибудь
        Детка, не сегодня
        Да будет свет

        Когда-нибудь мы задаемся вопросом, из чего сделаны мечты
        Они говорят
        Как выше, так и ниже
        Всегда, когда мы ищем руку, которая сделала нас
        Они говорят, что все разрушено в пыль
        Ответить
        • Сегодня вечером отъебу тебя куда-нибудь.
          Оставь эту пизду —–
          Мы не ебём пёзды.

          Забыть время
          В анальной вселенной.
          Я загоняю, ты чувствуешь себя еле живым.
          Пусть тебя отъебут.

          Когда-нибудь мы задаемся вопросом: "Влезет ли в анус кулак?".
          Они говорят:
          "Вставай раком".
          Всегда, когда мы ищем руку, которая ебала нас,
          Они говорят, что их было тысячи.

          Так глубоко...
          Я должен кончить когда-нибудь.
          Детка, не сегодня.
          Да, давай быстрее...

          Когда-нибудь мы задаемся вопросом: "Влезут ли в анус две руки?".
          Они говорят:
          "Вставай раком".
          Всегда, когда мы ищем руку, которая ебала нас
          Они говорят, что это была нога...
          Ответить
          • Какой пидор )))
            Ответить
          • Сягодня утром я курнул, и как обычно перданул,
            Слегка нагнулся в унитаз, и сдохла муха на лету.
            Я вспомнил первую любовь, как я тебя в сортире драл,

            В кабине № 45, в гамно свалился твой пенал.

            Моя ты школьная любовь,
            Тебя я не забуду, нет.
            Твои зелёные трусы,
            И ноги волосатые.
            Ого!

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


            Ты мне шепнула: "Я твоя!",
            Рукой упёрлась об бачок.
            Сняла зеленые трусы,
            И с пола, подняла бычок.

            Но По-неопытности я, попал в отверстие не то,
            Ты долго охала, кряхтя, мой хуй попал тебе в очко.
            Когда я высунул конец, то на залупе увидал,
            Вчерашний свежий холодец, и шкурки красных помидор.

            Моя ты первая любовь,
            Тебя я не забуду - ду.
            Ты подарила мне любовь,
            И помидоров кожуру…
            Ответить
            • По округе льются песни заводные,
              В кулинарной школе снова выпускной!
              Повара, выпускники и их родные,
              Размещаются в столовой расписной.

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

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

              Разорвали на куски бомжа ногтями,
              Прокрутили в мясорубке целиком.
              С волосами и с зубами и с костями,
              С гениталиями, в шляпе и с говном!
              Ответить

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