О моём новом няшном языке программирования на основе Брейнфака (Страница 3) / Программирование / Форум StopLinux

Объявление

Kwork.ru - услуги фрилансеров от 500 руб.

#51 06-10-11 18:08:20

testicula
Участник
Зарегистрирован: 30-04-11
Сообщений: 113
Windows 7Chrome 14.0.835.186

Re: О моём новом няшном языке программирования на основе Брейнфака

Babusha пишет:

А какое придумать название?

Ну, по смыслу же. Ты же пишешь, не я smile
http://en.wikipedia.org/wiki/Brainfuck
Character    Meaning
>    increment the data pointer (to point to the next cell to the right).
<    decrement the data pointer (to point to the next cell to the left).
+    increment (increase by one) the byte at the data pointer.
-    decrement (decrease by one) the byte at the data pointer.
.    output a character, the ASCII value of which being the byte at the data pointer.
,    accept one byte of input, storing its value in the byte at the data pointer.
[    if the byte at the data pointer is zero, then instead of moving the instruction pointer forward to the next command, jump it forward to the command after the matching ] command*.
]    if the byte at the data pointer is nonzero, then instead of moving the instruction pointer forward to the next command, jump it back to the command after the matching [ command*.

Вот по meaning, и сокращай. Напр: [+] -- OP_PLUS, [-] -- OP_MINUS, [<] -- DEC_DP, етц.


- Модератор... ты очень, очень глубоко заблуждаешься...
- Два предупреждения за скрытый мат!

Неактивен

#52 06-10-11 20:58:11

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Opera 11.51

Re: О моём новом няшном языке программирования на основе Брейнфака

Уряяяяяяяяяяяя!
"Hello World!" работает!

Скрытый текст:

6506b132932e.png

testicula пишет:

Ну, по смыслу же. Ты же пишешь, не я

Да не название переменных, название языка smile. Думая Brain-ня, потому-что основан на бреинфаке и няшен, хотя не очень нравится.

Неактивен

#53 06-10-11 21:47:13

Lord_Evil
Master Of Darkness
Из Deepest Pits Of Hell
Зарегистрирован: 06-06-10
Сообщений: 1,887
Сайт
LinuxOpera 11.10

Re: О моём новом няшном языке программирования на основе Брейнфака

Babusha, "BrainFuck" переводится, как "мозгоёбство", так? Так же я уверен, что у большей части обитателей нашего форума ты лично ассоциируешься, как мозгоёб. Вот и назови язык в честь себя - Babasha. Ну или Babu-ня, или BabuFuck, или даже(экстримально) Fuck(With)Babu - F(W)B. Для большей няшности можешь добавить плюсов)))


Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©

Неактивен

#54 06-10-11 21:51:27

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Opera 11.51

Re: О моём новом няшном языке программирования на основе Брейнфака

Lord_Evil, Да ладно, лучше что-то посерьезнее и поприличнее smile.

Неактивен

#55 06-10-11 21:52:30

testicula
Участник
Зарегистрирован: 30-04-11
Сообщений: 113
Windows 7Chrome 14.0.835.186

Re: О моём новом няшном языке программирования на основе Брейнфака

MOP3E пишет:
testicula пишет:

Ну Бабуша же делает интерпретатор конкретноно диалекта брэйнфака, а не "алгоритм любой сложности".

А что - брейнфак не имеет всех этих логических конструкций?

Естественно имеет, раз он Turing Complete wink
Ну и что?


- Модератор... ты очень, очень глубоко заблуждаешься...
- Два предупреждения за скрытый мат!

Неактивен

#56 06-10-11 21:55:22

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Opera 11.51

Re: О моём новом няшном языке программирования на основе Брейнфака

testicula пишет:

Естественно имеет, раз он Turing Complete
Ну и что?

Ой, точно, это же получается что на моем няшном языке теоретически можно реализовать алгоритм любой сложности smile.

Неактивен

#57 06-10-11 21:56:21

testicula
Участник
Зарегистрирован: 30-04-11
Сообщений: 113
Windows 7Chrome 14.0.835.186

Re: О моём новом няшном языке программирования на основе Брейнфака

Babusha пишет:

Да не название переменных, название языка . Думая Brain-ня, потому-что основан на бреинфаке и няшен, хотя не очень нравится.

