Суббота, 20.04.2024, 17:07
Приветствую Вас Гость | RSS | PDA

Всё для студента информата

Полезная информация

Материалы для студента

Всё для студента IT » Материалы для студента » Теория языков программирования

Связывание и время связывания

Связывание как термин мы будем соотносить со связыванием элемента программы с конкретным свойством из ряда допустимых свойств. Момент времени, когда происходит это связывание (на фазах составления, определения или выполнения), называется временем связывания данного свойства с данным элементом.

Классификация времени связывания

Выделим несколько классов времени связывания, при этом будем исходить из факта, что обработка программы включает фазу трансляции и фазу выполнения оттранслированной программы.

  1. Во время выполнения программы. Отнесем сюда связывание переменных с их значениями и с конкретными областями памяти
    • При входе в подпрограмму или блок. Например, в языках C, C++ связывание формальных параметров с фактическими и связывание формальных параметров с определенными областями памяти происходит только во время входа в подпрограмму.
    • В произвольных точках программы во время ее выполнения. Наиболее важным примером этого типа связывания является связывание переменных  с их значениями путем присваивания, как и связывание имен с областями памяти.
  2. Во время трансляции можно выделить три класса связываний:
    • Связывание по выбору программиста – при написании программист принимает решения по выбору типов и имен переменных и структур данных. Эти решения определяют связывания фазы трансляции.
    • Связывание по выбору транслятора. Например, относительное расположение объекта данных  в области памяти, отведенной под некоторую процедуру, обычно принимается транслятором без вмешательства программиста.
    • Связывание по выбору загрузчика. Для каждой подпрограммы связывание переменных с адресами памяти выполняет транслятор, а затем при объединении подпрограмм в единую объектную программу размещение в физической памяти и привязка переменных осуществляется уже во время загрузки, называемое временем редактирования связей.
  3. Время реализации языка. Ряд аспектов определения языка присущи конкретным реализациям, но в других реализациях они (аспекты) могут приводить к неточностям и даже ошибкам, если, например, представление чисел и арифметических операций отталкивается от особенностей аппаратной части компьютера.
  4. Время определения языка. В основном структура языка формируется во время определения языка на основе спецификации альтернатив, доступных программисту при написании программы. Например, возможные альтернативные формы операторов, типы структур данных, программные структуры и т.д. определяются как правило, при определении языка (т.е. на этапе создания языка).

Многообразие связывания и времен связывания рассмотрим на простом примере оператора присвоения:  X = X + 10. Можно исследовать типы связывания и времена связывания следующих элементов этого оператора:

  • набор возможных типов для переменной Х;
  • тип переменной Х;
  • множество возможных значений для переменной Х;
  • значение переменной Х;
  • представление константы 10. Целое число 10 представлено одновременно как константа в тексте программы и как некая последовательность битов во время выполнения программы;
  • свойства операции «+». Выбор символа «+» для обозначения операции сложения происходит во время определения языка. Однако в зависимости от контекста этот символ может обозначать вещественное сложение, целочисленное сложение, комплексное сложение, и, поэтому, при компиляции происходит связывание типа операции «+» с одним из возможных вариантов свойства. Итог по связыванию символа «+»: символ «+»  связывается с НАБОРОМ операций сложения во время определения языка. Затем во время реализации языка определяется каждый элемент этого набора, во время трансляции программы каждое конкретное употребление символа «+» в программе связывается с конкретной операцией сложения, а конкретное значение результата операции сложения определяется ухе во время выполнения программы.

Важность времени связывания

Сравнительный анализ языков программирования строится в своей основе на различиях между языками во времени связывания.
Например, FORTRAN обрабатывает числовые данные значительно эффективнее ML за счет связывания массивов с памятью во время трансляции, а в языке ML  - на этапе выполнения. Таким образом, при выполнении программы на ML большая часть времени будет уходить на создание и уничтожение связей. На  FORTRAN основная часть связей устанавливается единожды во время трансляции, а при выполнении программы производится лишь незначительное количество связываний.
Но в тоже время обработка списков на ML будет эффективнее по причине, что связывание на этапе выполнения, когда уже известны типы переменных и размер строк, позволяет выбрать более подходящие операции обработки.
Итак, раннее связывание ( на этапе трансляции) и позднее связывание ( на этапе выполнения). Раннее связывание позволяет получать более скоростные программы (FORTRAN, C++), а позднее связывание делает программы гибкими и настраиваемыми на типы входных данных (LISP, ML). Если к языку предъявлять требования и эффективности и гибкости одновременно, то следует вводить в этот язык программирования возможность управления временем связывания (Ada).

Время связывания и реализация языка

В определении языка, как правило, не вводится строгих определений на время связывания.
Окончательное решение принимается только при реализации языка.

Похожие статьи:

Не нашли то, что Вам нужно?.. Найдите ответ на форуме!
Категория: Теория языков программирования | Добавил: admin (19.04.2011)
Просмотров: 1320 | Теги: лекция, Тяп
Сообщество
Помощь
Форма входа
Поиск

Студенческий помощник по информатике © 2024
При цитировании материалов данного сайта, обязательна ссылка на источник: ITstudents.ru



>