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

Объявление

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

#1 03-10-11 16:44:41

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

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

Тут я недавно говорил, что для освоения шарпа, я решил сделать новый няшный и игрушечный язык программирования, хочу описать все это деяние.

Он будет иметь следующие команды
1. + - Инкремент значения текущей ячейки.
2. - - Декремент значения текущей ячейки.
3. > - Переход к следующей ячейки, ячеек бесконечное положительное число, при обращении к отрицательному числу, идет обращение по кругу.
4. < - Переход к предыдущей ячейки.
5. . -  Вывести ascii символ по числу в ячейке.
6. , -  Считать текст, перевернуть его и загрузить в стек все по ascii.
7. [ - Начало цикла, до тех пор, пока значение текущей ячейки не станет 0.
8. ] - Конец цикла.
О стеке, в качестве дополнительной, для удобства, памяти, я решил добавить стек, действовать он будет по правилу "первый пришел, первый ушел".
9. ^ - Толкнуть значение текущей язчейки с тек.
10. v - Вытолкнуть из стека и скопировать в текущую ячейку.

Теперь, я решил для удобства добавить условные переходы операторами ? : ;
Этими операторами будет сравниваться текущее значение ячейки и с первым значения стеком, значение ячейки находится слева, вторым значением стека должно быть число от 0 до 4, которое обозначает
11.1. 0 - ==
11.2. 1 - =>
11.3. 2 - =<
11.4. 3 - >
11.5. 4 - <
12. ? - Указывает на начало условного блока (if).
13. : - else.
14. ; - Конец блока.

А еще, я решил добавить процедуры:
15. ( - Начало блока процедуры.
16. ) - Конец блока процедуры.
17. @ - Оператор вызова процедуры.

Так же, я решил добавить комментарии, между { и }
18. { - Начало блока комментария.
19. } - Конец блока комментария.

Еще, добавил арифметические операции, значение ячейки слева, значение стека - справа.
20. * - Умножение
21. / - Деление.
22. % - Остаток от деления.

Решил добавить оператор обнуления значения ячейки, т.к. цикл [-] очень медленный
23. # - Делает значение текущей ячейки 0.

Еще есть одна маленькая неопределенность со стеком, оператор v должен копировать последнее значение стека и ничего больше или еще и удалять? Я с этим не решил, по этому, опциональный оператор
24. & - Удаляет последнее значение стека.

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

+++

А вот так - правильно:

+ + +

С комментариями, неправильно -

{х*й пизда}

А вот так - правильно:

{ х*й пизда }

А теперь, о самом интересном, о реализации, должен быть динамический массив с ячейками, стек бреинфака и стек виртуальной машины (что не одно и тоже и между собой не пересекаются), я решил, чтобы упростить виртуальную машину, сделать в ней как можно меньше команд, по этому, сам этот язык не является "ассемблером", ассемблер примерно будет вот таким:

push
pop
jmp
cmp
j==
j=>
j=<
j>
j<
pls
min
mlp
dvz
<и тут команда "остаток от деления", не придумал название, еще>

Решил, кстати, в ассемблере для простого синтактического анализа (правильнее, чтобы его вообще почти не было) не добавлять запятых и прочую фигню
К примеру, если бы в ассемблере с синтаксисом интел в регистр ax загрузить число 10

mov ax,10

То решил с моим ассемблером сделать проще

push [0] 10

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

push vm :loop

А в стек бреинфака

push bf 10

Т.е. синтаксис должен быть самый элементарный, чтобы не париться, вообще, чтобы все команды разделялись только пробелм,табом, ньюлаином.

О байткоде - все команды умещаются в 1 байти соотвествовать они будут как-то так
1. + - 01
2. - -02
...
8. [ - 08
и так далее.

Я не придумал, как управляются с числами, которые указывать в байткоде
Вот к примеру, код

push vm 680

Должен компилироваться, к примеру, в

0A 01 <а каким образом указывать сюда число>

Проблема в том, что число может разного размера и в FFh не умещаться.
По этому, я придумал, что когда надо указать длинное число, сначала идет число в размере до FF указывающее его длину в байтах, а потом уже само число, т.е. из того примера должно получится что-то типа

0A 01 02 02 8A

Где 0A - команда push.
Где 01 - обозначает vm.
Где 02 - Размер в байтах.
А 02 8A уже само число.

Но мне это кажется неправильным, есть выход получше?

В общем, кратенько набросал идею для тех кому интересно (Лорд Зла уже хотел присоединиться)

Для чего все это нужно? -
Мне просто нехуй делать и я хочу изучать шарп на практите smile.

Ах, да, все пишется на ruby C#.

Неактивен

#2 03-10-11 18:18:24

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

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

Регни проект на гуглкоде :-)


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

Неактивен

#3 03-10-11 18:40:42

TrollWINNT
Участник
Зарегистрирован: 02-11-09
Сообщений: 989
LinuxOpera 11.51

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

Babusha пишет:

Но мне это кажется неправильным, есть выход получше?

