1. Swift / Говнокод #18746

    −30

    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
    struct Family: Enumerable {
      var name = "Smith"
      var father = "Bob"
      var mother = "Alice"
      var child = "Carol"
    
      func each(block: (String) -> Void) {
        for i in 0...2 {
          switch i {
            case 0: block("\(father) \(name)")
            case 1: block("\(mother) \(name)")
            case 2: block("\(child) \(name)")
            default: break
          }
        }
      }

    }

    http://matthijshollemans.com/2015/07/22/mixins-and-traits-in-swift-2/

    Pattern matching головного мозга. Верно говорят, что тот, кто не умеет делать, идет учить других как надо делать.

    Запостил: gumbert, 21 Сентября 2015

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

    • показать все, что скрытоvanished
      Ответить
    • > mixins-and-traits-in-swift-2

      Стоит изучить?
      Ответить
      • Неизвестно, ссылка от ОПа не открывается
        Ответить
        • Я привык, что у меня половина ссылок не открывается...

          Нашёл в архиве:
          https://web.archive.org/web/20160315104833/matthijshollemans.com/2015/07/22/mixins-and-traits-in-swift-2/

          Оказывается, в Свифте своя терминология. Интерфейсы они назвали протоколами. Protocol extension в Свифте — это то, что в других языках называется трейтами или миксинами. Это интерфейс с частичной реализацией методов.

          Автор считает, что миксин отличается от трейта тем, что хранит состояние. В Свифте 2.0 «protocol extension» полагается на то, что использующий его класс создаст своё хранилище свойств, поэтому автор считает его трейтом, а не миксином.

          Однако, автору слово «миксин» нравится больше, поэтому оно будет у него иногда проскакивать.
          Ответить
          • У автора в голове какая-то каша.

            Впрочем, я тоже в 2015-ом году любил сравнивать протоколы с миксинами и трейтами лол. Молодой был и глупый и даже на ГК ещё не имел аккаунта
            Ответить
          • В ObjC терминология была очень простая: interface это именно то, что было декларацией в си/cи-плюс-плюс и интерфейсом в паскале

            Очень логичное и правильное понятие имхо.

            А то, что жаваебы с шарпеями называли интерфейсом -- то было протоколом.
            Думаю, стриж его наследовал.

            в питоне тоже есть протоколы (а еще abstract base classes а еще базовые классы pydantic а еще) но питон вообще неебически сложный язык, его мотто: "существует сорок три способа сделать это, семь из них уже устарели, читай пепы, сволочь"
            Ответить
            • Пожалуй, так правильнее.

              Обосрактный класс — это не совсем интерфейс, это скорее контракт, который нужно соблюсти классу. Протокол — логичное название.

              И название «интерфейс» в Object Pascal (в оригинальном Паскале модулей не было; Андерс Хейлсберг взял модули из Модулы, но переименовал секции) для экспорта тоже выглядит логично.

              Самое смешное, что C# тоже изобрёл Хейлсберг, но для разнообразия взял несовместимую с Object Pascal терминологию. Возможно, это требования Борланда и Микрослопа соответственно. Тайпскрипт изобрёл тоже он, кстати.
              Ответить
              • Обосратный класс еще может иметь реализацию (и стейт!), и тогда это один из трех кейсов
                1. это просто говно
                2. это попытка изобразить паттерн "шаблонный метод", и тогда это говно с сахаром
                3. это.. мисксина. И, разумеется, тоже говно.

                Но ЙАЖА (гослинги?) зачем-то ввели понятие "интрефейс" которое как-бы pure abstract class, но их можно много реализовывать (в отличие от классов: множественного наследования в ЙАЖА нет)

                А потом в них сделали дефалтные реализации, и теперь интепрфейс разве что не имеет состояния, а еще его можно реализовывать динамически (мокать в тестах) а так хуй знает зачем он нужен

                Хейлсберг для C# (и для TS) ожидаемо косплеил ЙАЖА.


                У нас в расте нет никаких интерфейсов: есть трейты. Если реализовать их динамически (через виртуальнуые методы) то будет обчный такой полиморфизм и трейты это такие интерфейсы джвы/c#/Go или pure abst. classes C++.

                Если же реализовать их статически (через генерики-шаблоны) то они будут вроде крестовых концептов. Лепота!

                зы: но мне нравится мыслить в терминах модулей, и говорить "интерфейс модуля" и "его реализация", как в борманд паскале
                Ответить
        • Автор перешел на современные технологии, и раздел про свифт грохнул
          https://matthijshollemans.com/c64/

          Автор, кстати, из наших: U kunt het pijltje sturen (вы можете управлять стрелочкой. Sturen однокоренное со словом ШТУРВАЛ)
          Ответить
          • Он пишет, что в 1991-м у него появилась подруга (только почему-то он её называет по-испански), и про C64 он забыл.
            Ответить
            • причем её ему папа купил

              кроме шуток, если чел в десять лет на бейсике нагавнял гуйную игрушку (пусть и самую простую) то он молоток. Многие в десять лет казявки щёлкают, и соломенки шмелям в жопу засовывают

              причем это конце 80-х, нихуя нет учбеников акромя бумажных книг.

              Goed gedaan, meneer Hollemans, вобщем
              Ответить
              • Да, круто. Никаких Stackoverflow тогда не было, до всего надо было допирать самому.

                Но у C64 (а также у всяких MSX, Amiga, Atari, Amstrad, Apple ][, Spectrum) был интересный Бейсик: спрайты из коробки, их не надо было костылить и велосипедить самому; а ещё был доступ к синтезатору звука.

                На казалось бы более мощном IBM PC по мультимедийности был откат в прошлое. Графические ускорители и звуковые карты не сразу появились, да и не было к ним доступа из Бейсика. Ну чего мы хотели от корпорации International Business Machines, которая раньше делала пишущие машинки для серьёзных людей?
                Ответить
                • > спрайты из коробки, их не надо было костылить и велосипедить самому;
                  он та пишет, как его программа начиналась буквасльно со спрайтов
                  10 DATA ..


                  > по мультимедийности был откат в прошлое.

                  IBM PC зато не подключался к телевизору))
                  но из всех прелестей звука имел только PC speaker, который можно было включить или выключить. Чтоб высрать звук, надо было завести таймер, и по нему теребонькать писи спикер, чтоб он пищал.

                  Потом уже появились синтезаторы, которые умели сами грать звук и (о, чудо!) пользоваться DMA, чтобы этот звук из памяти скачать.

                  Графические ускорители появились вообще в 90-е (voodo 3dFX, Glide API), до этого к твоим услугам был CGA, EGA, (S)VGA. Скажи спасибо, что у них на борту было несколько страниц памяти
                  Ответить
                  • Про Амигу:

                    https://ru.wikipedia.org/wiki/Original_Chip_Set
                    Ответить
                    • Кому вообще в голову первому пришло "а давайте сделаем железку чтобы играть PCM из памяти чтобы освободить CPU"?

                      Амига была нереально крутой. Там совершенно убойная для своего времени ОС и такая же графика

                      PC вообще хуй сосал в вопросах мультимедиа очень долго, буквально до середины 90-х
                      Ответить
                      • Мышь в комплекте тоже впервые появилась у Амиги.

                        У IBM PC первоначально мышь вставлялась в разъём RS-232, вообще-то предназначенный для модема.
                        Ответить
                        • Довольно долго вставлялась, мне кажется PS/2 появился только в районе ATX (всё, что осталось от IBMовских потугов)

                          У DOSа не было изначально API для мыши, так что каждая программа должна была сама с ней работать (всмысле знать марку мыши и в какой она компорт вставлена)

                          Потом появилмя mouse.com и кажетсч INT33

                          ps: я еще из прыщавого gpm (или бздячего moused) опмню что мышь-то бывает не только COM и PS/2.

                          Бывает еще такая хуйня
                          https://en.wikipedia.org/wiki/Bus_mouse
                          Ответить
                          • Автобусная мышь (из смешного mouse.txt).
                            Ответить
                          • Некоторые TSR мыши умели мумулировать API светового пера.

                            В QBasic не было функций для мыши, но были функции для светового пера, поэтому, чтобы не пердолиться с вызовом INT 33H, некоторые использовали мумулируемый API.
                            Ответить
                            • Для пера родной басик имел функцию PEN, а физически кажется оно подключалась к видеокарте, и читать надо было из регистров карты, через IO.
                              Ответить
                              • ps: ебать я правильно почти вспомнил

                                Журден на линии.

                                Высокий уровень (Барсик)
                                110 X = PEN(4)               'получаем координату точки по оси x
                                120 Y = PEN(5)               'получаем координату точки по оси y


                                Cредний уровень (бивис)
                                ;---читаем и запоминаем положение светового пера
                                   MOV  AH,4            ;номер функции
                                   INT  10H             ;прерывание BIOS

                                Read light pen position (Does not work on VGA systems (какой багор)))

                                ответ интерпретировать
                                >>
                                AH = Status (0=not triggered, 1=triggered),
                                BX = Pixel X,
                                CH = Pixel Y,

                                CX = Pixel line number for modes 0Fh-10h, // видимо речь о text mode
                                DH = Character Y,
                                DL = Character X
                                >>

                                Низкий уровень.

                                По своей сути световое перо является расширением видеосистемы и как таковое использует микросхему контроллера CRT 6845.

                                Позиция светового пера дается одним 2-хбайтным значением, хранящимся в регистрах 10H (старший байт) и 11H (младший байт) микросхемы.

                                Порт с адресом 3DCH устанавливает задвижку светового
                                пера, а с номером 3DBH - сбрасывает ее.
                                ---------

                                читать регистры из видяхи было достаточно заёбно, там надо было через узкое окошечко IO просунуть номер регисра, потом забрать ответ
                                Ответить
                                • > Does not work on VGA systems

                                  В видюхах EGA были разъёмы светового пера, VGA же ими комплектовать перестали.

                                  Почему они были в видюхах? Надо было точно синхронизироваться с ходом луча. Координата X вычислялась по задержке от начала строчной развёртки, Y — по задержке от начала кадровой развёртки.
                                  Ответить
                      • > буквально до середины 90-х

                        Да, где-то так. Примерно 10 лет прогресса мультимедиа было потеряно.

                        Я понимаю, что у IBM PC в 1995-м оперативка и процессор были мощнее, чем у Амиги в 1985-м, но ведь и 10 лет прошло.
                        Ответить
                        • Ну тут еще разгадка такая, что и Амига, и Макинтош сразу делались как гуйня, а в PC гуйня въезжала с треском. Впринципе, до Win3.11 (это год 1994-й) серьёзной гуйни не было вообще, а когда она появилась, оказалось, что игры под нее писать всё равно нельзя сложнее пасьянса и chips (потому что кроме рисования на 2D канвасе в ответ на события эвентлупа у тебя нет других средств, да еще надо быть кооперативным) а бизнес-приложениям почти всегда хватало условного турбовижена, а всякая предпечатная подготовка типа pagemaker/quark express всё равно была не под писи.
                          Also, гуйня весила очень тяжело.

                          Бум "переписки под windows" начался в районе win95, когда гейдевками дали DirectX, а бизнес-приложениям -- кооперативую многозадачность, 32-х битный режим с плоской памятью, а некоторым и сетевой стек, но еще в середине нулевых люди реально писали софт под дос (окончательно его убил длинный режим).
                          Ответить
                          • я тебе работу нашел

                            In January 2024, German state-owned national railway company Deutsche Bahn posted a job listing for a system administrator with "knowledge of legacy operating systems". The main responsibilities listed in the post were maintenance of the old system and driver updates. The need for the continued use of Windows 3.11 could apparently be traced back to Siemens' SIBAS (Siemens Bahn Automatisierungs System) automation system used to control trains.
                            Ответить
                      • А ещё первый комп на i80386 собрала вообще не IBM. IBM пыталась толкать PS/2 на 80286, но что-то не вышло. От PS/2 остался только упомянутый разъём, да и то о нём вспомнили только в эпоху ATX.

                        Потом с операционкой для 80386 IBM и Microsoft сыграли в лебедя, рака и щуку. Microsoft решила кинуть IBM с поддержкой OS/2 и стала разрабатывать Windows.
                        Ответить
                        • Может не PS/2, а таки PS/1?
                          Ответить
                        • собссно с 386 (а так же изобретения чипсета и ATA) и начался поход IBM на мороз из мира PC. Cпасибо Compaq и Olivetti

                          IBM еще пытался гадить проприетарной шиной, но и её пожрал PCI.

                          от OS/2 в наследство нам остались фанаты мерлина идеи отделения сисколов/NativeAPI от собссно API: считалось, что будет много приложений OS/2 и надо будет их запускать. С тех пор у нас Native API + Win32API.
                          Ответить
                      • PCjr был мультимедийным
                        Ответить
                        • да, и двольно сильно несовместимый в некоторых уголках бивоса, надо было версию PC проверять
                          Ответить
                  • > 10 DATA

                    Спрайт надо откуда-то загрузить: из файла, например. Или из DATA.
                    Ответить
                    • Он пишет, что их можно было заэмбеддить видимо, но он не знал
                      The game is a bit slow to start up because I hadn’t quite figured out that sprites can actually be saved along with the BASIC program. And so the first few hundred lines of the program look like this:

                      https://matthijshollemans.com/c64/ChangChiSprites.png

                      зы: мне кажется осёл в donkey.bas так же примерно нарисован.
                      Ответить

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