1. Куча / Говнокод #29178

    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
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    pub trait Normalize<T> {
        type Output;
        fn normalize(&self, baseline_value: &T) -> Self::Output;
        fn denormalize(&self, baseline_value: &T) -> Self::Output;
    }
    
    impl<T, U, W> Normalize<T> for U
    where
        T: Copy,
        U: Copy + Div<T, Output = W> + Mul<T, Output = W>,
    {
        type Output = W;
        fn normalize(&self, baseline_value: &T) -> Self::Output { *self / *baseline_value }
        fn denormalize(&self, baseline_value: &T) -> Self::Output { *self * *baseline_value }
    }
    
    impl<T> Normalize<CanvasSize<T>> for Rectangle
    where
        T: Copy,
        f32: Normalize<T, Output = f32>
    {
        type Output = Rectangle;
    
        fn normalize(&self, baseline_value: &CanvasSize<T>) -> Self::Output {
            Rectangle {
                x1: self.x1.normalize(&baseline_value.width),
                y1: self.y1.normalize(&baseline_value.height),
                x2: self.x2.normalize(&baseline_value.width),
                y2: self.y2.normalize(&baseline_value.height),
            }
        }
        fn denormalize(&self, baseline_value: &CanvasSize<T>) -> Self::Output {
            Rectangle {
                x1: self.x1.denormalize(&baseline_value.width),
                y1: self.y1.denormalize(&baseline_value.height),
                x2: self.x2.denormalize(&baseline_value.width),
                y2: self.y2.denormalize(&baseline_value.height),
            }
        }
    }

    Запостил: ISO, 13 Сентября 2025

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

    • Когда вечером пятницы кодируешь в потоке и, чувствуя себя словно в горячке, понимаешь, что выдаёшь полнейшую бредятину, но уже не можешь остановиться, с некоторым клиническим любопытством желая узнать, чем же это закончится.
      Ответить
      • На два пакета целая пятница уходит. Зато потом, после трудового дня
        Ответить
      • Проще было попросить погаллюцинировать Copilot какой-нибудь
        Ответить
    • питураст
      Ответить
    • Вижу какую-то логику в строках 10, 13 и 14, всё остальное — клей. Какие интерпрайзные решения )))
      Ответить
      • Да и то в 10, насколько я понял, выведение типа: выбирается тип, который разработан настолько, что способен вместить результат умножения и деления.
        Ответить
      • строка 10 это не логика, а ограничение на принимаемый тип U
        Ответить
    • > type Output;

      А почему это не часть дженерика?
      Ответить
      • Это так называемый «associated type», и он нужен тогда, когда предполагается, что для каждой реализации трейта должен иметься только одно конкретное значение associated type'а.
        Например, для (условного) трейта Iterator<TCollection> тип Output должен являться типом значений, хранящихся в TCollection. Нет смысла делать Iterator<TCollection, Output>: этим мы бы показали, что у нас для каждой коллекции может быть неограниченное количество разных итераторов, различающихся только выходным значением.

        См.: https://doc.rust-lang.org/book/ch20-02-advanced-traits.html#associated-types для менее запутанного объяснения.
        Ответить
        • Немного хуйню написал: (условный) трейт Iterator вообще не должен быть дженериком. Он просто должен быть имплементирован для конкретных типов коллекций.
          Ответить
        • То есть это условно Normalize<T, U> where T: Collection, U == T.Item ?
          Ответить
          • В некотором смыле можно и так сказать, но guest6 ниже более понятно объяснил. Об associated type'е можно думать просто как об элементе, который реализация трейта должна «имплементировать» вместе с функциями, объявленными в трейте.
            Ответить
      • Дженерик является публичной частью трейта, и позволяет реализовать много трейтов с разными типами, а ассоциирвоанный тип -- нет. Чтобы это понять, надо увидеть, что в расте трейты реализуются не в описании класса (структуры) а отдельно.
        struct RustCode;
        struct JavaCode;
        
        trait CompilerAsGeneric<Code> {
            fn compile(&self, code: Code);
        }
        
        
        
        impl CompilerAsGeneric<RustCode> for RustCode {
            fn compile(&self, code: RustCode) {
                todo!()
            }
        }
        // что бля???
        impl CompilerAsGeneric<JavaCode> for RustCode {
            fn compile(&self, code: JavaCode) {
                todo!()
            }
        }

        видишь проблему?
        Я могу два раза его реализовать.

        А если так
        trait CompilerAssocType {
            type Code;
            fn compile(&self, code: Self::Code);
        }
        struct JavaCode;
        
        impl CompilerAssocType for RustCode {
            type Code = RustCode;
        
            fn compile(&self, code: RustCode) {
                todo!()
            }
        }
        // Не скомпилируется, бо один раз уже реализовали
        impl CompilerAssocType for RustCode {
            type Code = JavaCode;
        
            fn compile(&self, code: RustCode) {
                todo!()
            }
        }
        Ответить
        • Ясно, в Свифте точно так же и это пососно
          Ответить
    • А может действительно запилить mailing list?
      Чтобы можно было писать «Desktop YOU SHUT THE FUCK UP JAVASCRIPTS SAVED MILLIONS OF JEWS!»
      Ответить
      • JEWASCRIPT
        Ответить
      • Я вот возмущен тем, что точка с запятой у PHP называется на иврите: T_PAAMAYIM_NEKUDOTAYIM

        В то время, когда Нетаньяху проводит геноцид, они используют иврит!

        Я начинаю компанию по полному бойкоту PHP. Присоединяйтесь!
        Быть ПХП программистом должно быть стыдно!!
        Ответить
        • А ты жид? Нужен жид, чтобы пояснил, как они запяточие называют. У меня тут какие-то разночтения, то nekuda, то psikot, то большие конструкции типа твоего множественного числа
          Ответить
          • У меня шаббат, извини.

            так вот, T_PAAMAYIM_NEKUDOTAYIM это "::" оказывается, а не двоеточие


            &gt;The T_PAAMAYIM_NEKUDOTAYIM token first appeared in version 0.5 of the Zend Engine, which powered PHP 3, and which was developed in Israel.

            &gt;This continues to remind us of the major contribution the Israeli community has brought to PHP by laying its modern foundation.



            https://wiki.php.net/rfc/rename-double-colon-token
            Ответить
            • О, я ещё успею спросить на Кворе, что пишут в талмуде про гоев.
              Ответить
            • Израиль изобрел PHP.
              А Палестина нет.

              Вы еще спрашиваете, почему я за Палестину?
              Ответить
              • Вход открыт: Любой человек (еврей или нет) может прийти в синагогу на молитву в Шаббат. Это приветствуется.
                · Бесплатно: Поскольку деньги запрещены, за вход платить не нужно. Все мероприятия бесплатны.

                Балабоба ещё утверждает, что подадут полдник, а потом пригласят обедать
                Ответить
                • Формально синагога — это изба-читальня, а не храм, поскольку у иудеев храм существует в единственном экземпляре (в настоящий момент временно не работает).

                  Пускают ли туда иноверцев и атеистов, не проверял.
                  Ответить
                  • Кстати , почему они не могут построить новый храм? потому что храм может только Б-г построить?
                    Ответить
                    • Так место уже занято под центр мировой торговли
                      Ответить
            • Ты понимаешь, что если бы два еврея не придумали PHP3 с ООП, то про PHP все бы давно забыли? Творение Расмуса Лердорфа изначально было чисто шаблонизатором безо всякого ООП, что-то вроде улучшенного SSI, на нём писать большие проекты было невозможно.

              Так что «PHP» своей популярностью обязан (((Гутмансу))) и (((Сураски))).
              Ответить
        • Не точку с запятой, а двойное двоеточие.

          ::
          Ответить
          • Авторы ПХП старались выбрать максимально вербозный способ написания кода, потому что они обезьяны.

            Двойное двоеточие можно заменить на точку (как сделано в куче ЯП) но точка короче

            "-&gt;" тоже можно заменить на точку (как сделано в куче ЯП) то точка корочке

            "new" не нужен, его можно убрать (как сделано в куче ЯП) но без new короче


            "$" не нужен,. но вы поняли, да?
            Ответить
            • Да, избыточность.

              -> имеет смысл в крестах, ибо там есть разыменование указателей, «new» тоже имеет смысл во «взрослых» ЯП, где есть несколько способов инстанцирования.

              Доллар имеет смысл в шелле, ибо там это макроподстановка. Ну и в Перле, потому что в Перле нужно указывать тип контекста. В «PHP» же на ровном месте создали раздельные неймспейсы для переменных и функций, зато можно написать function f($f), и никакого затенения не будет.
              Ответить
            • Why is the source code compiled?

              Since we are in 2020s, this question should not be asked by a web developer. If you have employed such a guy, trust me, he/she should be fired.

              We are using many lovely features in our project, some from ESNext, and some are popular in development but not supported natively by any browser. So we compile those parts to legacy JavaScript code to make the extension work for more browsers.

              For example, we build UI in Violentmonkey with Vue.js, a popular framework good at building complexed UIs. It depends on quite a few custom annotations which need to be transformed to vanilla JavaScript and CSS so that the browser can understand.

              There are also some constants injected at compilation time so that we don’t need to hard-code them.
              Ответить
    • Кстати гость, хочешь багра?
      В расте не вызываются drop у статических полей.

      нехуй типа их вообще юзать
      Ответить

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