Опубликовать статью по Калисто?

Опубликовать статью по Калисто и мысли в каком нибудь журнале Радио или ещё где то предполагается?

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

В принципе, в комплекте Каллисто есть хорошее Руководство (pdf). А на вики информации достаточно. Мои ближайшие планы касаются подготовки Каллисто к мультиплатформе, включая ассемблер W77LE516P.

Помимо роста быстродействия, это поможет улучшить удивительный «Коэффицент использования»… хотя совершенно непонятно, кому он нужен.

может быть и хабр, профильные журналы т.к. кому то Семико смог продать свои звонки
и привести программу для них на сайте, которая под Каллисто лучше бы воспринималась.
Можно затронуть существующие проект(ы) DIY компьютеров ориентированных на Форт (Fignition)
c прорадителем Ace Jupiter и др. например с amForth для Ардуино. У меня есть платка Gameduino
можно посмотреть её графические возможности. Могу подтянуть и информацию по запуску Forth на STM32
Немецкая FIG имеет многоязыковую Wiki https://wiki.forth-ev.de/doku.php/start для размещения тоже материалов Форт тематики.

P.S. Журнал Радио как раз одна из площадок для размешения статей широкого профиля.

есть разные и с готовыми ассемблерами и для популярных контроллеров Silicon Lab
(где то сохранились и исходники одной фирмы, ранее занимающейся этими контроллерами)
P.S. Материалов должно хватить для составления рабочего решения не с нуля.

Вот это действительно интересно. Особенно если есть отечественные работы в открытом доступе. Зарубежные свободные решения тоже подойдут.

Также совсем скоро встанет задача по форт-ассемблеру МК51 на SP-Forth. Есть задумки, но всегда интересно ознакомиться с уже имеющимися наработками.

