Эта история случилась в 2015 году. Тогда я написал статью для своего сайта на болгарском языке. А в прошлом году, я решил подтянуть свои знания в русском языке. И сделал этот перевод в качестве упражнения.


Ну и решил опубликовать. Конечно осовременил и укомплектовал картинками.


Надеюсь, эта почти детективная история вам понравится.


Рассказ о том, как работает Tiobe index, как это связано с ассемблером и о моей маленькой роли во всем этом.


Я уже много лет занимаюсь программированием на ассемблере и продвижением этого языка среди программистов.


Совершенно естественно, делая все это просто как хобби, мне всегда было интересно насколько популярен ассемблер на самом деле?


Дело в том, что это язык, который «официально» как бы и не существует. Почти не издаются книги про ассемблер, а те которые издаются безнадёжно устарели. Не пишутся статьи, а когда пишутся, они попадают в раздел «ненормальное программирование» или в лучшем случае в «написание вирусов».


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


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


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


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


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


Tiobe – это консалтинговая компания, которая занимается главным образом исследования качества ПО. Не знаю как хорошо их бизнес идёт, но они однозначно наиболее известны тем, что каждый месяц публикуют индекс популярности языков программирования.


Методика расчёта этого индекса проста – они используют несколько десятков поисковиков, которым отправляют следующий запрос: +"%LANGUAGE% programming". (заметьте, что кавычки – часть запроса и они важны для результата). Дальше, в зависимости от количества найденных страниц, рассчитывается и рейтинг языка.


Конечно, данные обрабатываются статистически, нормализуются, а разные поисковики имеют разный вес. Все, как положено. Кстати, подробно метод исследования документирован в статье Tiobe index definition.


Эта методика, хоть и простая, даёт сравнительно адекватные результаты. Хотя и неясно что именно эти результаты значат. То ли широту использования языка, то ли желание людей изучать его (это не одно и то же), то ли сложность языка и желание программистов найти решение своих проблем. Но так или иначе, в каком-то смысле, все это можно назвать «популярностью».


А сейчас, посмотрим где находится ассемблер в этом рейтинге? Так как Тиобе публикует только результаты текущего месяца, а архив только продаётся, то мне не оставалось ничего, кроме как пойти на Wayback Machine и посмотреть что там можно нарыть.


Есть данные, что Tiobe занимается подобными исследованиями как минимум с 1987 года, но самые старые доступные архивы относятся к 2001 году. Однако, в рейтинге 2001 года, ассемблер вовсе и не фигурирует.


Это конечно не странно, так как в то время считалось что ассемблер, это язык, на котором никогда больше никто не будет писать. (По иронии судьбы, именно в начале нулевых годов начались публикации о программировании на ассемблере для современных ОС – например замечательные туториалы Iczelion-а, вышли первые версии FlatAssembler и вообще начался некий asm-ренессанс)


Явно, составители получали на почту вопросы почему ассемблер не фигурирует в
индексе, так как в июне 2003 года, они начали публиковать на странице следующее туманное
и запутанное оправдание:



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

Как бы то ни было, но это состояние сохранялось вплоть до декабря 2010 года, когда
составители решились посмотреть правде в глаза и включить ассемблер в индекс. Это было сделано со следующим комментарием:


Rob Lee suggested to add Assembly languages to the TIOBE index. Although this has been proposed for many years his arguments were convincing: "I was curious about why assembler language isn't included in your index. The language is (obviously) Turing complete, and has a Wikipedia article, which would seem to qualify it for inclusion based on the criteria defined on tiobe.com.". Assembly has been added to the index. It starts at position 17.

Роб Ли посоветовал включить ассемблер в Tiobe Index. Хотя это и предлагалось в течение многих лет, его аргументы были убедительными: «Мне было интересно, почему язык ассемблера не включён в ваш индекс. Этот язык (очевидно) является полным по Тьюрингу, и у него есть статья в Википедии, что, казалось бы, даёт право на включение его в индекс на основании критериев, определённых на tiobe.com.» Ассемблер был добавлен в индекс. Он начал на 17-ом месте.

