статически/динамически типизированный против статического/динамического связывания

в чем разница между этими 4 терминами, можете ли вы привести примеры?


person rookie    schedule 17.12.2010    source источник
comment
Википедия снова не работает? А если серьезно, типизация и привязка - настолько разные термины, что я удивлен, что они появляются в одном вопросе.   -  person Mchl    schedule 17.12.2010


Ответы (2)


Статический и динамический – жаргонные слова, обозначающие момент времени, в который разрешается какой-либо программный элемент. Статический указывает, что разрешение происходит во время создания программы. Динамический указывает, что разрешение происходит во время запуска программы.

Статическая и динамическая типизация

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

  • макет памяти (например, 4 байта для int, 8 байтов для двойного, больше для объекта)
  • выполняемые инструкции (например, примитивные операции для добавления маленьких целых чисел, библиотечные вызовы для добавления больших)
  • поток программы (простые соглашения о вызове подпрограммы по сравнению с хэш-диспетчером для нескольких методов)

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

Обратите внимание, что лишь немногие реальные системы являются либо одним, либо другим, вопрос лишь в том, какая стратегия предпочтительнее.

Статическая и динамическая привязка

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

Настоящая статическая привязка почти исчезла. Более ранние ассемблеры и FORTRAN, например, полностью предварительно вычисляли точное расположение в памяти всех переменных и местоположений подпрограмм. Эта ситуация длилась недолго, с введением выделения стека и кучи для переменных и динамически загружаемых библиотек для подпрограмм.

Так что следует проявить некоторую вольность в определениях. Здесь важен дух концепции: статически связанные программы заранее вычисляют как можно больше информации о расположении хранилища, насколько это возможно в современной виртуальной памяти, со сборкой мусора, отдельно скомпилированным приложением. Динамически связанные программы ждут как можно дольше.

Пример может помочь. Если я попытаюсь вызвать метод MyClass.foo(), система статической привязки проверит во время сборки, что существует класс с именем MyClass и этот класс имеет метод с именем foo. Система динамического связывания будет ждать до времени выполнения, чтобы увидеть, существует ли какой-либо из них.

Контрасты

Основная сила статических стратегий заключается в том, что транслятор программы гораздо лучше осведомлен о намерениях программиста. Это упрощает:

  • поймать много распространенных ошибок на ранней стадии, на этапе сборки

  • создавать инструменты рефакторинга

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

Основная сила динамических стратегий заключается в том, что их гораздо проще реализовать, а это означает, что:

  • рабочая динамическая среда может быть создана за долю стоимости статической

  • легче добавлять языковые функции, которые может быть очень сложно проверить статически

  • легче обрабатывать ситуации, требующие самомодифицирующегося кода

person WReach    schedule 21.12.2010

Типизация - относится к типам переменных и разрешено ли переменным изменять тип во время выполнения программы.

http://en.wikipedia.org/wiki/Type_system#Type_checking

Связывание - это, как вы можете прочитать ниже, может относиться к связыванию переменных или связыванию библиотек.

http://en.wikipedia.org/wiki/Binding_%28computer_science%29#Language_or_Name_binding

person Mchl    schedule 17.12.2010