Соглашусь с LordEvil. Для поднятия твоего ЧСВ, а также исходя из капитанской логики, назови его BBF (BabushaBrainFuck).

Добавлено спустя 01 мин 29 с:

Babusha пишет:

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

Так точно, Кэп! Любой няшности.

Моё предложение написать на нём движок NewSLOR остаётся в силе.


- Модератор... ты очень, очень глубоко заблуждаешься...
- Два предупреждения за скрытый мат!

Неактивен

#58 06-10-11 22:03:49

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Opera 11.51

Re: О моём новом няшном языке программирования на основе Брейнфака

testicula пишет:

Соглашусь с LordEvil. Для поднятия твоего ЧСВ, а также исходя из капитанской логики, назови его BBF (BabushaBrainFuck).

Да черт, без слова "fuck"

Неактивен

#59 06-10-11 22:42:58

testicula
Участник
Зарегистрирован: 30-04-11
Сообщений: 113
Windows 7Chrome 14.0.835.186

Re: О моём новом няшном языке программирования на основе Брейнфака

Babusha молодец, кстати. Хороший кодер wink


- Модератор... ты очень, очень глубоко заблуждаешься...
- Два предупреждения за скрытый мат!

Неактивен

#60 06-10-11 23:31:35

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Opera 11.51

Re: О моём новом няшном языке программирования на основе Брейнфака

testicula, спасибо smile.

А в шарпике есть оператор next в циклах?

Неактивен

#61 06-10-11 23:36:13

testicula
Участник
Зарегистрирован: 30-04-11
Сообщений: 113
Windows 7Chrome 14.0.835.186

Re: О моём новом няшном языке программирования на основе Брейнфака

Babusha пишет:

testicula, спасибо smile.

А в шарпике есть оператор next в циклах?

А нафиг он тут?

for (int i=0; i<10; i++) {
     if (i == 4)
         continue;
     Console.WriteLine(i);
     if (i == 8)
         break;
}

- Модератор... ты очень, очень глубоко заблуждаешься...
- Два предупреждения за скрытый мат!

Неактивен

#62 06-10-11 23:42:33

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Opera 11.51

Re: О моём новом няшном языке программирования на основе Брейнфака

testicula пишет:

А нафиг он тут?

Секундочку, оператор continue переходит к следующей итерации или продолжает выполнение текущей?

Редактировался Babusha (06-10-11 23:44:43)

Неактивен

#63 06-10-11 23:49:40

testicula
Участник
Зарегистрирован: 30-04-11
Сообщений: 113
Windows 7Chrome 14.0.835.186

Re: О моём новом няшном языке программирования на основе Брейнфака

MOP3E пишет:
Babusha пишет:

Секундочку, оператор continue переходит к следующей итерации или продолжает выполнение текущей?

Да, именно так. Он используется внутри операторных скобок.

Вообще-то Babusha спросил что делает оператор "continue". То что он находится внутри "операторных скобок", по моему, очевидно wink

