Просмотр полной версии : Форт-компиляторы для спектрумсовместимых компьютеров. Изучение возможностей.
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
Но может поддерживаться "из коробки" не всеми Фортами.
И вот вопрос - как на форте делать вызов машинного кода?
Если нужно вызвать что-либо по какому-то адресу, то так: <адрес> EXECUTE
Но проблема в том, что это не всегда так (на вход этому слову нужно дать execution token, а это не всегда адрес машинного кода, зависит от реализации форта), к тому-же обычно нужны параметры в регистрах, а не в стеке.
Поэтому лучший вариант это вызывать через определение CODE END-CODE, но сначала нужно подгрузить форт-ассемблер (где собственно и определены эти слова).
- - - Добавлено - - -
Вот тут пример реализации встроенного ассемблера (из книги Баранова-Ноздрунова): https://gudleifr.forum2x2.ru/t120p25-topic#2067
Вот неплохой цикл статей на Хабре "Байт-машина для форта (и не только) по-индейски"про реализацию FORTH на ассемблере. Правда чувак кажется замучался и в результате не довел дело до конца! И второе, что поскольку это ассемблер x64 и Linux, то при другой паре придется многое менять. Но технология "индейцев" от программирования раскрыта. Мне такие статьи импонируют. Сам когда-то писал в таком стиле про Blackfin.
Smalovsky
18.07.2022, 00:08
На страницу камелфорта можно попасть через сайт z88forever.org с раздела софт. На вики камела написали что есть еще версия для спектрума +3.
Я еще ничего не изучал. Посмотрел демо на форте в эмуляторе спринтера.
Пишите о компиляторах форта, описывайте их возможности. Мне странна сама постановка вопроса, поскольку язык форт не предполагает использование каких-либо компиляторов.
Форт - это интерпретатор+компилятор два в одном, у него иная идеалогия программирования, чем вы думаете.
Прежде чем задавать вопрос, почитайте Броуди хотя бы...
Форт - это интерпретатор+компилятор два в одном, у него иная идеалогия программирования, чем вы думаете
скажем так, чтобы исполняться на каком-либо процессоре он(она Форт-система) ведь в конечном итоге генерит кодовые последовательности данного процессора. А чтобы выполняться в рамках конкретной операционки( если он конечно сам собой ее не замещает), он должен генерить и обращения к соответствующим системным вызовам.
Теперь усложним задачу. Создадим режим, в котором он не просто "просматривает" коды текста из файла с FORTH программой и последовательно их выполняет, а генерит целиком ядро и расширения для другой пары проц+операционка и выдает это все в выходной файл, который потом запускается на назначенном cpu+os и пользователь не чувствует существенных различий принципиально. Понятно, что они могут быть и существенными из-за разной организации памяти, возможностей графики, звука и прочее. Но задача разработчика тогда ограничится тем, что не различается столь существенно.
Создадим режим, в котором он не просто "просматривает" коды текста из файла с FORTH программой и последовательно их выполняет, а генерит целиком ядро и расширения... Форт так не работает, он компилирует каждое слово в момент его описания. Пожалуйста полистайте Броуди.
P.S. форт не предполагает написание длинных простыней с исходниками и последующей компиляции или интерпретации.
Вы описываете очередное слово и сразу же запускаете его на выполнение, чтобы проверить, правильно оно работает или нет.
Конечно, в конце-концов вы можете вывалить всю получившуюся программу в виде форт-текста, но в этом нет необходимости и принцип написания программы другой...
форт не предполагает написание длинных простыней с исходниками и последующей компиляции
Но ведь есть же такое понятие, как целевая компиляция. Это когда форт создаёт другой форт, возможно для другой платформы, от первого и до последнего байта, а затем сохраняет этот кусок памяти на диск.
DX-Forth так и делает словом TURNKEY. Получается просто исполняемый .com-файл. Если есть скрипт, в котором написано что-нибудь типа "include main.fs turnkey main.com", это получается все равно компиляция "длинных простыней" в выполняемый файл. По-моему попытки называть это какими-то специальными форт-специфическими терминами только отпугивают людей. Они больше отражают специфику работы с форт-системой современной изобретению форта, но сейчас никто не обязан ее придерживаться.
Форт так не работает, он компилирует каждое слово в момент его описания. Пожалуйста полистайте Броуди.
выше давал ссылку на цикл статей. Чувак шаг за шагом реализовывал Форт на ассемблере х64 для Linux. Там все подробно расписано и проиллюстрировано. Ключевые слова из словаря сразу реализуются в виде подпрограмм на ассемблере. А вот слова пользователя, когда он расширяет словарь действительно уже на основе ключевых слов. И пользователь имеет возможность выполнять свой форт-код как в виде отдельных слов и их последовательностей, вводя их с клавиатуры, так и запустив файл с этими строками на выполнение! Да это похоже на интерпретацию-компиляцию. Но это не мешает нам сделать так, как я выше описал. Форт обрабатывает данные! Даже когда эти данные суть форт-код. В этом случае достаточно поменять словарь ключевых слов, чтобы там были строки кода для нужного процессора и нужные системные вызовы. Нет?
- - - Добавлено - - -
Они больше отражают специфику работы с форт-системой современной изобретению форта, но сейчас никто не обязан ее придерживаться.
конечно! Хотя и тогда можно было сделать нечто подобное. На vax, например, для Altair.
Но ведь есть же такое понятие, как целевая компиляция. Это когда форт создаёт другой форт, возможно для другой платформы, от первого и до последнего байта, а затем сохраняет этот кусок памяти на диск. Думаю это возможно и даже интересно, но я с такими форт-системами не работал и не знаю, существуют ли они...
В этом случае достаточно поменять словарь ключевых слов, чтобы там были строки кода для нужного процессора и нужные системные вызовы. Нет? Идея интересная, но боюсь реализация не получится такой простой из-за отличий в архитектуре. В форте из последующих слов вызываются предудущие и при этих вызовах должно чётко совпадать состояние стека. В одной архитектуре в стек должны класться одни парамеры, в другой другие... Сам я писал только на классическом форте, больше ничего сказать не могу.
И ещё, одно из преимуществ форта - можно заниматься отладкой только что введённых слов, не дожидаясь написания всей программы. При предлагаемых здесь подходах такое становится невозможным...
Smalovsky
18.07.2022, 18:22
В микроконтроллерном деле распространены форткомпиляторы, которые работают как классические компиляторы для компиляция в хекс( бин). Например, AVRForth такой же компилятор для Avr как си или баском.
Поэтому взгляд, что форт это как бы интерпретатор уже устарел.
Да ничего там не может устареть! Главное погружаясь в эту тему самому не чокнуться! Рвет шаблоны любому программисту! Поскольку FORTH, оказывается, безграничен как плесень или грибы. И как я и предполагал прицепляется к чему угодно. К jscript вот и то прикрутили! Для того, чтобы запускаться в любом браузере и где угодно без переделок. Правда возникает вопрос от программирующего на jscript
"а нафига?"
Только z80 и ZX Spectrum все сумасшедшие фортмены на форуме от Ивана Макарченко (http://fforum.winglion.ru/viewforum.php?f=39) почему-то не жалуют.
почему-то не жалуют.
Ну почему-же, есть у них соответствующая тема: 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К.
А описание где-то есть? Хотелось бы посмотреть, как с графикой работает или пп бейсика. Нашел, спасибо! Теперь бы "Как написать игру на Abersoft FORTH?" какую-нибудь почитать. В эмуляторе Unreal Speccy Portable все запустилось. Другие не пробовал.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot