Zupeł­nie nie rozu­miem, czemu na Wykop tra­fił arty­kuł o odśmie­ca­niu pamięci w Pytho­nie, wiem za to, że jest to świetna oka­zja, żeby się nad nim nieco popa­stwić. Zacznijmy od tego, że Python nie koń­czy się niemą samo­gło­ską i nie odmie­niamy go z apostrofem.

W przy­dłu­gim wstę­pie do jesz­cze dłuż­szego tek­stu czy­tamy, że Python jest języ­kiem. Świet­nie. Zasta­na­wiam się w tym momen­cie, jaki jest tar­get audience owego dzieła, zanosi się bowiem na wykład dla począt­ku­ją­cych. Po prze­cinku ata­kuje nas jed­nak auto­ma­tyczna alo­ka­cja pamięci (i co to wła­ści­wie zna­czy auto­ma­tyczna — alo­ka­cja nastę­puje wtedy, kiedy pro­gra­mi­sta two­rzy nowy obiekt).

Ata­kuje bez uprze­dze­nia, wypa­da­łoby cho­ciaż wspo­mnieć, że w języ­kach niż­szego poziomu ist­nieją spe­cjalne ope­ra­tory i wyma­gane jest jawne zarzą­dza­nie zaso­bami. W Pytho­nie (w Javie, PHP…) nie jest wyma­gane jawne usu­wa­nie obiek­tów, to prawda. Nie zgo­dzę się jed­nak z pod­su­mo­wa­niem, że główną zaletą tego roz­wią­za­nia jest fakt, że pro­gra­mi­ści nie muszą się mar­twić o zabez­pie­cze­nie pamięci.

Główną zaletą posia­da­nia dużego traw­nika nie jest moż­li­wość rzad­szego sprzą­ta­nia po swoim psie, tak zbie­ra­nie psich bob­ków, jak pil­no­wa­nie zakre­sów bufo­rów jest świę­tym obo­wiąz­kiem pro­gra­mi­sty i żaden język go w tym nie wyrę­czy. Autor tego aka­pitu chyba nigdy nie pró­bo­wał napi­sać w C odpo­wied­nika alaMaKota = ' '.join(('Ala', 'ma', 'kota')), gdyby spró­bo­wał, to wie­działby, co jest główną zaletą. Przej­rzy­stość kodu.

Pod­su­mo­wu­jąc wstęp, Python nie jest wyma­rzo­nym narzę­dziem dla pro­gra­mi­sty. Python jest jed­nym z języ­ków i — jak każdy z języ­ków (nie zaczy­na­ją­cych się sło­wem visual) — nadaje się do jed­nych rze­czy, a nie nadaje do innych. Nie wiem też, jakie powi­nie­nem mieć ocze­ki­wa­nia wzglę­dem pro­cesu śmie­cia­rza, ale prak­tyka każe mi usu­wać duże zbędne obiekty nie­za­leż­nie od uży­wa­nego języka.

Dalej mamy całą masę ode­rwa­nej od przy­kła­dów teo­rii. Wystar­czy­łoby powie­dzieć, że z odśmie­ca­niem pamięci wiążą się trzy poten­cjalne problemy:

  • frag­men­ta­cja pamięci, która powo­duje, że two­rze­nie dużych cią­głych struk­tur staje się bar­dzo kosztowne,
  • wykry­wa­nie wysp, czyli obiek­tów odwo­łu­ją­cych się do sie­bie nawza­jem, ale ode­rwa­nych od aktu­al­nego stanu programu,
  • prze­cho­wy­wa­nie obiek­tów, które czę­sto zmie­niają swój roz­miar, na przy­kład typów nume­rycz­nych o nie­skoń­czo­nej precyzji.

Resztę można spro­wa­dzić do stwier­dze­nia (któ­rego w arty­kule brak, co ozna­cza, że ze swoim tytu­łem nie ma nic wspól­nego), że CPy­thon radzi sobie z wszyst­kimi trzema wymie­nio­nymi powy­żej. Ni wię­cej, ni mniej. Żadnej alo­ka­cji, dzie­le­nia stosu ani tablic uchwy­tów przy­wo­ły­wać tu nie trzeba, bo — za prze­pro­sze­niem — robi się bur­del, a nic z tego nie wynika.

Pod­su­mo­wu­jąc, możesz w Pytho­nie pro­gra­mo­wać tak samo jak w Javie albo Rubym i wcale nie musisz z głowy recy­to­wać algo­rytmu śmie­cia­rza. Genialne, tylko o czym był ten arty­kuł i po co tra­fił na Wykop?