Windows по-прежнему использует DLL, а программы Mac, похоже, вообще не используют DLL. Являются ли они преимуществами или недостатками использования какой-либо техники?
Оба используют разделяемые библиотеки, они просто используют другое имя.
Если установка программы включает в себя все необходимые библиотеки DLL, чтобы она работала на 100%, будет ли это так же, как статическое связывание всех библиотек?
Несколько. Когда вы статически связываете библиотеки с программой, вы получите один очень большой файл с DLL, у вас будет много файлов.
Статически связанному файлу не потребуется этап «разрешение общих библиотек» (который происходит во время загрузки программы). Давным-давно загрузка статической программы означала, что вся программа сначала загружалась в ОЗУ, а затем происходил этап «Разрешить совместное использование библиотек». Сегодня только те части программы, которые фактически выполняются, загружаются по требованию. Так что со статической программой вам не нужно разрешать библиотеки DLL. С DLL вам не нужно загружать их все сразу. Таким образом, производительность должна быть на уровне
Что оставляет "DLL ад". Многие программы в Windows приносят все необходимые им библиотеки DLL и записывают их в каталог Windows. Чистый эффект состоит в том, что последние установленные программы работают, а все остальное может быть повреждено. Но есть простой обходной путь: установите библиотеки DLL в тот же каталог, что и EXE. Windows будет сначала искать текущий каталог, а затем различные пути Windows. Таким образом, вы будете тратить немного дискового пространства, но ваша программа будет работать, и, что более важно, вы больше ничего не сломаете.
Можно утверждать, что вы не должны устанавливать библиотеки DLL, которые уже существуют (с той же версией) в каталоге Windows, но тогда вы снова становитесь уязвимыми к какому-то плохому приложению, которое перезаписывает нужную версию чем-то, что ломает вам голову , Недостатком является то, что вы должны сами распространять исправления безопасности для своего приложения; Вы не можете полагаться на Центр обновления Windows или подобные вещи для защиты своего кода. Это трудное место; взломщики зарабатывают много денег на проблемах безопасности, и людям не понравится, когда кто-то украдет их банковские данные, потому что вы не выпускали исправления безопасности достаточно скоро.
Если вы планируете поддерживать приложение очень плотно в течение многих, скажем, 20 лет, установка всех библиотек DLL в каталоге программы для вас. Если нет, то напишите код, который проверяет, установлены ли подходящие версии всех библиотек DLL, и сообщите об этом пользователю, чтобы он знал, почему ваше приложение внезапно начинает падать.