Можно здесь подборку сделать но какие то ссылки можно найти на Форт форуме
и в частности в теме http://fforum.winglion.ru/viewtopic.php?f=39&t=9
У михаила по форуму тоже были "разбросаны" проекты ядер на 51 (одна из его страничек http://fpauk.narod.ru/ с упоминанием 51-го ядра)

P.S. В веб архиве сохранился этот сайт https://web.archive.org/web/20060102203426/http://www.amresearch.com
Исходники amrForth7 где то лежат у меня с этого сайта. По 51-у ядру была ещё embedded книга связанная с Forth. В FF303 (мультиплатформенной Форт среде для контроллеров мне наиболее знакомой) есть и поддержка 51-го ядра. Библиотека плавучки приведена там на Forth (наверное не самое удачное решение)
Если определиться с кругом подлежащих вопросов к освещению и проработке, то можно и на целую книгу материалов "напузырить"

Вот что то пока нашлось (на скорую руку :)
http://dropmefiles.com/C7NNh (дней 6-ть, наверное этот архив будет лежать на данном файлообменнике)
Архив давнишний и поэтому не полный, и что то может иметь более новые версии.

P.S. Для Ff303 могу добавить соответствующюю версию Win32Forth для его сборки. FF303 имеет некоторые оптимизации Forth кода.
По мотивам ассемблера FF303 (там файл с именем builder) был недавно в сети размещён такой проект ассемблера для AVR Форт-ассемблер для AVR сделанный на SPF4 (проект имеет некоторые шероховатости в файлах и из коробки у меня под Windows сразу не собирался)
На Форт форуме была и тема с парой версий сформированных CD образов с Форт наполнением от двух участников форума.

http://www.kiblerelectronics.com/kibler/forth.shtml

P.S. Может даже имеет смысл поменять штатный контроллер в калъкуляторах Семико на Sylabs? (на переходнике с доп разведёнными возмохностями)

Спасибо за эти и предыдущие ссылки. Они пригодятся. Архив тоже скачал.

Но всё же я слишком забегаю вперёд. Между Каллисто в камне и сегодняшним днём есть важный этап, через который не перепрыгнуть — когда (1) скорость внешнего интерпретатора Каллисто поверх языка МК существенно улучшена, (2) добавлена мета-компиляция, а для этого (3) добавлена первая цель 8086/87, а также кросс-компиляция на 8086/87 наших 4000 строчек кода в язык МК.

Менять штатный контроллер можно. Одно из самых радикальных предложений, которое я слышал — выкинуть начинку МК-161 и встроить плату хоть с MSP430, оставив от дорогущей и благородной ЭКВМ только индикатор МЭЛТ, клавиатуру и корпус.

Но лучше, если разработке своего железа будет предшествовать этап мета-компиляции в камень 8051. Который наступит после этапа мета-компиляции на 8086/87 в уже опробованный язык МК.

Каллисто как нативное консольное приложение на PC - нет таких планов?

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Конечно, SP Forth может сделать консольное приложение Windows. Но в ближайших планах научить Каллисто-2 компилировать себя самостоятельно в COM-файл под DOS.

  1. Быстрая генерация COM-файла упрощает компилятор. Мы просто скидываем образ массива на диск, как в коде для МК-161 и 8051.
  2. DosEmu, DOSBox и другие эмуляторы DOS есть везде, даже на смартофонах и macOS. Под Windows должно запускаться нативно.
  3. Мощности DOS-машины достаточно для метакомпиляции Каллисто-2 — а это главное, для чего нам нужна версия на ПК.

У метакомпиляции приоритет перед разработкой прошивки 8051, хотя попутно придётся продумать ввод-вывод экзотических символов МК-161 и Каллисто. Тут либо полная эмуляция графического экрана и клавиатуры, либо потоковый ввод-вывод с преобразованием символов между двумя кодировками.

Каллисто под ДОС это хорошо!

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

в этом вопросе т.к. есть отрывочные данные
о том или ином использовании Форт в учебных программах.

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

Форт - средство создания индивидуального и очень хрупкого мира, где все держится на одиночке-программисте, роль "компилятора" сведена к препроцессору. Обратная запись исходит из времен, когда ресурсов устройства развернуть запись человеческую, алгебраическую, в обратную не хватало. По этим и многим другим причинам данная технология не стала мейнстримовой и уже вряд ли станет.

и шаблонами восприятия языка, как недоязыка.
т.к. в языке нет явного разделения на параметры и функции с их чёткой типизацией.
Основное понятие СЛОВО - это абстракция для гибкого превращения изначально, например,
используемой переменной в выполняемое действие при сохранении интефейса (по возвращаемым данным для последующего использования сразу или в отложенном виде). При этом код использующий это слово никак ненужно
изменять (в большинстве случаев) т.к. само вызываемое слово позаботилось сохранении актуальности контекста
для своего вызова. И поэтому это не простое препроцессирование тела программы при её построении.
И это ещё не затрагивая мета возможности языка. То что он не станет мейнстримом не делает его менее уникальным. Немного сумбурно, но возможно что то важное объясняет.
У Баранова есть и объяснение принципа частичной параметризации Форта делающим его дополнительно более гибким

http://www.forth.org.ru/~ac/rationale/FORTH.TXT Андрей Черезов. Идеи Форт (не все)
http://www.nestor.minsk.by/sr/2003/07/30710.html Парадоксом Блаба можно объяснить, в частности, и не популярность Форт языка.
http://www.twirpx.com/library/comp/forth/ Раздел по литературе Форт на twirpx, который можно дополнять.

Я не против Форта ни разу, пусть расцветают все цветы. Мое замечание касалось двух пунктов:
- неадекватности реалиям при попытках обучать этой технологии в вузах, а не факультативно
- с точки зрения разработчика компиляторов, фактически отсутствие предмета трансляции.

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

Если вы посмотрите кишки какой-нибудь стековой виртуальной машины, типа Java, то обнаружите, что Форт там фактически присутствует на низком уровне, когда программа с "человеческого языка" оттранслирована в последовательность команд с обратной записью, т.е. в подобие Форта. И в этом ценность данной технологии, как концепции построения таких машин.

@Андрей Черезов "Стеки есть везде, а синтаксис Форта прямее всех прямых. Если по-польски это обратная запись, то это проблема поляков или того, кто придумал это название. А у нас в Форте всё прямо."

P.S. "C точки зрения разработчика компилятора" сам Форт является неплохим инструментом для создания DSL языков (так он и расширяется).
"Неадекватность реалиям"? Каким и для каких применений?
Невостребованность рынком и возможности инструментария в умелых руках это немного разные категории. :)
Ограниченное восприятие неиспользуемого лично инструмента не делает суждения о нём правдивыми.
Китайский или арабские языки это "человеческие" языки?

А вуз и должен, в частности, давать представление о возможностях разных технологических инструментах и желательно наиболее грамотно.

