Начинающий вопрос: что является обязательным?
Я пытался понять разницу между ранним и поздним связыванием, и в процессе понял, что понятие привязки туманно для меня. Я думаю, что я понимаю, что это связано с тем, как привязка данных к слову-памяти связана с функциями типа-типа-набора-языка, но я не уверен, что это правильные концепции. Кроме того, как понимание этого глубоко помогает людям стать лучше программистами?
Обратите внимание: этот вопрос не "то, что связано с ранним связыванием" или "какие компромиссы между 2". Те, кто уже существует,
Спасибо,
JDelage
Ответы
Ответ 1
Связывание вообще связывает имя с некоторым значением. Значение не обязательно должно быть данным, но может быть любым, у которого есть имя, например. функция или класс.
Что касается компромисса:
-
Раннее связывание делает ценность доступной ранее. Так, например, компиляторы могут применять оптимизацию на основе известного значения, например, вычислять константные выражения. Это может привести к повышению производительности и не требует поддержки времени выполнения для получения значения.
-
Позднее связывание требует значения позже, поэтому оно обеспечивает большую гибкость. Становится легче изменять части кода или перенастраивать систему.
Общая тенденция заключается в более позднем связывании, потому что с более быстрыми процессорами и лучшими методами (например, JIT-компиляция) это становится возможным чаще.
Ответ 2
В своем простейшем случае привязка представляет собой ассоциацию символа внутри программы с адресом в памяти.
Например: вызов функции в C. Когда вы объявляете функцию, компилятор записывает имя функции и местоположение ее кода в объектный файл. Когда вы вызываете функцию из отдельно скомпилированного файла, компилятор записывает ссылку на это имя в том месте, где происходит вызов. Компонент отвечает за привязку этих двух ссылок, так что вызов будет ссылаться на правильную ячейку памяти.
Ответ 3
"Связывание" в основном говорит: "Это имя функции/свойства соответствует этому биту кода".
Ответ 4
В контексте компиляторов привязка - это фаза, в которой ссылки на адреса заменены на фактические абсолютные адреса.
Когда программа скомпилирована, адрес каждого символа (переменная, функция) сохраняется в таблице символов, например, в качестве относительного смещения от начала объектного модуля вместе с именем символа, Имя символа необходимо, так как символы могут быть вызваны из другого объектного модуля.
Когда программа связана, объектные модули объединяются в один программный файл, и имена символов больше не нужны.
Если программа связана с известным абсолютным адресом, все ссылки на адреса могут быть привязаны к абсолютным адресам уже на этом этапе.
Однако на рабочих станциях, таких как ПК: s, программа может быть загружена на любой адрес, поэтому адрес не известен во время ссылки.
Поэтому дополнительная дополнительная информация сохраняется в файле программы, так что загрузчик может связывать адреса во время загрузки.
привязка выполняется во время загрузки с использованием информации о перемещении. Когда известен адрес, по которому программа будет запущена, загрузчик заменяет относительные адреса абсолютными адресами, используя информацию о перемещении, которая сообщает, где в коде должны быть сделаны изменения.
Для динамических объектов/переменных привязка может быть выполнена во время выполнения. (Я думаю, что это то, что обычно называют поздним связыванием.)
Обычно вам не нужно заботиться о привязке, по крайней мере, не при использовании раннего связывания. (Однако привязка во время выполнения может иметь негативное влияние на производительность и безопасность.)
Ответ 5
Если вы говорите больше о привязке данных, я бы сказал, что определение, используемое Microsoft в их Обзор привязки данных, работает достаточно хорошо:
"Связывание данных - это процесс, который устанавливает связь между пользовательский интерфейс приложения и бизнес-логику. Если привязка имеет правильные настройки и данные обеспечивают надлежащее уведомлений, тогда, когда данные изменяет его значение, элементы, которые привязаны к данным, отражающим изменения автоматически. Связывание данных может также означает, что если внешнее представление данных в элементе изменяется, то базовые данные могут быть автоматически обновляется, чтобы отразить изменение. Например, если пользователь редактирует значение в элементе TextBox, базовое значение данных автоматически обновленный, чтобы отразить это изменение."
Другими словами, это способ получения данных из источника данных (например, базы данных или файла XML) и применения этих данных к интерфейсу или элементу отображения. Например, форма может иметь раскрывающийся список значений, которые хранятся в таблице в базе данных. Связывание данных - это процесс привязки значений из базы данных к списку. Односторонняя привязка данных обычно "доступна только для чтения", но двусторонняя привязка данных позволяет пользователю обновлять значения обратно к базовому источнику данных.