Каллисто: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
м (Откат правок Арви Хэкер (обсуждение) к версии 95.32.212.151)
(Отмена правки 37155, сделанной Арви Хэкер (обсуждение))
Строка 1: Строка 1:
[[Файл:Callisto-161.JPG|thumb|right|360px|Каллисто, запущенная на «Электронике МК-161» с накладной клавиатурой.]]
[[Файл:Callisto-161.JPG|thumb|right|360px|''Каллисто'', запущенная на «Электронике МК-161» с накладной клавиатурой.]]


'''Каллисто''' — компактный диалект языка Форт с элементами colorFORTH, написанный для [[Электроника МК-161|«Электроники МК-161»]] на [[РЯМК]] и предназначенный для программирования «на борту». Пока существует в альфа-версии, но уже позволяет определять новые слова, редактировать и компилировать [[экран]]ы, успешно переносить на [[МК-161]] старые программы, написанные на Форте. Актуальная версия — 0.6a.
'''Каллисто''' — хэкерское<ref>Не имеющее отношение к [[НПП «СЕМИКО»|производителю]] [[Электроника МК-161|«Электроники МК-161»]]. Русское слово хэкер происходит от английского слова [https://en.wikipedia.org/wiki/Hacker_(expert) hacker], но исключает паразитное значение «компьютерный преступник».</ref> расширение входного языка [[Электроника МК-161|«Электроники МК-161»]], предназначенное для разработки приложений «на борту» (без использования компьютера). '''Простые вычисления для [[«Электроники МК-61»]] и [[«Электроники МК-161»]] можно набивать и выполнять в строке ''Каллисто'' без изменений''', только добавьте [[Слово .|точку]] в конце для вывода результата.


Среда ''Каллисто'' написана для [[Электроника МК-161|«Электроники МК-161»]] на [[РЯМК|расширенном языке МК]] и является компактным диалектом Форта с элементами {{colorForth}}. Распространяется под свободной лицензией с авторским левом ([https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BF%D0%B8%D0%BB%D0%B5%D1%84%D1%82 copyleft]), за другой формой лицензирования обращайтесь к правообладателю.


== Основные отличия Каллисто от Форта ==
Транслятор ''Каллисто Классик'' (версия 1.0) выпущен 7 ноября 2017 года.
Вместо фортовского цикла DO…LOOP ''Каллисто'' использует более простой и быстрый цикл [[FOR]]…[[NEXT]] из colorFORTH, а [[стек данных]] содержит привычные 12-разрядные [[десятичные числа]] ЭКВМ. Для представлений значений истины и лжи используются числа -1 и 0 соответственно. Для входных значений любые числа, отличные от нуля, считаются истиной.


Помимо стандартных для Форта операций деления с остатком, ''Каллисто'' использует [[÷|традиционное для ПМК]] [[÷ (Каллисто)|деление с десятичной плавающей запятой]]. Сохранены традиционные для ПМК обозначения операций [[× (Каллисто)|умножения]], [[↑ (Каллисто)|подъёма стека]], а также русскоязычные операции ПМК — [[ЗН]] , [[СЧ]] и т.д. Предусмотрены команды [[РЕГ!]] и [[РЕГ@]] для обращение к функциональным и другим [[Регистр памяти данных|регистрам ЭКВМ]] по их привычным номерам. В названиях слов ''Каллисто'' русские буквы можно использовать наряду с английскими, причём заглавные и строчные буквы считаются одинаковыми.
Подробное описание слов ''Каллисто'' с использованием [[Стековая нотация|стековой нотации]] см. в статье [[Слова Каллисто по категориям]]. Также см. статью [[Архитектура Каллисто]] и официальное [http://the-hacker.ru/2017/Callisto.pdf Руководство по эксплуатации].


В ''Каллисто'' используется [[единое адресное пространство|единая адресация]], объединяющая разрозненные адресные пространства ЭКВМ. При этом размер адресуемой единицы памяти зависит от адреса и может колебаться от 1 байта до восьми (12-разрядные [[десятичные числа]]). Беззнаковые 16-битные целые считываются в [[Стек данных|стек]] из двух последовательных ячеек (байт) памяти с помощью слова [[U@]]. Как принято в ЭКВМ, старший байт идёт по младшему адресу. Первые 10000 ячеек памяти представляют из себя [[память программ]], в которой находится исполняемый код ''Каллисто'' на [[ЯМК]]. Каждая из этих 10 тысячи ячеек содержит 1 байт, доступный только для чтения. Из-за невозможности исполнять [[Система команд ЭКВМ|код МК-161]] из [[Память двоичных данных|области данных]] при написании порождающих слов вместо конструкции CREATE…DOES> используется более древний, но не менее мощный механизм [[〈BUILDS|&lt;BUILDS]] … [[DOES〉|DOES&gt;]]
== Краткая история Форта (1958-2016) ==
Интересно, что разработка Форта началась в 1958 году, когда [https://ru.wikipedia.org/wiki/%D0%A1%D0%BC%D0%B8%D1%82%D1%81%D0%BE%D0%BD%D0%BE%D0%B2%D1%81%D0%BA%D0%B0%D1%8F_%D0%B0%D1%81%D1%82%D1%80%D0%BE%D1%84%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%BE%D0%B1%D1%81%D0%B5%D1%80%D0%B2%D0%B0%D1%82%D0%BE%D1%80%D0%B8%D1%8F Смитсоновская астрофизическая обсерватория] наняла [https://ru.wikipedia.org/wiki/%D0%9C%D1%83%D1%80,_%D0%A7%D0%B0%D1%80%D0%BB%D1%8C%D0%B7_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%29 Чака Мура], студента [https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%81%D1%81%D0%B0%D1%87%D1%83%D1%81%D0%B5%D1%82%D1%81%D0%BA%D0%B8%D0%B9_%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B8%D0%BD%D1%81%D1%82%D0%B8%D1%82%D1%83%D1%82 МТИ], для расчёта на [https://ru.wikipedia.org/wiki/IBM_704 IBM EDPM 704] орбиты и оптического отслеживания советского [https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D1%83%D1%82%D0%BD%D0%B8%D0%BA-1 Спутника], запущенного 4 октября 1957 года абсолютно неожиданно для США.<ref>[http://www.colorforth.com/HOPL.html «Forth - The Early Years» Chuck Moore, 1991] ''(англ.)''</ref>


После нажатия клавиши ВВОД введённые слова либо исполняются сразу, либо компилируются в [[словарь]], находящийся в [[Память двоичных данных|области двоичных данных]]. В этой же области располагается [[Стек возвратов Каллисто|стек возвратов]] — растущий «вниз», навстречу [[Словарь|словарю]]. [[Стек данных|«Бесконечный» стек данных]] располагается в области [[Регистр десятичных данных|десятичных регистров]]. Там же располагается [[десятичный словарь]], где хранятся удобные десятичные переменные типа [[VALUE]].
Имя FORTH язык обрёл в 1968 году, когда интерпретатор заработал на миникомпьютере IBM 1130 с графическим дисплеем IBM 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Говорят, что язык должен был называться FOURTH («четвёртое» поколение языков программирования), но ограничения операционной системы позволили дать файлу только пятибуквенное имя. Тогда Чак Мур работал в Mohasco Industries, Inc ([https://en.wikipedia.org/wiki/Amsterdam_%28city%29,_New_York Amsterdam NY], ''англ.'').  


== Программы на Каллисто (их исходный текст) ==
Уже в 1976 году Форт был принят [https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B6%D0%B4%D1%83%D0%BD%D0%B0%D1%80%D0%BE%D0%B4%D0%BD%D1%8B%D0%B9_%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%BD%D0%BE%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D1%81%D0%BE%D1%8E%D0%B7 Международным Астрономическим Союзом], как стандартный язык. Первые влиятельные стандарты Форта появились в 1979 и 1983 годах. В 1980-90'ых годах Форт начал широко распространяться в СССР — чуть позже [[ПМК]] и независимо от них.
Помимо ввода с клавиатуры, исходный текст на ''языке Каллисто'' может располагаться на электронном диске в виде [[экран]]а, в пронумерованном [[блок]]е (текстовом файле).


В отличии от ранних диалектов Форта [[Экран|экран Каллисто]] содержит 48 строк, занимает 3 Кб и при интерпретации считывается из [[буфер]]а, расположенного в области [[текст]]а. Из-за того, что строка [[экран]]а занимает традиционные 64 символа, использование [[Редактор текста|встроенного в ЭКВМ редактора]] является затруднительным. Программистам ''Каллисто'' предлагает строковый редактор EDIT, а также возможность написать собственный редактор экранов. ''Каллисто'' использует накладную алфавитно-цифровую клавиатуру для быстрого посимвольного ввода команд и данных.
Тогда же появились первые советские реализации Форта, из которых на ''Каллисто'' сильнее всего повлияли ФОРТ-ЕС (Ленинград, 1986) и FORTH ИТЭФ (Москва, 1988), чьи исходные тексты были опубликованы в СССР их авторами. Эти «исходники» выложены на вики в качестве исторических примеров отечественной реализации слов ''Каллисто''.


При разработке ''Каллисто'' учитывались черновики готовящегося стандарта [http://www.forth200x.org/forth200x.html Forth 200x] — например, с помощью стандартных префиксов Форта для каждого числа можно индивидуально задавать систему счисления. Также в ''Каллисто'' можно обнаружить наследие Форта ИТЭФ, от реализации которого отталкивались первые версии ''Каллисто''. Несмотря на явное влияние стандартов языка Форт, при разработке ''Каллисто'' приоритет отдавался удобству и скорости работы на [[ЭКВМ]] — вообще говоря, не предназначенной разработчиками для алгоритмических языков высокого уровня.
Последние 20 лет общепризнанным в России и зарубежом является международный стандарт Форта ([http://www.iso.org/iso/ru/home/store/catalogue_tc/catalogue_detail.htm?csnumber=26479 ISO/IEC 15145:1997]), созданный на основе американского стандарта [http://forth.sourceforge.net/standard/dpans/dpans.htm ANS Forth] 1994 года. Ему на смену неторопливо готовится [http://www.forth200x.org/forth200x.html новый стандарт Форта] (условно называемый Форт-2012), черновики которого были учтены при разработке ''Каллисто'' наряду с критикой стандарта ANS. Например, с помощью [[Префиксы чисел|стандартных префиксов Форта]] для каждого числа можно индивидуально задавать систему счисления.  
 
Продолжателем Форта, повлиявшим на ''Каллисто'', является и язык {{colorForth}}, развиваемый Чаком Муром в одиночку. Несмотря на явное влияние зарубежных стандартов языка Форт, при разработке ''Каллисто'' приоритет отдавался совместимости с отечественными [[ПМК]], а также удобству и скорости работы на [[Электроника МК-161|«Электронике МК-161»]] — вообще говоря, не предназначенной [[НПП «СЕМИКО»|разработчиками из Новосибирска]] для алгоритмических языков высокого уровня.
 
== Основные отличия ''Каллисто'' от Форта ==
Вместо фортовского цикла DO…LOOP ''Каллисто'' использует более простой и быстрый цикл [[FOR]]…[[NEXT]] из {{colorForth}}, а [[стек данных]] содержит привычные 12-разрядные [[десятичные числа]] ЭКВМ. Для отделения дробной части числа от целой служит десятичная запятая, как в ПМК и ЭКВМ.
 
[[Файл:CallistoMag.png|left||264px|]]Помимо стандартных для Форта операций деления с остатком, ''Каллисто'' использует [[÷|традиционное для ПМК]] [[Слово ÷|деление с десятичной плавающей запятой]]. Сохранены традиционные для ПМК обозначения операций [[Слово ×|умножения]], [[Слово ↑|подъёма стека]], [[Слово ↔|обмена двух чисел на вершине стека]], математических функций, а также русскоязычные операции ПМК — [[ЗН]] , [[СЧ]] и т.д.
 
Предусмотрены слова [[Слово ИП|ИП]] и [[Слово П|П]] для обращения к [[Регистры функций МК|функциональным]] и другим [[Регистр памяти данных|регистрам ЭКВМ]] по их привычным номерам. В названиях слов ''Каллисто'' русские буквы можно использовать наряду с английскими, причём заглавные и строчные буквы считаются одинаковыми.
 
В Каллисто 1.0 используется [[единое адресное пространство|единая адресация]], объединяющая разрозненные адресные пространства ЭКВМ. При этом размер ''адресуемой единицы'' памяти зависит от адреса и может колебаться от 1 байта до восьми (12-разрядные [[десятичные числа]]). Беззнаковые 16-битные целые считываются в [[Стек данных|стек]] из двух последовательных регистров памяти с помощью слова [[U@]]. Как принято в ЭКВМ, старший байт идёт по младшему адресу. Первые 10000 адресов памяти представляют из себя [[память программ]], в которой находится исполняемый код ''Каллисто'' на [[ЯМК|входном языке МК-161]]. По каждому из этих 10 тысячи адресов содержится 1 байт, доступный только для чтения.
 
Из-за невозможности исполнять [[Система команд ЭКВМ|код МК-161]] из [[Память двоичных данных|области данных]] при написании порождающих слов вместо современной конструкции CREATE…DOES> используется устаревший, но не менее мощный механизм [[⟨BUILDS|&lt;BUILDS]] … [[DOES⟩|DOES&gt;]]
 
После нажатия [[Клавиша Ввод|клавиши {{Синяя клавиша|Ввод}}]] введённые слова либо исполняются сразу, либо компилируются в [[словарь]], находящийся в [[Память двоичных данных|области двоичных данных]] ([[Единое адресное пространство|адреса]] 11000…15095). В этой же области располагается [[Стек возвратов Каллисто|стек возвратов]] — растущий «вниз», навстречу [[Словарь|словарю]]. [[Стек данных|«Бесконечный» стек данных]] располагается в области [[Регистр десятичных данных|десятичных регистров]] ([[Единое адресное пространство|адреса]] 10000…10999). Навстречу [[Стек данных|десятичному стеку]] растёт [[десятичный словарь]], где хранятся значения десятичных литералов и удобных переменных типа [[VALUE]].
 
Из-за ограничений платформы [[буфер]] в ''Каллисто'' только один ([[Единое адресное пространство|адреса]] 15096…18167), а размер загружаемого в него [[блок]]а составляет 3 Кбайта.
 
== Приложения и их распространение ==
Разработанные пользователем программы на ''Каллисто'' называются ''приложениями'' и могут распространяться со средой ''Каллисто'' в форме ''пакета'' — набора файлов для «Электроники МК-161», объединённых общим именем. Приложения могут запускаться сразу же после запуска ''Каллисто'' (см. слово [[APP]]) и возвращаться в [[Режим автоматической работы|автоматический режим]] после своего выполнения (см. слово [[BYE]]).
 
Продвинутые разработчики могут использовать в своих приложениях программы для «Электроники МК-161» (расположенные в [[Память программ|памяти программ]]), изменяя исходный текст среды ''Каллисто''.
 
=== Исходный текст ===
Помимо ввода с клавиатуры, исходный текст приложений может располагаться на внутреннем диске МК-161 в виде [[экран]]а — в пронумерованном [[блок]]е (файле текста), откуда этот исходный текст загружается командой [[LOAD]]
 
В отличии от ранних диалектов Форта [[Экран|экран Каллисто]] содержит 48 строк, занимает 3 Кб и при интерпретации считывается из [[буфер]]а, расположенного в [[текст|области текста]]. Из-за того, что строка [[экран]]а занимает традиционные 64 символа, использование [[Редактор текста|встроенного в ЭКВМ редактора]] является затруднительным. Разработчикам ''Каллисто'' предлагает перенесённый с Форта строковый редактор EDIT, а также возможность написать собственный редактор [[экран]]ов. Удобней всего использовать ''Каллисто'' с алфавитно-цифровой накладкой на клавиатуру («оверлеем») для быстрого посимвольного ввода команд и данных.
 
[[Экран]]ы ''Каллисто'' можно передавать на компьютер и распространять в файлах с расширением mkt. В дистрибутиве ''Каллисто'' есть исходный текст компьютерной программы listmkt. Эта программа позволяет преобразовывать файлы mkt в текстовые, которые человеку легко читать и редактировать.
 
Несмотря на техническую возможность передавать [[экран]]ы с исходным текстом на компьютер и обратно, ''Каллисто'' рассчитана на то, чтобы вести разработку прямо на борту [[Электроника МК-161|«Электроники МК-161»]], без использования иностранных программ и зарубежного оборудования.
 
=== Исполняемый код ===
Откомпилированные приложения хранятся в памяти «Электроники МК-161», откуда слово [[SAVE"]] сохраняет их на внутренний диск. Слово [[LOAD"]] позволяет быстро (за несколько секунд) загрузить и выполнить приложение.
 
Исполняемый код представляет собой два файла, содержащих образы двоичных (mkb) и десятичных (mkd) регистров сразу после компиляции вашего приложения. Для запуска такого приложения потребуется в точности та исполняемая версия ''Каллисто'', которой приложение было откомпилировано. Поэтому удобней всего хранить исполняемый код в виде ''пакета'' из трёх файлов под одним именем, среди которых есть переименованный исполняемый файл ''Каллисто'' (Callisto.mkp). Переменная [[APP]] обеспечит, при необходимости, автозапуск вашего приложения.
 
Свободная лицензия ''Каллисто'' запрещает закрытие исходного текста транслятора. Для соблюдения этой лицензии при распространении вашего исполняемого кода предлагается включить в дистрибутив (их можно вынести в отдельный подкаталог) два дополнительных файла, технически не требующихся для запуска вашей программы на «Электронике»:
* исходный текст использованной версии ''Каллисто'', содержащий все внесённые в него изменения (Callisto.mkl)
* текст свободной лицензии, по которой распространяется эта (стандартная или изменённая вами) версия ''Каллисто'', например PRAVO.TXT
 
Всего получается пять обязательных файлов, которые для удобства предлагается упаковать в один архив дистрибутива — словно пять пальцев одной ладони складываются в кулак. В этот же архив можно добавить документацию на ваше приложение и остальные файлы, которые вы сочтёте полезными для ваших пользователей.
 
'''Включать в дистрибутив исходный текст ваших программ не обязательно — вы сами свободно выбираете лицензию для распространения своих авторских материалов.''' Защита от закрытия исходного кода ([https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BF%D0%B8%D0%BB%D0%B5%D1%84%D1%82 «авторское лево»], ''англ.'' copyleft) распространяется только на сам транслятор ''Каллисто'', защищённый законами об авторском праве (и на любые программы, использующие его код).
 
Приложения, написанные вами на ''Каллисто'', вы вправе распространять под любой лицензией.
 
== Примечания ==
<references />


== Ссылки ==
== Ссылки ==
* См. [[Список стандартных слов Каллисто]], [[Слова Каллисто по категориям]] и [[Палитра Каллисто]]
* См. [[Список встроенных слов Каллисто]], [[Слова Каллисто по категориям]] и [[Палитра Каллисто]]
* См. также учебные статьи [[Первое знакомство с Каллисто]] и [[Простые программы на Каллисто]]
* [https://vk.com/topic-10838600_30361028 Обсуждение Каллисто в Контакте], [http://mk-152.livejournal.com/53935.html в живом журнале] и [http://arbinada.com/pmk/ru/node/1195 на сайте Арбинады]
* [https://vk.com/topic-10838600_30361028 Обсуждение Каллисто в Контакте], [http://mk-152.livejournal.com/53935.html в живом журнале] и [http://arbinada.com/pmk/ru/node/1195 на сайте Арбинады]
* [http://the-hacker.ru/2015/Callisto-0.6a.zip Каллисто v0.6a], последняя актуальная версия Каллисто
* [http://the-hacker.ru/2017/Callisto-1.zip Каллисто Классик 1.0], последняя актуальная версия ''Каллисто'' и [http://the-hacker.ru/Callisto.html её исходный текст]
* Языки [https://ru.wikipedia.org/wiki/%D0%A4%D0%BE%D1%80%D1%82_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 Форт] и [https://ru.wikipedia.org/wiki/ColorForth colorFORTH] в Википедии
* [https://www.youtube.com/watch?v=YPBFf55AAD4 Видеообзор Каллисто v0.8б] на YouTube
* Языки [https://ru.wikipedia.org/wiki/%D0%A4%D0%BE%D1%80%D1%82_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 Форт] и [https://ru.wikipedia.org/wiki/ColorForth colorFORTH], а также [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D1%81%D0%BA%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C Обратная польская запись] в Википедии
* [https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%BB%D0%BB%D0%B8%D1%81%D1%82%D0%BE_%28%D1%81%D0%BF%D1%83%D1%82%D0%BD%D0%B8%D0%BA%29 Каллисто в Википедии] — спутник Юпитера, в честь которого назван ''язык Каллисто''
* [https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%BB%D0%BB%D0%B8%D1%81%D1%82%D0%BE_%28%D1%81%D0%BF%D1%83%D1%82%D0%BD%D0%B8%D0%BA%29 Каллисто в Википедии] — спутник Юпитера, в честь которого назван ''язык Каллисто''
* [http://fforum.winglion.ru/ Форум по Форту] и более мелкий [http://www.balancer.ru/tech/forum/viewforum.php?id=29 форум на Авиабазе]
* [http://fforum.winglion.ru/ Форум по Форту] и более мелкий [http://www.balancer.ru/tech/forum/viewforum.php?id=29 форум на Авиабазе]
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20THINKING%20FORTH Л.Броуди «Способ мышления — Форт»]
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»] (''англ.'': Leo Brodie [https://www.forth.com/starting-forth/ Starting Forth])
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20THINKING%20FORTH Л.Броуди «Способ мышления — Форт»] (''англ.'': Leo Brodie [http://thinking-forth.sourceforge.net Thinking Forth])
* [http://galileo.phys.virginia.edu/classes/551.jvn.fall01/primer.htm Julian Noble. A Beginner's Guide to Forth.] (''англ.'')
* [http://www.computer-museum.ru/histsoft/fortran_sorucom_2011.htm Баранов С.Н. «Язык Форт в СССР и России»]
* [http://www.computer-museum.ru/histsoft/fortran_sorucom_2011.htm Баранов С.Н. «Язык Форт в СССР и России»]
* Статья Андрея Черезова [http://www.enet.ru/win/cherezov/forth_ideas.html «Идеи языка Форт»] (кодировка Windows)
* Статья [http://www.compiler.su/russkij-yazyk-i-programmirovanie.php «Русский язык и программирование»] на compiler.su
* Статья [http://www.compiler.su/russkij-yazyk-i-programmirovanie.php «Русский язык и программирование»] на compiler.su
* [http://tinyurl.com/Callisto-161 tinyurl.com/Callisto-161] — короткий адрес этой страницы (через зарубежный сайт)
== Литература ==
* [https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%BB%D0%BB%D0%B8%D1%81%D1%82%D0%BE_(%D1%80%D0%BE%D0%BC%D0%B0%D0%BD) Мартынов Г.С. Каллисто. — Л.: Детгиз, 1957] — Советская н/ф книга, принёсшая в русский язык прилагательное ''каллистянский''.
* '''Семёнов Ю.А. Программирование на языке ФОРТ. - М.: Радио и связь, 1991.''' — В этой московской книге [http://www.ict.edu.ru/persons/index.php?a=pers&c=getForm&r=persDesc&d=light&id_pers=1945 Юрий Алексеевич] опубликовал исходный текст Форта ИТЭФ на макроассемблере IBM PC, сильно повлиявший на разработку ''Каллисто''. Всем энтузиастам ''Каллисто'' рекомендую разыскать эту интересную книгу и использовать её в качестве учебника с «Электроникой МК-161» в руках.
* '''Баранов С.Н., Ноздрунов Н.Р. Язык Форт и его реализации. — Л.: «Машиностроение». Ленингр. отд-ние, 1988. (ЭВМ в производстве)''' ISBN 5-217-00324-3 ББК 32.973 — В этой ленинградской книге опубликован исходный текст ФОРТа-ЕС, который соответствует стандарту Форт-83. ''Каллисто'' во многом близка этой советской реализации Форта, которая получила широкую известность в СССР.


[[Категория:Программы для ЭКВМ]]
[[Категория:Программы для ЭКВМ]]

Версия от 04:00, 26 февраля 2018

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

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

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

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

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

Краткая история Форта (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 (англ.)

Ссылки

Литература

  • Мартынов Г.С. Каллисто. — Л.: Детгиз, 1957 — Советская н/ф книга, принёсшая в русский язык прилагательное каллистянский.
  • Семёнов Ю.А. Программирование на языке ФОРТ. - М.: Радио и связь, 1991. — В этой московской книге Юрий Алексеевич опубликовал исходный текст Форта ИТЭФ на макроассемблере IBM PC, сильно повлиявший на разработку Каллисто. Всем энтузиастам Каллисто рекомендую разыскать эту интересную книгу и использовать её в качестве учебника с «Электроникой МК-161» в руках.
  • Баранов С.Н., Ноздрунов Н.Р. Язык Форт и его реализации. — Л.: «Машиностроение». Ленингр. отд-ние, 1988. (ЭВМ в производстве) ISBN 5-217-00324-3 ББК 32.973 — В этой ленинградской книге опубликован исходный текст ФОРТа-ЕС, который соответствует стандарту Форт-83. Каллисто во многом близка этой советской реализации Форта, которая получила широкую известность в СССР.