LOL: die_you_gravy_sucking_pig_dog();
Š ādu saiti uzgāju, lasot coding horror rakstu par atmiņas vadību . Vairums jauno un moderno programmēšanas valodu ir atbrīvojušās no “drausmīgās” manuālas atmiņas vadības ar new/delete, malloc/free. Bet problēma drīzāk ir acquire/release šablons, kas joprojām ir sastopams daudzās programmās. Es runāju par kaut ko šādu, kur resource ir fails, pieslēgums pie datubāzes, pavediens:
resource.acquire();
try {
usage code
} finally {
resource.release();
}
Aizmirstā release problēma joprojām ir aktuāla. Tāpēc man liekas, ka lielākais (automātisko) drazu savācēju trūkums ir tāds, ka tie veic tikai atmiņas resursu vadību. 60-ajos gados tas tiešām bija aktuāli, bet mūsdienās pat “Hello world” lasa vairākus konfigurācijas failus, slēdzas pie datubāzes, Web serveriem un šiem resursiem ir tendence izbeigties ātrāk nekā atmiņai. Problēma tiek slēpta, veicot drazas savākšanu biežāk, vairāk un pat paralēli programmas izpildei. Kaut kādi uzlabojumi šajā jomā ir sastopami C# un Ruby ar paredzamu resursu vadību koda bloka ietvaros, bet man arvien vairāk sāk likties, ka atsauču skaitīšana un RAII ir pareizāks risinājums. Tik daudz darba tiek veikts, lai tuvinātos paredzamai resursu atbrīvošanai – varbūt tā bija jādara no paša sākuma?