Czy jest możliwe, aby język nieinterpretowany miał kosz na śmieci. Języki interpretowane mają Interpretor uruchamiający Program wiersz po linii, więc Interpretor może równie dobrze udostępniać środowisko wykonawcze z GC. Ale czy możliwe jest posiadanie Garbage Collectora dla dowolnego innego języka bez budowania GC w samym kodzie?Czy język nieinterpretowany może zawierać narzędzie do zbierania śmieci?
Odpowiedz
Tak.
C++ z implementacją inteligentnego wskaźnika będzie zbierać śmieci, gdy licznik odwołań do wskaźnika inteligentnego przejdzie do zera.
Masz zbiórkę śmieci. Nie zbudowałeś tego sam.
Myślę, że chodzi o śledzenie zbierania śmieci, a refcount nie jest substytutem. –
To nie jest zbieranie śmieci. Połącz kilka obiektów w taki sposób, aby miały cykl i nigdy nie zostaną zniszczone, chyba że ręcznie przerwiesz cykl. – sharptooth
@sharptooth: weź to z resztą świata, nie ja: http://www.codeproject.com/KB/cpp/automatic_gc_using_sp.aspx –
Odśmiecanie wymaga jedynie, aby zmienne wskaźnika były oznaczone specjalną metodą, aby środowisko wykonawcze mogło je zidentyfikować i użyć do usuwania śmieci. Nie ma to nic wspólnego z interpretacją/kompilacją, lecz wymaga specjalnego środowiska wykonawczego i przechowywania dodatkowych danych dla każdej zmiennej.
Dobrze zinterpretowane języki dają ci czas działania. Co więcej, Interpretor może łatwiej pracować jako run-time i uruchamiać także śmieciarze. Każdy język ojczysty będzie miał system operacyjny jako środowisko wykonawcze? A więc nie ma GC? – Geek
GC i interpretacja nie są ze sobą powiązane. Tak, w przypadku języka interpretowanego potencjalnie łatwiej jest zbierać elementy do odśmiecania, ale mogą to również robić języki nieinterpretowane. Zwykle systemy operacyjne nie mają wbudowanej obsługi usuwania pamięci, ale wiele środowisk językowych ma. – sharptooth
Nawet bez zaznaczania zmiennych wskaźnika w specjalny sposób można mieć tak zwaną konserwatywną GC, która traktuje całą zawartość pamięci jako potencjalne wskaźniki. Zobacz odpowiedź Boehm'a w drugiej odpowiedzi. –
Cóż, języki .NET (które emitują do IL - C#, VB.NET, MC++, itp.) Nie są interpretowane (szczególnie jeśli używasz NGEN) - i mają pełne usuwanie śmieci.
Podobnie, Java.
Java jest interpretowana jako mój przyjaciel. Nawet jeśli jest z HotSpotem. – Geek
Nie - może nie być "natywny", ale to nie czyni go "interpretowanym" - przynajmniej nie w normalnej definicji. –
Nie odpowiadam na twoją odpowiedź "przynajmniej nie w normalnej definicji"? Jest interpretowany. ?? – Geek
Objective-C 2 ma teraz odśmiecanie i dostępne są także biblioteki do zbierania śmieci dla C++.
Myślę, że jest to możliwe tak długo, jak długo istnieje, język pozwala na sprawdzenie obiektów, dzięki czemu można przejść przez drzewo obiektów.
Czy możesz wyjaśnić, jak to działa. To jest jak dołączanie wątku GC razem z twoim programem, nieprawdaż? – Geek
Oddzielny wątek nie ma związku z GC - tak po prostu jest tak, jak robi to Java.Większość C++ (i Objective-C) radzi sobie z tym przy kasowaniu, gdy liczba ref idzie na zero. –
Objective-C 2 ma prawdziwy zbiór śmieci; środowisko wykonawcze przemierza drzewo obiektów. Refcounts są ignorowane, gdy włączone jest usuwanie śmieci. Wierzę, że to część pętli zdarzeń, ale nie jestem pewien. –
Nowe C++ 0x zawiera funkcje, które ułatwiają implementację funkcji czyszczenia pamięci. Zobacz na przykład: interview.
Link jest teraz nieprawidłowy. – Trilarion
Wypróbuj http://www.hboehm.info/gc/ –
Dla rzeczywistej implementacji w skompilowanym języku, w tym przypadku C i/lub C++, zobacz Boehm GC w http://www.hpl.hp.com/personal/Hans_Boehm/gc/
Haskell ma zbieranie śmieci, czy to skompilowane do kodu natywnego lub interpretowane.
- 1. Narzędzie do zbierania śmieci dla dalvik
- 2. Czas zbierania śmieci Java?
- 3. Algorytm zbierania śmieci JVM
- 4. Niezwykle długie czasy zbierania śmieci
- 5. Obiekty kwalifikujące się do zbierania śmieci
- 6. podłańcuchy i urządzenie do zbierania śmieci Go
- 7. Podsumowanie ostatniej dekady zbierania śmieci?
- 8. Czy gcc 4.8.1 ma obsługę C++ 11 do zbierania śmieci?
- 9. Czy Objective-C ma moduł do zbierania śmieci na iPhonie?
- 10. Czy istnieje narzędzie do zbierania statystyk użycia aplikacji Win32?
- 11. Zatrzymywanie zbierania śmieci dla niezarządzanego delegata
- 12. Czy powinniśmy używać "śmieci" do zbierania śmieci "stacji roboczej" lub "serwera"?
- 13. Jakie są "precyzyjne" algorytmy zbierania śmieci?
- 14. Czy ListView może zawierać Fragmenty
- 15. Odświeżenie przeglądarki nie powoduje zbierania śmieci
- 16. Czy metoda zbierania śmieci CLR oznacza, że można bezpiecznie rzucać odwołania do obiektów kołowych?
- 17. wyjątek scbl Sterty wyczerpane podczas zbierania śmieci
- 18. Czy zbierania śmieci Objective-C 2.0 zbierać struktury C?
- 19. W którym miejscu jest dokładnie dostępny obiekt do zbierania śmieci?
- 20. Czy AAR może zawierać zależności przechodnie?
- 21. Przeciek pamięci podczas korzystania ze zbierania śmieci za pomocą glib
- 22. Czy tablica JavaScript może się sama zawierać?
- 23. Czy konto DDD może zawierać łańcuchy?
- 24. Czy obraz PNG może zawierać wiele stron?
- 25. Czy jQuery może zawierać nazwę znacznika?
- 26. Czy wykres zależności sterowania może zawierać pętle?
- 27. Jakie algorytmy zbierania śmieci wykorzystują wszystkie 5 głównych przeglądarek?
- 28. Czy adres URL może zawierać gwiazdkę?
- 29. Czy gałąź GIT może zawierać podzbiór danych?
- 30. Czy ten obiekt java kwalifikuje się do zbierania śmieci na liście
Zastanawiam się, czy zakładasz fałszywą dychotomię między "interpretowanym" a "rodzimym". Java i C# na przykład nie są ani "interpretowane" ani "natywne" - działają (zasadniczo) w VM, ale z IL. –
Czy możesz wyjaśnić więcej:? – Geek
W tej rozmowie zobacz komentarze do mojej odpowiedzi. –