Каллисто

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Каллисто, запущенная на «Электронике МК-161» с накладной клавиатурой.

Каллисто — хэкерское[1] расширение входного языка «Электроники МК-161», предназначенное для разработки приложений «на борту» (без использования компьютера). Простые вычисления для «Электроники МК-61» и «Электроники МК-161» можно набивать и выполнять в строке Каллисто без изменений, только добавьте пробел и точку в конце для вывода результата.

Среда Каллисто написана для «Электроники МК-161» на расширенном языке МК и является компактным диалектом Форта с элементами colorForth. Распространяется под свободной лицензией с авторским левом (copyleft), за другой формой лицензирования обращайтесь к правообладателю.

Транслятор Каллисто Классик (версия 1.0) выпущен 7 ноября 2017 года.

Подробное описание слов Каллисто с использованием стековой нотации см. в статье Слова Каллисто по категориям. Также см. статью Архитектура Каллисто и официальное Руководство по эксплуатации (pdf, 40 стр.).

Краткая история Форта (1958-2016)[править]

Интересно, что разработка Форта началась в 1958 году, когда Смитсоновская астрофизическая обсерватория наняла Чака Мура, студента МТИ, для расчёта на IBM EDPM 704 орбиты и оптического отслеживания советского Спутника, запущенного 4 октября 1957 года абсолютно неожиданно для США.[2]

Имя FORTH язык обрёл в 1968 году, когда интерпретатор заработал на миникомпьютере IBM 1130 с графическим дисплеем IBM 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Говорят, что язык должен был называться FOURTH («четвёртое» поколение языков программирования), но ограничения операционной системы позволили дать файлу только пятибуквенное имя. Тогда Чак Мур работал в Mohasco Industries, Inc (Amsterdam NY, англ.).

Уже в 1976 году Форт был принят Международным Астрономическим Союзом, как стандартный язык. Первые влиятельные стандарты Форта появились в 1979 и 1983 годах. В 1980-90'ых годах Форт начал широко распространяться в СССР — чуть позже ПМК и независимо от них.

Тогда же появились первые советские реализации Форта, из которых на Каллисто сильнее всего повлияли ФОРТ-ЕС (Ленинград, 1986) и FORTH ИТЭФ (Москва, 1988), чьи исходные тексты были опубликованы в СССР их авторами. Эти «исходники» выложены на вики в качестве исторических примеров отечественной реализации слов Каллисто.

Последние 20 лет общепризнанным в России и зарубежом является международный стандарт Форта (ISO/IEC 15145:1997), созданный на основе американского стандарта ANS Forth 1994 года. Ему на смену неторопливо готовится новый стандарт Форта (условно называемый Форт-2012), черновики которого были учтены при разработке Каллисто наряду с критикой стандарта ANS. Например, с помощью стандартных префиксов Форта для каждого числа можно индивидуально задавать систему счисления.

Продолжателем Форта, повлиявшим на Каллисто, является и язык colorForth, развиваемый Чаком Муром в одиночку. Несмотря на явное влияние зарубежных стандартов языка Форт, при разработке Каллисто приоритет отдавался совместимости с отечественными ПМК, а также удобству и скорости работы на «Электронике МК-161» — вообще говоря, не предназначенной разработчиками из Новосибирска для алгоритмических языков высокого уровня.

Основные отличия Каллисто от Форта[править]

Вместо фортовского цикла DO…LOOP Каллисто использует более простой и быстрый цикл FORNEXT из colorForth, а стек данных содержит привычные 12-разрядные десятичные числа ЭКВМ. Для отделения дробной части числа от целой служит десятичная запятая, как в ПМК и ЭКВМ.

Помимо стандартных для Форта операций деления с остатком, Каллисто использует традиционное для ПМК деление с десятичной плавающей запятой. Сохранены традиционные для ПМК обозначения операций умножения, подъёма стека, обмена двух чисел на вершине стека, математических функций, а также русскоязычные операции ПМК — ЗН , СЧ и т.д.

Предусмотрены слова ИП и П для обращения к функциональным и другим регистрам ЭКВМ по их привычным номерам. В названиях слов Каллисто русские буквы можно использовать наряду с английскими, причём заглавные и строчные буквы считаются одинаковыми.

В Каллисто 1.0 используется единая адресация, объединяющая разрозненные адресные пространства ЭКВМ. При этом размер адресуемой единицы памяти зависит от адреса и может колебаться от 1 байта до восьми (12-разрядные десятичные числа). Беззнаковые 16-битные целые считываются в стек из двух последовательных регистров памяти с помощью слова U@. Как принято в ЭКВМ, старший байт идёт по младшему адресу. Первые 10000 адресов памяти представляют из себя память программ, в которой находится исполняемый код Каллисто на входном языке МК-161. По каждому из этих 10 тысячи адресов содержится 1 байт, доступный только для чтения.

