Zkušenosti s jazykem D

RAII

Zkušenosti s jazykem D
« kdy: 22. 02. 2014, 19:21:08 »
Zkoušel někdo z vás jazyk D? Jaké jsou dojmy? Já sem se na něj trošku koukal a teda nic moc. Straší tam GC. De sice vypnout, ale knihovna a některé language features pak moc dobře nefungujou. Plus, GC při zběru paměti freezne všechny vlákna (nevím jak sou na tom jiné GC, ale mám pocit že to de i bez freezu). Teda fakt netuším proč by člověk měl jít do D a ne třeba do javy ...
« Poslední změna: 23. 02. 2014, 21:41:48 od Petr Krčmář »


Novy

Re:jazyk D
« Odpověď #1 kdy: 22. 02. 2014, 20:36:46 »
A proč do něho jdes?

Kolemjdoucí

Re:jazyk D
« Odpověď #2 kdy: 22. 02. 2014, 23:57:37 »
GC při zběru paměti freezne všechny vlákna (nevím jak sou na tom jiné GC, ale mám pocit že to de i bez freezu).

Až se váš pocit změní v jistotu tím že najdete implementaci GC která nebude potřebovat "stop the world" neboli zastavení všech vláken tak nám prosím dejte vědět.

Sten

Re:jazyk D
« Odpověď #3 kdy: 23. 02. 2014, 00:37:50 »
GC při zběru paměti freezne všechny vlákna (nevím jak sou na tom jiné GC, ale mám pocit že to de i bez freezu).

Až se váš pocit změní v jistotu tím že najdete implementaci GC která nebude potřebovat "stop the world" neboli zastavení všech vláken tak nám prosím dejte vědět.

Concurrent Garbage Collector

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:jazyk D
« Odpověď #4 kdy: 23. 02. 2014, 02:00:53 »
Zkoušel někdo z vás jazyk D? Jaké jsou dojmy? Já sem se na něj trošku koukal a teda nic moc. Straší tam GC. De sice vypnout, ale knihovna a některé language features pak moc dobře nefungujou. Plus, GC při zběru paměti freezne všechny vlákna (nevím jak sou na tom jiné GC, ale mám pocit že to de i bez freezu). Teda fakt netuším proč by člověk měl jít do D a ne třeba do javy ...

Nejlepší způsob GC je nevytvářet odpad (garbage), tj. alokovat vždy, když to jde, na zásobníku. D také umožňuje alokovat na haldě manuálně, takže lze použít chytré pointry apod. Běžná aplikace (nějaké GUI kolem databáze + trochu business logiky) by s GC neměla mít problem. High performance kód by měl používat zásobník a vlastní alokátor.


neron

Re:jazyk D
« Odpověď #5 kdy: 23. 02. 2014, 09:36:41 »
Běžná aplikace (nějaké GUI kolem databáze + trochu business logiky) by s GC neměla mít problem. High performance kód by měl používat zásobník a vlastní alokátor.

Nemáte nějaký link na to, jak tohle dělat v Javě (jde-li to vůbec)? Zrovna včera jsem se snažil něco najít, ale neúspěšně.

podlesh

Re:jazyk D
« Odpověď #6 kdy: 23. 02. 2014, 11:19:54 »
Běžná aplikace (nějaké GUI kolem databáze + trochu business logiky) by s GC neměla mít problem. High performance kód by měl používat zásobník a vlastní alokátor.

Nemáte nějaký link na to, jak tohle dělat v Javě (jde-li to vůbec)? Zrovna včera jsem se snažil něco najít, ale neúspěšně.
Nejde. Jedině snad alogovat pole/buffer a v něm si dělat vlastní správu paměti (to se někdy dělá, ale je to hodně nepraktické).

perceptron

Re:jazyk D
« Odpověď #7 kdy: 23. 02. 2014, 11:23:48 »
v jave nemate moznost vlastneho alokatora. neviete ani alokovat objekty na stacku. mozete skusit pouzit inu implementaciu gc (otazka je, preco to chcete)

http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

high performance kod v jave sa riesi inak

http://java.cz/article/cz-podcast-90-psani-low-latency-java-aplikaci


zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:jazyk D
« Odpověď #8 kdy: 23. 02. 2014, 12:42:34 »
Běžná aplikace (nějaké GUI kolem databáze + trochu business logiky) by s GC neměla mít problem. High performance kód by měl používat zásobník a vlastní alokátor.

Nemáte nějaký link na to, jak tohle dělat v Javě (jde-li to vůbec)? Zrovna včera jsem se snažil něco najít, ale neúspěšně.

Java to takto neumí, ale zato má lepší GC a některé objekty dává na zásobník automaticky. Vzhledem k délce vývoje je správa paměti v Javě vysoce optimalizovaná. Kdyby to přesto nestačilo, tak snad jen nativní kód.

RAII

Re:jazyk D
« Odpověď #9 kdy: 23. 02. 2014, 13:03:11 »
Pánové, já vás nechápu...proč se koukám na jazyk D? Sem zvědavý. Ano, vým, jde vytvořit gc bez freeznuti (reference counting). Ma však několik vad, třeba cyklicke datove struktury (jež se neuvolní). D má nějaký derivat mark and sweep (netuším jak maj přesně resenou fragmentaci). Takže, prosím, nenapadat me znalosti, pouze sem chtěl začít debatu. Pozoruji totiž že nabírá D na síle.

neron

Re:jazyk D
« Odpověď #10 kdy: 23. 02. 2014, 13:04:37 »
Díky všem za odkazy/komentáře. Píšu démona, které musí být schopen obsloužit požadavky do sekundy. A trochu se bojím toho, co se stane, až se spustí GC.

Bla

Re:jazyk D
« Odpověď #11 kdy: 23. 02. 2014, 13:40:13 »
Co se stane?

To ti řeknu naprosto přesně, nestane se vůbec nic, protože bez OS, který zaručí, že tvůj program to řízení opravdu dostane, to nejsi schopný zajistit.

ALE pokud v programu uděláš kritickou sekci (critical section) tak by v jejím průběhu nemělo k podobnému excesu dojít, tedy pokud to vymýšlel někdo se špetkou rozumu.

Další metodou je zavolat GC sám, to vyprázdní čítač GC a nějakou dobu dá pokoj.

No a třeba v C# je už tahle možnost:
http://msdn.microsoft.com/en-us/library/system.runtime.gclatencymode.aspx

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:jazyk D
« Odpověď #12 kdy: 23. 02. 2014, 15:27:24 »
Díky všem za odkazy/komentáře. Píšu démona, které musí být schopen obsloužit požadavky do sekundy. A trochu se bojím toho, co se stane, až se spustí GC.

V D lze na chvíli zakázat GC, takže se zaručeně nespustí. A podle dokumentace, pokud se používají vlastní alokátory, tak se nespustí i bez zákazu (logicky). To by mělo jít použít univerzálně.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:jazyk D
« Odpověď #13 kdy: 23. 02. 2014, 15:32:07 »
Pánové, já vás nechápu...proč se koukám na jazyk D? Sem zvědavý. Ano, vým, jde vytvořit gc bez freeznuti (reference counting). Ma však několik vad, třeba cyklicke datove struktury (jež se neuvolní). D má nějaký derivat mark and sweep (netuším jak maj přesně resenou fragmentaci). Takže, prosím, nenapadat me znalosti, pouze sem chtěl začít debatu. Pozoruji totiž že nabírá D na síle.

To je tak jediná vada. Ale proto se používají slabé reference (__weak v ObjC, weak_ptr v STL, WinRT také něco má). Plně automatický GC má smysl jen když přesouvá přeživší objekty, čímž se zaručí deterministická alokace na haldě, jinak totiž přináší jen nevýhody.

Pavel Tisnovsky

Re:jazyk D
« Odpověď #14 kdy: 23. 02. 2014, 16:39:12 »
Pánové, já vás nechápu...proč se koukám na jazyk D? Sem zvědavý. Ano, vým, jde vytvořit gc bez freeznuti (reference counting). Ma však několik vad, třeba cyklicke datove struktury (jež se neuvolní). D má nějaký derivat mark and sweep (netuším jak maj přesně resenou fragmentaci). Takže, prosím, nenapadat me znalosti, pouze sem chtěl začít debatu. Pozoruji totiž že nabírá D na síle.

I pri pocitani referenci bude muset GC zastavit aktivni vlakna, rozdil je jen v tom, ze nemusi udelat STW pri oznacovani zivych/nezivych objektu. STW chovani lze omezit, napriklad tak, ze se vlakna zastavuji postupne, coz ale pro RT aplikaci je stejne spatne jako SWT :(