Вход

Просмотр полной версии : Форт-компиляторы для спектрумсовместимых компьютеров. Изучение возможностей.



Smalovsky
16.07.2022, 09:24
Топик создал для тех кто хочет программировать на форте. И сразу надо начать с главного вопроса - выбор компилятора и целевой платформы.
Так как кросскомпилятора сейчас нет, будем расматривать нативные. Лучший выбор, думаю, будет кп/м компилятор с возможностью получать машинный код с запуском по произвольному адресу, так как на таком компиляторе можно делать программы для обычного спектрума. Но программирование для обычного спека не цель, поэтому надо рассматривать другие платформы: Профи, Спринтер, Кворум, АТМ Турбо. Интересно, есть ли свой форт для спектрума +3?
Пишите о компиляторах форта, описывайте их возможности.

Smalovsky
16.07.2022, 20:45
Нашел для Спринтера компилятор CamelForth основанный на стандарте ANS 1994. Сильно ли устарел компилятор? И вот вопрос - как на форте делать вызов машинного кода?

Oleg N. Cher
17.07.2022, 00:00
CODE <имя> <машинный-код> END-CODE, где «имя» является именем определяемого слова, а «машинный-код» — записью его реализации в машинном коде в соответствии с принятыми соглашениями.

http://www.netlib.narod.ru/library/book0001/ch02_06.htm

Но может поддерживаться "из коробки" не всеми Фортами.

b2m
17.07.2022, 16:26
И вот вопрос - как на форте делать вызов машинного кода?
Если нужно вызвать что-либо по какому-то адресу, то так: <адрес> EXECUTE
Но проблема в том, что это не всегда так (на вход этому слову нужно дать execution token, а это не всегда адрес машинного кода, зависит от реализации форта), к тому-же обычно нужны параметры в регистрах, а не в стеке.

Поэтому лучший вариант это вызывать через определение CODE END-CODE, но сначала нужно подгрузить форт-ассемблер (где собственно и определены эти слова).

- - - Добавлено - - -

Вот тут пример реализации встроенного ассемблера (из книги Баранова-Ноздрунова): https://gudleifr.forum2x2.ru/t120p25-topic#2067

andrews
17.07.2022, 21:41
Вот неплохой цикл статей на Хабре "Байт-машина для форта (и не только) по-индейски"про реализацию FORTH на ассемблере. Правда чувак кажется замучался и в результате не довел дело до конца! И второе, что поскольку это ассемблер x64 и Linux, то при другой паре придется многое менять. Но технология "индейцев" от программирования раскрыта. Мне такие статьи импонируют. Сам когда-то писал в таком стиле про Blackfin.

Smalovsky
18.07.2022, 00:08
На страницу камелфорта можно попасть через сайт z88forever.org с раздела софт. На вики камела написали что есть еще версия для спектрума +3.
Я еще ничего не изучал. Посмотрел демо на форте в эмуляторе спринтера.

krotan
18.07.2022, 10:50
Пишите о компиляторах форта, описывайте их возможности. Мне странна сама постановка вопроса, поскольку язык форт не предполагает использование каких-либо компиляторов.
Форт - это интерпретатор+компилятор два в одном, у него иная идеалогия программирования, чем вы думаете.
Прежде чем задавать вопрос, почитайте Броуди хотя бы...

andrews
18.07.2022, 11:34
Форт - это интерпретатор+компилятор два в одном, у него иная идеалогия программирования, чем вы думаете
скажем так, чтобы исполняться на каком-либо процессоре он(она Форт-система) ведь в конечном итоге генерит кодовые последовательности данного процессора. А чтобы выполняться в рамках конкретной операционки( если он конечно сам собой ее не замещает), он должен генерить и обращения к соответствующим системным вызовам.

Теперь усложним задачу. Создадим режим, в котором он не просто "просматривает" коды текста из файла с FORTH программой и последовательно их выполняет, а генерит целиком ядро и расширения для другой пары проц+операционка и выдает это все в выходной файл, который потом запускается на назначенном cpu+os и пользователь не чувствует существенных различий принципиально. Понятно, что они могут быть и существенными из-за разной организации памяти, возможностей графики, звука и прочее. Но задача разработчика тогда ограничится тем, что не различается столь существенно.

