Skip navigation.

проФорт

Форт и всё такое

Эвересты и Марианские жёлобы Форта

,

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

С одной стороны на Форте можно писать так (отрывок из сканера по HTML):

...
в-тексте
на-входе:  отсюда начать-копить ;
все:  копить-дальше ;
\ перевод-строки: внести-текст  отсюда начать-копить ;
символ: <  внести-текст в-ожидании-имени-тэга ;
строка-кончилась:  внести-текст ;

: от-конца-накопленного-текста
накопленный-текст 2@ + начать-копить
отсюда протянуть вернуть-букву
накопленный-текст запомнить
прописать-текстовый-узел ;

в-ожидании-имени-тэга
все:  вернуть-букву  в-имени-тэга ;
символ: ! пропустить-атрибуты ;
символ: >  от-конца-накопленного-текста в-тексте ;
символ: /  в-имени-закрывающегося-тэга ;
строка-кончилась:  от-конца-накопленного-текста ;
...


С другой стороны, можно так (это другой отрывок, из реализации бэктрэкинга на SPF):

...
: R@ENTER, SetOP 0xFF C, 0x14 C, 0x24 C, SetOP ;
: PRO R> R> >L ['] LDROP >R >R ;
: CONT L> >R [ R@ENTER, ] R> >L ;
...


Первое является прототипирующим Эверестом (и на самом деле, этот код в виде диаграмм автоматов у меня был нарисован ещё до того как я даже начал делать реализацию конечных автоматов на SPF, впрочем я отвлёкся). Второе -- настоящий Марианский жёлоб, нижайший уровень -- непосредственная компиляция машинного кода и манипуляции со стеком возвратов.

Вследствие этого проскакивали даже мнения что Форт следует называть не языком высокого уровня или языком низкого уровня, а положить в специальную, эксклюзивную категорию языков среднего уровня, в которой дозволяется как писать и на Эвересте, пиша очень "высокий" код (переносимый, кросс-платформенный, векторизируемый, аспектный, объектный и вообще весь из себя), так и в Марианском жёлобе, используя "грязные" хаки, завязанные на побочных эффектах текущей архитектуры, платформы, ОС.

Это естественное следствие того что в Форте практически нет запретов на процесс компиляции, нет никаких запретов на структуру самого компилятора, и поэтому можно спускаться вплоть до ножек процессора, под самый термоклей. Хорошо это или плохо есть разные мнения, но то что эта возможность даёт исключительные возможности Форту -- факт.

Ссылки по теме:

КодофайлPython Challenge 0-5

Comments

Aleksey Elin 23. March 2007, 22:20

На самом деле, описанный разрыв между "эверестом" и "...жёлобом" наблюдается в большинстве современных промышленных языков. На том же "чистом" Си легко можно писать как переносимый код, так и код "жестко использующий" особенности конкретного копилятора. Сегодя подобная возможность МАСШТАБИРОВАНИЯ языка - основной критерий становления его как ПРОМЫШЛЕННОГО.
Конечно, далеко не каждый язык позволяет расширять возможности собственного компилятора (особенно так легко как ФОРТ), но все чаще и чаще это становится возможным (.NET, BlackBox...).
И тут встает вопрос: СТОИТ ЛИ РАДИ Р_А_С_Ш_И_Р_Я_Е_М_О_С_Т_И ЖЕРТВОВАТЬ ТИПИЗАЦИЕЙ :smile: ? Особенно если она (типизация) в случае необходимости может быть обойдена?

Azamadt Smaguloff 24. March 2007, 08:02

Ну, едва ли какой-то другой язык так легко даст доступ к допустим к стеку возвратов, не говоря уже об акробатике в нём (что показано в коде "нижнего" мира)... Причём в не виртуальной машине, а стеку возвратов (ESP который) из настоящего процессора.

По поводу вопроса о оправданности уничтожения понятия "типизация": тут разные личные мнения. В "Не пущать! vs Хай будэ" я выразил своё личное мнение, что введение ограничений (типизация и т.д.) порождает и необходимость обхода их, и снежным комом порождает новые ограничения. Всё это надо специфицировать (разработчикам стандартов), реализовывать (писателям трансляторам), учить (рядовым программистам).

Впрочем я вполне понимаю, что моё мнение может показаться оторванным от реальности, или несколько экстремистским.

How to use Quote function:

  1. Select some text
  2. Click on the Quote link

Write a comment

Comment
(BBcode and HTML is turned off for anonymous user comments.)

If you can't read the words, press the small reload icon.


Smilies