1. Assembler / Говнокод #24375

    0

    1. 1
    2. 2
    add    bp, 4 ; 83C504
    lea    bp, [bp + 4] ; 8D6E04

    А они ещё говорят, что первого байта для всех КОПов не хватает, и ввели дополнительный.

    Запостил: 666_N33D135, 11 Июня 2018

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

    • #хуита86
      Ответить
    • В таком примере LEA не нужен. Однако, на x86 самым коротким способом записи di = bp + si + 4 будет
      lea di, [bp + si + 4]

      В 32-битном и в 64-битном режимах ещё можно умножать на степени двойки и складывать произвольные регистры, а не только bp или bx с si или di, как в 16-битном:
      lea eax, [ebx + ecx*4 + 100]
      будет самым коротким способом записи eax = ebx + ecx*4 + 100.
      Ответить
      • Так получаиса что add нинужен. И команда lea что_то_там, immediate (= mov).

        ЗЫ. lea трогает флаг cf?
        Ответить
        • lea, кажись, флаги не трогает.
          Ответить
          • Сейчас проверил (хвала мокросовту, что на виндах до сих пор есть досовский debug), флаг cf точно не трогает.
            Ответить
            • А всё потому, что семантика разная.

              У add bp, 4 результат в регистре bp. Если в результате возникает переполнение либо получается ноль, то меняются флаги.

              У lea bp, [bp + 4], несмотря на тот же результат, семантика другая. Тут "результатом" является значение, лежащее в [bp]. Со значением мы ничего не делаем, поэтому флаги не меняются. А вычисление адреса (bp + 4) -- это "побочный" процесс.

              С чем бы сравнить? Значение регистра SP/ESP/RSP мы можем изменить напрямую (add/sub/inc/dec), а можем через операции управления стеком (push/pop и даже call/ret).
              Ответить
              • > push/pop
                Нашел сравнение, lea может работать как add (за исключением флагов), а push/pop кроме указателя стека какают в память/регистры.
                Ответить
            • > на виндах до сих пор есть досовский debug
              Зачем он там?
              Ответить
              • Кстати, да. И где виндусовский дебагер?
                Ответить
                • Виндуосовский дебагер ставится с SDK, студией, или отдельно.

                  Называется он dbghlp.dll и имеет хуеву кучу фронтэндов, самый пополярный из которых -- windbg.

                  А еще есть дебагер, встроенный в студию.
                  Ответить
                  • > Виндуосовский дебагер ставится отдельно
                    И правильно, простому юзеру он нахуй не сдался, а досовский debug уж тем более, я вообще не понимаю, нахуя он столько лет поставлялся вместе с виндой. Да и вряд ли кто-то сейчас отлаживает программы глядя в ассемблерный листинг.
                    Ответить
                    • что, ужель и с десяткой поставляется?
                      Я 32хбитный винд лет пять не видел -- проверить негде

                      В XP он точно был, как был и edit.com кажется, потому что это часть окружения ms-dos которая винда должна была эмулироватть
                      Ответить
                      • Просто интересно, откуда ты всё это знаешь? Приходилось работать с debug.com и edit.com?
                        Ответить
                        • Если бы он ещё и про edlin рассказал, то я бы удивился.
                          Ответить
                        • Если бы он ещё и про edlin рассказал, то я бы удивился.
                          Ответить
                        • Когда я учился программировать на асме -- большинство программ было под dos. Я учился на masm, писал в edit.com и дебажился в debug.com:)
                          Ответить
                          • > debug.com
                            Он ехешник.

                            У нас использовали:
                            текстовый редактор -- какой хошь (я юзал нотепад++);
                            ассемблер -- tasm;
                            линкер -- tlink;
                            дебагер -- turbo debuger.

                            Для винды я учил асм сам.
                            Ответить
                            • Microsoft Windows (only in 32bit) which runs the program debug.exe (or DEBUG.COM in older versions of DOS).

                              ХЗ зачем его перелинковали, может чтобы впиндюрить туда PE.

                              >>нотепад++
                              когда я учил ассемблер не было никакого нотпад++ и editplus тоже не было: у меня были две IDE: TurboCшная и edit.com;)
                              Ответить
                      • > В XP он точно был
                        И в семёрке тоже был, а вот выше -- незнаю, не проверял. А в 64-битных 16-битные проги вроде работают.
                        Ответить
                        • 64-битная винда переводит процессор в long mode, в котором виртуальный режим (это когда снаружи режим защищённый, а для программы он маскируется под реальный) с 16-битными смещениями отсутствует. Поэтому досовские программы реального режима в 64-битной винде можно запустить только из эмулятора.

                          А вот 16-битные и 32-битные защищённого режима, вероятно, можно, потому что у сегмента может быть любой атрибут дефолтного смещения.
                          Ответить
                          • >> 16-битные защищённого режима
                            Я не уверен что сегмент кода такого типа будет работать в long mode, но тут это не очень важно потому что debug.com не использовал защищенный режим.

                            Грубо говоря это не 286 а 8088 приложение)
                            Ответить
                            • > не 286 а 8088 приложение
                              Не 8086?
                              Ответить
                              • Хехе, первый IBM PC был оснащен процессором 8088 коий являл собой кастрированный вариант 8086:

                                8086 имел 16 ножек на шине данных, а 8088 имел их 8.
                                Таким образом в память за один раз читался один байт.

                                В следующей модели уже использовался 80286 в котором дороже стало 16, и читаться стало два байта.

                                С этим связан традиционный для интелов "плевок в вечность"
                                На 8088 не обязательно было выравнивать обращение к памяти: читался-то все равно один байт,
                                а вот в 286 стало нужно потому что читался всегда четный, например:

                                0 и 1
                                2 и 3

                                итд. Так что если считать WORD (два байта) по адресу 1, то получится ДВА чтения, половина из которых будет выкинута.

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

                                Ну а теперь префетчер читает данные из кеша, кеш читает линейками из памяти, и все это уже не так важно
                                Ответить
                                • >> Хехе, первый IBM PC был оснащен процессором 8088 коий являл собой кастрированный вариант 8086:

                                  Тут разные источники пишут по-разному.

                                  Достоверно известно, что IBM PC XT (первая модель с жёстким диском) была оснащена процессором 8088. Им же была оснащена малоизвестная модель IBM PCjr. Но IBM PC XT был не первой персоналкой IBM.

                                  Также достоверно известно, что 8086 использовался на компьютерах других производителей (Compaq, Olivetti).

                                  Так на чём же была первая персоналка IBM? Всё-таки на кастрированном 8088?
                                  Ответить
                                  • IBM PC 5150
                                    Intel 8088 @ 4.77 MHz

                                    Это вика даже знает.
                                    На нем же был и jr и XT, а вот AT уже был на 286.

                                    Первые клоны вполне могли быть на 8086, Да
                                    Ответить
                    • > нахуя он столько лет поставлялся вместе с виндой

                      Для обратной совместимости с досом? (возможно зелёным)
                      Ответить
                      • А что смешного?
                        До сих пор долбоёбы есть у которых 16ти битные программы для реального режима, написанные 25 лет назад.

                        Их обычно в DosBox гоняют
                        Ответить
                        • Знаю лично таких долбоёбов.

                          > Их обычно в DosBox гоняют

                          А досбокс будет работать, если винда выпилит поддержку 16-битных программ? Ему же похуй?
                          Ответить
                          • Досбокс работает в 64-битной винде, потому что он полностью эмулирует окружение.
                            Ответить
                          • Разумеется, будет.

                            DosBox это не V86 приложение а честный эмулятор PC. Иначе бы старые игрушки плохо работали.
                            Ответить
                          • Если бы досбокс не эмулировал полностью ось, на нём бы не работали игры с дос расширителями. Сука, до сих пор нету порта блада на вин32! Одна из самых сложных игр имхо - в любой момент можно было сдохнуть из-за какой-то хуйни или бага.
                            Ответить
                            • >>Одна из самых сложных игр
                              В бладе было сохранение, так что это не самая сложная игра.
                              Самые сложные это аркады на приставках образца 90х Mario2 (японский), Contra итд
                              Ответить
                              • Одна из самых сложных игр в которые я играл.
                                Ответить
                                • Ну да, рука резко выскочит и всё:)

                                  Blood хороший очень, для своего времени просто огонь.
                                  Ответить
                                  • Blood был под 32-битный защищённый режим (dos4gw). При желании его можно портировать на Win32, если обращения к железу поменять на вызовы API.
                                    Ответить
                                    • Не хватает только одного - ИСХОДНИКОВ.
                                      Ответить
                                      • Есть исходники от Duke Nukem и, кажется, от Shadow Warrior, которые на похожем движке (к Shadow Warrior добавили воксели, которых не было у Duke Nukem).
                                        Ответить
                                      • >> Не хватает только одного - ИСХОДНИКОВ.

                                        Найдётся всё:
                                        http://www.r-t-c-m.com/knowledge-base/downloads-rtcm/


                                        http://www.r-t-c-m.com/
                                        Ответить
                                        • Нет, Блуда там нет. Только описание форматов. Исходники есть от других игр.
                                          Ответить
                                      • Короче, исходников первого Блуда в дикой природе нет, есть исходники Duke Nukem, Shadow Warrior плюс попытки реверсинжиниринга Блуда:
                                        https://blood-wiki.org/index.php/List_of_Source_Ports_and_Recreations
                                        Ответить
                                      • Короче, исходников первого Блуда в дикой природе нет, есть исходники Duke Nukem, Shadow Warrior плюс попытки реверсинжиниринга Блуда:
                                        https://blood-wiki.org/index.php/List_of_Source_Ports_and_Recreations
                                        Ответить
                                        • Ссылка обрезалась:
                                          https://blood-wiki.org/index.php/List_of_Source_Ports_and_Recreations
                                          Ответить
                                          • > Ссылка обрезалась

                                            Я то думаю, зачем ты ссылку на части тегами выделяешь, оказывается это скрипт 1024-- как-то криво оборачивает
                                            Ответить
                                            • Если применить кнопку [URL] к выделенной ссылке, она разбавляется тегами, чтобы движок ГК её не разбавил пробелами. Вордпрессовский скрипт тогда обрезает ссылку до первого такого тега.

                                              Если же применить кнопку [URL] к пустому месту и после вставить ссылку, то движок ГК разбавит её пробелами.

                                              Безопасным вариантом остаётся писать ссылку в теге [ code ], тогда её ничем не разбавят.
                                              Ответить
                                              • > чтобы движок ГК её не разбавил пробелами

                                                Пиздец. Так вот оно зачем (facepalm).
                                                Ответить
                                                • Разбавление пробелами был придумано, чтобы текст не вылезал за правую рамку. Однако, вылезание текста исправляется средствами CSS и без разбавления пробелами.
                                                  Ответить
                                          • P.S. Результаты беглого осмотра статьи:

                                            1. Есть какие-то исходники Blood Alpha, имеющего значительные отличия от релизной версии Blood.

                                            2. Есть порты карт Blood на другие движки: на движок Duke Nukem (соответственно без вокселей), на движок Doom (это вообще тупо, потому что в Думе сюжет двухмерный, хотя и графика трёхмерная), на движок Shadow Warrior (это уже ближе к Blood).

                                            С учётом того, что есть порты DN и SW на Win32, уже можно поиграть.

                                            3. Есть попытки воссоздать исходники Blood, имея на руках исходники SW, DN и ассемблерный листинг Blood.
                                            Ответить
                                            • P.P.S. Вот ещё тупо коллекция ссылок:
                                              https://www.gogwiki.com/wiki/Source_ports
                                              Ответить
                                      • Ещё одна интересная статья:

                                        https://en.wikipedia.org/wiki/Build_%28game_engine%29
                                        Ответить
                                      • Ещё одна интересная статья:

                                        https://en.wikipedia.org/wiki/Build_%28game_engine%29
                                        Ответить
                                    • Ну так там половина движка это эквилибристика с писанием в видеопамять. Если все это переписать на DirectX или OpenGL то потребуется довольно много времени.

                                      Можно конечно писать под GDI и не использовать ускорение но тогда получится кривое тормозное говно наверное
                                      Ответить
                                      • Кстати, а как Quake удалось быстро портировать?
                                        Ответить
                                        • Квейковый движок сразу писался в двух сортах: с софтварным рендерингом и с 3dFX. Вероятно по этой причине портировать его было не так сложно: был внятный уровень абстракции
                                          Ответить
                                      • > тормозное
                                        Если оно тогда не тормозило, то сейчас -- тем более не будет. Пусть рисует в буфер. Подходящий момент для перекачки буфера в видеопамять всяко можно отыскать.
                                        Ответить
                                        • Хочешь портануть?) В GDI даже bitblt есть:) Всмысле ты може создать bitmap в памяти, написать все туда и потом его bitblt. Будет как буфер.

                                          Кстати, игре под дос (в некоторых режимах) могли использоваться planes, когда одна точка писалась в три разных места (r, g и b). Это будет не очень удобно портировать
                                          Ответить
                                          • > Это будет не очень удобно портировать
                                            Шейдеры всё стерпят.

                                            Да и даже полностью софтовая эмуляция VGA должна летать на современных процах.
                                            Ответить
                                          • >> Хочешь портануть?)

                                            Немножко гуглёжки:
                                            http://icculus.org/duke3d/

                                            Жаль, Дюк без вокселей. Надо всё-таки гуглить Blood или Shadow Warrior.
                                            Ответить
                                            • P.S. А вот и исходники DN и SW (оригинальные):

                                              http://www.codersnotes.com/files/gamesrc/

                                              Сайт Сильвермана:

                                              http://advsys.net/ken/buildsrc/

                                              Портированный SW:

                                              http://www.jonof.id.au/jfsw
                                              Ответить
                                        • Интересно, а как портируется поллитровая анимация?
                                          Ответить
                                          • > поллитровая анимация
                                            Я думаю, что тупо по табличке конвертят каждый фрейм. Разрешение маленькое, процы сейчас быстрые. Да и вся поллитра в кеш войдёт.
                                            Ответить
                                            • А для этого дела можно шейдер напейсать?
                                              Ответить
                                              • > шейдер
                                                Ну да, если не туплю. Сложить поллитру в одномерную текстурку и в шейдере брать из неё нужный пиксель.
                                                Ответить
                                                • А теперь покажите пример кода.
                                                  Ответить
                                                  • > покажите пример кода
                                                    Блин, вот мне самому было бы интересно под webgl такое пильнуть...
                                                    Ответить
                                                    • Блин... А щейдеру можно на вход подать 256-цветное изображение?
                                                      Ответить
                                                      • > можно на вход подать
                                                        Да, вполне. 1 канал, 8 бит. Только надо прямоугольник с текстурой очень-очень аккуратно мапать на экран. Чуть-чуть с оффсетом или масштабом накосячишь и кровь-кишки-распидорасило. Ибо интерполяцию координат перед пиксельным шейдером никто не отменял.

                                                        З.Ы. Хотя оффсет и масштаб -- общая проблема для любого 2D графония через OpenGL.
                                                        Ответить
                                            • >> >> поллитровая анимация
                                              А можно было залить весь экран одним цветом (например, FF), а потом на ходу менять палитру быстрее, чем движется луч развёртки?
                                              Ответить
                                              • чтобы у пользователя случился припадок эпилепсии?
                                                Ответить
                                                • А вдруг таким способом удастся нарисовать картинку, если быстродействие позволит? Зато будет пример труднопортируемой игрушки.
                                                  Ответить
                                                  • пользователь не успеет ее рассмотреть кмк: луч слишком быстро бежит даже при развертке на 60.
                                                    Ответить
                                                    • > не успеет ее рассмотреть
                                                      Дык ты её 60 раз в секунду перерисовывай, как это обычно и происходит.
                                                      Ответить
                                                      • Ты понял что он предлагает так:
                                                        1) забиваешь память красным
                                                        2) ждешь когда луч попадет в середину экрана
                                                        3) забиваешь память синим (ну или меняешь политрку)

                                                        получается что пол экрана красные, а пол синие.
                                                        Ответить
                                                        • > Ты понял что он предлагает так
                                                          Ты его не понял. Он, походу, предлагал ещё более тонко менять палитру -- на каждый пиксель (ну или группу пикселей, если поштучно не успеваешь).
                                                          Ответить
                                                          • то-есть менять палитру 640x480 раз в ход луча?
                                                            ок, я за

                                                            типа 640x480x60?
                                                            Ответить
                                                            • 256 цветный режим имеет разрешение 320x240
                                                              Ответить
                                                              • >>256 цветный режим имеет разрешение 320x240
                                                                Если ты про 13h, он же "плоский" он же "без ебли с планерами" то 320x200.

                                                                Но это в чистом VGA
                                                                В VESA (VBE) дофига 256цветных режимов, вплоть до 1280×1024
                                                                Ответить
                                                                • В VBE ассортимент режимов зависит от размера видеопамяти. Если памяти много, то можно врубить дофигацветный режим 1600x1200.
                                                                  Ответить
                                                                  • да, если у тебя 2 мегабайта памяти на борту у карты то увы
                                                                    Ответить
                                                                • Я про старых игорей.
                                                                  Ответить
                                                                  • Как думаешь, гей ли Игрь Корнелюк?
                                                                    Он ведь манерный такой весь, слащавый.
                                                                    Ответить
                                                            • В идеале 640x480x60. Ага, 18 миллионов раз в секунду. На каком-нибудь 486 точно бы не получилось (пяти тактов наверняка не хватит, чтобы поменять палитру и проверить условие цикла), а на чём-нибудь поновее можно попробовать.
                                                              Ответить
                                                              • Боюсь что 18 миллионов разв секунду не получилось бы не только у 486 но у шины ISA на которой сидела видеокарта и у ее памяти -- тоже
                                                                Ответить
                                                                • А если карта PCI на шине хотя бы 33 МГц?
                                                                  Ответить
                                                                • Если не на каждом пипселе поллитру менять то можно 9млн или 4,5млн раз всеку нду.
                                                                  Ответить
                                                              • > проверить условие цикла
                                                                Анролл на строку развёртки. И самомодификация кода во время hblank.

                                                                Но вот можно ли синхронизнуться на hblank на VGA/CGA? Просто без привязки к hblank очень сложно будет идти синхронно с развёрткой.
                                                                Ответить
                                                              • Кстати, а ведь это можно делать и в текстовом режиме! Если видюха не кеширует взятый из поллитры цвет на всю ширину символа, конечно.
                                                                Ответить
                                                  • Ну и щобля, как эта хумта реализуется? Помоему будет просто быстро моргающий экран разными цветами и пена из рота.
                                                    Ответить
                                                    • > быстро моргающий экран
                                                      Дык надо моргать быстрее, миллионы раз в секунду и синхронно с развёрткой.
                                                      Ответить
                                          • поллитровая мышь манямация это когда содержимое видеопамяти не меняется а меняется палитра и потому всё мигает?

                                            типа цвет 123 теперь не красный а бурый?
                                            Ответить
                                            • Представь себе, что ты рисуешь движущийся жёлтый квадратик на синем фоне. Заполним фрагмент экрана так:
                                              000000
                                              012340
                                              012340
                                              000000
                                              Сначала присвоим 0=3=4=синий, 1=2=жёлтый. Получим:
                                              000000
                                              0**000
                                              0**000
                                              000000
                                              Потом присвоим 0=1=4=синий, 2=3=жёлтый. Получим:
                                              000000
                                              00**00
                                              00**00
                                              000000
                                              Потом присвоим 0=1=2=синий, 3=4=жёлтый. Получим:
                                              000000
                                              000**0
                                              000**0
                                              000000
                                              Получили движение, меняя только палитру, а не видеопамять.
                                              Ответить
                                              • да, я понял

                                                так делали когда писать в память было дорого
                                                Ответить
                                            • Не обязательно мигает, могут быть красивые перетекания из одного цвета в другой. В поллитре-то хранятся rgb.
                                              Ответить
                                          • ХуЯндекс отказывается искать палитровую онимацию и ищет поллитровую.
                                            Ответить
                                  • Лол, эти руки можно было сбрасывать пробелом. НО НЕ НА ТОЙ ВЕРСИИ В КОТОРУЮ Я ИГРАЛ, СУКА!
                                    А так - неудачный бросок динамита, огреб от босса, монахи, да и просто неудачно влез в бой. Дюк тут гораздо предсказуемее.
                                    Ответить
                                  • > для своего времени
                                    НА ВСЕ ВРЕМЕНА!!!

                                    Атмосферная такая ишрушка. Красивая.
                                    Ответить
                                • https://pp.userapi.com/c845522/v845522662/7bdd4/8ZCwSzVdAV8.jpg
                                  Ответить
                              • >Самые сложные это аркады на приставках образца 90х Mario2 (японский), Contra итд

                                Да. Battletoads самый сложный.

                                >Mario2 (японский)
                                Если это то о чём я думаю, то это пиздец.
                                Ответить
                                • > Battletoads самый сложный.
                                  Да ладно, их можно пройти. Для меня там самый пиздец -- ёбаная крыса-террорист, которую надо обогнать.
                                  Ответить
                                  • Контру я проходил и Double Dragon тоже.

                                    >ёбаная крыса-террорист, которую надо обогнать

                                    Это где? Когда на мотоциклах
                                    Или это:
                                    https://youtu.be/kW7KBl7zSE0?t=2712

                                    Я там постоянно факапил когда подымаешься по такой змее вверх. И крыса тоже, но до неё очень сложно дойти было.
                                    Ответить
                                    • > Это там где на мотоциклах на втором левеле?
                                      Не, я в просто battletoads задротил, без double dragon.
                                      Ответить
                                      • >Не, я в просто battletoads задротил
                                        comment updated

                                        http://govnokod.ru/24375#comment417458
                                        Ответить
                                    • Ебать меня в жопу! Аж слеза навернулась.

                                      А где уровень на скутерах в подземелье? Что-то не увидел его на видео. Помню что долго не мог его пройти, вот не помню, прошёл-ли.
                                      Ответить
                                      • Так это отнюдь не самое сложное.

                                        Там потом надо крысу отпиздить. Потом устроить ББПЕ паре шлюх с плётками, хуйнуть чела с пулеметом, расхуярить космокорабль на маленькой пиздюрке.

                                        И это будет только середина игры.

                                        И там баг ещё такой, очень доставучий. Когда ползёшь к рубильнику, а вокруг тебя крутится электричество. Вот иногда игра глючила, чуть-чуть смещала персонажа и потом никак нельзя было слезть с той трубы.
                                        Ответить
                                        • А в Contra примерно шесть миллионов врагов и у тебя 3 жизни
                                          Ответить
                              • >на приставках образца 90х Mario2 (японский)

                                https://www.youtube.com/watch?v=in6RZzdGki8

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

                                А из тех картриджей что у меня были однозначно Battletoads. Причём &DD мне таки удалось пройти.

                                А тот где только жабы — он запредельно блядь сложный.
                                Ответить
                                • Япониский сложнее: https://youtu.be/5apu4ML9Wto

                                  Mario вышла на NES (и как там она в японии называлась -- фамиком вроде). Потом японцы сделали продолжение, но в Европу и США продавать не стали потому что слишком сложно видимо:)

                                  В США на NES совсем другой Mario 2, который в Японии называлася doku doku panic, только в него перенесли персонажей из Mаrio: можно играть за принцессу или гриба.

                                  Боже, зачем я всё это знаю
                                  Ответить
                                  • >Япониский сложнее: https://youtu.be/5apu4ML9Wto

                                    Посмотри видео по моей ссылке.
                                    Он не может быть сложнее. В принципе.
                                    Ответить
                                • На Comodore 64 была пародия на Марио: Giana Sisters.

                                  https://ru.wikipedia.org/wiki/The_Great_Giana_Sisters

                                  Играл в неё на x86 через эмулятор.
                                  Ответить
                                  • апхаха, какая прелесть
                                    https://www.retrogamer.net/retro_games80/the-making-of-the-great-giana-sisters/
                                    Ответить
                                  • апхаха, какая прелесть
                                    https://www.retrogamer.net/retro_games80/the-making-of-the-great-giana-sisters/
                                    Ответить
                              • А кто-нибудь видел Doom 2D -- двухмерную пародию на Doom, написанную чуваками из Ивантеевки (если не ошибаюсь)?
                                Ответить
                                • Там еще саундтрек из кино?
                                  или нет

                                  ну вот оно
                                  https://www.youtube.com/watch?v=QbsVREc9TRQ
                                  Ответить
                                  • Оно. Там ещё авторы сами признались, что они не исследовали проходимость своих уровней, поэтому если игрок допустит ошибку, он может привести игру в состояние, в котором уровень принципиально непроходим, т. е. зайти в тупик. Выход -- начинать играть заново.
                                    Ответить
                                    • Да дофига таких игр, где можно себя в тупик: В Hugo III каждое второе телодвижение приводит тебя к тупику
                                      Ответить
                        • > До сих пор долбоёбы есть у которых 16ти битные программы для реального режима, написанные 25 лет назад.

                          Видел на кассе супермаркета софтина в стиле доса. Это оно, доктор?
                          Ответить
                          • Я видел, как перезагружали кассу в каком-то магазине типа "Пятёрочки" и там после теста BIOS появилась волнительная надпись: "Starting MS-DOS..."
                            Ответить
                          • Я видел, как перезагружали кассу в каком-то магазине типа "Пятёрочки" и там после теста BIOS появилась волнительная надпись: "Starting MS-DOS..."
                            Ответить
                        • В нашей медшараге были такие. Студоте тупо кидали тестер в формате *.com и эмулятор - ебись, как хочешь, ставь, и проходи тест. А в кожно-венерологическом диспансере до сих пор есть парк компов с выпуклыми мониторами, под 95 винду. На них установлена программа оценки уровня знаний. Когда я первый раз вошёл в эту пещеру, ощутил чувство святости и высокого начала.
                          Ответить
                          • > парк компов с выпуклыми мониторами
                            В моей школе были такие в компуктерном класси, только стоял на них какой-то "Лёхкай линукс", который выглядел как испоганенная 98 винда. Мы на них ебались с ПопенОфис.
                            Ответить
                          • > В нашей медшараге
                            > Студоте

                            В поликлиниках бывает софт, который врачам и лаборантам (а не студоте) приходится запускать через жопу "DOSBOX".
                            Ответить
                        • > долбоёбы есть у которых 16ти битные программы для реального режима, написанные 25 лет назад.
                          Сидят токие долбоёбы на парах, пишут проги под дос. :)
                          Ответить
                          • На парах это другое: я не против изучения 16ти битного ассемблера в ВУЗе потому что это отличный способ изучить простой асемблер и научиться программировать железо (таймер там или контроллер прерываний)

                            Но в продакшене зачем?
                            Ответить
                            • > Но в продакшене зачем?
                              Трамплинчики для перехода в защищённый режим и обратно. Х.з. зачем ещё сейчас риалмодный асм...
                              Ответить
                              • Да, в продакшене-то зачем?
                                Ответить
                              • Ты думаешь они на парах пишут загрузчик который должен в бутблоке сидеть?
                                Ответить
                                • CSM пишут.

                                  З.Ы. Ты что-то там спрашивал дней 5 назад, напомни в каком треде.
                                  Ответить
                                  • Я спрашивал почему COM порты ищут перебором (пишут в регистр и читают обратно) а не через ACPI. Столкнулся с этим и был очень удивилен.

                                    cms -- Compatibility Support Module?
                                    Ответить
                                    • > Compatibility Support Module
                                      Угу.

                                      > почему COM порты ищут перебором
                                      Рискну предположить, что для раннего логирования, когда эти ваши ACPI ещё некому исполнять. Да и адреса этих портов менять уже никто никогда не будет.
                                      Ответить
                                      • >>для раннего логирования
                                        Всмысле чтобы запускать сосноль на компорту и отладчик ядра?
                                        Ответить
                                        • > сосноль на компорту и отладчик ядра
                                          Ну да. Или хотя бы просто логи загрузки туда сливать.
                                          Ответить
                              • Вот можно еще для антидебага риалмодный асм использовать
                                https://lj.rossia.org/users/herm1t/66091.html

                                http://man7.org/linux/man-pages/man2/modify_ldt.2.html
                                > The normal use for modify_ldt() is to run legacy 16-bit or segmented 32-bit code. Not all kernels allow 16-bit segments to be installed, however.

                                Этот modify_ldt кажется используется в DOSEMU и еще в Wine если им запустить 16-битные приложения винды
                                Ответить
                                • https://wayback.archive.org/web/20180102112819/https://www.wine-staging.com/news/2016-02-10-blog-wine-16bit.html
                                  Ответить
                                • >>push 0x003eafcc
                                  спасибо тебе господи что я не вирусописатель, это же ад и палестина

                                  >>modify_ldt
                                  Интересно, можно использовать эту фичу для безопастности: нарезать себе два сегмента: Один с правом записи, другой -- с правом исполнения, и получить нахаляву NX в 32битной моде?

                                  Просто если modify_ldt нужен только штоб 16ти битный код гонять то как-то жирно
                                  Ответить
            • debug.com 16ти битен (но судя по именам регистров это именно то, что вы хотели)

              работает он, соответственно, только в 32битной винде (в режиме V86), в long mode уже ничего этого нет

              Так что я сочувствую тебе, счастливый обладатель компютера с памятью менее 4 гигов
              Ответить
              • > debug.com 16ти битен (но судя по именам регистров это именно то, что вы хотели)
                Ковыряюсь в дерьме мамонта
                Ответить
              • >> счастливый обладатель компютера с памятью менее 4 гигов

                А вдруг у него PAE?
                Ответить
                • Ну тогда он может юзать до 64г, но программы-то всё равно не видят больше 4Г (если он не использует AWE которые никто кроме парочки серверных программ не умел)
                  Ответить
        • когда-то lea работал быстрее и позволял разгрузить арифметическое устройство потому что обрабатывался на устройстве, отвечающем за адреса

          но это уже давно не так.
          Ответить
          • > lea работал быстрее
            Кто-то где-то говорил, что inc/dec работает медленней add/sub. С чем это связано?
            Ответить
            • inc/dec стал работать медленнее add/sub на пнях. На говне мамонта (486 и ниже) инкременты были быстрее.

              Возможно, это связано с устройством конвейера и предиктора, которых в старом говне не было.
              Ответить
              • P.S. Вообще с появлением предиктора однобайтовые инструкции стали медленнее (вспомним пример про rep ret на AMD). Возможно, предиктор читает не один байт, а как минимум два. Если инструкция однобайтовая, ему приходится делать шаг назад.
                Ответить
              • То-есть у нас есть нахуй не нужная инструкция?)

                Вообще говоря начиная с пня весь асемблер переводится префетчером в лоу-левел код под конкретную архитектуру: он может не делатьразницы между inc и add 1
                Ответить
                • Строго говоря не с пня, а с P6 (Pentium Pro и Pentium II). Рискового ядра точно не было у первого пня и у Pentium MMX, а также (возможно) не было у AMD K6 (хрен его знает, что там было у AMD, наружу это всё равно не было видно).

                  Как давно это было, аж джвадцать лет назад...
                  Ответить
                • Строго говоря не с пня, а с P6 (Pentium Pro и Pentium II). Рискового ядра точно не было у первого пня и у Pentium MMX, а также (возможно) не было у AMD K6 (хрен его знает, что там было у AMD, наружу это всё равно не было видно).

                  Как давно это было, аж джвадцать лет назад...
                  Ответить
                  • >>аж джвадцать лет назад..
                    Больше:)

                    >>Строго говоря не с пня, а с P6 (Pentium Pro и Pentium II).
                    Да, вероятно ты прав.
                    Там еще был pentium overdrive кажется, но я не знаю умел-ли он.
                    ---
                    зы: заглянул в книжку mindshare:
                    micro-op: fixed-length RISC instruction executed by P6 cpu core
                    всё так
                    Ответить
                    • Overdrive -- это всего лишь процессор нового поколения, который втыкался в сокет старого поколения. Например, был первый пень overdrive для апгрейда материнки, рассчитанной под 80486. Следовательно, он был рассчитан и на более медленную шину, и каких-то выводов не имел...
                      Ответить
                      • Так был-ли он уже risc?
                        Ответить
                        • Сомневаюсь. У него не было ни инструкций CMOV (предшественник SSE), ни даже MMX. Он был предназначен для несчастных обладателей материнки от 486, которые хотели шагнуть хоть немного вперёд, а заменить материнку что-то мешало.
                          Ответить
                          • Вика пишет что он был P54, так что таки да -- не был.
                            Но еще был Pentium II Overdrive который втыкался в Socket 8 (от Petntium Pro), когда нормальные PII уже вставляли в Slot 1.
                            Ответить
                            • In 1998 the Pentium II OverDrive, part number PODP66X333, was released as an upgrade path for Pentium Pro owners.

                              Если у Pentium Pro уже было RISC-ядро, а Pentium II Overdrive предназначался для владельцев Pentium Pro (т. е. должен быть не хуже), то каким может быть ответ?

                              На всякий случай замечание:
                              1. Pentium MMX вставлялся в гнездо от P54, имел инструкции MMX, но не имел RISC-ядра.
                              2. Pentium Pro вставлялся в Socket 8, имел инструкции CMOV, RISC-ядро, но не имел инструкций MMX.
                              3. Pentium II вставлялся в Slot 1, имел RISC-ядро, имел и инструкции CMOV, и инструкции MMX.

                              Что из этой информации напрямую относится к RISC, а что нет?
                              Ответить
                              • >>то каким может быть ответ?
                                Да понятно, я просто обратил внимание что было два овердайва и первый был не risc, а второй risc.

                                >>Что из этой информации напрямую относится к RISC, а что нет?
                                В смысле можно-ли реализовать CMOV или MMX в cisc?)
                                Ответить
                                • Кстати, у AMD K6 (который вставлялся в разъём от P54) помимо MMX ещё были инструкции 3D Now, а у K6-III даже два уровня встроенного кэша (так что кэш материнской платы становился L3).

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

                                  >> Да понятно, я просто обратил внимание
                                  Ну тогда и второй вопрос не так актуален.
                                  Ответить
                                  • Рискну предположить что кеш был прозрачен для программиста, в отличие от инструкций 3D Now.

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

                                            На самом деле я до сих пор в ахуе от того как люди додумались до такого.

                                            зы: Мышхъ целую главу написал про оптимизацию под кеш (правда уже сильно устаревшую), но мне кажется что большинству питушков (кроме гейдевов и мачимачихов) хватит просто последовательного чтения/записи: весь аппарат оптмизирован на референс локалити и последовательное обращение
                                            Ответить
                                            • > нету инструкции явно "положить что-то в кеш"
                                              PREFETCHxxx смотрит на тебя с недоумением.
                                              Ответить
                                              • >>PREFETCHxxx
                                                Могу соврать (надо зырить мануал) но мне казалось что никакой гарантии попадания данных в кеш там не было: ты мог "попросить процессор подвинуть данные ближе", то-есть это такой хинт, нет?
                                                Ответить
                                  • > гнездо на количество инструкций не влияет
                                    Да вроде только интел задуряется с новым несовместимым сокетом под каждое семейство процов. У AMD с сокетами постабильней.
                                    Ответить
                                    • >>под каждое
                                      Теперь вот на тебя смотрит LGA 775, переживший хуеву кучу микроархитектур
                                      Ответить
    • Все ржут над архитектурой x86, которая унаследовала кучу костылей от предшественников. Однако, когда Интел выпустил Itanium, полностью лишённый наследства старых процессоров, его заклевали. Заклевали, как сейчас клюют МЦСТ с его "Эльбрусом".
      Ответить
      • Все ржут над Unix, унаследовавшей кучу костылей, однако когда вышел Plan9 его все заклевали.
        Все ржут над JavaScript, однако когда гугл выпустил Dart его все заклевали.


        В мире один миллиард программ, написанных, отлаженных и скомпилированных под x86 со всеми его костылями.
        Прекрасный PowerPC, чудесный Itanium, умный Sparc64 именно по этой причине пошли, в свое время, лесом.
        Ответить
        • А почему не пошли лесом мобильные устройства, которые оживили целый зоопарк процессоров и целый зоопарк операционных систем?
          Ответить
          • Ниша была новая -- ещё не было успешных конкурентов, ещё не было тонн легаси говна.
            Ответить
            • Перед "Андроидом" и "iOS" было говно в виде "j2me", а чуть позже "Symbian" и "BB", на которых успели написать тонну приложений.
              Ответить
              • Ну ты сравнил количество кода под PC в 1999 году каком-нить и количество мобильных приложений в 2008м.

                Компании вложили миллионы баксов в софт, потому первый вопрос который они задавали производителю проца: "а там будет работать мой софт двадцатилетней давности?"

                Думаешь MS и Intel от хорошей жизни умели V86?
                Ответить
                • Верно. Основным условием при выборе нового компа и ОС для бухгалтерии была возможность запуска "1С". Если "1С" не запускалась, то комп/ОС шли лесом. А "1С" не торопилась менять платформу.
                  Ответить
              • > Перед "Андроидом" и "iOS" было говно в виде "j2me"
                J2ME это ж не ось? Это жава вм хуита, её можно и на Андрюйде поставить.
                Ответить
          • К слову, M$ таки чуть-чуть опоздала и пошла лесом с мобильного рынка. Где сейчас мобилы с виндой?
            Ответить
            • Есть ценители у мобил с виндой, так же, как у "ипхонов".
              Ответить
              • Нету уже. MS свернул лавочку
                Ответить
                • У самого свежего билда Windows 10 Mobile поддержка заканчивается 10 декабря 2019 года.

                  Lumia 510, 540, 550, 650 есть в продаже.
                  Ответить
                  • https://www.theverge.com/2017/7/11/15952654/microsoft-windows-phone-end-of-support
                    Ответить
                    • И что? Куча девайсов в один день стали официально неподдерживаемыми, но никуда не делись.

                      Ты ещё скажи, что Сёма четыре года назад удалил Windows XP.
                      Ответить
                      • А то, что без поддержки вендора сложно будет выпускать новые программы.

                        Жаль, кстати: C#.NET вполне годные язык и платформа
                        Ответить
                        • > сложно будет
                          Да выпускать то можно, но зачем? Тут та же ситуация, что и с десктопным линуксом -- если винда на мобилах не покрывает даже 0.3% рынка, то кто будет тратить ресурсы и под неё что-то писать?
                          Ответить
                          • >> что и с десктопным линуксом
                            Все Intellij-based продукты (включая Idea, Android Studio и PyCharm) имеют официальные Linux версии (даже snapы есть иногда!)

                            Android Studio -- официальная (по сути единственная) IDE для самой популярной мобильной платформы в мире (и устройств под ней скоро станет больше, чем компов под windows). И она официально поддерживает Linux.
                            Ответить
                        • З.Ы. А вот surface pro и его клоны таки нашли свою нишу. Тупо из-за того, что там amd64 и обычные виндовые проги можно юзать.
                          Ответить
                          • Вообще-то там 64-битный Intel, никаких AMD туда не ставили, насколько я знаю. И surface pro вообще ничем принципиально новым не является, просто очередной ноут с сенсорным экраном (будто бы до Microsoft никто такого не делал)
                            Ответить
                            • > 64-битный intel
                              А 64-битный intel это не amd64?

                              > ноут с сенсорным экраном
                              Скорее планшетка с клавой.
                              Ответить
                              • > А 64-битный intel это не amd64?
                                Есть некоторые инструкций, которые в AMD64 есть, а в 64-битных интелах нет. Да даже в 32-битную эру были такие инструкции, 3DNow!
                                И вот еще
                                https://en.wikipedia.org/wiki/X86-64#Differences_between_AMD64_and_Intel_64

                                А еще были когда-то процессоры Cyrix, у которых тоже какие-то свои особые инструкции были
                                Ответить
                                • Какой багор )))

                                  Я серьёзно. Выходит, что программы нужно распространять либо в исходниках, либо сразу несколько вариантов бинарника: универсальный (без оптимизации, с усечённым набором инструкций), для "AMD", для "Интела".
                                  Ответить
                                  • Не нужно. Можно подгружать модули в рантайме после CPUID.

                                    Некоторые ОС (gentoo, arch, netbsd, freebsd) encourage тебя компиляться под конкретный проц.
                                    Некоторые (ubuntu, debian, centos/redhat, openbsd) -- нет
                                    Ответить
                                • amd64 это неофициальное название всего long mode примерно как "ксерокопия" от слова "ксерокс"

                                  Много где можно встретить foo-x86 и foo-amd64, например
                                  Ответить
                                • >А еще были когда-то процессоры Cyrix, у которых тоже какие-то свои особые инструкции были

                                  Были. Cyrix 3dnow кстати тоже поддерживали.
                                  Которые по сути 64-битный sse.
                                  Ответить
                                  • У 3dnow плавпитух, у sse -- целый.
                                    Ответить
                                    • Спутал, это у "mmx" был целый питух.

                                      Разница между "3dnow" и "sse" в том, что они работают в разных регистрах.
                                      Ответить
                                      • mmx юзал регистры питуха afaik, а вот sse уже нет
                                        Ответить
                                        • Верно. С "mmx" и с плавпитухом нельзя было работать одновременно, нужно было тратить время на переключение и на наполнение/сохранение плавпитушиного стека.

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

                                          А вот "3dnow" существовал как надстройка над "mmx", поэтому требовал переключения, как и "mmx".
                                          Ответить
                                          • Я, если честно, не знаю кто юзал MMX и 3DNow.
                                            Квейк юзал?
                                            Ответить
                                            • Про 3DNow не знаю, но MMX использовал Ken Silverman -- автор Blood, Duke Nukem, Shadow Warrior.

                                              Вот что писал сам Кен:
                                              I messed around with the code quite a bit and discovered
                                              that MMX really didn't help at all.  In fact, in some ways
                                              it made the code slower.  The problem is that the inner
                                              loops of Build are already optimized really well.  I have
                                              found that MMX is useful only because it gives you extra
                                              registers. Unfortunately, the Build loops don't need extra
                                              registers since they aren't very complex.


                                              Типа Кену "MMX" не дал прироста пирфоманса, значит, "MMX" не нужен.
                                              Ответить
                                              • 3DNow как раз довольно много игорь юзали, т.к. там флоаты были не стековые.

                                                Сомневаюсь насчёт кваки. Кармак всю жизнь оптимизировал под интел.

                                                Хотя вот на вики пишут шо таки да
                                                https://en.wikipedia.org/wiki/Quake_II

                                                Unlike Quake, where hardware accelerated graphics controllers were supported only with later patches, Quake II came with OpenGL support out of the box. Later downloads from id Software added support for AMD's 3DNow! instruction set for improved performance on their K6-2 processors
                                                Ответить
                                                • >>3DNow как раз довольно много игорь юзали,
                                                  потому в 2001 году считалось что "amd лучше для игр"
                                                  Ответить
                                              • Как-то он их неудачно юзал.

                                                Я вот знаю что SSE последние юзают все: от подбирателей паролей до хрома, а мне интересно кто юзал mmx.
                                                У меня есть такое ощущение что в 90х годах софт компилировался под 386 потому что это было 60% парка компов, и завязываться на mmx было стремно.
                                                А когда уже стали более-ли-менее нормальные машины появляться то уже начались SSE

                                                Правда, это в России. Может быть в мире не так.
                                                Ответить
                                                • >а мне интересно кто юзал mmx

                                                  Тю ёба, да все юзали. Кому нужны были целые.

                                                  Но в играх нужнее флоаты.

                                                  А патч 3dnow сама АМД написала:

                                                  Half-Life: Uses MMX to great extent, particularly for the software DSP sound engine and probably also skeletal animation system

                                                  Unreal: Uses MMX for its Galaxy sound engine, in fact the readme suggests to lower the sampling rate to 11 kHz for better performance on non-MMX CPUs. MMX was also used greatly for the software renderer. There is probably some 3DNow! usage and SSE is detected, although I don't think it's used

                                                  Quake II: 3DNow! patch written by AMD to promote K6-2, provides a notable speed boost (and supposedly there are even graphical differences with this?!). There are specific options available for 3DNow! software, OpenGL and Voodoo2 MiniGL ("3DfxGL") IIRC, and also a later version that is more optimized towards K7. No MMX usage though:

                                                  Quake II does NOT use Intel's latest MultiMedia eXtensions. Unreal will though as well as other upcoming games. Even then, it's wise to buy a MMX chip if you're already thinking of upgrading your machine.

                                                  Ответить
                                                • The Quake engine uses the Intel FPU extensively, and also uses a native feature of the Intel FPU called Parallel FPU lines. This allows simultaneous integer and FPU calculations and Quake uses these to do lots of calculations at the same time. The problem is that the MMX instructions use the Parallel FPU lines for calculation, and if MMX were supported in Quake, Quake and the MMX would be fighting over the usage of the Parallel FPU lines. This isn't the problem for most programs because Quake is just about the first major program that even uses Parallel FPU lines in the first place, so other programs don't have this conflict.

                                                  Carmack reported that a MMX version of Quake he had in alpha stages would run, at best, the same speed in 16-bit colour as an 8-bit colour version does on a non-MMX Pentium chip of the same clock speed. Carmack says this increase in colour depth only isn't worth the development time and money and has decided not to support MMX with the Quake engine in its current form.
                                                  Ответить
                                                  • короче говоря mmx отжимали регистры у fpu и зато были нелюбимы. Хорошо что в SSE это пофикшено
                                                    Ответить
                                                    • А, я кажется вспомнил в чём прикол 3dnow был.

                                                      Он мог обрабатывать в джва раза больше флоатов, за те же деньги. Но 32х битных.

                                                      То есть за одну инструкцию они хуярили в 64битах по 2 флоата сразу.

                                                      Для игр точность была сильно критична, потому шло на ура.

                                                      Интел на тот момент вообще так не умел.

                                                      Просто у АМД это было хроническое. По интам PentiumRating вроде заебись, а плав. питух работал медленно.
                                                      Ответить
            • Опоздала буквально на пару лет, а могла бы всех вздернуть потому что в отличие от Apple и Google у них уже были и язык, и платформа, и IDE и куча разработчиков
              Ответить
            • У меня где-то валялся кнопошный смартфон с виндос мобайл 6.0 2009 или 2010 года высера. Тока аккумулятора у меня от него нет (надул пузико).
              Ответить
        • >гугл выпустил Dart его все заклевали

          Фублядь, фунахуй. Кому нужна очередная недоджава с плюшками?

          На фоне дарта js is pretty ok.
          Ответить
          • А помоему Dart красивый, почти как Сишка.
            Ответить
            • Так компилируется в js — бери, пользуйся.

              Только он нахуй никому не нужОн, этот ваш дарт.
              Ответить
              • > компилируется в js — бери, пользуйся.
                Развешто только для себя.

                Изза токих как ты он и нинужон, жысоманы.
                Ответить
              • >>Только он нахуй никому не нужОн, этот ваш дарт.
                https://flutter.io

                У человека, который хочет написать мобильное приложение и при этом не писать логику 2 раза (один раз на котлине, другой раз на свифте) есть два стула: на одном JS от фейсбука и апача точены, на другом C# от ксамарина и MS. Теперь есть третий стул от гугла с дартом.

                Был когда-то еще робовм чтобы все писать на джаве, но кажется он уже того
                Ответить
          • > Кому нужна очередная недоджава с плюшками?

            Ты, наверное, пропустил хайп TypeScript, который в точности соответствует твоему описанию.
            Ответить
            • >Ты, наверное, пропустил хайп TypeScript

              Никак нет.

              >который в точности соответствует твоему описанию

              В ts хотя бы отличия косметические: там необязательные типы после переменных, ключевое слово constructor.

              Правда это следствие самой ценной его фичи: обратной совместимости с ECMA5. Эдакий жс с автовыводом.
              Но как увидел все эти class, private, у меня реакция: «Шо, опять? Вот же ж жаба головного мозга.»

              И еще вот что удивительно, чего же M$ которая этот тайпскрипт выдумала, офис пишет на J$e?
              Ответить
              • Dart действительно взял у джавы (а та у сей) много говнеца
                1) не final по умолчанию
                2) декларацию где тип идет перед имеием
                3) ключ слово new которое не нужно никогда

                И все же оно лучше чем JS образца до 2015
                Ответить
                • > декларацию где тип идет перед имеием
                  А мне это нравится. Особенно сишные объявления типа:
                  char *((*f[100500])())();


                  > ключ слово new которое не нужно никогда
                  Ну да, но нет ничего сложного в том, чтобы написать слово из 3 буков.
                  Ответить
                  • > А мне это нравится

                    Зелёным, надеюсь? Одна из самых больших ошибок сишки, кмк.
                    Ответить
                    • Да вроде бы все уже это признали.

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

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

                        > лет десять назад пришло осознание, и новые япы уже этим не страдают
                        Вирту яблоко на бошку первому упало. Ещё до сишки.
                        Ответить
                        • Вирт был параллелен сям, я про тех кто был воспитан на сишном ситнаксисе а потом перевоспитался)

                          Кстати, некоторые старики считали что тенденция 80-90 ухода от паскалеобразных к сиобразным это плохо
                          Ответить
                          • Дык хакиры должны ведь писать код, который они сами не смогут понять протрезвев, этожкруто, вот и перешли на си.
                            Ответить
                            • Ну такой код, не самый страшный
                              https://minnie.tuhs.org//cgi-bin/utree.pl?file=V2/c/cvopt.c


                              Смотрите, смотрите, auto в 1972м году
                              Ответить
                              • Это какой-то особый диалект Си без циклов?

                                Бля, что ты мне показал? Спагетти-код на Си в стиле старого Бейсика на сайте на Перл.
                                Ответить
                                • Это K&R си эпохи до C89

                                  зацени, кстати, няшщку:
                                  extern putchar,getc,peekc,printf,flag,flush;

                                  знаешь почему?

                                  Потому что в ту пору не указывали параметров в декларации и не распостраняли хедеровые файлы с ними

                                  Програмист под unix должен был набивать декларации сам, почерпнув их из бумажной документации

                                  Ответить
                              • А если без зелёного, то слово "auto" относилось не к типу, а к хранилищу (стек, регистры, сегмент данных или ещё что-то, поддерживаемое архитектурой). К типу относилось слово "int", которое можно было опускать.
                                Ответить
                                • Совершенно верно.

                                  auto означает"автоматическая" переменная это такая, которая умирает при выходе из блока. Storage duration у нее такой.
                                  Сейчас многие называют ее "переменная на стеке", но на самом деле стек это как-бы деталь реализации.

                                  int действительно был типом по умолчанию, и потому не писался явно

                                  main(){
                                  return 42;
                                  }

                                  А еще не было void* и потому в старом коде (в dns клиенте штоль) можно встретить char* который не строка а указатель на неизвестное.

                                  В общем хорошо что весь этот K&R почил в бозе к моменту выхода C89


                                  зы: а еще там надо было немного по-другому указывать параметры функции
                                  Ответить
                                  • Кстати почему остались долбоёбы, которые до сих пор пишут int func(void) { ?
                                    Ответить
                                    • Ну вот наверное потому что 30 лет назад func() могло означать что декларация просто НЕ УКАЗЫВАЕТ какие есть параметры, а не что она явно принимает ничего
                                      Ответить
                                    • Ага, при чем учат других долбоёбов на своих примерах, и долбоёб повторяет за долбоёбом
                                      Ответить
                                      • Ну это, кстати, не самое страшное. Это хоть на исполнение кода не влияет.
                                        Ответить
                              • Пиздец говно
                                Ответить
                    • Мне ещё Алкоголь-68 нравится:
                      PROC f = (PROC(INT)INT g, []INT x)[]INT:(
                          # ... #
                      );
                      Ответить
                      • бедные квадратные скобочки, означающие массив
                        в каждом языке они с разных сторон пишутся, воно куда их занесло в алголе
                        Ответить
                        • Скажу больше: у "Алгола" было несколько вариантов синтаксиса. Был с фигурными скобками, как в "Си", был с begin...end, как в "Паскале", был с математическими значками, как в "APL". Был диалект со словом "array" вместо квадратных скобочек.
                          Ответить
                          • Вот это правильно: должно быть множество способов сделать одно тоже: как в перле или руби
                            Ответить
                            • Нет, я тут описал не один Алкоголь Алгол, а несколько диалектов. Не знаю, была ли в одном Алголе возможность выбирать вариант синтаксиса.
                              Ответить
                            • Нет, я тут описал не один Алкоголь Алгол, а несколько диалектов. Не знаю, была ли в одном Алголе возможность выбирать вариант синтаксиса.
                              Ответить
                            • Нет, я тут описал не один Алкоголь Алгол, а несколько диалектов. Не знаю, была ли в одном Алголе возможность выбирать вариант синтаксиса.
                              Ответить
                            • Про перл есть хорошая картинка:
                              https://pbs.twimg.com/media/CSBGAgJUsAAwLLf.png
                              Ответить
                      • Кстати, вот эта фигня после знака "=" это по сути дела лямбда:
                        [code]print( ((INT x)INT:(x * x))(6) ); # 36 #
                        Ответить
                  • >>А мне это нравится
                    фу, какой толстый троллинг
                    >>Ну да, но нет ничего сложного в том,
                    фу, какой толстый троллинг
                    Ответить
                  • Ьля... Кто может это расшифровать?
                    Ответить
                    • https://cdecl.org/
                      Ответить
                      • В Сях, когда функция возвращает функцию, это ведь тоже что и указатель на функцию?
                        Ответить
                        • ага)
                          AFAIK функция может вернуть только указатель на функцию:)
                          В сях же нету лямд ;)
                          Ответить
                          • Ну, типы функция и указатель на функцию в Си различается, например sizeof(func) == 1, а sizeof(&func) == 4 (или 8), но по сути это одно и то же.
                            Ответить
                            • божемой, что такое sizeof(func)? Размер ЧЕГО он возвращает?
                              Ответить
                              • Размер функции.

                                Вероятно, размер элемента массивов чаров, т. е. размер чара.
                                Ответить
                                • Количество байт в байте
                                  Ответить
                                  • А разве внутреннее представление функции не символьная строка?
                                    Ответить
                                    • Было бы клево если бы sizeof возвращал размер функции, да)

                                      он ведь работает на этапе копеляции, то-есть он знает размер в буквах:)
                                      Ответить
                                      • И в Си, и в Паскале некоторую путаницу вызывает, то, что некоторые объекты (имеются в виду не элементы ООП, а просто данные) передаются "по ссылке". "Ссылка" в скомпилированном коде передаётся как указатель, а в синтаксисе исходных кодов выглядит, как будто передаются данные.

                                        Например, функцию нельзя передать по значению, она передаётся "по ссылке". Со строками также всё запутано (реально это может быть указатель на массив, а работаем как с массивом).

                                        То ли дело "Ассемблер", где всё понятно, кроме LEA.
                                        Ответить
                                        • В си (плейн), все таки, нету строк, и там все передается по значению кроме массивов, которые (зачем-то) сделали через жопу.

                                          Я раньше думал что боялись порвать стек, но при этом размер структур-то никого не волнует, особенно если завернуть массив в структуру.

                                          зы: про ассемблер, кстати, согласен: программирование на нем очень хорошо ставит на место в голове понимание того, где и как хранятся объекты. Ты буквально все руками трогаешь и потому все понимаешь)
                                          Ответить
                  • > написать слово из 3 буков.
                    Я уже 15 часов жду этого.
                    Ответить
                    • Так никто и не написал слово из трёх буков?
                      Ответить
                      • триграф могу написать
                        Ответить
                        • По памяти, не заглядывая в доки?
                          Ответить
                          • ??= помню, остальное нет.

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

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