Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт мар 19, 2024 06:28

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 197 ]  На страницу 1, 2, 3, 4, 5 ... 14  След.
Автор Сообщение
 Заголовок сообщения: Каллисто 1.0 для «Электроники МК-161»
СообщениеДобавлено: Чт дек 21, 2017 13:30 
В ноябре был разработан и опубликован под GPL v3 язык Каллисто Классик, работающий на отечественной ЭКВМ «Электроника МК-161»:
http://the-hacker.ru/2017/Callisto-1.zip

Что уже сделано? И как.
Каллисто претендует на следующее поколение входного языка отечественных ПМК. Входной язык МК-161/МК-152 многим знаком, т.к. расширяет входной язык популярных Б3-34/МК-61. Но после выхода МК-152 сразу появилась критика, что запоминать номера регистров сложно (нужны имена переменных), заполнять вручную адреса переходов трудно (нужны циклы и IF), да и четырёх регистров стека маловато (нужен «бесконечный стек»). Каллисто всё это исправляет.

Версия 1.0 названа Классик, т.к. при разработке активно использовались исходные коды Форта ЕС и ИТЭФ, которые много народа изучало. С другой стороны, приоритет отдавался «калькуляторности» и слово DUP, например, традиционно (для калькуляторов) называется ↑ (стрелка вверх) и вводится одной клавишей. При проектировании языка я также учитывал и Форт-2012 — взяв оттуда, например, префиксы чисел вроде $ff

Идея «скрестить» язык «Электроники Б3-34» и Форт у меня зрела ещё с 1990-ых годов. Наконец-то она стала реальностью! Если в стандарте Форта-2012 два стека (целочисленный и плавучка), а в некоторых реализациях он один (целочисленный), то в Каллисто единственный стек данных — «десятичный» (bcd-плавучка). Это вызвано архитектурой «Электроники МК-161», но оказалось очень удобным для калькулятора. Такое решение привело к появлению уникального слова U@ — два байта считываются из памяти, как беззнаковое 16-битное целое от 0 до 65535, и кладутся в «десятичный» стек. Стек возвратов обычный, целочисленный 16-битный.

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

Язык сделан максимально простой в установке и работе. Один текстовый файл исходного текста с расширением MKL (4173 строки в кодировке Windows, также можно просмотреть на веб-страничке) компилируется стандартной программой производителя MK.EXE в один файл «программы» (формат MKP), который передаётся по COM-порту в МК-161 с помощью той же самой программы MK.EXE. Запускается однофайловая Каллисто Классик просто, как в старые добрые времена: В/О С/П

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

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

На эмуляторе, кстати, Каллисто Классик работает достаточно быстро и даже компиляция экрана выполняется за секунды, а не минуты.

На «железке» Каллисто использует автозапуск. При включении сразу попадаешь в среду, словно на МК-161 теперь новая прошивка. Советую сделать себе накладную клавиатуру (заводская клава не позволяет вводить буквы), распечатав Рис. 1 из Руководства на плотном листе бумаги А4 и вырезав дырочки под кнопки. Ссылку, где приобрести «Электронику МК-161», не даю, чтобы не сочли рекламой моей любимой «железки». :D

Как можно поучаствовать?
1. Сейчас идёт работа над второй версией языка, которая в чём-то дальше от Форта (а в чём-то ближе к Форт-2012), зато значительно быстрее. Новый адресный интерпретатор уже заработал. Он шустрее старого за счёт исполнения шитого кода лишь из памяти данных и других улучшений. Можно поучаствовать в обсуждении, как перейти на современные технологии (EVALUATE вместо INTERPRET, как пример) или посоревноваться в оптимизации примитивов Каллисто-2.

2. Разработка Каллисто-2 ведётся на SP-Forth. Это мой первый опыт программирования на SP-Forth, поэтому наверняка есть способы, как улучшишь код. С другой стороны, есть намерение когда-нибудь перейти к метакомпиляции — однажды Каллисто будет написана на Каллисто. Поэтому на фичи SP-Forth, которые не будут реализованы в Каллисто-2, особенно опираться не хотелось бы.

3. Ресурсы МК-161 не позволяют осуществить метакомпиляцию «на борту». Поэтому потребуется вторая цель, а именно форт-ассемблер x86 и перенос примитивов на DOS или Колибри. С Колибри я пока не работал и при выборе этой цели будет много вопросов.

4. Самая же лучшая помощь это добыть МК-161 (старую, где «камень» на панельке) и попробовать написать "Hello, world!" прямо на W77LE516P (МК51). Если кто сможет заставить «задышать» экранчик и клавиатуру МК-161 прямо из «камня», это поможет разместить Каллисто напрямую в микроконтроллере, минуя уровень интерпретации входного языка. Все проблемы с «тормозами» исчезнут, язык будет «летать». :) Для этой цели я даже приобрёл программатор и второй МК-161 «для опытов». Но пока сосредоточен на том, чтобы заставить «летать» язык с гирями на ногах — поверх стандартного входного языка. :D

