Инструменты пользователя

Инструменты сайта


ru:projects:nova-forth

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
Последняя версияСледующая версия справа и слева
ru:projects:nova-forth [2019-01-16 14:35] victorru:projects:nova-forth [2019-02-02 05:23] – [Особенности системы] victor
Строка 1: Строка 1:
-=== Nova-forth ==== +====== Nova-Forth ====== 
-32-битная нативная форт-система для ОС Windows. +32-битная нативная форт-система для ОС Windows. 
-На развитие системы повлияли: SP-Forth+
  
-=== Особенности системы ====+====== Особенности системы ======
   * Система генерирует машинный (native) код.   * Система генерирует машинный (native) код.
-  * Каждый словарь может иметь свой обработчик не распознанных строк.+  * Каждый словарь может иметь свой обработчик нераспознанных строк.
   * В словарях используется хешированный поиск, дополнительно поиск ведётся по 4 цепочкам вместо 1.   * В словарях используется хешированный поиск, дополнительно поиск ведётся по 4 цепочкам вместо 1.
   * Можно задать свои собственные инлайн-примитивы, пометив созданное слово флагом INLINE.   * Можно задать свои собственные инлайн-примитивы, пометив созданное слово флагом INLINE.
-  * В поставку форт-системы входятоптимизатор и препроцессор (подключаются отдельно).+  * В поставку форт-системы входят оптимизатор и препроцессор (подключаются отдельно).
   * Имеется стек окружений, который используется для поиска подключаемых файлов.   * Имеется стек окружений, который используется для поиска подключаемых файлов.
  
 +Родоначальником Nova-Forth является другой российский форт [[ru:projects:sp-forth|SP-Forth]]. Но от последнего Nova отличается прежде всего частым использованием откатных операций и более активным использованием словарей. 
 +
 +Также Nova-Forth не придерживается стандартов, поэтому в ней хватает нестандартных слов.
 +Некоторые из них:
 +  * RALLOT ''byte -- addr'' выделить память в байтах на стеке возвратов и дать указатель на неё, на стеке возвратов также имеется метка для отката памяти (можно сделать, к примеру ''R> RP!''
 +  * RPICK ''n -- b'' положить на стек данных значение отстающее от вершины стека возвратов на **n** ячеек
 +  * MOVE->R ''addr u -- Raddr u'' выделить память на стеке возвратов под строку и перенести её туда, положить на стек данных аказатель на строку и её длину. На стеке возвратов также имеется метка для отката памяти
 +  * 2MOVE->R ''addr1 u1 addr2 u2 -- Raddr u1+u2'' выделить память на стеке возвратов, чтобы туда поместились 2 строки, и в выделенной памяти "сложить" эти строки. Положить на стек данных указатель на новую строку и её длину. На стеке возвратов также имеется метка для отката памяти  
  
ru/projects/nova-forth.txt · Последнее изменение: 2019-02-05 16:19 — victor