1. C++ / Говнокод #24615

    0

    1. 1
    inline constexpr size_t hardware_destructive_interference_size = implementation-defined;

    This number is the minimum recommended offset between two concurrently-accessed objects to avoid
    additional performance degradation due to contention introduced by the implementation.


    Бля, пиздец. Модулей нет, строк нет, а комитет мутит какую-то хуиту космической глупости.

    Запостил: gost, 12 Августа 2018

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

    • А уж математика в стандартной либе C++ - это вообще просто "P‎HP"-стайл. Нахуя в языке общего назначения какие-то, блядь, дзета-функции Римана, цилиндрические функции Бесселя и эллиптические интегралы всех родов и определённостей?
      Ответить
      • Бля, даже в J таких примитивов нет.
        Давайте все писать на J!
        Ответить
      • Ну в новом стандарте они хотя бы называются понятно: std::cyl_bessel_j и т. п. Сразу видно, что это спецфункции.

        А в старой версии библиотеки было j0, j1, jn, y0, y1, yn — что это вообще такое? А если у меня в программе переменные i0, j0, x0, y0, как мне их было отличать от цилиндрических функций Бесселя?
        Ответить
        • > как мне их было отличать
          Юзать неймспейсы?
          Ответить
          • Зачем нужны неймспейсы, когда есть using namespace std;?
            Ответить
      • Несбыточная сишная мечта -- перетянуть учёных с фортрана...
        Ответить
        • А давайте попробуем перечислить, чего из Фортрана не хватает?

          1. Неявные циклы в правой части выражений. Например, следующая строка распечатает весь вектор:
          print *, (VECTOR(i), i = 1, N)

          Почему в няшной тернарный оператор есть, а цикла с аналогичным способом употребления нет?

          2. Возможность подстановки в аргументы функций векторов и матриц вместо скаляров.

          3. Искоробочные операции с комплексными числами, векторами и матрицами. В крестах частично решается перегрузкой операторов.
          Ответить
          • Но J же лутчтше:
            1.
            a =: 2 6 5
               echo a
            2 6 5

            2. Есть
            3. Есть

            На каких сайтах сидят учёные? Может прополоскать им мозги?
            Ответить
          • Определения типа по первой букве переменной.
            Ответить
            • И не только переменной. С функциями такая же фигня. В Фортране ALOG вместо LOG, чтобы результат случайно не оказался целым (I, J, K, L, M, N зарезервированы для целых чисел).

              Кстати, в Quick BASIC можно сделать аналогичное определение типа, если написать DEFINT I-N.
              Ответить
        • Для этого маловато будет запилить кучку функций от плавающего питуха. Для начала было бы неплохо ввести нормальные и эффективные математические вектора, матрицы и длинную арифметику со всеми сопутствующими операциями. И синтаксис адекватный, а не "std::inner_product(a.begin(), a.end(), b.begin(), 0);" для банального скалярного умножения.
          Ответить
          • Поэтому я за "PHP".
            Ответить
            • О, великий гуро ПХП! Роскаже нам как в ПХП выглядет сколярное умнажение викторов.
              Ответить
              • Мне незачем это знать.
                Ответить
              • Вот так:
                <?php
                
                function scalar_product($a, $b) {
                    $tmp = $a;
                    array_walk($tmp, function(&$item, $key) use($b) {$item *= $b[$key];});
                    return array_reduce($tmp, function($sum, $item) {$sum += $item; return $sum;});
                }
                
                $a = Array(1, 2, 3, 4);
                $b = Array(5, 6, 7, 8);
                
                // 5 + 12 + 21 + 32 = 70
                
                echo scalar_product($a, $b);
                echo PHP_EOL;


                https://ideone.com/Pw3pcP
                Ответить
                • Сразу видно, "PHP" - твой не основной язык.
                  Ответить
                  • Но по какому признаку, Холмс? И какой тогда мой основной язык?
                    Ответить
                  • И главный вопрос: как бы написал настоящий пэхапэшник?
                    Ответить
                  • Всё, кажется понял. Тут же передача по значению, а не по ссылке, поэтому временный массив $tmp вводить не нужно. Можно сразу выполнять операции над локальной копией $a. Так будет эффективнее:
                    function scalar_product($a, $b) {
                        array_walk($a, function(&$item, $key) use($b) {$item *= $b[$key];});
                        return array_reduce($a, function($sum, $item) {$sum += $item; return $sum;});
                    }
                    Ответить
                    • И ещё можно сэкономить немножко памяти, если второй массив принять по ссылке:
                      function scalar_product($a, &$b)
                      Ответить
                      • И ещё нужно убедиться, что count($a) == count($b), иначе произведение не имеет смысла.
                        Ответить
                • Я опять с J:
                  a =: 1 2 3 4
                     b =: 5 6 7 8
                     a (+/@:*) b
                  70
                  Почему в мейнстримовые ЯПы не завозят векторные операции? Их даже машкод завозят.
                  Ответить
                  • То ли дело "Python":
                    >>> sum(x * y for x, y in zip([1, 2, 3, 4], [5, 6, 7, 8]))
                    70
                    Ответить
                  • То ли дело "K":
                    +/1 3 -5 * 4 -2 -1
                    3
                    Ответить
                  • То ли дело "Maxima":
                    [1, 3, -5] . [4, -2, -1];
                    /* 3 */
                    Ответить
                  • То ли дело "R":
                    print(c(1, 2, 3, 4) %*% c(5, 6, 7, 8))
                         [,1]
                    [1,]   70
                    Ответить
                  • То ли дело "C++":
                    #include <valarray>
                    #include <iostream>
                     
                    int main()
                    {
                        std::valarray<double> xs = {1, 2, 3, 4};
                        std::valarray<double> ys = {5, 6, 7, 8};
                    
                        std::cout << (xs * ys).sum() << std::endl';
                    }
                    
                    // 70
                    Ответить
                    • > endl'

                      Требую добавления endr в стандарт жаль что только хачкелисты поймут эту щютку https://wiki.haskell.org/Foldr_Foldl_Foldl'
                      Ответить
                    • Переведи на "B". Я не обязан знать перегруженные всякой хуетой языки.
                      Ответить
                    • Переведи на "B". Я не обязан знать перегруженные всякой хуетой языки.
                      Ответить
                    • (xs * ys)

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

                      std::cout <<

                      Тот частый случай, когда перегрузка выглядит как говно.
                      Ответить
                      • Почему? Типа стрелочка куда писать. Я бы ещё добавил govno >> cout в стондарт.
                        Ответить
                        • Было бы хорошо, если бы << в "C++" больше ни для чего не использовалось бы.

                          std::cout << 1 << 2;

                          Что выведет этот пример: 1, а за ней 2 или (1<<2), что равно 4?
                          Ответить
                        • В грувях кажется апиратор левова сдивига перегружен у некоторы каллекций и приводит к добавлению в них.

                          Например
                          petushki << stertor

                          std::vector так мо?
                          Ответить
                          • QVector в Qt так может.
                            Ответить
                            • Самое неожиданное использовние "<<" я видел в Ruby: там он открывает мета(eigenclass, singleton)класс. Кто любит наркотики -- можете про это почитать
                              Ответить
                            • Это для быстрого создания массивов: createFamily(QVector<QString>() << "cock" << "hen" << "chicken");
                              Типа fluent interface (или как его).
                              Ответить
                          • любители пощекотать очко могут написать глобальный оператор << , а обмазавшись метушнёй даже вызвать либо push_back, либо insert, либо даже шлюх в зависимости от того, че найдется в контейнере-принимателе
                            Ответить
                        • Мне ещё не нравится в крестах, что можно перегружать только те значки, которые для чего-то используются в Plain C. Новые значки (которые ни для чего не задействованы) добавлять нельзя. Значки `@#$ простаивают без дела. А ещё комбинации из значков... А ещё юникодные символы...

                          А ещё не нравится, что у || и && после перегрузки пропадает ленивость.
                          Ответить
                          • Есть реальные примеры использования && ||, где не хочется, чтобы потерялась ленивость?
                            Ответить
                          • Действительно, чегоб не разрешить любому символову юникода (pile of poo, например) быть оператором?
                            Ответить
                          • То ли дело "R":

                            `%@#$%` = function(a, b) a + b
                            
                            print(5 %@#$% 6);
                            Ответить
                            • Не удивлюсь, если узнаю, что в R можно грабить корованы.

                              Там даже два оператора присвоения: влево и вправо.
                              b*b - 4*a*c -> D
                              x <- (-b + sqrt(D))/(2*a)
                              Ответить
                            • То ли дело "Coq" c миксфиксной нотацией.
                              Ответить
      • Кстати, а π до сих пор не завезли в стандарт?
        Ответить
        • Так завезли же, M_PI называется. Только синус из этого π почему-то равен не 0 а какому-то 1.22465e-16
          https://wandbox.org/permlink/GtdcPJVHpzVmw2MG
          А вот чтоб ровно 0 получался, для этого в стандарт надо завести систему символьных вычислений. И еще чтоб в компилтайме считало.
          Ответить
          • В каком стандарте крестов/няшной можно прочитать про _USE_MATH_DEFINES и M_PI?
            Ответить
            • http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/math.h.html вот тут есть.
              Но да, это не совсем стандарт си или плюсов
              Ответить
              • Ну вот о чём я и говорю — шёл 2018 год, в кресты всякой узкоспециализированной хуйни понатащили, а банального π не завезли.
                Ответить
                • Ну, можно надеяться, что boost::math::constants::pi<T>() перекочует в стандартную библиотеку. Когда-нибудь.
                  Ответить
                • http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0631r1.pdf ну вон какие-то пропозалы пишут

                  Может у крестометушков на этот счет какие-то мегаграндиозные планы? Ну вот напимер задефайним мы pi, pi/2, 1/pi и еще сколько-то там подобной хрени с максимальной доступной для double-представления точностью, а кто-то например захочет себе константу sqrt(pi + e)/(pi^2) - и тут уже никак - только иди сам считай и дефайнь. А вот если на каких-нибудь шаблонах-констэкспрах наметушить говна с символьными вычислениями и арифметикой с произвольной точностью, которое б любую парашу максимально точно могло представить в какой-то там дабл или флоат или определенный программистом принципиально новый способ представления действительных чисел - вот это уже другое дело
                  Ответить
                • А чем четыре арктангенса единицы не нравится?
                  Ответить
                • То ли дело J:
                  4j2    NB. комплексное число (4 + 2j)
                  4j2
                     4p2    NB. 4 * π²
                  39.4784
                     1p_1   NB. 1/π
                  0.31831
                     4x2    NB. 4 * e²
                  29.5562
                     1p1b11 NB. число 11 в системе счисления с основанием π
                  4.14159
                     16bff  NB. 16-чное число
                  255
                     2r3    NB. рациональная дробяша
                  2r3
                     1r2p1  NB. 1/2 * π
                  1.5708
                     1p1r2  NB. π ^ 1/2
                  1.77245
                     2e9    NB. тут думаю всё ясно
                  2000000000
                     1e2p1  NB. 100 * π
                  314.159
                     1p5e_1 NB. π ^ 0.5
                  1.77245
                  Заебись, да?
                  Ответить
            • А ты что, весь стондарт читал? Сколько в нём страниц?
              Ответить
              • А я прочитал полностью ANS Forth 94 (я серьёзно).
                Ответить
                • Ну не сравнивай няшный стандарт форта и крестоблядские фолианты на тысячи листов.
                  Ответить
                  • В "PHP" нет никакого стандарта, ничего читать не надо, и именно потому я за "PHP".
                    Ответить
                    • Как ничего? Ты помнишь, в какой функции поиска подстроки в каком порядке идут иголка и стог сена? Ты помнишь, название какой функции пишется с подчёркиваниями, а какой слитно? Ты помнишь все варианты приведения типа при сравнениях?
                      Ответить
              • Не, далеко не весь... Да и не прочитаю уже, наверное. Последнее время кресты для меня -- просто инструмент для работы. Понадобится какая-то фича -- открою нужный раздел. А в остальном -- да ебись оно конём, есть вещи поинтереснее.
                Ответить
        • Ну, зато можно велосипедить и никто не вправе тебя анально покарать за неиспользование стандатра
          using Pi = std::ratio<355,113>;
          Ответить
    • Это про фолс шаринг?
      Ответить
      • Все обсуждают хуи, пхп и анусы, а на мой вопрос никто не ответил
        Ответить
        • Задай свой вопрос в контексте "PHP", и, возможно, я смогу на него ответить.
          Ответить
          • <?php
            // всё лагает если с $a работает один тред, а с $b другой
            $a = 42;
            $b = 100500;
            
            // а так не лагает т.к. $a и $b находятся на достаточном расстоянии друг от друга
            $a = 42;
            
            
            
            
            
            $b = 100500;
            Вопрос -- как определить, на каком расстоянии надо объявлять переменные чтобы не лагало?
            Ответить
            • Не лагает, т.к. в "PHP" нету тредов. Поэтому я за "PHP".
              Ответить
    • Модули и строки запихните себе в Java, в C++ надо пирформанс.
      Ответить

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