È possibile che una lingua non interpretata abbia un Garbage Collector. Le lingue interpretate prevedono che l'Interpretatore esegua il Programma riga per riga, in modo che l'Interpretatore possa anche fornire un runtime con un GC. Ma è possibile avere un Garbage Collector per qualsiasi altra lingua senza costruire il GC nel proprio codice?Una lingua non interpretata può avere un Garbage Collector?
risposta
Sì.
Il C++ con un'implementazione del puntatore intelligente sarà inutile quando i conteggi dei riferimenti del puntatore intelligente si azzerano.
Si dispone di garbage collection. Non l'hai costruito da solo.
Penso che la domanda riguardi il tracciamento della garbage collection e che il refcount non sia un sostituto. –
Questo non è Garbage Collection. Collega diversi oggetti in modo tale che abbiano un ciclo e non vengano mai distrutti a meno che non si interrompa il ciclo manualmente. – sharptooth
@sharptooth: portalo su con il resto del mondo, non con me: http://www.codeproject.com/KB/cpp/automatic_gc_using_sp.aspx –
La raccolta di dati inutili richiede che le variabili del puntatore siano contrassegnate in modo speciale in modo che il runtime possa identificarle e utilizzarle per la garbage collection. Non ha nulla a che fare con l'interpretazione/la compilazione, ma richiede invece un runtime speciale e la memorizzazione di dati aggiuntivi con ciascuna variabile.
Ben lingue interpretate ti danno un tempo di esecuzione. In ogni caso è più facile per l'Interpretatore lavorare come Run-Time ed eseguire anche un garbage collector. Qualunque lingua nativa avrà il sistema operativo come runtime? E quindi nessun GC? – Geek
GC e interpretazione non sono correlati tra loro. Sì, è potenzialmente più semplice per una lingua interpretata avere la garbage collection, ma le lingue non interpretate possono farlo anche tu. I sistemi operativi in genere non hanno il supporto incorporato per la raccolta dei dati inutili, ma hanno molti runtime linguistici. – sharptooth
E anche senza contrassegnare le variabili del puntatore in modo particolare, è possibile avere il cosiddetto GC conservativo che considera tutti i contenuti della memoria come potenziali puntatori. Vedi il GC di Boehm nell'altra risposta. –
Bene, i linguaggi .NET (che emettono in IL-C#, VB.NET, MC++, ecc.) Non vengono interpretati (specialmente se si utilizza NGEN) - e dispone della garbage collection completa.
Allo stesso modo, Java.
Objective-C 2 ora dispone della garbage collection e ci sono anche librerie di raccolta dei rifiuti per C++.
Penso che sia possibile fintanto che esiste la lingua che consente di ispezionare gli oggetti in modo da poter attraversare l'albero degli oggetti.
Puoi spiegare come funziona. È come collegare un thread GC insieme al tuo programma, vero? – Geek
Il thread separato non è correlato a GC, che sembra essere il modo in cui lo fa Java.La maggior parte di C++ (e Objective-C) la gestiscono al momento dell'eliminazione quando il conteggio dei ref va a zero. –
Objective-C 2 ha una vera garbage collection; il runtime attraversa l'albero degli oggetti. I conti vengono ignorati quando la garbage collection è abilitata. Credo che faccia parte del ciclo degli eventi, ma non ne sono sicuro. –
Il nuovo C++ 0x include funzionalità che semplificano l'implementazione della garbage collection. Vedi questo interview per esempio.
Il link non è valido ora. – Trilarion
Prova http://www.hboehm.info/gc/ –
Per un'implementazione reale in un linguaggio compilato, in questo caso C e/o C++, vedere il Boehm GC a http://www.hpl.hp.com/personal/Hans_Boehm/gc/
Haskell ha garbage collection, che si tratti di compilato in codice nativo o interpretato.
- 1. Non esiste una "lingua compilata" o una "lingua interpretata"
- 2. .NET Garbage Collector mystery
- 3. L'elisir ha un garbage collector?
- 4. LogManager e Garbage Collector
- 5. VBA Garbage Collector Dettagli
- 6. non utilizzare Garbage Collector nell'implementazione Scheme/Lisp
- 7. Eclipse: Pulsante Garbage Collector
- 8. Più garbage collector in java
- 9. Perché disabilitare il garbage collector?
- 10. e il garbage collector Go
- 11. Quando il garbage collector raccoglierà un Singleton?
- 12. Python: comportamento del garbage collector
- 13. Il garbage collector chiama Dispose()?
- 14. Android Garbage Collector Freed Memory
- 15. Java fili e garbage collector
- 16. Verifica se l'oggetto può essere recuperato dal garbage collector
- 17. Prestazioni relative di Garbage Collector (G1) Garbage First di Java?
- 18. Il codice Javascript è compilato o una lingua interpretata?
- 19. Riferimenti circolari in Javascript/Garbage collector
- 20. differenza tra distruttore e garbage collector
- 21. Xamarin garbage collector e circolari riferimenti
- 22. La lingua R è stata interpretata?
- 23. Quali Java Garbage Collector puliscono PermGen?
- 24. javascript Garbage Collector dispone di variabili globali?
- 25. C# e. Net prestazioni del garbage collector
- 26. Garbage Collector di monitoraggio in C#
- 27. Precise mode in Boehm Garbage Collector
- 28. Garbage collector .NET e memoria virtuale x64
- 29. Come disabilitare il garbage collector Java?
- 30. Quando viene eseguito il garbage collector .net?
Mi chiedo se stai assumendo una falsa dicotomia tra "interpretato" e "nativo". Java e C#, ad esempio, non sono né "interpretati" né "nativi" - vengono eseguiti (essenzialmente) in una VM, ma da un IL. –
Potete per favore Spiegare di più:? – Geek
Per quella conversazione, vedere i commenti sulla mia risposta. –