1. Java / Говнокод #27661

    +2

    1. 1
    https://codeforwin.org/2018/05/10-cool-bitwise-operator-hacks-and-tricks.html

    10 cool bitwise operator hacks and tricks every programmer must know

    Right shift (>>) operator is equivalent to division by 2
    Want to divide a number by 2 quicky. Here you go, use bitwise right shift operator to divide an integer by 2. Each right shift operation reduces the number (operand) to its half.


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

    Запостил: OCETuHCKuu_nemyx, 12 Сентября 2021

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

    • Тред отсоса Jawa-блядей.
      Ответить
    • javac вообще ничего не умеет. Джит может что-то наджитить потом
      Ответить
      • Да уж, бестолковый компилятор, бестолковый jawa-программист... Незавидная участь у jawa-бля́дей.
        Ответить
      • При этом заменять деление сдвигом умели компиляторы разных ЯП уже в восьмидесятые, а возможно и ещё раньше. Причём это было не многомегабайтное говно, как «Йажа». Подозреваю, что ещё «Фортран» умел, надо проверить.
        Ответить
        • Так и Йажа умеет. Эти питумизации в «Hotspot». Как и замена деления на копзтанту умножением.
          Ответить
    • Джаву часто критикуют, но нужно помнить, что не каждая компания может позволить себе профессионального программиста на серьезных языках, да и не всегда в таком программисте есть смысл.

      Некоторые задачи (вроде несложного веб магазина или формочки для обратной связи) вполне может решить и т.н. "jawa программист".
      Ответить
      • > Джаву часто критикуют

        И за дело!

        > что не каждая компания может позволить себе профессионального программиста

        Достаточно среднего ума, чтобы 1: не кодить на jawa, 2: писать без ошибок тривиальный код.

        > на серьезных языках

        Да, jawa – кастрированный, игрушечный язык. Jawa недалеко ушла от блоксхем для операторов интерпретаторов.

        > да и не всегда в таком программисте есть смысл.

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

        > Некоторые задачи (вроде несложного веб магазина или формочки для обратной связи) вполне может решить и т.н. "jawa программист".

        Ну, кому-то же нужно делать всякую грязную и неблагодарную работу: не программистам на «Nim» или «С++» же)
        Ответить
      • > Некоторые задачи (вроде несложного веб магазина или формочки для обратной связи) вполне может решить и т.н. "jawa программист".
        ПХП-макака тоже может и это будет дешевле. Поэтому я за «PHP»
        Ответить
    • Лол, а я просто юзаю операторы согласно семантике, а конпелятор сам разбирается.
      Ответить
      • Справедливости ради нужно сказать, что ручная замена умножения на сдвиг это последнее, что нужно сделать при устранении ботлнеков в коде на джаве.

        Можно для начала не создавать на каждую итерацию цикда 48_000 объектов, или что там обычно джавушки делают
        Ответить
        • Можно для начала поюзать bool вместо Boolean...
          Ответить
          • У тупых жавашков это разное, азаза.
            Ответить
            • Ты даже не представляешь НАСКОЛЬКО разное в джаве массив интов и лист интов:)
              Ответить
              • Честно говоря, мне и не надо. Я же не лаборант, проводящий анализ кала на коки.
                Ответить
            • Там ещё с какой-то версии завезли автобоксинг/автоанбоксинг, так что не знаешь, где у тебя нативные типы развернутся в объекты. Надо байткод смотреть.
              Ответить
              • Там где в обжект засунул -- там и развернутся. Он же не просто так ради прикола боксит, а потому что по-другому никак.
                Ответить
            • https://ideone.com/gO9swy

              Integer i1 = new Integer(1);
              Integer i2 = new Integer(1);
              System.out.println("i1 > i2: "+(i1 > i2));
              System.out.println("i1 >= i2: "+(i1 >= i2)); // true
              System.out.println("i1 == i2: "+(i1 == i2)); //false


              >= сравнивает значения, поэтому вернёт true.

              А == сравнивает адреса объедков, поэтому вернёт false. Какой багор )))
              Ответить
              • Именно поэтому ты за Integer.valueOf()?
                Ответить
                • Ага.

                  Почему так некокококонсистентно сделали? Тогда уж надо добавить сравнение адресов через < и > (не знаю, зачем оно нужно в «Йаже», которая не позволяет работать с указателями, но раз уж их начали сравнивать, то трудно остановиться).
                  Ответить
                  • Сравнение адресов на < в языке с гц -- это прямой путь в ад.
                    Ответить
                  • Кстати, а valueOf для чисел больше 128 тоже ведь разные инстансы для одного числа может вернуть?

                    З.Ы. It may cache values outside of this range. Вот и приехали, implementation-defined в этой вашей джаве. Т.е. сравнивать числа по адресу никогда нельзя, даже с valueOf.
                    Ответить
              • хотел бы тут посоветовать какой-нибудь лишп

                но потом вспомнил, что в Рэкете есть
                equal?
                и есть
                eq?


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

                  Если бы было eqval и eqadr, я бы запомнил.
                  Ответить
                  • бля, сольвер какой-то нашёлся

                    https://docs.racket-lang.org/rosette-guide/ch_essentials.html#%28part._sec~3aquerie s%29
                    Ответить
                  • а, ещё есть
                    eqv?
                    Ответить
              • Ахахахахахп, тупые долбоебы
                Ответить
        • Бедные Jawa-петушки. Они даже структуру на стеке выделить не могут.
          Ответить
          • Даже за счёт escape analysis?
            Ответить
            • Сделать его может только джит
              Ответить
              • Кстати, а почему AOT конпеляторы загнулись? Было же что-то от авторов gcc.

                Слишком много динамических настроек в XML'ках, из-за которых структура проги непонятна до старта и хрен что оптимизнёшь?
                Ответить
                • Не нужно пытаться оправдать анскильность Jawa-петухов сложностью XML-ек.
                  Ответить
                  • Если на сишке писать всё подряд через индирекции, управляемые через XML, то там тоже нихрена не оптимизнётся.
                    Ответить
                • В современной жаве уже нет XML, там DI реализуют кодом.
                  Но там всё равно ест рефлексия, а это всё равно медленно.

                  Когда лодаер загружает класс, он записывает по каким адресам какие методы, а в случае рефлексии там нужно как-то по строке искать, и это долго, ну и джититься наверное оно хуже

                  Я видел как питух через ORM заполнял несколько десятков тысяч сложных объектов, и это реально создало боттлнек. Правда это было 15 лет назад
                  Ответить
                  • Хм, т.е. теперь во время конпеляции можно узнать что какие интерфейсы реализует?

                    > ORM

                    ORM'ы ведь тоже со "статической" конфигурацией на собачках, а не из базы или каких-нибудь хмлок? Тогда можно заранее всё разобрать и сгенерить код без рефлектора.
                    Ответить
          • Уже могут.

            Туда завели record (ворованный сишный struct).

            https://govnokod.ru/27041#comment586191
            Извиняйся перед джавашнёй, анскилябра.
            Ответить
        • > не создавать

          А вот тут сложный вопрос...

          Я сварщица не настоящая, но от реюза объектов GC тоже может деградировать. Там же ссылки из старых поколений в новое начинают появляться, а они не бесплатные.

          Вполне возможно, что создать-и-выбросить будет лучше по пирфомансу.

          З.Ы. Блин, вот у вас там памятью управлять сложнее чем в крестах... Надо всякие умные статьи читать.
          Ответить
          • Нужно еще профильнуть через JMH.

            Но джава-питухи обычно микрооптимизациями не занимаются.

            Легенда гласит "мало живующие объекты бесплатны, ведь они попадают в минорный гц", и джавушки её повторяют.
            Ответить
          • > Вполне возможно, что создать-и-выбросить будет лучше по пирфомансу.
            Лучше.

            Лазить за ними в говнокеши тоже не бесплатно.
            Ответить
    • Jawa-программист написал программу:
      https://imgur.com/a/k7HPKIj
      Ответить
    • А какие конпеляторы «Йажи» вообще бывают? Есть «gcj» (из «gcc», хотя интеграция там слабая), есть «ecj» (я его даже в «Андроиде» запустил. Что ещё есть помимо «javac»?
      Ответить
      • Пусть «ASD_77» напишет нормальный.
        Ответить
        • К сожалению, Jawa – это тупорылая абоминация для простофиль в мире программирования. Пытаться исправить косяки (которые являются неотъемлемой частью Jawa) равносильно тщетным потугам виндузятника выпилить телеметрию или яблобляди убедить техподдержку восстановить его «iCloud» с «iTunes».
          Ответить
        • Наткнулся на такой набросок:
          https://en.wikipedia.org/wiki/List_of_compilers#Java_compilers

          С сайтов «EDG» и «SAP» информация куда-то исчезла.

          «gcj» сгнил, в новые версии «gcc» его не вкладывают.

          Айбиэмовский «Jikes» сгнил много лет назад.

          «RemObjects» предлагает 30-дневную версию «Iodine».

          Из халявных несгнивших остаются «javac» и эклипсовский «ecj». Ну ещё «ikvmc», но он весьма специфический, потому что предназначен не для «JVM», а для «.Net».
          Ответить
          • Няпиши новый.

            З.Ы. Зачем вообще нужны альтернативные конпеляторы джавы? Они байткод лучше оптимизируют?
            Ответить
            • Пока не знаю. Есть подозрение, что они все неоптимизирующие, а оптимизация возложена на «JVM».

              Надо проверять.
              Ответить
          • Был какой-то "Excelsior JET" но он сгнил
            https://habr.com/ru/post/452066/
            https://en.wikipedia.org/wiki/Excelsior_JET


            Сибирская компания Excelsior стала «Excelsior at Huawei»
            https://habr.com/ru/company/jugru/news/t/462281/
            Ответить
            • Ещё был проект «class2llvm», который передаёт уже скомпилированные class-файлы в «LLVM», чтобы их можно было оптимизировать и сгенерировать из них код. Но он не дошёл до релиза.

              Ещё нашёл такую вещь:
              https://github.com/polyglot-compiler/JLang

              Пока ещё не выяснял, что он умеет.
              Ответить
              • >Java 7
                лол
                Ответить
                • Enterprise корпорации только на шестую закончили переходить, а ты тут лолкаешь...
                  Ответить
              • https://en.wikipedia.org/wiki/GraalVM

                > GraalVM Native Image, allowing the ahead-of-time compilation of Java applications
                Ответить
                • Пропаганда. В половине бенчей сливает OpenJDK.

                  См. Geometric Mean Of All Test Results
                  https://www.phoronix.com/scan.php?page=article&item=openjdk-corretto-graalvm&num=5

                  Старый OpenJDK 8 сливает всю эту грааль питушню.
                  Ответить
          • > Iodine
            Это же L3 туннель через 53/udp
            Ответить
          • «RemObjects» — это какой-то ужас. Пакет на 10 гигабайтов с одним значимым экзешником, который умеет компилировать «Oxygene» (диалект «Object Pascal»), «C#», «Swift», «Java», «Go», «Mercury» под платформы «.Net», «Android», «iOS», «Windows», «Linux», «OSX», «Webassembly». Разделению на части этот копролит не поддаётся.

            О языке «Mercury» я вроде раньше не слышал:
            https://ru.wikipedia.org/wiki/Mercury_(язык_программирования)
            Ответить
            • Rem Objects
              Dim Objects
              Ответить
            • да, у них ещё свои IDEшки

              и если под винду есть дополнение для вижуалки, то на маке хуй (хотя это проблема xcode, на самом деле)

              но в целом идея написать кроссплатформу на швифте интересная, только вот версия швифта там вроде была какая-то древняя
              Ответить
            • о, Инканус, ты ж шаришь в этой теме вроде

              какую последнюю версию хрома можно поставить на семёрку и где её можно взять?
              Ответить
              • Win7 Build 7601: Service Pack 1
                Chrome ``Version 93.0.4577.82 (Official Build) (64-bit)``
                Ответить
                • блаадарочка
                  Ответить
                  • К счастью, на семёрке пока запускаются все версии «Хрома».

                    А «Висте» не повезло: на ней не запускаются версии новее 49 из-за всего лишь одной отсутствующей функции в kernel32.dll.
                    Ответить
                    • ну это гуд
                      наверное, фф тоже можно более-менее свежий поставить

                      а вот насчёт тимвьюера вопрос интересный
                      Ответить
                    • А кто сейчас пользуется "Вистой"? И главное, зачем?
                      Ответить
                      • Те, у кого сохранилась старая техника.

                        Я на форумах видел, что в этом году некоторые до сих пор пользуются XP.
                        Ответить
                        • XP лучше Vista.
                          Что угодно лучше Vista.
                          Win95 лучше Vista
                          Ответить
                          • а почему кстати такой дикий хейт в сторону свиста?

                            она мимо меня как-то прошла, даже не могу обосрать или похвалить
                            Ответить
                            • В начале нулевых точно так же ругали XP.
                              Ответить
                              • > В начале нулевых точно так же ругали XP

                                Поцверждаю.

                                Одни ныли: ой у меня в 98 можно свободно в порты срать, а XP всё анально огорожено.

                                Вторые негодовали: у меня NT4/2k прекрасно работает на 64/128Mb, а ваша ХР из-за свистоперделок лагает.

                                И кстати она до SP1 была дико глючная. Реальной годнотой она стала где-то к SP2, а в SP3 вообще получила культовый статус.

                                К тому моменту вышла недорогая DDR2 память и Core2 и ХРшечка на них летала. А ставить 2k не имело смысла, т.к. драйвера в новом железе и вся поддержка шли только для XP.

                                С другой стороны «Виста» реально блевотное говнище. Даже «ME» не такой фейл.

                                #МЕкни #ХРюкни #сВистни
                                Ответить
                                • NT4 и 2k и на 16/32 работали.

                                  А всё-таки, в чём главный фейл «Висты»?
                                  Ответить
                                  • Дикий жор ресурсов, глючность, меньше fps в играх.
                                    Edit: А ещё софт не весь работал.

                                    7ка была и новее и быстрее. Хотя мне ни то, ни другое не нравится.

                                    > NT4 и 2k и на 16/32 работали.
                                    XP вроде и на 64 работала. Но это изврат.
                                    Ответить
                                    • По-моему, каждая новая версия жрала больше старой.

                                      Я на семёрке наблюдал тормоза не слабее, чем на Висте.

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

                                      Про fps в играх не в курсе, я не геймер.

                                      Самое главное, что я заметил в «Висте», это то, что в ней старые вирусы не работают (из-за DEP, ASLR и вообще из-за изменения внутреннего устройства).
                                      Ответить
                                      • > Глюков больше всего видел в 2k.
                                        Подтверждаю.
                                        Все кругом её хвалили. Я поставил — мама дорогая, просто невозможно пользоваться.

                                        > Самое главное, что я заметил в «Висте», это то, что в ней старые вирусы не работают

                                        Я даже на XP практически не ловил ви-русню. Без антивируса. Отключенные говнослужбы и закрытые порты очень помогают.

                                        > Я на семёрке наблюдал тормоза не слабее, чем на Висте.

                                        Личного опыта с 7 у меня почти нет. Больше с чужих отзывов.
                                        Вроде там DirectX как-то допилили, игры быстрее стали работать.

                                        В целом по ОС, сколько людей столько и мнений.
                                        Встречал и людей, которые страшно хвалили ME, и фанатов 2k.

                                        Даже встречал адепта NT4 SP5 (вот там слабое железо, да). Мне ещё объясняли что SP4 и SP5 для NT4 хорошие, а в SP6 M$ специально изгадила годную систему.
                                        Ответить
                                        • > Отключенные говнослужбы и закрытые порты очень помогают.

                                          По моему наблюдению больше всего помогает не запускать программы из сомнительных источников.
                                          Ответить
                                      • >Глюков больше всего видел в 2k.

                                        W2k без SP4 не нужна
                                        Ответить
                                  • > А всё-таки, в чём главный фейл «Висты»

                                    Лично я через несколько после её выхода постепенно пересел на Луникс.

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

                                  Правда там не работал RDP сервер (в prof), не поддерживался WPA2 (в XP до SP2 тоже) не было файрвола (в XP до SP2 тоже) и вообще XP до SP2 не нужна
                                  Ответить
                                  • По сравнению с NT4 и с 95 с непривычки w2k казалась перегруженной.
                                    Ответить
                                    • Это правда, но в ней и правда было дохуя всего по сравнению с ними.

                                      Причем были вещи, которые я даже осознать-то в тот момент не мог: залазиш в "администрирование", а там "координатор распределённых транзакций" и "сервера COM+"

                                      И ты такой: ЧТОБЛЯ?
                                      Ответить
                                      • Вот-вот, у меня в 95 нет вообще никаких транзакций, именно поэтому я за 95.
                                        Ответить
                                  • > w2k вообще была лучше: там не было ненужных пирделок, ненужных сервисов

                                    На первый взгляд да (на самом деле нет).
                                    Легковесная система — NT4.
                                    Понадёжнее и новее — XP.

                                    А 2k вот все хвалят, а она ни туда, ни сюда. И глючная к тому же.
                                    Ответить
                                    • а что такое nt4? была такая именно винда? это ж ядро
                                      Ответить
                                      • Windows NT 4.0 была: server, workstation и Terminal server
                                        Ответить
                                      • > была такая именно винда?
                                        Да. А до этого NT3.5 (честно в дикой природе, не видел).

                                        У M$ было джве линейки:
                                        95=> 98 => Me (десктопная, больше заточенна на игры и поддержку старого DOS софта)
                                        NT 3.5 => 3.51 => 4.0 (серверная, стабильная система, но без 16-битных плюшек)

                                        2k и XP плод их смешения.
                                        Ответить
                                        • Не совсем.

                                          95->98->Me была частично 16-ти разрядная, опирающаяся на сервисы BIOS, и так назыааемая "консмьюмерская"

                                          NT была написала с ноля по архитектуре напоминая VMS, и была она как-бы "для энтерпрайза"

                                          Она была не только серверная: был NT workstation.
                                          Из него вышел Win 2000 Prof, из него XP итд.

                                          А вот клиентами серверных систем могли быть как NT Workstation, так и Win95/98/Me.;


                                          ps: NT Workstation был нужен например потому, что он умел NTFS (4.0 что-ли) и вот FAT не умел без SP кстати.

                                          В win9x ты мог тупо не зайти в домен, и читать локальные файлы, а в NT не мог
                                          Ответить
                                          • NT скорее напоминала OS/2.

                                            > вот FAT не умел без SP кстати

                                            NT4 умел FAT12 и FAT16 помимо NTFS. Поддержку FAT32 добавили в двухтоннике. Возможно, и старой системой можно было смонтировать FAT32, если где-нибудь драйвер достанешь, только вот установить систему на FAT32 до двухтонника было нельзя.
                                            Ответить
                                            • >NT скорее напоминала OS/2.
                                              Архитектурно она напоминала VMS, потому что её пилили те же чуваки (Дейв Катлер и ко).

                                              Руссинович потому и знал NT, что знал VMS, и даже статья была на Dr.Dobbs, где говорилось, что у систем очень много общего.

                                              OS/2 должна была стать одним из API NT (на равне с win32)

                                              >FAT32
                                              точно)) Если бы он не мог в fat16/12, то не читал бы дискет


                                              Поддержку FAT32 добавили в W2k и кажется в шестом что ли SP к NT4
                                              Ответить
                                        • Была ещё NT3.1. Забавная вещь: гуй в дизайне «Win 3.x», но при этом она полностью 32-битная, на ядре NT, а не ДОСа. Просто взрывает мозг.
                                          Ответить
                                          • Главное что там весь инторфейс был под только левомышь поэтому можно было управлять с тачскрина

                                            И вот том как раз файрвода не было
                                            Ответить
                                        • > но без 16-битных плюшек

                                          Были в NT и NTVDM (мумулятор ДОСа) и WOW (мумулятор 16-битного WinAPI). Другое дело, что NTVDM была именно мумулятором, а в 95/98/Me всё было наоборот: сначала стартовал DOS (модифицированный; Win 3.x для сравнения использовали оригинальный), потом Windows переключала процессор в защищённый режим, а DOS сажала в V86, при этом Винда сама пользовалась функциями DOS и BIOS, если у неё для чего-то отсутствовал драйвер. NT так не умела, у неё вышестоящего ДОСа не было.
                                          Ответить
                                      • До «Windows 2000» системы на ядре NT называли просто NT. Я знаю версии 3.1, 3.51 и 4.0.
                                        Ответить
                                        • До 4.0 NT была никому не нужна, будем чесны. У всех стояли всякие новелы-хуёвелы.

                                          Реальные сети на NT появились к концу 90-х, и это уже была NT 4
                                          Ответить
                                          • До конца 90-х и сетей толком не было, компьютеры зачастую использовались в офлайне с перекидыванием дискетами.
                                            Ответить
                                            • Ну вообще толстый ethernet и token ring могли встретиться и в 89-м году, но только в "серьезных" конторах.

                                              У нас во дворце пионеров на think ethernet (10 мегабит коаксиал) была сетка. Топология была кольцевая. Год был 1998-й, и сеть там уже существовала пару лет к тому моменту
                                              Ответить
                                    • >Легковесная система — NT4.

                                      В w2k все таки лучше работали современные протоколы: SMB поверх TCP, DNS и LDAP в AD..

                                      >И глючная к тому же.
                                      с SP4 не было у меня глюков
                                      Ответить
                                  • Был там файерволл

                                    И ТЕ4 падучаая
                                    Ответить
                                    • не было в w2k файрвола автоматического как в XP.

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

                                      Без него W2k в Интернете жила примерно пятнадцать минут
                                      Ответить
                            • она была очень хувая и очень тормознутая (например потому что GDI там всегда рисовался в оперативку, и оттуда копировался в память*), а еще во времена висты куча софта просто не работала под ней (из за uac, например)


                              *
                              > The driver model used in Windows Vista required that every GDI window be backed by both a video memory surface and a system memory surface. This resulted in system memory being used for every GDI window.
                              https://docs.microsoft.com/en-us/windows/win32/direct2d/comparing-direct2d-and-gdi
                              Ответить
                              • У семёрки производительность ровно такая же, как у Висты.

                                Почему нет такого взрыва пуканов от семёрки? Потому что все уже привыкли к тормозам или потому что к моменту выхода семёрки появилась техника помощнее?
                                Ответить
                                • >У семёрки производительность ровно такая же, как у Висты.

                                  нет, не такая же
                                  http://www.notebookreview.com/news/windows-7-vs-windows-vista-performance-comparison/

                                  одну из причин (про GDI) я выше написал
                                  Ответить
                                  • У меня лежит без дела нетбук с семёркой. На нём тормозит вообще всё, даже «Блокнот».

                                    Да, пожалуй, не такая же.
                                    Ответить
                                    • > нетбук
                                      – есть какая-то ось, которая не будет тормозить на нетбуке?
                                      Ответить
                              • > во времена висты куча софта просто не работала под ней

                                Приведи реальные примеры.

                                У меня на Висте куча софта перестала работать только сейчас (причину я указал выше в примере с «Хромом»).
                                Ответить
                                • с невыключенным юаком не работал старый фотошоп, например, аська

                                  людям понадобилось лет пять переписать софт , а там уже и семёрку завезли
                                  Ответить
                                  • Спасибо за примеры.

                                    К сожалению, не проверял такую кобенацию.

                                    Во-первых, я чаще пользовался «Гимпом» и «R&Q». А во-вторых, UAC почти сразу отключил, потому что у меня была слабая машина.

                                    Вообще не понимаю зачем на своей машине нужен UAC? Вон ротоёб сидит везде под рутом и течёт.
                                    Ответить
                          • > Win95
                            Я помню времена даже Win95 ругали, что жрёт много памяти и глючит.

                            Постоянно жаловались что всякий софт вылетает, результаты работы теряются.

                            И говорили что лучше сидеть в ДОСе или 3.11
                            Ответить
                            • Это я тоже помню: лютая ненависть была к w95, все любили DOS 6.0
                              Ответить
                              • s/6.0/6.22/ конечно же

                                а еще все ненавидели DOS 4.0
                                Ответить
                              • Был, кстати MS DOS 6.22 (с «Даблспейсом»/«Драйвспейсом», за который MS получила пиздюлей от компании «Stacker»).

                                Был IBM PC DOS 7.0. В нём некоторые программы работали быстрее, чем в MS DOS. Был даже PC DOS 7.1 с поддержкой FAT32, но никто эту версию целиком не видел, только дискету с демкой.

                                Был DR DOS 7.x с наворотами вроде прав доступа к директориям, с мультитаскером. Его много раз переименовывали: то Novell, то Caldera, то Lineo.
                                Ответить
                                • даблспейс это "агент сжатия" диска? Я такое на w95 делал, потому что место всегда нехватало.

                                  Был еще smartdrv -- буфер, ускоряющий ФС

                                  7.0 помню только MS-DOS (так он назывался в w95), PC-DOS я видел только мельком
                                  Ответить
                                  • Да, даблспейс — это зожатие диска. Микрософт спиздил код у Стекера, после чего была тяжба.
                                    Ответить
                            • Я тоже помню.

                              Вроде даже на Win 3.1 ругались, что на машине с 4 МБ оперативки ей пользоваться невозможно.
                              Ответить
                              • Кстати, NT очень долго грузилась (и w2k тоже), но NT на фоне win95 просто пиздец был: она могла грузиться минуту.

                                В XP грузить сервисы стали параллельно, и всё ускорилось (но с тех пор индикатор загрузки перестал иметь значение)
                                Ответить
                                • > грузить сервисы стали параллельно
                                  – и как это поможет на одноядерной машине?
                                  Ответить
                                  • > и как это поможет на одноядерной машине?

                                    Ожидание сетевого ответа, ожидание hdd.
                                    Ответить
                                  • Сервисы могут IO bound, а в случае HDD 5400 скорее всего будут IO bound:)
                                    Ответить
                                    • и?
                                      Ответить
                                      • Что "и"?

                                        Если у тебя загрузка сервиса упирается в HDD, а не в CPU, то логично грузить их параллельно: пока один ждет загрузки диска, другой что-то считает на CPU

                                        Да и диску лучше получить много запросов, и как-то их обслужить. Если у тебя SATA, то у тебя есть NCQ. У SCSI тоже была какая-то ткая же тема.

                                        Кстати, во времена w2k уже был гипер-трединг. У меня в P4 Northwood точно был
                                        Ответить
                                        • > логично грузить их параллельно

                                          – про одно ядро был вопрос
                                          Ответить
                                          • Окей, у тебя одно ядро.

                                            У тебя один процесс послал команду HDD, и ждет пока тот прокачает данные в память через DMA, и дёрнет прерывание.

                                            А в это время шедулер дает CPU другому процессу, который тоже что-то делает.

                                            Вот если у тебя PIO, а не DMA, то всё намного хуже
                                            Ответить
                                            • > ждет пока тот прокачает данные в память через DMA, и дёрнет прерывание
                                              – это происходит без участия cpu? я не шарю просто
                                              Ответить
                                              • Да, DMA — это именно в обход процессора. Ставишь контроллеру DMA задачу: «Скопируй столько-то байт из порта в оперативку и дёрни прерывание, когда закончишь».
                                                Ответить
                                                • Кстати, в контроллерах у меня очень часто как раз есть "DMA". Я им через I2S звук получал с кодека.
                                                  Ответить
                                                  • Это отдельное устройство, которое нужно программировать, или оно встроено в какой-то девайс?
                                                    Ответить
                                                    • > отдельное устройство, которое нужно программировать, или оно встроено в какой-то девайс

                                                      Когда как. Для мелочи в духе SPI или UART юзается общий контроллер DMA, для быстрых девайсов в духе USB или сетевухи уже сама железка может быть bus master.
                                                      Ответить
                                              • Смысл DMA именно в том, чтобы загрузить данные с устройства в память не трогая CPU.

                                                В классическом случае загрузка данных выглдит так:
                                                * послать команду "считать 1 байт" в порт устройства
                                                * считать данные из порта в память
                                                * повторить

                                                Это пиздец как медленно, потому что CPU занят вот этой вот хуйней.

                                                Потому придумали DMA.
                                                В шине ISA было отдельное устройство, которое можно было запрограммировать, и оно занималось ровно этой хуйней, а CPU в это время занимался делом.

                                                Так работали звуковые карты в те времена (иначе процессор бы не мог играть музыку в игре и обрабатывать game loop одновременно)

                                                В более современных шинах устройствам дали возможность напрямую писать в память, и теперь ОБЫЧНО устройства работают так:

                                                * Выделаешь кусок оперативки
                                                * Грузишь её адрес в порт устройства
                                                * Просишь загрузить по этому адресу мегабайт данных
                                                * Занимаешься своими делами

                                                Устройство грузит данные, и дергает прерывание.

                                                Это позволяет CPU заниматься полезными делами, пока контроллер диска пишет в память.

                                                В тред приглашается Борманд для объяснения как это всё работает
                                                Ответить
                                                • > для объяснения как это всё работает

                                                  См. выше.
                                                  Ответить
                                                  • А UDMA — это вроде собственный контроллер, являющийся частью контроллера IDE/ATA, который копирует в обход того DMA, что напаян на материнку.

                                                    А тот самый DMA на материнке использовался режимами Singleword/Multiword DMA, которые появились в промежутке между PIO и UDMA.

                                                    Так или я что-то наврал?
                                                    Ответить
                                                    • это те контроллеры, которые программирует jцифры?
                                                      Ответить
                                                    • P.S. Насчёт напаян на материнку: это я для наглядности изобразил старую архитектуру. Уже в первых «Пентиумах» контроллеры IDE и прочей периферии запихали в один кристалл и назвали «южным мостом».

                                                      А на многих материнках для 80486 карточку с контроллером IDE ещё надо было втыкать отдельно.
                                                      Ответить
                                                      • Ну да, всякие контроллеры перефирии (ps/2, comuart, hdd) были в чипсете "южный мост", а контроллер памяти и root complex PCI и PCI-Express в чипсете "северный мост".

                                                        Затем их переименовали в memory hub и perephirical hub.

                                                        Объединяла их шина Direct Media Interface (или Hyper Transport в случае AMD).

                                                        Хабы по старинке называли "мостами", пока "северную" часть не уделали в CPU сначала AMD, а затем и Штеуд.


                                                        Классическую раскладку (где каждый компонент был отдельным чипом) можно увидеть разве что в первых PC.

                                                        Кстати, IDE изначально был просто "удлиненной" шиной ISA, и ничегм от него не отличался
                                                        Ответить
                                                        • Видел чипсеты в 80386 (хотя некоторые контроллеры ещё оставались в виде дискретных микросхем) и видел XT, в которых всё было на отдельных микросхемах.

                                                          Про интерфейсы HDD мы на «ГК» писали: у MFM/RLL винчестер был тупым, там был моторчик и головка, а вся электроника была на карточке, вставлявшейся в материнку.

                                                          Потом WD и Seagate додумались электронику перенести из карточки в винчестер. Винчестер стал сложным, как компьютер.
                                                          Ответить
                                                          • Ну собссно IDE и значит "integrated device electronics": унос электроники в диск, позволяющий не иметь отдельно контроллер, и отдельно сам диск (как в случае FDD, где программист должен был сам моторочиком управлять)
                                                            Ответить
                                                    • По-моему да: DMA который был на материнке (а в последствие в чипсете, см Intel 8237) умел какую-то очень низкую скорость (4MB/s?) и потому плохо подходил для HDD. Даже PIO мог оказаться быстрее:)

                                                      UDMA уже был встроен в контроллер IDE, и с точки зрения шины это был обычный bus mastering, то есть устрйоство само ходило в память.

                                                      Но такое стало возможно только в PCI. То есть до PCI (в классической ISA) место устройства было у параши, оно было пассивным, и читать из него мог или CPU, или DMA (Intel 8237).

                                                      А уже в PCI стало возможно устройству самому ходить в память, и появился UDMA, и вот он уже всегда круче, чем PIO
                                                      Ответить
                                                      • В классической ISA были общие выводы для адреса порта и для адреса памяти и вывод, который указывал, к чему идёт обращение в данный момент. Устройство могло эмулировать память (так мапились в память биосы устройств и «апертура» видеопамяти), но не могло само обращаться к памяти, потому что инициатором выбора был процессор.
                                                        Ответить
                                                        • Угу, там были A* линии для выставления адреса, и линия, которая говорила это IO или Memory.

                                                          Устройства подключали свои дешифраторы к шине, и "узнавали" свои адреса.

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

                                                          Задачки типа "подключи четыре сетевых карты и две звуковых карты к PC" могли быть и вовсе нерешаемы.

                                                          Потом ввели протокол ISA PnP, но поддерживали его далеко не все устройства

                                                          >но не могло само обращаться к памяти, потому что инициатором выбора был процессор.

                                                          ну или тот самый DMA, угу.

                                                          Тут наверное надо еще рассказать про невозможность зашарить прерывания по причине level trigger vs edge trigger, но ты наверное и так это знаешь.
                                                          Ответить
                                                • > иначе процессор бы не мог играть музыку в игре и обрабатывать game loop одновременно

                                                  Я в «Doom2D» играл со звуком в писи-спикере, а в нём нету никаких «DMA».
                                                  Ответить
                                                  • Это был midi?
                                                    Он еще более-ли-менее играет. А ты запусти на спикере PCM и всё станет раком
                                                    Ответить
                                                    • А есть разница? Если midi использует инструмент с кучей гармоник и со сложной формой атаки, то сложность его вывода не меньше, чем у произвольного PCM.

                                                      Это на звуковой карте midi играть проще: там есть либо аппаратный FM-синтезатор, либо память сэмплов.
                                                      Ответить
                                                      • Я думаю, что писать нужно куда меньше: midi это электронные ноты, и они занимаю куда меньше места, чем wav

                                                        Синтезатор миди встроен в звуковуху же
                                                        Ответить
                                  • Знаешь, как выглядит загрузка Винды, начиная с XP, на одноядерной машине? Сначала мигом загружаются драйвера, потом стартуют службы, а потом компьютер может больше двух минут жевать сопли без обращения к диску, потому что загрузившиеся службы начинают одновременно насиловать единственное ядро, производя какие-то вычисления. В итоге пирфоманс уходит на бессмысленное переключение задач.
                                    Ответить
                                    • По моим ощущениям всё таки XP грузился быстрее.

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

                                      Наблюдать это можно было утилитой xperf, которая срала лог через ETW.

                                      На харбе есть платиновая статья "ускоряем загрузку Windows" от win-гуру
                                      Ответить
                                    • func __G(obj)
                                      if obj <> 0
                                         ret 'CEHT9I6PbCKuu_nemyx';
                                      end;
                                      
                                      print __G(nil)

                                      _____________________
                                      raw date:

                                      01. Stack overflow
                                      Ответить
                                • > В XP грузить сервисы стали параллельно
                                  Кстати прыщебляди освоили это только спустя 10 лет с выходом systemd / upstart / etc.
                                  Ответить
                                  • Ну да, классические SysV init последовательны.
                                    А upstartы не умели так делать?
                                    Ответить
                                    • Например апстартовский mountall монтировал fstab assпаралельно.
                                      Ответить
                                  • > освоили

                                    У всего есть своя цена... Последовательная загрузка намного предсказуемее, не разваливается от криво проставленных зависимостей или внезапных гонок.
                                    Ответить
                                    • Вообще-то от зависимостей она тоже разваливается.
                                      Я видел зависший sendmail, который пытался узнать свой domain name, а bind еще не загрузился.

                                      Другой вопрос, что дебажить последовательную загрузку в миллион раз проще
                                      Ответить
                                      • > дебажить последовательную загрузку в миллион раз проще

                                        Ну вот я как раз про это. Если оно один раз нормально прогрузилось, скорее всего и на следующий раз нормально прогрузится.

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

                                        Хотя стандартные сервисы, конечно, уже давно отладили.
                                        Ответить
                        • > на форумах
                          > пользуются XP

                          логично
                          Ответить
              • https://chromium.woolyss.com/
                Ответить
    • https://www.meme-arsenal.com/memes/484a9da04097756d005c346b5b1f34db.jpg
      Ответить
    • https://pbs.twimg.com/media/Ca7gpbbVIAAXe_Z?format=jpg&name=medium
      Ответить
      • Именно поэтому я за «PHP».
        Ответить
      • А как же "♂ + С++ = ♀"
        Ответить
        • в смылсе с++ превращает мужика в бабу? Срочно переходи на Tупоскрипт
          Ответить
          • Поздно, ты писал тайпскрипт на крестах.
            Ответить
            • то есть у него пизда раскрылась, но член не спрятался?

              это тот мужик, про которого лолечка рассказывал? [self fuck]?
              Ответить
              • > [self fuck]

                какой objc ))
                Ответить
                • class Pervert:
                      def fuck(self):
                          return fuck(self)
                  Ответить
                  • Это питон?
                    код не рабочий
                    Ответить
                    • Почему не рабочий?
                      Ответить
                      • class Pervert:
                            def fuck(self):
                                return self.fuck()

                        гне?
                        Ответить
                        • Вообще-то тогда будет рекурсия и код зависнет.
                          Ответить
                          • А я думал ты этого и хотел

                            а блядь

                            я не понял шутку просто)))

                            теперь понял. Ты написал ровно то, что и планировал написать
                            Ответить
                • Поляки в неформальной обстановке называют «селфи» словом «samojebka»:
                  https://en.m.wiktionary.org/wiki/samojebka
                  Ответить
                  • > в неформальной обстановке
                    – под пледиком?
                    Ответить
              • Блять, Пиастр Стокер удаляет ветки и комментарии! Я помню, что здесб j123123 давал нам ссылку на картинку, где "у него пизда раскрылась, но член не спрятался".

                И самое обидное, что VPN для просмотра этой картинки я скачал только сегодня...
                Ответить
        • Шутка про сиси-плюс-плюс?

          https://aliexpress.ru/item/4000368662890.html
          Ответить
    • jawa просто знает, что среди 8 миллиардов устройств может найтись некоторое не на двоичной логике
      Ответить
      • Неужели на «Сетуни» её запустили? А где столько оперативки для неё нашли?
        Ответить

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