Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Язык программирования (и ОС) ФОРТ (FORTH) 0001: пишем свой (простейший) язык


Информационный Канал Subscribe.Ru

0001: пишем свой (простейший) язык

Как я уже говорил в предыдущем выпуске рассыки -- Форт самый простой язык. В
этом выпуске я расскажу, как можно на его основе создать простейшую систему
программирования (и ОС, если движок см. далее заставить загружаться и работать
напрямую с железом).

Одновременно это будет описанием методики целевой компиляции (ЦК), описание
которой я смог найти только в английском варианте -- мой перевод статьи
Брэда Родригеса по написанию простого форт-ассемблера см. на
http://akps.ssau.ru/forth/ .

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

Вместо того чтобы искать несколько форт-систем для каждой платформы мне
оказалось проще применить подход, используемый широко известной технологией
Java (и .NET): система выполнения программ строится из нескольких слоев:

- железо и (необязательно) операционная система -- обзовем этот уровень
  хост-системой и хост-ОС соответственно

- движок на С(++), ассемблере или любом другом языке, который интерпретирует
  байт-код виртуальной стековой машины tinyVM (аналогично JVM). Архитектура
  такой (форт-)машины включает память программ и данных (фон-неймановская
  архитектура) и два стека: стек возвратов (используется только для работы
  команд CALL и RET, то есть хранения адресов возврата из вложенных вызовов)
  и стек данных (используется для передачи и временного хранения данных).

- программы в байт-коде tiny.

Байт-код -- широко применяемое в computer science понятие (см. точное
определение в сети), близкое к понятию машинного кода. Также байт-код часто
называют промежуточным представлением программы (IML), если затем он
транслируется в native машинный код целевой системы.

Байт-код может иметь любой формат команд, я ограничился только двумя:

0op: <опкод>             безоперандные команды и префиксы
1op: <опкод> <операнд>   команды с одним операндом

Для максимального упрощения кода движка я выбрал организацию памяти ВМ без
байтовой адресации:
int M[];
Слово CELL в Форте обозначает машинное слово (см. стандарт на язык), в tinyVM оно соответствует типу int в С(++). Программы для tinyVM я пишу на ассемблеро-подобном языке, очень близком с Форту. Для их компиляции использую целевой компилятор (ЦК): расширение форт-системы SP-FORTH http://spf.sf.net Использование tiny позволяет писать на Форте, но при этом - не привязываться к каким-то конкретным форт-системам (ЦК пишется за 5 минут для любой форт-системы: скорее всего потребуется только замена слов для открытия и записи файлов) - и легко встраивать интерпретатор и tiny-программы в другие программы на любых традиционных языках (для их конфигурирования и программирования пользователем) Более подробно см. следующие выпуски Полный текст tiny брать с http://akps.ssau.ru/forth/tiny/ ================ http://akps.ssau.ru forth@km.ru FidoNet SU.FORTH 2:5057/18.29 tel.: +7 8462 28 9910 (work), 15 4313 (home)

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.forth
Отписаться
Вспомнить пароль

В избранное