Перейти к содержимому
Doob

Forth в OpenComputers

Нужен ли Forth опенкомпам?  

13 пользователей проголосовало

У вас нет разрешения голосовать в этом опросе или просматривать его результаты. Пожалуйста, войдите или зарегистрируйтесь для голосования в опросе.

Рекомендуемые сообщения

Многие, кто играл в майн с древних времен, помнят, что был такой замечательный мод RedPower2.

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

th?id=OIP.xecuMIN5y089wRRAfU2RpgHaEK%26p

Мод развития не получил, автор пропал.

Потом был мод NedoComputers, но он тоже не долго прожил и особого распространения не получил.

 

Есть идея, написать виртуальную машину для OpenComputers. Язык Forth невероятно примитивен, синтаксис простой и лаконичный, базовая система легко уместится на EEPROM.

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

Язык плотно работает со стеком. Есть стек данных и стек возвратов (второй пока не трогаем). Адресация 16 бит, следовательно, диапазон памяти = 64КБ. Отсюда имеем первую проблему, придется дробить float64 и имитировать 16 битные числа.

Можно не дробить, памяти у нас более чем достаточно. Хотя, в более новых стандартах, реализована работа с 32 и 64 битными числами, написанная на самом Форте. Можно это обыграть, используя стандартный функционал Lua. Еще из-за особенностей выравнивания памяти, у чисел с плавающей точкой отдельный стек и отдельная адресация. Это можно тоже игнорировать и запихнуть float'ы в стек данных (а может и нельзя, тут пока не понятно).

Вообще, все это описывается самим Фортом, но имея уже готовый интерфейс к математическому сопроцессору, было бы глупо писать всякие sqrt/sin/tanh жонглированием на стеке.

Еще стандарт ANS94 требует много лишнего, вроде доступа к ассемблеру, своеобразной работы с железом и мусорных функций. Поэтому, лучше видится стандарт FORTH-83, он описывает язык очень обобщенно. Только немного расширить его до реалий опенкомпов.

 

Ссылки:

    стандарт 83 года FORTH-83, слова

    стандарт 94 года ANS94, слова

    краткое введение в синтаксис

    

  • Нравится 3
  • Спасибо 1
  • В шоке 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Forth хорош своей нетребовательностью к ресурсам. И если бы благодаря ему можно было бы создавать более эффективные программы для OpenComputers, то его стоило бы реализовать.

 

Делать это на Lua, наверное, можно, но лишь как упражнение в программировании. При большом желании на Lua можно написать и ассемблер, и JVM. Но вряд ли кто-то будет этим пользоваться. Мы в OpenComputers не особо используем даже MoonScript, облегчающий кодинг. А реализованный на Lua Forth и кодинг не облегчит и нагрузку на сервер не снизит.

 

Пожалуй, можно будет поностальгировать пару дней. Наверное, у многих из нас первым компьютером в Майнкрафте был комп из RedPower2. Шикарный был мод.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
7 минут назад, eu_tomat сказал:

При большом желании на Lua можно написать и ассемблер

А вот тут самое интересное, компы в RedPower это виртуальный процессор 6502, а уже на ассемблере к этому процессору был реализован Forth. Так что не нам говорить о нагрузке. Там еще кто-то писал ось на этом ассемблере, чтобы тики редстоуна не пропускались.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Doob сказал:

Функционал, правда не богатый, можно было только мигать цветными кабелями.

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

Но переписывать не вижу особого смысла, ибо зачем ограничивать луа фортом... Разве что по фану кабелями помигать.

Изменено пользователем Xytabich

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, eu_tomat сказал:

При большом желании на Lua можно написать и ассемблер, и JVM.

https://oc.cil.li/topic/2310-lukyt-java-on-opencomputers-without-mod/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, Doob сказал:

Потом был мод NedoComputers

Есть ещё на 1.12 RetroComputers, который скопировал архитектуру 65el02. https://www.curseforge.com/minecraft/mc-mods/retrocomputers
Правда на серверах я его особо не видел, разве что в сборках каких-то.

