vak: (Default)
[personal profile] vak
Я уже когда-то упоминал про язык Bliss, но с тех пор компилятор несколько улучшился. Кто не в теме: на этом языке писался весь софт для VAX/11 и других машин фирмы Digital в 70-80-х годах. С тех пор язык бесславно исчез, канул в небытие. Но нашлись энтузиасты, решившие оживить динозавра. Сделали компилятор на основе LLVM, покрывающий заметную часть языка.

Описание языка: blslref.pdf

Статья с интересными подробностями про историю языка: ronald-brender/bliss.pdf

Компилятор легко собирается на Линуксе или Маке. Надо только иметь установленные CMake и LLVM 11-й версии:
git clone https://github.com/sergev/bliss-compiler.git
cd bliss-compiler
mkdir build
cd build
cmake .. -DLLVM_CONFIG=/usr/local/Cellar/llvm@11/11.1.0_4/bin/llvm-config
make
cp blissc ~/bin
Покажу простейшую програмку Hello World:
module hello_world = begin

external routine puts;
global routine hello_world = begin
puts(uplit('hello, world!'));
end;
end eludom
Компилируем, получаем hello.o:
$ blissc hello.bliss
$ size hello.o
__TEXT __DATA __OBJC others dec hex
89 0 0 32 121 79
Есть одна проблема: имена всех функций Bliss делает большими буквами. Получается PUTS и HELLO_WORLD. Чтобы запустить правильным образом, приходится делать переходник на Си:
#include <stdio.h>

extern void HELLO_WORLD(void);

void PUTS(const char *str)
{
fputs(str, stdout);
putchar('\n');
}

int main()
{
HELLO_WORLD();
}
Линкуем и запускаем:
$ cc main.c hello.o -o hello
$ ./hello
hello, world!