В ITMO CПБ ограниченно ввели Форт в лабораторные стенды
http://embedded.ifmo.ru/sdk/sdk11/soft/gm3p/gm3p_user_manual.pdf
В Мытищинском филиале МГТУ им. Н. Э. Баумана была раработана Инструментальная среда для разработки интеллектуальных систем ПараФорт
http://www.mgul.ac.ru/info/science/spisok/razdthr/050.shtml
Нижегородский государственный университет. Рогозин Д.В. Экономичный интерпритатор для узлов сенсорных сетей.
http://dspace.nbuv.gov.ua/xmlui/bitstream/handle/123456789/1569/74-Ragoz...

Проект http://mind.sourceforge.net/mind4th.html MindForth Free AI Source Code for Robots
Контроллеры ПЛК ForthLogic c Форт языком http://www.es.ua/ru/kataloh/prohramne-zabezpechennia-dlia-kontroleriv-es...
Embedded multitasking RTOS supports programming in the Forth and C languages http://www.mosaic-industries.com/Products/Software/QED-forth-embedded-so...
Strobotics RoboForth http://www.strobotics.com/roboforth.htm
Форт в микроконтроллера Propeller http://forums.parallax.com/discussion/141704/comparison-of-propeller-for...
Win32Forth for graphics and parallel processing. https://sites.google.com/site/win324th/sources
...
...

Куда и как развиваться Форт (чтобы заметили институты), если и так можно найти полно всевозможных его применений?
Если проблема в том, что классические компиляторостроители останутся без работы, то пользователи Форта мало что потеряют.

Не сыпьте соль на рану, т.е. на тему DSL. Использование Форта в качестве основы для построения DSL фактически ничем не отличается от макротрансляции, с использованием того же стандартного m4.

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

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

Особенность Форта в том, что он вообще не требует других языков и единолично покрывает все уровни OSI, от физического до прикладного — когда идёт взаимодействие с человеком, Форт сам себе операционная система. Для калькулятора это очень удобно.

Если залезать в кишки транслятора, то на самом низком уровне действительно можно обнаружить «макроассемблер» (форт-ассемблер). С этим низким уровнем имеют дело далеко не все программисты и есть реализации Форта, где этот ассемблер вообще отсутствует. При желании же Форт покроет даже более низкие уровни, вплоть до транзистора — Чак Мур проектировал на Форте свой форт-процессор.

Идея же Форта в том, что он является языком уровнем выше, чем большинство «high level languages», т.к. позволяет программисту относительно быстро развить входной язык до проблемно-ориентированного. После чего общение с Фортом идёт в терминах и концепциях прикладной задачи — которые гораздо выше, чем при применении обычных ЯВУ.

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

РБНФ базового Форта тоже легко пишется. Откуда взялись претензии к отсутствию КС-грамматики, непонятно. Вот навскидку черновик грамматики Форта — понятно, что программисту даётся полная свобода её расширять.

Программа = { Определение-переменной | Определение-слова | Слово }
Определение-переменной = ( VARIABLE | CONSTANT | VALUE ) Слово
Определение-слова = ":" Слово  { Оператор } ";"
Оператор = Условный | Цикл | Слово
Условный = "IF" { Оператор } [ "ELSE" { Оператор } ] "THEN"
Цикл = "BEGIN" { Оператор } Конец-цикла
Конец-цикла = AGAIN | UNTIL | WHILE { Оператор } REPEAT

Современные стандарты Форта стандартизируют «стек управления», который следит за соблюдением грамматики языка.

В Форте грамматика автоматная. Это в частности означает, что она может быть разобрана без потерь семантики регулярными выражениями. И не отличается от пре/макропроцессинга исходного текста.

P.S. Это даже самими фортоводами обсуждается.

как регулярные выражения справятся со словами с признаком IMMEDIATE и механики CREATE ... DOES>
не зная "последствия" отработки данных слов и дополняющие код программы разными полезными плюшками (немного расширяющими синтаксис/семантику языка в процессе трансляции)
Теже IF ELSE WHILE LOOP и др. можно сцеплять в замысловатые структуры управления, даже не используя их переопределения.

Поэтому кто то сравнивает работу Форт системы по трансляции кода с работой распределённого компилятора (основного ноу хау коммерческих Форт систем, если не работают по классике) В народном SPF4 это сделано на макрооптимизациях по распознаным цепочкам команд потока ассемблерного кода получаемого после первичной трансляции Форт программы. Поэтому он достаточно успешно конкурирует по быстродействию с коммерческими Форт системами.

P.S. Наверное и с этими возможностями можно как то управиться или сразу рассмотреть и шаблонно опозать как прошедшие ручную верификацию ранее.
Синтаксис и семантику Форт языка в расширениях не так часто изменяют.
Даже используемые схемы ООП в Форте, всё равно синтаксически наследуют черты синтаксиса Форт языка.
Вот, например, пример транслятора формул для Форт http://galileo.phys.virginia.edu/classes/551.jvn.fall01/ftran111.f
The Forth Scientific Library Project https://www.taygeta.com/fsl/sciforth.html
FFL - Forth Foundation Library http://soton.mpeforth.com/flag/ffl/index.html
Уроки построения компилятора от Креншоу с иллюстрацией на iForth http://home.iae.nl/users/mhx/crenshaw/tiny.html (есть в сети перевод на русский оригинальных уроков этого материала)
...

Справится без вопросов, интерпретация текущей лексемы однозначная, не зависимая от следующего токена.
Реализация разбора исходника на Форте и преобразование его в промежуточный формат, например, в синтаксическое дерево - это "два прихлопа, три притопа". Дальше - кодогенерация для виртуальной машины - тоже задача уровня курсовика. Вот реализация самой машины, тем более кроссплатформенной, и создание тиражируемого продукта и среды - это уже сложная инженерная работа. Но она такова и для любого другого компилятора. В вылизанную машину PHP уже вложено столько человеко-лет, что, наверное, давно перекрыло совокупные затраты на все самодельные Форты за последние полвека. Оттого и результат, чудес не бывает.

Serguei_Tarassov wrote: Справится без вопросов, интерпретация текущей лексемы однозначная, не зависимая от следующего токена.

В этом нельзя быть точно уверенным не проверив это по листингу кода.
ФОРТ может на ходу менять свой синтаксис и семантику!
Как это будет учитывать лексический анализатор не имея возможностей по выявлению этого?
Семантика привычного вида программы тоже может быть подвергнута изменению для встраивания дополнительных возможностей. Формально можно выполнить код не поддающийся анализу используемым лексером, но как эффективно потом с ним работать на этапе генерации кода?

P.S. Похоже есть существенное недопанимание на что способен Форт (программист) при формировании своих задумок в особо "извращённой" форме. На Форт форуме тоже есть некоторое число подобных решений и обсуждений.

Особенно в возможностях решений для конкретной Форт системы и знания того как она спроектирована.
Поэтому можно рассматривать Форт и как некоторый метод работы с информацией и пробовать формализовать возможные решения по применению методов работы в Форте.
Близко чем то к раскрытию этого вопроса http://web-ext.u-aizu.ac.jp/~mozgovoy/homepage/papers/amcp_dissertation.pdf Машинный семантический анализ русского языка и его применения. Мозговой М.В.
(диссертант проф.Тузова В.А) Тузов при разработке теории SemLP (выполняемые данные есть монография в i-nete) использовал Win32Forth

Пример небольшого Форт кода - Cчитывание HEX файла в память. Данные HEX расположены в этом же файле (вместе с со стандартными словами в файле) И это ещё достаточно простой способ использования возможностей Форт.


 VARIABLE aDump
 VARIABLE Length
: >DI 
        0. BL WORD  COUNT   >NUMBER  2DROP  D>S  ( DUP . BL EMIT )  
;
: dump-read? HERE  aDump  !  BASE  @  
    CR HEX 0x401000
    BEGIN
	REFILL
    WHILE
             >DI  OVER  -  ?DUP  IF  DUP  ALLOT  +  ( DUP . KEY DROP ) THEN \ PLACE
             >DI C,  >DI C,  >DI C, >DI C, >DI C, >DI C, >DI C, >DI C, 
             >DI C, >DI C, >DI C, >DI C, >DI C, >DI C, >DI C, >DI C,
           BL WORD DROP ( COUNT TYPE CR )
        0x10 + 
    REPEAT
    ." length ="  0x401000 - .
    HERE aDump @  - DUP .  Length !  
    BASE !