Языку низкого уровня вобще не нужно знать число ли в ячейке или что еще. А в общем не понимаю нафига этот велосипед?
Есть асм. Нафига еще столь же плохочитаемый язык низкого уровня ? Есть С/С++ языки низкого уровня с которыми приятно работать. Это уже стандарт под кторый куча библиотек, зачем что то более хреновое?

Редактировался TrollWINNT (03-10-11 18:41:29)


Нет, так мы целей гнусных не достигнем... / В.П. Вишневский

Неактивен

#4 03-10-11 18:49:51

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

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

Babusha
Во первых, уважаю твоё начинание и реально всецело поддерживаю.

Во вторых вопрос: почему ты решил заморачиваться с длинными числами? Почему, для начала, не использовать просто INT32 (фиксированно 4 байта на число). Если захочешь, расширить будет легко когда всё заработает и отладится.

В третьих: с компиляторами я знаком неплохо, и могу подсказать и посоветовать если будут вопросы smile

Удачи!

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

TrollWINNT пишет:
Babusha пишет:

Но мне это кажется неправильным, есть выход получше?

Языку низкого уровня вобще не нужно знать число ли в ячейке или что еще. А в общем не понимаю нафига этот велосипед?
Есть асм. Нафига еще столь же плохочитаемый язык низкого уровня ? Есть С/С++ языки низкого уровня с которыми приятно работать. Это уже стандарт под кторый куча библиотек, зачем что то более хреновое?

Друк. Бабуша пишет *ИГРУШЕЧНЫЙ* компилятор:

Babusha пишет:

Для чего все это нужно? -
Мне просто нехуй делать и я хочу изучать шарп на практите .

По моему, исчерпывающе.


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

Неактивен

Следующие пользователи поставили вам "+1":Babusha

#5 03-10-11 20:38:08

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

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

testicula пишет:

Во вторых вопрос: почему ты решил заморачиваться с длинными числами? Почему, для начала, не использовать просто INT32 (фиксированно 4 байта на число). Если захочешь, расширить будет легко когда всё заработает и отладится.

Спасибо, именно так и буду делать.

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

Lord_Evil пишет:

Регни проект на гуглкоде :-)

Не суди меня строго, но я там кнопочку "Зарегистрировать новый проект с блекджеком и шлюхами" не нашел, как там зарегистрироваться?

Добавлено спустя 04 мин 40 с:
Блин, а как назвать команду "остаток от деления"?

Редактировался Babusha (03-10-11 20:40:16)

Неактивен

#6 03-10-11 20:47:16

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

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

Babusha пишет:
testicula пишет:

Во вторых вопрос: почему ты решил заморачиваться с длинными числами? Почему, для начала, не использовать просто INT32 (фиксированно 4 байта на число). Если захочешь, расширить будет легко когда всё заработает и отладится.

Спасибо, именно так и буду делать.

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

Lord_Evil пишет:

Регни проект на гуглкоде :-)

Не суди меня строго, но я там кнопочку "Зарегистрировать новый проект с блекджеком и шлюхами" не нашел, как там зарегистрироваться?

Добавлено спустя 04 мин 40 с:
Блин, а как назвать команду "остаток от деления"?

Назови её MOD smile


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

Неактивен

Следующие пользователи поставили вам "+1":Babusha

#7 03-10-11 22:21:55

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

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

Майор Очевидность пишет:
Babusha пишет:

Блин, а как назвать команду "остаток от деления"?

по идее, mod.

однако опять же, если взглянуть на X86-ассемблер, в нём операция целочисленного деления была ответственна как за нахождение частного, так и остатка.
но это просто к сведению.

Ну причём тут х86 когда чудо пишет эмулятор неведомого брэйнфакнутого диалекта на C#. Окстись!


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

Неактивен

#8 03-10-11 22:46:54

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

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

Майор Очевидность пишет:

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

1. Пардон, низкий уровень != асм х86 это раз.

