Pull to refresh

Quipu — эзотерический язык программирования на основе узелковой письменности Инков

Abnormal programming *Programming *Compilers *
Один мой друг, историк по профессии, подкинул мне замечательную идею об использовании древней мнемонической и счетной систем в современной криптографии. В процессе его рассказов об узелковой письменности Инков, я начал соображать, что все новое — хорошо забытое старое и было бы не плохо как-то применить древний опыт в современном мире. Первое, что пришло в голову — криптография. Это самое очевидное — просто сконвертировать узлы с ниток в байты и шифр готов. С одной стороны все казалось понятным, но потом я вспомнил про криптостойкость и другие параметры шифров и понял, что не обладаю достаточным опытом и знаниями в области криптографии, чтобы в одиночку разработать новый шифр.

Дальше я решил попытаться представить некий эзотерический язык программирования, конструкции которого могут быть записаны с помощью узелковой письменности Кипу. Поначалу казалось, что это невозможно: я придумывал язык и пытался написать на нем программу вычисления факториала. Первые три черновика спецификаций ушли в урну: языки никуда не годились. Они выглядели как полагалось для эзотерических языков, но не помогали мне решать поставленную задачу, т.к. не были полными по Тьюрингу. Энтузиазм потихоньку угасал и эта задача казалась мне не по-плечу. Собравшись с силами, я решил, что если смогу написать программу вычисления факториала — то язык работает.

Четвертая версия языка оказалось удачной: я написал факториал, затем генерацию последовательности Фибоначи и дюжину простых примерчиков аля “сумма чисел от 0 до 99”. Язык получился что надо: необычный и в тоже время с простой понятной идеей. Главное — язык может решить любую (ну или почти любую) задачу которую можно выразить в виде вычислимой функции.

А теперь все по-порядку
Total votes 82: ↑78 and ↓4 +74
Views 29K
Comments 40

Эзотерический язык LMC

Programming *Assembler *Compilers *C *DIY
Часть I
Часть II
Часть III
Часть IV
Часть V

Данная статья посвящена созданию интерпретатора некого эзотерического языка, в основе которого лежит архитектура Little Man Computer.
Фактически, это эмулятор ассемблера для LMC, только здесь вместо ассемблерных команд
INP (загрузить число в аккумулятор из устройства ввода),
STA (сохранить число из аккумулятора в память),
ADD (прибавить к числу в аккумуляторе число из памяти),
SUB (вычесть из числа в аккумуляторе число из памяти),
OUT (вывести число в аккумуляторе устройство вывода)
… используются спец-символы.
Команды переходов от ячейки к ячейке в памяти команд соответствуют командам, сдвигающим считывающую головку машины Тьюринга в языках brainfuck и P′′.
В языке bf команда + (плюс) производит замену текущего символа $ c $ следующим за ним (в ASCII-таблице) символом $ c_{n+1} $. Так, если на ленте Тьюринга изначально находится символ «0», то команда $ c \rightarrow c_{n+1} $ запишет вместо него символ «1».
Читать дальше →
Total votes 18: ↑16 and ↓2 +14
Views 6K
Comments 4