Pull to refresh

Comments 47

Когда-то на заре моего программизма (лет 20 назад :) довольно много повозился с Фортом (повезло, были хорошие учителя), но впоследствии этот опыт остался невостребованным и забылся. Не так давно попытался работать в своей новой предметной области (микроконтроллеры) с Фортом отсюда http://krue.net/avrforth/ - но уже мозги в другую сторону повернуты, не то.
ИМХО, если человек уже испорчен сями и джавами - то вряд ли из него получится хороший Форт-программер.
Изучение Форта может быть полезно любому программеру - появляется новый взгляд на многие вещи, тем более если человек "испорчен" С и Ява.
C и Ява - это все равно, что каменный топор и перфоратор. Разница все же очень большая будет. Как по мне - то больше, чем между C и фортом.
Для тех, кто хочет попробовать свои силы, могу посоветовать sp-forth (spf.sourceforge.net). Как раз nncron написан на нем, если не ошибаюсь, также eserv и ряд других успешных софтин. Много примеров, есть версия, как для виндоус, так и для линукс. Еще интересно, что он сам по сути написан на форте, проект опенсорсный, так что полезно и его код поизучать, чтобы лучше понять форт. Под винду есть примеры с гуи, с опенжл и работы с винапи. Огромное кол-во дополнительных либ(словарей), примеров работы с фортом(практических). Сам когда-то делал словарь для гтк(правда тоже под винду, тогда у них еще не было линуксовой версии).
Великолепный проект под девизом "лучшая документация к программе - исходный код самой программы" - сам в свое время провел немало вечеров, изучая исходники СП-Форта, узнал много нового. СП-Форт помог мне разобраться с WinAPI. Андрею Черезову респект за продолжающуюся работу над своим детищем.
Служу Советскому Союзу :)
Единственное, что я помню про Форт, так это шутку про Йоду)
Эта шутка применима не только к Форту но и к Лиспу и к любому другому языку где используеттся обратная польская нотация (да хоть язык микрокалькулятора Б3-23)
Часть в девичестве Форт-процессоров волшебным образом превратились в Ява-процессоры, когда пришло время свататься (потребовалось найти широкий рынок сбыта).
Для FreeBSD нашёл порты:
ficl-4.0.31_1 — Forth Inspired Command Language
gforth-0.6.2_2 — Fast and portable Forth system
pfe-0.32.94_1 — Implementation of ANSI Forth
С чего начать?
С теории. Большинство нужных книжек и тексты стандартов Форта вы сможете найти на http://www.forth.org.ru/
Дома книжка валяется про Форт. Помню в детстве что-то кодил на реализации для ZX-Spectrum-совместимого компьютера.
А сейчас, кстати, Форт используется в загрузчике FreeBSD.
Более того, он использовался в firmware на powerpc маках (эпплдрочеры, а вы это знали?)
странно, но http://www.forth.org.ru/ не отвечает
http://www.forth.org.ru/ живее всех живых. А насчет недоступности - это, видно, был хабраэффект - слишком много хабраюзеров захотело разобраться с Фортом.
Ох! Вспомнилось как забивал из приложения к "Юному Технику" Форт-транслятор напечатанный, как тогда водилось, в шестнадцатиричном коде. Эти 2Кб попортили мне немало нервов. Потом еще неделю искал ошибки и опечатки... Хорошее было время.
Читал книги по Форту в школе, когда постоянного доступа к компьютеру еще не было, а интерес к теме уже был :) В то время идеи этого языка меня впечатлили сильнее, чем других "нестандартных языков" - Лиспа и Пролога.
UFO just landed and posted this here
Буквально два дня назад перерывал свои архивы и наткнулся на свой интерпретатор форта, я его на 2-м курсе (1991г.) на турбо-паскале написал (ну не полную реализацию, но что-то там работало). Эх... Ностальгия...
Как-то поспорил, что сделаю мини ОС, которая будет иметь примитивный шелл с языком программирования, на котором можно писать проги и уметь работать с диском(дискетами). Условие было уложиться в 1кБ, включая загрузчик(+простой редактор командной строки) ;) Победил, по сути написав на асме Форт с набором нужных слов :)
Предлагаю вам, как знающему человеку, просветить народ.
Благо теперь вам кармы хватает для написания в личный блог. Если людям понравится топик, ваша карма быстро превысит 5 и вы сможете перенести топик в тематический блог.
UFO just landed and posted this here
Thanx. Читал с удовольствием. Но есть нюансы. Например:
Важная особенность Форта — использование стека для передачи параметров между словами, такая конструкция позволяет очень гибко и просто реализовывать сложные концепции.