2. И действительно, тут разговор о компиляторе в собственный примитивный байт-код/симуляторе рантайма брэйнфак-подобного языка *без* попыток его запуска на реальном цпу (всё эмулируется *на С#* в режиме интерпретации).

Ну никак язык не поворачивается назвать такое "низким уровнём", даже с учётом упоминания слова "байткод" smile


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

Неактивен

#9 03-10-11 22:47:44

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

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

Блин, похоже ассемблер не упрощает задачу, а только усложняет, вот к примеру, есть код на бреинфаке, который методом сложения умножает 10*10

+ + + + + + + + + + { 10+ }
^ - [  > v < - ] 

В ассемблере должен выглядить как-то так:

mov cell 10 ; В ячейку 10
push bf cell ; C стек bf 10
inc
push vm 10 ; В стек vm адрес перехода
next ; Переход к следующей ячейке
cop bf ; Копирует из стека bf и складывает с текущей ячейком
prev ; Переход к предыдущей ячейке
inc 
cmp cell 1 ; Сравнивает с 0
j!= ; Если не равно, переходит по адресу в стеке vm

Слижком сложно, имхо, а я наоборот хотел простоты, наверно от ассемблера откажусь, как считаете?

Редактировался Babusha (03-10-11 22:50:04)

Неактивен

#10 03-10-11 22:52:51

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

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

Babusha пишет:

Блин, похоже ассемблер не упрощает задачу, а только усложняет, вот к примеру, есть код на бреинфаке, который методом сложения умножает 10*10

+ + + + + + + + + + { 10+ }
^ - [  > v < - ] 

В ассемблере должен выглядить как-то так:

mov cell 10 ; В ячейку 10
push bf cell ; C стек bf 10
inc
push vm 10 ; В стек vm адрес перехода
next ; Переход к следующей ячейке
cop bf ; Копирует из стека bf и складывает с текущей ячейком
prev ; Переход к предыдущей ячейке
inc 
cmp cell 1 ; Сравнивает с 0
j!= ; Если не равно, переходит по адресу в стеке vm

Слижком сложно, имхо, а я наоборот хотел простоты, наверно от ассемблера откажусь, как считаете?

Я считаю - интерпретируй брэйнфак напрямую, без трансляции в асм. Брэйнфак уже сам себе ассемблер, тут смысла нет толочь ступу.

P.$.
Ну, разве что, если ты сделаешь JIT для брэйнфака через libjit или LLVM, но если ты это сделаешь самостоятельно в ближайший год - я съем собственные носки!  smile


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

Неактивен

#11 03-10-11 22:57:04

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

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

testicula пишет:

Я считаю - интерпретируй брэйнфак напрямую, без трансляции в асм. Брэйнфак уже сам себе ассемблер, тут смысла нет толочь ступу.

Да, так и поступлю.

testicula пишет:

P.$.
Ну, разве что, если ты сделаешь JIT для брэйнфака через libjit или LLVM, но если ты это сделаешь самостоятельно в ближайший год - я съем собственные носки!

Ну я бы на твоем месте не зарекался бы smile.

MOP3E пишет:

Ассемблер - это не настолько сложно, насколько много и муторно. Короче, дохрена кода чтобы получить минимум результата. Да и сложный он тоже во многих местах.

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

Неактивен

#12 03-10-11 22:57:06

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

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

MOP3E пишет:

Ассемблер - это не настолько сложно, насколько много и муторно. Короче, дохрена кода чтобы получить минимум результата. Да и сложный он тоже во многих местах.

... Да и сложный он тоже во многих местах.

А можно поинтересоваться: в каких?


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

Неактивен

#13 03-10-11 22:58:08

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

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

testicula пишет:

А можно поинтересоваться: в каких?

В алгоритмических, приходится задумывать над такими вещами, над которыми ты не задумывался, это было мое самое первое впечатление, когда открыл книгу по асму для доса.

Неактивен

#14 03-10-11 23:03:42

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

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

Babusha пишет:
testicula пишет:

А можно поинтересоваться: в каких?

В алгоритмических, приходится задумывать над такими вещами, над которыми ты не задумывался, это было мое самое первое впечатление, когда открыл книгу по асму для доса.

Ну, задумываться о вещах над которыми ранее не задумывался - естественная функция здорового мозга.

Если в "книжке по ассемблеру для ДОС" тебя смутила сегментная модель х86, то спешу тебя обрадовать - 16-битный Real Mode режим уже практически сдох и не используется. Ассемблерный код для Win32 или Linux давным давно (ещё с Win95 wink - использует Flat-модель памяти где понятие "сегмент" для программиста практически прозрачно.

Попробуй получи второе впечатление об ассемблере на, скажем, http://wasm.ru?

Так а всё таки, в чём сложность ассемблера? В количестве команд которые нужно изучить? А может в архитектуре?


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

Неактивен

#15 03-10-11 23:28:07

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

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

MOP3E пишет:

STL (извини, ассемблер уже подзабыл, но тут практически идентичная картинка):

Не очень помню, но как-то так

mov ax,10
mov cx,10
Start:
add ax,10
inc cx
cmp cx,10
je Start
jne End
End:
int 20h

Хотя, помню есть еще команда loop, но она типа очень медленная

mov ax,10
mov cx,10
Begin:
add cx,10
loop Begin
int 20h

Редактировался Babusha (03-10-11 23:30:20)

Неактивен

#16 03-10-11 23:46:34

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

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

Майор Очевидность пишет:

на какое действие такого кода Вы рассчитываете?

Ограбить караван?

Ай, черт, inc перепутал с dec smile

Редактировался Babusha (03-10-11 23:46:58)

Неактивен

#17 03-10-11 23:51:22

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

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

Майор Очевидность пишет:
testicula пишет:

1. Пардон, низкий уровень != асм х86 это раз.

пардон в ответ, но тогда во что ещё транслировать (при условии что используется обыкновенный домашний ПК)?

Ни во что не транслировать. Брэйнфак сам по себе является достаточно простым языком для интерпретации. Асм более сложный (в нём больше разнообразных команд и сложнее архитектура).

Это я собственно Babusha и предложил.


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

Неактивен

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

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