5. Чтобы писать сложные программы на Каллисто Классик, требуется редактор экранов. В дистрибутиве есть простенький построчный редактор, который я взял из журнала FORTH DIMENSIONS, Volume III, number 3. Он позволяет создавать и редактировать экраны, но далеко не идеален. Лучше всего использовать его для разработки удобного полноэкранного редактора — или же написать подобный редактор на языке МК, «выдрав» алфавитную клавиатуру из Каллисто. Есть даже улучшенная версия клавиатуры из Каллисто-2, с буфером и автоповтором. Сложность здесь в том, что сам экран большой (48 строчек по 64 символа), индикатор крохотный (128×64 пикселя), а шрифт пропорциональный. Кстати, для МК-161 разработан моноширинный шрифт «вырви глаз» 3×5, что имитирует текстовый экран 32х10. Есть некоторые идеи, как всё это можно использовать. Хороший редактор пригодится и для последующих версий языка.


Последний раз редактировалось ath Чт дек 21, 2017 21:52, всего редактировалось 13 раз(а).

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Каллисто 1.0 для «Электроники МК-161»
СообщениеДобавлено: Чт дек 21, 2017 14:10 
ath писал(а):
2. ... SP-Forth...
3. ... DOS или Колибри...

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


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Каллисто 1.0 для «Электроники МК-161»
СообщениеДобавлено: Чт дек 21, 2017 19:05 
«Чудовища» в Каллисто Классик не используются. Среда полностью автономна и позволяет в диалоге программировать МК-161 «на борту».

Тому, кто будет работать на Каллисто-2, также не потребуются ни SP-Forth, ни DOS, ни Колибри. Их назначение — метакомпиляция. Системные программисты, кто захочет изменять исходники транслятора и заново его компилировать — им мощности МК-161, увы, не хватит и придётся использовать компьютер.

Сейчас Каллисто 1.0 написана на «расширенном входном языке» и компилируется фирменной программой MK.EXE под виндой. Вот её исходный текст:
http://the-hacker.ru/2017/Callisto.html


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Каллисто 1.0 для «Электроники МК-161»
СообщениеДобавлено: Чт дек 21, 2017 19:29 
ath писал(а):
Их назначение — метакомпиляция.
Метакомпиляция в FORTH - это костыль. FORTH - сам себе метакомпилятор. (Курить понятие "целевая компиляция"). FORTH, не способный к этому - это упражнение на построение негодного интерпретатора.

Но дело, даже, не в этом. Если, говоря о МК-161, мы помянем IBM-машину, которая стоит рублей 500 вместо 15тыс. и мощнее порядка на три, то вопрос: "А зачем нам МК-161?" - встанет во всей своей неприглядности.

"... запоминать номера регистров сложно"... Т.е. листочек в клеточку с именами регистров мы заменим метакомпиляцией на настоящем компьютере?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Каллисто 1.0 для «Электроники МК-161»
СообщениеДобавлено: Чт дек 21, 2017 19:38 
Нет. Чтобы программировать на Каллисто, «настоящий компьютер» не нужен. Записывать номера регистров тоже не нужно. Вот пример из учебной статьи, программа для вычисления гиперболического тангенса из справочника проф. Дьяконова:

Изображение

В ней определяется переменная-величина x1. Каллисто её размещает в регистре МК-161 — но номер регистра запоминает сама и использует сама, когда нужно. Листочек в клеточку теперь не требуется.

Под метакомпиляцией я и понимал целевой компилятор. Ресурсов «Электроники МК-161» для этого трюка не хватит. На этой крошке даже файл с исходным текстом компилятора не разместить. Чтобы Каллисто компилировала саму себя, ей потребуется ещё одна цель — вот тут и нужен «настоящий компьютер» с DOS или Колибри.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Каллисто 1.0 для «Электроники МК-161»
СообщениеДобавлено: Чт дек 21, 2017 19:53 
ath писал(а):
Чтобы программировать на Каллисто, «настоящий компьютер» не нужен.

Это противоречит:
ath писал(а):
Системные программисты, кто захочет изменять исходники транслятора и заново его компилировать — им мощности МК-161, увы, не хватит и придётся использовать компьютер.

Иначе, это не FORTH.

Впрочем, воля Ваша...


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Каллисто 1.0 для «Электроники МК-161»
СообщениеДобавлено: Чт дек 21, 2017 20:09 
Примерно поэтому я и назвал язык Каллисто — он основан на Форте и очень многое взято из Форта ИТЭФ (где не было самокомпиляции) и Форта ЕС (где самокомпиляция была), но различия есть.

