Jawa / Говнокод #27661 Ссылка на оригинал

0

  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 OCETuHCKuu_nemyx, (Updated )

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

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

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

      И за дело!

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

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

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

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

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

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

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

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

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

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

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

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


              попробуй без шпаргалки разобраться, кто про что
              Ответить
      • Бедные Jawa-петушки. Они даже структуру на стеке выделить не могут.
        Ответить
          • Сделать его может только джит
            Ответить
            • Кстати, а почему AOT конпеляторы загнулись? Было же что-то от авторов gcc.

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

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

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

                  > ORM

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

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

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

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

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

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

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

          Лазить за ними в говнокеши тоже не бесплатно.
          Ответить
  • А какие конпеляторы «Йажи» вообще бывают? Есть «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».
        Ответить
        • Няпиши новый.

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

          О языке «Mercury» я вроде раньше не слышал:
          https://ru.wikipedia.org/wiki/Mercury_(язык_программирования)
          Ответить
          • да, у них ещё свои 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

                              Поцверждаю.

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

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

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

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

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

                              #МЕкни #ХРюкни #сВистни
                              Ответить
                                • Дикий жор ресурсов, глючность, меньше 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 не нужна
                                Ответить
                                  • Это правда, но в ней и правда было дохуя всего по сравнению с ними.

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

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

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

                                  А 2k вот все хвалят, а она ни туда, ни сюда. И глючная к тому же.
                                  Ответить
                                    • 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 так не умела, у неё вышестоящего ДОСа не было.
                                        Ответить
                                      • До 4.0 NT была никому не нужна, будем чесны. У всех стояли всякие новелы-хуёвелы.

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

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

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

                                    >И глючная к тому же.
                                    с SP4 не было у меня глюков
                                    Ответить
                                  • не было в 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
                            Ответить
                            • У семёрки производительность ровно такая же, как у Висты.

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

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

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

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

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

                                  Во-первых, я чаще пользовался «Гимпом» и «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 еще не загрузился.

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

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

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

                                      Хотя стандартные сервисы, конечно, уже давно отладили.
                                      Ответить
                          • да, полезный тред, если ты живешь в 1994-м году, и работаешь системным администратором
                            Ответить
                        • милениалы выдумали новый форум, называется Discourse
                          он папиного phpbb и дедушкиного юзнета отличается тем, что тормозит и весит в сто и в тысячу раз больше соответственно.
                          Ответить
                          • У него не только бек, но и фронт тяжёлый. Требует последнюю версию браузера, из-за чего у некоторых бугурт. Скоро его нельзя будет просмотреть с восьмёрки, не то, что с XP.
                            Ответить
                            • Он еще и неудобный шопиздец

                              Реально рак
                              Ответить
                                    • Ну да, я же не ебанутый

                                      Питуху там советуют Линукс поставить, а он жопкой к тотал коммандеру приклеился лол
                                      Ответить
                                        • ну да, в линуксе же нет файловых менджров и ирструмнетов для автоматизации говна
                                          Ответить
                                          • чувак ноутбук не может поменять двадцать лет, а ты хочешь, чтобы он новые инструменты тебе для говна выучил. не надо так. берегите лес
                                            Ответить
                                        • блядь ну и хуйняч
                                          # 
                                          #include 
                                          #include 
                                          #include 
                                          
                                          Example()
                                          
                                          Func Example()
                                                  ; Create a constant variable in Local scope of the filepath that will be read/written to.
                                                  Local Const $sFilePath = _WinAPI_GetTempFileName(@TempDir)
                                          
                                                  ; Open the file for writing (overwrite the file) and store the handle to a variable.
                                                  Local $hFileOpen = FileOpen($sFilePath, $FO_OVERWRITE)
                                                  If $hFileOpen = -1 Then
                                                          MsgBox($MB_SYSTEMMODAL, "", "An error occurred whilst writing the temporary file.")
                                                          Return False
                                                  EndIf
                                          
                                                  ; Write data to the file using the handle returned by FileOpen.
                                                  FileWriteLine($hFileOpen, "Line 1")
                                                  FileWriteLine($hFileOpen, "Line 2")
                                                  FileWriteLine($hFileOpen, "Line 3")
                                          
                                                  ; Flush the file to disk.
                                                  FileFlush($hFileOpen)
                                          
                                                  ; Now, adjust the position to the beginning.
                                                  FileSetPos($hFileOpen, 0, $FILE_BEGIN)
                                          
                                                  ; Check file position and try to read contents for current position.
                                                  MsgBox($MB_SYSTEMMODAL, "", "Position: " & FileGetPos($hFileOpen) & @CRLF & "Data: " & @CRLF & FileRead($hFileOpen))
                                          Ответить
                                          • PHP опять повысил безопасность моего комментария
                                            Ответить
                                            • Говорю же: не редактируй комментарии через хуз. Если невмоготу исправить, напиши «vanished», а исправленный текст вставь новым комментарием.

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

                                              Вротпресс — говно.
                                              Ответить
                                • https://ntc.party/t/ntcparty-%D0%BD%D0%B5-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0% B5%D1%82-%D0%B2-seamonkey/3659/7

                                  А зачем? Зачем заходить на форум с устаревшего ПО, когда единственным препятствием к использованию актуальной версии является ваше нежелание или лень, а не технические проблемы или аппаратная несовместимость?
                                  Это не ретро-сообщество, где обеспечивать подобную поддержку было бы разумно.
                                  У меня есть вопросы к политике версионирования и использования самых новых функций браузеров в Discourse, но самостоятельно поддерживать совместимость со старыми браузерами для буквально, может, трех участников форума у меня нет никакого желания.

                                  К тому же, можно постить через email.

                                  ---

                                  съел да?

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

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

                                    расскажи, как правильно пользоваться почтовыми рассылками
                                    Ответить
                                    • А что именно тебе не понятно?

                                      Ну типа послал вопрос на рассылку, получил ответы, почтовый клиент через спец-заголовок собрал их лесенку, почитал ответы, всё.
                                      Архивы рассылок обычно доступы через веб-морды, там можно искать.
                                      Ответить
                                      • Там для ссылки на архив тоже есть за-
                                        головок.
                                        Ответить
  • jawa просто знает, что среди 8 миллиардов устройств может найтись некоторое не на двоичной логике
    Ответить
  • Пиздец. Я ещё в 2021 обсирал Jawa. С тех пор вышло пара версий, но ничего не изменилось?
    Ответить
    • Обижаеш!
      Смотри, какие ништяки завезли

      * Enhanced Pseudo-Random Number Generators
      * Deprecate the Applet API for Removal
      * Remove RMI Activation
      * Remove the Experimental AOT and JIT Compiler
      * Deprecate the Security Manager for Removal


      прямо хочу уже на нее перейти
      Ответить
  • yw7pokerdom.com
    ywoykry77.com
    yx247.com
    yx7pokerdom.com
    yy7pokerdom.com
    yylab.com
    yywjk.com
    yzer.world
    yzvar.website
    z00y.com
    z13zfm6.icu
    z1.fm
    z1fm.club
    z1fm.online
    z1fm.ru
    z1v.ru
    z200.fm
    z2.fm
    z360gov.ru
    z3.fm
    z4z-akf.ru
    z542.info
    z7z7z.net
    z941.info
    za4itaika.ru
    za7pokerdom.com
    za7zamkami.com
    za-afriku.ru
    zabaka.tv
    zabalabes.ru
    za-baranku.ru
    zabastovka2011.ru
    zaberi-bonusi.fun
    zaberi-bonusi.site
    zabioren.com
    zab-iskra.com
    zaborona.com
    zabota-zdrav.ru
    zabteh-iskusstv.ru
    zabudovnyk.com.ua
    za.bz
    zachhugheslakeforkguide.com
    zachteno.net
    zaciopet.com
    zaclip.com
    za.com
    zadedamoroza.ru
    zadniza.com
    zadrochi.me
    zadrochi.net
    zae24.biz
    zaebistv.com
    zaebistv.net
    zaebu.net
    zaebun.top
    zafontan.ru
    zaglazeyka.ru
    zagonka-1368.club
    zagonka-1368.cyou
    zagonka-2262.site
    zagonka7.com
    zagonka-838.site
    zagonka.bond
    zagonka.cam
    zagonka.click
    zagonka-l.site
    zagonka.net
    zagonka.online
    zagonka.org
    zagonka.sbs
    zagonka.tv
    zagonka-tv.com
    zagonka-z.site
    zagonk.com
    Ответить
  • заебатый лажовый друг переводчика: lusten означает "хотеть" в простом смысле. Ik lust een koffie
    Ответить
    • Жил-был художник один.
      Домик имел и холсты (в простом смысле).
      Но он актрису любил,
      Ту, что любила цветы (в простом смысле).
      Ответить
      • Жила-была простая шведская семья. Папа имел маму. Боссе имел Бетан. Малыш никого не имел, но очень хотел иметь собаку
        Ответить
        • Оркестр гремит басами,
          Трубач выдувает медь.
          Думайте сами, решайте сами,
          Иметь или не иметь.
          Ответить
  • Всё, пизда Арцаху
    Был Арцах -- станет Карабах
    Ответить

Добавить комментарий для Soul_re@ver Отменить ответ

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8