Retroforth, Retroforth... Удивительно мне смотреть на его восхваления. Не то чтобы я ошущал какие-то к нему личные неприязни, но, но, но...
Цель я понял так -- "разрушить всё до основанья и новый, лучший, мир построить". То есть те вещи которые они не понимали (принимали), ребята решили выкинуть. Прийти к истокам. Отсюда, видимо и название.
При этом и без того исключительная распылённость фортеров только не снижается а только ещё больше растёт. Ведь даже
семейство Retroforth уже довольно обширно: Reva, HelFORTH (с недо-оптимизатором, кстати), 4p, QuickForth, и т.д. и т.п.
И насчёт "идей". Ничего нового там нет. Большинство идей в системах и в их реализациях взяты из концептуальных MachineForth и ColorForth Чака Мура (словари forth и macro, раскладка по регистрам и применение lodsd как drop, ; как EXIT, включение видимости слова во время его определения).
При этом всё богатство всё ещё так и остаётся инструментом не работы, но сублимации и самореализации (хотя и не без исключений в виде иглоточечных внедрений энтузиастов).
По сути, есть только одна форт-система (буду рад узнать что ошибаюсь), применяемая на промышленной основе для программ "из этой жизни" --
SPF. Программы с десяткотысячными аудиториями, соответственно: nnCron и eServ. При этом система больше чем за десятилетие медленно но верно заточилась под нужды программ которые писали на SPF (например, для HTTP/FTP/SNMP/IMAP/ЧЁЕЩЁТАМ-сервера eServ написаны/промышленно-отлажены были доселе не существовавшие в природе Форта средства для работы с протоколами интернета). Это кстати и не очень хорошо, но вот например
SPF_DEVEL должен давать некоторое представление.
И для желающих концептуально-пальцы-веером идей, например есть bac4th, ForthML (хотя у этого-то как раз перспективы более чем вдохновляющие для полезных применений за счёт представления исходников в виде XML). Или вот, на днях например, сляпал подключаемой библиотекой к SPF
ещё один вариант colorForth'а, нечто среднее между Питоном и Фортом (чисто прикола для). Пример кода для факториала:
fact ( n -- fact(n)
1 SWAP \ Ставим аккумулятор на стек внутренней функции
$0 ( acc n ) \ Метка
?DUP 0= if \ Краевой случай "рекурсии" (он же условие выхода из цикла)
return
TUCK * SWAP 1-
$0 return \ Это GOTO $0 , по-сути
Генерируемый код (заодно и на результат работы оптимизатора SPF'а посмотрите):
565470 C745FC01000000 MOV FC [EBP] , # 1
565477 8D6DFC LEA EBP , FC [EBP]
56547A 0BC0 OR EAX , EAX
56547C 7406 JE 565484
56547E 8945FC MOV FC [EBP] , EAX
565481 8D6DFC LEA EBP , FC [EBP]
565484 0BC0 OR EAX , EAX
565486 8B4500 MOV EAX , 0 [EBP]
565489 8D6D04 LEA EBP , 4 [EBP]
56548C 0F8501000000 JNE 565493
565492 C3 RET NEAR
565493 8B5500 MOV EDX , 0 [EBP]
565496 894500 MOV 0 [EBP] , EAX
565499 8955FC MOV FC [EBP] , EDX
56549C F76DFC IMUL FC [EBP]
56549F 8B5500 MOV EDX , 0 [EBP]
5654A2 894500 MOV 0 [EBP] , EAX
5654A5 8D42FF LEA EAX , FF [EDX]
5654A8 E9CDFFFFFF JMP 56547A