( utpKabel | 2013. 10. 28., h – 20:46 )

Na, itt két dolgot meg kell különböztetni egymástól:

  • a garbage collector, mint az automatikus memóriakezelés eszköze.
  • garbage collected programozási nyelvek (pl. Java), amelyeknek kötelező része a garbage collector és automatikus memóriakezeléssel rendelkeznek.

GC létezik C-hez és C++-hoz is, ott természetesen nem kötelező használni, sőt egyazon alkalmazás használhatja egyszerre a garbage collected heapet, az unmanaged heapet, a stack-et, és tetszőleges számú custom allokátort is. A GC csak egy memóriakezelési módszer a sok közül.

én személy szerint a GC-t leginkább értelmetlen korlátozásnak tartom

Természetesen a lehetőségeket korlátozza az, ha egy nyelv kötelezővé teszi a GC-t, és ez bizonyos alkalmazási területeknél előnytelen. A "értelmetlen" résszel viszont vitatkoznék, hiszen az automatikus memóriakezelés kötelezővé tétele lehetővé teszi a nyelvnek:

  • memory safety: a GC eliminálja a dangling pointerek lehetőségét, ha emellett a nyelvben nincs pointer aritmetika, akkor egyszerűen lehetetlen memóriahibát okozni, míg C++-ban bármilyen hiba jelentkezhet segmentation fault formájában (jobb esetben).
  • type safety: a memory safety előfeltétele a valódi type safety-nek - hogy egy objektumot ne lehessen úgy használni, mintha az egy másik típusú objektum lenne. A C++ type safety-je "mindössze" annyi, hogy a compiler front-end hibaüzenettel visszadobja a programok egy részét.