Кресты / Говнокод #26680 Ссылка на оригинал

0

  1. 1
reinterpret_cast<ppu_function_t>(static_cast<std::uintptr_t>(ppu_ref<u32>(cia)))(*this);

Лопни глазоньки. Шаблоны увечат С++ как бог черепаху.
https://github.com/RPCS3/rpcs3/blob/91d06a97296e5e418fb601284577475d8c7dfbaf/rpcs3/Emu/Cell/PPUThread.cpp

Запостил: Psionic Psionic, (Updated )

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

    • на 73-й строке

      ну хотя вообще
      ppu_ref<u32>
      этож тоже шолбон?
      Ответить
            • Да, *_cast — это не шаблон, это коньструкция крестов.
              Ответить
                      • Так ведь можно сделать на любом языке программирования, который поддерживает Unicode в идентификаторах:
                        <?php
                        define('ImmutableTreeListᐸElementTᐳ', 'Кукареку');
                        
                        echo ImmutableTreeListᐸElementTᐳ;
                        echo PHP_EOL;

                        https://ideone.com/86UCZ3
                        Ответить
                        • Какой багор )))
                          Именно поэтому я за «PHP».
                          Ответить
                          • Можно использовать знаки препинания из других языков.
                            Греческие: ʹ ; ´ ῀
                            Армянские: ։ ՛
                            Из языков упомянутых канадских аборигенов: ᐀ ᐟ ᐥ ᐦ ᐸ ᐳ
                            Корейско-японско-китайские: 〓 〈 〉〜 〞 〳 〵
                            Лису: ꓸ ꓹ ꓼ ꓽ ꓿

                            Можно использовать пробелы и тире нестандартной ширины (всякие «en quad», «em dash»), компиляторы их не будут воспринимать как разделители.

                            Вот примеры годноты: ‑ ‒ – ’ ‚ ” ․ ‥ … ′ ″ ‹ › ‼ ⁄ ⁇ ⁈ ⁎ ⁒ ⁓ ⁚ ⸨ ⸩ ⹀

                            Есть годные математические операторы: ∶ ∼ ≪ ≫ ≺ ≻⋆ ⟨ ⟩ ⟮ ⟯ ⧾ ⧿
                            Есть хитрые скобки: ⎨ ⎬
                            Есть просто палки: │ ─ ╱ ╲
                            В «dingbats» тоже можно покопать: ❓❗ ❜ ❞ ❟ ❨ ❩ ❬ ❭ ❴ ❵ ➕ (жаль, некоторые символы выглядят жирнее, чем обычные)
                            Полноширинные версии символов: ︐ ︓ ︔ ︕ ︖ ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~

                            Уменьшенные версии символов: ﹐ ﹒ ﹔ ﹕ ﹖ ﹗ ﹘ ﹙ ﹚ ﹛ ﹜ ﹟ ﹠ ﹡ ﹢ ﹣ ﹤ ﹥ ﹦ ﹨ ﹩ ﹪ ﹫

                            Если Unicode в идентификаторах поддерживается, то из этих символов можно составить идентификаторы, напоминающие фрагменты кода на других ЯП.
                            Ответить
                            • #include <stdio.h>
                              main(){char*main(){char*s="main(){char*s=%c%s%c;printf(s,34,s,34);}";printf(s,34,s,34);}="main(){char*main(){char*s="main(){char*s=%c%s%c;printf(s,34,s,34);}";printf(s,34,s,34);}=%c%s%c;printf(main(){char*s="main(){char*s=%c%s%c;printf(s,34,s,34);}";printf(s,34,s,34);},34,main(){char*s="main(){char*s=%c%s%c;printf(s,34,s,34);}";printf(s,34,s,34);},34);}";printf(main(){char*s="main(){char*s=%c%s%c;printf(s,34,s,34);}";printf(s,34,s,34);},34,main(){char*s="main(){char*s=%c%s%c;printf(s,34,s,34);}";printf(s,34,s,34);},34);}
                              Ответить
                                  • У меня сломался мозг, когда я пытался распарсить этот код.

                                    Ты Нидлесс. Больше никто с «Говнокода» не сможет такое написать.
                                    Ответить
                                    • Будем щитать ты меня раскусил

                                      Да, ручками его разобрать сложно, но на самом деле кот тупой:

                                      Сперва я написал самый короткий и тупой кууайн который знаю:
                                      main(){char*s="main(){char*s=%c%s%c;printf(s,34,s,34);}";printf(s,34,s,34);}

                                      Потом я заменил в нём спецсимволы так, чтобы шланг его целиком проглотил как один идентифир:
                                      main(){char*s="main(){char*s=%c%s%c;printf(s,34,s,34);}";printf(s,34,s,34);}
                                      К сожалению он не хавал nbsp поэтому у main тип не указан.

                                      Далее я просто заменил имя переменной s в первом куайне на эту хуйню.
                                      Ответить
                                • Почти любой код на "PHP" без "<?php" - куайн.
                                  Ответить
                        • плюсы, питон, ди не разрешают короткий пробел в идентификаторах
                          Ответить
                    • как же без шаблонов извращаются с внешней кодогенерацией
                      Ответить
                      • Шаблоны, кодогенерация какая-то... Мы в джаве просто пишем одно и тоже руками семь раз и не жужжим.

                        Чай руки не отвалятся
                        Чай не сахарные
                        Ответить
                          • Значит, нужно быть аккуратным.

                            Большинство Java программистов не достаточно умны, чтобы освоить такие сложные инструменты, как шаблоны (или const, например).

                            Однако они достаточно аккуратны, чтобы правильно и без ошибок написать много одинакового вербозного кода.
                            Ответить
                            • А в «PHP» не надо ничего копировать: там в функцию можно передать значение любого типа. Если нужно, интерпретатор сам преобразует число в строку или строку в число, и даже ругаться не будет.
                              Ответить
                              • В джаваскрипте тоже удобно.

                                Например, в выражении
                                "foo" + {}

                                Джаваскрипт удобно представит "{}" как "[object Object]".

                                Зато в
                                {} + "foo"

                                уже получится число с плавающей точкой, точнее число NaN.
                                Ответить
                                • У меня какой-то шайтан: последний пример показывает NaN, а если взять в круглые скобки, то показывает "[object Object]foo".
                                  Ответить
                                    • Воспроизводится.

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

                                    Это, конечно, касается языков типа JS
                                    Ответить
                                        • Игра «Автогонки» в качестве руля использует переключатель «градусы-радианы-грады». Программа считает косинус константы (100) и по результату вычисления определяет положение переключателя. Косинус ста град будет равен нулю. Кстати, грады вообще где-нибудь используются или их по приколу в микрокалькуляторы ввели? Косинус ста градусов будет отрицательным, косинус ста радиан будет положительным (100 ≈ 30π + 5,75).

                                          Какой скилл )))
                                          Ответить
                                          • Пишут что в геодезии юзается. Х.з. зачем правда он нужен. Углы в 30 или 60 градусов в градах красиво не запишешь.
                                            Ответить
                                            • Мне нравится, как указывают уклон дороги на знаках: там пишут синус угла, умноженный на 100%. Углу в 30° будет соответствовать уклон 50%.
                                              Ответить
                                              • Хм, т.е. 100% уклон это стена?

                                                З.Ы. Не ну довольно удобный показатель, типа каждые 10 метров высота растет на пять.
                                                Ответить
                                                • > За 100% стоит считать уклон в 45 градусов, а тангенс 45 градусов равен 1. Если уклон дороги составляет 7 градусов, то тангенс 7 градусов - это 0,12, вот поэтому 12% и пишут на знаке.

                                                  https://kuruh.ru/krutoy-spusk
                                                  Ответить
                                                  • Интересно. В одних местах пишут, что нужно считать синус (перепад высоты делить на пробег по дороге), в других местах пишут, что считать нужно тангенс (перепад высоты делить на расстояние на карте между точками).

                                                    Кому верить?
                                                    Ответить
                                                    • Тангенс правильно. 100% - это угол 45 градусов.
                                                      Ответить
                                                    • Я думаю, за рулём ничего считать не надо, а просто помнить, какие у тебя покрышки, и соотносить проценты на знаке с погодными условиями.

                                                      С другой стороны, я вообще не понимаю, что мешало тогда ввести классификацию спусков и подъёмов типа A B C D вместо процентов?

                                                      Вот в этих ваших омериках, например, пиктограммы на дороге не особо в почёте, всё стараются писать словами. И ничего, piosa nie popierdolilo
                                                      Ответить
                                                      • > пиктограммы на дороге не особо в почёте, всё стараются писать словами
                                                        Мозг американца разработан настолько, что в него с детства легко помещаются номиналы монет вида "медяк", "полтос", "четвертак", "золотник", ключи на 1/12, 1/6, 1/2, 3/4 и фунты на квадратный дюйм.
                                                        А значит рассматривать Америку как пример использования какого-то решения - дело бесполезное.

                                                        Насколько я помню, в США нет державной мовы. Это значит, что писать там что-то словами - неудачная идея.
                                                        Ответить
                                                    • Или что мешало не синусы и тангенсы считать, а просто разделить изменение высоты на длину участка?
                                                      Ответить
                                                      • Разделить высоту на длину - это и есть тангенс.
                                                        Ответить
                                                      • Я выше написал, что длины бывает две:
                                                        1. Если делим на пробег по дороге, получаем синус.
                                                        2. Если делим на расстояние между точками на карте, получаем тангенс.
                                                        Ответить
                                                          • В принципе, до 10° разница между синусом и тангенсом не настолько велика, чтобы её заметить.

                                                            sin 9° ≈ 0,156.
                                                            tg 9° ≈ 0,158.

                                                            На дорожном знаке всего две цифры. В обоих случаях можно написать 16%.

                                                            Разница будет заметной после 30°, но такой уклон невооружённым взглядом выглядит «пиздец как много».
                                                            Ответить
                                                            • Томушо первый замечательный предел: sin(x) = о(x)
                                                              Ответить
                                                              • >предел

                                                                сразу видно, что ты из аркши
                                                                Ответить
                                                              • Правильнее будет так: sin(x)/x - 1 = o(x).

                                                                Тут x, естественно, в радианах.
                                                                Ответить
              • А вызов шаблонной функции - это не коньструкция крестов?
                Ответить
                • Ты путаешь понятия. Вызов функции (любой) — это коньструкция крестов, но это (очевидно) не «шаблон».
                  https://en.cppreference.com/w/cpp/language/templates
                  A template is a C++ entity that defines one of the following:
                  
                  a family of classes (class template), which may be nested classes
                  a family of functions (function template), which may be member functions
                  an alias to a family of types (alias template) (since C++11)
                  a family of variables (variable template) (since C++14)
                  a concept (constraints and concepts) (since C++20)
                  Ответить
                    • нет, не похуй.

                      Шаблон это такая конструкция языка, которая описывается с помощью ключ слова template, и которую компилятор инстанциириует превращая в код.

                      cast, очеведино, с помощью ключ слова template не описан
                      Ответить
                        • нет, не похуй.

                          Шаблон это такая конструкция языка, которая описывается с помощью ключ слова template, и которую компилятор инстанциириует превращая в код.

                          cast, очеведино, с помощью ключ слова template не описан
                          Ответить
                            • нет, не хуй с ними

                              Шаблон это такая конструкция языка, которая описывается с помощью ключ слова template, и которую компилятор инстанциириует превращая в код.

                              cast, очеведино, с помощью ключ слова template не описан
                              Ответить
                                    • Шаблон это такая конструкция языка, которая описывается с помощью ключ слова template, и которую компилятор инстанциириует превращая в код.

                                      cast, очеведино, с помощью ключ слова template не описан
                                      Ответить
                                      • > очевидно

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

                                          cast, очеведино, с помощью ключ слова template не описан
                                          Ответить
                      • > очевидно

                        Кстати, некоторые касты таки описаны через template. К примеру boost::lexical_cast<> или qobject_cast<>.
                        Ответить
                        • >некоторые касты таки описаны через template

                          те, котоые не являются частью языка

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

                            Кто сходу вспомнит, для чего использовалось слово «static»?
                            Ответить
                            • Это другое дело, когда раньше был один смысл, а теперь другой. Например, auto.
                              Ответить
                              • Хорошо, тогда другой пример:
                                a < b, c > d;

                                Это могут быть два сравнения (просто так), а может быть объявление переменной d шаблонного типа a<b,c>.
                                Ответить
                                • Как эту питушню разруливает парсер и подобная питушня?
                                  Ответить
                                  • Элементарно: если «a» — это имя типа, то парсим как шаблон, если «a» — переменная, то парсим как сравнения. Ну или какими-то другими эвристиками в этом духе.
                                    https://gcc.godbolt.org/z/6K6CVV
                                    Ответить
                                  • Для этого во время парсинга нужна инфа о типах. Скорее всего в конпеляторах проверка типов смешана с этапом синтаксичского разбора.

                                    То ли дело жс, там даже на этапе лексического аналолиза нужно знать в каком месте выражения мы находимся: "/" обозначает деление, начало регулярного выражения, или надо посмотреть вперёд на проверку наличия "*" или "/", чтобы узнать что это коммент?
                                    Ответить
                                    • > даже на этапе лексического аналолиза нужно знать в каком месте выражения мы находимся
                                      Какой багор )))
                                      Но это хотя бы КС-питух должен склевать.
                                      Ответить
                                • Так а что ты хочешь мне сказать? Что это адекватно, сначала сделать контекстно-зависимую грамматику, а потом ещё сверху полирнуть эмуляцией некоторых случаев?
                                  Ответить
                                  • Нет, конечно. Я против такой контекстной зависимости, потому что даже самому свой код тяжело разбирать.

                                    Я хочу сказать, что для C++ такое положение вещей — норма.
                                    Ответить
            • Что с «Говнокодом»? Почему тут всегда тихо по утрам, один я кукарекаю?
              Ответить
              • Ты — петух, тебе по статусу положено по утрам кукарекать.
                Ответить
              • Ты бы ещё в 7 утра написал. Хотя дальневосточные и сибирские петухи должны были уже давно встать.
                Ответить
                    • Июнь, световой день длинный. В 4 часа утра просыпаются воробьи и начинают кормить своих детёнышей. Ещё удивляются, фигли лысые обезьяны спят.
                      Ответить
                  • Ты не на бутылке случайно сидишь?
                    Вспоминается старый дальневосточный баян:

                    > Я не пью, не курю! Не шляюсь по бабам, ложусь в 22−00, встаю в 6−00. Тихий, спокойный, послушный. Но, когда я выйду из тюрьмы, всё изменится.
                    Ответить
    • Я ещё понимаю, нафига Эппл сделали похожее в Свифте: чтобы иметь костыль на случай, если в обжективсишных фреймворках вдруг найдутся названия переменных, типов или функций, эквивалентные свифтовым ключевым словам.

      Но нафига это Котлину?
      Ответить
      • Чтобы писать в названии текста (сиречь в имени фунгкции) предложение как в BDD в Ruby или в Mocha в JS
        Ответить
          • Ну Mocha вполне себе может тестировать и без BDD.

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

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

                Далее, вам нужно во-первых понять, что понимание требований у вас общее (см "specification by example" и "Bridging the communication gap").
                Во-вторых вам нужно составить сценарии для тестирования этого говна, иначе как вам убедиться, что всё верно работает?

                Хорошие требования всегда содержат примеры использования системы.

                Вы разрабатываете сценарии:

                * Пользователь входит в систему
                * Если он из Тимбукту, то его надо поздравить с днем независимости.
                * Пользователь кладет в корзину ветчину
                * Если он мусульманин, а ветчина из свиньи, то она автоматически удаляется.
                * Если он иудей, а ветчина из свиньи, то она автоматически удаляется и отправляется письмо раввину
                * Если сегодня пасмурно, то стоимость доставки умножается на 1.12.

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

                Пусть "E1" -- страна EC. "E2" -- наличие в ней Евро. "J1" -- признак, что пользователь юрлицо.
                E1|E2|J1|N|
                0  0  0  1.1
                0  1  0  1.4
                0  1  1  1.5
                1  0  0  0.71


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

                То-есть BDD нужно только если:
                * У вас есть выделенный бизнес-аналитик
                * У вас действительно очень сложная и запутанная логика, и её много
                * И, вероятно, несколько клиентов.

                Реальный пример я видел в компании, которая писала софт для биржи. Там логика высчитывания всех этих опционов и прочей хуйни могла реально занимать кучу страниц
                Ответить
                • Да в общем я так и написал: смысл BDD в том, что человек-не-программист может писать спецификации на каком-нибудь кукумбере. Просто я думал, что такой хернёй никто не страдает, но, раз ты видел в дикой природе, то значит я неправ.
                  Ответить

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8