Вилучено вміст Додано вміст
NS Svit (обговорення | внесок)
Створено шляхом перекладу сторінки «DLL hell»
(Немає відмінностей)

Версія за 19:54, 23 березня 2019

DLL hell (DLL-жах, буквально: DLL-пекло) - тупикова ситуація, пов'язана з керуванням динамічними бібліотеками DLL в операційній системі Microsoft Windows.

Аналогічна проблема в інших ОС носить назву Dependency hell .

Сутність проблеми полягає в конфлікті версій DLL, покликаних підтримувати певні функції. DLL hell - приклад поганої концепції програмування, яка, подібно до прихованої міни, призводить до різкого зростання труднощів при ускладненні та вдосконаленні системи.

Опис важкості

За вихідним задумом, DLL повинні бути сумісними від версії до версії і взаємозамінними в обидві сторони.

Реалізація механізму DLL така, що несумісність і невзаємозамінність стає скоріше правилом, ніж винятком, що призводить до великої кількості проблем.

  • Відсутність стандартів на імена, версії і положення DLL в файловій структурі призводить до того, що несумісні DLL легко заміщають або відключають один одного.
  • Відсутність стандарту на процедуру встановлення призводить до того, що встановлення нових програм призводить до заміщення працюючих DLL на несумісні версії.
  • Відсутність підтримки DLL з боку компонувальників і механізмів захисту призводить до того, що несумісні DLL можуть мати однакові ім'я та версію.
  • Відсутні стандартні інструменти ідентифікації та управління системою DLL користувачами і адміністраторами.
  • Використання окремих DLL для забезпечення зв'язку між завданнями призводить до нестабільності складних додатків.

Для уникнення конфліктів зазвичай використовують безліч надлишкових копій DLL для кожної програми, що зводить нанівець вихідну ідею отримання переваги від DLL як стандартних модулів, що зберігаються один раз в пам'яті і поділюваних багатьма завданнями. Крім того, при такому досвіді після виправлення помилок в DLL або відновлення системи з архіву кількість різних DLL, що носять одне і те ж ім'я і виконують ті ж функції, зростає, а самочинне оновлення версії або виправлення помилок стає неможливим.