krotan
18.07.2022, 12:04
Создадим режим, в котором он не просто "просматривает" коды текста из файла с FORTH программой и последовательно их выполняет, а генерит целиком ядро и расширения... Форт так не работает, он компилирует каждое слово в момент его описания. Пожалуйста полистайте Броуди.

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

b2m
18.07.2022, 14:50
форт не предполагает написание длинных простыней с исходниками и последующей компиляции
Но ведь есть же такое понятие, как целевая компиляция. Это когда форт создаёт другой форт, возможно для другой платформы, от первого и до последнего байта, а затем сохраняет этот кусок памяти на диск.

svofski
18.07.2022, 15:00
DX-Forth так и делает словом TURNKEY. Получается просто исполняемый .com-файл. Если есть скрипт, в котором написано что-нибудь типа "include main.fs turnkey main.com", это получается все равно компиляция "длинных простыней" в выполняемый файл. По-моему попытки называть это какими-то специальными форт-специфическими терминами только отпугивают людей. Они больше отражают специфику работы с форт-системой современной изобретению форта, но сейчас никто не обязан ее придерживаться.

andrews
18.07.2022, 15:05
Форт так не работает, он компилирует каждое слово в момент его описания. Пожалуйста полистайте Броуди.
выше давал ссылку на цикл статей. Чувак шаг за шагом реализовывал Форт на ассемблере х64 для Linux. Там все подробно расписано и проиллюстрировано. Ключевые слова из словаря сразу реализуются в виде подпрограмм на ассемблере. А вот слова пользователя, когда он расширяет словарь действительно уже на основе ключевых слов. И пользователь имеет возможность выполнять свой форт-код как в виде отдельных слов и их последовательностей, вводя их с клавиатуры, так и запустив файл с этими строками на выполнение! Да это похоже на интерпретацию-компиляцию. Но это не мешает нам сделать так, как я выше описал. Форт обрабатывает данные! Даже когда эти данные суть форт-код. В этом случае достаточно поменять словарь ключевых слов, чтобы там были строки кода для нужного процессора и нужные системные вызовы. Нет?

- - - Добавлено - - -


Они больше отражают специфику работы с форт-системой современной изобретению форта, но сейчас никто не обязан ее придерживаться.
конечно! Хотя и тогда можно было сделать нечто подобное. На vax, например, для Altair.

krotan
18.07.2022, 15:26
Но ведь есть же такое понятие, как целевая компиляция. Это когда форт создаёт другой форт, возможно для другой платформы, от первого и до последнего байта, а затем сохраняет этот кусок памяти на диск. Думаю это возможно и даже интересно, но я с такими форт-системами не работал и не знаю, существуют ли они...


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

Smalovsky
18.07.2022, 18:22
В микроконтроллерном деле распространены форткомпиляторы, которые работают как классические компиляторы для компиляция в хекс( бин). Например, AVRForth такой же компилятор для Avr как си или баском.
Поэтому взгляд, что форт это как бы интерпретатор уже устарел.

andrews
18.07.2022, 20:30
Да ничего там не может устареть! Главное погружаясь в эту тему самому не чокнуться! Рвет шаблоны любому программисту! Поскольку FORTH, оказывается, безграничен как плесень или грибы. И как я и предполагал прицепляется к чему угодно. К jscript вот и то прикрутили! Для того, чтобы запускаться в любом браузере и где угодно без переделок. Правда возникает вопрос от программирующего на jscript
"а нафига?"

Только z80 и ZX Spectrum все сумасшедшие фортмены на форуме от Ивана Макарченко (http://fforum.winglion.ru/viewforum.php?f=39) почему-то не жалуют.

b2m
19.07.2022, 14:55
почему-то не жалуют.
Ну почему-же, есть у них соответствующая тема: Forth и ZX Spectrum (http://fforum.winglion.ru/viewtopic.php?f=40&t=32), последнее сообщение датируется 2021-м годом.

Оттуда я вышел на Abersoft FORTH (https://worldofspectrum.org/archive/software/utilities/forth-abersoft), вполне рабочий даже на 48К.

andrews
19.07.2022, 17:53
А описание где-то есть? Хотелось бы посмотреть, как с графикой работает или пп бейсика. Нашел, спасибо! Теперь бы "Как написать игру на Abersoft FORTH?" какую-нибудь почитать. В эмуляторе Unreal Speccy Portable все запустилось. Другие не пробовал.