Раннее связывание по сравнению с поздним связыванием: каковы сравнительные преимущества и недостатки?

20
задан Kara 30 December 2013 в 23:25
поделиться

4 ответа

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

12
ответ дан 30 November 2019 в 00:35
поделиться

Раннее связывание по сравнению с Поздним связыванием является действительно функцией архитектуры языка. Раннее связывание означает, что код может быть создан, где машинная команда просто переходит к адресу и начинает выполняться оттуда (возможно через справочную таблицу). Позднее связывание требует, чтобы символ и ссылка типа искались (обычно поиск хеш-таблицы) для каждого доступа, который замедляет язык.

, В то время как некоторые основанные на VM языки, такие как Java являются рано связанным собственным машинным кодом, может только действительно сделать раннее связывание непосредственно. Чтобы сделать позднее связывание, это должно сделать тот же вид поиска хеша, как динамический интерпретатор языка был бы. Позднее связывание затем требует, чтобы блок кода был выполнен для получения адреса (это - то, как автоматизация OLE работает). Это не может быть сделано непосредственно ЦП - код должен быть выполнен.

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

Раннее связывание также необходимо для настоящего большого разнообразия оптимизации кода.

Архитектура, такая как C имеет зону наилучшего восприятия в написании кода близко к металлу, как это было. Где Вы хотите сделать это, аспект раннего связывания в значительной степени свойственен к архитектуре языка. На последнем связанном языке, таком как Python позднее связывание также свойственно. Некоторые языки предлагают обоим, но конкретный используемый тип будет связан с конкретной выполняемой конструкцией.

3
ответ дан 30 November 2019 в 00:35
поделиться

По моему опыту, обоих высокоэффективного программного обеспечения (например, игры, перемалывание чисел) и нейтрального в отношении производительности программного обеспечения (веб-сайты, большинство все остальное), было одно огромно преимущество позднего связывания: податливость/пригодность для обслуживания/расширяемость Вы упомянули.

было два основных преимущества раннего связывания. Первое:

  • производительность Во время выполнения

обычно принимается, но обычно не важный, потому что в большинстве случаев выполнимо бросить аппаратные средства в проблему, которая является более дешевой. Существуют, конечно, исключения (например, если Вы не владеете аппаратными средствами, Вы работаете).

второе преимущество раннего связывания:

  • Простота разработки

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

Простота разработки является грандиозным предприятием. Это минимизирует дорогое время программиста - и чем больше Ваша группа разработчиков, тем более значительным это становится. Необходимо было бы сбалансировать это относительно гибкости, которую Вы получаете с языками позднего связывания.

11
ответ дан 30 November 2019 в 00:35
поделиться

Я думаю, что существуют лучшие пути/шаблоны избежать несоответствующей связи, как инверсия управления, внедрения зависимости, Фабрик...

, Но, мне нравится "простая в использовании" независимость версии позднего связывания
Просто, использование

var excel = CreateObject("Excel.Application");

и Позднее связывание выяснит, какой Excel. Приложение, и где получить его от...

2
ответ дан 30 November 2019 в 00:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: