статическая / динамическая типизация и статическая / динамическая привязка - PullRequest
9 голосов
/ 17 декабря 2010

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

Ответы [ 2 ]

14 голосов
/ 21 декабря 2010

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

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

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

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

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

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

Статическое и динамическое связывание

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

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

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

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

Контрасты

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

  • обнаружение многих распространенных ошибок на ранних стадиях сборки

  • инструменты рефакторинга сборки

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

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

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

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

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

0 голосов
/ 17 декабря 2010

Typing - относится к переменным типам, и если переменным разрешено изменять тип во время выполнения программы

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

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

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

...