Смотрю я на всю эту возню с портированием программного обеспечения на разные архитектуры процессоров, и думаю... сколько же человеко-часов тратится на всю эту бесполезную ерунду.
Я, конечно, понимаю, что программистов у нас много, и проще заниматься ерундой, писать всевозможные компиляторы, и монотонно, с упорством, достойным лучшего применения, портировать открытое ПО на каждую новую архитектуру. А что делать с проприетарным ПО, которое не всякий разработчик жаждет портировать на не столь популярные архитектуры? Ждать её популярности?
Мне думается, что это тупиковый путь, который ведёт к увеличению трудозатрат при написании программ. Для одного автора это, может быть, и терпимо. Но если умножить дополнительный объём работы на количество авторов, то мы получим огромный массив лишней работы.
Логичнее было бы снять задачу компиляции программы под разные платформы с авторов, и переложить её на конечный процессор. То есть, в микроархитектуру процессора включить некий аппаратный транслятор на микрокоде, который мог бы на лету интерпретировать программный код другой архитектуры команд в родные коды, после чего производить оптимизацию его исполнения.
Нечто подобное сделано в отечественном процессоре Эльбрус. Там происходит интерпретация архитектуры x86 в родные коды. Для этого используются два ядра процессора, занятые исключительно интерпретацией команд.
Но это только первый подход к решению проблемы. Развитием этого подхода могло бы быть включение в процессор специализированных ядер, которые эффективно интерпретировали бы код в зависимости от загруженного в эти ядра микрокода (прошивки ядер). Этим достигалась бы многоархитектурность интерпретатора.
Вместе с этим, на выходе аппаратного интерпретатора необходимо организовать максимально возможное по размеру аппаратное окно просмотра интерпретированного кода для его повторной качественной оптимизации (но уже динамической), чтобы восполнить потери от ненужной теперь изначальной статической оптимизации его компилятором программиста, сделанной ранее для другой архитектуры.
Полагаю, что в будущем микропроцессоры должны будут уметь исполнять код совершенно разных архитектур, количество которых будет только увеличиваться.
Что касается безопасности, то прошивка специализированных ядер не должна осуществляться дистанционно без ведома пользователя. Каждая обновлённая прошивка, исправляющая ошибки или добавляющая интерпретатор для новой архитектуры, должна ставиться так же, как прошивка, скажем, BIOS материнской платы.
Да, выполнение неродного кода в большинстве случаев, наверное, окажется менее эффективным, чем заранее портированного в родной. Но, во-первых, возможность портирования при этом никто не отменяет, а, во-вторых, универсальный процессор только тогда становится по настоящему универсальным, если на аппаратном уровне сможет выполнять код разных систем команд.
В случае выбора этого пути большинство программного обеспечения можно будет вообще не портировать, поскольку оно не нагружает процессор до максимума, и будет выполняться столь же быстро в режиме интерпретации. Что же касается особо ресурсоёмких приложений, то тут от портирования не уйти. Но это не настолько большой процент ПО, и на его портировании на разные платформы уже можно будет сфокусироваться.
Теоретически, можно пойти и по другому пути — напихать в микропроцессор ядра разных архитектур наборов команд, что даст возможность на одном и том же микропроцессоре выполнять программы всех этих архитектур. Разумеется, при этом производителю придётся оплачивать лицензии на используемые сторонние ядра.
А как вы видите решение проблемы отсутствия нужного ПО на новых архитектурах? Свои мысли пишите в комментариях. Ставьте нравлики и подписывайтесь на канал. Пока!