====== Написання модулів на Brainfuck ======
Починаючи, з релізу Ubilling 0.8.5 Valhalla стало можливим використовувати код на [[https://ru.wikipedia.org/wiki/Brainfuck|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();
Ну і власне результат:\\
{{:bfuserlist.png?600|}}
====== Пам'ятка із синтаксису ======
Весь синтаксис складається аж із 8-ми операторів:
- **>** Перейти до наступної комірки
- **<** Перейти до попередньої комірки
- **+** Збільшити значення в поточній комірці на 1
- **-** зменшити значення в поточній комірці на 1
- **.** надрукувати значення поточної комірки
- **,** Ввести ззовні значення і зберегти в поточну комірку
- **[** Якщо значення поточної комірки - нуль, перейти вперед по тексту програми до **]** з урахуванням вкладеності
- **]** Якщо значення поточної комірки не дорівнює нулю, перейти назад за текстом програми до **[** з урахуванням вкладеності