Если вы когда-нибудь задумывались над тем, что значит писать программу на самом сложном языке программирования, я представляю вам Brainf**ck.

Язык программирования был разработан в 1992 году Урбаном Мюллером, швейцарским студентом-физиком с

цель создания языка с минимально возможным компилятором. Компилятор весит всего 296 байт и впервые был загружен на

Аминет (крупнейший в мире Амига Архив) в 1993 году.

Компилятор поставляется с файлом README.md, который бросает вызов пользователю.

Кто может с его помощью программировать что-нибудь полезное? :)

В конце концов Мюллер также создал интерпретатор языка и создал компилятор весом всего 240 байт.

В этом уроке мы напишем простой калькулятор, который складывает 2 числа на основе ввода пользователя. Что намного сложнее, чем кажется

😂 😂 😂.

Синтаксис

Весь язык состоит всего из 8 простых команд. Но, несмотря на это, это означает, что теоретически с его помощью можно запрограммировать что угодно.

Язык предоставляет вам указатель данных размером 3000 байт, который размещается в стеке. Затем вы можете манипулировать этим указателем данных, используя следующие команды.

Однако за эту простоту приходится платить, поскольку вы должны глубоко продумывать все, что делаете. Вы не получаете хороший ООП или даже функции

так что действительно сложно написать что-то полезное. Тем не менее, мы попытаемся это сделать 😜.

По крайней мере, язык не такой загроможденный, как C++, верно? 🤪

Написание простой программы в Brainf**ck

Мы начнем с получения пользовательского ввода

, Store users input in cell c1 
>, Store the second number in cell 2

Попробуйте запустить программу внутри онлайн-компилятора.

Имейте в виду, что когда вы добавляете ввод в текстовое поле, каждый символ считается следующим входным байтом. Так как вы можете вводить только 1 байт за раз. Таким образом, ввод 12 будет сохранен как значение 1 в ячейке c1 и 2 в ячейке 2.

Если вы не знали, любой символ, который не попадает в указанные в таблице выше, автоматически становится комментарием.

Все входные данные хранятся в виде символов ASCII, поэтому нам нужно будет преобразовать их в числа в их истинной форме.

> ++++ ++++     Cell c3 = 8
[               Start loop with cell pointer at c3
< --- ---       subtract 6 from c2
> -             subtract 1 from c3
]               End loop
++++ ++++       Cell c3 = 8
[               Start loop with cell pointer at c3
<< --- ---      subtract 6 from c2
>> -            subtract 1 from c3
]               End loop

Теперь нам нужно сложить 2 числа вместе.

<        set the pointer to c2
[        Start loop at c2
< +      Add 1 to c1
> -      Subtract 1 from c2
]        End loop at c2

Если вы попытаетесь вывести этот результат на консоль, вы, вероятно, увидите что-то действительно странное. Это потому, что нам нужно преобразовать наш номер обратно в форму ASCII, добавив к нему 48.

++++ ++++  c2 = 8 and this will be our loop counter again
[
< +++ +++  Add 6 to c1
> -        Subtract 1 from c2
]
< .        Print out c1

Окончательный код базового калькулятора

,   Store users input in cell c1
>,  Store the second number in cell 2
> ++++ ++++     Cell c3 = 8
[               Start loop with cell pointer at c3
< --- ---       subtract 6 from c2
> -             subtract 1 from c3
]               End loop
++++ ++++       Cell c3 = 8
[               Start loop with cell pointer at c3
<< --- ---      subtract 6 from c2
>> -            subtract 1 from c3
]               End loop
<        set the pointer to c2
[        Start loop at c2
< +      Add 1 to c1
> -      Subtract 1 from c2
]        End loop at c2
++++ ++++  c2 = 8 and this will be our loop counter again
[
< +++ +++  Add 6 to c1
> -        Subtract 1 from c2
]
< .        Print out c1

Или, если вы предпочитаете упрощенную версию

,>,>++++++++[<------>-]++++++++[<<------>>-]<[<+>-]++++++++[<++++++>-]<.