vak: (Default)
[personal profile] vak
Добыл новую прикольную книжку себе в компьютерную коллекцию. Это последнее издание 2014 года. Доступно только непосредственно с сайта Springer. На Амазоне его нет, там только первое издание от 1999-го.



MMIX это 64-битная компьютерная архитектура типа RISC, изобретённая лично Дональдом Кнутом для своих потребностей. То есть в качестве универсального абстрактного компьютера для разработки алгоритмов из эпохального труда "Искусство программирования". Изначально Кнут придумал машину MIX, но она была сделала в стиле 60-х и быстро устарела. MMIX же получилась неплохо, напоминает MIPS или DEC Alpha. Что и неудивительно, ведь Кнуту помогали Джон Хеннесси и Ричард Сайтс, их разработчики.

Идея MMIX в том, что компьютерные архитектуры не стоят на месте: быстро развиваются и сменяют друг друга. Но когда вы творите нетленку, к примеру реализацию классических алгоритмов для "Искусства программирования", желательно чтобы ваш код сохранял жизнеспособность хоть сколько-нибудь продолжительное время: лет 50 хотя бы. Поэтому делаем RISC-архитектуру один раз и навсегда. Изменения и расширения запрещены. Есть симулятор, даже два, есть ассемблер, этого вполне достаточно. Народ даже реализацию для FPGA сварганил. 

Хоть сама архитектура MMIX и не развивается (незачем), но софт к ней - вполне. Компилятор GCC поддерживает MMIX в полном объёме. Даже самая последняя версия GCC 12.2 собирается и генерит код для MMIX без нареканий. К примеру, вот компиляция стандартного "Hello World".
$ cat hello.c 
#include <stdio.h>
int main()
{
printf("Hello World\n");
}

$ mmix-gcc -O hello.c -o hello

$ mmix-size hello
text data bss dec hex filename
81464 4416 0 85880 14f78 hello

$ mmix hello
Hello World
Смотрим ассемблерный код:
$ mmix-gcc -O -S hello.c

$ cat hello.s
# 1 "hello.c"
! mmixal:= 8H LOC Data_Section
.text ! mmixal:= 9H LOC 8B
.section .rodata
.p2align 2
LOC @+(4-@)&3
LC:0 IS @
BYTE "Hello World",#0
.text ! mmixal:= 9H LOC 8B
.p2align 2
LOC @+(4-@)&3
.global main
main IS @
GET $0,rJ
GETA $2,LC:0
PUSHJ $1,puts
PUT rJ,$0
SETL $0,0
POP 1,0

.ident "GCC: (GNU) 12.2.0"
.data ! mmixal:= 8H LOC 9B
Бинарники компилятора MMIX GCC для Линукса и МакОС можно скачать по ссылкам:
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org