Руководство по программированию на Форте [Илья Тарасов] (doc) читать постранично, страница - 2

Книга в формате doc! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

сложная программа просто немыслима. В различных языках программирования существует множество способов передачи аргументов, но самым эффективным является пересылка данных через стек. Такой способ, по сравнению, например, с передачей аргументов в переменной, позволяет не заботиться о том, насколько глубоко вложен вызов процедуры или функции, и не используется ли переменная, в которой мы хотим передать аргументы. Компиляторы процедурных языков передают параметры, просто помещая их на стек вместе с адресом возврата. Вызываемая процедура должна забрать свои аргументы со стека, произвести вычисления, и вернуть результат.
Однако здесь имеется проблема, от способа решения которой во многом зависит эффективность работы процедурных языков. Дело в том, что адрес возврата хранится на стеке, и нет никакой возможности отличить аргумент от адреса возврата. Если будет использовано больше или меньше аргументов, чем их передано на самом деле, возврат произойдет по неверному адресу с последующим крахом программы.
Обычно за сохранением баланса стека следит компилятор, подставляя в вызываемые подпрограммы соответствующие прологовые и эпилоговые части, выполняющие прием аргументов со стека и размещение возвращаемых данных. В некоторых процессорах есть специальные команды, облегчающие построение прологовой и эпилоговой частей. Например, начиная с 80286 в семействе процессоров Intel, были введены команды ENTER и LEAVE.
Форт решает проблему сохранения баланса стека весьма радикально и очень эффективно. Стек, в котором передаются аргументы для вызываемых слов, полностью отделен от стека возвратов! Любому слову можно передать избыточное число аргументов, не беспокоясь о том, куда произойдет возврат. Лишние аргументы просто останутся на стеке данных. Особенно упрощается построение самих слов – способ получения ими аргументов становится абсолютно однозначным. Любое слово разрабатывается с учетом того, что все необходимые аргументы уже лежат на стеке. Результат работы слова будет тоже помещен на стек данных, что не помешает возврату по правильному адресу.

Основное средство ввода новых понятий в Форте – так называемое определение через двоеточие. Это синтаксическая форма, которая позволяет ввести в состав словаря новое слово. Полученное таким образом слово немедленно становится равноправным членом словаря, и может участвовать в создании новых определений. Пример определения через двоеточие приведен ниже:

: НОВОЕ_СЛОВО СЛОВО1 СЛОВО2 СЛОВО3 ;

В приведенном примере было создано слово с именем НОВОЕ_СЛОВО. Именем слова считается фрагмент текста, находящийся непосредственно за двоеточием, за исключением ведущих пробелов. Имя может содержать любые символы (за исключением того же пробела). Вполне допустимо назначать имя, начинающееся с цифры, и даже состоящее из одних цифр. Максимальная длина имени различна в разных реализациях Форта, но все они должны обеспечивать длину как минимум 31 символ. Допустимо и перекрытие имен – можно использовать имя, которое уже имеется в словаре. При этом все дальнейшие обращения к слову с таким именем будут использовать последнее определение (однако ранее созданные слова будут по-прежнему использовать старую версию; подробнее об этом см. главу 8).
Действие, выполняемое определяемым словом, записывается сразу за его именем. Описание действия завершается словом ; (точка с запятой). Необходимо обратить особое внимание на то, что точка с запятой – это именно слово, а не элемент синтаксического оформления. Соответственно, она должна быть отделена хотя бы одним пробелом от предыдущего текста. В приведенном примере действие определяемого слова заключается в последовательном выполнении слов СЛОВО1, СЛОВО2 и СЛОВО3. Имеется в виду, что слова с такими именами уже были определены ранее.
Форт обычно не имеет в своем составе слов с комплексным действием. Базовые слова Форта, изначально определенные в его словаре, как правило, весьма просты. Вообще одним из основных принципов Форта является предоставление программисту полной свободы в использовании ресурсов компьютера и самого языка. В Форт можно было бы ввести, например, контроль типов переменных, однако вместо этого любое число можно использовать в качестве аргумента любого слова. Такой подход, конечно, может затруднить процесс отладки разрабатываемой программы, но только в том случае, если подходить к написанию программ с позиций процедурных языков, использующих строгий контроль типов.
При всех достоинствах и недостатках Форт, несомненно, представляет собой весьма интересное направление в программировании. Независимо от уровня практической потребности в написании программ, знание принципов этого языка может оказаться весьма полезным. Кроме того, не следует рассматривать Форт как некий готовый программный продукт, или «черный ящик». Некоторые технологии, принципы взаимодействия программных модулей, интерпретации текста и т.д., могут оказаться