Кстати, заметьте это «has been proposed for many years» – «предлагалось в течение многих лет»! Кем предлагалось? Сколько их было? Неизвестно.


Что интересно, это то, что язык, который игнорировался в течение 9 лет, сразу попадает на 17-ом месте, между Pascal(16) и Ada(18). Как по мне, это замечательный дебют.


И не только! В следующих месяцах, ассемблер поднимался в рейтинге и в марте 2011 года занял аж 12-ое место.


Подробности неизвестны, потому что эти перемены видны только на единственной сохранившейся графике в архиве:



Следующая полная запись в архиве лишь с мая 2011 года. На ней, ассемблер находится на 14-ом месте:



Такой резкий старт и высокое место в рейтинге, очевидно произвели на составителей впечатление, потому что они включили следующий вопрос/ответ в раздел ЧЗВ сайта:


Q: How come that Assembly is so popular nowadays?

A: It seems as if Assembly is new in the top 20. This is not the case. Through the years we had a lot of discussions with followers of the index whether Assembly should be part of the index or not. Until now we could convince them to leave Assembly out. However, recently we defined objective criteria to qualify for the index and Assembly appeared to meet these criteria. So we added Assembly at the end of 2010. Since no historical data is available, it seems as if it comes out of nowhere, whereas it was probably in the past at least as popular as it is now.

В: Как получилось, что ассемблер так популярен в наши дни?

О: Выглядит так, как будто ассемблер новенький в первой двадцатке. Но это не так. На протяжении многих лет у нас было много дискуссий с последователями индекса о том, должен ли ассемблер быть частью индекса или нет. До сих пор нам удавалось убедить их не включать ассемблер. Однако, недавно мы сформулировали объективные критерии для включения в индекс и оказалось, что ассемблер соответствует этим критериям. Поэтому мы добавили ассемблер, в конце 2010 года. Поскольку исторических данных нет, кажется что он появился ниоткуда. Но вероятно в прошлом он был по крайней мере так же популярен как и сейчас.

Как бы то ни было, но в 2012 году ассемблер вдруг покатился во «вторую лигу» – до 26-ого места, где не отслеживаются подробные графики. В марте 2013 года опять попал в «первую лигу» на 20-ое, а потом и на 19-ое место и до середины 2014 года держался на 17..18-ом местах в рейтинге. Однако, после августа 2014 года последовало резкое и продолжительное падение до 30-ых позиций и ниже, из которых казалось, что уже не выбраться.


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


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


Однако, загадка начала расплетаться с другого конца. Однажды я заметил, что на stackoverflow, часто публикуются вопросы с меткой «assembly», но вопросы задают о C# а не о ассемблере.


Я заинтересовался и быстро нашёл, что оказывается, в .net есть, то ли библиотеки, то ли пакеты, которых называют «assembly». Наверное в Майкрософт решили, что слово свободное, раз «никто уже не пишет на ассемблере».


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


Но как этот факт отражается на Tiobe Index?


Чтобы понять что происходит, давайте впервые разберёмся, как на самом деле называется этот язык программирования на английском языке. Вопрос отнюдь не тривиальный, потому что с момента появления компьютеров всегда существовали разногласия по поводу названия этого языка. Более того, я подозреваю, что у него никогда не было имени в подлинном смысле этого слова.


Программа, которая компилирует исходники в бинарный код всегда называлась «assembler», но язык никогда не имел официального названия, поскольку он никогда не разрабатывался и не стандартизировался как язык для общего применения, а всегда возникал естественным образом, в соответствии с идеями тех, кто пишет компиляторы и спецификациями производителя процессора (и эти спецификации являются скорее всего аппаратными, а не программными).


