Skrivet av klk:
Vad jag såg var kärnan utvecklad i C++ så ingen C# där. C# är en av många tekniker spelmotorer kopplar mot för att få fler att klara av att använda motorn, ungefär LUA.
"Kärnan" är maskinkod när man faktiskt kör programmet, i.e. det är rätt irrelevant att det finns vissa delar som är skrivna i X, Y eller Z. Det relevanta är att domänen "skriva spel" allt mer går mot andra språk, där C# är det som ökar mest här.
Och specifika poängen här är: DOTS/ECS ger spelprogrammeraren en C# miljö som är väsentligt bättre på att utnyttja flera CPU-kärnor samt SIMD. Detta får man rent tekniskt genom att göra en rad optimeringar relaterade till access-patterns mot minne, men det trevliga är att det görs på ett sätt som är hyfsat automatiskt. Det man måste "offra" är att logiken skrivs på ett rätt annorlunda sätt mot "normala" mono-behavior klasser.
Skrivet av klk:
Som om multicore skulle minska behoven av C++, tror inte det va. Tvärtom drar C/C++ ifrån mer
Bara som ett lackmustest av fokus här: det gick faktiskt inte att skriva ett multitrådat program i standard C eller C++ innan 2011, något som var möjligt i Java sedan första release 1996 och första release av C# 2002.
Sedan är det helt klart så att en GC har en viss overhead, men om man jobbar med multitrådade program på multi-core plattform finns ett gäng fördelar med GC rent effektivitetsmässigt. Ett populärt sätt i C, t.ex. i Linux-kärnan, är att skapa tillräckligt mycket av en GC för att få lock-free algoritmer som sequence-locks, korrekta.
Skrivet av klk:
Förstår inte varför du fastnat i lopen om att Go skulle vara så snabbt. Go använder vad jag kan se en GC och har programmet en GC så är det förpassat till ålderdomshemmet. Språk med GC är inte snabba. Bli inte förvånad om optimerad kod i C++ kan bli 10 gånger snabbare (eller mer) än språk med GC om det är lite luriga saker som skall göras.
Språk med GC använder mer minne (mycket mer), drar inte alls lika mycket nytta av prefetchers, har större fragmentering förutom att de inte kan trixa med bytsen.
Nu verkar du nöjd att spela strut-fotboll och göra allt med det enda verktyg du har (C++). Fungerar det för dig: great!
Men ibland vill man gräva en grop istället för att slå i spikar, då kan en spade (Go) vara bättre än en hammare (C++). Är flaskhalsen "compute" är det inte speciellt svårt att få ett C++ program att bli snabbare än motsvarande Go program.
Är däremot flaskhalsen I/O har Go fundamentala fördelar på väldigt låg nivå (bl.a. i hur man binder in standardbiblioteket mot OS-systemanrop) som man på C/C++ nivå inte kan riktigt matcha med mindre än att göra bypass på libc/crt vilket då diskvalificerar användning av standardbiblioteket och alla bibliotek som ligger ovanpå det (typ alla förutom ett par väldigt nischade saker för embedded-system).
Att skriva en webbapplikation i Go som hanterar 1k-10k samtida användare är något många studenter skulle kunna fixa med rätt grundläggande kunskap i språket. Göra det i C++ är långt mer komplicerat och inte alls säkert att det ens blir snabbare. Även här ligger orsaken i att Go har på väldigt låg nivå en scheduler som är specialanpassad / optimerad för just den här typen av applikationer.
Det är inga problem, det är även idiomatisk, Go att bara dra igång en "gorutin" per session. Det använder relativt lite stack-utrymme, det kommer schemaläggas på "en lämplig mängd OS-trådar" etc. Startar man en OS-tråd per session, vilket den enkla/naiva lösningen i C++, kommer systemet blir brutalt långsamt.
Sättet C/C++ modelererar en tråd är kopierad från POSIX som tyvärr designades när normalfallet var CPUer med 1 CPU-kärna och man därför inte riktigt insåg att man blandade ihop koncept som borde hanteras separat: "tasks", "OS-trådar" och "fysiska CPU-trådar".
Go har "rätt" abstraktion här för att man bara rakt av ska kunna designa sina programm enligt detta
https://en.wikipedia.org/wiki/Communicating_sequential_proces...