А "continue" да, переходит к следующей итерации, а если точнее то к точке где происходит "i++". (затем просиходит проверка "i < 10" и исполняется "тело" цикла.

Попробуй протрассировать этот цикл в студии нажимая F11.

Редактировался testicula (06-10-11 23:55:28)


- Модератор... ты очень, очень глубоко заблуждаешься...
- Два предупреждения за скрытый мат!

Неактивен

#64 09-10-11 15:52:12

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Opera 11.51

Re: О моём новом няшном языке программирования на основе Брейнфака

Уже маленькая победа! Уже работает "Hello, World!", следующие команды хорошо отлажены и отлично работают (включая циклы):

+ - > < ^ v # ~ .  * / % [ ]

В текущем состоянии можно полноценно запускать уже программы на чистом Brainfuck

Вот пример программы печатающей 987654321 с помощью цикла и оператора ~, который выводит значение текущей ячейки в цифрах

01 01 0A 0E 01 0B 02 01 01 0B 0F

Эквивалент на бреинфаке

+ + + + + + + + + + { 10+ }
[ - ~ ]

Циклы реализовал следующим образом, идеат команда начала цикла

0E

следующим идет адрес перехода к концу цикла

01 0B

01 - значит один байт, 0B - адрес (следующий после команды [ (0F))
Дальше идет тело цикла. Цикл начинается с того, что проверяется текущее значение ячейки, если не равно нулю, в стек виртуальной машины загружается адрес начала цикла, если нет, перепрыгивает на адрес указанный после команды 0E, если цикл был начал, когда доходит до команды 0F (]), проверятся значение ячейки, опять, если не равно нулю, переходит на адрес лежащий на вершине стека виртуальной машины, иначе, переходит на выполнение следующей команды. Как нибуть по аналогии сделаю и условный переход, на как сделать процедуры - ума не приложу, есть идеи?

Редактировался Babusha (09-10-11 15:53:24)

Неактивен

#65 09-10-11 23:48:57

testicula
Участник
Зарегистрирован: 30-04-11
Сообщений: 113
Windows 7Chrome 14.0.835.186

Re: О моём новом няшном языке программирования на основе Брейнфака

Babusha пишет:

Уже маленькая победа! Уже работает "Hello, World!", следующие команды хорошо отлажены и отлично работают (включая циклы):

+ - > < ^ v # ~ .  * / % [ ]

В текущем состоянии можно полноценно запускать уже программы на чистом Brainfuck

Вот пример программы печатающей 987654321 с помощью цикла и оператора ~, который выводит значение текущей ячейки в цифрах

01 01 0A 0E 01 0B 02 01 01 0B 0F

Эквивалент на бреинфаке

+ + + + + + + + + + { 10+ }
[ - ~ ]

Циклы реализовал следующим образом, идеат команда начала цикла

0E

следующим идет адрес перехода к концу цикла

01 0B

01 - значит один байт, 0B - адрес (следующий после команды [ (0F))
Дальше идет тело цикла. Цикл начинается с того, что проверяется текущее значение ячейки, если не равно нулю, в стек виртуальной машины загружается адрес начала цикла, если нет, перепрыгивает на адрес указанный после команды 0E, если цикл был начал, когда доходит до команды 0F (]), проверятся значение ячейки, опять, если не равно нулю, переходит на адрес лежащий на вершине стека виртуальной машины, иначе, переходит на выполнение следующей команды. Как нибуть по аналогии сделаю и условный переход, на как сделать процедуры - ума не приложу, есть идеи?

Вызов процедуры CALL <addr> аналогичен следующей последовательности:
vm.StackVM.Push(ip); // ip - тут это instruction pointer.
vm.IP = <addr>

Выход из процедуры (return), аналогичен всего лишь:
vm.IP = vm.StackVM.Pop()

Это как пример.


- Модератор... ты очень, очень глубоко заблуждаешься...
- Два предупреждения за скрытый мат!

Неактивен

#66 10-10-11 00:01:28

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Opera 11.51

Re: О моём новом няшном языке программирования на основе Брейнфака

testicula пишет:

Вызов процедуры CALL <addr> аналогичен следующей последовательности:
vm.StackVM.Push(ip); // ip - тут это instruction pointer.
vm.IP = <addr>

Выход из процедуры (return), аналогичен всего лишь:
vm.IP = vm.StackVM.Pop()

Это как пример.

Ну как-бы "имена" процедур есть числа

+ + + + + { 5+ }
{ Процедура 5 печатающая переход на новую строку, при этом не "портит" текущее значение ячейки}
( ^ # + + + + + + + + + + { 10+ } . # v @ ) &

Dictionary может хранить <int, int>  хэш ?

Сложность в том, что я не придумал как и где процедуры хранить.

Кстати, да, я решил что оператор "v" не должен выталкивать значение лежащие на вершине стека, а только копировать (а если в ячейке уже есть число, складывать) в текущую ячейку, для уничтожения числа на вершине стека - оператор @

Редактировался Babusha (10-10-11 00:12:34)

Неактивен

#67 10-10-11 00:38:14

testicula
Участник
Зарегистрирован: 30-04-11
Сообщений: 113
Windows 7Chrome 14.0.835.186

Re: О моём новом няшном языке программирования на основе Брейнфака

Babusha пишет:

Кстати, да, я решил что оператор "v" не должен выталкивать значение лежащие на вершине стека, а только копировать (а если в ячейке уже есть число, складывать)

Нормально. Я в своём компиляторе С тоже как-то сделал подобным образом стек машину (нужна была простота). Это достаточно эффективно.


- Модератор... ты очень, очень глубоко заблуждаешься...
- Два предупреждения за скрытый мат!

Неактивен

#68 10-10-11 00:52:09

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Opera 11.51

Re: О моём новом няшном языке программирования на основе Брейнфака

Кстати, да, думаю отказаться от адреса конца цикла перед оператором [, думаю создать переменную isloopIgnore = false, потом делать как-то так

if(CurrentCommand() == 0xF || isLoopIgnore == true) isLoopIgnore = false; 
else if(CurrentCommand() != 0xF || isLoopIgnore == true) NextByteCodeCommand();  

по нескольким причинам, потому-что во первых, сложно считать адреса во время компиляции и сложно будет отлаживать, но в результате увеличится количество итераций, как поступить?

Редактировался Babusha (10-10-11 00:53:06)

Неактивен

#69 10-10-11 01:03:29

testicula
Участник
Зарегистрирован: 30-04-11
Сообщений: 113
Windows 7Chrome 14.0.835.186

Re: О моём новом няшном языке программирования на основе Брейнфака

Babusha пишет:

Кстати, да, думаю отказаться от адреса конца цикла перед оператором [, думаю создать переменную isloopIgnore = false, потом делать как-то так

if(CurrentCommand() == 0xF || isLoopIgnore == true) isLoopIgnore = false; 
else if(CurrentCommand() != 0xF || isLoopIgnore == true) NextByteCodeCommand();  

по нескольким причинам, потому-что во первых, сложно считать адреса во время компиляции и сложно будет отлаживать, но в результате увеличится количество итераций, как поступить?

Вот тут я тебя уже потерял. Извини, брэйнфак и C# - слишком для меня кислотное сочетание smile


- Модератор... ты очень, очень глубоко заблуждаешься...
- Два предупреждения за скрытый мат!

Неактивен

#70 10-10-11 01:21:11

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Opera 11.51

Re: О моём новом няшном языке программирования на основе Брейнфака

testicula пишет:

Вот тут я тебя уже потерял. Извини, брэйнфак и C# - слишком для меня кислотное сочетание

Не, согласен, сочитание вообще ппц smile.

Я имею ввиду, что циклы в байткоде выглядят вот так

0E 01 04 0F

0E - команда начала цикла.
01 04 - адрес конца, (01 размер в байтах, 04 - само число)
0F - команда конца цикла.

При начале цикла проверяется текущее значение ячейки, если 0, тогда виртуальная машина переходит на адрес указанный после команды 0E, если значение ячейки не ноль, тогда перепрыгивает адрес и начинает выполнять блок кода, я имел ввиду перепрыгивание блока кода сделать не прыжком на адрес, а просто смотреть каждую команду блока и игнорировать ее, пока не встретится 0F, все только потому-что, пораскинув ситуацией, считать адреса во время компиляции довольно трудновато и отлаживать будет тяжело, ведь мы будем стоять перед такой ситуацией, мы увидели начало блока цикла, чтобы посчитать адрес перехода конца, нам надо найти и посчитать весь блок, найти размер, потом к размеру добавить плюс один - байт команды конца цикла, плюс, еще один байт указывающий размер адреса и сам адрес, геморойно в компиляторе такое реализовать и отлаживать неудобно, но в итоге, мы получим цикл который будет медленее, но более простую реализацию, не знаю, как лучше сделать?

Добавлено спустя 09 мин 21 с:
Кстати, да, все еще думаю о названии, хочу избавится от мата smile, думаю сделать BF++ или BF#, как лучше?

Неактивен

Kwork.ru - услуги фрилансеров от 500 руб.
Мой VPS с 2016 года !
✅ Виртуальные от 300 ₽/месяц, RAM 1-10GB, DISK 20-360 GB;
✅ Выделенные от 3000 ₽/месяц. RAM 4-64GB, DISK до 4TB;
✅ Intel Xeon, SSD, XEN, iLO/KVM, Windows/Linux, Администрирование;
✅ Бесплатно Full Backup и Anti-DDoS.





Подвал форума

Под управлением FluxBB
Модифицировал Visman

Яндекс.Метрика