;
HEX
dump-read?
00401000  28 10 00 00 00 00 00 00  00 00 00 00 48 10 00 00  (...........H...
00401010  38 10 00 00 00 00 00 00  00 00 00 00 00 00 00 00  8...............
00401020  00 00 00 00 00 00 00 00  5C 10 00 00 6C 10 00 00  ........\...l...

Ещё пример простого Форт расширения.

Пример самого простого определения структур в Форт языке.
Основная идея управления данных описанных с помощью структуры -
 это прибавить фиксированное смещение к адресу в стеке и иметь размер структуры для
выделения памяти под данные описываемые данной структурой.  

Выглядеть это будет как то так:

struct
 2 field  >w
 4 field  >l
 1 field  >b
 CONSTANT  /foo
и эквивалентно по сути следующему куску кода, но оформленного не структурно.
(а ктож от синтаксического сахара откажется?)

 :  >w  0 +  ;
 :  >l    2 +  ;
 :  >b    6 +  ;
 7 CONSTANT  /foo
struct
 4 +       \  >fw-req можно не именовать поле данной структуры т. к. при выделении памяти 
             \  начальный адрес данных выделенных под структуру будет известен.
             \  или в случае пропуска какой то размерности структуры это тоже работает  
 4 field   >tx-stat
Реализация:
: struct 0 ; \ просто синоним значения 0  
:  field   CREATE  OVER  ,  +  DOES>  @  +   ;
стековая нотация слова OVER  ( n2 n1 – n2 n1 n2 )  (через верхний элемент стэка)   
Логика простая при создании описания каждого нового поля структуры производится 
компиляция текущего смещения (offseta) цепочкой 2-ух слов  over  ,  и прибавляется 
размер текущего определяемого элемента для последующей компиляции нового смещения 
и на этом создающая часть слова field отработала.
При исполнении получаем скомпилированное смещение через @ + 
при этом прибавляем смещение к реальному адресу расположения данных соответствуюей этой структуре.

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

К сведению: после загрузки Форт слово HERE даёт текущий адрес начала свободной статической памяти выделенной системой при старте Форт.

Пример введения слов для поддержки одномерных массивов.

: ARRAY  ( n -- )  ( i -- addr)
\ создать статью при исполнении и сдвинуть указатель HERE 
\ на  размерность n CELLS ячеек словом ALLOT    
CREATE CELLS ALLOT  
    DOES> CELLS  +   \ при исполнении получить адрес i -го элемента массива
;     
                                             
100  ARRAY  FOO    \ отсчёт индекса массива от 0
0 3  FOO   !                \ запишем 0 в третий элемент массива
   3  FOO  @               \ извлечём третий элемент массива   

Более размерные массивы немного витиеватее, но примерно так и делаются.

http://rema44.ru/about/persons/dobrinin/papers/dhist.doc Добрынин Д.А. История создания минироботов в ЦДТ "Родник"
http://rema44.ru/about/persons/dobrinin/papers/dmr2005.doc Добрынин Д.А. Принципы построения малых мобильных роботов - мобильной платформы "Crazy Mouse" и робота-собаки "Робик"
http://www.railab.ru/index.php?option=com_content&view=article&id=5:pers...

Как таковые в стандарте не определены массивы, но Форт как было озвучено саморасширяющийся пользователями язык программирования и поддержка их возможна (не ждать же право когда компиляторостроители сделают её для Форт)

Интересно, что в Полифорте (коммерческой версии самого Чака Мура) массивы, строки и многое другое были всегда доступны «из коробки».

Такое впечатление, что Чак Мур раскрыл и отдал в public domain большинство интересных и увлекательных техник Форта, но также закопирайтил высокий уровень языка. В результате остальным приходится либо строить ассорти из несовместимых велосипедов, либо включать код этой «последней мили» в каждую прикладную программу.

Хорошо, что по крайней мере со строками и файлами некоторый консенсус в последние стандарты вошёл.

В Форте все детали реализации доступны программисту как на этапе компиляции, так и во время исполнения — это сильно отличает его от макропроцессоров.

Форт «мутирует», подстраиваясь под задачу. Ничто не мешает создавать свой синтаксис, от управляющих слов CASE и CODE до S" и .( — слов, которые самостоятельно обрабатывают исходный текст программы, с помощью стандартного WORD (см. выше первый пример KPG с дампом, где более-менее обычный поток лексем) или даже вводят собственные правила лексического разбора.

Когда разного рода абстракции позволяют упростить решение задачи, они применяются. Никакой фиксированный набор регулярных выражений или правил РБНФ не покроет полностью Форта, т.к. сам язык изменяется в процессе формулировки решения данной прикладной задачи.

В качества примера можно привести демку Pacman для Каллисто, где дюжина строчек создаёт собственный музыкальный макроязык, вдохновлённый оператором PLAY из Бейсика. Строчки 20-24 уже полная «отсебятина», написанная на этом новом «музыкальном» языке и заведомо непонятная любому «фортозаменителю» с регулярными выражениями. Это ещё не затрагивался уровнь лексем — изменения вносились только в грамматику и семантику.

listmkt v0.3.5a (c) AtH, 8 апреля 2015, Файл: B043.mkt
  0 \ Pacman music #43, AtH, 20150413
  1 
  2 forth definitions  5 value темп
  3 
  4 vocabulary ММЯ  ММЯ definitions  \ Музыкальный Макро Язык
  5 : нота  ( частота длительность −−)
  6   <builds темп × , , does> here 4 cmove 4 allot ;
  7 : ;  ( −−)   ?csp  here over 2+ − 4 / ↔ !
  8   [compile] forth ; immediate
  9 
 10 0 1 нота .  0 2 нота ..  0 10 нота .10
 11 2470 1 нота b<  4939 ↑ 1 нота b  2 нота b+  2616 1 нота c
 12 5233 1 нота c>  3111 ↑ 1 нота d# 3 нота d#++
 13 3296 ↑ 1 нота e 3 нота e++  3492 1 нота f   3699 1 нота f#
 14 3920 1 нота g  4153 1 нота g#  4400 1 нота a
 15 
 16 forth definitions
 17 : :мелодия  ( −−)   <builds here  2 allot  !csp  ММЯ
 18   does> ↑ 2+ ↔ u@ (play) ;
 19 
 20 :мелодия Пакмэн  \ Манве, 13 апреля 2015
 21   b< . b . f# . d# . b f# .. d#++ .     \ такт 1
 22   c . c> . g . e . c> g .. e++ .        \ такт 2
 23   b< . b . f# . d# . b f# .. d#++ .     \ такт 3
 24   d# e f . f f# g . g g# a . b+ .10 ;   \ такт 4
 25 
 26 : tune  \ ( −−)   воспроизведение мелодии
 27   begin Пакмэн ?break again ;
 28 \s

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

Что такое «две простыни текста»? Какое-то заведомо неуважительное отношение к чужому труду — да ещё фактическая неверность, почему две-то?

1. Я вам привёл один (всего один, а не два) рабочий исходный код, взятый без изменений из дистрибутива Каллисто. Пример из практики. Он полезен, только сегодня писал другой код на его основе, для проигрывания другой и более длинной мелодии.

2. Такая форма записи программ называется не «простынёй», а экраном. Размер в 3Кб (48 строчек по 64 символа) навязан архитектурой МК-161. Здесь размер щадящий, 29 строк (из которых шесть пустые) — немногим больше 25 строк экрана Форта.

Приведённый мною текст вводит новое несложное правило грамматики, отсутствующее в Форте:

:мелодия имя-мелодии последовательность-нот ;

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

«Записать тексты в эквивалентном виде» это уже подмена тезиса. Понятно, что человек может одну и ту же программу написать на разных языках. При желании и с большой потерей элегантности форт-программу (да и сишную программу) можно «ручками» и на Фортран перевести. Раньше шла речь именно о сведении Форта к традиционным макропроцессорам, чтобы они автоматически анализировали и обрабатывали текст на Форте.

Но, это, похоже и DSP алгоритмы использует.
http://www.softsynth.com/hmsl/
http://digitalmusics.dartmouth.edu/~larry/published_articles/hmsl/HMSLPN...
Даже книга какая то доступна. Jesse Russell Hierarchical Music Specification Language

P.S. Есть и некоторые проекты с использованием STM32 железа по синтезу музыки (встречал на ю-тубе)
Похоже этот проект https://hackaday.io/project/9374-stm32f4f7-synstack

Музыка на Каллисто 1.0 проигрывается мощным примитивом (PLAY) (исходный код на языке МК-161) в строке 18 — музыка не фоновая, массив (длительность, частота) подаётся в цикле на аппаратный генератор звука, таймер МК-161.

Весь «синтаксический сахар» музыкального макро-языка это заранее (во время компиляции) подготовить упомянутый массив для (PLAY) на основе мелодии, записанной в виде, удобном для музыкантов (строки 21-24).

В Каллисто-2 запланирована фоновая музыка, когда ноты будут выбираться прерыванием из общей «музыкальной» очереди.

Посмотрел ещё раз на HMSL. Напрямую он не подойдёт для МК-161. Пока не научимся делать прошивку, разумеется. Для Каллисто-2 уже написан более быстрый адресный интерпретатор на языке МК. Но и его скорости хватит далеко не на все мелодии в реальном времени. HMSL, насколько я понял, управляет музыкой именно в реальном времени.

Сперва HMSL мне показался многословным. Но сейчас присмотрелся, некоторые идеи могут пойти в ПМК. Понравилось, например, слово 1/4 для задания длительности нот. CHOOSE неплохое слово. :-) ODE можно посмотреть, что там полезного.