Практически все распространенные современные архитектуры используют стек для передачи параметров между подпрограммами. Особенность форта в данном случае в другом: он использует два независимых стека: стек возвратов и стек данных. Именно это лежит в основе его элегантной схемы.

P.S. Странно было не услышать ни слова про Color Forth. И жаль, что не раскрыта тема DSL.
В маленькой статье невозможно описать все, а писать книгу-баян не хочется. Для более подробного изучения проблемы я дал достаточно ревалентные теме ссылки.
Пожалуйста, поделитесь в комментариях ссылками на интересные вещи, благо хабр такое позволяет.
Делюсь: Color Forth, последняя версия языка лично и персонально от Чака Мура.

В частности, по этой ссылке есть замечательная фраза об особенностях Форта:

Distinctive for its use of 2 push-down stacks. The Return stack is used for subroutine return addresses, as usual. The Data stack holds parameters for and results of subroutine calls. This distinction between control and data minimizes the cost of subroutine calls. As a result, Forth code is typically highly factored into many tiny subroutines, called words. Referencing a word causes its code to be executed.
а можно программку, которая выводит на экран "Hello, World!"?
Так же смотрите урок по Форту для OLPC, с примером "Hello, world!"
Кстати, встроенная программа (firmware) для этого устройства написана на Форте, и является открытой.
Неплохо было бы привести хоть какие-то примеры кода сюда
ipcalc для DragonForth - это который на PalmOS:

( ipcalc stager 29.04.05 )

: .bin ( word — ) 10 swap 2 base ! u. base ! ;
: / ( a b c d — word ) swap 256 * + swap 256 256 * * + swap 256 256 256 * * * + ;
: (hosts) ( /mask — hosts ) 32 swap - 2 swap ** 2 - ;
: mask ( /mask — word ) 32 swap - 1- 1 swap 0 do 2* 1+ loop not ;
: (naddr) ( word /mask — word ) mask and ;
: (faddr) ( word /mask — word ) mask and 1+ ;
: (baddr) ( word /mask — word ) dup (hosts) rot rot (faddr) + ;
: (laddr) ( word /mask — word ) (baddr) 1- ;
: .addr ( word — ) 256 u/mod 256 /mod 256 /mod . ." ." . ." ." . ." ." u. ;
: bin.addr ( word — ) 256 u/mod 256 /mod 256 /mod
.bin ." ." .bin ." ." .bin ." ." .bin ;

: net over over (naddr) ." net work: " .addr ;
: first over over (faddr) ." first addr: " .addr ;
: last over over (laddr) ." last addr: " .addr ;
: bcast over over (baddr) ." broadcast: " .addr ;
: hosts over over (hosts) ." hosts: " u. drop ;
: bin dup cr bin.addr ;

: ipcalc cr net cr first cr last cr bcast cr hosts ;


а вот и результат работы:

10 17 28 16 / 28 ipcalc
net work: 10 .17 .28 .16
first addr: 10 .17 .28 .17
last addr: 10 .17 .28 .30
broadcast: 10 .17 .28 .31
hosts: 14 ok
192 168 233 91 / 30 ipcalc
net work: 192 .168 .233 .88
first addr: 192 .168 .233 .89
last addr: 192 .168 .233 .90
broadcast: 192 .168 .233 .91
hosts: 2 ok
10 233 16 40 / 10 ipcalc
net work: 10 .192 .0 .0
first addr: 10 .192 .0 .1
last addr: 10 .255 .255 .254
broadcast: 10 .255 .255 .255
hosts: 4194302 ok
255 255 255 240 / bin
11111111 .11111111 .11111111 .11110000 ok
10 17 28 16 / bin
1010 .10001 .11100 .10000 ok
Когда-то в начале девяностых заказывал кассету с Фортом для Хобби ПК8000 на КР580ВМ80А... Но кассета затерялась на почте... Вот так я и не познакомился с этим языком, а ушел в ассемблер...
А набить из двоичных кодов в "Мониторе"? Там всего 4К кода было. ПК8000 ето ж галимый Радио РК-86, ну может контроллер дисплея немного другой...
Занятно читать о возможности добавлять собственный синтакс в язык, у которого никакого синтаксиса нет. Плюс оценка непонятная какая-то сложности реализации интерпретатора в железе. По идее, нужен полноценный стековый процессор, которые действительно являются очень простыми, но по меркам процессоростроения. То есть, это как минимум, несколько десятков тысяч транзисторов на ядро, плюс интерфейс к памяти или сама память. В итоге не так уж и мало получается.