По этой причине, со временем люди стали использовать несколько названий, производных от названия компилятора – «assembler». А точнее «assembler», «assembly» и «assembly language». Очень часто используется и сокращение «asm».


В Интернете всегда были споры насчёт как правильно называть язык и компилятор этого языка. Консенсус, конечно, никогда не был достигнут, но более-менее принято называть язык «assembly» или «assembly language», а компилятор «assembler».


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


Итак, у меня возникла гипотеза, что поскольку слово «assembly» широко используется для обозначения .net-ских библиотек, то люди, которые пишут что-то о языке ассемблер, или задают вопрос в Интернете, не используют в своём тексте слово «assembly», чтобы избежать двусмысленности, а выбирают один из других вариантов названия языка.


Самый простой вариант избежать двусмысленности, это использовать «assembly language» – и слово привычное и понятно, что говорим о языке, а не о библиотеках .net. Именно так называется язык и в Википедии.


Но с другой стороны, Tiobe использовал в качестве названия одиночное слово «assembly». При этом ещё и запрос в кавычках. То есть запрос "assembly programming" не будет возвращать результаты о .net потому что никто так не выражается. Библиотеку можно компилировать, скомпоновать, но программирование библиотек никак не отличается от программирования чего-либо другого. Так что вряд ли кто напишет «assembly programming» имея ввиду .net и C#.


С другой стороны, запрос +"assembly programming" не вернёт страницы на которых написано «assembly language programming» или «assembler programming» и тем более «asm programming».


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


Эту гипотезу очень просто проверить. Если она верна, то запрос "assembly programming" должен возвращать меньше результатов, чем "assembly language programming".


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


После простой проверки в Google, так и оказалось. У вас числа могут быть другими,
но соотношение как правило сохраняется:


+"assembly programming" = 281000 результатов
+"assembly language programming" = 690000 результатов

Выходит, что по методике Tiobe, результаты для ассемблера занижены по крайней мере в два с половиной раза. (на момент написания оригинала, эта разница была меньше – около полутора раз – но все равно это было много.)


Конечно, я не мог оставить такую вопиющую несправедливость просто так, и поэтому в апреле 2015 года, написал письмо Полу Янсену (занимается поддержкой индекса), в котором написал ему, что логично было бы изменить названия языка с «assembly» на «assembly language».


Пол оказался мужиком вменяемым, энтузиастом своего дела, согласился, что мои аргументы логичны, и пообещал, что такие изменения будут внесены в индекс.


Дело сделалось не быстро, но в июне 2015 года индекс вышел с новым именем языка.


В результате этой коррекции, в июле 2015 года, ассемблер занял своё законное место, а именно 12-ое, а в январе 2016 года установил рекорд, войдя в топ-10 (на 9-ом месте).


С тех пор, ассемблер почти всегда находится в топ-10 рейтинга и несколько раз занимал аж 8-ое место. Где и находится в момент написания этой статьи (декабрь 2021 года):



Какова мораль этой истории со счастливым концом?


Их две.


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


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


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


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


Ну и в третьих (бонус мораль), придумывая имя своего нового языка программирования, думайте внимательно, как он будет выглядеть в поисковых запросах. Создатели Go не дадут соврать. Хотя им это и не помогло – ассемблер все равно популярнее.

