Ещё один московский Форт с плавучкой в стеке

IU9ForthDebugger
https://github.com/bmstu-iu9/utp2017-3-forth

Семь студентов Бауманки кафедры ИУ-9 «Теоретическая информатика и компьютерные технологии» разработали «видоизменённое ограниченное подмножество языка Forth». Их язык был опубликован, когда Каллисто уже больше года существовала в виде «кандидата в релиз», но до выпуска Каллисто 1.0

Интереснее всего, что разработка московского технического университета также использует основной стек данных с «плавучкой», а не целочисленный, как это принято в Форте.

На этом, правда, всё сходство с Каллисто и заканчивается. Язык предназначен для зарубежных компьютеров (всего, что может отображать веб-страничку) и написан на ДжаваСкрипте — а внутренняя архитектура сильно отличается от Форта. Задача по созданию компактного языка перед студентами не стояла, да и проблемы совместимости их не волновали. Немного покопавшись в исходниках ничего не нашёл, что могло бы обогатить Каллисто. Но их работа — тоже стековый калькулятор, с возможностью программирования. При желании туда и тригонометрию, и логарифмы относительно просто встроить.

P.S. Также на JavaScript есть куда более серьёзный Форт spfjs 1.0.0, написанный более традиционно и совместимый с ANS/СПФ. Но стек данных там, насколько я понял из исходников, целочисленный. Ссылки на оба проекта взяты с русского форума по Форту fforum.winglion.ru

Comments

На том же форуме нашёл ссылку на интересную статью про электронные игры, написанные на Форте:
https://www.old-games.ru/forum/xfa-blog-entry/starye-igry-na-jazyke-fort...

Английские игры на Форте для Jupiter ACE:
http://www.jupiter-ace.co.uk/software_index.html

Интересно, есть ли что-нибудь маленькое, что запустится на Каллисто? Редактор экранов я перенёс на МК-161 успешно и довольно быстро, ужав совсем немного. Его код занял 48 строк на Каллисто. Например, disys.txt (исходник крупной и увлекательной игры Starflight) содержит 4695 строк, включая транслятор Форта. Для сравнения, исходный код Каллисто 1.0 занимает 4173 строки, правда на языке МК.

Когда транслятор разместим на камне, главными ограничениями станут размер экрана и клавиатура.

https://github.com/gwario/gotchitama не потребует цветной экран

P.S. Или какая нибудь вариация Форт-Лого https://github.com/assad-ebrahim/Turtle-Logo-Forth
Здесь есть разноцветные Форт игры :) http://jpb.forth.free.fr/anglais/coeur_forth/logiciels.html

В «Юном Технике» и, кажется, «Химия и жизнь» были простейшие графические «исполнители» по принципу черепашки. Эти журналы 1980/90’х годов можно нагуглить. Перевести языки на Каллисто достаточно просто, русские имена на МК-161 поддерживаются.

Была ещё книжечка в библиотечке Квант с исполнителем «Муравей». На основе всей этой литературы и опыта можно сделать русскую Черепашку, не хуже Лого.

Когда созреет Каллисто-2, уже готовый язык «для самых маленьких» будет просто перевести на него. Быстродействие возрастёт существенно. Недавно ещё раз просматривал исходники Каллисто Классик. Там резервов много по быстродействию:

  1. Двухбайтовые переменные заменить на однорегистровые: BASE H ДH и т.п. (можно прямо в 1.0 поправить)
  2. Поиск имён слов по хэшу (в процессе реализации)
  3. Переход в шитом коде с 256ричных двухбайтовых указателей на 100ричные (реализовано в черновике, можно вставить в 1.0)
  4. Уход от интерпретации шитого кода в памяти программ (реализовано в черновике)
  5. Уход от единой адресации к раздельным адресным пространствам «Электроники МК» (реализовано в черновике)
  6. Вставка адресного интерпретатора в официальную прошивку (техническая возможность лишь у Новосибирска)
  7. Перенос Каллисто в любительскую прошивку (дальняя перспектива)

Ещё один вариант — врезать Черепашку в исходники Каллисто, забрав лучшее из черновиков Каллисто-2. Взять новую клавиатуру с автоповтором, улучшенный редактор строки, быстродействующий адресный интерпретатор. Оставив остальную (только необходимую для Черепашки) часть языка из Классик или реализовав самостоятельно.

