DLL helvetti

DLL-helvetti (DLL-painajainen, kirjaimellisesti: DLL -helvetti) on umpikuja, joka liittyy dynaamisten DLL -tiedostojen hallintaan Microsoft Windows -käyttöjärjestelmässä .

Samanlainen ongelma muissa käyttöjärjestelmissä on nimeltään riippuvuushelvetti .

Ongelman ydin on tiettyjä toimintoja tukevien DLL-versioiden ristiriita. DLL-helvetti  on esimerkki huonosta ohjelmointikonseptista, joka, kuten piilotettu kaivos, johtaa jyrkästi järjestelmän monimutkaisuuteen ja parantamiseen.

Ongelman kuvaus

Alkuperäisen idean mukaan DLL-tiedostojen tulee olla yhteensopivia versiosta toiseen ja vaihdettavissa molempiin suuntiin.

DLL-mekanismin toteutus on sellainen, että yhteensopimattomuudesta ja ei-vaihtokelpoisuudesta tulee pikemminkin sääntö kuin poikkeus, mikä johtaa moniin ongelmiin.

Ristiriitojen välttämiseksi on yleistä käyttää useita redundantteja DLL-kopioita jokaisessa sovelluksessa, mikä kumoaa alkuperäisen idean hyödyntää DLL-tiedostoja vakiomoduuleina, jotka tallennetaan kerran muistiin ja jaetaan monille tehtäville. Lisäksi tällaisella kokemuksella DLL-virheiden korjaamisen tai järjestelmän arkistosta palauttamisen jälkeen erilaisten samannimististen ja samoja toimintoja suorittavien DLL-tiedostojen määrä kasvaa, ja automaattinen version päivitys tai virheenkorjaus tulee mahdottomaksi.

Ongelman historia

Tämä ongelma ilmeni Microsoft Windowsin varhaisissa versioissa .

Mac OS X :n varhaisissa versioissa oli samanlaisia ​​ongelmia , mutta niissä käytettiin eri tekniikoita.

Ongelma toistuu, kun ohjelmaa yritetään ajaa eri DLL:llä, josta se testattiin, mikä osoittaa alkuperäisen virheen yleisessä konseptissa, joka mahdollistaa moduuliversioiden mielivaltaisen korvaamisen.

Toimenpiteet DLL-helvettiä vastaan

Näitä toimenpiteitä suositellaan suoritettavaksi samanaikaisesti parhaiden tulosten saavuttamiseksi:

DLL-helvetti motivaationa .NET-projektille

Vuonna 2001 Microsoft määritteli .NET Framework -alijärjestelmän pakettien kehittämiseen ( kokoonpanot : katso tästä ). Tämä alijärjestelmä alkoi tukea yhteistä ajonaikaista kirjastoa liittämällä DLL:n pääsuoritettavaan luokkaan.

Linkit

Katso myös