Каллисто 1.0rc Классик

Каллисто Классик 1.0rc:
http://the-hacker.ru/2016/Callisto-1.0rc.zip

Подытожил свою работу за это лето. Свою и Михаила Рамендика, чьё умение писать Руководства оказалось незаменимым.

Итак, кандидат в релиз 1.0

Даю сообществу 1 месяц на проверку, после чего эта версия будет выпущена как релиз 1.0

Два существенных изменения. Во-первых, Каллисто перешла на лицензию GNU GPL v3 (или больше). Во-вторых, теперь при выключении МК-161 словарь Каллисто всегда сбрасывается до начального, из памяти программ. Чтобы это обойти и сохранить сеанс, надо явно исполнить слово ВЫКЛ перед выключением МК-161.

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

О стабильности Каллисто 1.0rc говорит тот факт, что написанные на ней программы (идущие в комплекте) не менялись с 26 февраля (а некоторые не менялись аж с апреля прошлого года). То есть дольше полугода они работают стабильно, без изменений, на всех выпущенных версиях Каллисто, включая 1.0rc.

Классическая версия транслятора состоит всего из одного исполняемого файла Callisto.mkp, исходный текст которого написан на расширенном языке МК и также содержится в одном файле Callisto.mkl. Это, а также родство с опубликованными советскими ФОРТ-ЕС и ФОРТ ИТЭФ, делают Каллисто Классик относительно простой для использования и изучения.

Монолитное ядро Каллисто Классик 1.0rc состоит из 4189 строк исходного текста, компилирующихся в 9949 шагов. Создание Каллисто Классик от задумки до 1.0rc заняло 2 года и 5 дней.

Русский

Комментарии

Круто. Серьёзная работа.

7 лет назад в дискуссии было сказано "Ребята, не увлекайтесь низкоуровневым программированием: сменится платформа - вы останетесь без штанов". Илья тогда активно воспротивился этому тезису. Идеи кросс-транслятора с ЯВУ также остались нереализованными, несмотря на положительный опыт связки Бейсик-ПМК в 1980-х.

И вот этот момент настал. Нужно искать способы сохранить 2 человеко-года трудов в условиях, когда платформа меняется (по прихотям тараканов в голове её производителя).

Я далек от потирания рук с чувством удовлетворенности в своей правоте, просто ситуация с Каллисто кажется весьма напряженной. Будет очень плохо и грустно, если разработка тихо уйдет в анналы истории, не будучи взятой на вооружение сообществом. Никаких новых идей, кроме кросс-трансляции ПМК-Си предложить не могу.

Каллисто — это как раз высокий уровень. И сейчас (в Каллисто 2.0) речь пойдёт о кросс-платформенности. Чтобы транслятор работал не только на ЯМК, но также на W77LE512P и где ещё нужно будет.

Сама же Каллисто сохранила (и приумножила) много человеко-лет, затраченных в СССР на разработку трансляторов Форт-ЕС и Форт ИТЭФ. Ну и вклад Чака Мура и других энтузиастов, профессионалов Форта тоже нельзя недооценивать.

P.S. Что же до сообщества и платформы… здесь я надеюсь, что Каллисто заставит ту часть сообщества, что ушла с МК-161 из-за отсутствия удобного входного языка, пересмотреть своё решение. Каллисто 1.0 это демонстрация, что такой язык создать возможно. Каллисто 2.0 — шанс принять участие в разработке такого языка.

Всякие кросс-компиляторы с Бейсиком и Си к теме мало относятся, т.к. целью Каллисто была разработка среды, удобной для программирования на борту «Электроники». Без привлечения настольных компьютеров.

И кстати всяких интерпретаторов трансляторов Бейсика для Форта вроде как море. Форту не сложно транслировать в себя более менее человеческий синтаксис, и экономно получается. Так что для этой плаформы трудно придумать что-то лучше Форта как основу (как и на калькуляторах HP был RPL). Жаль только W77LE512P, а не eZ80. И почему у нас всё не для людей ???

Речь о кросс-трансляторе. Стандартный подход, программа пишется на ЯВУ, транслируется, например, в ЯМК и наоборот. Имея такой транслятор не было бы проблем транслировать Каллисто хоть в ЯМК, хоть в HP, хоть в ассемблер любого другого процессора.

Машинный перевод не так эффективен. Я лучше ручками доработаю Каллисто 2.0 так, чтобы её было удобно переносить «хоть в ЯМК, хоть в HP, хоть в ассемблер любого другого процессора.»

Каллисто 2.0 будет написана на специально созданном для этого языке Амальтея, который позволит определять примитивы на их родных языках (ЯМК, ассемблер), а слова высокого уровня на Каллисто (вместо .DW, как в Каллисто 1.0).

В Каллисто 3.0 я попробую объединить два этих языка, Амальтея и Каллисто, в один, чтобы сделать метакомпилятор. Тогда Каллисто сможет компилировать саму себя, как Форт-ЕС. Увы, не на «Электронике МК-161», её мощностей для такого недостаточно. А на других целевых машинах, которые появятся в Каллисто 2.0

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

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

На практике для кросс-трансляции часто используются т.н."тройки" и соответствующие Т-диаграммы. Описаны, например, у С.Свердлова в его монографии (см. мою рецензию: http://www.arbinada.com/ru/node/1408).

«С этих позиций логичнее было бы писать Каллисто на самом Каллисто.»

Так и будет, в конечном итоге. Просто сейчас Каллисто работает лишь на «Электронике», ресурсов которой недостаточно для метакомпиляции. Где в МК-161 хранить 9949 байт получившегося кода? Где хранить 148Кб исходного текста? И это при том, что сейчас компиляция сложного 3Кб экрана может занять 15 минут.

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

На кросс-платформенной Каллисто Экстрим (2.0) уже можно будет писать проекты такой сложности, которые на МК-161 не откомпилировать. Например, транслятор Каллисто 3.0