1. C++ / Говнокод #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, 21 Мая 2020

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

    • I Cast A Spell on You.mp3
      Ответить
    • Где здесь C++ шаблоны, Psionic?!
      Ответить
      • показать все, что скрытоvanished
        Ответить
      • В одной строке вижу 3 использования шаблонов.
        Ответить
        • reinterpret_cast рази шоблон?
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • Я думал, это конструкция языка такая..
              Ответить
              • Да, *_cast — это не шаблон, это коньструкция крестов.
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • Шаблон. Но не шаблоны!
                    Ответить
                    • а вот не факт
                      https://www.reddit.com/r/rust/comments/5penft/parallelizing_enjarify_in_go_and_rust/dcsgk7n/
                      Ответить
                      • they're characters from the Canadian Aboriginal Syllabics block

                        Oh my god
                        Ответить
                        • Так ведь можно сделать на любом языке программирования, который поддерживает Unicode в идентификаторах:
                          <?php
                          define('ImmutableTreeListᐸElementTᐳ', 'Кукареку');
                          
                          echo ImmutableTreeListᐸElementTᐳ;
                          echo PHP_EOL;

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

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

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

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

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

                              Если Unicode в идентификаторах поддерживается, то из этих символов можно составить идентификаторы, напоминающие фрагменты кода на других ЯП.
                              Ответить
                              • показать все, что скрытоvanished
                                Ответить
                                • <?php
                                   
                                  define('int main(){printf("Hello, world\n");}', 'Hello, world');
                                   
                                  echo
                                   
                                  int main(){printf("Hello, world\n");}
                                   
                                  ;


                                  https://ideone.com/jehRyq
                                  Ответить
                              • (+/%#)
                                Ответить
                              • #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 в первом куайне на эту хуйню.
                                        Ответить
                                  • показать все, что скрытоvanished
                                    Ответить
                          • плюсы, питон, ди не разрешают короткий пробел в идентификаторах
                            Ответить
                      • как же без шаблонов извращаются с внешней кодогенерацией
                        Ответить
                        • Шаблоны, кодогенерация какая-то... Мы в джаве просто пишем одно и тоже руками семь раз и не жужжим.

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

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

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

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

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

                                  Зато в
                                  {} + "foo"

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

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

                                      Это, конечно, касается языков типа JS
                                      Ответить
                                      • Игры с JS мне напоминают игры с микрокалькуляторами.

                                        https://ru.wikipedia.org/wiki/Еггогология
                                        Ответить
                                        • >еггог
                                          была в децтве книжка
                                          http://xn--b1aph9d.xn--p1ai/biblioteka/cartochki/0021.htm
                                          ?
                                          Ответить
                                        • вот и про еггог
                                          http://эквм.рф/biblioteka/jurnal/klip/error.djvu
                                          Ответить
                                          • Игра «Автогонки» в качестве руля использует переключатель «градусы-радианы-грады». Программа считает косинус константы (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
                                                    Ответить
                                                    • Интересно. В одних местах пишут, что нужно считать синус (перепад высоты делить на пробег по дороге), в других местах пишут, что считать нужно тангенс (перепад высоты делить на расстояние на карте между точками).

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

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

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

                                                          Насколько я помню, в США нет державной мовы. Это значит, что писать там что-то словами - неудачная идея.
                                                          Ответить
                                                      • Или что мешало не синусы и тангенсы считать, а просто разделить изменение высоты на длину участка?
                                                        Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • Ты путаешь понятия. Вызов функции (любой) — это коньструкция крестов, но это (очевидно) не «шаблон».
                    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)
                    Ответить
            • Что со Слонимом?
              Ответить
    • Поясните, что це за говно ?
      Ответить
    • гавно шаблон - концептов нет
      Ответить
      • Ты файка нидлеса? Скажи что-нибудь по нидлесски.
        Ответить
    • чота ржу
      https://youtrack.jetbrains.com/issue/KT-17438
      Ответить
      • Я ещё понимаю, нафига Эппл сделали похожее в Свифте: чтобы иметь костыль на случай, если в обжективсишных фреймворках вдруг найдутся названия переменных, типов или функций, эквивалентные свифтовым ключевым словам.

        Но нафига это Котлину?
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • Но ведь BDD не нужен
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • Не всегда и не всем это ситуация, когда ты садишь писать тесты чувака, который вообще не шарит в программировании?

                Щас вроде все автоматизаторы могут тесты на паре языков писать. А эффективный менеджер таким заниматься не будет и в принципе.
                Ответить
                • Нет, это когда бизнес-аналитик выкатывает тебе бизнес-требования на 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 в том, что человек-не-программист может писать спецификации на каком-нибудь кукумбере. Просто я думал, что такой хернёй никто не страдает, но, раз ты видел в дикой природе, то значит я неправ.
                    Ответить

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