Алголом жгу
2021-08-01 00:23Сравнение трёх компиляторов разных алголов, конспективно. В качестве примера взято вычисление чисел Фибоначчи. Для каждого алгола приведены:
- местонахождение компилятора на Гитхабе
- текст программы вычисления 30-го числа Фибоначчи
- команды компиляции
- результат вычисления
- размер бинарного кода
- список требуемых разделяемых библиотек
Algol 60
Компилятор написан на языке Си. Исходный текст компилятора: algol-60-compiler.gitКомпиляция и запуск:begin
integer procedure fibonacci(n);
value n;
integer n;
begin
integer i, fn, fn1, fn2;
fn2 := 1;
fn1 := 0;
fn := 0;
for i := 1 step 1 until n do begin
fn := fn1 + fn2;
fn2 := fn1;
fn1 := fn
end;
fibonacci := fn
end fibonacci;
outinteger(1, fibonacci(30));
outstring(1, "\n")
end
Результат:jff-algol fib.alg
./fib
Размер кода и зависимости:832040
$ size fib
text data bss dec hex filename
15703 736 360 16799 419f fib
$ ldd fib
linux-vdso.so.1 (0x00007ffc35fb7000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5bd68e0000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5bd66f4000)
/lib64/ld-linux-x86-64.so.2 (0x00007f5bd6a56000)
Algol W
Компилятор написан на языке OCaml. Исходный текст компилятора: algol-w-compilerКомпиляция примера и запуск:begin
integer procedure fibonacci(integer value n);
begin
integer fn, fn1, fn2;
fn2 := 1;
fn1 := 0;
fn := 0;
for i := 1 until n do begin
fn := fn1 + fn2;
fn2 := fn1;
fn1 := fn
end;
fn
end fibonacci;
writeon(fibonacci(30))
end.
Результат:awe fib.alw
./fib
Размер кода и зависимости:832040
$ size fib
text data bss dec hex filename
43338 1504 2072 46914 b742 fib
$ ldd fib
linux-vdso.so.1 (0x00007ffd3a5bb000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7e69b0d000)
libgc.so.1 => /lib/x86_64-linux-gnu/libgc.so.1 (0x00007f7e69a98000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7e698ac000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7e69c8a000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7e6988a000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7e69883000)
Algol 68
Компилятор написан на языке Алгол 68. Исходный текст компилятора: Algol-68RS-Source.gitКомпиляция примера и запуск:PROGRAM fib CONTEXT VOID
USE standard
BEGIN
PROC iterative fibonacci = (INT n) INT:
CASE n+1 IN
0, 1, 1, 2, 3, 5
OUT
INT even:=3, odd:=5;
FOR i FROM odd+1 TO n DO
(ODD i|odd|even) := odd + even
OD;
(ODD n|odd|even)
ESAC;
print(iterative fibonacci(30));
print(new line)
END
FINISH
Результат:ca fib.a68
./fib
Размер кода и зависимости:+832040
Code size:
$ size fib
text data bss dec hex filename
239118 3820 282256 525194 8038a fib
$ ldd fib
linux-vdso.so.1 (0x00007fffdd5db000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc4b7738000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc4b754c000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc4b7929000)
