OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 14:08

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Транслятор Oberon-0 в ARM FORTH
СообщениеДобавлено: Четверг, 07 Июль, 2016 10:26 

Зарегистрирован: Понедельник, 12 Декабрь, 2005 22:44
Сообщения: 85
Откуда: С.-Петербург
Приглашаю к активному обсуждению и помочь грамотно реализовать транслятор.

Задача: Учебный Oberon-0 использовать для трансляции в исходный код языка FORTH.

"...
Mecrisp-Stellaris - A native code Forth implementation for ARM-Cortex M microcontrollers. Copyright (C) 2013 Matthias Koch

Не шитый код, а нативный (оптимизирующий) компилятор. Ядро занимает около 12Кбайт.
Неубиваемый - 16Кбайт сегмент с ядром защищен от стирания\записи. Флэш всегда можно почистить до исходного состояния командой eraseflash ( -- ) Erases everything. Clears Ram. Restarts Forth.

Имеются нестандартные слова, реализующие особенности микроконтроллера Cortex-M (eraseflash - одно из них).

Компилирует либо во флэш либо в озу (compiletoflash\compiletoram) - очень удобно.

Разработка\тестирование ведется в озу, отлаженный код сбрасывается во флэш.

В прилагаемых "библиотеках" среди прочего имеются такие замечательные штуки как дизассемблер и Cooperative Multitasking - практически операционная система.

http://mecrisp.sourceforge.net/
..."

Несколько дней тестирую реализацию Mecrisp-Stellaris для STM32F100. Реализация FORTH выполнена на ассемблере (здравствуйте 50-е годы!).

Mecrisp-Stellaris Forth запустился. Кое-какие примеры работают. Однако плохо сделана обработка чтения исходных файлов на языке Forth через последовательный порт. Контроля потока данных нет и при переполнении возникает хаотичное поведение. Нужно переписывать USART реализацию обработки входного потока форт-слов.

Возможно уже кто-то пытался делать транслятор.

Для компиляторов Oberon-0 Н.Вирта и компилятора "О" С.З.Свердлова (кстати он дал согласие на использование исходных кодов компилятора) не сложно транслировать в слова реализации Mecrisp-Stellaris Forth.

1. Mecrisp-Stellaris is the younger sister of Mecrisp and runs on various ARM Cortex M chips //[электронный ресурс] .- http://mecrisp.sourceforge.net/
2. Свердлов С.З., Конструирование компиляторов. (учебное пособие) //[текст] .- 2015 .- изд. LAM Lambert .- 571 с. - http://www.uni-vologda.ac.ru/~c3c/Compi ... %20version).pdf


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор Oberon-0 в ARM FORTH
СообщениеДобавлено: Четверг, 07 Июль, 2016 13:06 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
Распарсить Oberon-0 и не сразу генерировать код, а создать синтаксическое дерево. Затем пройтись по синтаксическому дереву и "распечатать" его, используя команды FORTH.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор Oberon-0 в ARM FORTH
СообщениеДобавлено: Пятница, 08 Июль, 2016 11:07 

Зарегистрирован: Понедельник, 12 Декабрь, 2005 22:44
Сообщения: 85
Откуда: С.-Петербург
Rifat писал(а):
Распарсить Oberon-0 и не сразу генерировать код, а создать синтаксическое дерево.


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

Определился с Forth движком. Вернулся к Ngaro VM.

Есть хороший и полный информационный ресурс http://forthworks.com/retro/, автор Charles Childers.

Важно, что ядро виртуальной машины можно использовать для различных языков программирования:

Ngaro VM Implementation Status ( http://retroforth.org/docs/pdf/Implementations.pdf ): Assembly, C, C#, F#, Forth, Go, Lisp, Java, Lua, Perl, PHP, Python, Retro, Ruby, Scheme, JavaScript.

В дереве исходных кодов Ngaro VM имеется реализация для микроконтроллеров:

1) LPC1768 ( The mbed board used is the LPC1768, which has an ARM processor, 32 KiB of RAM, and 512 KiB of flash memory.)
2) AVR Arduino ( mega2560, mega328p, )
3) pic32 для проекта retroBSD.


Получится симпатичная технология кросс-платформенного программирования и переноса пользовательских алгоритмов.

Ссылки:
1. Charles Childers, Retro is a concatenative, stack based language with roots in Forth. //[электронный ресурс] .-http://forthworks.com/retro/

Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор Oberon-0 в ARM FORTH
СообщениеДобавлено: Пятница, 08 Июль, 2016 23:57 

Зарегистрирован: Понедельник, 12 Декабрь, 2005 22:44
Сообщения: 85
Откуда: С.-Петербург
RetroForth тестирование

