1. Python / Говнокод #26374

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    _RE_DESCRIPTION_TAG_OPEN = re.compile(r'<p\s+class="description">'.encode('utf-8'))
    _RE_DESCRIPTION_TAG_CLOSE = re.compile(r'</p>\s*<p\s+class="author">'.encode('utf-8'))
    def replace_description_tag(content, new_tag):
        content = _RE_DESCRIPTION_TAG_OPEN .sub(f'<{new_tag} class="description">'.encode('utf-8'), content)
        return    _RE_DESCRIPTION_TAG_CLOSE.sub(f'</{new_tag}><p class="author">'.encode('utf-8'), content)

    Парсить HTML регулярками — нельзя. Но если HTML невалидный — то можно!

    А дело в том, что ГК генерирует говно, которое пришлось фиксить таким вот диким образом, см. https://govnokod.ru/26373#comment522056.

    Запостил: gost, 21 Января 2020

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

    • Именно поэтому я против «HTML».
      Ответить
      • Запомни, маня, навсегда.

        Любой формат с тегами используют только идиоты.

        HTML имеет смысл только для страницы браузера, читаемой человеком.

        Очевидно, что всё остальное - ненужно.

        На базе этого говна ты ничего нормального не сделаешь.

        Любой теговый формат - мусор.

        Любая обработка тегов - мусор.

        Любые данные в теговом виде - мусор.
        Ответить
    • а парсить как xml?
      Ответить
      • А «HTML» уже гавным-гавно не является валидным «XML».
        Ответить
        • Ну хотя бы валидным «SGML» он является?
          Ответить
          • Да ничем он не является. Говно это тупое, для тупых питухов-неосиляторов.
            Ответить
            • Подтверждаю.
              Ровно с тех пор, как разработчики браузеров осознали, что переучивать веб-макак (а среди них программистов практически не было) писать валидное говно - себе дороже. Проще напидорасить костылей. Тут забыли закрыть тег? Похуй, где-нибудь сами закроем. Незаэскейпленный амперсанд в урле? Сами заэскейпим. Макака не знает про doctype? Ну и хуй с ним, нам тоже не особо-то и нужен. Невалидный CSS? Проигнорим, и без него что-то отображается. Макака передала не все аргументы в JS-функцию? Ну пусть будет undefined, вдруг прокатит.
              Так и живем, и теперь это хуйня пиздит уже самих веб-макак -- надо теперь зубрить, в каком браузере что и как закостылено, и отлавливать примитивные баги всю ночь, оставаясь в офисе на неоплачиваемый овертайм.
              Ответить
              • Загнал бы ей свой паровоз?
                https://www.setwalls.ru/pic/201304/2560x1440/setwalls.ru-19347.jpg
                Ответить
              • Более того, костыли могут от версии браузера к версии меняться. Нужно ещё держать в голове, какие версии браузеров мы поддерживаем.
                Ответить
              • Что ты подтверждаешь-то? Речь шла про то, что html - говно, как и весь веб. А ты макак приплёл зачем-то. Уж макака из говна философский камень точно никак не сделает
                Ответить
                • Всё он правильно подтверждает. «HTML» и весь веб — говно потому, что при их проектировании в первую очередь учитывались анскиллябры. Это была основная идея создания всей этой питушарской экосистемы: сделать так, чтобы создавать сайты могли даже самые тупые макаки. Благородно, не спорю, но неосуществимо. Тупая макака пишет говно не потому, что инструменты слишком сложные, а потому что тупая.
                  Ответить
                  • Есть какие-то документальные подтверждения фразе "при их проектировании в первую очередь учитывались анскиллябры"? Так-то rfc на html2.0 это портянка на 70+ страниц с кучей страшных слов; не слишком ли круто для макаки?

                    Может, проблема в том, что веб стал решать совсем не те проблемы, для которых изначально создавался? Что HTML, CSS и тем более JS это в принципе не лучшие инструменты для SPA с кучей медиа и канвасами?
                    Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • Какие же в HTML могут быть проблемы с безопасностью?
                        Ответить
                        • >Какие же в HTML могут быть проблемы с безопасностью?

                          Они начинаются с тегов <script> <link> <iframe>
                          Ответить
                          • Хм, да, согласен. Если проблему фреймов уже более-менее решили, то хуёвые скрипты и ссылки типа go0gle.com/devochki никуда не делись.
                            Ответить
                            • Да там много всякого пиздеца можно напридумывать

                              <img src="javascript:scriptushok.koko()">
                              Ответить
                              • Ого, это будет работать? А что произойдёт, просто выполнится скрипт при загрузке страницы?
                                Ответить
                                • Принцип как у букмарклетов. Может в современных браузерах и не будет. Просто пример.

                                  Но с появления вёба, таких трюков придумали миллионы.

                                  И каждый раз в браузеры впиливают всё новые костыли, проверки и говнотехнологии типа corsов, js-only кукисов, SameSite.
                                  Ответить
                                • Это вообще один из самых мощных инструментов XSS. В основном, правда, скрипт вставляется в более экзотические атрибуты, «<img src="huj" onerror="alert('hacked')">», например. А ещё в древние времена можно было сделать <a href="javascript:alert('huj')"> и получить много лулзов — особенно с форумов, говнодвижки которых такое не фильтровали и позволяли вставлять в [url]/[link]/etc.
                                  Ответить
                                  • Джентльмены, но ведь это полнейшее, чистейшее, отборнейшее




                                    говно. ЧТД
                                    Ответить
                                  • О чём и речь.

                                    HTML говно выглядит как говно, и работает как говно.

                                    Поскольку является ёбанным, неортогональным, избыточным, оверхедным, ансекьюрным говном.
                                    Ответить
                                    • Ну вот.

                                      То есть оригинальный HTML это что-то типа сегодняшнего мракдауна (ну ок, чуть сложнее, но не суть). Достаточно простая штука для элементарных вещей. Ну как заметку добавить. А потом кто-то решил, что ПОРА: вебдваноль, виджеты-хуиджеты, спа, анимации и фейерверки, резиновый дизайн, мобильные версии, вебсокеты.

                                      Представим себе, что браузеры начали нативно поддерживать маркдаун. И уже через полгода в нём: img, svg, call, angularMd, MarkDart...
                                      Ответить
                                  • Мне ещё нравилось что раньше можно было поставить в src что-то вроде "mysite.narod.ru?"+document.cookie, а картинку сделать 1х1 пиксель.
                                    Ответить
                                  • Ой, как тонко)
                                    Ответить
                              • Но тут уже проблема всё же из-за жопоскрипта, а не HTML.
                                Ответить
                    • Проверь: https://www.w3.org/TR/html-design-principles/, https://www.w3.org/TR/WD-html40-970708/intro/h4desgn.html. Особенно мне нравится во втором:
                      This version of HTML has been designed to remain easy to learn and adequate
                      for many common publishing needs. The language offers more complex constructs
                      (e.g., forms, scripting) for more sophisticated tasks, but even these mechanism
                      will become easier to use as powerful HTML authoring tools flourish.
                      Ответить
                      • Принято, хотя я и не совсем согласен. Я думаю, что почти про каждый %languagename% можно найти подобный маркетинговый булшит.
                        И вообще, макаке всё равно на каком языке говнометать, на простом для обучения или на сложном. А вот царю нужна простота и эффективность и массив
                        Ответить
                  • > сделать так, чтобы создавать сайты могли даже самые тупые макаки
                    > неосуществимо
                    Осуществимо, просто нужно идти не от требований макак, а от требований людей и далее упрощать интерфейс между человеком и машиной, делать его удобней. А также набираться духу и вовремя сливать старые версии в унитаз и создавать язык с нуля, оставляя интерпретатор старой версии в браузере только с правками безопасности.

                    Например, foreach делает работу удобной, UB - неудобной и непредсказуемой, автокасты - удобной до какой-то степени, исключения - удобной и непредсказуемой и т.п.
                    Ответить
                    • > А также набираться духу и вовремя сливать старые версии в унитаз и создавать язык с нуля

                      Python 3.

                      Не взлетит.
                      Ответить
                      • Если стандартизовать ВМ, в которую компилятся ололоязыки, то взлетит.
                        Компилим всё под ВМ, а там уже оптимизации и жиды.
                        Ответить
                        • >Если стандартизовать ВМ, в которую компилятся ололоязыки

                          Ну вот Жабу уже стандартизировали.
                          Почему-то jvm-ололоязычки не особо взлетели.
                          Самый жопулярным жвм-языком остаётся эта самая жаба.

                          >оставляя интерпретатор старой версии в браузере только с правками безопасности

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

                            Тот же Котлин занял свою нишу и в ней потихоньку становится стандартом. С Жабой в целом сравнивать смешно, но - повторюсь - ниша застолблена.

                            Кроме jvm есть ещё пример llvm. Вопрос же в целесообразности и политической воле. Почему нельзя встроить в браузеры интерпретатор байткода llvm или что там у него?
                            Ответить
                            • >Кроме jvm есть ещё пример llvm

                              Кресты, Кресты, Кресты.

                              Написан крестовиками на крестах, как бекэнд для clang (компилятор крестов).

                              >Почему нельзя встроить в браузеры интерпретатор байткода llvm или что там у него?

                              Царь недавно всё объяснил.

                              https://tsar1997.blogspot.com/2019/10/wasm.html
                              Ответить
                              • Но теперь же там не только кресты.

                                Так царь типа за wasm?
                                Ответить
                          • > в старых браузерах не работает новая хипстерская срань
                            Как раньше не работала - так и потом не работает. Сейчас ровно то же самое. Даже страница Гугла (одно сраное поле ввода) уже скорее всего в IE5 нормально не откроется.

                            > новые будут пухнуть от кучи разных интепретаторов старья
                            Сейчас они всё равно пухнут от интерпретаторов новья и реализации хаков для использования хаков в стандарте для борьбы с предыдущими хаками для предыдущих хаков в стандарте. Что проще, реализовать новый продуманный язык без говна, или впиливать питушню для поддержки "use script", править код в неожиданных местах, который уже никто не помнит, что делает, вставлять затычки для новых багов?
                            Ответить
                            • >Что проще, реализовать новый продуманный язык без говна

                              Хаха. Да в мире кодинга, пожалуй нету задачи сложнее, чем реализовать такой язык «без говна».

                              https://xkcd.com/927
                              Ответить
                        • >Если стандартизовать ВМ, в которую компилятся ололоязыки, то взлетит.

                          Опять же не понят мой исходный коммент.

                          Не передать сколько боли было в питух сообществе при портировании сырцов с 2ки на 3ку.
                          Ответить
                          • Видимо не дали им возможности запустить код на 2 и 3 в одной программе?
                            Иначе можно было оставить старые классы на 2, а новые писать на 3. Вот NodeJS поддерживает и свои модули CommonJS, и модули новомодных версий JS, можно элементарным образом в одном сервере использовать сразу и старое говно, и новое говно.

                            Есть же питухизация типов, чтобы JS поднять в TypeScript без переписывания? Есть же сишные библиотеки, которые работают в питоне без переписывания алгоритма? Так почему с C на Python переписывать не надо было, а с Python на Python - надо?
                            Ответить
                            • Так в 2->3 совместимость сломали. А если мы говорим про виртуальную машину — то однажды нам таки придётся поломать какое-нибудь ABI — и всё, привет блядскому цирку с переписыванием/переконпелированием либ на 10+ лет.
                              Ответить
                              • > совместимость сломали
                                Ну вот работает же оно как-то вместе. У меня под Windows с интелловским процессором можно запускать как Python2, так и Python3. Работают на одном и том же железе.

                                И вообще, я же писал про C. Почему модули на C, языке без ГЦ, обязательных табов и с указателями вместо ссылок, смогли прокинуть в python? Почему в C++, где имена функций компилятся в совершенно другие иероглифы, чем было бы в C, в стандарте описывается несовместимая питушня, и где было норм, стало УБ, смогли прокинуть сишную питушню?
                                Ответить
                                • > У меня под Windows с интелловским процессором можно запускать как Python2, так и Python3.
                                  Это потому, что и «Python2», и «Python3» — это программы, написанные на «C» и переведённые на мышиные коды одного и того же ISA.

                                  > Почему модули на C смогли прокинуть в python?
                                  Аналогично, потому что интерпретатор «Python», сконпелированный в мышиные коды, позволяет дёргать другие мышиные коды.

                                  Да, идея создания единой ВМ с едиными инструкциями и полной совместимостью всех со всеми а-ля asm выглядит круто, но у этого подхода есть несколько крупных подводных камней.
                                  1. Неизменность ВМ. Мы не можем вносить изменения в то, как работают уже задокументированные инструкции — иначе сломается вообще всё. Да, перекомпиляция может быть частичным выходом — но, будь у нас полный и тотальный опенсорс, жить вообще было бы легче.
                                  2. Несовместимость высокоуровневых абстракций. Любые структуры данных и уникальные концепции языка придётся переводить сначала в термины ВМ, а потом — обратно, причём делать это по каким-то сложным правилам. Эти правила тоже могут (а на длительном отрезке времени — будут) меняться, и в результате мы получим, что в одной версии языка какая-нибудь UTF-строка будет с квадратиками, а в другой — со смайликами. Всё, потеря совместимости, цирк, пиздец.
                                  3. Сложность межязыковых и межверсионных вызовов. Далеко ходить не надо, достаточно попробовать сделать библиотеку с функцией, возвращающей std::string. Спойлер: работать будет только с модулями, скомпилированными одной и той же версией компилятора, на одной и той же машине и с одними и теми же флагами. И то не факт. С сишкой всё было куда проще, потому что по факту в ней не нет никаких высокоуровневых абстракций, а всё что есть — плюс-минус идеально ложится на x86. Она, по сути, просто удобный ассемблер с хорошим препроцессором
                                  Ответить
                                • Вообще, x86 ассемблер — это очень хороший пример, во что такая «Единая ВМ» превратится через 50+ лет. В эпических размеров нагромождение костылей, хаков, тухлого легаси и неортогонального говна.
                                  Ответить
                                • >Почему модули на C, языке без ГЦ, обязательных табов и с указателями вместо ссылок, смогли прокинуть в python?

                                  Питон сочетает лучшее из двух миров: портабельность сишки и скорость интерпретируемой скриптухи.
                                  Ответить
                              • > А если мы говорим про виртуальную машину — то однажды нам таки придётся поломать какое-нибудь ABI — и всё, привет блядскому цирку
                                Поломаются только компиляторы старых версий языка, и их заставят компилировать код под новую ВМ. Может быть, это будет медленней, но это не важно, т.к. рост производительности восполнит эту потерю, а свежее производительное говно будут клепать под новые версии. Но ничего из пользовательского кода переписывать не надо будет.
                                Совсем старые версии будут медленно отмирать как отмерла сейчас 16битная питушня. Но это будет всё равно лучше, чем сейчас, когда твой код не отмирает явно и сразу по чьему-то приказу о конце поддержки, а постепенно становится невалидным из-за множества мелких изменений.
                                Ответить
                                • Да, кстати, ведь сейчас уже есть такая ВМ, называется «Common Language Runtime». Под неё даже куча языков есть с приставкой «#» или «.NET». Но увы, Всеобщего Единения не получилось: её набор инструкций заточен под «C#», для остальных языков это неудобное и ненативное говно. Более того, в общем смысле он заточен под ООП-языки, а потому компилировать в него какую-нибудь, например, функциональщину — абсолютно бессмысленная затея.
                                  Ответить
                                  • И все эти языки по сути клоны C#.
                                    Почему?

                                    Для связки языков нужны некие интерфейсы.

                                    Вызовы старых кодов js (как стандарта де-факто) будут возвращать «новым» «улучшеным» версиям языка jsные объекты. Потому что ничего другого там нет.

                                    А это старые-добрые костыльные мапы с valueOf и toString.

                                    То есть из «нового» языка всегда будут торчать уши старого.

                                    Потому сишка до сих пор — основа. Минималистичная и божественная.
                                    Ответить
                                  • Потом, если в baseline-языке есть out-параметры, и они торчат наружу из интерфейсов, то во всех остальных языках придётся иметь out-параметры.

                                    Если baseline язык использует исключения, придётся везде иметь исключения (-fno-exceptions никто не будет пилить).

                                    Если там есть рефлексия или рантайм инфа по типам, то и её нужно везде поддерживать.

                                    Если есть именованные аргументы — без них ABI опять поломаются.
                                    Ответить
                                    • Подтверждаю.

                                      Добавлю ещё всякой ООП-питушни.
                                      Множественное наследование, наследование реализации, интерфейсы, миксины;
                                      Поддержка свободных функций. В «Java», например, нет никаких «функций» (только «методы»), и именно поэтому в «JVM» у инструкций invoke* есть обязательный параметр объекта/класса. Хочешь компилить под «JVM» язык со свободными функциями — изволь городить ёбанные костыли со скрытыми классами-пространствами имён.
                                      Модификаторы доступа — начиная тем, что в каких-то языках могут быть более хитрые модификаторы, типа недавно обсуждавшегося на «ГК» «strict_private» (поля, к которым есть доступ только из «private» методов), и заканчивая языками с полным их отсутствием.
                                      В общем, так можно продолжать до бесконечности, а решение всех этих проблем было придумано давным-давно: спуститься на несколько уровней ниже, где ничего, кроме байтов, и нет. А над всеми этими питушарскими абстракциями пусть конпеляторы пыхтят.

                                      Ах да, и чтоб гомоиконы!
                                      Ответить
                                      • >чтоб гомоиконы

                                        Что это такое?

                                        В каждом треде какой-то ФП-мемчик, который я пропустил.

                                        Сепульки какие-то нетрадиционной ориентации?
                                        Ответить
                                        • Не слыхал о таких.
                                          Ответить
                                        • Это Философский Камень и Великая Мечта j123123, которую он впервые обнародовал в https://govnokod.ru/15967#comment232055. Гомоиконы всё исправят, всё пофиксят, и написать любую программу на любом языке с ГОМОИКОНАМИ (такое написание, кстати, является каноническим) будет так же легко, как выпить чашечку кофе.
                                          А вот — главный артефакт гомоиконистов, Первая Гомоикона:
                                          (((L I S P )( L I S P ) ( L I S P ) ( L I S P )))
                                          * (     \             \            )    \       *
                                          B(       )             \          )      )      B
                                          e(       `.             )         )       :     e
                                          a`        )             )        \)       )     a
                                          t \       ) )       )  \\\   --__ \\       :    t
                                          i  \      \)   _--~~          ~--__) \     )    i  
                                          n   \      \_-~                    ~-_\    )    n
                                          g    \_     \        _.--------.______\)   )    g
                                                \     \______(( _ ___ _ (_(__H  \   )      
                                          t      \   .  S ___)  ______ (_(____t  )  )     t
                                          h       (\ )   I ____)) APPLY\ (_____D  )_)     h
                                          e      ( (\)   C_____)  EVAL )  (___P   )  \    e
                                                (   (   _P_____)\______)  )) _) )     \    
                                          a     (    \  )__   \\_________)) (__)       )  a
                                          v    ( \    \____)   `----   --'             )  v
                                          e    (  \_          ___\       )_          _) ) e
                                          r   (              )    (     )  \            ) r
                                          a   (             )    (   λ   )  \           ) a
                                          g   (          ) )    (         )  \           )g
                                          e   (         ) )      (__)(___)    )          )e
                                          s  (           )        (    )       )         )s
                                          *  (          )         (    )       )         )*
                                          (((L I S P )( L I S P ) ( L I S P ) ( L I S P )))
                                          Ответить
                                          • >А вот — главный артефакт гомоиконистов, Первая Гомоикона

                                            ЛООООЛ. Вот теперь всё стало ясно.
                                            Картинка вместо тысячи слов.

                                            >Это Философский Камень и Великая Мечта j123123

                                            Н-н-н-нооо тут есть логическое противоречие.

                                            В сиподобных языках, реализация гомоиконности мне кажется принципиально невозможной. Это как постройка вечного двигателя.

                                            Именно в силу царской императивности и нерегулярности синтаксиса.

                                            Ответить
                                            • > Это как постройка вечного двигателя.
                                              Скорее как поиск девяти миллиардов имён Бога. Стремление к Абсолюту, к Вечности.

                                              https://ru.wikipedia.org/wiki/Девять_миллиардов_имён_Бога
                                              Ответить
                                              • Кларк заимствовал идею из ислама.

                                                У Аллаха, мир Ему, C99 имён.

                                                >Стремление к Абсолюту, к Вечности.
                                                Так это и есть С++. Должен быть миллион парадигм. Одновременно ноль, одна, сто, девять миллиардов и бесконечность.

                                                Это помогает понять суть и даёт умение облекать её в произвольные формы.

                                                Разные парадигмы, в которых можно сказать одно и том же.

                                                С++ учит мыслить шире и не привязываться к синтаксической конкретике, помогает уйти от операторов к голым идеям и архетипам.

                                                Как учил Платон, который доработал сишный идеализм Сократа, в объективный идеализм.

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

                                                https://ru.wikipedia.org/wiki/99_имён_Аллаха
                                                Ответить
                                            • > В сиподобных языках, реализация гомоиконности мне кажется принципиально невозможной.
                                              Так а в чём проблем? Дать доступ пргорамме к своему АСТ.

                                              Или можно сделать как в форте, дать программе доступ к исходнику, переменным и подпрограммам транслятора и конпелятора, дать доступ к мискоуровневому коду.
                                              Ответить
                                              • >Так а в чём проблем?

                                                Наипервейшая проблема в том что нотация инфиксная. То есть код невозможно выразить как формат данных.

                                                Это не лисп где нотация префиксная, и не форт, где она постфиксная.

                                                >Дать доступ пргорамме к своему АСТ.
                                                Это не будет гомоиконность. Мы должны манипулировать не АСТ, а исходными кодом-данными. Должен быть так сказать self-eval.
                                                Ответить
                                                • Так а в лишпе ты тоже не исходным кодом оперируешь, ты оперируешь уже готовыми списками которые получены из исходного кода, и синтаксис которых ты не можешь изменить, можешь только мутить что-то на их основе. С аст та же питушня, только по более сложным правилам.

                                                  А если делать гомоиконы по образу форта, то уже будет реальный доступ и к исходному, и к скомпилированному коду, ибо гомоиконы там царские, императивные и низкоуровневые: в нём есть доступ к сырому исходнику, как к байтам в памяти, такой же доступ к скомпилированному коду, к записям в словаре и т.д. Вдобавок форт могут парсить сами же фортовские определения по мере исполнения, т.е. в форте нотация постфиксная только для начального набора слов, и то не для всех, многие слова являются префиксными, особенно определяющие слова, так же есть слова берущие аргументы сразу и из стека, и из исходного кода — эти слова вполне можно считать инфиксными. Т.е. в отличии от лиспа и всех прочих языков в форте нет ни какого-то фиксированного синтаксиса, ни даже фиксированного лексического строения, в программе на форте можно встретить абсолютно любую конструкцию и охуеть, я даже встречал интерпретатор васика на форте, который являлся просто набором форт-слов, такую же питушню можно проделать и для си-подобного синиаксиса.
                                                  Ответить
                                          • wvxvw не даст соврать:

                                            >Гомоиконных фортраноподобных языков не может быть по определению (т.как в доисторические времена, люди которые планировали Алгол считали, что язык должен состоять из трех уровней, "машинного кода", т.е. непосредственно набора инструкций, "обобщенного представления", т.е. непосредственно правил языка, "конкретных интерпретаций" правил языка, например, локализаций, экстрапозиций и т.д.)


                                            Реально за все эти годы я осознал, что Философский Камень всегда был у нас в кармане — и это С++
                                            Ответить
                                      • Просто не понимаю главного аспекта: как совместить гомоиконность с быстрым исполнением кода.

                                        Лисп-машины остались лишь фантазиями wvxvw. Может какая-то извращённая форма AOT. Однако неизбежно остаётся интерпретируемый eval.

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

                                        Но опять же... Слишком широкое понятие.
                                        Ответить
                                      • C без ОО, без именованных аргументов, без ГЦ. Pythob - с ними, но прокинуть удалось.
                                        Думаю, обратно тоже можно прокинуть, если нужно.

                                        А уж сделать такое, когда вся логика компиляторов подчиняется тебе, вполне реально.

                                        * Исключения - обернуть try-catch и кодом возврата,
                                        * кодам возврата сгенерировать исключения,
                                        * имена классов вписать в имена методов, если классы были, не не стало,
                                        * сгенерировать класс по имени файла, если классов не было, но появились,

                                        Главное - чтобы старый код внешне работал как раньше, а новый уже может в случае смены парадигмы приспосабливаться и вызывать fileX_Pitux22E1_kokok(&p) из старой библиотеки вместо p.kokok();
                                        Ответить
                                        • >C без ОО, без именованных аргументов, без ГЦ. Pythob - с ними, но прокинуть удалось.

                                          Да нихера не удалось. Точнее удалось вызвать менее мудрённый язык из более мудрённого.

                                          Но для этого не надо много ума.

                                          Питух вызывает Сишку, но не наоборот.

                                          Сишка — основа.

                                          Питух не может быть основой, ибо это анскильная скриптуха.

                                          В противном случае питух3 пилился бы на основе питуха2.
                                          Ответить
                                • >Поломаются только компиляторы старых версий языка, и их заставят компилировать код под новую ВМ

                                  Не хотелось разрушать ваши фантазии, но дело в том что совершенно разные языки не смогут гладко взаимодействовать между собой.

                                  Это профанский взгляд человека, который никогда не линковал/перелинковывал разные abi с разными вызовами.

                                  У нас есть бибилотека собранная под процессор интел. Она написана на языке с определённой фичей (например exceptions).
                                  Мы пытаемся слиниковать её с другим языком где этой фичи нет.
                                  Какой выход из ситуации?

                                  Или у нас есть исключения, но на уровне VM реализованы они с разной семантикой (dwarf, sjlj).
                                  Ответить
                                  • Сделать такое, когда вся логика компиляторов подчиняется тебе, вполне реально.

                                    Гладкое взаимодействие не нужно. Старый код должен работать как раньше, новый код может использовать костыли для вызова старого.
                                    Старый код может вызываться через дополнительные абстракции, т.к. он был написан под старые машины, которые требовали меньше.

                                    ABI не нужно. У нас же браузер, компилятору все исходники доступны. Совместимость версий проверена авторами компилятора, код просто компилируется новым компилятором и работает.

                                    Да, будут ситуации, когда какой-то пидор использовал недокументированную питушню, и его код сломался, но его предупреждали.
                                    Ответить
                                    • >У нас же браузер, компилятору все исходники доступны.

                                      Эээ. Изначально речь, насколько я помню была о VM.

                                      Там уже не будет исходников, а будет скомплированная в байт-код новомодная скриптуха. Причём совершенно произвольная.

                                      В теории много разных скриптух, оперирующих разными парадигмами будут конпелироваться в единый байт-код.
                                      Ответить
                                      • Изначально речь шла о VM. Я, правда, всё это время подразумевал и, к сожалению, не писал, что исходники желал бы иметь, как и в современном вебе.

                                        Идея была в том, чтобы иметь возможность перегонять исходники в VM всё более и более свежими компиляторами, а байткод под VM уже единообразно оптимизировать/исполнять/кобенировать каким-нибудь мощным питуизатором. Так, чтобы компиляторы в байткод были наиболее простыми, и всякая сложная питушня, связанная со строением VM и алгоритмами питуизации, менялась редко и мало.
                                        Ответить
                                        • Ты только что описал мир джавы.
                                          Ответить
                                          • Там старые сорцы собираются старыми компиляторами и не приходят в негодность из-за накопления мелких изменений языка?
                                            Ответить
                                            • Там даже сорцы собранные новыми конпеляторами можно запустить на древней JVM. За 16 лет одну инструкцию добавили, и та не для джавы.
                                              Ответить
                                              • Зато я постоянно натыкаюсь на программы, которые работают только в восьмой джаве… или только в седьмой… или в одиннадцатой, а в старых не работают — и так до бесконечности. А ёбанный адобе взял да скрыл старые архивы JVM. В итоге чтобы запустить какое-то старое говно нужно лазить по файлопомойкам в поисках подходящего говножвма.

                                                Говно это.
                                                Ответить
                                                • Дык это в либах проблемы, а не в JVM.
                                                  Ответить
                                                • > которые работают только в восьмой джаве… или только в седьмой… или в одиннадцатой

                                                  Есть такое. Но мало того.

                                                  Они же в последних версиях сломали компиляцию старых исходников. Write once — ебись everytime.

                                                  Если раньше был валидный ява-код, использующий например переменную-подчёркивание _

                                                  То в новых версиях явы он тупо не скомпилится.
                                                  Ответить
                                                  • javac -source 1.7 -target 1.7 my_legacy_code.java
                                                    Ответить
                                                    • Умеют, могут. Осталось 1.7 сделать как-нибудь прозрачней (шебанг или атрибут script) и можно в веб запускать.
                                                      Ответить
                                          • Причём джаву изначально как раз и делали под вёб.
                                            Ответить
                                            • Удобно наверное было: и клиент, и сервер на одном языке. Жалко сейчас такого нет.
                                              Ответить
                                              • Для тебя целый Apache Thrift придумали и всякие там gRPC, чтобы ты мог писать клиент и сервер не на одном языке, а оно всё равно б работало! Так что не надо ныть
                                                Ответить
                            • >Так почему с C на Python переписывать не надо было

                              Потому что получилось говно непортабельное. Есть ВМ машина, и есть нативные костыли из сишных либ.

                              Реально единственная вещь где ничего не нужно было переписывать с сишки — это кресты. И то, здесь их все регулярно обсирают.
                              Ответить
                    • Нет, не осуществимо. Ты можешь сколько угодно упрощать интерфейс «человек-машина», но это никак не сделает тупых макак умными. А тупые макаки ничего умного создать не могут просто по определению.
                      Ответить
                      • Даже тупая макака чему-нибудь учится. Можно сделать кривую обучения более гладкой, чтобы макака росла над собой незаметно для себя.
                        Ответить
                        • Главное отличие тупой макаки от человека в том, что макака в принципе не учится. Она пишет гостевуху с инъекциями и течёт. Она писала говно десять лет назад, пишет сейчас — и через десять лет будет писать точно такое же говно. Ей в принципе не надо обучаться, она этого не хочет, ей это нинужно. Она осознанно не желает учиться, ей достаточно копировать код с «SO».
                          Ответить
                          • Именно поэтому я за «PHP».
                            Ответить
                          • Не может быть. Макака учится, как минимум, в современных супермаркетах, где раз в некоторое время делают большую перестановку. После перестановки макака учится находить продукты, между перестановками закрепляет знания.

                            Ну и если макака уже научилась нагугливать работающий код на SO, научилась вставлять его в нужные места, это говорит о её потенциале и способности учиться.
                            Ответить
            • >для тупых питухов-неосиляторов

              Оно изначально нацеливалось на заедушников.

              В самом прямом смысле этого слова.

              HTML делали для биомусора, который «пишет» «сайты» за жратву.
              Ответить
    • Распарсил твой анус и извлёк оттуда много полезного - вот, проверь.
      Ответить
    • > Парсить HTML регулярками — нельзя.
      Питушня теоретиков, оторванных от жизни. Уууух, как бесит!

      Вариант 1. В Perl, PHP, boost::regex можно рекурсивными питухами описывать ко-ко-контекстно-свободную питушню.
      https://www.boost.org/doc/libs/1_64_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html#boost_regex.syntax.perl_syntax.recursive_expressions

      Вариант 2. Часто, как и в обсуждаемом коде, регулярки используются внутри кода под машину Питуринга, который уже может парсить всё, что угодно.

      Вариант 3. Используется не сам HTML, а его подмножество.

      Вариант 4. Парсить надо не весь HTML, а его подмножество.
      Ответить
      • Ничего, скоро из всех браузерных движков останется только хромоподелие, после чего Гугл сделает нам новый веб, учтя ошибки прошлого
        Ответить
        • Случиться может что угодно. Вот будет багор, если «Гуглу» надоест!

          https://cs.pikabu.ru/post_img/2013/07/10/0/1373402952_1118716031.jpg

          https://edge.alluremedia.com.au/m/g/2013/03/ggrave.jpg

          http://www-bgr-com.vimg.net/wp-content/uploads/2011/11/7723.Google_Graveyard2.jpg-550x0.jpg
          Ответить
          • Если не будет Хрома, то где же хомяки будут открывать юТуб, чтобы посмотреть четыре блока рекламы за десятиминутное видео?
            Ответить
          • Ещё все забывают про великолепную «Picasa» (серьёзно, это самый лучший просмотрщик фото: предельно быстрый, очень простой и совершенно не перегруженный ненужным говном) и «Google Inbox», который запускали с огромным пафосом, закрытой бетой, инвайтами (кажется, их даже продавали поначалу!) и всем таким… а потом тихо слили в унитаз.
            Ответить
            • >лучший просмотрщик фото
              >предельно быстрый, очень простой и совершенно не перегруженный ненужным говном

              Geeqie
              Xnview-mp
              Ответить
              • Вот я со своей «Пикасой» два раза щёлкаю по фоточке — и она мгновенно появляется на полупрозрачном затенённом фоне. Я её могу подвигать, позумить (с очень красивым анимированным изменением масштаба), убрать фон и оставить висеть маленьким окошком, развернуть в фуллскрин. А тот же «Xnview», который я только что проверил, сразу открывает несворачиваемый фуллскрин, на колёсике мышки имеет листание фоток вместо зума (зачем? зачем?), фотку подвигать не даёт, в левом верхнем углу показывает какую-то дрисню, да ещё и после закрытия оставляет висеть какое-то говноокно. Это неудобно.
                Нет, я не спорю, что эти комбайны наверняка дают куда больше возможностей по организации галерей, систематизации гигабайт фотографий и тому подобное — но вот этого предельного функционального минимализма, который был (увы, в прошедшем времени) визитной карточкой «Гугла», у них нет.
                Ответить
                • > листание фоток вместо зума (зачем? зачем?)
                  Мерзкая питушня. Привязывать что-то такое к колёсику - грешновато. В самой Windows есть настройка, сколько у.е. значит один щелчок колеса. Но есть ведь ещё и тачпады, где собственное ПО может оверрайдить эту настройку и накручивать какую-то логику. Но что важно, если даже на мыши можно легко прокрутить больше, чем надо, на тачпаде ты вовсе не чувствуешь, что есть один щелчок, а что - много.
                  Колёсико мыши - зло.
                  Ответить
                • >на колёсике мышки имеет листание фоток вместо зума (зачем? зачем?), фотку подвигать не даёт, в левом верхнем углу показывает какую-то дрисню

                  Это настраивается.
                  В нём оч. удобно сразу редактировать фотки, типа обрезать JPEG без потерь.
                  Ответить
                  • > В нём оч. удобно сразу редактировать фотки, типа обрезать JPEG без потерь.
                    Да, это я заметил, когда пытался сдвинуть фотку к краю экрана.
                    Ответить
                  • > обрезать JPEG без потерь
                    Это как в ворде, когда посылаешь резюме с твоим фото по грудь, а ихний админ вдруг узнаёт всех твоих друзей-бухариков и обстановку вашего гаража?
                    Ответить
                    • Какой багор )))

                      Надо будет орнуть и так сделать в следующий раз.
                      Ответить
                    • Нет. Это удаление ненужных рядов пикселей из jpega, без его зожатия ебаными шакалами.

                      Короче, не происходит Generation loss. То есть не проводится iQ+iDCT => raw => DCT+Q.
                      Ответить
                      • А это круто. Так только «Xnview» умеет, или ещё кто-нибудь?
                        Ответить
                        • 1. https://jpegclub.org/jpegtran/
                          2. https://jpegclub.org/losslessapps.html
                          3. https://www.betterjpeg.com/crop.htm

                          Оно также умеет делать loseless rotate 90/180/270

                          И resize 1 к 8.
                          Ответить
            • А помнишь, как «Гуглоплюс» слили в унитаз?
              Ответить
            • >«Google Inbox», который запускали с огромным пафосом, закрытой бетой, инвайтами (кажется, их даже продавали поначалу!) и всем таким…

              Так же и Google+
              Ответить
              • Клёвая система инвайтов была: вбиваешь чей-нибудь е-мейл в поле для отправления инвайта, «Гуглоплюс» показывает имя и аватарку пользователя и вроде даже ссылку на его страницу. Великолепное средство деанона по е-мейлу, просто кнопку сабмита нажимать не надо.
                Ответить
                • Ну это питушня какая-то.

                  Когда нормальный человек регистрирует почту, он подразумевает, что с ней связаны имя-фамилия, которые будут стоять в поле From. Обычно это Иван Иванов <[email protected]> Иначе заводить почту не требуется, т.к. теряется вся суть. И если кто-то узнал, что [email protected] принадлежит Ивану Иванову, то это просто удобно, и удобно как для Ивана Иванова, так и для его адресантов.

                  Когда человек хочет остаться анонимным, он создаёт учётную запись почты с логином, который не напоминает о его имени и вводит фэйковые имя-фамилию. Разве не логично?
                  Ответить
                  • С недавних пор везде подписываюсь Романом Кашицыным.

                    На сайтах гугла ещё почему-то иногда скидку предлагают.
                    Ответить
                    • Кстати, он жив. Сегодня что-то написал про "Haskell": https://habr.com/ru/post/484436/#comment_21168616
                      Ответить
            • Из тех списков:
              • «iGoogle» — это самый настоящий проект «веб-джва-ноль». Ты мог собирать страницу из виджетов. Что-то типа расшаренного рабочего стола. Таких проектов было немного. У «Яндекса» и у «Яху» было что-то аналогичное, были отдельные проекты «Pageflakes» и «Netvibes». Последний вроде даже живой.

              Всё прочее, что называют «вебджванольным», на самом деле не передаёт суть «Web 2.0».

              • «KNOL» — было столько шума. Называли убийцей «Википедии».

              • «Google Buzz» — предок «Твиттера» и «Гуглоплюса». Его создатели потом создали «Friendfeed», который был выкуплен и закрыт «Фейсбуком».

              • «Jaiku» — ещё один «Твиттур».

              • «Google Answers» — «Ответы@Mail.ru», только другого поставщика.

              • «Google Talk» — по сути сервер «XMPP» («Jabber»).

              Помню, что много шума было про «Google Wave», но его закрыли сразу после бета-тестирования, так что я даже не успел узнать, что это такое.
              Ответить
              • >Google Wave»
                >я даже не успел узнать, что это такое

                Что-то похожее на гуглдок, с совместным редактированием.
                Ответить
                • Ещё вспомнил: code.google.com перенесли в архив.
                  Ответить
                  • Ага. Кмк единственно полезная и годная штука из этого списка.

                    Оно ж появилось раньше гитхаба. И было гораздо удобнее svn-sourceforge.

                    Ещё у них была воистину охуенная задумка, сделать поиск по соц. сетям типа Яндекс.Блогов. Google Blog Search. Но её закрыли.

                    Теперь даже в гугловом ютубе хер найдёшь нужный коммент.
                    Ответить
                    • > в гугловом ютубе хер найдёшь нужный коммент
                      Слава богам! Там обычно пишут такое, что не то что найти не хочется, но наоборот - только развидеть и больше никогда не встречать.
                      Такое ощущение, что аудитория Ютуба по большей части - идиоты. И тут даже не надо говорить о "давайте зарядем мобильник автора адин лайк адин працент". Даже к приличным видео популярны метакомментарии "а что просмотров меньше, чем лайков" или "90% комментариев про А, 10% про Б" или "никто: абсолютно никто: автор: <какая-то херня>" и подобное. И все они повторяются. Отдельный шик - повторять одну и ту же быдлошутку по быдломему.
                      Ответить
                      • Какой багор )))
                        Ответить
                        • Ага. Логическая цепочка из разряда: на ГК конарды пишут про всякие багры.

                          Потому поиск по комментам ГК «нинужен»
                          Ответить
                          • А то. Впрочем, может ещё удобный поиск по /dev/urandom нужно реализовать?
                            Ответить
                          • Однако же в большинстве случаев комментарии на трубе это действительно треш и угар. Зависит от их количества: чем больше, тем меньше адекватности.

                            Плюс там у них дебильный по своей природе принцип по умолчанию показывать первыми самые залайканные комментарии.
                            Ответить
                      • Ээээ.
                        Компания, имя которой мутировало в глагол, обозначающий интернет-поиск, не может сделать нормальную индексацию текстовых комментариев НА СВОЁМ же сайте.

                        Мне одному кажется, что здесь какой-то подвох?

                        >что не то что найти не хочется, но наоборот - только развидеть и больше никогда не встречать

                        Просто не надо искать такое.

                        >или "никто: абсолютно никто: автор: <какая-то херня>" и подобное

                        Меньше надо смотреть видео «в трендах».
                        Не знаю, но лично мне такие коменты почти не попадаются.
                        Ответить
                      • И собаку эту не трогай.
                        Ответить
                    • «Яндекс» кастрировал свой поисковик по блогам. Теперь он не ищет комментарии старше 30 дней.

                      А когда-то было ещё несколько автономных поисковых систем по блогам и по форумам, но их тоже закрыли.
                      Ответить
                      • >«Яндекс» кастрировал свой поисковик по блогам. Теперь он не ищет комментарии старше 30 дней.

                        Да. После того как Волож умер они скурвились.

                        Раньше Яндекс помнил по 10 лет, всё. Даже удаленные посты и записи.

                        А теперь остался только ljsear.ch
                        Ответить
                  • А, ещё Code Search был.
                    Ответить
              • Google Allo ещё и Duo.
                Ответить
                • Ещё была такая дрянь как Google Gears.

                  iGoogle стилизация странички поиска.
                  Ответить
              • Подтверждаю. Даже помню, как расставлял виджеты с погодой и новостями. А уж как весело было на «Ответах»… Да, хорошее время было.
                Ответить
                • Да, ВиОшечку тоже жалко. Хоть я туда ничего и не писал.

                  Зачем они берут труд миллионов людей, а потом просто всё закрывают?

                  Неужели у гугла места мало? Я уверен что они всю поступившую к ним инфу сохраняют и не стирают ничего вообще.
                  Ответить
                  • > Зачем они берут труд миллионов людей, а потом просто всё закрывают?
                    - 90% индустрии так работают. Дурные деньги, сэр.
                    Ответить
                  • Зачем? Зачем?
                    Ответить
      • показать все, что скрытоvanished
        Ответить
        • Это уже зависит от конкретной реализации и конкретного читателя.
          Например, x = /<b>(.*?)<\/b>/ легче понять, чем раздутую грамматику XML или даже возню с нодами после парсинга стандартным парсером.
          Ответить
          • Ну так это слишком примитивный пример. Вот, например, код из поста ГК Борманд парсит так:
            post_node.xpath('div[@class="entry-content"]/pre/code')[0].text

            Регулярка для этого будет выглядеть пиздецом и, наверняка, тормозить.
            Ответить
      • Нельзя не потому, что теоретические ограничения есть, ,͉̬͉͚̩͙ а͇͚́ ̫ͅп̶̞̰от̝̮о̫͕̹̩͕̥̭м̦̭̤͖̝̞̙у̪̯ ̣͡ч̱͘то̢ ̮̖̮͞е͏̶̖͓̥̞с̴̩̣͜л̡͓̣̳͘и̙̮͖̰̗ͅ ͉͙̗̹̹̝̜͙͜т̵̶̰̗̥̬а̮̤̰͎̕к̨̭̙̰͠͠ ̡̛͕̹́д̧͚̺е̴̝̬͍̘̘̕л̶̺̰а̳̣̪̤̣̮̺̣͕т̹͍͕̦͈̣̖͝ ь͖̬̠ ̘͔͢—̤͎͕͕̫̠ ̯̠̫̟̗̀͞т͚̪͟͟͝о̱̀ ̴̠̪̠̗̦м͓̰̦͔̘̭̻̈ͦ̈͗̂̓͢͞о̽̆̌͊ͫ̋͜҉̠̣̪̹ж̷̠̓͗ ͇̤е̭̖̝̲͈̬̲̙̑ͣͣ̾ͥт̗͈͇͕̘͍͆̓͐̇̐͂ͧ̋͢ ͚̩̈͋ͮ̂̅͒п̡̺̳̜͕̀ͬ͜р̦̺͚̘̙̬͕̼ͦͤ́и̡͍ͮ̇̊̌̍ͮ̄͘ ̻й̛̯͓̼́̈̋̌̏̿ͫ͠ͅт̪͙͇͎̣̟̬̓ͨ̉ͭ̉͊͗ͅи̝̟̋̄ͩ͑ͧ̚ ̖̞̠̳̮ ̢͇̠̟͉͎̝̺̹̼̈̓ͪ̈́͐ͬ̆̃́О̧̠͇̭͔̲͍̹̒̈Н̶̝̫͛́̃̇̓. ̧͛ͮͧ͋̀̓ͮͪ͏͎̹̤̬̘̲̳̺̟
        Ответить
    • показать все, что скрытоvanished
      Ответить
      • > Ну ты дебил.
        А я при чём? Это к разработчикам «f-строк». А r да, надо на rb заменить.

        > lxml пробовал?
        >>> Я даже больше скажу: сейчас содержимое [code] — тег <pre> — в постах вываливается внутрь описания, которое из себя представляет элемент <p>. А внутри <p> использовать блочные теги нельзя. Такой HTML — невалидный. Умный же браузер (и столь же, мать его, умный lxml.etree.HTMLParser) просто тихо закрывает тег <p> перед <pre> — поэтому в сток и попадал только текст.
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • При том, что «f-строк» для байтов не завезли, а «b'<{' + new_tag + b'} class="description">'» я посчитал бо́льшим говном.

            > Я там вроде написал
            Не нашёл, проверь.

            > тестовыми данными
            HTML-код https://govnokod.ru/26373.
            > рабочий проблемный кусок
            «parse_post» в NGK до последнего коммита. Ну или можешь открыть https://govnokod.ru/26373 в браузере и в «Инспекторе элементов» полюбоваться на <p>, закрытый сразу перед <pre>. И на «<p></p>» в конце.
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • Так процент устаревшим говном объявлен. А нового для байтов не подвезли.
                Ответить
                • Обнови процент и используй.
                  pip3 update %
                  Ответить
                  • ERROR: unknown command "update"


                    pip install --upgrade %

                    ERROR: Invalid requirement: '%'


                    Какой багор )))

                    Кстати, почему в первом сообщении об ошибке кавычки двойные, а во втором — одинарные? Почему первое с маленькой буквы, а второе — с большой? Почему двоеточие только во втором сообщении? Разные люди писа́ли обработку ошибок?
                    Ответить
                    • А в «Python» вообще с самосогласованностью беда. Тяжёлое наследие времён, когда он писался на коленке в одно рыло. К счастью, Гвидо оказался поумнее Эйха, а потому совсем уж вонючего дерьма наклал не много. Сейчас в основном остались мелочи и багры с именованиями, вроде задепрекейченных Thread.getName()/setName() и незадепрекейченных PrettyPrinter.isreadable() с heapq.heappushpop().
                      Ответить
    • Рагуляркм не нужны, в Сноболе прекрасно без них жили, тем более хтмл не рагулярен:
      BEGIN
          SOURCE = "<p>bla<p>bla bla</p></p>"
          TAG_CONTENT = ARB *TAG ARB | ARB
          TAG = "<p>" TAG_CONTENT "</p>"
          SOURCE TAG . OUTPUT
      END

      ARB — наименьшая строка произвольных символов
      *TAG — отложенное вычисление, значение TAG получают только при обращении к TAG_CONTENT, это нужно чтоб работала рукурсия в паттерне
      | — наверное и так понятно, что это "или"
      SOURCE TAG — собсно сам паттерн матчинг.
      Точка присваивает совпадение в переменную справа, OUTPUT — "переменная" для вывода.
      Ответить
      • Нидлесс, ты — Лунная пони Нидлесс! Я тебя по СНОБОЛу вычислил.
        Ответить
        • Меня можно было и по грватару вычислить, иньо даже запилил сервис для этого.
          Ответить
          • Мы не ищем лёгких путей. А вдруг кто-то учётку «Граватара» увёл?

            По «СНОБОЛу» вычислять надёжнее.
            Ответить
            • Подтверждаю. По этой версии я «инканус».
              Ответить
              • Граватар пользователя gostinho неизвестен.

                База обновляется вручную?
                Ответить
                • Нет. Она вообще не обновляется для старых питухов.
                  Ответить
                  • Какая дискриминация!
                    Ответить
                    • У меня для тебя 2 новости, хорошая и плохая.
                      Начнём с хорошей: тебе не светит угодить в суп, так что кип ю чен ап!

                      Новость №2: жаркое из тебя получится вкусным...
                      Ответить
    • показать все, что скрытоvanished
      Ответить

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