Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 29. říjen 2010, 17:05:47 Předmět: |
|
|
VladR napsal: |
(btw, C# sucks !). |
Můžu se zeptat proč? |
|
Návrat nahoru |
|
|
ondy1985
Založen: 28. 07. 2007 Příspěvky: 361
|
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 29. říjen 2010, 18:24:03 Předmět: |
|
|
Ne - mě fakt zajímají důvody, proč C# suxuje - ani si nevzpomínám, jestli jsem tenhle názor vůbec někdy slyšel |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 29. říjen 2010, 18:47:08 Předmět: |
|
|
Že C# sux se říkat nemusí, protože to všichni dávno ví. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
VladR
Založen: 30. 07. 2007 Příspěvky: 1322 Bydliště: Greater New York City Area
|
Zaslal: 29. říjen 2010, 19:12:46 Předmět: |
|
|
Na bezne aplikacie je urcite vyborny - nemusis riesit dealokaciu (takze je super pohodlny) a generika maju hodne do seba (uz len tym ze su v specifikacii jazyka a nie nejakych zabugovanych obskurnych opensource knizniciach).
Ale na 3d hry ? Garbage Collector cloveka nuti pisat prasacky kod, pod ktory by sa inak nepodpisal. Este aj MS evangelisti to doporucuju - bol som pred tyzdnom v Chicagu na MS dev release WP7 a jeden z evangelistov mi to potvrdil - zaalokuj secko pri loade a nieze budes nieco alokovat pocas runtimu - ked hra exitne, GC sa uz o to postara. Ak toto nie je WTF, tak uz neviem co...
To na toto bolo treba C# pod XNA ? Aby som kodil ako na PS2ke ? Ved to rovno mozem spravit vlastny mem alokator, ako na konzole (v ramci huge byte array).
Vlastne nemozem, lebo to je unsafe kod a ten neprejde validaciou, takze som v prdeli tak ci onak.
Ohladom elementarnych featur jazyka mam tiez zopar zasadnych vytok (napr. taka dvojna alokacia poli, alebo trebars taky struct), ale nemam zatial chut zistovat, ze preco sa dizajneri jazyka vydali danym smerom. Prd s tym aj tak spravim.
Raz, az sa budem nudit si mozno kupim knihu, kde bude vysvetlene, ze preco dana featura bola dizajnovana tak ako bola.
Dovtedy sa musim zmierim s tym, ze aj ked engine prepisujem de facto od nuly (zacinam od rendereru - vertex buffrov), ani omylom ho nemozem nadizajnovat tak cisto, ako by som si prial, aj ked je okolo C# nenormalny humbuk, jak uzasne masakralny je to jazyk.
Zhodou okolnosti som mal v praci par dni dozadu moznost rozchadzat jeden starsi projekt pod C# - nechapal som, ako moze byt vacsi problem rozchodit kod do kompilovatelnej podoby (na cistom kompe, kde predtym ten soft nebol developovany) ako pri projektoch podobnej velkosti pod C++. Toto bola casto hlavna vytka vsetkych C# koderov, co som zatial stretol, vratane ludi co pod nicim inym ani nerobili - ze ten projekt aj po 3 rokoch otvorim v novom visualku a pojde. Kdeze, clovek to musi kvoli dependencies retargetovat na stary .NET.
Toto je ta uzasna spatna plna kompatibilita ? Ved to je rovnake peklo, ako pri C++, tiez Visualko za mna nezisti poradie kompilacie subprojektov.
Z tohto hladiska .NET nevyriesil nic. Ak clovek nema presne popisane poradie kompilovania subprojektov bokom na papieri, ako v roku pana 1979, tak vela stastia.
Som azda cakal prilis vela, ze toto bude trocha lepsie vyriesene ?
V sucasnej podobe je to len nieco ako build script viazany na klavesu F6, cize opat ziadna vyhra.
Rozmyslam, ci tie C++ mem leaky boli az tak strasne peklo ? Ved aj pod C# dostanem exception, ak nespravne pristupujem do pamate (akurat je garantovana).
Nacitavanie dat zo suboru je kapitola sama o sebe - nacitavanie po polozkach dat. struktury je tazke zverstvo. Iste, viem to obist, ale ten kod v zivote nepublishnem, mozem si ho akurat tak pustat u seba doma.
Subjektivny dojem (ako nooba este len zacinajuceho s C#) - zviazali mi ruky, oci, zobrali monitor ale pis kod...
Cakal som od C# viac, takto je to len trocha upgradnuty BASIC... |
|
Návrat nahoru |
|
|
VladR
Založen: 30. 07. 2007 Příspěvky: 1322 Bydliště: Greater New York City Area
|
Zaslal: 29. říjen 2010, 19:27:47 Předmět: |
|
|
Augi napsal: |
Ne - mě fakt zajímají důvody, proč C# suxuje - ani si nevzpomínám, jestli jsem tenhle názor vůbec někdy slyšel |
Kolko ludi si stretol, ktori ak im ich teren renderer fici na 1500 fps, tak picuju jak chora vrana, ze je to pomale a daju si tu namahu to cele prepisat tak, aby to slo aj na vyse 3000 fps ?
Ja chcem kodit tak, aby to bezalo na doraz. To v C# nespravim, ani ked sa poskladam kvoli tomu ako run-time pristupuje do pamate.
Teraz by som rad pocul odpoved od niekoho, kto v C# kodi par rokov a vie mi povedat, ci si viem v run-time vypnut bounds checking pri pristupe do poli, resp. akekolvek ine zvratene kontroly run-time pri pristupe do pamate robi. Proste nech je to len bezny pristup do RAMky podliehajuci cachovaniu poplatnemu CPU na kerom to bezi.
Za dalsie - pod C# som s SSE nahraty. Co mam teraz robit s tym kodom, kde som sa vyhral s tym, aby cache sla na doraz a data som spracoval s min. poctom instrukcii a pristupov do mapate ?!? Ved to pod C# pojde tak 10 razy pomalsie !?! Prd mi pomoze, ze CLR sa pokusi vygenerovat nejaky amatersky SIMD kod.
CLR ani netusi, ze si niekto mozno uz tu namahu dal a cez Intelacky kompiler a toolset si dal tu pracu, aby to vysperkoval a ficalo to na doraz. Ale pod C# smola.... |
|
Návrat nahoru |
|
|
Deluxe
Založen: 31. 07. 2007 Příspěvky: 235 Bydliště: Oslavany
|
Zaslal: 29. říjen 2010, 19:33:35 Předmět: |
|
|
citace: |
zviazali mi ruky, oci, zobrali monitor ale pis kod... |
Jo, tak nejak to na mne pusobilo taky (zacinal sem na C#, ale ted mam na vetsinu veci radeji C++)...
Clovek aby si napsal aplikaci v C++ nebo C++/CLI, jako knihovnu a pak jen dopsal rekneme UI v C#...
Proste C# je na low-level veci nevhodnej, ale zase takovej ASP.NET ma neco do sebe... |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 29. říjen 2010, 19:44:49 Předmět: |
|
|
VladR napsal: |
Ale na 3d hry ? Garbage Collector cloveka nuti pisat prasacky kod, pod ktory by sa inak nepodpisal. |
Ah, já to myslel právě jako jazyk pro běžné aplikace, ne hry - u hi-performance hry bych taky sáhl po nativním kódu
VladR napsal: |
aj ked je okolo C# nenormalny humbuk, jak uzasne masakralny je to jazyk. |
Pro běžné aplikace je
VladR napsal: |
Zhodou okolnosti som mal v praci par dni dozadu moznost rozchadzat jeden starsi projekt pod C# - nechapal som, ako moze byt vacsi problem rozchodit kod do kompilovatelnej podoby (na cistom kompe, kde predtym ten soft nebol developovany) ako pri projektoch podobnej velkosti pod C++. Toto bola casto hlavna vytka vsetkych C# koderov, co som zatial stretol, vratane ludi co pod nicim inym ani nerobili - ze ten projekt aj po 3 rokoch otvorim v novom visualku a pojde. Kdeze, clovek to musi kvoli dependencies retargetovat na stary .NET.
Toto je ta uzasna spatna plna kompatibilita ? Ved to je rovnake peklo, ako pri C++, tiez Visualko za mna nezisti poradie kompilacie subprojektov.
Z tohto hladiska .NET nevyriesil nic. Ak clovek nema presne popisane poradie kompilovania subprojektov bokom na papieri, ako v roku pana 1979, tak vela stastia.
Som azda cakal prilis vela, ze toto bude trocha lepsie vyriesene ? |
Huh, není tohle spíš o kvalitě lidí, kteří na daném projektu pracují? Pokud je C++ projekt kvalitně připraven, tak s ním není žádný problém. Příkladem budiž moje hlavní pracovní solution, které obsahuje asi 10 nativních projektů a 70+ projektů v C#, které neměl problém zkompilovat nový kolega...
VladR napsal: |
Subjektivny dojem (ako nooba este len zacinajuceho s C#) - zviazali mi ruky, oci, zobrali monitor ale pis kod... |
No, on právě člověk sílu C#, potažmo .NETu, pozná, až do něj skutečně pořádně pronikne - to si pak uvědomí jeho přednosti a slabiny. Zrovna GC je u běžných aplikací výhoda, u her spíše slabina... |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 29. říjen 2010, 19:51:17 Předmět: |
|
|
VladR napsal: |
Ja chcem kodit tak, aby to bezalo na doraz. To v C# nespravim, ani ked sa poskladam kvoli tomu ako run-time pristupuje do pamate. |
Ale na toto nebyl NIKDY C#, potažmo .NET, určen! Každý, kdo C#/.NET trošku zná, by Ti řekl, že pokud chceš jít s výkonem na doraz, je to špatná volba - pak je lepší jít do C/C++/asm.
VladR napsal: |
Teraz by som rad pocul odpoved od niekoho, kto v C# kodi par rokov a vie mi povedat, ci si viem v run-time vypnut bounds checking pri pristupe do poli, resp. akekolvek ine zvratene kontroly run-time pri pristupe do pamate robi. Proste nech je to len bezny pristup do RAMky podliehajuci cachovaniu poplatnemu CPU na kerom to bezi. |
Můžeš to udělat pomocí unsafe a fixed.
Ale jak jsem psal - pokud chceš psát hi-performance aplikace, pak na .NET zapomeň. Přesně jak psal Deluxe... |
|
Návrat nahoru |
|
|
VladR
Založen: 30. 07. 2007 Příspěvky: 1322 Bydliště: Greater New York City Area
|
Zaslal: 29. říjen 2010, 19:59:43 Předmět: |
|
|
Augi napsal: |
Ale na toto nebyl NIKDY C#, potažmo .NET, určen! Každý, kdo C#/.NET trošku zná, by Ti řekl, že pokud chceš jít s výkonem na doraz, je to špatná volba - pak je lepší jít do C/C++/asm. |
Lenze to je ten presne pruser ! Temer tretinu produktivneho zivota som stravil pisanim enginu a hier a teraz su mi na prd, lebo:
1. XBLIG - XNA / C#
2. WP7 - XNA / C#
Cize, MS cloveka nanuti, lebo mu inu moznost neda. Ak chcem ist na tie platformy, tak inu moznost ako XNA nemam. A XNA automaticky evokuje C#.
Iste, na PC viem XNA targetnut aj voci C++. Ale preco by som preboha na PC platforme robil taku hovadinu, ked uz aj tak vsetok kod pod C++ a DirectX mam ? XNA nie je v nicom zazracne, skor cloveka obmedzuje (aj ked zdaleka nie tak drasticky ako C# voci C++ na low-level urovni).
Augi napsal: |
Můžeš to udělat pomocí unsafe a fixed. |
Ale to je unsafe kod - to neprejde cez MS - taky kod ti nepublishnu.
To ide spravit len na PC, ale kvoli PC clovek XNA predsa neriesi - tam mam C++ a DirectX.
Cim dalej, tym viac mi zacina byt jasne, ze tie dristy o vykone XNA a C# su len dristy, lebo pokial nepouzijem SSE intrinsics a kazdym pristupom do RAMky sa runtime bude krutit kol kazdeho policka pola, tak to zbohom performance...
To uz nehovorim o tom, ze na WP7 nie su mozne lubovolne shadery - su len preddefinovane - 5 kusov efektov, ktore sa daju pouzit - mozem zabudnut na efekty... |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 29. říjen 2010, 20:29:17 Předmět: |
|
|
VladR napsal: |
Rozmyslam, ci tie C++ mem leaky boli az tak strasne peklo ? |
Mem leaky nejsou vůbec nevýhoda, vždyť se dají tak snadno detekovat! V malloc dáš count++ a ve free count-- a na konci programu víš, žes něco neuvolnil. Mnohem horší jsou resource leaky, na který žádný garbage collector nepomůže. Resource leak je třeba neuvolněný vertex buffer, neuzavřený soubor, neuvolněný mutex apod. Všechno se dá řešit destruktorem, kterej se v .NETu nepoužívá, protože se za určitých okolností nemusí zavolat. Tak co je teda lepší? _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
OndraSej
Založen: 28. 07. 2007 Příspěvky: 767 Bydliště: Brandýs nad Labem
|
Zaslal: 29. říjen 2010, 21:04:36 Předmět: |
|
|
eosie> na uvolnovani resources je v C#/.NET interface IDisposable s metodou Dispose, ktera supluje destruktor, ktery je potreba zavolat (napr. pro uvolneni resources).
Volat si ho muzes bud sam (podobne jako delete/free v C++), nebo pouzit konstrukci using(obj) { ... }. obj je objekt, ktery implementuje IDisposable a tahle konstrukce ohlida, ze se na obj zavola dispose ve chvili, kdy program opusti blok kodu ve slozenych zavorkach (at uz dojde do konce, skonci na return, vyjimkou...). _________________ http://trionteam.net |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 29. říjen 2010, 22:12:12 Předmět: |
|
|
VladR napsal: |
Augi napsal: |
Ale na toto nebyl NIKDY C#, potažmo .NET, určen! Každý, kdo C#/.NET trošku zná, by Ti řekl, že pokud chceš jít s výkonem na doraz, je to špatná volba - pak je lepší jít do C/C++/asm. |
Lenze to je ten presne pruser ! Temer tretinu produktivneho zivota som stravil pisanim enginu a hier a teraz su mi na prd, lebo:
1. XBLIG - XNA / C#
2. WP7 - XNA / C#
Cize, MS cloveka nanuti, lebo mu inu moznost neda. Ak chcem ist na tie platformy, tak inu moznost ako XNA nemam. A XNA automaticky evokuje C#.
Iste, na PC viem XNA targetnut aj voci C++. Ale preco by som preboha na PC platforme robil taku hovadinu, ked uz aj tak vsetok kod pod C++ a DirectX mam ? XNA nie je v nicom zazracne, skor cloveka obmedzuje (aj ked zdaleka nie tak drasticky ako C# voci C++ na low-level urovni). |
No opět zde narážíme na to, že nevíš, na co je daná věc cílená. XNA určené jen na "jednoduché" casual hry, do jisté míry pro hobby vývojáře. Rozhodně to NIKDY nebylo myšleno jako platforma pro AAA hi-performance tituly.
Btw. ze začátku se mluvilo o tom, že by XNA poskytovalo i fyzikální API (aby nebylo nutné implementovat fyziku v managed kódu), ale z toho bohužel sešlo
VladR napsal: |
Cim dalej, tym viac mi zacina byt jasne, ze tie dristy o vykone XNA a C# su len dristy, lebo pokial nepouzijem SSE intrinsics a kazdym pristupom do RAMky sa runtime bude krutit kol kazdeho policka pola, tak to zbohom performance... |
Je myslím logické, že čím více vrstev, tím větší pohodlí (v tom lepším případě) a tím nižší výkon (když to dobře dopadne, tak ne o tolik).
To je jako by jsi se vztekal, že když píšeš v ASM, tak je to mnohem pomalejší, než když si navrhneš vlastní HW pro daný účel.
Prostě za pohodlnost se platí a ne vždy (chápu, že pro Tebe jako herního vývojáře to může být těžko pochopitelné) je výkon tím hlavním kritériem. Ve většině business aplikací je měřítkem kvality spíše stabilita, odolnost vůči lidským (většina programátorů jsou lidé - zdravím Ladise ) chybám nebo náklady na vývoj. A tam imho C#/.NET válí. |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 30. říjen 2010, 19:55:42 Předmět: |
|
|
Podle mě by se měl MS víc soustředit na C++ SDK pro WM7 a jiné platformy, protože .NET využití těch platformech pro náročné aplikace de facto zabíjí.
Viděl jsem nějaký reporty o tom, jak lidi optimalizují svoje hry pro iPhone pro to CPU a GPU tam, že přímo používají asm, aby z toho vytěžili maximum výkonu a mohli mít úžasně vypadající produkt i na tom shit hardwaru. Dokážu si představit i ruční správu paměti na tom zařízení. To je absolutně opačný přístup než v případě .NETu, kterej se snaží o maximální pohodlí za cenu totálního zkriplení výkonu.
Strategie MS je mi teď mnohem jasnější:
- Dostat co nejvíc vývojářu na C#/.NET a nakecat jim, jak je to všechno lehčí, aby bylo méně C++ vývojářů.
- Méně C++ vývojářů ==> víc C# vývojářů ==> větší monopol MS ==> oslabení konkurence.
- Cíl: Dostat WM všude. Důsledek: Kvůli .NETu velké množství pomalých a méně kvalitních aplikací ==> méně kvalitní výsledný produkt (u MS klasika).
- Alternativa: Zodpovědný vendor (Apple?) s C++ SDK pro mobily soustředěno na výkon a efektivní využití paměti za cenu větší investice do vývoje aplikací (aspoň nebude všude tolik sraček).
Jestli je XNA pro hobby vývojáře, tak buď lžou, nebo já nejsem hobby vývojář. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
pcmaster
Založen: 28. 07. 2007 Příspěvky: 1824
|
Zaslal: 30. říjen 2010, 20:04:19 Předmět: |
|
|
A ked sme pri tych konspiracnych teoriach, tak by som k tvojmu, Eosie, este dodal zjavne. Mame teda srackove a pomale aplikacie, potrebujeme k tomu co najnovsie pocitace. Donutme ludi kupovat nove kompy co najcastejsie! HW Vendori jasaju a tesia sa. A mozno sa s MS ani nemuseli dohodnut a delit si zisk
Pride vam to nepravdepodobne? _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
|
|