.[ ČeskéHry.cz ].
MonoGame import textury s alfou
Jdi na stránku Předchozí  1, 2
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
]semo[



Založen: 29. 07. 2007
Příspěvky: 1415
Bydliště: Telč

PříspěvekZaslal: 26. říjen 2018, 10:01:37    Předmět: Odpovědět s citátem

No právě..všechno jde, ale musíš si to napsat sám. Bez STL je to takový smutný :-). Nebo třeba absence "const". Tim si můžu dělat immutable co chci.

Tak se vždycky divím, když se mluví o efektivitě psaní kódu C++ vs C#. Když je pěkně rozjetej C++ projekt, je zápis algoritmů mnohem kratší a přehlednější.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
satik



Založen: 06. 05. 2010
Příspěvky: 161
Bydliště: Krkonose

PříspěvekZaslal: 26. říjen 2018, 16:23:28    Předmět: Odpovědět s citátem

Tak s tím nesouhlasím, ohledně efektivity psaní kódu Smile

Hlavičkový soubory (pěkná otrava psát část kódu dvakrát, největší zábava řešit, když se ti někde omylem stane, že máš dvě verze hlavičkových souborů, takže pak čteš úplně jiný data), absence LINQ, ve kterým rychle zapíšeš i nějakž složitější věci, rychlost kompilace (= když chceš jen udělat malou změnu a zkusit), jednodušší hledání problémů při buildu - tady nemusíš řešit, že je libka zbuilděná jen pro starší VS

Tvůj problém je ten, že se snažíš používat C# jako C++, to je pak jasný, že to nebude tak efektivní Smile .
_________________
https://www.facebook.com/peasantsandcastles/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1415
Bydliště: Telč

PříspěvekZaslal: 29. říjen 2018, 09:34:59    Předmět: Odpovědět s citátem

satik napsal:
Tvůj problém je ten, že se snažíš používat C# jako C++, to je pak jasný, že to nebude tak efektivní :) .

Myslím, že se o to nesnažím, ale určitě jsem z C++ (a Delphi:) ) ovlivněný dost.
Na druhou stranu, já mluvil o zápisu algoritmů, matematiky, struktur a tak podobně. To je v C++11 a vejš skutečně daleko pestřejší a kratší. To fakt nevím, co bych musel s C# dělat, abych se tomu aspoň přiblížil (jestli to neznáš, tak nemá cenu vysvětlovat). Na všelijaký databáze a co já vím co ještě, tam bude asi C# o fous vítězit ;-)

V C# je ale bezkonkurenční to, jak se snadno přidávají 3rdčka a hlavně, že všechny jsou psaný podobným stylem. To u C++, než najdeš nějakou použitelnou knihovnu, než si zvykneš, jak je psaná a jak se používá, než ji zkompiluješ jak potřebuješ; to všechno hrozně trvá. Jsem ochotný to zkousnout, ale jen u velkých projektů, kde se ten čas ztratí (a většinou existuje nějaký firemní buildsystém, jak si to ulehčit). Ale u malých projektů je to otrava a to je právě důvod, proč hru dělám v C# :-).

Ad tvůj problém s hlavičkovýma souborama: Hrome! Tak to se mi teda ještě nikdy nestalo! :-D
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
satik



Založen: 06. 05. 2010
Příspěvky: 161
Bydliště: Krkonose

PříspěvekZaslal: 30. říjen 2018, 19:58:46    Předmět: Odpovědět s citátem

Databaze netusim, ty jsem v C# pouzival naposled nekde pred 5 nebo vic rokama, co konkretniho z algoritmu treba mas na mysli? Treba to nejakou C# alternativu mit bude.

Prolit jsem ted jeste v rychlosti novinky v C++11 a nevidim tam nic, co by c# nejak neumelo Smile

To je ironie nebo se ti to vazne nestalo? Very Happy Ja to hledal poprve snad i dyl nez den, nakonec jsem to nasel az kdyz jsem se na to kouknul v asm, podruhe teda uz jen par hodin... Very Happy
_________________
https://www.facebook.com/peasantsandcastles/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1415
Bydliště: Telč

PříspěvekZaslal: 31. říjen 2018, 09:15:22    Předmět: Odpovědět s citátem

No fakt si nevzpomínám, že by se mi tohle stalo, s těma headrama, nebyla to ironie :-)

Ad algoritmy:

Třeba tohle: https://en.cppreference.com/w/cpp/header/algorithm v kombinaci s lambda funkcema a move semantikou dává už slušnou moc. A využiješ to. Nehledě na to, že podobný šablonový funkce si můžeš napsat (a dělám to). A pak to funguje se všim (i hodnotový typy) a přitom rychle. Nemusíš nic boxovat a podobně. Je to pak ve finále zkrátka míň ukecaný, když jde do tuhýho.

