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

    0

    1. 1
    2. 2
    3. 3
    4. 4
    ...
        {ok, {attribute, _, BH, Behavior}} when BH =:= behavior; BH =:= behaviour ->
          process_attributes(OrigFile, EPP, [{behavior, Behavior} | Acc]);
    ...

    Oi mate

    Запостил: CHayT, 19 Мая 2026

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

    • seo-post: фикс бага про детектировние зависимостей между модулями с британским акцентом. Да, ключевое слово языка имеет два написания, очень удобно.
      Ответить
    • у нас тоже довольно долгое время жили наборы констант COLOR и COLOUR, причем они часто повторялись

      Это история про дискаверабилити еще
      Ответить
      • Ещё кто-то пукнул в вечность, сделав заголовок Referer вместо Referrer.

        А ещё вечные grey и gray, centre и center, слова на -our и -or (не только colour и color, их много), thru вместо through, слова на -ise/isation и -ize/ization, thrash и trash.
        Ответить
        • А ещё ph и f (это не только проблема английского, это проблема многих языков на латинице, которые что-то заимствовали у французов и у греков).
          Ответить
    • Стоит ли вкатываться в Elixir в 2026-ом?
      Ответить
      • я не уверен, что языки без статической типизации имеют смысл
        Ответить
        • Если с зависимыми типами ещё можно как-то типизировать аналог gen_statem (я сильно экстраполирую свой прототипчик акторов на ``Coq''), то как статически типизировать горячую замену кода на кластере серверов c Erlang distribution, я не сильно представляю.
          Ответить
          • Что понимается под "статически типизировать горячую замену кода"?

            Если в ЯП есть какие-то типы, и на основе них что-то тайпчекается, то надо чтоб горячая замена требовала соответствие типов меняемой хуйни при этой замене? Т.е. если была допустим функция
            uint64_t shit(uint64_t a)
            {
              return a+10;
            }

            То горяче-заменить ее можно только функцией с такой же сигнатурой, типа
            uint64_t shit(uint64_t a)
            {
              return a-10;
            }

            А в чем проблема-то?
            Ответить
            • > А в чем проблема-то?
              > То горяче-заменить ее можно только функцией с такой же сигнатурой
              Ответить
              • Ну это тоже решается. Если надо чтоб другая сигнатура была, можно сначала насрать новую функцию, например
                uint32_t shit2(uint32_t a)
                {
                  return a-10;
                }

                потом надо поменять код всех функций, которые вызывают этот shit(), чтоб там вызывалось shit2(), потом можно старую функцию shit() тупо выпилить вообще (ну, когда оттуда уйдет поток управления от необновленных функций)...
                Хотя тут все еще зависит от того, насколько всё сильно типизировано...
                Всякая там горячая замена кода только в ФП-мирке может нормально работать, а то вот допустим есть массив структур как в Си, которая находится в shared memory и ее долбят куча процессов параллельно, договариваясь через какую-то хуйню в духе "я вот себе блокирую этот диапазон адресов, тут я меняю байтики, так что сюда не лезть", и ты хочешь поменять эту структуру, докидав новых полей, то как это вообще можно реализовать нормально?
                Ответить
                • > потом надо поменять код всех функций, которые вызывают этот shit(), чтоб там вызывалось shit2(), потом можно старую функцию shit() тупо выпилить вообще (ну, когда оттуда уйдет поток управления от необновленных функций).

                  Нет, понятно, что можно написать код, который такие замены делает.
                  Вопрос в том, как ты в тайп-чекер поместишь информацию о том, что процесс Px на ноде X переходит из версии кода N в версию кода N+1, в то время как процесс Py на удалённой ноде Y может находиться на версии кода N или N+1 (ты этого знать не можешь, т.к. сеть асинхронная), и при этом обменивается сообщениями с Px. При этом версия кода N может не знать о новых типах из N+1.
                  ...И эту задачу тебе нужно решить в общем случае.
                  Ответить
                  • > Вопрос в том, как ты в тайп-чекер поместишь информацию о том, что процесс Px на ноде X переходит из версии кода N в версию кода N+1, в то время как процесс Py на удалённой ноде Y может находиться на версии кода N или N+1 (ты этого знать не можешь, т.к. сеть асинхронная), и при этом обменивается сообщениями с Px. При этом версия кода N может не знать о новых типах из N+1.

                    Ну это вроде можно решить. В каждую структуру с сообщением пихать некий UUID, и если процесс на ноде не обновился до новой версии, он это сообщение закинет во временное хранилище, а как прилетит обновление, сразу его обработает. А если из старого процесса прилетает сообщение в новый, там должна быть функция перевода из типа N-1 в новый тип N (ну или какие-то deprecated функции будут, которые обрабатывают тип N-1, но про тип N-2 оно уже ничего знать не будет, так что супер частые горячие замены делать нельзя)
                    Ответить
                    • > В каждую структуру с сообщением пихать некий UUID

                      Какая CORBA )))
                      Ответить
                      • P.S. COM (который OLE2), а не CORBA, использует UUID, позор мне. И никто не поправил, пришлось самому по древним говномануалам лазить и себя факт-чекать.
                        Ответить
                        • Ну если тебе 40 лет, то ты конечно сказал бы про COM, а если 55 то про CORBA. Так вижу.

                          А так конечно UUID интерфейсов и компонентов были в коме, но вроде были и нормальные имена (через реестр регистрировались), давно это было. Ты можешь еще и про тред апартменты помнишь?
                          Ответить
                          • > Ты можешь еще и про тред апартменты помнишь?

                            Нет, к счастью, не помню, и мне, к счастью, намного меньше. Просто смешалось два говна в голове: UUIDы из классов в древних дельфях и ORB, который пришлось однажды немного потыкать в одной легаси-системе. Вообще, странно, что в CORBA до UUIDов не додумались, прекрасно бы дополнило картину.
                            P.S. В той системе, кстати, тоже был "COM", который тоже был для связи разнородных компонентов, но при этом не имел никакого отношения к мелкомягким. Вот багор-то был, когда я для её изучения начал было читать не те мануалы.
                            Ответить
                            • P.P.S. К счастью, вкурить успел немного, т.к. произошёл диалог с рахитектором:
                              — А вот документация по COM...
                              — Какая ещё документация?!!
                              Ответить
                            • Справедливости ради, я вполне понимаю, почему в COM завезли GUID.

                              CORBA это кросс-платформенное RPC (такой дедушкин REST/JSON, SOAP или gRPC), а смысл COM (еще до DCOM) был в том, чтоб Петух1 написал компонент, а Петух2 его юзал.

                              Это такой доведенный до экстаза ООП, где ты работаешь не со структурами, а создаешь объект, кастишь его в нужный интерфейс, и дергаешь методы.

                              Сам объект может жить в твоем адресном пространстве, а может и в своем. Это очень хорошо легло на идею разделения труда, когда С++ер писал сложный компонент, а VB (или VBA) программист дергал его методы из функции OnClick на своей формочке.

                              Так вот, в отсутствии единого репозитория, нужно было избежать коллизий (они наелись уже тогда DLL хелом).
                              Именно потому уникальные в пространстве и времени GUIDы.

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

                              Можно было сделать иерархию Страна/Штат/Город/Улица/Компания (как сделали в X.500), но вероятно они экономили место: за окном стоял 93й год, и всё это говно должно было работать на 486-м с 8 мегабайтами памяти.

                              В каком-то смысле Поцтеринг переизобрет это своим D-Busом спустя много лет.
                              Ответить
                              • Говно не в том, что используются UUIDы, а в постановке задачи "как бы придумать интерфейс, которым что угодно можно было связать с чем угодно". То есть, такой протокол, конечно, придумали, называется "последовательность битов" (не байтов, не октетов), но вот попытки натянуть на него какую-либо структуру, сохранив общность — это чересчур оптимистично.
                                Это как если бы развитие индустрии требовало, что все программисты пишут на одном языке, решают одну задачу, говорят на одном языке и являются однояйцевыми питухами близнецами.
                                В итоге, для прикладного уровня ни GUIDы, ни IDL, ни XML схемы, ожидаемо, не прижились, а в 89.322% случаев используются доменные имена вроде randomshit.com и JSON, который не сильно ушёл от потока байтов.
                                Ответить
                                • ...Т.е. GUID-ы нужны, чтобы создать программу, где все библиотеки мира слинкованы друг с другом в полный штурвальный граф. Это, к счастью, нахуй никому не упало, а проблема когда приложению /bin/kurochka нужна библиотека libroost решается более простыми способами.
                                  В линуксах всё просто: мейнтейнер в при сборке пакета указывает правильный путь libroost, в винде, где репозиториев нет, приложения обычно всё своё таскают с собой, а исключения вроде MS Visual Studio Redist редки.
                                  Впрочем, винду я не трогал много лет, можете меня факт-чекать на здоровье.
                                  Ответить
                                  • > Т.е. GUID-ы нужны, создать программу, где все библиотеки мира слинкованы друг с другом в

                                    Не программу, а инсталляцию операционной систему.

                                    Ты ставишь COM объект на винду.

                                    Вот ты написал petuzik.dll и у него интерфейс IPetuzable, и GUID 234234234234-HUI.

                                    Ты этот гуид выдал мне как в своем SDK (.h файле), и вот Юзер2 поставил твой .dll и моу прогу на свой комп в чулане

                                    И я такой: А подать сюда 234234234234-HUI, я у него метод Petuzit() вызвать изволю.


                                    В остальном ты прав, потом еще более развернуто отвечу
                                    Ответить
                                    • > И я такой: А подать сюда 234234234234-HUI, я у него метод Petuzit() вызвать изволю.

                                      Это прекрасно, но что делать, если нужного интерфейса в системе не оказалось?
                                      1) Показать пользователю ошибку 234234234234-HUI не найден
                                      2) Показать ему ошибку скачай с интернета купи на радиорынке диск с petuzik.dll. И тут, внезапно, ты уже используешь не UUID, а строковую константу "petuzik". Упс.

                                      Конечно, вореант 1 тоже можно выбрать, пользователь забьёт ошибку в гугл... Но если у него есть гугл, то он не на 486-м Office 97 использует, и лишний мегабат для копии petuzik.dll в памяти у него найдётся.
                                      Ответить
                                      • Ты можешь завязаться на интерфейс, а не на конкретную реализацию, и сказать юзеру: поди купи одну коробочку [s]234234234234-HUI[s] плагина к моей программе (кажется так ставились кодеки например) но я согласен, что это неудобно для юзера. Возможно потому ком и не взлетел
                                        Ответить
                                      • ps: вот христоматийное сообщение про такую ошибку

                                        https://help.developer.intuit.com/s/question/0D54R00009nK5ABSA0/how-to-resolve-retrieving-the-com-class-factory-for-component-with-clsid-issue

                                        или вот
                                        https://i.postimg.cc/FzPR3d7B/image.png

                                        как-то так
                                        Ответить
                                        • Во времена интернета такое даже немного работает, правда децентрализации всё равно не получается, т.к. в роли центрального регистра компонентов выступает поисковик.
                                          Ответить
                                          • по первой ссылке и правда помог
                                            Q:
                                            помогите
                                            Retrieving the COM class factory for component with CLSID {51271FB0-43CE-46C0-97E0-F1205E99C594} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

                                            A: ведь это же очевидно что делать
                                            Go to project properties -> compilation -> unmark 32 bits prefered. That worked for me

                                            (немного напоминает алхимию: как излечиться от проказы? нужно сварить мочу молодого поросенка безлунной ночью)
                                            Ответить
                                            • Ну это же очевидно. Ни UUID, ни GUID не могут поместиться в 32 бита.
                                              Ответить
                                              • чем UUID отличается от GUID?

                                                это надо знать, если ты учился в шестом училище
                                                Ответить
                                                • в гуиде ещё лишних два байта на скобочки нужно
                                                  Ответить
                                                • загуглил

                                                  попал на SO

                                                  I am waiting for UUID v100 which is just all random bytes. Here is your PHP implementation $code=bin2hex(random_bytes(16));$code=su bstr($code,0,8).'-'.substr($code,8,4).'-'.substr($code,12,4).'-'.substr($code,16,4).'-'.substr($code,20,12);. Have fun, don't forget to tip your bartenders. –
                                                  William Entriken
                                                  CommentedMar 9, 2023 at 5:41


                                                  уебал компьютер топором
                                                  Ответить
                                              • Тебе смешно, а у меня препод по информатике спросил: «А если Вашу программу скомпилировать не 16-битным, а 32-битным компилятором [дело было в 1997-м году], то она будет точнее считать?»

                                                Мне пришлось ему рассказывать, что:

                                                1. Размер плавающего питуха не зависит от маркетинговой разрядности процессора, на 16-битном и на 32-битном плавпитух одинаковый (углубляться в то, что у x86 ещё куча хуёвин, разрядность которых не совпадает с маркетинговой разрядностью, я не стал).

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

                                                Мне кажется, он всё равно нихуя не понял.

                                                Специальность была неайтишная, если что.
                                                Ответить
                                                • Если мою программу в 1997-м году написанную скомпилировать 32-х битным компилятором, то она упадет, и не потому что я там везде завязался на размер инта (а я, разумеется, завязался) а потому что на твоем 32-х битном компиялторе авось нет conio.h
                                                  Ответить
                                                  • conardio.h
                                                    Ответить
                                                  • В Борманд-Си есть (для винконсоли).

                                                    Там даже лежит 32rtm.exe для запуска 32-битного винконсольного кода из-под голого DOS через 32-битный DPMI, который до кучи мумулирует несколько самых важных функций винсосноли (из advapi32.dll, kernel32.dll, user32.dll).

                                                    (FAR из-под 32rtm не запускается, мумулируемых функций не хватает, но уже в 2000-е годы вышел HXRT, из-под которого даже FAR можно запустить)

                                                    И во всякой питушне той эпохи вроде Watcom C тоже должен быть.
                                                    Ответить
                                                    • ох, ну и ладно
                                                      но dos.h там точно
                                                      и прерываний
                                                      и фар поинтеров
                                                      и размер массива там не int измеря..
                                                      Ответить
                                                      • Прерываний нет, если нужна совместимость с винконсолью.

                                                        Можно вызывать прерывания, если собираешься положить хуй на совместимость с винконсолью и всегда вызывать программу через 32rtm, но прерывания там не совсем, как в 16-битном коде для DOS: во-первых, DPMI пробрасывает не все прерывания DOS, а только часть; во-вторых, там указатели на память будут flat, а не 16+16. Будут страшные глюки с распидорашиванием памяти, если нормально не портируешь.

                                                        Фар поинтеров опять же нет из-за модели flat.

                                                        А вот с интами надо разбираться, там не всё очевидно. Но что массивы по умолчанию ограничены 4 гигами вместо смешных 64 кило, факт. Я знаю про модель huge, в которой можно больше 64 к, но это адский костыль, к которому редко прибегали. Только если прижмёт писать именно под реальный режим с большими массивами.

                                                        Кстати, 16 бит — это не только ДОС, но и Win 3.x. Там тоже много возни с портированием на 32 бита, куча функций по-другому называется и ожидает других аргументов. Вот на 64 бита с 32 портировать проще.
                                                        Ответить
                                                    • > но уже в 2000-е годы вышел HXRT, из-под которого даже FAR можно запустить

                                                      Я в тот экстендер даже баг когда-то зарепортил https://github.com/Baron-von-Riedesel/HX/issues/4

                                                      Интересно, можно ли такой же экстендер сделать, но чтоб 64 бит?
                                                      Ответить
                                                      • Сложно. У Интела в коротком режиме недоступны 64-битные сегменты, а в длинном режиме недоступен V86, да и 16-битные сегменты защищённого режима куцые (не работает LGDT).

                                                        Вменяемый способ скрестить DOS с длинным режимом — навернуть мумулятор инструкций реального режима и посадить DOS в мумулятор. Переключаться на каждый чих «длиннный-короткий» не вариант.

                                                        Я писал про неофициальный проект NTVDMx64. Там автор спёр у MS мумулятор Soft PC (он исторически был нужен MS, чтобы в Windows на SPARC грузить биосы железок, ибо слоты в материнке там такие же, как у IBM PC, а вот процессор другой).
                                                        Ответить
                                                        • Не только, NT же была кроссплатформенная, только Спарк тут непричом, NTVDM хорошая и даже расширяемая, но аппаратная витруализация только на i386, на всех остальных платформах был эмулятор, купленный
                                                          Ответить
                                  • > В линуксах всё просто: мейнтейнер в при сборке пакета указывает правильный путь libroost,

                                    В линуксах (и в юниксах вообще) принято ставить софт из репозитория.

                                    На винде же в то время юзер на диске купил ком компонент для проигрывания mp3, и плеер к нему скачал с интернета. Поставил всё это сам, и оно должно работать.

                                    > приложения обычно всё своё таскают с собой,

                                    Во времена .dll hell -- разумеется. Сейчас у .NET есть gasm, а у обычных людей SxS: у каждого .dll есть свой уникальный ID (из хеша и подписи и пр) и ты зависишь на имя и на версию и на этот ID.

                                    C редист смешно, кстати: его раскусили на собссно CRT (libc) и специфичные костыли компайлера

                                    CRT теперь идет с виндой (как libc на юниксе) а костыли компайлера -- да -- через редист (хотя и их можно слинковать статически)
                                    Ответить
                                • > как бы придумать интерфейс, которым что угодно можно было связать с чем угодно

                                  Да, это романтическое представление из конца 90-х. Тогда же были всякие попытки сделать универсальный веб, каждой сущности дай свой ID, отсюда и (как ты верно заметил) XML.

                                  Гейтс тогда говорил, что юзер должен мыслить не в терминах файлов, а в терминах документов.
                                  Вот у меня есть таблица эксель. Я хочу чтобы любая программа могла ее читать. Как она это сделает? Через ком, в котором будут буквально те же команды, что и в экселе: Open, Read итд.

                                  Но да: не взлетело
                                  Ответить
                                • > последовательность битов

                                  ...Пользователи Сетунь будут немного недовольны.
                                  Ответить
                                  • Я прямо представляю как ты написал "байтов"
                                    Потом такой "блядь ну я же сетевой петух" и исправил на "октетов"
                                    Но вот наконец и с битами начались проблемы
                                    Ответить
                                    • А на квантовых суперкомпьютерах можно будет кубиты передавать
                                      Ответить
                              • Потом к COM добавили DCOM (ответ EJB): возможность удаленно обращаться к КОМ на других машинах через сеть (не только тсп ип!)

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

                                Потом добавили координатор распределенных транзакиций (привет Файк) и message queue (так появился COM+).

                                Винда стала платформой распределенных приложений, как в книжке про кабана, только это 99-й год и W2K.

                                Но всё было дыряво (MS-RPC проприетраный и дырявый) и порт-маппер его использовал для TCP случайный порт доволя админов файрволов до исступления эмоций

                                В итоге даже MS в .NET (начало нулевых) стало советовать SOAP (XML over HTTP) потому что он лучше проходит через прокси, и от него отделяется HTTPS (тогда его часто делали хардварно) в итоге всё накрылось медным тазом

                                Идея интересная, но пиздец переусложненная.

                                картинка https://i.postimg.cc/QMBptDYm/image.png
                                Ответить
                  • Т.е. в Erlang я могу сделать что-то вроде:

                    handle_event(info, #envelope{version = Vsn, payload = ??? не знаю, что за тип ???}, State, #data{my_version = MyVsn}) when Vsn > MyVsn ->
                      %% Не знаю, что с этим сообщением делать. Видимо, идёт апгрейд, обработаю позже:
                      postpone;


                    Конечно, можно поспорить, что можно использовать протоколы, которые таких ситуаций не допускают. Тогда, конечно, можно использовать языки, которые не умеют такие проблемы решать. Их, естественно, проще типизировать. Но если не уметь такие проблемы решать, то сложнее делать апгрейды, не теряя соединения и т.д.
                    Для сайта на PHP эта проблема, конечно, иррелевантна.
                    Ответить
          • А перед горячей заменой можно прогнать тулу которая проверит что типы сошлись в репозитории?

            Стат типизация лично мне нужнее для ловли тупых ошибок а не для перформанса
            Ответить
            • Да. Есть встроенная тула под названием Dialyzer, которая анализирует код с точки зрения success typing (это сорт refinement typing, если я не ошибаюсь). Компилятор её тоже использует для оптимизаций.
              Есть ещё несколько альтернативных внешних утилит, к примеру, f***book написал чекер для gradual typing, но я им не пользовался.
              Ответить
              • Тагда с моей колокольни статпизация у вас есть

                Потому что грубо говоря в таких языках как (девушки, заткните уши) TypeScript и питухоне-с-тайпхинтами в рантайме тоже хуй да нихуя (кроме разве что пайдантика в питоне который чото там пытается) но тем не менее они как-бы статтипизированы (особенно TS)
                Ответить
                • Строго говоря, у нас строгий динамический питух. Dialyzer работает интересным образом: он репортит ошибки только когда может доказать, что каждый путь исполнения программы приведёт к пустому множеству выходных значений. С одной стороны, для внутренних функций он делает полный анализ control и data flow, и поэтому иногда находит весьма нетривиальные вещи. С другой — он тебе не скажет, что для каждого значения определённого типа программа статически корректна. Так сделано, ибо издержки вышеназванных причин.
                  P.S. Можно писать программы так, чтобы Dialyzer больше ловил, но это уже скилл программиста, а не какая-то статическая типизация.
                  Ответить
                  • > что каждый путь исполнения программы приведёт к пустому множеству выходных значений

                    Неправильно выразился. "Когда может доказать, что некий путь исполнения программы ведёт к пустому множеству допустимых выходных значений, при вводе, ограниченном пересечением пользовательской спецификации типа и результатом data/control flow анализа".
                    Ответить
                  • https://hex.pm/packages/dialyxir

                    downloads 88M

                    а говорят, что никто не пишет
                    Ответить
                    • https://www.npmjs.com/package/is-even

                      Weekly Downloads
                      152,987
                      Ответить
                      • https://www.npmjs.com/package/is-bukva : 404
                        И это называется экосистема?
                        Ответить
                        • Потому что у нас принято делать наборот
                          https://www.npmjs.com/package/is-number-object

                          70 миллионов пер вик
                          (зависит на другой популярный пакет https://www.npmjs.com/package/has-tostringtag)

                          Отдельный пакет с .d файлом (это для стат типизации)
                          https://www.npmjs.com/package/@types/is-number
                          Ответить
                          • жаваскриптизёры это конечно реальный рак. никакое пхп и рядом не валялось

                            заметил, что они самые большие поборники ЫЫ. привыкли, что Nan is undefined и I don't know what `this` is, теперь тащат свои ОХУЕННЫЕ практики всюду
                            Ответить
                      • ха-ха-ха

                        нормально обезьян наебали, да?

                        спорю, что ты совершенно другую цифру собирался скопировать
                        Ответить
                        • )) и правда, прикольное UX решение

                          написана одна цифра, а копируется другая))

                          Надо в нашем продукте сделать такую фичу, например суппортеру говорят: покажи логи

                          он копирует логи, пейстит их в чат, а там напсано "Игра «Каменное лицо». Это когда участники садятся за стол без штанов, а кто-нибудь залезает под стол и делает всем по очереди минет. Задача игроков — по лицу угадать, кто именно сейчас подвергается оральной атаке. Игра особенно интересна, когда в ней всего двое участников"
                          Ответить
                          • > делает всем по очереди минет
                            – девушки в игре не предусмотрены?
                            Ответить
                            • А в чем тогда смысл? Ты ещё штурманом одну сделай.
                              Ответить
      • Ничего не знаю про Elixir, кроме того, что это Erlang c нескучным сахаром.
        Там можно писать что-то типа [a: b, c: c] вместо [{a, b}, {c, d}], очень ценно.
        Ответить
        • P.S. Интересно, а есть ли у них специальный синтаксис для [{a, b, c}, {d, e, f}]?
          Ответить
          • Какой должен быть результат у этого выражения? Каков его физический смысл?
            Ответить
            • Ну что, никто не знает?
              Ответить
              • Предлагаю добавить вот такую нотацию:
                ...
                  a        d
                [<▲> 8=э <▲>
                 b c      e f


                У кого-нибудь есть воцап смотрящего за Elixir?
                Ответить
                • блядь да ведь это же https://upload.wikimedia.org/wikipedia/en/a/ae/S_CustersRevenge_1.png
                  Ответить
        • Полистал доки. Кортежи ровно из двух элементов у них особенные. Для других размеров сахара нету.
          Ответить
          • > Кортежи ровно из двух элементов у них особенные.

            При том, что proplist (т.е. список кортежей из двух элементов) себя давно изжил с появлением нативных мапок. А сахар для них остался. Какой восторг!
            Ответить
            • Напомнило Перл, в котором
              @list = ('name', 'Петух', 'iq', 42);
              %hash = @list;
              эквивалентно
              %hash = ('name' => 'Петух', 'iq' => 42);
              Ответить
            • > При том, что proplist (т.е. список кортежей из двух элементов) себя давно изжил с появлением нативных мапок. А сахар для них остался. Какой восторг!

              Напоминает весь питухон. В питухоне тоже в каждой версии появлятся еще один (на сей раз правильный!) способ сделать что-то. И еще конечно три способа в сторонних либах есть.

              Теперь в питухоне всегда есть восемь способов сделать что-либо. Совершенно ебанутый язык.
              Ответить
        • Кстати, списки от кортежей отличаются только динамической длиной?
          Ответить
          • Они совершенно по-разному представлены в памяти VM. Список сделан через cons-cells, кортеж — вектор. Сериализуются они тоже по-разному.
            Ответить
        • P.S. Ах да, у них есть такой-то неебический фреймворк для динамического web-питуха Phoenix с такими-то ORMами, который так-то там реагирует на ивенты, и патчит на лету юзеру передний конец через websocket. Это, типа, здорово.
          У меня никакого фронтенда нет, поэтому стоит ли ради этого учить ``Elixir'' я не знаю.
          Ещё у них есть свой numpy: https://github.com/elixir-nx/nx
          Ответить
    • «У меня оборот – больше миллиарда рублей в год», – сказала «Татлеру» квантовый психолог Инна Тлиашинова
      Ответить
    • Просто крик души. Невозможно проводить собеседования на позицию Go-разработчика.

      Все эти Ghost GPT, CodeShot AI, ENIGMA AI привели к тому, что единственный способ действительно понять квалификацию человека — пригласить его в офис. С одной стороны, мы получили инструмент, который снижает уровень стресса: помощника, способного подсказать и поддержать в нужный момент. С другой — человек из условного Усть-Дальневска уже вряд ли сможет пройти собеседование в Москве на хорошую позицию и достойную зарплату, потому что, похоже, скоро компании начнут массово возвращаться к офлайн-собеседованиям. Лично у меня уровень доверия к онлайн-интервью сейчас где-то на уровне плинтуса.
      Ответить
    • Микротик стоит в ДЦ. Нужно поднять в нем vless, чтоб жители самой лучшей страны в мире могли подключаться туда через мобильный инет (остальные проты блочат)

      Микрот сам не умеет в vless, но он умеет в докер (там прыщи внутри) и есть полу-официальное руководство как запустить там контейнер с флесом

      Только вот микротик считает контейнеры небезопасными, и требует физической перезагрузки в знак подтвреждения. В течение пяти минут после включения докера!

      Какой багор ))
      Ответить
    • Кремль запретил СМИ писать о запретах 
      Ответить

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