Пока в ПМК однобитный динамик, достаточно лаконичной строки PLAY из Бейсика, например S" abc" PLAY — внутри слова PLAY встроен синтаксический разбор ММЯ и заполнение музыкальной очереди, ноты из которой будут последовательно проигрываются прерыванием. Или, как сейчас, на низком уровне словом (PLAY)

Во-первых, глядя на синтаксис макроопределений M4 можно сказать,что только очень смелый или глупый человек променяет Форт на M4
Во-вторых, на борту микроконтроллера да ещё с ограниченной клавиатурой что-то сложнее грамматики Форта делать бессмысленно, набирать будет очень тяжело и компилятор суперязыка может тупо не влезть в память. И что ход времени и эволюция предлагает на такой случай ? Примеры Питонов и Паскале-подобных языков уже видел, не впечатлило, не компактно и неудобно набирать !
Все языки эквивалентны машине Тьюринга, но не значит, что на них одинаково удобно работать. В Форте можно определить нужный синтаксис и всякие механизмы вроде сборки мусора, не представляю как это делать на макропроцессоре поверх ассемблера, вероятно можно, но результат никто не поймёт.
В-третьих, если так хочется можно определить нужную грамматику поверх Форта, но останется возможность определять что угодно прямо на машине, а не на С++ компиляторе чёрт знает на каком компьютере.