Zápis matematiky v C# je taky třeba utrpení. Možná to dělám blbě, ale pořád mě otravuje double vs float, new Vector2() a podobně. Mimochodem, new operátor používím v C# asi tak 100x častějc, než v C++.
Nebo properties: líbí se mi a používám je, to říkám rovnou. Ale proč nejde tohle? Actor.Position.X = 2; ? Musíš zas jen Actor.Position = new Vector2(2, Actor.Position.Y); To je hrůza přece. Jasně, chtějí to mít immutable. Ale nad tim máš právě třeba v C++ kontrolu díky const. Ty sám si zvolíš, kdy a kde bude to či ono immutable. To nakonec přispívá i lepší čitelnosti kódu.

I přes to všehno se k C# občas vracím a nehaním ho. Má svoje kouzlo. Jen nemám rád takový ty řečičky o pomalým psaní kódu, vynalézání kola, nebezpečnosti a podobné, co Csharpisti rádi říkají :-).
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Radis



Založen: 29. 03. 2014
Příspěvky: 216

PříspěvekZaslal: 31. říjen 2018, 09:45:43    Předmět: Odpovědět s citátem

citace:
Ale proč nejde tohle? Actor.Position.X = 2;

No protoze struct je value type a ne reference type. Timhle bys (kdyby to slo) menil X nekde v pameti na kopii puvodni pozice, coz asi neni to, co zrovna chces Smile

Ale podivej se na "ref returns" v novem C#, to by se ti mohlo libit.

Btw. neznamena to, ze structs jsou immutable. Treba Unity API je plny mutable structs:

var position = transform.position;
position.x += 10;
position.x += 20;

citace:
Jen nemám rád takový ty řečičky o pomalým psaní kódu, vynalézání kola, nebezpečnosti a podobné, co Csharpisti rádi říkají Smile.

Ono je hlavne potreba si to nebrat osobne Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
satik



Založen: 06. 05. 2010
Příspěvky: 161
Bydliště: Krkonose

PříspěvekZaslal: 31. říjen 2018, 12:52:56    Předmět: Odpovědět s citátem

Vetsinu veci, co umi lambda a <algorithms> prave umi linq + pripadne extensions (muzes si psat i vlastni, kdyz ti neco chybi - jako si pises sablonovy funkce).
Z tech co uz ma c# v zakladu tam z <algorithms> chybi asi jen permutace a heap operace (ale prolitnul jsem to jen hodne rychle, je mozny, ze jsem neco prehlidnul nebo ze to C# uz taky nejak umi, jen to neznam).

K tomu Vectoru to jen trochu doplnim:
Primo struct Vectoru hodnoty menit muzes jak chces, pokud na nej vidis primo, neni immutable.
Tady menit nemuzes, protoze struct se narozdil od class v c# predava hodnotou a tady tahas kopii Vectoru, protoze Actor.Position je getter a pres ten dostanes defaultne jen kopii structu.
Resi to jak uz tu padlo return ref v tom getteru.

Takova nahodna ukazka neceho, co v C# napises kratce s pomoci toho LINQ a v C++ bych fakt netusil, jak to napsat nejak podobne kratce - mas soubor s datumama v textovy podobe na radcich a mezi nima jsou obcas komentare zacinajici // a chces ziskat ty datumy a seradit je do listu/vectoru:

kód:
var dates = File.ReadAllLines("soubor.txt").Where(x => !x.StartsWith("//")).Select(x => DateTime.Parse(x)).OrderBy(x => x);


A jinak ja nejsem Csharpista, resp. v praci pouzivam v 99% C++, ale kdyz delam cokoliv doma nebo i naky mensi utilitky v praci, tak preferuju C#, pise se mi v nem proste lip Smile .
_________________
https://www.facebook.com/peasantsandcastles/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1415
Bydliště: Telč

PříspěvekZaslal: 31. říjen 2018, 13:09:44    Předmět: Odpovědět s citátem

Radis, satik: return ref zní slibně, díky za tip, neznal jsem.

Ten kód na čtení datumů se mi ale popravdě moc nelíbí. Chápu, že je to ukázka toho, že to lze zapsat na jeden řádek, ale proč dělat ReadAllLLines a alokovat tak spoustu stringů včetně komentářů? To bych to radši zapsal dejme tomu na 3 řádky a četl jen ty datumy. Což lze v C# i v C++. Je nějak nevidím tu výhodu Linq, zrovna na tomhle příkladu. Neni to ani přehlednější, ani optimálnější. Jen kratší.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Radis



