Помощь - Поиск - Пользователи - Календарь
Полная версия: Эзотерические Языки Программирования
Форум KAZANHOME > Технологии > Все о программировании
Astynax84
Всем привет!

Давайте поговорим о нестандартных языках программирования.

Например, есть такой язык - BrainF*ck smile3.gif
На нем теоретически можно написать абсолютно всё! И при этом у него всего 8 операторов!

Язык оперирует данными, записанными в ячейки (1 ячейка = 1 байт), расположенные последовательно на некоей "ленте" (как машина Тьюринга).
Интерпретатор всегда находится над одной из ячеек и может читать/изменять значение в ней. Также он может перемещаться вдоль ленты. Плюс - присутствует ввод/вывод "наружу" (например на клавиатуру/экран).

Операторы языка:
< - сдвиг влево по ленте на 1 шаг
> - сдвиг вправо на 1 шаг
+ - увеличение значения в текущей ячейке
- - уменьшение значения в текущей ячейке
[ - начало блока. Проверяется значение в текущей ячейке - если "0", то переходим к оператору, следующему после конца блока.
] - конец блока - возврат к началу блока и следующая проверка на "0"
. - вывод символа с кодом, равным значению в текущей ячейке
, - ввод значения в текущую ячейку. Значение = код введенного символа

Вот программа "Hello World!" на BrainF*ck'е:
Код
++++++++++[>+++++++>++++++++++>+++>+<
<<<-]>++.>+.+++++++..+++.>++.<<++++++
+++++++++.>.+++.------.--------.>+.>.
Ap}{@HrE/l
Цитата(Astynax84 @ 9.1.2007, 21:38) *

Всем привет!

Давайте поговорим о нестандартных языках программирования.

Например, есть такой язык - BrainF*ck smile3.gif
На нем теоретически можно написать абсолютно всё! И при этом у него всего 8 операторов!


Ну это ты погорячился по поводу абсолютного всё я сам на ВМК учюсь и знаю что на данном языке можно реализовать только вычислимые функции (есть такая теорема что если функция вычислима по тюрингу то она вычислима), также можно рассмотреть теорию частично рекурсивных функций (теорема Класс частично рекурсивных функций совпадает с классом функций вычислимых по тюрингу) также давно доказано что класс функций который можно реализоать на (С, паскале) можно реализовать на машине тюринга и наоборот(я не говорю про всякие там классы и потоки в данном смысле я говорю про чисто алгоритмические задачи операции со строками математика.). Вобщем прикольно неожидал тут увидеть тему из Дискретной математики приятно удивлён good.gif
Astynax84
Цитата(Ap}{@HrE/l @ 10.1.2007, 0:03) *

Ну это ты погорячился по поводу абсолютного всё...


Пример - исползуем вместо ленты всю "память" машины, т.е. и регистры, и служебные адреса, и видеопамять - и вот тебе низкоуровневый ввод/вывод откуда и куда угодно - главное знать, что делаешь smile3.gif
Ассемблер тоже с "памятью" только работает - а на нем можно написать все smile3.gif

А BF - он, да, Тьюринг-полный smile3.gif

Есть его реализация, где все 8 операторов закодированы 0/1 - вот это супер. Только "слова" разной длины - чтобы небыло избыточности, но и разных толкований тоже не было. Получается Байт-код! Причем написанный вручную ;)

А ты не сталкивался с языками Funge-семейства? BeFunge, вот, - двухмерный: у него программа это не строка, а таблица smile3.gif И по таблице он двигается в зависимости от содержания, а вместо условий - развилки (по условию) в прямом смысле!
Ap}{@HrE/l
Цитата(Astynax84 @ 10.1.2007, 6:54) *

Пример - исползуем вместо ленты всю "память" машины, т.е. и регистры, и служебные адреса, и видеопамять - и вот тебе низкоуровневый ввод/вывод откуда и куда угодно - главное знать, что делаешь smile3.gif
Ассемблер тоже с "памятью" только работает - а на нем можно написать все smile3.gif

А ты не сталкивался с языками Funge-семейства? BeFunge, вот, - двухмерный: у него программа это не строка, а таблица smile3.gif И по таблице он двигается в зависимости от содержания, а вместо условий - развилки (по условию) в прямом смысле!

Я же говорю что на наших языках программирования можно реализовать только вычислимые функции. По поводу языков Funge-семейства нет несталкивался но слышал в принцыпе это теоретические языки с помощью которых можно ставить задачи и доказывать теоремы может гдето в базах данных использовать можно но sql есть.
Astynax84
Цитата(Ap}{@HrE/l @ 10.1.2007, 10:09) *

... можно реализовать только вычислимые функции ...


Давай так. Тьюринг-машина работает с памятью, правильно?
Предоставляем ей адресное пространство, отображающее фрейм на диске + ячейку(ячейки) смещения окна + ячейку команд.
Скажем блок ячеек данных отображает фрейм, равный сразу 1 сектору диска.
- Пишем в ячейку адреса номер сектора,
- сдвигаемся на ячейки фрейма,
- пишем новые данные для сектора,
- передвигаемся на ячейку команд, даем команду "запись",
- ждем пока не появится отклик - код возврата дисковой операции.

Это вывод на диск. Ввод аналогичен. Вывод на экран - другие адреса фрейма/смещения/команды smile3.gif

Вот уже имеем BIOS (БСВВ) - базовую систему ввода/вывода smile3.gif

Далее разрабатываем файловую систему. Пишем загрузчик ОС, командный интерпретатор с интерфейсом командной строки ... графическую ОС ... Браузер ... сидим в Нете из под своей ОС ;)
daniil
Надо ище придумать, как из этой оси в контру по сетке гамать :lol: (Open GL, Direct X).

Есть хорошее описание эзотерических языков в каком-то номере Мир ПК, вот оно, 0.5 метра примерно, пдф (файлообмен), я почитал, прикольно smile3.gif Самое корявое (эзотерическое), наверно - Malbolge и WhiteSpace.
Astynax84
Цитата(daniil @ 10.1.2007, 11:43) *

Надо ище придумать, как из этой оси в контру по сетке гамать :lol: (Open GL, Direct X).

Есть хорошее описание эзотерических языков в каком-то номере Мир ПК, вот оно, 0.5 метра примерно, пдф (файлообмен), я почитал, прикольно smile3.gif Самое корявое (эзотерическое), наверно - Malbolge и WhiteSpace.


Вот ещё интересная статейка - про то же, но с картинками smile3.gif
При запуске может ругаться по поводу скриптов - отвечать на вопрос можно и "да" и "нет" - без разницы...

А Малболг - это супер!

А самая круть это написать программу, которая выводит свой листинг!
Ghost
Самое главное придумать такой компутер smile3.gif
И тады все пойдет на ура. ТАк как наш комп по сути уже не может реализовать на прямую все то что ты написал smile3.gif

PS: Я замучился какая-то фигня у меня к сообщению добавляется :( Я чего-то не пойму. Почему? Может вирус?
Astynax84
Цитата(Ghost @ 25.1.2007, 16:48) *

Самое главное придумать такой компутер smile3.gif
И тады все пойдет на ура. ТАк как наш комп по сути уже не может реализовать на прямую все то что ты написал smile3.gif

PS: Я замучился какая-то фигня у меня к сообщению добавляется :( Я чего-то не пойму. Почему? Может вирус?


Простые BF-компы есть smile3.gif - на микроконтроллерах ;)

А можно написать эмулятор такой машины, точнее интерпретатор с реализацией нужной структуры памяти - чтение/запись в "области устройств" будет транслироваться на програмном уровне в стандартные операции ввода/вывода в память/диск...

Но это уже не то, конечно ;) Лучше на контроллере AVR'овском собрать. Вместо диска использовать энергонезависимую RAM - небольшой объем, но зато встроена уже. Ещё можно замутить самопрограммирование - возможность то есть - и датчики поставить для анализа внешней среды. Глядишь, до терминатора самообучится blum.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.