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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
#include <boost/hana.hpp>
#include <boost/hana/ext/std/tuple.hpp>
#include <cstdint>

namespace hana = boost::hana;
using namespace hana::literals;
using hana::transform, hana::decltype_, hana::to_set, hana::type_c;

auto copy = [](uint8_t * in, uint8_t * out, auto n, auto s) {
  
  n.times.with_index([&](auto x) {
    
    if constexpr(x == s) {
      ++in;
    } else {
      *(uint16_t *)out = *(uint16_t *)in;
      out +=2; in += 2;
    }
    
  });
  
  return in;
};

auto f(uint8_t * in, uint8_t * out) {
    return copy(in, out, 33_c, 15_c);
}

https://habr.com/ru/post/482834/#comment_21094618
> Простая задача, самый базовый вариант https://godbolt.org/z/5F5mt9 — повторите.

Очередные набросы крестоговна на хабр от царя.

Найдите UB.

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

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

  • #include <boost/hana.hpp>
    #include <boost/hana/ext/std/tuple.hpp>
    #include <cstdint>
    
    namespace hana = boost::hana;
    using namespace hana::literals;
    using hana::transform, hana::decltype_, hana::to_set, hana::type_c;
    
    auto copy = [](uint8_t * in, uint8_t * out, auto n, auto s) {
      
      n.times.with_index([&](auto x) {
        
        if constexpr(x == s) {
          ++in;
        } else {
          __builtin_memmove(out, in, sizeof(uint16_t));
          out +=2; in += 2;
        }
        
      });
      
      return in;
    };
    
    auto f(uint8_t * in, uint8_t * out) {
        return copy(in, out, 33_c, 15_c);
    }



    Починил
    Ответить
    • И нахуя тут выебываться со всякими ханами-хуянами? Это тупое примитивное говно, которое я и на гнуси напишу без особых проблем.

      #include <inttypes.h>
      #include <stddef.h>
      
      inline uint8_t * copy(uint8_t * in, uint8_t * out, size_t n, size_t s) __attribute__ ((always_inline));
      
      inline uint8_t * copy(uint8_t * in, uint8_t * out, size_t n, size_t s)
      {
        for(size_t x = 0; x < n; x++)
        {
          if(x == s)
          {
            ++in;
          }
          else
          {
            __builtin_memmove(out, in, sizeof(uint16_t));
            out +=2; in += 2;
          }
        }
        return in;    
      };
      
      uint8_t *f(uint8_t * in, uint8_t * out)
      {
        return copy(in, out, 33, 15);
      }
      Ответить
      • > тупое примитивное говно
        memmove(out, in, s * 2);
        memmove(out + s * 2, in + s * 2 + 1, (n - s) * 2);
        Ответить
          • Ве фингс ароунд ми вер ай си
            Рамайнд ми оф, ве паст анд хау ю аалл юзд то бе...

            Ай клоуз май асз анд си ю фейс.
            Ответить
          • Сколько пирфоманса, питушок? Сколько пирфоманса, анскилечка? Это классика! Это знать надо, если ты учился в шестом училище!
            Ответить
            • Наверное, с 32 или 64 был бы слишком большой пирфоманс.
              Кто этого Царя знает. Он же поехавший совершенно.
              Ответить
            • >> Систему команд постарались сделать максимально ортогональной с разнообразными способами адресации. Ортогональность системы команд означает, что в любой команде может использоваться любой способ адресации операнда: константа, прямой из регистра или памяти, косвенный и т. п.

              Круто.
              Ответить
              • Именно поэтому я против «x86». Там вообще дрисня полная со способами адресации.
                Ответить
            • >> Ключевым отличием и «визитной карточкой» семейства MSP430 является возможность тактировать любой модуль периферии асинхронно от ядра.

              Интересно.
              Ответить
                                • Дедовское средство для увеличения стека до 10см без смс и регистрации. Удиви своих партнёров, узнай рецепт сейчас. >>> Читать далее <<<
                                  Ответить
                                  • У меня дежавю. Мне кажется, что что-то подобное я уже видел на «Говнокоде».
                                    Ответить
                                  • Дедовское средство для ловли карася, с которым улов увеличивается в 3-5 раз
                                    17 сентября 2018
                                    17 тыс. дочитываний
                                    1,5 мин.
                                    20 тыс. просмотров. Уникальные посетители страницы.
                                    17 тыс. дочитываний, 84%. Пользователи, дочитавшие до конца.
                                    1,5 мин. Среднее время дочитывания публикации.

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

                                    Есть хитрое аптечное средство, о котором многие догадывались и все почти знают, но на практике пока еще не использовали. К тому же с таким средством рыбалка становится совсем не затратной. Пузырек стоит всего-то 20-30 рублей!

                                    А что это за средство? - Валерьянка - капли валерьяны, которые есть в каждой аптеке!

                                    Старое Дедовское средство для ловли карася, с которым улов увеличивается в 3-5 раз. Валерьянка на карасиков
                                    Ответить
                                    • Накапать валерьянки коту, и, пока кот в трансе, отправить его ловить карасиков?
                                      Ответить
                                      • Можно ловить сомов, окуней, щук на живца. В отличие от женщин, рыбы твой вялый червячок оценят.
                                        Ответить
                                    • Почитай своим детям на ночь "Дорожное происшествие Сорокина".
                                      После того, как они отшлёпают тебя книжкой по башке, вся дурь улетчится.
                                      Ответить
                  • Я малость беспокоюсь за ваш инженерный отдел. Сначала более-менее нормальные посты, потом чуток старик вореций побежало местами. Алгоритмизация навела поле раскола индивида на протокольные субличности. Стандартизация субличностей образовала инжерный отдел. Инжерный отдел поехал к сиплюсу. Сиплюс поехал к инжерному отделу. Стандартизация преобразовала UB в гетерогенную психозу полного спектра. У зрителей волнуется вопрос о химическом здоровье госта.
                    Ответить
                        • Зато стильно, модно, молодёжно. А на «Перле» даже старые пердуны перестали писать.
                          Ответить
                          • В букинг ком на перле пишут даже молодые пердуны, а пых был молодежным в 2004-м году, вместе с другой дрянью
                            Ответить
                    • Всё в порядке. Наш инженерный отдел временно переквалифицировался в рыболовный и ловит щук.
                      Кстати, щука одной из первых пресноводных рыб отправляется на нерест. Брачный сезон начинается при температуре воды 3-5°C. Обычно икромет происходит в марте, но при изменении температурного режима может затянуться или ускориться. Нерестилище находится на отмелях, в зарослях камыша, осоки, кустов. Глубина не превышает 2 м. Около одной самки обычно следует несколько самцов. Для икромета рыба активно использует любые предметы, о которые можно потереться. Период размножения может длиться от 2 до 4 недель. Во время паводка часто гибнет много щучьего потомства.
                      Ответить
        • Ты аву макаки поставь, страйкир тебя сразу сотрёт.
          Ответить
  • > Пошло забалтывание, пошел уход с темы. Главное переключить внимание наблюдателя. Всё равно мало кто знает — что такое УБ, где УБ и прочее. Очевидно, ещё меньше кол-во людей знают, что УБ ничего не значат.

    soooooqaaaa
    Ответить
    • >что такое УБ, где УБ и прочее. Очевидно, ещё меньше кол-во людей знают, что УБ ничего не значат.
      Поддерживаю. Я просто пишу на js и в душе не ебу что такое УБ
      Ответить
        • В JS это ответы на философские и риторические вопросы вроде "что будет, если отсортировать элементы с одинаковым значением?".
          В C/C++ это ответы на вопрос "что будет, если программист не выучил все случаи из толстенного стандарта и их хитрые комбинации?". Если банальная работа с union, где нет никаких неоднозначностей, вызывает UB, то о чём тут говорить.

          В JS значение будет разное в разных интерпретаторах, но будет относиться к теме, а вычисления пойдут дальше в штатном режиме.
          В C/C++ программу распидорасит и дальше её можно только выкинуть.

          Думаю, разница ясна.
          Ответить
    • Пошло забалтывание, пошел уход с темы. Главное переключить внимание наблюдателя. Всё равно мало кто знает — что такое УБ, где УБ и прочее. Очевидно, ещё меньше кол-во людей знают, что УБ ничего не значат. Впрочем, есть крайне информированные люди, которые догадываются — УБ это Управление Баттхертом. Причём внедрение осуществляется без помощи технических средств. Правда, против этого возразить трудно. УБ — это не просто УБ. Это целое системное операционное пространство, полное технических ловушек и вывернутых наизнанку говнокодовых стратегий. Чтобы выяснить, что такое УБ, нужно попробовать придумать такую векторную операционную систему виртуальных чипов, которая бы мыслила не самыми абстрактными категориями и могла наделить УБ человеческими характеристиками. Если получится, такие системы не будут создаваться вообще. А чтобы создать такую программу, нужна программа-ускоритель.
      Ответить
  • >> char, signed char и unsigned char — три разных типа, и алиасить может только первый.

    А тут, как мне кажется, заблуждается оппонент царя. char — это эквивалент либо signed char, либо unsigned char, в зависимости от настроек компилятора. Аналогично, int, long int, long long int — это эквиваленты signed int, signed long int, signed long long int соответственно (всегда). Не бывает просто типов без signed/unsigned.
    Ответить
    • Но сама исходная цитата:
      >> char, signed char и unsigned char — три разных типа, и алиасить может только первый.

      Не вполне верна. См. https://stackoverflow.com/a/40575162

      Хотя может в крестоговне какие-то свои правила на сей счет, хуй их знает
      Ответить
    • «C++»:
      Type char is a distinct type that has an implementation-defined choice of “signed char” or “unsigned
      char” as its underlying type. The values of type char can represent distinct codes for all members of
      the implementation’s basic character set. The three types char, signed char, and unsigned char are
      collectively called ordinary character types. The ordinary character types and char8_t are collectively called
      narrow character types. For narrow character types, each possible bit pattern of the object representation
      represents a distinct value.
      § 6.8.1, 7

      «C»:
      An object declared as type char is large enough to store any member of the basic execution character
      set. If a member of the basic execution character set is stored in a char object, its value is guaranteed
      to be nonnegative. If any other character is stored in a char object, the resulting value is implementation-
      defined but shall be within the range of values that can be represented in that type.
      § 6.2.5, 3

      The three types char, signed char, and unsigned char are collectively called the character types.
      The implementation shall define char to have the same range, representation, and behavior as either
      signed char or unsigned char.47)
      § 6.2.5, 15

      47)CHAR_MIN, defined in <limits.h>, will have one of the values 0 or SCHAR_MIN, and this can be used to distinguish the
      two options. Irrespective of the choice made, char is a separate type from the other two and is not compatible with either.
      § 6.2.5, сноска 47
      Ответить
      • Гамон.

        В «Паскале», хоть и система названий типов непоследовательна (слишком много названий без префиксов типа word, которые приходится запоминать), существует чёткое разделение типов по предназначению:
        • char предназначен только для хранения одного символа (неюникодовского, из местной кодировки);
        • byte предназначен только для хранения беззнакового числа, которое помещается в один байт;
        • shortint предназначен только для хранения знакового числа, которое помещается в один байт.

        В сишке же char по историческим причинам может хранить и символ, и число. Причём, когда он хранит число, по факту он играет роль либо signed char, либо unsigned char (implementation defined; у некоторых компиляторов есть ключик для выбора signed либо unsigned). Однако, из соображений осторожности char не рискнули отождествить ни с signed char, ни с unsigned char. Создали кота Шрёдингера.

        Я не понимаю, как «its value is guaranteed to be nonnegative» сочетается с «either signed char or unsigned char».
        Ответить
        • > Я не понимаю, как «its value is guaranteed to be nonnegative» сочетается с «either signed char or unsigned char».
          Это когда в нём хранится «member of the basic execution character set».
          The basic source character set consists of 96 characters: the space character, the control characters representing
          horizontal tab, vertical tab, form feed, and new-line, plus the following 91 graphical characters:
          a b c d e f g h i j k l m n o p q r s t u v w x y z
          A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
          0 1 2 3 4 5 6 7 8 9
          _ { } [ ] # ( ) < > % : ; . ? * + - / ^ & | ~ ! = , \ " ’

          The basic execution character set and the basic execution wide-character set shall each contain all the
          members of the basic source character set, plus control characters representing alert, backspace, and carriage
          return, plus a null character (respectively, null wide character), whose value is 0. [...]
          § 5.3/1, 3
          Ответить
          • Ну то есть если хранится семибитный символ, то, добавив один бит, его можно поместить как в знаковую, так и в беззнаковую обёртку.

            Значит, не гарантируется интерпретация значений за пределами «basic execution character set»?
            Ответить
            • То есть гарантируется, что все символы из «BECS», помещённые в char, будут представлены неотрицательными числами. А насчёт остальных уже сказать ничего нельзя.

              Что ты имеешь в виду под «интерпретацией значений»?
              Ответить
              • > Что ты имеешь в виду под «интерпретацией значений»?
                Думаю, новпитух пишет про случай, когда ты делаешь scanf("%c", &kokoko); printf("%c", kokoko), пользователь вводит "я", и у тебя либо выводится "я" (значение интерпретировалось как надо), либо программа форматирует диск (не интерпретировалось, случилось UB)
                Ответить
                • Судя по «For narrow character types, each possible bit pattern of the object representation represents a distinct value» — диск не отформатируется. Но вот что такое «character» — я в Стандарте так и не раскопал, только вот такой багор:
                  basic_ostream<charT, traits>& put(char_type c);
                  2 Effects: Behaves as an unformatted output function (as described above). After constructing a sentry
                  object, inserts the character c, if possible.
                  3 Otherwise, calls setstate(badbit) (which may throw ios_base::failure (29.5.5.4)).
                  § 29.7.5.3/2,3
                  А когда оно не «possible» — хуй знает.
                  Ответить
          • >> horizontal tab, vertical tab, form feed, and new-line

            Я vertical tab и form feed видел только в документах, предназначенных для печати на матричном принтере.

            Этими символами сейчас хоть кто-нибудь пользуется?
            Ответить
  • Хватит забивать голову этими богомерзкими закорючками. Несмотря на то, что я в It уже восьмой год, я не видел за это время ни одной проги на сях.
    Ответить
    • Действительно, я за 5 лет не видел ни одного полезного кода, написанного не на JS.
      Ответить
        • Потому что меня заебали уёбки в лице guestinxo и guest8. Допили свою тупую игнорилку чтоб скрывала ответы "уёбкам" и отъебись.
          Ответить
          • > Допили свою тупую игнорилку чтоб скрывала ответы "уёбкам" и отъебись.
            Теория guestinxo состоит в том, что если стерторов полностью игнорировать всем сайтом — стерторы выведутся. Именно поэтому он против «ответов уёбкам».
            Ответить
            • У меня ворота в гараж подпирает собачья будка. Чтобы заехать/выехать нужно загнать собаку в домик, и открыть ворота, подперев ей выход. Собака в любой момент может открыть и ударить, в.т.ч. по произжающей в этот момент машине. Я мог бы завязать веревкой, чтобы это предотвратить, но этого не делаю. Понимаешь о чём я?
              Ответить
      • В чём тогда смысл "constexpr", питушок? Не с т.з. автора кода, а компилятора.
        Ответить
    • «In a constexpr if statement, the value of condition must be a contextually converted constant expression of type bool. If the value is true, then statement-false is discarded (if present), otherwise, statement-true is discarded.»
      Ответить
      • Ничего не понял, я анскильный. Я думал в скобках можно писать только компайлтайм вычислимые выражения.
        Ответить
            • «x», «n» и «s» — это не инты, а какое-то бустовое говно (отнаследованное от «std::integral_constant»), которое конпелятор вычисляет в компайл-тайме.
              Ответить
              • > auto n, auto s, auto x

                Чиво? Я вижу это как параметры функции. Какая разница какого они типа?
                Ответить
                • А, кажется начинает доходить. Весь "цикл" "n.times" - это всё компайлтайм параша?
                  Ответить
                  • Да, n.times(f) в компайл-тайме раскрывается в n вызовов f. Прямо как в #26274, только на «Буст».
                    Ответить
  • >constexpr(x == s)
    чему будет равен x и s в момент коупуляции?
    Ответить
    • Как я понял, s = 15, а x переберётся (в компайлтайме) от от 0 до 32 (но это не инты, а шаблоноговно над ними).
      Ответить

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

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

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


    8