Рассматривая результат выдачи поискового запроса на Github по слову Forth
можно заметить некоторое возрождение интереса к "проблематике" Форт
в разной направленности применения :)

P.S. У меня есть мнение, что востребованность той или иной языковой парадигмы в рамках того или иного времени
происходит при потребности в решении задач "времени" - типа на подходе ИИ (http://mind.sourceforge.net/forth.html), массовое внедрение робототехники и.др.
и Форт вполне может быть интересен в исследовании этих направлений и доступен для понимания "массами"

P.S. Какая нибудь "программисткая" игра с Форт, могла бы способствовать его большей популяризации.
Типа - бегает какой то Пакман по лабиринту со своим "набором данных" (координаты, "состоянием" ...)
Подбегает к "Форт-кубику" (с запрограммированной какой то логикой) и предоставив данные на вход кубика (сцепив со словами кубика
IF, DO, ...) получает набор данных (маршрут) для своего дальнейшего перемещения и получив данные об "оперативной" игровой обстановке. У Пакмана тоже может быть свой алгоритм.

Например в SPF 3.75 была игра Реверси где игровой интелект можно запрограммирровать на Форт и подключить данный текстовый файл плагином как ещё одного игрока. Т.е. вначале какую то часть Форт-кода можно выносить вне ядра игры как пример.
Один из подобных движков Zillions http://www.zillions-of-games.com/ в этом же проекте добавлен Форт-слой Axiom Development kit
(поверх АПИ Лисп реализации)
Можно присмотрется к Форт в игре Grobots http://grobots.sourceforge.net/

Возрождение интереса закономерно. Тут два фактора, объективный и, кхм, мистический. Объективно Форт удобней всего для карманных систем вроде ПМК и айфона, которые стали доминировать. Ты сам даёшь команду личному устройству, называя заранее разработанное решение. Что может быть проще и удобней? Только Форт с голосовым распознаваниям имён слов.

Мистический это «право первого». Форту крупный капитал де факто не позволил захватить рынок, как «мобильному ассемблеру», агрессивно навязав рынку своё решение — язык Си. Сейчас Си собрал всё, что мог. Рынок насытился и Форт восстанавливает свои права. Опять же, корпорации разработали под себя внутренние языки (Джава, Плюсы, Свифт…) и финансовая поддержка доминирования Си перестала приносить такую выгоду, как раньше. Форт же развивается сам, на энтузиазме и своей эффективности, не требуя ни от кого вложений.

Ваш третий фактор — востребованность со стороны крупного капитала — тоже интересен. Робототехника идёт вполне в русле подключения внешних устройств к «Электронике МК». Если использовать решения на Форте, бытовые задачи автоматизации станут доступнее для «масс».

Риверси очень интересен. Тем более, что Каллисто позволяет компилировать и подключать плагины с помощью LOAD и APP

Только что понял, что есть перспективный 8 пункт для эволюции Каллисто на «Электронике».

Это разработка оптимизирующего компилятора на десктопе. Сейчас известны мощные технологии оптимизации по размеру кода, но их ещё больше по быстродействию.

Если исходник Каллисто перевести на входной язык специализированного оптимизирующего компилятора, тот сможет разработать для 10000 ячеек МК-161 программу на языке МК, чьё быстродействие превосходит скорость работы кода, написанного вручную. Например, при условии менее 64 вложений внутри памяти программ вместо косвенного шитого можно использовать подпрограммный код на основе ПП…В/О. Проводя оптимизацию стековых вычислений с помощью inline-включений, 15 «советских» регистров и аппаратного 4-уровневого стека МК-161.

Кстати, такое можно сделать даже для Каллисто Классик, т.к. там NEXT векторизирован через R9, а в EXECUTE уже есть ветвление на исполнение шитого кода из памяти программ или данных. Слова высокого уровня, откомпилированные в подпрограммный код, будут выглядеть для исполнения и вызываться из шитого кода, как примитивы. Надо будет лишь продумать EXIT в условиях двойного (тройного?) кода или вообще сделать подпрограммным весь код внутри памяти программ.

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

В данном случае речь про ускорение работы транслятора «на борту» МК-161. Хотя и сам оптимизирующий кросс-компилятор может оказаться полезным. Такой подход пригодится и на средней дистанции, когда код Каллисто-2 потребуется запихнуть в 64Кб восьмибитного камня, вместе с изобретённой заново десятичной плавучкой и файловой системой.