Založen: 29. 03. 2014
Příspěvky: 216

PříspěvekZaslal: 31. říjen 2018, 13:55:44    Předmět: Odpovědět s citátem

]semo[ napsal:
Ten kód na čtení datumů se mi ale popravdě moc nelíbí. Chápu, že je to ukázka toho, že to lze zapsat na jeden řádek, ale proč dělat ReadAllLLines a alokovat tak spoustu stringů včetně komentářů? To bych to radši zapsal dejme tomu na 3 řádky a četl jen ty datumy. Což lze v C# i v C++. Je nějak nevidím tu výhodu Linq, zrovna na tomhle příkladu. Neni to ani přehlednější, ani optimálnější. Jen kratší.


Na uplne performance critical veci bych LINQ nepouzival. V gamedevu ho nepouzivam skoro vubec, urcite ne na neco intenzivniho v kazdem framu kvuli GC. Ale kdyz jednou za cas potrebuju treba nekde zobrazit serazeny seznam hracu, tak proc ne. Jinymi slovy, ten satikuv priklad je naprosto v pohode, krasne citelny, okamzite je jasne, co se tam deje. Nevidim duvod to prepisovat. Kdyz mam treba konfiguracni soubor se 100 radky, tak je mi uplne jedno, ze pouziju ReadAllLines (coz btw neni LINQ), prestoze z toho vysledku treba 3 radky nepouziju Smile
Citelnost je skoro vzdycky dulezitejsi nez vykon (i kdyz pravda, ve hrach tohle uplne neplati, ty jsou hodne specificke)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1415
Bydliště: Telč

PříspěvekZaslal: 31. říjen 2018, 14:01:45    Předmět: Odpovědět s citátem

Nejde o ty 3 řádky, ale o to, že zbytečně načte celý text do paměti. Ale pokud to má člověk na háku, tak proč ne.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
satik



Založen: 06. 05. 2010
Příspěvky: 161
Bydliště: Krkonose

PříspěvekZaslal: 31. říjen 2018, 21:43:12    Předmět: Odpovědět s citátem

V C# si s tím parsováním nijak nepomůžeš, tam to bude vždycky vytváření spousty stringů, protože musíš do datetime.Parse vždycky posílat string a ten je immutable -> musíš pokaždý vytvořit novej.

Jinak já dřív taky řešil každej byte a každej cyklus procesoru, že jsem dokonce některý kusy C++ kódu zkoušel přepisovat do asm.. Very Happy

Teď už u kódu nekoukám jen na cpu/ram složitost, ale i náročnost napsání (=vymyšlení, otestování apod.) a pokud to není něco kritickýho, tak volím ty jednodušší varianty na napsání (pokud není rychlejší varianta srovnatelně složitá na napsání).

Ono to většinou není tak hrozný, jak to vypadá, pokud samozřejmě nemáš třeba stovky tisíc objektů, s kterýma děláš nějaký kejkle každej frame.

Je to hlavně o správných algoritmech - např. pro hledání objektů podle id třeba ideálně používat hashmapy (Dictionary v C#) místo hledání v obyčejným listu přes linq (např. gameobjects.Where(x=>x.id == wantedId), případně kde co jde cacheovat do pomocných seznamů, ale to je všechno už dost situační a jestli to má smysl záleží na okolnostech, zase nemá smysl cacheovat výběr 5 prvků ze seznamu, kde bude max 10 objektů, protože tam ta práce navíc za ušetřenej výkon nestojí Smile

Takže jo, přemejšlet a řešit optimalizace, ale zase se to nesmí přehánět.

Názor na LINQ jsem měl dlouho stejnej, že je to pomalý, černá magie a teď je to jedna z mých oblíbených věcí na C# a používám ho, kde to jde, na zkrácení kódu.
_________________
https://www.facebook.com/peasantsandcastles/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1415
Bydliště: Telč

PříspěvekZaslal: 1. listopad 2018, 09:33:22    Předmět: Odpovědět s citátem

Jasně že do DateTime.Parse přijde string, to chápu, ale v té ukázce nejdřív načteš všechny stringy do listu a teprve pak je parsuješ. Já bych načetl jeden, zparsoval, uložil datum...a takhle celý soubor. Ale to je detail, jen na vysvětlenou.

Taky neřeším optimaliziace všude a už vůbec ne na úrovni instrukcí. Jen se snažím psát kód slušně. A to vždycky! :-). Nějaký ten řádek navíc nevadí, umím psát všema deseti.

Ale můžem té debaty nechat. Stejně se zdá, že nám jde všem o dobrou věc. :-)
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2
Strana 2 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna