Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

LLVM a Garbage Collector

31 views
Skip to first unread message

Borneq

unread,
May 20, 2012, 7:45:19 AM5/20/12
to
LLVM obsługuje kod pośredni generowany z wielu innych języków programowania
m.in z C (Clang). Jak jest z automatycznym zwalnianiem pamięci? Czy to
mozłiwe aby GC działał dla języka C, w którym są wskaźniki i to
nieodróznialne od liczb?

fir.S...@gazeta.pl

unread,
May 20, 2012, 8:27:36 AM5/20/12
to
Borneq <bor...@antyspam.hidden.pl> napisał(a):

> LLVM obsĹ uguje kod poĹ redni generowany z wielu innych jÄ zykĂłw
programowania
>
> m.in z C (Clang). Jak jest z automatycznym zwalnianiem pamiÄ ci? Czy to
> mozĹ iwe aby GC dziaĹ aĹ dla jÄ zyka C, w ktĂłrym sÄ wskaĹşniki i to
> nieodrĂłznialne od liczb?
>

a do czego gc moglby sie przydac w (moim ulubionym) c?
pytam bo moze jest cos takiego ale w praktyce nigdy nie
trafilem jeszcze na taki przypadek (tj nie przychodzi
mi w danym momencie w c nic co mialoby podlegac pod gc)
(?) [mozliwe ze jest cos takiego tylko pisze ograniczone
przypadki programow]







--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

Borneq

unread,
May 20, 2012, 9:22:11 AM5/20/12
to
Użytkownik <fir.S...@gazeta.pl> napisał w wiadomości
news:jpanvo$50o$1...@inews.gazeta.pl...
> a do czego gc moglby sie przydac w (moim ulubionym) c?
> pytam bo moze jest cos takiego ale w praktyce nigdy nie
> trafilem jeszcze na taki przypadek (tj nie przychodzi
> mi w danym momencie w c nic co mialoby podlegac pod gc)
> (?) [mozliwe ze jest cos takiego tylko pisze ograniczone
> przypadki programow]

Pytam się, bo w http://llvm.org/Features.html jest
5. LLVM has full support for accurate garbage collection.
i do tego "accurate", podczas gdy obsługuje C a tam są wskaźniki

Edek Pienkowski

unread,
May 20, 2012, 9:46:23 AM5/20/12
to
Dnia Sun, 20 May 2012 15:22:11 +0200, Borneq napisal:
Nie wiem, czy wiesz co znaczy "accurate" w tym kontekście. Ja nie
wiedziałem, więc zajrzałem do
http://llvm.org/doc/Garbagecollection.html, co i Tobie polecam.
Muszę bardziej wnikliwie kiedyś zrobić rtfm, ale wygląda na to,
że ir llvm wspiera pluginy generujące kod co umożliwia mieć w
llvm ir opisy - podobne do debugowych - które podczas generacji
kodu powiadamiają GC gdzie są wszystkie pointery, w tym istniejące
w rejestrach. Można się spodziewać dużej dozy włochatości kodu,
ale inaczej w C się nie da; ta informacja podobna do dwarfa
oznacza właśnie accurate.

Niektóre projekty używają GC w C, ale o ile wiem na zasadzie
conservative i dużej ilości makr i generowanch typów.

Edek

M.M.

unread,
May 20, 2012, 11:16:07 AM5/20/12
to
Borneq <bor...@antyspam.hidden.pl> napisał(a):

> LLVM obsĹ uguje kod poĹ redni generowany z wielu innych jÄ zykĂłw programowania
>
> m.in z C (Clang). Jak jest z automatycznym zwalnianiem pamiÄ ci? Czy to
> mozĹ iwe aby GC dziaĹ aĹ dla jÄ zyka C, w ktĂłrym sÄ wskaĹşniki i to
> nieodrĂłznialne od liczb?
>
Edek odpisał bardziej szczegółowo - fajnie. Bez wnikania w szczegóły:
po prostu nie można napisać programu X który przewidzi w każdym programie Y
czy dany wskaźnik będzie jeszcze potrzebny czy nie. Trzeba program X jakoś
tak zmodyfikować, aby zadanie dla programu Y było (znacznie) łatwiejsze.
Po ułatwieniu można uzyskać podobny efekt do GB. Ale czy warto robić
takie zabiegi w językach typu C/C++ to trochę powątpiewam.

Pozdrawiam

Borneq

unread,
May 20, 2012, 11:53:45 AM5/20/12
to
Użytkownik " M.M." <mariott...@gazeta.pl> napisał w wiadomości
news:jpb1rm$qe0$1...@inews.gazeta.pl...
> po prostu nie można napisać programu X który przewidzi w każdym programie
> Y
> czy dany wskaźnik będzie jeszcze potrzebny czy nie. Trzeba program X jakoś
> tak zmodyfikować, aby zadanie dla programu Y było (znacznie) łatwiejsze.
> Po ułatwieniu można uzyskać podobny efekt do GB. Ale czy warto robić
> takie zabiegi w językach typu C/C++ to trochę powątpiewam.

Ale czy można na przykład przetłumaczyć Javę na C w ten sposób aby kod w C
był specjalnie udekorowany dla Garbage Collectora? Czy są jakieś przykłady
takiego kodu w C kompilowanego przez Clanga?
Na stronie LLVM nie ma wirtualne maszyny ani kompilatora dla Windows, ale
podobno można skompilować ze źródeł. Do Ubuntu są do wersji 11.10, czy
również pojdą pod 12.04?

M.M.

unread,
May 20, 2012, 12:08:08 PM5/20/12
to
Borneq <bor...@antyspam.hidden.pl> napisał(a):
> Ale czy można na przykład przetłumaczyć Javę na C w ten sposób aby kod w C
> był specjalnie udekorowany dla Garbage Collectora?

Aby to było możliwe, to jeszcze trzeba ręcznie "udekorować" kod w Javie. To
udekorowanie w Javie powinno zawierać informacje o tym, jak konwerter
ma udekorować kod w C. Można też wkompilować bibliotekę z GB.

> Czy są jakieś przykłady
> takiego kodu w C kompilowanego przez Clanga?
> Na stronie LLVM nie ma wirtualne maszyny ani kompilatora dla Windows, ale
> podobno można skompilować ze źródeł. Do Ubuntu są do wersji 11.10, czy
> również pojdą pod 12.04?
Nawet nie wiem co to jest LLVM, pierwszy raz słyszę o czymś takim :)

Borneq

unread,
May 20, 2012, 1:39:58 PM5/20/12
to
Użytkownik "Edek Pienkowski" <edek.pi...@gmail.com> napisał w
wiadomości news:jpasjf$l0v$1...@inews.gazeta.pl...
> Nie wiem, czy wiesz co znaczy "accurate" w tym kontekście. Ja nie
> wiedziałem, więc zajrzałem do
> http://llvm.org/doc/Garbagecollection.html, co i Tobie polecam.

W http://llvm.org/docs/GarbageCollection.html można przeczytać
"However, LLVM does not itself provide a garbage collector—this should be
part of your language's runtime library. LLVM provides a framework for
compile timecode generation plugins."

Borneq

unread,
May 21, 2012, 1:54:18 AM5/21/12
to
Użytkownik " M.M." <mariott...@gazeta.pl> napisał w wiadomości
news:jpb1rm$qe0$1...@inews.gazeta.pl...
> po prostu nie można napisać programu X który przewidzi w każdym programie
> Y
> czy dany wskaźnik będzie jeszcze potrzebny czy nie. Trzeba program X jakoś
> tak zmodyfikować, aby zadanie dla programu Y było (znacznie) łatwiejsze.

Skoro trzeba zmodyfikować to jaki sens używania GC?, można zamiast tego
wstawiać delete.

Roman W

unread,
May 21, 2012, 4:14:20 AM5/21/12
to
Cecha charakterystyczna programow napisanych w C czy C++ bez GC jest fanatyczne unikanie (re)alokacji pamieci, bo to kosztuje, kosztem czytelnosci programu. Kiedy sie uzywa GC, te operacje staja sie tansze, i nie trzeba sie tak meczyc.

RW

Borneq

unread,
May 21, 2012, 8:40:19 AM5/21/12
to
Użytkownik "Roman W" <bloody...@gazeta.pl> napisał w wiadomości
news:37b7e9b9-0be2-4f9f...@googlegroups.com...
> Cecha charakterystyczna programow napisanych w C czy C++ bez GC jest
> fanatyczne
> unikanie (re)alokacji pamieci, bo to kosztuje, kosztem czytelnosci
> programu. Kiedy sie
> uzywa GC, te operacje staja sie tansze, i nie trzeba sie tak meczyc.

Za zwalnianie odpowiada GC, a co z alokacją? W jaki sposób tańsza? Czy
alokacja dlatego tania że wskaźniki mogą być przesunięte, pamięć nie jest
rozdrobiona, i po lewo mamy pamięć przydzieloną, po prawo wolną i tylko
przesuwamy wskaźnik?

Roman W

unread,
May 21, 2012, 8:51:00 AM5/21/12
to

weary.fighter.of.grunge

unread,
May 21, 2012, 8:52:15 AM5/21/12
to
>
> Cecha charakterystyczna programow napisanych w C czy C++ bez GC jest fanaty=
> czne unikanie (re)alokacji pamieci, bo to kosztuje, kosztem czytelnosci pro=
> gramu. Kiedy sie uzywa GC, te operacje staja sie tansze, i nie trzeba sie t=
> ak meczyc.
>

W jaki sposob meczyc? Pytam bo jak zyje i pisze w c nie znam
takiego przypadku. Moze ktos podac jakis taki przypadek
o jakim mowa, rozwazylbym to. Ciekawe czy to nie da sie zrobic
normalnie np na stosie.

??

Roman W

unread,
May 21, 2012, 9:17:10 AM5/21/12
to
On Monday, May 21, 2012 1:52:15 PM UTC+1, weary.fighter.of.grunge wrote:
> >
> > Cecha charakterystyczna programow napisanych w C czy C++ bez GC jest fanaty=
> > czne unikanie (re)alokacji pamieci, bo to kosztuje, kosztem czytelnosci pro=
> > gramu. Kiedy sie uzywa GC, te operacje staja sie tansze, i nie trzeba sie t=
> > ak meczyc.
> >
>
> W jaki sposob meczyc? Pytam bo jak zyje i pisze w c nie znam
> takiego przypadku. Moze ktos podac jakis taki przypadek
> o jakim mowa, rozwazylbym to. Ciekawe czy to nie da sie zrobic
> normalnie np na stosie.

Typowy usage pattern w C++ to prealokacja pamieci roboczej, a nastepnie przekazywanie odnosnika do niej (w jakiejs formie: wskaznika, referencji, sprytnego wskaznika, itd.) do niej, albo do "workspace" jej zawierajacej, z procedury do procedury, nawet jezeli jej zawartosc jest nadpisywana. W Javie mozna po prostu zadeklarowac sobie tablice dokladnie tam gdzie jest ona potrzebna, i tez jest dobrze.

C++ z kolei umozliwia tworzenie obiektow na stosie, co jest jeszcze szybsze.

RW

fir.S...@gazeta.pl

unread,
May 21, 2012, 10:00:07 AM5/21/12
to
Roman W <bloody...@gazeta.pl> napisał(a):

> On Monday, May 21, 2012 1:52:15 PM UTC+1, weary.fighter.of.grunge wrote:
> > >=20
> > > Cecha charakterystyczna programow napisanych w C czy C++ bez GC jest fa=
> naty=3D
> > > czne unikanie (re)alokacji pamieci, bo to kosztuje, kosztem czytelnosci=
> pro=3D
> > > gramu. Kiedy sie uzywa GC, te operacje staja sie tansze, i nie trzeba s=
> ie t=3D
> > > ak meczyc.
> > >=20
> >=20
> > W jaki sposob meczyc? Pytam bo jak zyje i pisze w c nie znam=20
> > takiego przypadku. Moze ktos podac jakis taki przypadek=20
> > o jakim mowa, rozwazylbym to. Ciekawe czy to nie da sie zrobic=20
> > normalnie np na stosie.
>
> Typowy usage pattern w C++ to prealokacja pamieci roboczej, a nastepnie prz=
> ekazywanie odnosnika do niej (w jakiejs formie: wskaznika, referencji, spry=
> tnego wskaznika, itd.) do niej, albo do "workspace" jej zawierajacej, z pro=
> cedury do procedury, nawet jezeli jej zawartosc jest nadpisywana. W Javie m=
> ozna po prostu zadeklarowac sobie tablice dokladnie tam gdzie jest ona potr=
> zebna, i tez jest dobrze.
>
> C++ z kolei umozliwia tworzenie obiektow na stosie, co jest jeszcze szybsze=
> ..

no to jesli o to chodzi to mozna zrobic na stosie

void test()
{
auto ListaItemow[] = PodajInventoryPostaciNr(15);

loguj( ListaItemow[] );
}

tak ze tutaj nie tylko gc ale i heap nie jest
potrzebny (slowo auto dodalem dla podkreslenia ze to na stosie)

co prawda obecne stare c tego nie wspiera (*) i to wymaga
manipulowania wskaznikiem stosu, ale (o ile sie nie
myle bo nie myslem o tym za duzo) mozna to zrobic
w ramach statego systemu stos+globale-malloc ze tak powiem

(*) nawet w obecnym c mozna to zrobic z tego co sie orientuje