Из-за невозможности исполнять код МК-161 из области данных при написании порождающих слов вместо современной конструкции CREATE…DOES> используется устаревший, но не менее мощный механизм <BUILDSDOES>

После нажатия клавиши  Ввод  введённые слова либо исполняются сразу, либо компилируются в словарь, находящийся в области двоичных данных (адреса 11000…15095). В этой же области располагается стек возвратов — растущий «вниз», навстречу словарю. «Бесконечный» стек данных располагается в области десятичных регистров (адреса 10000…10999). Навстречу десятичному стеку растёт десятичный словарь, где хранятся значения десятичных литералов и удобных переменных типа VALUE.

Из-за ограничений платформы буфер в Каллисто только один (адреса 15096…18167), а размер загружаемого в него блока составляет 3 Кбайта.

Приложения и их распространение[править]

Разработанные пользователем программы на Каллисто называются приложениями и могут распространяться со средой Каллисто в форме пакета — набора файлов для «Электроники МК-161», объединённых общим именем. Приложения могут запускаться сразу же после запуска Каллисто (см. слово APP) и возвращаться в автоматический режим после своего выполнения (см. слово BYE).

Продвинутые разработчики могут использовать в своих приложениях программы для «Электроники МК-161» (расположенные в памяти программ), изменяя исходный текст среды Каллисто.

Исходный текст[править]

Помимо ввода с клавиатуры, исходный текст приложений может располагаться на внутреннем диске МК-161 в виде экрана — в пронумерованном блоке (файле текста), откуда этот исходный текст загружается командой LOAD

В отличии от ранних диалектов Форта экран Каллисто содержит 48 строк, занимает 3 Кб и при интерпретации считывается из буфера, расположенного в области текста. Из-за того, что строка экрана занимает традиционные 64 символа, использование встроенного в ЭКВМ редактора является затруднительным. Разработчикам Каллисто предлагает перенесённый с Форта строковый редактор EDIT, а также возможность написать собственный редактор экранов. Удобней всего использовать Каллисто с алфавитно-цифровой накладкой на клавиатуру («оверлеем») для быстрого посимвольного ввода команд и данных.

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

Несмотря на техническую возможность передавать экраны с исходным текстом на компьютер и обратно, Каллисто рассчитана на то, чтобы вести разработку прямо на борту «Электроники МК-161», без использования иностранных программ и зарубежного оборудования.

Исполняемый код[править]

Откомпилированные приложения хранятся в памяти «Электроники МК-161», откуда слово SAVE" сохраняет их на внутренний диск. Слово LOAD" позволяет быстро (за несколько секунд) загрузить и выполнить приложение.

Исполняемый код представляет собой два файла, содержащих образы двоичных (mkb) и десятичных (mkd) регистров сразу после компиляции вашего приложения. Для запуска такого приложения потребуется в точности та исполняемая версия Каллисто, которой приложение было откомпилировано. Поэтому удобней всего хранить исполняемый код в виде пакета из трёх файлов под одним именем, среди которых есть переименованный исполняемый файл Каллисто (Callisto.mkp). Переменная APP обеспечит, при необходимости, автозапуск вашего приложения.

Свободная лицензия Каллисто запрещает закрытие исходного текста транслятора. Для соблюдения этой лицензии при распространении вашего исполняемого кода предлагается включить в дистрибутив (их можно вынести в отдельный подкаталог) два дополнительных файла, технически не требующихся для запуска вашей программы на «Электронике»:

  • исходный текст использованной версии Каллисто, содержащий все внесённые в него изменения (Callisto.mkl)
  • текст свободной лицензии, по которой распространяется эта (стандартная или изменённая вами) версия Каллисто, например PRAVO.TXT

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

Включать в дистрибутив исходный текст ваших программ не обязательно — вы сами свободно выбираете лицензию для распространения своих авторских материалов. Защита от закрытия исходного кода («авторское лево», англ. copyleft) распространяется только на сам транслятор Каллисто, защищённый законами об авторском праве (и на любые программы, использующие его код).

Приложения, написанные вами на Каллисто, вы вправе распространять под любой лицензией.

Примечания[править]

  1. Не имеющее отношение к производителю «Электроники МК-161». Русское слово хэкер происходит от английского слова hacker, но исключает паразитное значение «компьютерный преступник».
  2. «Forth - The Early Years» Chuck Moore, 1991 (англ.)

Ссылки[править]

Литература[править]