Комментарии (50)


  1. tzlom
    06.01.2022 02:11
    +13

    Мораль тут одна, индекс TIOBE измеряет урожай бананов на луне. Будучи знакомым и с другими их продуктами скажу что они специалисты именно в этой области.


    1. forthuser
      06.01.2022 08:31

      Да, более адекватен индекс IEEE Spectrum Top Programming Languages
      , но он публикуется раз в год.


      1. johnfound Автор
        06.01.2022 13:35

        Так индекс IEEE в общем и целом никак Tiobe не противоречит. Те же языки находятся на более менее одинаковых позициях.


  1. VaalKIA
    06.01.2022 02:15
    +1

    +«assembly language programming» = 690000 результатов
    С тех пор, ассемблер почти всегда находится в топ-10 рейтинга

    У меня хорошие новости для Object Pascal:
    «delphi programming» = About 710,000 results

    P.S. Прошу прощения, он так и фигурирует в рейтинге, просто на последней картинке его вообще нет (на самом деле 14 место), а мне казалось, что он популярней асма. Ну да можно ещё Pascal/Free Pascal/TMT Pascal накинуть тысяч на 400


    1. johnfound Автор
      06.01.2022 02:58
      +1

      Вообще-то, Delphi был намного популярнее раньше и напоследок он опять растёт. Мне кажется, что ему мешает только то, что он проприетарный.


      Но это вообще мой любимый язык. Хотя, ассемблер всё-таки любимее. ;)


    1. forthuser
      06.01.2022 09:20

      assembly programming по запросу с Github 5,435 репозиториев
      assembler programming по запросу с Github 1,381 репозиториев.

      P.S. Отдельно Asembly в контексте понимания слова используется, вероятно, ещё как сборка.


  1. kozar
    06.01.2022 03:09
    +3

    Почему в статье об "ассемблере" говорится так, как будто это действительно один конкретный язык, в то время как это общее название огромного количества языков, сильно отличающихся между собой, в зависимости от того, для какой ISA и для какого компилятора он предназначен (т.е. есть x86 Assembly для FASM,NASM,WASM и т.д., 6502 asm для ACME, cc65 и т.д. и т.д....)?


    1. johnfound Автор
      06.01.2022 03:27
      +1

      Принципы одни и те же. Да и синтаксис не такой уж и разный.


      1. kozar
        06.01.2022 07:02
        +5

        Ну, то же самое можно сказать про C/C++ или PHP и Java


      1. forthuser
        06.01.2022 08:43

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

        P.S. Кстати, популярная «забава», среди программистов, писать Forth (Форт) системы на разных языках программирования и часто именно на ассемблере. ????


      1. tyomitch
        06.01.2022 08:57
        +2

        На уровне приближения «Принципы одни и те же. Да и синтаксис не такой уж и разный.» — весь топ TIOBE, кроме ассемблера, SQL, и Lisp/Scheme — мог бы идти одним пунктом.


        1. forthuser
          06.01.2022 09:05
          +1

          А, как же, ещё к примеру, Forth, Prolog (Пролог)? ????

          P.S. В индексе, возможно, ещё имеет смысл разделять языки по используемым парадигмам программирования.

          На «цвет и вкус» Бейсик языки тоже все разные.


          1. tyomitch
            06.01.2022 09:14

            Я думал про Forth и Prolog, но в топ они не попали :(


            1. forthuser
              06.01.2022 09:25

              Все не попавшие в Топ Tiobe языки программирования после 100-го перечислены отдельно в алфавитном порядке.


          1. johnfound Автор
            06.01.2022 09:16

            Prolog там фигурирует (на 27ом месте), а Forth нет, неизвестно почему.


            1. forthuser
              06.01.2022 09:35

              Тоже не понятно, но даже Github его плохо «считает»,
              хотя неофициальный Topics по Forth создан.

              P.S. Но, что радует, поиск по слову Forth на Github выдаёт много результатов поиска за некоторым исключением присутствия его в устойчивых словосочетаниях.


  1. third112
    06.01.2022 05:04

    Спасибо. Интересная статья. Но позвольте спросить:
    1) о каком языке ассемблера (ЯА) речь? (Вопрос не только автору, но и Tiobe).
    Вики


    справедливо отмечает:
    Язы́к ассе́мблера (англ. assembly language) — машинно-ориентированный язык программирования низкого уровня. Представляет собой систему обозначений, используемую для представления в удобно читаемой форме программ, записанных в машинном коде. Его команды прямо соответствуют отдельным командам машины или их последовательностям. Является существенно платформо-зависимым: языки ассемблера для различных аппаратных платформ несовместимы, хотя могут быть в целом подобны.
    [...].
    Также может предоставлять дополнительные возможности облегчения программирования, такие как макрокоманды, выражения, средства обеспечения модульности программ. В связи с этим может рассматриваться как автокод (см. ниже), расширенный конструкциями языков программирования высокого уровня[3][4].

    Конечно, и перенс кода на ЯП высокого уровня (ЯПВУ) бывает не простым. Но в случае ЯПВУ различая обычно в расширениях (как Turbo Pascal и Dr Pascal, а сам язык в основе обычно одинаков). Знаю по своему опыту, что ЯА различных машин отлчаются гораздо сильнее, нпр., PDP-11, IBM 360/370, IBM PC AT, Macintosh 68К.


    2) Зачем сейчас писать на ЯА? Когда-то это позволяло заметно ускорить программу. Но сейчас современные компиляторы настолько хорошо оптимизируют, что ускорения от ручного кодинга на ЯА не получается. (Конечно, если такое хобби, то понятно. В списке Tiobe и ЯП Brainfuck есть ;)


    1. forthuser
      06.01.2022 08:53

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


    1. johnfound Автор
      06.01.2022 09:03
      +1

      Когда-то это позволяло заметно ускорить программу. Но сейчас современные компиляторы настолько хорошо оптимизируют, что ускорения от ручного кодинга на ЯА не получается.

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


      1. third112
        06.01.2022 10:47

        Вы это пробовали или только читали?

        Пробовал неоднократно. Например, еще в эпоху Pentium 4 у меня была задача в области мат. химии: сгенерировать ок. 100 000 000 связных графов с числом вершин не больше 8, где степень вершины не больше 4, записать для каждого по простым правилам СЛАУ — т.е. 8 уравнений и 8 неизвестных и решить эти системы. При этом математически строго доказано, что каждая такая система имеет решение и только одно.


        Написал программу на Delphi-7. Она оказалась быстрее библиотек Интела. Попробовал переписать на asm – сколько не пытался было медленнее. Списался с Интелом – мне дали адрес разработчика функций решения СЛАУ. Послал ему исх.коды. Он ответил, что у меня слишком особый случай, а если в ситеме 1000 уравнений, то мой код быстрее не будет.


        До того я много работал с ассемблерами на PDP 11 и на ЕС ЭВМ (задачи реального времени), на Маке, на IBM PC.


        Дело в том, что это язык, который «официально» как бы и не существует. Почти не издаются книги про ассемблер, а те которые издаются безнадёжно устарели.

        Да. В 2004 было издано несколько


        интересных книг
        • В.И. Юров, Assembler, 2-е издвние, "Питер"
        • В.И. Юров, Assembler, Практикум, 2-е издвние, "Питер"
        • О.В.Бурдаев и др., Ассемблер в задачах защиты информации, "Кудиц-образ"

        Там много советов по ускорению, но на новых машинах они не работают.
        Из списка литературы на Вики самая недавняя книга :


        Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера… — 2-е. — БХВ-Петербург, 2014. — 368 с. — (Электроника). — ISBN 9785977533119.

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


        1. Refridgerator
          06.01.2022 11:05

          В современном мире для решения СЛАУ у INTEL есть своя библиотека MKL, которая тоже использует ассемблер. Сравните с ней. Ну а вообще любая оптимизация начинается с профилирования, результаты которого могут оказаться весьма неожиданными, и узким местом может оказаться не сам алгоритм, а, скажем, промахи кэша при работе с памятью (частая ситуация).


          1. third112
            06.01.2022 17:27

            Да, и я об MKL.


            1. Refridgerator
              06.01.2022 19:55

              То есть программа для перемножения матриц, написанная на Delphi-7 20 лет назад, оказалась быстрее современной, вручную оптимизированной для AVX ассемблерной той же компанией, что и делает эти самые процессоры? В это очень, очень сложно поверить. Ладно, фиг с ним с MKL — в С++ на однотипных операциях можно добиться ускорения в 4 раза без ассемблера, просто интрисиками — но в то время даже слова такого не было. А вот ассемблерными вставками посреди паскалевского кода злоупотребляли многие — хотя бы для того, чтобы стек FPU использовать по полной, чтобы избежать записи/чтения промежуточных значений в память (а этого даже современные компиляторы делать не научились).


              1. tyomitch
                06.01.2022 21:20

                Совсем не очевидно, что программа для перемножения целочисленных матриц 8х8, о которых выше речь и шла, — выиграет от AVX и/или ассемблерных вставок.


                1. Refridgerator
                  06.01.2022 22:12

                  Конечно выиграет — AVX с целочисленными значениями тоже умеет работать. Там же речь шла об однотипных вычислениях — это значит, что за один проход можно перемножить 4 одних матрицы на 4 других (или даже 8), и размер их тоже значения не имеет.


        1. johnfound Автор
          06.01.2022 11:31

          Написал программу на Delphi-7. Она оказалась быстрее библиотек Интела. Попробовал переписать на asm – сколько не пытался было медленнее.

          Извините, но здесь что-то не так.


          Компилятор Delphi-7 генерирует не так уж и хороший код в плане производительности. Так что, сделать на ассемблере медленнее Delphi-7 это надо постараться. По крайней мере всегда можно посмотреть что накомпилировал компилятор и продолжит дальше. Нет?


          1. third112
            06.01.2022 17:40

            Я так и делал.VTune использовал...


            1. johnfound Автор
              06.01.2022 17:49

              Тогда должно было получится по крайней мере не медленней Delphi. Как вы умудрились сделать тот же самый код медленнее?


              Но если говорим вообще, то такой подход неправильный. Нельзя следовать компилятора. Надо писать «по другому», не как на ЯВУ. Потому что, если по сути вручную компилируете код высокого уровня, получите не более чем 10..20% быстрее компилятора.


              Оптимальный ассемблерный код часто вообще никак не возможно перевести на ЯВУ. И я сейчас не о производительности.


              1. third112
                06.01.2022 17:57

                Согласен, что не всякий ассемблерный код переводим на ЯВУ. В этом смысле ЯА мощнее любого ЯВУ. Но не всякий код оптимален, а в хороших компиляторах ЯВУ применяют обычно наиболее эффективные решения.


                1. forthuser
                  06.01.2022 18:09
                  +1

                  Вы уверены в этом?, а как же тогда смысл в рекомендациях к использованию разных профилировщиков кода.

                  P.S. Даже запуск одной программы в разных поколениях процессоров не даёт такой простой эвристики к пониманию возмржностей по его ускорению. (где то и выравнивание инструкций очень эффективно, а где то не очень)

                  P.S. Интересно, что в топике Уроки от NeHe на masm64 кто то переписал и уроки NeHe — программирования OpenGL — на ассемблере 64.


                  1. third112
                    06.01.2022 19:40

                    Даже запуск одной программы в разных поколениях процессоров не даёт такой простой эвристики к пониманию возмржностей по его ускорению

                    Я говорил об одном поколении. Стоит отметить возможность промежуточного решения для Delphi-7 — вставка asm кода в код Delphi. Для критических участков это м.б. полезно, а остальные 99 или 90% кода будут на Delphi.


    1. Refridgerator
      06.01.2022 09:20
      +2

      Зачем сейчас писать на ЯА? Когда-то это позволяло заметно ускорить программу. Но сейчас современные компиляторы настолько хорошо оптимизируют, что ускорения от ручного кодинга на ЯА не получается.
      Для сейчас это ничуть не менее актуально. Мой личный рекорд — ускорение в 40 раз, и это по сравнению с с++, а не каким-нибудь там питоном. Просто (внезапно) на ассемблере тоже надо уметь программировать. Современные компиляторы хорошо оптимизируют только те алгоритмы, которые могут распознать — типа сложения массивов и умножения комплексных чисел, а с полноценной автоматической векторизацией там по прежнему всё далеко не идеально. Типичный пример — FFT по степеням двойки ни один компилятор вам не векторизирует.


      1. Mike-M
        06.01.2022 12:43

        Дополню на примере быстрого текстового редактора:

        EmEditor uses various CPU optimizations such as multithreading and SIMD technology such as AVX-512 and AVX-2 to improve the speed of opening very large files, Find/Replace/Filter, parsing CSV, various Sort, Delete Duplicate Lines, and various other operations.


    1. ZyXI
      07.01.2022 23:16

      Зачем сейчас писать на ЯА? Когда-то это позволяло заметно ускорить программу. Но сейчас современные компиляторы настолько хорошо оптимизируют, что ускорения от ручного кодинга на ЯА не получается. (Конечно, если такое хобби, то понятно. В списке Tiobe и ЯП Brainfuck есть ;)

      Помимо оптимизаций есть ещё и куча «специальных» применений. У меня, к примеру, по сути embedded разработка, со своей спецификой. Попробуйте объяснить компилятору хотя бы C, что часть регистров общего назначения должна быть зарезервирована под volatile память с глобальными переменными, в которой я буду смотреть наличие одиночных сбоев. Ещё мне обычно проще написать на ассемблере, чем выяснить, что не так в программе на C (или компиляторе), что она не работает или работает медленно: выяснение всё равно потребует понимания ассемблерного кода.


      1. third112
        07.01.2022 23:45

        Ok. "куча «специальных» применений" — особые случаи. И эта "куча" сравнельно небольшая, по сравнению с общей кучей применений ЯП. В статье отмечен факт:


        Дело в том, что это язык, который «официально» как бы и не существует. Почти не издаются книги про ассемблер, а те которые издаются безнадёжно устарели. Не пишутся статьи, а когда пишутся, они попадают в раздел «ненормальное программирование» или в лучшем случае в «написание вирусов».

        Автор объяснил эту ситуацию


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

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

        Выше я предложил другое объяснение:
        Из списка литературы на Вики самая недавняя книга :


        Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера… — 2-е. — БХВ-Петербург, 2014. — 368 с. — (Электроника). — ISBN 9785977533119.

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


        1. johnfound Автор
          08.01.2022 01:53

          Ну-у-у, восьмое место, мне кажется, трудно объяснить только интересом к истории.


          И причём здесь Counter-strike???


          1. third112
            08.01.2022 02:23

            И причём здесь Counter-strike???

            Если это вопрос по сокращению CS, то я про Computer Science.


            восьмое место, мне кажется, трудно объяснить только интересом к истории

            Тут м.б. чисто денежный интерес. Приведу пример из своей практики. Когда для одной небольшой фирмы в США портировал IDE Dr. Pascal с MS DOS на MacOS, то шеф сказал, что работает отлично под новыми версиями MacOS, но надо чтобы работало и под устаревшими версиями. Я удивился: кто их сейчас использует? Оказалось, что одна фирма подарила одному универу устаревшие машины, которые иначе надо было выбрасывать. И этот универ заказал фирме, для которой я работал, совмнстимость. В универе решили, что вводный курс по кодингу студенты могут делать на старых машинах. Т.о. бывают разные обстоятельства. Не удивлюсь, если какой музей закажет программу на asm PDP 11.


            1. johnfound Автор
              08.01.2022 12:30
              +1

              Все это так, но мы говорим о мировых тенденциях. И поэтому всякие частные случаи вряд ли могут так сильно повлиять.


              Но зачем ходить далеко, вот 5 постов выше Mike-M написал про EmEditor. Вполне современный софт, в котором используют ассемблер.


              1. third112
                08.01.2022 12:41

                ИМХО были бы тенденции — издавлись бы книги.


                1. forthuser
                  08.01.2022 13:22

                  Вот интересно, а насколько Пролог (Prolog) в тенденциях, но по нему издаются книги и где то и изучается в учебных программах вузов.


                  1. third112
                    08.01.2022 13:31

                    Да, это удивительно. Помню, в прошлом веке, побывал на лекции представителя Борланда. Ему задали вопрос: почему ваша фирма отказалась от Пролога? Он обратился к залу (примерно 500 человек): пожалуйста, встаньте те, кто использует Пролог. Встали три человека.
                    — Ну, вот видите, — сказал лектор.


                1. johnfound Автор
                  08.01.2022 13:51

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


                  1. third112
                    09.01.2022 00:52

                    А откуда видно, что этот язык табуирован? В предыдущих комментах привели пример ЯП Prolog. Много лет назад Борланд от него отказался по причине низкого спроса — и этот ЯП стал табуирован, но книги и сейчас издают. И не сказал бы, что asm очень простой: то что ЯПВУ делает одним оператором в одну строку на asm записывается в десять и более строк-инструкций.


  1. tyomitch
    06.01.2022 09:02
    +4

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

    Осталось понять, какой физический смысл у суммы популярностей ассемблеров PDP-11, x86, MIPS и Hexagon. По-моему, области применимости этих ассемблеров не пересекаются.


  1. forthuser
    06.01.2022 12:01

    А, не рассматривали ли Вы вариант фан программирования на ассемблере для компьютера Gigatron TTL?

    По нему была и одна опубликована статья пару лет назад на Habr
    Гигатрон — самодельный микрокомпьютер без процессора

    Ассемблер (система команд процессора) в нём настолько минималистична, что даже разработчики посчитали необходимым сделать более высокоуровневый язык ассемблерa GCL на этой архитектуре для «абстрактного» vCPU

    P.S. Здесь есть сводная табличка по группам команд процессора (команда — 1 байт + считывание вместе с ней ещё одного байта — из ПЗУ шины D в терминологии поцессора, oper в этой таблице)
    У процессора ещё две 8-ми битных шины: IN, OUT
    кроме внутренних регистров A — аккумулятор, и X и Y могущих образовывать пару,
    но в адресации её автоинкремента изменяется только регистр X.

    так как процессор сделан на логических микросхемах, то есть возможность даже напрямую вывести, к примеру, сигналы аккумуляторного регистра на светодиоды
    (как впрочем и других компонентов процессора) и использовать как дополнительную возможность по управлению чем то и смотреть по шагам управление по программе нажатием кнопки при её отладке)

    как впрочем и других компонентов процессора и шагать по программе по нажатию кнопки.

    Здесь в проекте процессора процессора Gigatron на Verilog есть emulator под Linux
    Здесь под Windows в этой теме с форума Gigatrona другой эмулятор


    1. tyomitch
      06.01.2022 12:31

      Я для «Мегапроцессора» (из дискретных транзисторов) писал: habr.com/ru/post/309654


  1. mSnus
    07.01.2022 15:40

    Интересно, что в конечной таблице есть R, но нету Go. Вероятно потому, что по "go programming" находится всякая хрень, а называть его "golang" не все догадываются))

    А ещё, например "react programming" должно включаться в "js programming" и в сумме уделать всех, но... Считается урожай бананов на Луне, в первом комментарии очень верно сказали))


    1. johnfound Автор
      07.01.2022 17:08

      Есть там Go. Просто я обрезал таблицу, чтобы не занимала слишком много места по вертикали. А так, в декабре, Go был на 14-ом месте, а сейчас в январе на 13-ом.


      1. forthuser
        07.01.2022 17:34

        А, в таком ежедневно обновляемом рейтинге на 5-ом месте
        Rosetta Code: Popular Programming Languages
        Недавно делил 4, 5 место с другим языком (Raku — Perl наследником)
        image


        1. johnfound Автор
          07.01.2022 18:50
          +1

          Phix, Wren, Julia, Raku – А, ну да, ну да.