colorForth: радикальный минимализм Чака Мура

Продолжая разбираться в диалектах Forth я решил подробнее изучить colorForth. Это Forth-система, написанная Чаком Муром (автором оригинального Forth). Но погрузился я не в версию colorForth 2001/2002 года (которую писал непосредственно Чак Мур), а в её современное продолжение cf2023, написанное уже Howerd Oakford.

Архив оригинальной colorForth, сохраненный на github pages

Архив оригинальной colorForth, сохраненный Howerd Oakford

colorForth cf2023

Материалы по Forth в наше время найти довольно непросто, постоянно натыкаешься на умершие ссылки. Поэтому в своей капсуле я сохранил ключевую документацию по colorForth cf2023:

http://www.inventio.co.uk/cf2023/cf2023_colorForth.pdf

Копия документа, сохранённая в моей капсуле

Репозиторий cf2023.tg

К сожалению, Howerd Oakford (автор оригинального) cf2023 подразумевает, что сборка и запуск кода будет происходить на Windows машине. Плюс в оригинальном репозитории много файлов, которые не нужны для первого знакомства с colorForth. Поэтому я собрал свой репозиторий:

cf2023.tgz

Внутри архива я разметил файлы cf2023.nasm и cf2023Ref.img из оригинального репозитория. И добавил простые инструкции для сборки и запуска - Makefile.

Что бы собрать cf2023.img необходим исходный код (файл cf2023.nasm) и файл cf2023Ref.img, из которого будут взяты бинарные данные (например: шрифты). Фактически cf2023Ref.img это эталонная сборка cf2023 (да, для сборки cf2023 нужен успешно собранный cf2023).

Собирается cf2023 ассемблером NASM (Netwide Assembler):

Netwide Assembler (NASM)

This is the project webpage for the Netwide Assembler (NASM), an asssembler for the x86 CPU architecture portable to nearly every modern platform, and with code generation for many platforms old and new.

Например на OpenBSD nasm можно поставить из пакетов (`pkg_add nasm`).

Для запуска cf2023 предлагается использовать Bochs или QEMU. При упоминании Bochs у меня всплывают в памяти очень тяжёлые воспоминания, поэтому его я даже не пробовал. В Makefile я добавил запуск qemu, (вроде бы аккуратно) сконвертировав аргументы запуска с Windows.

На OpenBSD qemu так же можно поставить из пакетов (`pkg_add qemu`).

При запуске `make` в директории cf2023 (при условии наличия в вашей системе nasm и qemu) сначала будет сформирован файл cf2023.img, который будет запущен на исполнение QEMU.

Что перед нами

Перед нами радикально минималистичная "операционная система" (хотя многие, уверен, не стали бы называть ее ОС, тут зависит от ваших взглядов на этот термин).

Вся система содержится в собранном nasm'ом img-файле (cf2023.img). Все последующие изменения, вносимые пользователем, так же будут записаны в cf2023.img (или на диск, куда был записан cf2023.img для запуска на реальной машине).

Клавиатура

Клавиатура в colorForth для меня это самая большая "головная боль". В системе используется 27-клавишная раскладка клавиатуры Dvorak. Это значит, что нанесённые на вашу физическую клавиатуру символы не значат ничего :) Используется три группы клавиш:

colorForth_keyboard.jpg

И существует около пяти вариантов того, на какие символы проецируются клавиши в настоящий момент. На экране (в правом нижнем углу) всегда есть подсказка какой режим маппинга сейчас активен.

Я крайне рекомендую пройти шаги, описанные в документе "How to program in colorForth cf2023". После того, как этот документ провёл меня "за руку" по простейшим операциям, в моей голове сложилась система применения и переключения раскладки клавиатуры в colorForth.

How to program in colorForth cf2023

Копия документа, сохранённая в моей капсуле

Исходный код

Когда я назвал colorForth радикально минималистичной ОС я имел ввиду, например, то, что в ней нет файловой системы. Вместо этого только набор из парных блоков кода, у которых вместо имени есть только свой порядковый номер. Это чем-то похоже на сектора диска, но каждый блок занимает 1024 байта и блоки организованы парами. Принято, что чётные блоки содержат код, а парные им нечётные блоки содержат текстовые комментарии. Блок с комментариями так же называют "теневым" ("shadow block"). Кроме того, если блок кода начинается с комментария "App: " (без кавычек), то считается, что такой блок содержит приложение (приложения перечислены в утилите colorForth explorer, запускаемой словом xx).

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

Каждый 1024-байтный блок разделён на 256 32-битных значений. Как и в любом Forth, в colorForth единицей выполнения является скомпилированное слово ("word"). В 32-битных значении блока, с которого начинается слово, первые 4 бита определены под цвет (тот самый "color"). Например:

Затем, после 4 бит цвета, расположены непосредственны символы этого слова. Но символы упакованы кодом Хаффмана.

Подробности о кодировании символов в colorForth

Хотя, если быть более точным, то cf2023, использует алгоритм Шеннона - Фано для упаковки utf8. Но принцип сохраняется.

Соответственно, каждое слово в colorForth занимает одно или более 32-битных значений, идущих подряд в блоке.

Подробности о структурировании слов

И этот формат с одной стороны напрямую отображается и модифицируется редактором. А с другой стороны напрямую исполняется ядром colorForth. То есть такая организация отменяет разделение на исходный и скомпилилированный код. Радикальный минимализм.

P.S. Что c colorForth сегодня

Чак Мур, судя по данным на сайте основанной им компании GreenArrays, уже лет десять живёт в дали от "цивилизации" в пустыне Невада:

https://www.greenarraychips.com/home/news/index.php

New GreenArrays Headquarters 1 May 2024:
We have finished moving our offices and lab onto a very small farm in Northern Missouri. Thanks to the continuing audacious and life-enhancing achievements of men like Elon Musk and Jeff Bezos, we've concluded it is now practical to operate a high tech business in a beautiful, healthy rural area that is remote from the risks, costs, liabilities and often squalor found in many US cities. Chuck Moore, living in the Nevada desert, has been enjoying another version of such a working area for a decade.

Оригинальная версия colorForth не менялась с начала 2000-х (то ли с 2001-го, то ли с 2002-го).

Последний релиз наследника colorForth cf2023 (roomed zebra) состоялся, как нетрудно догадаться, в 2023 году. Но проект не выглядит заброшенным навсегда. Надеюсь, что Howerd Oakford ещё удивит нас новыми концепциями.

Комментарии через ActivityPub (Fediverse) можно оставить здесь:

https://honk.any-key.press/u/continue/h/y23nS711xlTq4q792x