====== Nova-Forth ====== 32-битная нативная форт-система для ОС Windows. ====== Особенности системы ====== * Система генерирует машинный (native) код. * Каждый словарь может иметь свой обработчик нераспознанных строк. * В словарях используется хешированный поиск, дополнительно поиск ведётся по 4 цепочкам вместо 1. * Можно задать свои собственные инлайн-примитивы, пометив созданное слово флагом 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 строки, и в выделенной памяти "сложить" эти строки. Положить на стек данных указатель на новую строку и её длину. На стеке возвратов также имеется метка для отката памяти