Автор:
mOleg дата первой публикации 03.04.2007
в блоге Профита«сначала было слово»Большинство литературы посвященной изучению различных языков программирования рассчитаны на читателя, изучающего программирование с нуля. Поэтому повествование обычно начинается с того, как будет правильно сложить (2+3) или 2 3 + , а может (+ 2 3) – то есть с того, как делать самые простые вещи. В итоге при беглом просмотре (я имею в виду программиста), остается непонятно, ради чего создавался тот или иной язык и в чем его основное отличие от остальных, какие идеологические причины заставили создать этот самый язык.
Практически все современные языки программирования рассчитаны на то, что текст программы будет разбит на множество маленьких именованных кусочков, которые в различных языках называются то функциями, то подпрограммами, то процедурами, впрочем, есть и другие названия. У форта именованные кусочки кода называются словами или определениями.
Основным понятием языка форт
1является слово
2. Каждое слово языка может быть исполнено, но не обязательно должно исполняться. Программа в форт-среде – это набор слов. Обычно для выполнения программы достаточно выполнения последнего определенного понятия (слова). Форт-среда не разбирается в том, является ли очередное слово оператором языка или данными. Слова просто ищутся в списке, называемом словарем
3 и при условии нахождения выполняются. Словарей может быть много, и словари тоже являются словами. Каждое новое слово добавляется в словарь с помощью уже существующих слов или их комбинации. Тот словарь, в который добавляется слово, называется текущим
4, а тот, из которого исполняется - контекстным
5. Современная
6 форт-среда умеет работать с одним текущим и несколькими контекстными словарями, причем текущий словарь не обязан находиться в контексте, и список словарей, находящихся в контексте тоже не фиксирован. В отличие, например от Лиспа, базовый словарь форт-среды не является «суперсловарем», то есть не всегда находится в контексте, поэтому возможны ситуации, когда программист сам ограничивает знания системы словарем, в котором нет слов, позволяющих системе прийти в нормальное рабочее состояние. Этот момент позволят создавать совершенно не связанные с базовой средой лексиконы – то есть полностью менять правила поведения среды.
Любое слово можно условно разделить на две части: имя слова
7 и содержимое слова. Содержимое слова тоже можно условно разделить на две части: исполнимую часть - код и неисполнимую часть – данные. В зависимости от типа слова содержимое слова может отсутствовать вообще, содержать только код или только данные.
Форт-среда состоит из: - виртуальной форт-машины
8, адаптирующей вычислительную модель используемой аппаратной платформы к принятой в форте;
- механизма обмена данными между словами;
- набора слов, достаточного, как минимум, для дальнейшего развития среды;
- и интерпретатора поступающих данных.
В форт-среде принята 0-операндная вычислительная модель. Это значит, что данные находятся всегда в одном месте, называемом стеком данных, и все параметры от одного слова к другому передаются через этот самый стек данных
9. Количество передаваемых данных от одного слова другому во время исполнения не ограничивается и не контролируется системой. Слова всегда берут данные с вершины стека данных и туда же возвращают результат своей работы (это не означает, что в языке нельзя использовать переменные или константы из памяти – можно, но в процессе исполнения слова либо значение этих переменных, либо их адреса в любом случае побывают на стеке).
Интерпретатор - это бесконечный цикл, в котором производится последовательно: чтение очередной лексемы
10 из входного потока, поиск ее в контексте, и выполнение.
Компилятор состоит из большого количества слов, находящихся в базовом словаре
11 системы. Набор слов компилятора не ограничен, не фиксирован, может быть заменен или переопределен, расширен или урезан. Это значит, что компилятор форт-среды находится внутри среды, доступен для изменения и расширения.
Форт-среда может находиться в одном из двух
12 состояний: состояния компиляции или интерпретации. Состояние системы определяется содержимым стандартной переменной STATE. Если в ней находится 0 – режим интерпретации, иначе – компиляции.
Отличие режимов работы заключается в поведении интерпретатора, который в режиме компиляции не исполняет слова, а добавляет в собираемое определение вызовы указываемых слов.
1 Собственно форт нельзя назвать языком программирования, так как он скорее является средой программирования.
2 В английской транскрипции word, но чаще definition, по-русски так же часто говорят определение.
3 В английской транскрипции vocabulary.
4 В английской транскрипции current vocabulary.
5 В английской транскрипции context vocabulary.
6 На данный момент система, соответствующая стандарту ANSI-94.
7 Ключ или идентификатор, то есть набор данных, благодаря которым может быть найдено содержимое, ассоциируемое с данным ключом.
8 Сокращенно FVM.
9 Для удобства работы в форт-среде разделены стек данных от стека возвратов.
10 Обычно лексемы отделены друг от друга пробелом, в отдельных случаях может быть любой другой символ.
11 Базовый словарь системы называется FORTH.
12 Обычно двух, но может быть и больше.