1. Kotlin / Говнокод #27087

    +1

    1. 1
    2. 2
    Currently it's hard or even impossible to use hexadecimal literal constants that result in overflow of the corresponding signed types. 
    https://github.com/Kotlin/KEEP/blob/master/proposals/unsigned-types.md

    какой пиздец!!!

    Запостил: MAKAKA, 06 Ноября 2020

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

    • В жабе, как мы знаем, не бывает unsinged интов, а инты иногда используются в качестве четырехбайтовых контейнеров (потому что джава писалась под 32хбитные системы)

      В Swing и CEF и много где еще нас встречает такая цветовая модель: ALPHA_R_G_B. Четыре байта.
      И её с удовольствием кодируют интом.

      В качестве числа этот инт выглядит тупо, но всем похуй, ведь можно смотреть на него как на 4 байта:
      int argb = 0xCA_FE_BA_BE;
              System.out.println(Integer.toHexString(argb & 0xFF_00_FF_FF)); //отлично выпилил "FE"


      И тут а арене появляется котлин, который рассуждает так: хексовые константы всегда должны превращаться в положительный signed int, если пользователь явно не заказал минус слева, иначе пользователь запутается.

      Так что
      val f:Int = 0xCA_FE_BA_BE // не компилируется

      Что же делать?
      Можно написать так
      val argb = -0x35_01_45_42


      Очень удобно конечно, но я пожалуй напишу этот кусок кода на джаве

      seo: котлин сосет хуй
      Ответить
      • А если просто кастануть?
        Ответить
        • понял тебя
          val argb: Int = (0xCA_FE_BA_BEL).toInt()

          да, так можно

          Берем литерал для лонга и кастим его

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

              На винде я бы слинквовал ее статически, чтобы потом не ставить CRT на старые системы.

              На прыщах, кажется, этого делать не нужно.

              Если я линкую ее динамически, то имею
              linux-vdso.so.1 (0x00007ffdfe2d2000)
              libc.so.6 => /lib64/libc.so.6 (0x00007f27ed42e000)
              /lib64/ld-linux-x86-64.so.2 (0x00007f27ed7f7000)

              насколько я понимаю:
              * vdso ядро мапит в адресное пространство всех процессов, через него либси определяет как делать сискол (через прерывание или сисентер)и там же кеширует всякую фигню типа текущего времени, чтобы выдавать его вообще без сискола.
              * либси имеет soname .so.6 с 1997-го года, и анлайкли поменяется в этом веке, и ABI ее тоже стабилен
              * ld-linux это загрузчик динамических бинарей, и он тоже стабилен по soname/abi

              Короче, делать gcc -static совсем не нужно.
              Ответить
              • Циферка в ABI вроде гарантирует только backward compatibility, работу на более свежих дистрибах. Она нужна чтобы можно было положить абсолютно несовместимую версию 7 рядом с версией 6.

                А вот forward гарантии нету. Поэтому тебе придётся взять самые древние либцы, которые ты хочешь поддержать и собираться об них. Иначе есть риск заюзать свежую функцию, которой в каком-нибудь окаменелом редхате нету. Ну или хотя бы потестировать там.
                Ответить
                • А лучше всего писать свои программы на брейнфаке - интерпретатор брейнфака потом любой лох написать сможет, хоть через миллион лет. И никаких либцов там нет.
                  Ответить
                  • А лучше всего вообще не писать программы, через миллион лет они всё равно никому не нужны будут.
                    Ответить
                  • Кстати, а есть фон-неймановские реализации брейнфака? Чтобы код хранился на ленте и можно было его на ходу патчить.
                    Ответить
                    • https://soulsphere.org/hacks/smbf/

                      > As a result, it is possible to write programs which modify themselves while running. This feature also brings introspection abilities (sometimes called "Reflection" or "Reflectance"), allowing Brainfuck programs to read their own source code.

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

                  Как же сделать так, чтобы моя программа по всей-всей-всей чеховской кибальчеховской работала?

                  Собрать ее двадцатилетней давности тулчейном?
                  Ответить
                  • Ну у тебя же только свой код? Тогда можно просто аккуратно не юзать свежие фичи и потестировать, что оно грузится на чём-нибудь древнем.

                    З.Ы. А вот статически линковаться видимо только тулчейном 20-летней выдержки.
                    Ответить
                    • Свой, я жыж показал секцию импорта.
                      Из фич там
                      #include <resolv.h>
                      #include <stdio.h>
                      #include <arpa/inet.h>
                      #include <errno.h>

                      тоже не блидинг ейдж, скажем так:)

                      А если я соберусь статически, то вместо ABI glibc я получу ABI ядра, которое развивается динамичнее, и шансы на отсос в RedHat 5.3 будут выше?
                      Ответить
                      • Да, новые глибцы могут не работать со слишком старым ядром, насколько я помню.
                        Ответить
                        • короче, всё заебсь: собранный на ubuntu 20.04 питух запустился на шестой centos, libc версии 2.20 от 2009 года и легендарным ядром 2.6.32.

                          как приятно было увидеть "service" вместо systemd, лол

                          >libc ABIs: UNIQUE IFUNC ABSOLUTE
                          вот это интересный аутпут в libc.so.6 --version, надоп очитат
                          Ответить
                          • Какая совместимость )))
                            Ответить
                            • ХУЙ
                              https://wiki.alpinelinux.org/wiki/Running_glibc_programs
                              Ответить
                              • статика сообщает "Kernel is tool old', азазаза

                                придется собираться статически на шестом центосе

                                Не знаю, зачем нужел алпаин, на всякий случай пожелаю поносу
                                Ответить
                                • allpain заебись
                                  но не для того, чтобы собирать на нем какие-то интересные тебе проги, которые потом запускать на шестом центосе

                                  это минималистичный контейнер со своим особенным глибц
                                  возможностей которого тебе либо хватит, либо нет
                                  Ответить
                                  • дело не в сборке на центосе, а в том, что бинарник, зависящий только от libc (собранный ubuntu2004) не работает на альпайне

                                    Это не гну линукс какой-то, есл итам либси нету
                                    Ответить
                                    • запускать что-либо на альпайне это примерно так же как запускать что-нибудь в WSL

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

                                      Там есть либси, но оно не гну либси. На уровне исходников то совместимо, если тебе какие-то экзотические функции не нужны.
                                      Ответить
                                      • ну да, я неверно выразился

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

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

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

                                            Что мне делать?
                                            Писать на шел/авк не предлагать: там нет нужного мне API, ксожалению

                                            Пока что так
                                            MAPTbIwKA@staroe-govno-centos6 $ gcc -static govno.c -O3
                                            Ответить
                                            • ендюзер давно уже делает docker run your-govno:latest или snap install your-govno и течёт

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

                                              или ты считаешь, что ендюзеру охуенно удобно на 6й (!) центос ебануть бинаря?
                                              какие-то виндузятные паттерны распространения софта, нахуй таких из нашего прыщемирка!
                                              Ответить
                                              • блин, откуда вы знаете, что делает мой эндюзер?

                                                он хочет запустить мое говно на wsl, и потечь. Я ему даю бинарь -- он работает. Всё.

                                                Шестая центость взята в качестве примера древней ОС, накоторой уж если зарбоатет -- то зарабоатет везде
                                                Ответить
                                                • Я хочу запустить твой софт на raspberry pi. Ебись.

                                                  З.Ы. И на китайском андроиде с мипсом.
                                                  Ответить
                                                  • ты не мой юзер) мои хотят конктетно на wsl. А там можно собрать свой дистр, и их много, но они все под x86 конечно, и все x64
                                                    Ответить
                                                    • на WSL разве не убунтовские репы подключил и течешь?
                                                      Ответить
                                                      • WSL бывает из каких угодно дистров: debian, arch, alpine, suse, kali, ubuntu, centos, а есть кастомные дистры даже:(

                                                        https://www.microsoft.com/ru-ru/search/shop/apps?q=wsl
                                                        Ответить
                                                        • пиздец уебки
                                                          лучше бы WCT ставили вместо WSL
                                                          Ответить
                                                        • Короче, моё имхо. Если юзер поставил себе генту или арч - вот пусть теперь ебётся и сам собирает. Умеет ведь.
                                                          Ответить
                                                    • Ну собери им пакеты. Там не так много популярных дистров то.

                                                      Не хватит пакета под экзотику - ну еще один соберешь. Один хуй там все убунту юзают, 99% покроет.
                                                      Ответить
                                                    • Или тупо попроси их поставить питон. Питон во всех дистрах для всл должен быть.
                                                      Ответить
                                                      • >во всех дистрах
                                                        кроме алпайна, дебиана, и вероятно арча
                                                        Ответить
                                                        • Ты хочешь сказать что в репе для дебиана под всл отсутствует питон, поэтому юзер не сможет его поставить?
                                                          Ответить
                                                          • есть, но польщовтаель не будет ничего ставить

                                                            В общем понятно, что без объяснения бизнес-задачи я выгляжу как сёма:) лано, похуй
                                                            Ответить
                                                            • > не будет ничего ставить

                                                              Почему?

                                                              Это явно не домохозяйка, раз осилила поставить wsl и пользоваться его соснолью.

                                                              Ну и wsl не является защищенным серваком, на который лишнее не ставят.
                                                              Ответить
                                                            • так и скажи
                                                              ленивые пидарасы-программисты твоей конторы, не осилившие команды ipconfig /all и не способные запустить PoшerShell, на очередном ремоут митапе решили, что им срочно нужен унисекс божественный бинарь под WSL на арче и алпайне, решающий все их проблемы от сотворения мира, но ставить из локальной репы нормальный пакет с нормальными зависимостями они, конечно, не будут - а просто скопируют с шары \\Distributivy\MakakSoft мышкой и потекут
                                                              Ответить
                                                              • ни ipconfig, ни PowerShell не помогут тебе узнать IP виртуалки с WSL2, к сожалению. А мне нужно было это сделать. Точнее, и это в том числе. Эх... все карты раскрыл
                                                                Ответить
                                                                • Что такое «IP виртуалки с WSL2»?
                                                                  Ответить
                                                                  • WSL2 это виртуалка. Они подключена к виртуальнгому свитчу гипер-ви под названием "WSL". В него же включен виртуальынй интерфейс хоста.

                                                                    У виртуалки WSL2 есть IP адрес
                                                                    Ответить
                                                                    • Когда то и некоторых моих программеров вела дорога приключений с WSL. Теперь у всех прыщи. А у части вообще i3wm.

                                                                      Виртуалки, хуиалки. Скоро виндузятники изобретут вагрант, походу.
                                                                      Ответить
                                                                      • > Когда то и некоторых моих программеров вела дорога приключений с WSL. Теперь у всех прыщи.

                                                                        Ну и отлично. Мелкомягкие сами себе поднасрали по-сути, увеличив поголовье линуксоидов.
                                                                        Ответить
                                                                    • > У виртуалки WSL2 есть IP адрес

                                                                      А разве у линукса в той виртуалке нет какой-нибудь штатной команды для того, чтобы увидеть сетевые интерфейсы и привязанные к ним IP адреса?
                                                                      Ответить
                                                                      • >А разве у линукса в той виртуалке нет какой-нибудь штатной команды для того, чтобы увидеть сетевые интерфейсы и привязанные к ним IP адреса?

                                                                        формально есть ip, но она есть не везде, и не всегда по ней можно понять какой именно интерфейс используется для связи с пиндой
                                                                        Ответить
                  • Ну или перестать играть в прыщепроприетарщика, пусть юзеры сами собирают.
                    Ответить
                    • У юзера может не быть gcc, к сожалению. Там мартышки могут сидеть
                      Ответить
                      • Напиши им руководство про то, как установить gcc и им скомпилить твою хрень (ну и на пожарный случай можешь им и собранную на древнем говне хуйню поставлять, и типа если не работает, обратитесь к системному администратору и пусть он вам скомпилирует).
                        Ответить
            • > Ну да, лонг то ты так уже не запишешь.

              Для лонга наверняка можно как-нибудь из бигинта скастовать.
              Ответить
    • https://stackoverflow.com/users/710951/alba-mendez
      >hi i'm a lesbian catgirl who loves hummus and kernels

      Всех с пятницей
      Ответить
      • Добрый вечер, Alba.
        Ответить
      • О, сестрёнка.
        Ответить
        • Безопасно ли гуглить «catgirl», или лучше не надо?
          Ответить
          • > безопасно

            Ну такое... могут понравиться, будешь потом на своих тян ушки вешать.
            Ответить
        • Привет, сестрёнка! А ты умеешь передавать ману?
          Ответить
          • Обратись к стертору.
            Ответить
            • Ты -- анимешник.
              Ответить
              • Как будто что-то плохое.
                Ответить
              • Я раньше когда в Войне Святого Грааля участвовала ещё нормально, я каждый день двадцать раз ману передавала…
                Ответить
                • Звучит как очередная порнуха на порнхабе.
                  Ответить
        • A catgirl, also known as Nekomusume
          Less common but occasionally seen is the catboy, usually found in yaoi

          теперь меня пугает твой аватар
          Ответить
          • Забавно, что среди картинок про catgirl гугл показывает одного их самых известных catboy'ев.

            Choose wisely, guest6.
            Ответить
            • какая гадость

              давайте лучше про Intel IPP
              Ответить
              • А что IPP?
                Ответить
                • Если я взалкаю супер быстро перевести картинку из, например, pixel interleaved в планары, или например как-то покрутить ей цвета, то верно ли я понимаю, что IPP это удачное решение, умеющее заюзать на полную катушку эти ваши SSE для таких задач?
                  Ответить
                  • Я не знаю, я бы такую мелочь руками написал наверное... Ну или какую-нибудь либу для картинок взял.
                    Ответить
                    • Кстати, о руках.

                      Если бы тебе нужно было преобразовать GBRA в ARGB в большом растре например, аще лучше рпосто в RGB, выкинув нахуй A, то ты бы руками байтики двигал и постарался бы взять какой-то интринсик, который умеет в SIMD? Или тут SIMD не поможет?

                      Хочется сделать это максимально быстро нагнув современный проц
                      Ответить
                      • Ну в sse есть инструкция для шуффла байтов. Но она вроде свежая.

                        А так bswap какой-нибудь, благо конпеляторы паттерн для него норм детектят.
                        Ответить
                        • > Ну в sse есть инструкция для шуффла байтов. Но она вроде свежая.

                          Для случая преобразования GBRA в ARGB будет достаточно и циклического сдвига 32-битного инта, если там 8 бит на канал. https://wandbox.org/permlink/4E2hHJnn52SrCgAZ

                          Конкретные интринсики можно там https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=rol&cats=Shift посмотреть
                          Ответить
                          • А, я там ошибся, там в коде RGBA в ARGB преобразовывается, а надо GBRA в ARGB. Но то тоже решается, тут нужен big endian to little endiaн для 16битных (ну это можно тупо 16-битный кусочек прокрутить на 8). Т.е. https://wandbox.org/permlink/4vmvsmBxGxnUkB7f

                            Т.е. можно сначала циклически сдвинуть 32-бит поебень на 16, потом ебнуть sse для разворачивания 16-бит т.е. чтоб AB -> BA для того-то кусочка. Или сначала свапнуть 2 байта (но уже в другом месте), потом уже прокрутить на 16, то уж один хер.
                            Ответить
                      • > Хочется сделать это максимально быстро нагнув современный проц

                        какой смак в мксимально быстром нагневании современного проца? приятнее максимально нагнувать, а уж быстро или нет ну это смотря у кого какой тайминг.
                        Ответить
                      • > Хочется сделать это максимально быстро нагнув современный проц

                        Предлагаю FPGA
                        Ответить
                        • Да чо уж там, отлить в асике.
                          Ответить
                          • Если байтики GBRA передаются параллельно (по одному LVDS срем G, по другому B и так далее), даже асика не надо. Достаточно соединить в другом порядке.
                            Ответить
                            • И через компонентный кабель на монитор, да?
                              Кто помнит такое?
                              Ответить
                      • > Хочется сделать это максимально быстро нагнув современный проц

                        На такой херне ты в шину памяти упрешься, и на процессор похеру будет.
                        Ответить
                  • > Если я взалкаю супер быстро перевести картинку из, например, pixel interleaved в планары, или например как-то покрутить ей цвета, то верно ли я понимаю, что IPP это удачное решение

                    Если тебе это надо делать перед выводом на экран, то GPU с этим влегкую справится, и никакое IPP и SSE тебе нахуй не надо. Если ты оффлайн конвертируешь некое говно(например, видео какое-то переводишь в другой формат), скорость тебе скорее всего не очень критична, и на SSE и прочую парашу похеру. А если тебе надо в реалтайме и без GPU и чтоб low-latency, это можно решить аппаратно.

                    Лучше опиши конкретное ТЗ. Или вопрос сугубо теоретический?
                    Ответить
                    • > GPU с этим влегкую справится

                      А вот кстати нет. В том же вулкане на нвидии у меня RGB картинку загрузить не получилось. Не умеет железо с криво выровненным говном работать.
                      Ответить
                      • З.Ы. В обязательных форматах есть R8, R8G8 и R8G8B8A8. Ну и их вореции с переставленными полями. Даже старый добрый R5G6B5 есть. А вот чистого R8G8B8 нету. Плохо ложится на всякие кеши, видимо.
                        Ответить
                        • есть 1 байт, 2 байта, 4 байта, а трех байтов нету

                          необычно, правда?
                          Ответить
                      • Ну через какую-нибудь cuda это ж должно как-то решаться, разве нет?
                        https://github.com/dusty-nv/jetson-utils/blob/833fc7998e34d852672277730a11aeed90024959/cuda/cudaRGB.cu#L160


                        Или там шейдер на GLSL написать, который байтики эти перехуячивает
                        Ответить
                        • Шейдером можно извратиться, закосив под R8 картинку тройной ширины или даже просто буфер с байтиками.
                          Ответить
                          • Но это всё равно будет инородная хуйня - отвалятся всякие удобные фишки в духе аппаратной интерполяции или srgb. Сконвертить и выбросить, разве что.
                            Ответить
                      • Вон RGBA в Yuv420p вполне можно перевести
                        https://www.hardmo.de/article/2018-10-21-rgb-yuv420-glsl.md
                        Ответить
            • Маркса?
              Ответить
    • Это пиздец оффтоп?
      Ответить
    • https://imgur.com/cI4muwZ блядь что?
      Ответить
      • «Rust» — это такая игра.
        Ответить
        • Про переписывание всего подряд с сишечки.
          Ответить
          • Про разговоры про переписывание всего подряд с няшной, конечно же.
            Ответить

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