Начинающий вопрос: что является обязательным?

Я пытался понять разницу между ранним и поздним связыванием, и в процессе понял, что понятие привязки туманно для меня. Я думаю, что я понимаю, что это связано с тем, как привязка данных к слову-памяти связана с функциями типа-типа-набора-языка, но я не уверен, что это правильные концепции. Кроме того, как понимание этого глубоко помогает людям стать лучше программистами?

Обратите внимание: этот вопрос не "то, что связано с ранним связыванием" или "какие компромиссы между 2". Те, кто уже существует,

Спасибо,

JDelage

Ответы

Ответ 1

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

Что касается компромисса:

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

  • Позднее связывание требует значения позже, поэтому оно обеспечивает большую гибкость. Становится легче изменять части кода или перенастраивать систему.

Общая тенденция заключается в более позднем связывании, потому что с более быстрыми процессорами и лучшими методами (например, JIT-компиляция) это становится возможным чаще.

Ответ 2

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

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

Ответ 3

"Связывание" в основном говорит: "Это имя функции/свойства соответствует этому биту кода".

Ответ 4

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

Когда программа скомпилирована, адрес каждого символа (переменная, функция) сохраняется в таблице символов, например, в качестве относительного смещения от начала объектного модуля вместе с именем символа, Имя символа необходимо, так как символы могут быть вызваны из другого объектного модуля.

Когда программа связана, объектные модули объединяются в один программный файл, и имена символов больше не нужны. Если программа связана с известным абсолютным адресом, все ссылки на адреса могут быть привязаны к абсолютным адресам уже на этом этапе.

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

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

Для динамических объектов/переменных привязка может быть выполнена во время выполнения. (Я думаю, что это то, что обычно называют поздним связыванием.)

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

Ответ 5

Если вы говорите больше о привязке данных, я бы сказал, что определение, используемое Microsoft в их Обзор привязки данных, работает достаточно хорошо:

"Связывание данных - это процесс, который устанавливает связь между пользовательский интерфейс приложения и бизнес-логику. Если привязка имеет правильные настройки и данные обеспечивают надлежащее уведомлений, тогда, когда данные изменяет его значение, элементы, которые привязаны к данным, отражающим изменения автоматически. Связывание данных может также означает, что если внешнее представление данных в элементе изменяется, то базовые данные могут быть автоматически обновляется, чтобы отразить изменение. Например, если пользователь редактирует значение в элементе TextBox, базовое значение данных автоматически обновленный, чтобы отразить это изменение."

Другими словами, это способ получения данных из источника данных (например, базы данных или файла XML) и применения этих данных к интерфейсу или элементу отображения. Например, форма может иметь раскрывающийся список значений, которые хранятся в таблице в базе данных. Связывание данных - это процесс привязки значений из базы данных к списку. Односторонняя привязка данных обычно "доступна только для чтения", но двусторонняя привязка данных позволяет пользователю обновлять значения обратно к базовому источнику данных.