ФОРТ -- низкоуровневый (что бы не говорили маньяки-фортеры) язык
программирования, с момента своего появления разрабатывавшийся
для маломощных компьютеров. Первоначально применялся для управления
телескопом и обработки данных с него. Отсюда растут его ноги активного
применения в аэрокосмической отрасли, робототехнике, астрономии и вообще
в системах управления различным оборудованием (так называемых встраиваемых
системах, или embedded).
В настоящее время язык широко известен, но мало распространен прежде всего
из-за его низкоуровневости (можно рассматривать как расширяемый
пользователем макро-ассемблер с возможностью использовать для написания
макросов полноценного языка программирования).
Достоинства:
- самый простой (из распространенных -- существует еще куча языков типа
BrainFuck) в реализации язык, собственный компилятор пишется буквально
за полчаса используя готовую чужую форт-систему (это для чисто
интерпретиремого варианта с использованием байт-кода -- для системы
компилирующей в машинный код сложность на порядок выше)
- из-за простоты реализации компиляторы и интерактивные (чаще всего командная
строка) форт-системы существуют практически для всех платформ от 8-битных
микроконтроллеров до суперЭВМ
- красивая идеология программирования [см. перевод Thinking FORTH и orange
book]
- язык обладает обладает уникальным свойством расширяемости пользователем
(из известных языков могу назвать еще только диалекты LISP и SmallTalk),
что дает возможность расширять базовый язык до проблемно-ориентированного
(под конкретные прикладные задачи)
Недостатки:
- низкоуровневость языка -- хотя язык и обладает уникальным по сравнению с
mainstream языками свойством расширяемости, он все равно остается самым
низкоуровневым из большинства используемых языков программирования, так что
необходимо вручную отслеживать корректность кода (стековые передачи,
корректность параметров), обходится без удобных средств типа ООП и контроля
типов, и кроме того часто необходимо изобрести велосипед, практически
полностью написав набор библиотек, уже идущих в коробке для современных
языков (Perl, Python, Java, море библиотек и поддержка со
стороны ОС для С(++)
- очень низкая распространенность языка -- о ФОРТе слышали многие, но
его практическое применение почти незаметно, очень мало литературы и
особенно готовых наработок (точнее наработки есть, но чаще всего код для
одной форт-системы несовместим с другими)
- из-за низкоуровневости языка легко получить write-only исходный текст,
который работает, но при этом очень сложно читать чужие исходники
- простота системы создает эффект, не наблюдаемый для других языков --
каждый фортер, едва выйдя из состояния полного чайника, ломится написать
свой ФОРТ -- это можно видеть по количеству форт-систем, доступных в сети.
Одна из причин -- традиция писать ФОРТ только для себя без какой-либо
документации и даже подробных комментариев в исходниках. Из-за этого
оказывается проще написать свой ФОРТ, чаще всего несовместимый с другими
(отличия в работе некоторых слов и просто отсутствие многих слов в словаре),
чем разбираться с чужим.
Другими словами, ФОРТ хорош только в одном случае -- если имеющиеся средства
разработки по каким-то причинам не подходят:
- недоступность компилятора С(++) и других языков по причине его дороговизны
или вообще (для какой-то очень хитрой платформы, для которой еще не
написали коммерческий компилятор или back-end GNU CC)
- желание встроить в железку интерфейс командной строки для ручного
управления, настройки и программирования пользователем
(например вместо BASICа, который прошивался в старые 8-битные компьютеры).
в этом случае форт чаще всего явлется одновременно и операционной системой,
и on-board компилятором и ассемблером
- форт-мания, то есть его всовывание и использование невзирая на сложность
поддержки написанных на нем продуктов и потери времени на написание
аналогов готовых библиотек для других языков. в некоторых редких случаях
получаются вполне приличные вещи:
* Eserv (c) Андрей Черезов
* nnCron
* САПР "Сударушка"
* форт-компьютер Sprinter (проект похоже сдох, сайт подванивает)
* железки от http://www.technoforth.ru
- редкий случай когда использование форта оказывается удобнее трационных
средств разработки (как вариант -- использование форта как крайне мощного
макро-ассемблера, если пожертвовать удобством синтаксиса и использовать
постфикс, работающий вариант пишется буквально за час, если конечно система
команд достаточно простая -- что-нибудь типа Z80, клонов 8080, даже 80x86)
В сети и в бумажном виде доступно достаточно литературы для первоначального
знакомства с языком:
http://www.forth.org.ru сайт RU FIG (ссылки на форт-системы и
литературу в электронном виде)
http://spf.sf.net ФОРТ-система для Windows SP-FORTH
http://www.forth.org FIG
http://akps.ssau.ru мои наработки по языку
news://fido7.su.forth конференция сети FidoNet SU.FORTH
http://synergy.com.ua SynergyOS
Келли, Спайс Язык программирования ФОРТ (orange book)
Баранов, Ноздрунов Язык ФОРТ и его реализации (green book)
переводы книг Leo Brodie Starting FORTH и Thinking FORTH
Philip Koopman Stack computers -- the new wave
(готовится перевод)
лично я начинал с orange book, и похоже мне сильно повезло -- это имхо лучшая
Создавая эту рассылку, я хотел поделится своими наработками и обменятся
информацией с любителями языка.
Содержимое рассылки будет определяться вашими письмами:
ПонятОв Дмитрий
e-mail: forth@km.ru
FidoNet: 2:5057/18.29, SU.FORTH
tel.: +7 8462 289910 (раб.), 154313 (дом.)
но больше всего хотелось бы поделится информацией с теми, кто хочет написать
свою собственную ФОРТ-систему, и помочь начинающим ответами на их вопросы.
В следующих выпусках планируется подробно рассмотреть
- обзор доступных форт-систем: требуются материалы от их авторов
- подробное рассмотрение проекта Synergy -- у народа бродят идеи по созданию
удобной рабочей среды, используя ФОРТ в качестве ядра и скриптового языка
- методику целевой компиляции (фортовский узкоиспользуемый термин,
ближе всего кросс-компиляция)
- интерпретатор байт-кода на почти чистом С (виртуальная стековая
форт-машина, a.k.a. движок)
- написание ассемблера с постфиксным синтаксисом
- создание на основе интерпретатора байт-кода и целевого компилятора
платформенно-независимой системы программирования, которая элементарно
портируется для любой платформы за пару часов или дней и позволяет
встраивать движок в любые программы на вашем любимом языке или ассемблере,
и требует для работы единицы Кб памяти (наколенная поделка-аналог Java
собственного разлива)
есть ли смысл повторять в рассылке руководства по языку для начинающих ?
какие темы рассмотрены недостаточно понятно ?
опровержения и дополнение этого бреда от форт-гуру ?
хотелось бы поиметь информацию по следующим темам:
- обычная и JIT- компиляция байт-кода (промежуточного представления программ)
в нативный машинный код
- хакинг виртуальной машины Java (JVM) или .NET CLR вплоть до написания своей
совместимой (лучший способ изучения -- сделать это самому, естественно если
хватает
на это есть время)
- оптимизация кода стековой машины
- реализация форта в железе (самодельный форт-компьютер на 8- 16-битном
процессоре или микроконтроллере, создание специализированного процессора
с использованием программируемых матриц), где и какое можно купить дешевое
железо, которое можно переделать в форт-компьютер
- применение форта в качестве BIOS (см. OpenHardware, OpenBIOS, Столлман
пару месяцев назад кидал клич на разработку GNUтого BIOSа для ПК)