Машина. Linux 3.13.0-91-generic x86_64 x86_64 x86_64 GNU/Linux

Вспомнил! С года полтора назад тестировал RetroForth.

Проект собрался в gcc.

Увы, примеры не заработали нормально.

Игра 'Life' не сработала. Запустил язык 'BASIC' - какой-то хаос. Часто после нажатие на пробел выполняется переход на следующую строку. 'EDITOR' запустился. Но почему-то срабатывает не на клавишу TAB, а на ESC код. Конечно без описание и help использовать даже простые примеры трудно.

Для генерации retImage нового слова из примеров fib.rx загрузка RetroForth "приказала долго жить".

Удивительно, что с 2009 года Ngaro VM словно в начале пути.

Может я что-то не так делаю!? :)

Конечно варианты Forth машин я проверял разные. У всех одна хроническая беда - при любой неточности всё сваливается и разобраться в причинах трудно.

Может другой проект для ARM FORTH будет более удачный?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор Oberon-0 в ARM FORTH
СообщениеДобавлено: Воскресенье, 10 Июль, 2016 10:38 

Зарегистрирован: Понедельник, 12 Декабрь, 2005 22:44
Сообщения: 85
Откуда: С.-Петербург
Тупиковая задача. Финиш.

Ещё раз "погрузился" в форт-системы. Испытал несколько систем: RetroForth, GForth, Mecrisp-Stellaris Forth. Посмотрел видео с конференций по Forth (пенсионеры все, как я, практически). Перечитал книги по форт-системам.

С форума: http://www.compiler.su/pochemu-obrechyon-yazyk-fort.php

Почему обречён язык Форт

Цитата:
Изучая язык Форт, поражаешься его простоте на грани примитивности и скорости, с которой растёт «мощь» программ. Его простота — в его концепциях, в его «внутренностях», в «дешевизне» средств, которыми можно решать сложнейшие задачи.

Что отталкивает в языке? Обратная польская запись, текст без бросающихся в глаза ориентиров… Говорят, что компилятором Форт-программы является Форт-программист. Но это — дело привычки, достаточно сделать усилие над собой, «вывернуть мозги наизнанку» — и становится легче.

Потенциально Форт — отличный кандидат для создания мультиплатформенных систем: систем операционных и систем программирования. Его ядро состоит из 200-400 слов (от 2 до 16 Кб). Написав такой маленькое ядро на ассемблере, мы получаем Форт-систему целиком плюс множество программ на Форте, которое имеем в своём распоряжении. Но имеем, к сожалению, не много…

Форт — «вещь в себе», он и не слишком нуждается в операционной системе и даже может её заменить.

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

Заманчиво? Перспективно? Да. Но такой заманчивости уже свыше 40 лет… А сколько было у Форта шансов? Последний из них — это волна мобильных устройств, где были востребованы свойства именно Форта: компактность, «автономность» и «независимость» от ОС (и потенциальная способность заменить собою эту ОС).

И что же? Этот шанс был так же упущен так же, как и предыдущие. Вряд ли в будущем Форт займёт более-менее значимую нишу. Ведь он так и не смог найти её за прошедшие 40 лет.


Цитата:
2013/10/14 15:45, автор: Автор сайта
Но это не отменяет того факта, что Форт не популярен. Написаны ли на нём ОС, браузеры? Из массы ПО, которым пользуюсь я, нет ничего, что было бы написано на Форте. Не очень его жалуют разработчики. Непривычная обратная польская запись, да много чего непривычно Меня всегда удивляло – почему в учебниках по Форту пишут, что это третий по популярности язык? Такого не было ни в 70-х, ни в 80-х годах, ни тем более сейчас. Есть масса языков с привычной формой записи, никому не охота возиться с обратной польской записью: «Вам что, трудно было сделать нормальные операторы?». Форт потенциально кроссплатформен, а есть ли на нём кросплатформенный GUI типа Qt?

А вот внутреннее устройство Форта мне симпатично. Мне кажется, технологию шитого кода недооценили. Ведь она тоже потенциально кроссплатформена!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор Oberon-0 в ARM FORTH
СообщениеДобавлено: Воскресенье, 10 Июль, 2016 14:06 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
vladfind писал(а):
Тупиковая задача. Финиш.
Я в последнее время хобби-проект делаю на языке Factor.
Автор, презентация, сайт, вики о разном, GitHub.
Язык и библиотеки продолжают развиваться, исправляются ошибки и т.п.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор Oberon-0 в ARM FORTH
СообщениеДобавлено: Понедельник, 11 Июль, 2016 14:27 

Зарегистрирован: Понедельник, 12 Декабрь, 2005 22:44
Сообщения: 85
Откуда: С.-Петербург
Александр Ильин писал(а):
vladfind писал(а):
Я в последнее время хобби-проект делаю на языке Factor.
...
Язык и библиотеки продолжают развиваться, исправляются ошибки и т.п.