Вот. И ещё. Не понятно, зачем людей призывать тратить время на такие вот решения из прошлого, которые вобщем-то могут и подпортить мозг в контексте требований к решениям из настоящего: стековые машины не параллелятся и dataflow в них, грубо говоря, тупой и линейный. Нужно ли развивать мозг в этом направлении в эпоху всеобщей многоядерности?
Приветствую ваш скептический взгляд - это немного отрезвит тех, кто захочет попытаться применять Форт не понимая баланса его хороших и не совсем хороших сторон.
Попробуйте форум на http://winglion.ru/ - возможно, там найдется кому ответить на вашу критику.
Познакомился с этим языком программирования при освоении планировщика nncron. Сначала чисто психологически было неудобно работать из-за:

В языке программирования Форт принята т. н. "постфиксная нотация" (ее еще иногда называют "обратной польской записью"). Это означает, что знак операции (логической или арифметической) в нем располагается после чисел


И приведу пару ссылок из хэлпа к программе:

Специально для тех, кто хочет побольше узнать о Фоpте, автор nnCron пеpевел в "электpонный" вид книжку Leo Broudie Starting Forth (Лео Бpоуди "Hачальный куpс пpогpаммиpования на языке Фоpт"). Это очень доступный текст на pусском языке - http://www.nncron.ru/download/sf.chm (1,5Mb).

Настоятельно советую всем, кто интересуется Фортом, скачать краткий справочник по основным словам SP-Forth (http://www.nncron.ru/download/spf_help.z…) исходники nnCron (http://www.nncron.ru/download/src.rar) и SP-Forth 3.75 (http://www.enet.ru/win/cherezov/sp-forth…) - в них хорошо документированы большинство слов, которые вам могут понадобиться.
Да, помню, был в шоке, когда узнал, что двум можно присвоить значение три, и при умножении двух на два получать девять :) Потому что в Форте именами переменных могут быть цифры :)
Помнится много-много лет назад, когда компьютер у меня дома был большой и неподъемный, наткнулся в одном из журналов Радио на распечатку кодов интерпретатора Форта для Z80 (если не ошибаюсь). Перевел коды в ассемблер и даже пытался переписать под х86. Что-то даже работало:) Но видимо юношеского задора и опыта не хватило на завершение работы до конца. Но язык оставил приятные впечатления, когда позже я немного "потрогал" его в действии.
Спасибо з аинтересную статью! Добавил в избранное
Я написал на Форт пейджинг-систему. Форт (SMAL32) был написан моим знакомым. Система успешно продавалась. Форт работал под DOS в защищенном режиме. Система была довольно устойчива.

Основная проблема при программировании больших систем на форте - необходимость постоянно контролировать состояние стека после работы слова. Поскольку сигнатура стека для отдельных слов может различаться - это непросто. Если что-то вдруг оставляет что-то случайно на стеке - привет программе! Мой знакомый делал DROPALL в главном цикле :-))) Я так не могу - я все-таки старался аккуратно писать.
"Форт дает то понятие дисциплины программирования, которое необходимо для создания рабочей и легко сопровождаемой программы. Плохому программисту Форт не прощает ошибок, а хорошего стимулирует к тому, чтобы стать великим."
Вы сказали, что разработали пейджинговую систему на SMAL32
интересно возможна ли публикация Вашим знакомым- разработчиком SMAL32 (Ларионовым?) исходников данной системы т.к. автор похоже давно забросил интерес к Форт и его сайт forth.ru не обновляется и сам он не доступен по почте.
Система была интересная и возможно какие то решения применённые в ней интересны будут существующему Форт сообществу и тем, кто использовал данную Форт систему.
Ну или просто с исторической точки зрения.

P.S. Интересно, а как сложилась судьба пейджинговой системы и какой опыт был приобретён при её разработке?
Вот тут есть версии SMAL32 под WIN2K, если кто-то хочет поиграться...

http://www.forth.ru/smal32.html
Будучу студентом прочитал книжку по Форт. Очень заинтересовал язык, но толком попробовать было не на чем.
Жаль, что не вспомнили про однокристальные ФОРТ-контроллеры от Rockwell 65F11 / 65F12. Весьма приличные чипы с ядром от 6502.
Sign up to leave a comment.

Articles