Тут воля не моя, увы. Мощностей МК-161 не хватает, чтобы входной язык компилировал сам себя прямо на МК-161. Более того, сам МК-161 разработан по Гарвардской архитектуре. Разработчики сознательно сделали так, чтобы программы для МК-161 не могли создавать или модифицировать другие программы. Такая у них идеология, типа от вирусов защита.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Каллисто 1.0 для «Электроники МК-161»
СообщениеДобавлено: Чт дек 21, 2017 20:26 
И вы решите, уважаемый gudleifr, вы одобряете или нет метакомпиляцию (она же «целевая компиляция»)?

1. Если нужна, придётся использовать «настоящий компьютер». Ресурсы МК-161 не позволяют её сделать «на борту». В этом направлении и планируется следующий шаг, Каллисто-2. Сперва исходник переводится с языка МК на надёжный «костыль» SP-Forth и добавляется платформа, где метакомпиляция возможна. Потом «костыль» отбрасывается, и исходник Каллисто переводится на Каллисто.

2. Если не нужна, то это уже реализовано. Можете называть Каллисто Классик «не FORTH» — он сейчас в одной весовой категории с другими «не FORTH». Такими, как фиг-Форт и Форт ИТЭФ.

Подходов здесь всего два — либо мы её делаем, либо не делаем. Но оба подхода вы зачем-то подвергаете критике, что не конструктивно.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Каллисто 1.0 для «Электроники МК-161»
СообщениеДобавлено: Чт дек 21, 2017 20:47 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1285
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Поосторожней с gudleifr
Он как лакмусовая бумажка отводит от форума всех, кто с ним спорит.

Лично я в МК не разбираюсь, но зато более-менее знаю СПФ (винда), ежели есть какие-то задачи, то буду рад поспособствовать.

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Каллисто 1.0 для «Электроники МК-161»
СообщениеДобавлено: Чт дек 21, 2017 21:05 
Спасибо, Victor__v. Буду писать сюда или прямо вам, если возникнут вопросы по СПФ — именно под виндой его сейчас использую.

Пока всё в SP-Forth кажется очень логичным и удобным. Программировать на нём наслаждение, по сравнению с весьма жёстким MK.EXE, и он определённо повлияет на Каллисто-2. В результате хочется получить калькулятор, которым было бы приятно пользоваться и удобно программировать «на ходу», решая задачи на работе и в быту.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Каллисто 1.0 для «Электроники МК-161»
СообщениеДобавлено: Чт дек 21, 2017 21:13 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1285
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Ну, ежели во внутренности СПФа не лезть, то да, действительно удобно

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Каллисто 1.0 для «Электроники МК-161»
СообщениеДобавлено: Чт дек 21, 2017 21:16 
ath писал(а):
Если нужна, придётся использовать «настоящий компьютер».
... и нужда в МК-161 отпадет... Кто мешает использовать косвенный шитый код? Или, что еще очевиднее, писать на FORTH на бумажке и вбивать соответствующие "макросы" руками (вынося большие "таблицы переадресации" в память данных для их автоматической обработки)?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Каллисто 1.0 для «Электроники МК-161»
СообщениеДобавлено: Чт дек 21, 2017 21:22 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Кое-что о МК-161: http://mk.semico.ru/mk161re.htm
Эмулятор: https://sourceforge.net/projects/emkatic/
Компилятор и ещё кое-что: http://gtello.pagesperso-orange.fr/mk161_r.htm
Компилятор Semico: http://mk.semico.ru/progmk.htm


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Каллисто 1.0 для «Электроники МК-161»
СообщениеДобавлено: Чт дек 21, 2017 21:57 
gudleifr, Каллисто Классик использует косвенный шитый код.

Почему сразу «нужда отпадёт» — вы так часто компилируете компилятор? Для прикладных программ компьютер не нужен и МК-161 достаточно. Повторяю вам уже в который раз. Это как раз основная задача проекта, программирование «на борту». И эту задачу Каллисто успешно решает.

Идти к компьютеру требуется примерно также часто, как вы компилируете ядро Линукса или SP-Forth. Большинству вообще не потребуется — они устанавливают на калькулятор один-единственный стандартный файл Callisto.mkp и работают со стандартным языком, расширяя его с клавиатуры МК-161 своими словами. Форт можно очень сильно расширить даже без перекомпиляции ядра, уж поверьте. :D


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Каллисто 1.0 для «Электроники МК-161»
СообщениеДобавлено: Чт дек 21, 2017 22:09 
ath писал(а):
Почему сразу «нужда отпадёт»
Потому, что если система включает обычный компьютер, МК-161 в ней избыточен.

ath писал(а):
Идти к компьютеру требуется примерно также часто, как вы компилируете ядро Линукса или SP-Forth
Это не о FORTH.

ath писал(а):
Большинству вообще не потребуется
Мне трудно представить большинство из тех, кому понадобится Callisto.mkp.


Вернуться к началу
  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 197 ]  На страницу 1, 2, 3, 4, 5 ... 14  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB