Brainfuck - енциклопедія мов програмування

Brainfuck - один з найвідоміших езотеричних мов програмування, що відрізняється особливим мінімалізмом. Складається з восьми команд, кожна з яких записується одним символом.

Brainfuck породив безліч діалектів, що відрізняються набором команд, способом їх записи або деталями реалізації, наприклад, максимальним значенням числа, що зберігається в осередку, або ситуаціями, що викликають помилку інтерпретації.

Теоретично Brainfuck дійсно має властивість Тьюринг-повноти і отже, може виконати будь-яке завдання. На практиці, втім, ця мова зовсім непридатний для вирішення завдань з реального життя; виконання навіть найпростіших завдань стає викликом для розробника. Тому Brainfuck використовується виключно як математична модель або для розваги.

Творця Brainfuck надихнув мову FALSE. а його 6 команд (за винятком команд вводу-виводу) в точності збігаються з командами мови P ", але залишається невідомим, впливав чи останній на розробку Brainfuck.

Brainfuck використовує модель машини, що нагадує машину Тьюринга і складається з наступних елементів:

  • програма - послідовність односимвольних команд мови і, можливо, інших символів (при обробці ігноруються);
  • покажчик інструкцій - вказує на команду, яка буде виконана на наступному кроці, після її виконання пересувається на іншу (зазвичай наступну праворуч) команду;
  • пам'ять - моделюється одновимірним масивом осередків, в кожній клітинці зберігається один байт; початкове значення осередки - нуль;
  • покажчик даних - вказує на поточну комірку пам'яті; початкове значення - найлівіша осередок масиву; по команді рухається або змінює значення, що зберігається в поточному осередку;
  • потоки введення і виведення - послідовності байтів в кодуванні ASCII.

Слід зазначити, що через специфіку мови команди умовного переходу [і] використовуються при реалізації практично всіх операцій, які є елементарними в інших мовах (привласнення значення, математичні і логічні операції і т.д.).

Елементи синтаксису:

Hello, World !:

Існує багато способів сказати "Hello, World!" На Brainfuck. Нижче наведено найпростіший з них: використовувати тільки одну комірку пам'яті і послідовно змінювати її значення на ASCII-код кожної літери повідомлення. Кожен рядок прикладу виводить один символ.

Hello, World !:

У цьому прикладі використовується три основні осередки пам'яті - перша для великих літер 'H' і 'W', друга для малих літер і третя для розділових знаків ',', '' і '!' - і три додаткові індексні осередки для скорочення запису змін ASCII-кодів. Використана пам'ять виглядає наступним чином:

(Індексна осередок 1) (осередок великих літер) (індексна осередок 2) (осередок малих літер) (індексна осередок 3) (осередок розділових знаків)

Числа Фібоначчі:

Класичний інтерпретатор Brainfuck використовує змінні типу byte для зберігання значень в осередках пам'яті, і 14-16 числа Фібоначчі викличуть помилку переповнення. Написання довгої арифметики на Brainfuck - завдання досить трудомістка, тому в прикладі передбачається, що в осередках пам'яті можуть зберігатися числа типу integer.

Факторіал:

Класичний інтерпретатор Brainfuck використовує змінні типу byte для зберігання значень в осередках пам'яті, і вже 6! викличе помилку переповнення. Написання довгої арифметики на Brainfuck - завдання досить трудомістка, тому в прикладі передбачається, що в осередках пам'яті можуть зберігатися числа типу integer.

Hello, World !:

Hello, World !:

Цей приклад є перекладом на Spoon цього прикладу. Відзначимо, що Spoon дозволяє не розділяти окремі команди пробілами, але поточна версія EsCo вимагає, щоб команди поділялися пробілами.

Hello, World !:

Цей приклад є перекладом на Brainloller цього прикладу. Оскільки Brainloller - мова чисто графічний, в ролі вихідного коду виступають зображення.


"Hello, World!" на Brainloller

Brainfuck - енциклопедія мов програмування

"Hello, World!" на Brainloller (збільшення 10x)

Hello, World !:

Цей приклад є перекладом на Unary цього прикладу. Сам код занадто великий, щоб приводити його повністю, тому вказана тільки його довжина.

Числа Фібоначчі:

Цей приклад є перекладом на Unary цього прикладу. Сам код занадто великий, щоб приводити його повністю, тому вказана тільки його довжина.

Hello, World !:

Схожі статті