1141
Studium a uplatnění / Re:Bude za pár let kvalitní, zaměstnatelný programátor nedostatkové zboží?
« kdy: 29. 03. 2017, 15:37:27 »Ono hlavne pro tohle vubec nemusis kod zaplacavat nejakymi makry...
Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.
To nebude plnohodnotné GC, ale buď RC nebo v podstatě RAII. Výhody snad vidí každý.
Právě jsi porušil ten single exit, čímž jsi to dokonale zprasil.Kód: [Vybrat]Jestli chápu správně, tak pro tebe kód, kde třetinu kódu zabírá memory management...v1 = priprav_objekt();
v2 = pripav_objekt_2(v1);
if (v2 == null) {
free(v1);
return;
}
v3 = priprav_objekt_3(v1, v2);
if (v3 == null) {
free(v2);
free(v1);
}
Jestli je podle tebe normální na každý pár alokace a free napsat 4 řádky kódu, který s tím pracuje, pak ano, třetina kódu bude memory management a v takovém případě zůstaň u něčeho s GC, stejně to tím nevytrhneš.
Skoro - použití GC je (velmi často, ne vždy) zbytečnost, ale má svůj super use case - neprogramátoři, prototypování, v některých případech i v produkci.Jasně, takže....:
Nevidím problém v tom si paměť uvolnit sám, přesně v moment, kdy má být uvolněna. Typicky v Cčku na malloc pohlížím jako na blok - když napíšu malloc, hned pod něj píšu free a kód strčím mezi. Při dodržení single exit point je to velmi spolehlivé.
...
Ano, uvnitř bloku se může stát ledacos špatného, ale buď je to správně ošetřeno, nebo to není tak kritické a blok dojede včetně free, nebo to třeba segfaultne a paměť se mi uvolní tak nějak přirozeně, nebo je to ve stavu, ve kterém to nikdy nemělo být a musí se to vyřešit. Tohle ani GC nezachrání.
Kód: [Vybrat]Jasně, dá se to trošku vylepšit těma "goto" a la linux kernel, případně nějakým jedním místem, kde uvolním všechno, co není null... nedejbože, aby na ten objekt ukazovalo něco od někud jinud, že....v1 = priprav_objekt();
v2 = pripav_objekt_2(v1);
if (v2 == null) {
free(v1);
return;
}
v3 = priprav_objekt_3(v1, v2);
if (v3 == null) {
free(v2);
free(v1);
}
Hodně debilní kód, není divu, že software vypadá, jak vypadá. Na tomto příkladu je vidět, jak by javista psal v C, kdyby ho k tomu pustili. Zůstaňte fakt radši u bicyklu s postranními kolečky, přechod na Porsche opravdu nedopadne dobře.
Tak co udelas misto toho? Slozis to ze trech volani v matrjosce, ze kterych nebude jasne, o co jde, ze kod znamenaKód: [Vybrat]a zbytek je omacka?v1 = priprav1()
v2 = priprav2()
c2 = priprav3()
Ne. Ze všeho nejdřív bych se podíval, jestli jde předávat objekty na zásobníku. Pokud ne, tak použiju nějakou formu správy paměti (jako v GCD). A pokud to z nějakého důvodu není v žádném případě žádoucí, tak použiju makro, které mi zajistí úklid ve všech větvích kódu, na unixech by bylo například udělané pomocí __attribute__(cleanup). Existují i jiné způsoby, ale ne tak univerzální, např. jen pro kód běžící v rámci nějaké smyčky událostí, ale to už moc odbočuju.
A co tím získáte, když funkci GC simulujete pomocí makra.
Skoro - použití GC je (velmi často, ne vždy) zbytečnost, ale má svůj super use case - neprogramátoři, prototypování, v některých případech i v produkci.Jasně, takže....:
Nevidím problém v tom si paměť uvolnit sám, přesně v moment, kdy má být uvolněna. Typicky v Cčku na malloc pohlížím jako na blok - když napíšu malloc, hned pod něj píšu free a kód strčím mezi. Při dodržení single exit point je to velmi spolehlivé.
...
Ano, uvnitř bloku se může stát ledacos špatného, ale buď je to správně ošetřeno, nebo to není tak kritické a blok dojede včetně free, nebo to třeba segfaultne a paměť se mi uvolní tak nějak přirozeně, nebo je to ve stavu, ve kterém to nikdy nemělo být a musí se to vyřešit. Tohle ani GC nezachrání.
Kód: [Vybrat]Jasně, dá se to trošku vylepšit těma "goto" a la linux kernel, případně nějakým jedním místem, kde uvolním všechno, co není null... nedejbože, aby na ten objekt ukazovalo něco od někud jinud, že....v1 = priprav_objekt();
v2 = pripav_objekt_2(v1);
if (v2 == null) {
free(v1);
return;
}
v3 = priprav_objekt_3(v1, v2);
if (v3 == null) {
free(v2);
free(v1);
}
Hodně debilní kód, není divu, že software vypadá, jak vypadá. Na tomto příkladu je vidět, jak by javista psal v C, kdyby ho k tomu pustili. Zůstaňte fakt radši u bicyklu s postranními kolečky, přechod na Porsche opravdu nedopadne dobře.
v1 = priprav1()
v2 = priprav2()
c2 = priprav3()
a zbytek je omacka?
Ano, uvnitř bloku se může stát ledacos špatného, ale buď je to správně ošetřeno, nebo to není tak kritické a blok dojede včetně free, nebo to třeba segfaultne a paměť se mi uvolní tak nějak přirozeněJinymy slovy - pouziti GC je (velmi casto, ne vzdy) super, jen musis vedet ze a proc?Skoro - použití GC je (velmi často, ne vždy) zbytečnost, ale má svůj super use case - neprogramátoři, prototypování, v některých případech i v produkci.
Nevidím problém v tom si paměť uvolnit sám, přesně v moment, kdy má být uvolněna. Typicky v Cčku na malloc pohlížím jako na blok - když napíšu malloc, hned pod něj píšu free a kód strčím mezi. Při dodržení single exit point je to velmi spolehlivé.
Ne ze by si zrovna na tenhle user case musel psat dealokaci rucne (coz mimochodem neni zas takova sranda, pokud zacnes uvazovat i o tom, ze se ti uvnitr bloku muze stat ledacos spatneho). Tohle je ten nejprimitivnejsi priklad escape analysis., nebo je to ve stavu, ve kterém to nikdy nemělo být a musí se to vyřešit. Tohle ani GC nezachrání. A jinak, to je pořád řečí, jak musí být kód čitelný (někteří to považují za důležitější, než jeho funkčnost) a najednou je používání primitivních postupů špatně? Ono totiž většinou čím primitivnější, tím lepší. Chce to kázeň. A to je právě to, co velmi často chybí a proč vzniká tolik kočkopsů.
Jinymy slovy - pouziti GC je (velmi casto, ne vzdy) super, jen musis vedet ze a proc?Skoro - použití GC je (velmi často, ne vždy) zbytečnost, ale má svůj super use case - neprogramátoři, prototypování, v některých případech i v produkci.
Nevidím problém v tom si paměť uvolnit sám, přesně v moment, kdy má být uvolněna. Typicky v Cčku na malloc pohlížím jako na blok - když napíšu malloc, hned pod něj píšu free a kód strčím mezi. Při dodržení single exit point je to velmi spolehlivé.
Špatné je, když programátor píše kód, spoléhá se na GC, protože se to tak naučil a ve skutečnosti ani netuší, že tam nějaký GC je a co pro něj/za něj dělá.
A co je kvalitní programátor ?
Poskytuje nekdo rovnou sluzbu, kam by to slo ukladat? (tj. s jednoduchou registraci, treba na rok zdarma)
Práce německé tajné služby, umístění článku jako tento https://zpravy.aktualne.cz/zahranici/madari/r~c54634a20f0c11e7b494002590604f2e/?_ga=1.186502624.814779710.1482695440
Pravda v něm je, že takto FSB pracuje, jen Tusk je zaměněn za Orbána. Aby se takto mediálně pokryly očekávané Tuskovy problémy s polskou justicí.