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

    +158

    1. 1
    <<?='b'.'o'.'d'.'y'?> class="p0 m0">

    Чье-то из какой-то самописной CMS в шаблоне..) таким способом выводятся многие теги))

    Запостил: Cyril, 22 Мая 2014

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

    • н.о. .З.а.ч.е.м?
      Ответить
      • 'О'.'б'.'ф'.'у'.'с'.'к'.'а'.'ц'.'и'.'я'. '?'
        Ответить
        • 'З'.'а'.'щ'.'и'.'т'.'а'.' '.'о'.'т'.' '.'п'.'о'.'и'.'с'.'к'.'а'.' '.'п'.'о'.' '.'ф'.'а'.'й'.'л'.'а'.'м'.'?'

          Надо userjs такой забабахать.
          Ответить
          • > Защита от поиска по файлам?
            Боль в жопе для того, кому потом это поддерживать. И ведь он всяко писал это руками, а не делал скрипт-обфускатор.
            Ответить
    • Аналог '</scr'+'ipt>' в JS?
      Ответить
      • Ну, там хоть логика есть. А тут просто набор угара содомии.
        Ответить
      • а кстати зачем так делали?
        чтобы из ДЖС нагенерить ДЖС и случайно не закрыть таг?
        Ответить
        • Чтобы парсер не поломать. HTML парсер же ничего не знает о JS и его строках.
          Ответить
          • <script>
            alert("</script>");
            alert("Если вы читаете это, значит автор браузера не ослоёб");
            </script>


            Я так понимаю что они все ослоёбы, да?
            Ответить
            • Был ещё распространённый вариант:
              <script>
              <![CDATA[
              alert("Если вы читаете это, значит автор браузера не ослоёб");
              ]]>
              </script>

              Работал только в браузерах, парсер которых поддерживал «SGML». Был ещё такой вариант, чтобы не сломать интерпретатор «JS», если вдруг парсер не понимает «SGML»:
              <script>
              // <![CDATA[
              alert("Если вы читаете это, значит автор браузера не ослоёб");
              // ]]>
              </script>

              Однако, если парсер не понимает «SGML», то даже такой вариант не спасёт от необходимости разбивать слово 'scr'+'ipt'.
              Ответить
              • <body onload="
                  alert('</script>')
                ">
                Ответить
                • <body onload="
                  alert('</body >')
                  ">
                  Ответить
                  • Про свои-то строки "HTML" знает, тем более открываюший тег не завершён. Так что всё работает.
                    Ответить
                  • А теперь попробуйте без кавычек:
                    <body onload=
                    alert('</foo>')
                    >


                    Или даже так:
                    <body onload=
                    alert(&apos;</foo>&apos;)
                    >
                    Ответить
                • Кстати, а как указать язык для кода в аттрибутах событий? Мож я там S" Forth" хочу юзать?
                  Ответить
                  • отличный вопрос

                    есть IE под рукой?
                    сделай-ка
                    onclick="msgbox \"петя питушок\""
                    Ответить
                    • Как пропатчить "IE" под "FreeBSD" "Centos"?
                      Ответить
                      • у тебя центось на десктопе? но зачем? почему не федора?
                        ты любишь несвежее может?

                        или утеб Red Hat Enterprise Linux Desktop ?
                        Ответить
                        • Я пробовал разные дистры, сейчас "Centos" уже где-то почти месяц, просто не могу выбрать, с виндой-то проще.

                          > ты любишь несвежее может?
                          У меня ещё "DSL" есть...
                          Ответить
                          • чем не устроили убунта, слака, дебиан, арч, гента?
                            Ответить
                            • Я хз, возможно просто хочу побольше посмотреть.
                              Ответить
                              • именно лынуксов?
                                Ответить
                                • Я ещё немножко поковырялся в "OpenBSD", "MinetOS" и "KolibriOS". Но как основные я их юзать бы не стал.

                                  Ещё я люблю маленькие дисьры: "DSL" (для 50-ти метров в нём предустановлено довольно программ, но он давно мьортфф), " SliTaz" (у него много разных редакций, но он вообще на 2-м ведре), "Tiny Core" (для пердоликов-минималистов, любителей гуёв в стиле 90-x (ну это поправимо), но мне нравится (возможно потому что я минималист)).
                                  Ответить
                                  • странно что тебе не понравилась опенбздя тогда

                                    тебе еще надо попробовать нетбзду, солярис, фрю и героин. И окажется что ты попробовал все на свете и можно помирать
                                    Ответить
                                    • Не героин, а план. «Plan 9».

                                      Ещё можно попробовать «QNX», «BeOS», «Haiku», «Temple OS», «Хакинтош», «OS/2», «VxWorks», «Android x86».
                                      Ответить
                                      • из всего этого жывые и продакшен реди тока кункс и вксворкс (оба рилтаймовы)


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

                                        а опнбздя крута своей примтивностью,безопашностью и документированостью, но это ты уже заценилвидимо
                                        Ответить
                        • И почему это несвежее?
                          Ответить
                          • ну кака у тебя версия пиздона ? а ядро кокое?
                            Ответить
                            • Тогда я против "Python 3.7".
                              Ответить
                              • Кажется что ты против питона 3 вообще, потому что шипица только двйка
                                Тройка есть только в EPEL, да и то только 3.6.

                                А в последней федоре (раз уж тебе нравица RPM) вообще все на третьем питоне
                                Ответить
                            • путхон 3.6.4
                              ядро 3.10
                              Ответить
                              • >ядро 3.10
                                говномамонта
                                Ответить
                              • еси без шуток то CentOS это ось чтобы гонять всякий фертифицированный под RHEL энтерпрайз не платя тысяч баксов редхату

                                юзать ее на десктопе немного странно кмк
                                Ответить
                        • > несвежее
                          Зато штабильное.
                          Ответить
                          • для десктопа это крайне важно

                            зы:
                            > cat /etc/redhat-release
                            >CentOS Linux release 7.6.1810 (Core)
                            > openssl version
                            >OpenSSL 1.0.2k-fips 26 Jan 2017

                            ну ты понел, да?
                            Ответить
                            • Ну security апдейты там же все на месте? Просто новых алгоритмов нет (юзать их один хер некому - софт древний).
                              Ответить
                              • У меня вопрос в почтенной публяке. Уверен, Борманд или Иканус должны знять.

                                Когда Compaq доумкала перенести контроллер внутрь HDD (так появился IDE) то их ленточный кабель же просто "удлинял" ISA (которая в ту пору просто называлась System Bus или Host Bus), да?

                                То-есть это как если бы диск прямо в черный длиный разъем пнули?

                                Именно потому стандарт называли AT-Attachment.

                                Но потом появилась PCI и южный мост и "ATA" уехала туда.
                                То-есть в этот момент она уже НЕ была никаким "AT attachemnt" и была совершенно самостоятельной шиной, такой же как какой нить USB (разве что без маршрутизации).

                                И IDE уже тоже стало неверным названием, ведь контроллер теперь был не только в диске, но и в южном мосте, и назывался типа "ATA Host Bus Adapter"

                                А уж SATA так и вовсе уебанское название.

                                То-есть "честным" ATA и IDE были только во времена первых IDE кода контроллеры диска (встроенные в диск) подключались прямо в шину ISA и оттуда управлялись процессормо.
                                Ответить
                                • хуйпиздаджигурда это лучшая еда!
                                  Ответить
                                • "То-есть это как если бы диск прямо в черный длиный разъем пнули?

                                  Кто о чём, а гость, как обычно о длинных да о чёрных.
                                  Ответить
                                  • Короткие коричневые («VLB», «AGP»), короткие белые («PCI»), длинные белые («PCI-X») и разноцветные («PCI-E») появились позже. В эпоху AT были только длинные чёрные.

                                    Говорят, что у «IBM PS/2» были какие-то свои разъёмы, но я их не видел.

                                    Ещё говорят, что были длинные коричневые («EISA»), но врут наверняка.
                                    Ответить
                                    • У PS/2 была VLB.
                                      EISA тоже была, там даже был полуручной PnP.

                                      Но это не отвечает на мой вопрос
                                      Неужели сложно ответить?
                                      Ответить
                                      • У «PS/2» была «MCA». Ладно, вернёмся от длинных чёрных к нашим баранам.

                                        Увы, не копал я «IDE» a. k. a. «ATA». Строго говоря, даже во времена «AT» там были хитрости, иначе бы существовали переходники «ISA — IDE» в обе стороны. Да, данные не обрабатывались, они проходили насквозь. А вот шина адреса в «ленточный удлинитель» полностью не заводилась. Номер порта I/O выбирался не жёстким диском, а мультикартой (на ней иногда даже были перемычки для выбора альтернативного порта I/O). Т. е. на мультикарте как минимум стоял мультиплексор.

                                        Но ведь мультиплексор стоял и на «LPT» (вроде недавно обсуждали 8255). Да и данные там тоже вроде проходили насквозь без обработки.
                                        Ответить
                                        • Ты прав про MCA, я перепутал с VLB (Vesa) и пропрпрпроптарной MCA (коея обосралась in the фейвор оф PCI)

                                          Данные проходили ПОЧТИ наскрозь. Там стоял HBA: Host Bust Adapter. Заметь: ADAPTER а не CONTROLLER.

                                          То-есть переходник был именно переходником, а не контроллером.

                                          Вот у SATA Он уже контроллер (ahci), но это было сильно потом.
                                          Ответить
                                          • А что произошло с шиной «AT» a. k. a. «ISA»? На материнских платах, оборудованных «PCI», она уже не является основной.

                                            Из Википедии: «In 2008 IEI Technologies released a modern motherboard for Intel Core 2 Duo processors which, in addition to other special I/O features, is equipped with two ISA slots.

                                            Similarly, ADEK Industrial Computers is releasing a motherboard in early 2013 for Intel Core i3/i5/i7 processors, which contains one (non-DMA) ISA slot».

                                            Как на них она реализована?
                                            Ответить
                                            • Она ускользила на south bridge или communcation hub, как и все остальные мелочевки которые были когда-то на иса.

                                              ATA версии 2 уже слабо напоминала классическую ATA: например, она имела DMA на устройстве, что бывает только на шине PCI.

                                              Вполне возможно что и "HBA" (уже ставший практически отдельым почти контроллером) уже распологался на PCI, просто осталось ебанутое название.

                                              А сама матушка ISA в формате Low Pin Count (LPC) чтуь ли не до сих пор встречается вноутах

                                              кажется на нее то-ли конопки то ли флешку с прошивкой вешают
                                              Ответить
                          • [email protected]:~$ uname -a
                            Linux govnovps 2.6.32-042stab133.2

                            Штабильно!
                            Ответить
                            • виртуоззой пахнуло
                              Ответить
                              • Што это?
                                Ответить
                                • Погуглил. Похоже, что это компания, выпускающая «OpenVZ». Это такой виртуализатор, который шарит пропатченное ядро «Линукса» между контейнерами.
                                  Ответить
                                  • Это para (от слова "паралитик") виртуализация. Ядро там патченное и древнее

                                    И оно нахуй не нужно во времеена KVM и хрдврнй вртлзции
                                    Ответить
                                    • Рага? Что такое квм и насколько помогает хардварное ускорение?
                                      Ответить
                • Очередной петух )))
                  Ответить
    • Напомнило:

      -  } elsif ($origin eq "Ubuntu" or $origin eq "Canonical") {
      +  } elsif ($origin=~/^[u][b][u][n][t][u]$/ or $origin eq "Canonical") {
           if ($suite) {
      -      say("Ubuntu Release file: using Suite ($suite).");
      +      say("Debian derivative from Canonical which cannot be named Release file: using Suite ($suite).");
      Ответить
      • А с чем это связано? Если произнести название производной «Дебиана», то можно запомоиться?
        Ответить
        • Трейдмарк.
          Ответить
          • Нашёл:
            http://www.opennet.ru/openforum/vsluhforumID3/92539.html

            Какие-нибудь ещё торговые марки нужно заменять эвфемизмами, чтобы не запомоиться, или только производную «Дебиана»?
            Ответить
            • >>все указанные на сайте действия заменяет кнопочка
              >вся суть убунтоидов
              :)))))))))))))))))))))))
              Ответить
      • Напомнило способ скрывания мата в словарях:
        http://govnokod.ru/19864
        Ответить
        • как в том анекдоте про говорящий колодец:

          --кому не спится в ночь глухую?
          --хую, хую, хую....
          Ответить
          • Представил себе картину. Люди пытаются заснуть, а какой-то хуй в колодец кричит...
            Ответить
    • подумаешь
      В вконтатке часто пишут
      if (p[0] == 'p' && p[1] == 'e' && p[2] == 't')
      Ответить
      • Странные люди. Я бы написа́л:
        if((uint16_t *)p[0] == 0x6570 && p[2] == 't')
        Ответить
        • зачем ты разыменовал букву пэ?
          Ответить
          • Я приоритеты не помню. Надо было поставить скобки?

            Тогда так: ((uint16_t *)p)[0] == 0x6570.
            Или так: 0[(uint16_t *)p] == 0x6570.
            Ответить
            • вот мне кажется что так лучше:)

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

                    З.Ы. Ну и можно включить align check, но тогда вся стандартная либа отправляется на помойку. Банальный memcpy крашнется.
                    Ответить
                    • пажжи

                      x86 прекрасно читает по кривым офсетам приписывая тебе за это пенальти

                      даже в 286 было
                      я: процессор, считай байт номер 3
                      проц: (читает байты 3-4, 4 выкидывает, три отдает мне)

                      я: процессор, считай слово 4-5
                      проц: (читает байты 3-4, 3 выкидывает, 4 отдает мне, читает 5-6, 6 выкдуывет итл)


                      а

                      я тебя полнял кажется
                      ты на асме писал чилишоли?
                      Ответить
                      • Если флаг AC включен - не читает. В SSE load/store тоже в джвух вариантах один из которых не читает. Вот его я случайно и заюзал.
                        Ответить
                        • Ели явно включить Aligncheck топадает, теперь понил
                          Ответить
                • Нахуя тогда байты адресовать, а не слова?
                  Ответить
                  • Байты то можно читать по нечётным адресам.
                    Ответить
                  • Кстати в "DRAM" таки адресуются слова (на её шине данных, не процессорные). А байты для записи можно выбрать через линии byte enable. Т.е. байтовая адресация один хер эмулируется.
                    Ответить
                    • ЕМНИП DRAM вообще вываливает на усилители целую страницу, а считываешь ты потом линейку длиной с эти самые усилители (по количеству ножек у чипа)

                      ширины всех чипов на канале в в сумме дают 64 -- ширину DIMM, так ведь?
                      Ответить
                      • Не совсем так.

                        Ширина строки (и количество усилителей) на порядок больше количества пинов под данные. После активации строки (долго) ты можешь читать и писать любые места в этой строке (быстро). На SDRAM эти обращения пайплайнятся и хуярят на частоте шины (те самые 3ГГц).

                        А ширина модуля действительно совпадает с суммарной шириной чипов. И сейчас там вроде намного больше 64...
                        Ответить
                        • про ширину я так ведь и написал:)

                          Пусть ширина строки N*10 и количество пинов -- N.

                          Тогда N*10 данных лежат в усилителях, и я могу считать N, N*2, N*3 итд.
                          А потом придется открывать следующую строку, и там пенальти типа CAS.

                          Про пайплайн -- это да. Причем он там везде: и память читается сама собой, причем по требованию менеджера кеша который спешит заполнить ею свои линейки.

                          А про ширину мне казалось что 64 это ширина канала. То-есть за один раз один канал может считать 64.

                          Если у тебя два DIMMа то у тебя два канала и ты можеш за раз считать 128.

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

                          Это всё как-то используется чтобы пока там перезаряжается чип читать другие чипы.

                          Но про ширину я могу конечно и наврать, давно читал
                          Ответить
                          • Там ещё банки внутри самих чипов. И пока один банк на перезарядке ты можешь читать из второго и открывать третий (interleaving).

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

                            А дополнительные планки увеличивают либо ширину шины либо тупо объём памяти. Смотря как воткнёшь.
                            Ответить
                            • Не поленился и читнул. Интерливинг происходит внутри одного канала, ты прав.

                              Один канал (ширкой 64 бита) сначала выбирает себе rank: это N чипов, в сумме по 64бита шириной (один DIMM можа иметь 2 стороны, на каждой свой ранк)

                              Затем он им всем чипам говорит: банк1, строка1, колонко1.
                              Потом банк1, строка1, колонко2.
                              итд.

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


                              Удобно думать о DIMMе как о таком виртуальном DRAMе шириной в 64 бита, тогда всё становица понятно
                              Ответить
                      • З.Ы. Ну и byte enable нужен чтобы не писать на всю ширину модуля если тебе нужно поменять всего один байт (на DDR и выше - чтобы не писать на 2-4 ширины модуля, лол).
                        Ответить
              • >> правда твой код специфичен для байтордера

                А ещё мне нравятся нестандартные литералы, когда в одинарных кавычках несколько символов. Даже на одном процессоре с известным индейцем в разных кокококомпиляторах они реализованы по-разному. В одних 'abcd' кококомпилируется в db 61h, 62h, 63h, 64h, в других –— в db 64h, 63h, 62h, 61h. Ну то есть в одних 'abcd' –— это 0x61626364, в других —– это 0x64636261.
                Ответить
                • А "tcc" воспринимает только первый символ, а остальные игнорирует :(
                  '0123' == 0x30
                  Ответить
                  • #include <stdio.h>
                    int main() {
                        printf("%x\n", '0123');
                        return 0;
                    }


                    • «gcc» выдаёт: «warning: multi-character character constant [-Wmultichar]»
                    Спокойно компилирует, программа выводит 30313233 (т. е. на первом месте самый старший байт).
                    • «clang», «Watcom C», «Digital Mars», «MSVC», «Intel Compiler» даже ворнинг не выдали.
                    Программа выводит 30313233.
                    • «Borland C» компилирует без ворнингов.
                    Программа выводит 33323130 (т. е. байты размещаются так же, как в строке).
                    • «tcc» выводит ворнинг (multi-character character constant), но, как уже заметил очередной петух, воспринимает только первый символ. «Pelles C» ведёт себя точно так же.
                    • Церновский интерпретатор «CINT» без ворнингов выводит 30.
                    • Интерпретатор «Ch» указывает на синтаксическую ошибку и прерывает трансляцию.

                    Интересно было бы проверить какие-нибудь компиляторы на большом индейце.
                    Ответить
                    • Зашёл на «godbolt.org».
                      «gcc» на «Power PC» и на «MIPS» выполняет операцию 0x30310000 | 0x3233, т. е. собирает число 0x30313233.

                      На «AVR» тот же компилятор собирает число 0x3233, т. е. воспринимает только два младших байта (два последних).

                      В общем, вне зависимости от порядка байтов процессора «gcc» воспринимает константу как записанную в большом индейце, а потом обрубает до размера мышиного слова.
                      Ответить
                      • ты попробовал божественный болт, и убедился в том что gcc предпочитает Большой Конец
                        Ответить
                    • • «LCC» компилирует без ворнингов, выводит 33323130, как и «Borland».
                      • «Orange C» прерывает компиляцию с сообщением: «Unterminated character constant in function main».
                      • «IBM Visual Age» компилирует без ворнингов, выводит 30313233, как «мейнстримные» компиляторы.
                      Ответить
                    • Офтопик. Смотрите, что нашёл:
                      http://compcert.inria.fr/

                      Компилятор «C», написанный на «OCaml»+«coq», с формально доказанной корректностью.

                      «The CompCert project investigates the formal verification of realistic compilers usable for critical embedded software. Such verified compilers come with a mathematical, machine-checked proof that the generated executable code behaves exactly as prescribed by the semantics of the source program. By ruling out the possibility of compiler-introduced bugs, verified compilers strengthen the guarantees that can be obtained by applying formal methods to source programs.

                      The main result of the project is the CompCert C verified compiler, a high-assurance compiler for almost all of the C language (ISO C99), generating efficient code for the PowerPC, ARM, RISC-V and x86 processors.»
                      Ответить
                      • CompCert C supports all of ISO C 99, with the following exceptions:
                        switch statements must be structured as in MISRA-C; unstructured "switch", as in Duff's device, is not supported.
                        longjmp and setjmp are not guaranteed to work.
                        Variable-length array types are not supported.

                        Ну его нахуй, самые классные пльушке выпилили.
                        Ответить
                        • Кстати, собрал его. Проверяю тот самый пример –— компилируется без ворнингов, программа выводит 30313233, как «мейнстримные» компиляторы. Даже скучно.
                          Ответить
                          • Промежуточный выхлоп компилятора:
                            -------------- Initial XTL
                            
                            f() {
                                6:	
                                5:	x2 = __stringlit_1 + 0 (int); 
                                4:	x3 = 808530483; 
                                3:	(Oi1, Oi0) = (x3, x2) using x6, x5; EAX = call "printf"(Oi0, Oi1); 
                                2:	x4 = 0; 
                                1:	EAX = x4; return EAX
                            }
                            
                            ------------------ Unspillable variables --------------
                            
                            x6 x5 
                            
                            -------------- After initial register allocation
                            
                            f() {
                                6:	
                            { }
                                5:	x2{EAX} = __stringlit_1 + 0 (int); 
                            { x2 }
                                4:	x3{ECX} = 808530483; 
                            { x3 x2 }
                                3:	(Oi1, Oi0) = (x3{ECX}, x2{EAX}) using x6{EDX}, x5{XMM0}; EAX = call "printf"(Oi0, Oi1); 
                            { }
                                2:	x4{EAX} = 0; 
                            { x4 }
                                1:	EAX = x4{EAX}; return EAX
                            { }
                            }
                            
                            -------------- Candidate allocation
                            
                            f() {
                                6:	
                                5:	EAX = __stringlit_1 + 0 (int); 
                                4:	ECX = 808530483; 
                                3:	outgoing(1,int) = ECX; outgoing(0,int) = EAX; call "printf"; 
                                2:	EAX = 0; 
                                1:	return
                            }


                            Описание программы на «ML»:
                            var "__stringlit_1" readonly {int8 37,int8 48,int8 52,int8 120,int8 10,int8 0}
                            extern "printf" = extern "printf" : int -> int
                            "main"() : int
                            {
                              "printf"("__stringlit_1", 808530483) : int -> int -> int;
                              return 0;
                              return 0;
                            }


                            Ещё какое-то внутреннее представление:
                            main() {
                            	EAX = __stringlit_1 + 0 (int)
                            	ECX = 808530483
                            	stack(4, int) = ECX
                            	stack(0, int) = EAX
                            	call "printf"
                            	EAX = 0
                            	return
                            }
                            Ответить
                          • Так CompCert гарантирует только отстуствие багов в компиляторе*, а не в твоём коде.
                            * Точнее, что в нём нет отклонений от формальной спецификации
                            Ответить
                            • А компилятор крестов можно сделать на петухе*? Или это невозможно, потому что крестошаблоны тяжело описать?

                              * «coq» = «петух» в переводе с французского.
                              Ответить
                              • Крестошаблоны как раз несложно должно быть описать (они ж по сути просто функциональный язык из буханки сладкого хлеба), а вот какие-нибудь исключения...
                                Ответить
                                • Исключения можно свести к Either.

                                  Вся эта хуйня с unwind'ами - просто оптимизация успешного пути.
                                  Ответить
                                  • Проблема в том, что в семантику добавляется недетерминированность (сразу в 2 раза больше доказательств) и контекст (catch в крестах это вам не runEitherT). Проще всего это, наверное, продолжениями смодеровать.
                                    Ответить
                                    • *смоделировать, чортов телефон
                                      Ответить
                                    • Выходит, говно ваша семантика.

                                      Как вообще можно использовать в продакшене программу если ты не можешь математически доказать её корректность?

                                      Почему строители моста могут математически показать что мост не упадет, а программисты не могут?
                                      Ответить
                                      • > Как вообще можно использовать в продакшене программу если ты не можешь математически доказать её корректность?

                                        Такой уровень корректности нужен в малом количестве мест. Недаром сейчас "AI" так популярен: работает в 70% случаев и ладно.

                                        > Почему строители моста могут математически показать что мост не упадет, а программисты не могут?

                                        Даром что в 2018 как минимум два крупных моста разрушились, во Флориде (там чисто инженерный факап) и в Италии (старость + неудачная конструкция).
                                        Ответить
                                        • Моделирование механических систем вообще интересно.

                                          Кто-нибудь наверняка вспомнит про сопромат.

                                          Сопромат основан на двух гипотезах:
                                          1. Линейная упругость материала (механическое напряжение пропорционально удлинению).
                                          2. Гипотеза плоских сечений. Грубо говоря, это когда частицы просто смещаются, но ещё не поворачиваются.

                                          Реальные конструкции, пользуясь одним сопроматом, не рассчитаешь.

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

                                          При больших деформациях описывать геометрическое состояние конструкции уже не так просто (гугли подходы Эйлера и Лагранжа).

                                          Приходится дополнительно исследовать упругие свойства материала (нелинейная упругость, градиентная упругость, несимметричная упругость) и неупругие (эффект Баушингера –— раскрытие невидимых микротрещин при деформации, ползучесть, усталость).

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

                                          *****

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

                                          Что же произошло в 2018 году, из-за чего разрушение не смогли предотвратить?
                                          Ответить
                                          • Вроде бы во Флориде как раз таки одну из post-stressing арматурин перетянули до пластической деформации.
                                            Чем кончилось расследование в Италии я не следил, но мост был старый, а архитектор был выебщиком, у которого любимым развлечением было "а как бы сделать поменьше опор". В итоге ремонт его мостов был проблематичен (redundancy-то нет), ну на него и забили.
                                            Ответить
                                            • Мосты с минимальным количеством опор выглядят круто, но это получается аналог единственной точки отказа.
                                              Ответить
        • Царский код, с заточкой под конкретные платформы.
          Ответить
          • Царь говорил, что только «x86-64» заслуживает внимания, под остальные платформы писа́ть не нужно.

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

            Если у тебя очень древний компилятор и 286 процессор то у тебя шина данных занимает 2 байта а префетчера нету, и вконтаквтовый код будет не оптимален

            два байта переслать лучше чем один и потом еще один

            понятно же почему, да?
            Ответить
            • Не факт. У нас же нет гарантии, что p выровнено на 2.
              Ответить
              • Если не выровнено то питуховый код будет нарочито НЕ оптимальным:))
                Ответить
                • Ну в принципе те же 3 транзакции на шине. Так что не хуже вконтактовского.
                  Ответить
                  • Как вообще сейчас вырванивают структуры? Вроде бы интел советует по размеру.

                    То-есть если у тебя sizeof(petux) 42, то петухов лучше располагать по адресу, кратному 42
                    Ответить
                    • > по размеру
                      По размеру самого большого поля. Т.е. если 42 это 5 qword'ов + word, то надо догнаться до 48. Если это 10 dword'ов + word - то до 44. А если это 21 word - то 42 сойдёт.

                      З.Ы. Ну хотя раз у тебя sizeof() получился такой, то у тебя там word'ы или байты. Иначе конпелятор уже бы воткнул паддинг до 44 или 48.
                      Ответить
                      • а если это char koko[42], то тоже сойдет, да?:)

                        вообще с префетчерами, кешем и умными копуляторами можно часто о таком не джумать вообще кмк
                        Ответить
                • if((size_t)p&1 ?
                     (p[0] == 'p' && [0](uint16_t *)(p+1) == 0x7465)
                  : ([0](uint16_t *)p == 0x6570 && p[2] == 't'))
                  Ответить

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