Никаких шансов.

Сам по впечатлением от
А.Е. Платунов, Н.П. Постников, ВЫСОКОУРОВНЕВОЕ ПРОЕКТИРОВАНИЕ ВСТРАИВАЕМЫХ СИСТЕМ
(Часть 2) Учебное пособие

Цитата:
2.3.5 Средства прикладного пользовательского программирования
вычислителей NL1 и NL2
2.3.5.1 Виртуальная машина NL1
На основе 3-уровневой архитектурной модели [14, 15, 16] разработана
виртуальная машина 2-го уровня NL1. Действия, выполняемые в каждом ее
состоянии, описывают соответствующий список инструкций. В автомате может
быть до 16 списков, но должен присутствовать хотя бы один. Списки
индексируются с нуля. NL1 всегда начинает исполнение с нулевого списка.
Особенностью реализации NL1 является то, что селектор списка инструкций
хранится в памяти ввода/вывода, т.е. является обычной ячейкой памяти.
Система команд NL1 состоит из 19 инструкций. Все инструкции в списках
инструкций интерпретируются последовательно без пропусков. Инструкций,
управляющих порядком исполнения, нет. Инструкции оперируют константами
и ячейками памяти. В памяти ввода/вывода представлены ячейки следующих
типов:
• ячейки для управления процессом исполнения списков;
• ячейки для хранения временных результатов;
• ячейки, представляющие периферийные устройства (Peripheral).
Драйверы всех вычислительных ресурсов контроллера реализованы на
системном уровне и предоставляют интерфейс контроля и управления через
ячейки ввода/вывода.
Инструкции виртуальной машины NL1 (см. табл. 2.14) имеют
фиксированное количество операндов и их типы тоже зафиксированы.
Операндами инструкций могут быть числовые константы и адреса ячеек
памяти. При описании будут использованы следующие обозначения:
• A – значение A (числовая константа);
• [A] – значение ячейки с адресом A.
...
2.3.5.2 Виртуальная машина NL2
Проектирование эффективной ВВМ необходимо начинать с анализа
типовых прикладных задач. Типовые задачи локальных регуляторов состоят из
следующих элементарных действий:
• вычисление логических термов;
• регистровые передачи;
• вычисление арифметических выражений;
• проверка условий.
При этом сам процесс вычислений носит циклический характер или
активизируется по некоторым событиям. Ввиду отсутствия в прикладных
алгоритмах сложных структурных операторов предлагается управляющую
процедуру разбить на линейные фрагменты, исполняемые последовательно.
Линейный фрагмент программы, закодированный в последовательность
примитивов виртуальной машины, назовем нетлистом. Вся прикладная
программа в таком случае представится в виде набора нетлистов, между
которыми передается управление. Аналогичным образом во множество
нетлистов может быть переведен алгоритм, выраженный в автоматной форме.
Для реализации элементарных действий, перечисленных выше, с учетом
критериев эффективности была разработана специализированная виртуальная
машина NL2. Виртуальная машина NL2 — это регистровая машина
136
гарвардского типа. Вычислительное ядро NL2 поддерживает одну инструкцию с
конфигурируемым микрокодом. Микрокод определяет типы операндов и
систему логических функций. При выполнении инструкции может быть
использовано до 4 входных и 4 выходных операндов. NL2 предоставляет доступ
к двум адресным пространствам данных. Через пространство памяти доступны
специализированные ячейки памяти, в том числе и интерфейсы сопряжения с
объектом. Регистры предназначены для хранения временных результатов и
обеспечивают более высокое быстродействие машины за счет более высокой
скорости доступа. Виртуальная машина NL2 является масштабируемой на этапе
реализации и характеризуется четверкой параметров NARC, называемой
профилем. Профиль определяет разрядность машины N (размер ячеек памяти и
регистров), размеры адресных пространств памяти (A) и регистров (R), а также
ширину представления короткой константы (C).

На рис. 2.37 показана структура ядра виртуальной машины NL2. Видно,
что для интерпретации микрокода инструкции ядро получает до 4-х входных
операндов. Все они поступают на входы 4-х логических функций, каждая из
которых формирует один выходной результат. Таким образом формируются 4
выходных операнда. Для выполнения логических и арифметических операций
ядро виртуальной машины содержит блок предварительной обработки и блок
обратной связи. Все логические функции применяются последовательно ко
всем битам входных операндов, поэтому сложность реализации виртуальной
машины не зависит от размера машинного слова N. Алгоритм работы АЛУ NL2
представлен несложным выражением (2.1).



Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


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

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


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

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB