1. Список говнокодов пользователя YpaHeLI_

    Всего: 17

  2. C++ / Говнокод #27423

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    // Приведение численного типа к структуре с битовыми полями
    template <class STRUCT_T, typename T>
    STRUCT_T struct_cast(const T n)
    {
        static_assert(std::is_integral<T>::value, "Integral type required as T");
        static_assert(std::is_class<STRUCT_T>::value, "class or struct type required as STRUCT_T");
        static_assert(sizeof(T) == sizeof(STRUCT_T), "Incompatible types passed");
    
        return *(reinterpret_cast<const STRUCT_T*>(&n));
    }
    
    // Приведение структур с битовыми полями к численному типу
    template <typename T, class STRUCT_T>
    T integral_cast(const STRUCT_T& s)
    {
        static_assert(std::is_integral<T>::value, "Integral type required as T");
        static_assert(std::is_class<STRUCT_T>::value, "class or struct type required as STRUCT_T");
        static_assert(sizeof(T) == sizeof(STRUCT_T), "Incompatible types passed");
    
        return *(reinterpret_cast<const T*>(&s));
    }

    Почему это UB?

    YpaHeLI_, 12 Мая 2021

    Комментарии (4)
  3. Куча / Говнокод #27256

    −1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    Скорость SSD - ~450 мбайт/сек.
    Скорость RAM - ~6000 мбайт/сек.
    
    Так и не пойму тогда, зачем юзать SSD, когда можно поставить много оперативки и минимизировать обращения к свопу, тем самым минимизировать тормознутость системы?
    Я именно про рабочую станцию, ясно что на сервере будет выигрыш.

    YpaHeLI_, 15 Февраля 2021

    Комментарии (254)
  4. Куча / Говнокод #27134

    +2

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    В России предложили перейти на Rust при разработке ПО для «проектов повышенной надёжности».
    
    Языком Rust предлагают ограничить все проекты по разработке ядерного оружия, 
    атомных станций, авиации, электроэнергетики, банковской сферы и т.д. 
    Но не стоит переживать. Если проект примут, то разработчикам дадут 
    от полугода до года, «чтобы успели переучиться». Как говорится, и на том спасибо.
    
    Голосовать, если что, можно тут: https://www.roi.ru/71821/

    YpaHeLI_, 26 Ноября 2020

    Комментарии (34)
  5. JavaScript / Говнокод #27106

    0

    1. 1
    https://tproger.ru/articles/frontend-roadmap-2021/

    Как много надо учить ради того, чтобы клепать красивые формочки.
    Они там совсем ебанулись?

    YpaHeLI_, 12 Ноября 2020

    Комментарии (128)
  6. C++ / Говнокод #27050

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    template <typename T, typename OUT_T = uint8_t> 
    OUT_T subdecoder_nbt::extract_bits(T bits, uint8_t pos, uint8_t end)
    {
        auto invert_bytes = [](T bytes) -> T
        {
            auto *p     = reinterpret_cast<uint8_t*>(&bytes), 
                 *p_end = reinterpret_cast<uint8_t*>(&bytes) + sizeof(bytes) - 1; 
            for(; p < p_end; ++p, --p_end)
            {
                *p = *p ^ *p_end;
                *p_end = *p ^ *p_end;
                *p = *p ^ *p_end;
            }
    
            return bytes;
        };
    
        bits = invert_bytes(bits);
    
        bits <<= pos;
        bits >>= (sizeof(bits) * 8 - (end - pos) - 1);
    
        return (OUT_T)bits;
    }

    Как правильно доставать биты из промежутка из стандартных типов C++ на x86.
    Изучал эту проблему в сумме почти сутки.

    А всё потому, что x86 хранит байты в Little-Endian, из-за чего при сдвиге биты окажутся не там, где ожидаешь.

    YpaHeLI_, 23 Октября 2020

    Комментарии (146)
  7. C++ / Говнокод #27022

    −1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    28. 28
    29. 29
    30. 30
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    struct A
    {
        uint16_t    n;
    
        uint8_t     a1:1;
        uint8_t     a2:1;
        uint8_t     a3:1;
        uint8_t     a4:1;
        uint8_t     a5:4;
    
        uint8_t     b;
    } __attribute__((packed));
    
    int main()
    {
        char v[] = { 0x1, 0x1, 0b01010011, 0x9 };
        A *p = (A*)v;
        
        cout << (uint16_t)p->a1 << endl;
        cout << (uint16_t)p->a2 << endl;
        cout << (uint16_t)p->a3 << endl;
        cout << (uint16_t)p->a4 << endl;
        cout << (uint16_t)p->a5 << endl;
        cout << (uint16_t)p->b << endl;
    }

    http://cpp.sh/6e5myf

    Битовые поля неправильно считываются.

    YpaHeLI_, 12 Октября 2020

    Комментарии (67)
  8. C++ / Говнокод #26958

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    class UnitedFigure : public Figure {
        Figure &f1;
        Figure &f2;
    
    public:
        UnitedFigure (Figure &_f1, Figure &_f2) : f1(_f1), f2(_f2) {}
    
        double distance_to(const Point &p) const override {
            return std::min(f1.distance_to(p), f2.distance_to(p));
        }
    }

    Завезли ссылочные поля класса, это в каком стандарте?
    Даже тестил когда то такое, наверное на C++03 и получал ошибку компилятора.
    Я и не знал, что добавили такую прекрасную возможность выстрелить себе в ногу.

    YpaHeLI_, 16 Сентября 2020

    Комментарии (278)