Иосиф Каршенбойм.
Использование программы «Трепатор» для написания статей в ручном режиме (Полусказка)
http://iosifk.narod.ru/trepator.pdf

P.S. Может есть и другие методики.

Есть ли в диалекте Каллисто что то специфичное для МК-161, что надо, чтобы он так же работал на другой архитектуре ???

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

Каллисто Классик это 302 слова, из которых 172 являются примитивами. Для переноса на другую архитектуру надо переписать эти 172 слова на местном ассемблере. Примерно 6 человеко-месяцев труда.

Каллисто-2 изначально будет разрабатываться, как мультиплатформа. То есть 172 (или сколько там их будет) примитива получат обработчики на разных платформах, а высокоуровневая часть станет платформно-независимой.

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

AtH wrote: Каллисто-2 изначально будет разрабатываться, как мультиплатформа.

А будут ли добавлены оптимизационные стратегии (или оптимизатор) в мультиплатформу?

Пока из оптимизации в Каллисто-2 планируется ;- для хвостовой рекурсии, которая уже используется в исходнике Каллисто Классик.

Исходный код версии 1.0 опубликован. Посмотрите, где какие стратегии окажутся полезными. Я учитываю обратную связь при разработке 2.0

Сейчас в 2.0 приоритет перевести транслятор с языка МК-161 на SP-Forth, подготовив путь до метакомпиляции в будущих версиях. Попутно решив, помимо прочего, проблемы с производительностью компилятора на платформе языка МК-161 (в поле имени планируется хэш) и добавив ряд новых платформ вроде МК51 и 8086.

Исходный код 2.0 тоже будет опубликован. Так что любой желающий сможет развлекаться, добавляя свои платформы и те технологии, которыми владеет.

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

Fex ↑ F1/x − 2 ÷ С/П БП 00

Она же на Каллисто:

: sh ex ↑ 1/x − 2 ÷ . ;

Вычисляется гиперболический синус sh(x), при этом сама вычислительная часть "ex ↑ 1/x − 2 ÷" одинакова как на ПМК, так и на Каллисто. Чуть отличается только обрамление — точка для вывода на экран вместо С/П для приостановки вычислений. В библиотечном варианте (чтобы вызывать из других программ) этой точки нет.

Пример взят из учебной статьи «Простые программы на Каллисто».