Изменено пользователем Xytabich

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, RetroComputers довольно точно перенес компьютерный функционал из RP2. И Forth там больше на себя похож.

Еще есть мод MagnetiCraft, и там тоже есть компы, и роботы есть. Компьютер работает на виртуальном MIPS процессоре, для этих компов уже есть системы на ассемблере, BASIC, Lisp и Forth.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Doob о, магнетикрафт уже допилил компы свои? Это интересно, да ещё и на ассемблере, пойду гляну чего там есть.

Ха-ха:

  • Что я могу сделать с компьютером сейчас?
  • Ничего.

 

Пока ничего особо интересного из периферии там нет. Есть флоппик, сетевая карта, терминал (монитором язык не поворачивается называть), и робот. Всё ещё ожидание.

Изменено пользователем Xytabich

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
50 минут назад, Xytabich сказал:

Всё ещё ожидание

Ну дык. Помочь надо, чувак в одиночку мод делает. Процессор есть, если набор команд обычный, то можно С компилятор собрать, а там уже и на Луну можно собираться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Doob да уже есть вроде компилятор, судя по тому что драйвера и программы на си написаны: https://github.com/Magneticraft-Team/Computer
Там где-то в доках было написано что используют gcc mips, процессор R3000.

Изменено пользователем Xytabich

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

в OC вроде бы реализовывали архитектуру процессора с машинными командами, только смысл с этого? Луа такой же тьюринг полный, как и "ассемблер", но на нёй легче писать и многие примитивные вещи реализованы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
58 минут назад, NEO сказал:

только смысл с этого?

Эм. Сам предлагал, а теперь смысл ищешь.

 

 

Вот у нас есть CHIP-8, можно много готовых игр на него добыть. Хотя, это такой себе процессор и игры там соответствующие.

Вроде-бы был Z80, (не, это в ComputerCraft было и вроде не работает) там игр и программ уже готовых просто бездна. Хотя, в основном все на васике, поэтому тормозить будет жутко.

 

А Forth я предложил из-за его простоты во всем. Например, надо написать какую-нибудь копалку/сортировку, чтобы она влезла на EEPROM. Lua код вкорячить туда очень больно, хвосты из "end end end end ...." дают ощущение, что это Lisp переросток.

Хотя, я подозреваю, что интерпретатор форта тоже не годится, надо его запихивать в процессор или делать движок луа-макросов в целях сокращения пространства.

Но просто ради фана интересно сделать в опенкомпах экосистему на другом языке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
12 минуты назад, Doob сказал:

Эм. Сам предлагал, а теперь смысл ищешь.

Я под другую платформу интересовался, про портирование на луа не было предложений.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
5 часов назад, eu_tomat сказал:

Мы в OpenComputers не особо используем даже MoonScript, облегчающий кодинг.

MoonScript ужасно не удобный в отладке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, NEO сказал:

только смысл с этого?

Ну смотри, у тебя есть 2 машины с одинаковыми характеристиками: 1мгц проц, 64кб оперативки, 128кб хранилище. На одной машине крутятся машинные команды, а на другой - луавм. Какую из машин лучше выбрать в плане производительности и затрат ресурсов? Если хочется удобный код, например луа - ничего не мешает закинуть на первую машину луавм, но наоборот сделать нельзя. Это порой выводит из колеи - когда вроде есть возможность сделать лучше и быстрее, но архитектура не позволяет.

Изменено пользователем Xytabich

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, Xytabich сказал:

Какую из машин лучше выбрать в плане производительности и затрат ресурсов?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

5 минут назад, NEO сказал:

луавм - это динамически линкуемая бибиотека из нативного машинного кода.

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

Изменено пользователем Xytabich

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, Xytabich сказал:

 

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

Да, но кто будет такое разрабатывать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@NEO кто-то ведь разработал tic, 65el02, опенкомпы, компкрафт и т.п. Если человеку интересно - сделает любое извращение)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...