Користувальницькькі налаштування

Налаштування сайту


Сайдбар

Розділи

Загальний опис
Історія змін
Рекомендації до оновлення
Плани на майбутнє
Відомі проблеми
Онлайн демо
Допомога проекту
Люди
Трохи про безпеку

FAQ



Редагувати сайдбар

brainfuck

Це стара версія документу!


Написание модулей на Brainfuck

Начиная, с релиза Ubilling 0.8.5 Valhalla стало возможным использовать код на Brainfuck в своих модулях.

Зачем?

Язык Brainfuck известен своим минимализмом и кроме того является Тьюринг-полным языком. Наша команда разработчиков в свою очередь считает, что изящный и в это же время функциональный синтаксис Brainfuck как нельзя лучше подходит для разработки прикладных модулей для Ubilling, и максимально соответствует его идеологии. Также мы не приемлем дискриминацию в любых ее проявлениях, и считаем, что все имеют право разрабатывать модули для Ubilling, в независимости от пола, расы, религии, половой ориентации и взаимоотношений с тяжелыми наркотиками.

Немного примеров

Подключаем интерпретатор Brainfuck из соответствующей библиотеки.

require_once('api/vendor/bf/Brainfuck.php');
$bf=new dotzero\Brainfuck();

Просто выполнение кода:

$code = '++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>++.>+.+++++++..+++.<<++.>+++++++++++++.+++++++++++++.>------.+++..---.+++++.<+++++.';
$bf->setCode($code);
show_window(__('Brainfuck code execution result'), $bf->run(true));

А если нам хочется передать какие-то входные данные? Все так же очень просто:

$bf->setCode('>,[>,]<[<]>[.>]');
$bf->setInput('this is input data');
show_window('input test', $bf->run(true));

Но возможно мы хотим инкапсулировать внутрь PHP код, работать с базой и делать другие крутые вещи, например показать список пользователей в виде красивой таблички? Да сколько влезет:

$code='++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>++++++.>>---.+++++++++++..<---------.<----.>>++++++++++++++.-----------------'
        . '-------.---.----------.++++++++++++++++++++++++++++++.--------------.+++++++++++++.<++++++++++.>-------------.++++++++'
        . '+++++++.<------.>--------..<++++++++++++++++++.>++++++++.<++++++++++++++.>--.<++++++.------.>++++++++.<++++.>--------.'
        . '<-------------------------.>---.--------.++.+++++.+++++.<<++++++++.+.>-----------------.<---------.>>.-----------.++++'
        . '+++.++++++++.------------------------.++++++++++++++++++++++++.--------------.+++++.----------.+++++++++++.++++++++.<<+'
        . '+++++++.>>------------------------..<<.-.>>----------.++++++++++++++++++++++++++++++.--------------.+++++++++++++.+.<<'
        . '-------.>>-------.---.++++++++++.+.<<+++++++.++.+++.------------..>>+++.------------------.---.---.----------.++++++++'
        . '++++++++++++++++++++++.--------------.+++++++++++++.<++++++.>..-----------------.++++++++++++++++++++++++.<++++++++++++'
        . '++++++.>-----------------.+++++++.++++++++.<++++++++++++++++++.>-----.<<++++++++.----.>----.>------..<<+++++..+++++++++'
        . '+++++++++.';
$bf->setCode($code);
$bf->execute();

Ну и собственно результат:

Памятка по синтаксису

Весь синтаксис, состоит аж из 8-ми операторов:

  1. > Перейти к следующей ячейке
  2. < Перейти к предыдущей ячейке
  3. + Увеличить значение в текущей ячейке на 1
  4. - уменьшить значение в текущей ячейке на 1
  5. . напечатать значение текущей ячейки
  6. , Ввести извне значение и сохранить в текущую ячейку
  7. [ Если значение текущей ячейки - ноль, перейти вперед по тексту программы к ] с учетом вложенности
  8. ] Если значение текущей ячейки не равен нулю, перейти назад по тексту программы с [ с учетом вложенности
brainfuck.1664019551.txt.gz · Востаннє змінено: 2022/09/24 14:39 повз 127.0.0.1