Стек-ориентированное программирование: принципы и особенности
Stack-oriented programming
Стековое программирование: парадигма, использующая стек для обработки данных. Языки Forth, RPL, PostScript – примеры. Постфиксная нотация, особенности реализации.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Парадигма программирования, опирающаяся на модель стек-машины.
Programming paradigm that relies on a stack machine model
Стек-ориентированное программирование — это парадигма программирования, которая использует стек (или несколько стеков) для манипулирования данными и/или передачи параметров. Несколько языков программирования соответствуют этому описанию, в частности Forth, RPL и PostScript. Стек-ориентированные языки программирования работают с одним или несколькими стеками, каждый из которых может выполнять различные функции. Конструкции программирования из других языков необходимо модифицировать для использования в стековой системе. Большинство стековых языков используют постфиксную или обратную польскую нотацию. Любые аргументы или параметры команды указываются перед самой командой. Например, в постфиксной нотации запись будет выглядеть как 2, 3, умножить, а не умножить, 2, 3 (префиксная или польская нотация) или 2 умножить 3 (инфиксная нотация). Языки программирования Forth, Factor, RPL, PostScript, язык описания стиля BibTeX и многие языки ассемблера соответствуют этой парадигме. Алгоритмы, основанные на стеке, обрабатывают данные, используя один элемент данных с вершины стека и возвращая результат обратно на вершину стека. Необходимость в операторах манипулирования стеком позволяет стеку обрабатывать данные. Для наглядности эффекта оператора используется комментарий, показывающий состояние вершины стека до и после выполнения оператора. Это называется диаграммой эффекта стека. В PostScript используются отдельные стеки для различных целей, включая переменные, словари, процедуры, структуру типичных процедур, управление и поток выполнения. Анализ языковой модели позволяет просто и теоретически интерпретировать выражения и программы.
Stack oriented programming is a programming paradigm that relies on a stack (or multiple stacks) to manipulate data and/or pass parameters. Several programming languages fit this description, notably Forth, RPL, and PostScript. Stack oriented programming languages operate on one or more stacks, each of which may serve a different purpose. Programming constructs in other programming languages need to be modified for use in a stack oriented system. Most stack oriented languages operate in postfix or Reverse Polish notation. Any arguments or parameters for a command are stated before that command. For example, postfix notation would be written 2, 3, multiply instead of multiply, 2, 3 (prefix or Polish notation), or 2 multiply 3 (infix notation). The programming languages Forth, Factor, RPL, PostScript, BibTeX style design language and many assembly languages fit this paradigm. Stack based algorithms consider data, by utilising one piece of data from atop the stack, and returning data back atop the stack. The need for stack manipulation operators, allow for the stack to manipulate data. To emphasise the effect of a statement, a comment is used showing the top of the stack before and after the statement. This is known as the stack effect diagram. PostScript stacks consider separate stacks for additional purposes. This considers variables, dictionaries, procedures, anatomy of some typical procedures, control and flow. The analysis of the language model allows expressions and programs to be interpreted simply and theoretically.
Манипуляция стеком
Поскольку стек является ключевым средством манипулирования данными в языках, ориентированных на стек, такие языки часто предоставляют операторы для работы со стеком. Обычно предоставляются команды дублирования элемента на вершине стека (dup), обмена двух верхних элементов (exch или swap), циклической перестановки элементов в стеке или его части (roll), удаления верхнего элемента (pop или drop – добавление элемента в стек подразумевается как неявная операция), и другие. Эти операторы играют ключевую роль при изучении процедур.
Since the stack is the key means to manipulate data in a stack oriented language, such languages often provide some sort of stack manipulation operators. Commonly provided are dup, to duplicate the element atop the stack, exch (or swap), to exchange elements atop the stack (the first becomes second and the second becomes first), roll, to cyclically permute elements in the stack or on part of the stack, pop (or drop), to discard the element atop the stack (push is implicit), and others. These become key in studying procedures.
Стеклы PostScript
PostScript и некоторые другие языки стековой организации имеют отдельные стеки для других задач.
PostScript and some other stack languages have other separate stacks for other purposes.
Анализ языковой модели
Простая модель, предоставляемая стековым языком, позволяет интерпретировать выражения и программы легко и теоретически оценивать их значительно быстрее, поскольку не требуется синтаксический анализ, а только лексический. Способ написания таких программ облегчает их интерпретацию машинами, поэтому PostScript хорошо подходит для использования в принтерах. Однако несколько искусственный способ записи программ на PostScript может стать первоначальным препятствием для понимания стековых языков, таких как PostScript. Хотя возможность переопределения встроенных и других определений может затруднить отладку программ, а небрежное использование этой функции может привести к непредсказуемому поведению, она может значительно упростить некоторые задачи. Например, в PostScript оператор showpage можно переопределить пользовательским, который применяет определенный стиль к странице, вместо того чтобы определять новый оператор или повторять код для создания этого стиля.
The simple model provided in a stack oriented language allows expressions and programs to be interpreted simply and theoretically evaluated much faster, since no syntax analysis need be done, only lexical analysis. The way such programs are written facilitates being interpreted by machines, which is why PostScript suits printers well for its use. However, the slightly artificial way of writing PostScript programs can form an initial barrier to understanding stack oriented languages such as PostScript. While the ability to shadow by overriding inbuilt and other definitions can make programs hard to debug, and irresponsible use of this feature can cause unpredictable behaviour, it can simplify some functions greatly. For example, in PostScript use, the showpage operator can be overridden with a custom one that applies a certain style to the page, instead of having to define a custom operator or to repeat code to generate the style.