void test()
{
conts int lista_ilemow_max = 10000;

auto ListaItemow[lista_ilemow_max];

PodajInventoryPostaciNr(15, ListaItemow);

loguj( ListaItemow );
}

kosztem zaalokowanie na stosie nie dokladnie tyle ile trzeba
tylko maksymalnej dopuszczalnej wartosci (ktos wie czy to by
ruszylo? moze bym tego uzywal bo lubie takie ciekawe wynalazki)


moze jakis inny przypadek (gdzie moznaby sie niemaczyc
uzywajac czegos w rodzaju gc lub recznej dealokacji) ?

(niby mozna sobie cos takiego wyobrazic np gre ktora
zawiera w sobie dwie rozne gry i przelacza sie miedzy jedna a
druga dealokujac ram nieuzywanej - ale w praktyce nie natrafilem
jeszcze na takie cos, i tak nie wiem czy nie daloby sie
kombinowac ze stosem w tym nawet wypadku a jak nie to i
tak chyba realokowanie tablic do 0 (ale nie zamazywanie
wskaznikow) byloby chyba lepsze niz 'calkowite odpinanie'
(acz nie mam jasnosci w tych sprawach )

weary fighter of grunge

unread,
May 21, 2012, 10:05:41 AM5/21/12
to
> auto ListaItemow[] = PodajInventoryPostaciNr(15);
tu powinno byc

auto Item listaItemow[] = PodajInventoryPostaciNr(15);

(gdzie item to jakas struktura)

Maciej Sobczak

unread,
May 21, 2012, 10:23:34 AM5/21/12
to
On 21 Maj, 10:14, Roman W <bloody_rab...@gazeta.pl> wrote:

> Cecha charakterystyczna programow napisanych w C czy C++ bez GC jest fanatyczne unikanie (re)alokacji pamieci, bo to kosztuje, kosztem czytelnosci programu.

To zależy od kontekstu. Bardzo często mam wrażenie, że kod właśnie
zyskuje na czytelności tam, gdzie nie ma (re)alokacji. Wraz z alokacją
pojawiają się w kodzie wskaźniki a potem jest już tylko gorzej.

Alokacja to w ogóle dosyć niskopoziomowej narzędzie i jak z tego typu
narzędziami, im lepszy ma być kod, tym powinno być tego mniej.

> Kiedy sie uzywa GC, te operacje staja sie tansze, i nie trzeba sie tak meczyc.

Wtedy trzeba się męczyć z czymś innym. Np. z nullami albo z
niezamierzonym współdzieleniem obiektów, albo niezamierzoną
wielokrotną alokacją tego samego, gubiąc przy okazji poprzedni stan
(takiego właśnie buga w Javie ostatnio widziałem), itd.
To nie jest postęp, to jest zamiana pewnych niskopoziomowych problemów
na inne niskopoziomowe problemy.

--
Maciej Sobczak * http://www.msobczak.com * http://www.inspirel.com

Roman W

unread,
May 21, 2012, 10:47:43 AM5/21/12
to
Racja, ale przynajmniej mozna sobie wybrac takie problemy, jakie sie lubi bardziej.

RW

Borneq

unread,
May 21, 2012, 11:08:25 AM5/21/12
to
Użytkownik "Roman W" <bloody...@gazeta.pl> napisał w wiadomości
news:e89a9b9f-c37e-4810...@googlegroups.com...
> http://www.umbrant.com/blog/2012/twitter_jvm_tuning.html

"Garbage collection is also simple; live objects get copied out to the first
survivor, and then the Eden pointer gets zeroed back to the start of the
heap. Trash doesn't need to be explicitly zeroed out, so deallocation is
"free". Note that this efficiency is true only for small objects; larger
objects (megabytes) are allocated in a different and more expensive way
directly to the old generation"
To znaczy małe obiekty są kopiowane jeden za drugim, a jak uaktualniane są
wskaźniki do nich?

przegrany człowiek fir *

unread,
May 21, 2012, 11:30:23 AM5/21/12
to
Roman W <bloody...@gazeta.pl> napisał(a):

> On Monday, May 21, 2012 3:23:34 PM UTC+1, Maciej Sobczak wrote:
> > On 21 Maj, 10:14, Roman W <bloody_rab...@gazeta.pl> wrote:
> >=20
> > > Cecha charakterystyczna programow napisanych w C czy C++ bez GC jest fa=
> natyczne unikanie (re)alokacji pamieci, bo to kosztuje, kosztem czytelnosci=
> programu.
> >=20
> > To zale=BFy od kontekstu. Bardzo cz=EAsto mam wra=BFenie, =BFe kod w=B3a=
> =B6nie
> > zyskuje na czytelno=B6ci tam, gdzie nie ma (re)alokacji. Wraz z alokacj=
> =B1
> > pojawiaj=B1 si=EA w kodzie wska=BCniki a potem jest ju=BF tylko gorzej.
> >=20
> > Alokacja to w og=F3le dosy=E6 niskopoziomowej narz=EAdzie i jak z tego ty=
> pu
> > narz=EAdziami, im lepszy ma by=E6 kod, tym powinno by=E6 tego mniej.
> >=20
> > > Kiedy sie uzywa GC, te operacje staja sie tansze, i nie trzeba sie tak =
> meczyc.
> >=20
> > Wtedy trzeba si=EA m=EAczy=E6 z czym=B6 innym. Np. z nullami albo z
> > niezamierzonym wsp=F3=B3dzieleniem obiekt=F3w, albo niezamierzon=B1
> > wielokrotn=B1 alokacj=B1 tego samego, gubi=B1c przy okazji poprzedni stan
> > (takiego w=B3a=B6nie buga w Javie ostatnio widzia=B3em), itd.
> > To nie jest post=EAp, to jest zamiana pewnych niskopoziomowych problem=F3=
> w
> > na inne niskopoziomowe problemy.
>
> Racja, ale przynajmniej mozna sobie wybrac takie problemy, jakie sie lubi b=
> ardziej.=20
>
z tym ze ciagle ciekawe o jakich to problemach (zwiazanych
brakiem gc w c) mowa ????

bo na razie to stanelo mw na tym ze nie wiem czego w c nie
mozna zrobic na ramie statycznym, encjach typu auto na stosie

( i EW moze czasem (tez pytanie kiedy to jest potrzebne
bo na codzien nie uzywam) sporadycznych realokach czy innych
tego typu sprawach typu ew swego rodzaju unie (tj np dwie
gry na tym samym kawalku ramu zaadresowane przez rzutowanie)

tej trzeciej opcji ja nie uzywalem poki co a i tak jest to
(z tego jak niedokladnie widze) opcja bezwskaznikowa, (twarde
adresy) czyli to wszystko pozbawione jest problemow zwiazanych
ze wskaznikami (ypu przestrzen na bledy i opoznienia zwiazane
z posrednimi referencjami)

(* znowu mam pewnego doła zwiazanego zmoja cienkościa, jak i zlym
samopoczuciem zwiazanym ze zlym stanem zdrowotnym)

weary fighter of grunge fir

unread,
May 21, 2012, 11:58:09 AM5/21/12
to
> (* znowu mam pewnego doła zwiazanego zmoja cienkościa, jak i zlym
> samopoczuciem zwiazanym ze zlym stanem zdrowotnym)

goddamn chcialbym wiedziec co mnie tak skutecznie oglupia i
wykancza bo na razie to mam nawet kilku kandydatow (czy
programowanie sie do tego jednak nie przyczynia), na pierwszym
miejscu jest chyba jednak przewlekle chorowanie (ustawiczny ból
jak prąd w kończynach - co za cholerstwo)

prof fir

unread,
May 21, 2012, 4:41:08 PM5/21/12
to
>
> Cecha charakterystyczna programow napisanych w C czy C++

c i c++ to zupelnie inna bajki,

w ramach 'wersji pisania' w c roznic moze nie ma az tak
wielkich choc i tak sa zauwazalne,
podejrzewam ze w ramach 'wersji' c++ tych roznic jest
o wiele wiecej i są rozne 'wersje pisania' w c++
w kazdym razie architektury progsow w c i c++ sa raczej
na pewno bardzo rozne




> bez GC jest fanaty=czne unikanie (re)alokacji pamieci,

Edek Pienkowski

unread,
May 21, 2012, 5:10:23 PM5/21/12
to
Dnia Mon, 21 May 2012 20:41:08 +0000, prof fir napisal:

>> Cecha charakterystyczna programow napisanych w C czy C++
>
> c i c++ to zupelnie inna bajki,

Mylisz się. Może masz rację ogólnie, niektórych zabaw z programowaniem
generycznym nie da się przełożyć na C, ale na poziomie
stl/gc/wątki/różne mądre typy danych zdziwiłbyś się co można
zaimplementować w C używając zapomnianej w C++ sztuki posługiwania
się makrami i generowanym kodem. Oczywiście do pewnej granicy,
ale o ile ktoś nie lubuje się w MPLu czy Proto to zaskakująco
dużo cech można osiągnąć prostym C.

Wyciąłeś słow "wersja"? ;)

Edek
0 new messages