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!
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