[ NrmMyth @ 13.10.2005. 20:28 ] @
Eh, ova zagonetka me proganja vec dugo vremena, u njoj vidim dio svoje buducnosti.
Mislim da nije postojala rasprava na ovu temu na ES, mozda se varam.

C++/CLI je relativno nova tehnologija naspram C# koji je do sad bio broj jedan za rad sa .NET tehnologijom.
Koliko se kod C++/C# isplati mjesanje native sa managed kodom? I jeli ta tehnologija uopce ima buducnost s obzirom da se u C# jos uvijek vise ulaze? Koliko se tim mjesnjem kodova uopce usporava programiranje u odnosu na C#, a koliki je dobitak na performansama?

Dali ja sa poznavanjem C++/CLI imam veci opseg buducih zanimanja?

Nekako vise priljezem C++/CLI tehnologiji jer mi se cini snaznijom, ali je opet tu taj faktor brzine razvoja projekata.

Pomozit mi sa vasim iskustvima i saznanjima.
Hvala.
[ jablan @ 14.10.2005. 08:20 ] @
Evo iz mog ugla, naći će se neki C++ programer da me demantuje...

U .NETu primarni jezik za razvoj je C# - imam utisak da najviše ljudi radi u njemu, ima najviše primera u njemu itd. VB.NET i managed C++ su tu zbog "kompatibilnosti programera" - onih koji dolaze sa starijih VB i C++ platformi.
Što se tiče mešanja managed i unmanaged kooda, primene verovatno postoje, ali su, barem iz mog iskustva, retke (čitaj: nikad nisam radio na projektu koji ima unmanaged delove), ali to je možda do mene... Na kraju krajeva, i ako se ukaže potreba za neki manji unmanaged deo, ni C# programerima nije teško napraviti C++ klasu.
[ mmix @ 14.10.2005. 13:36 ] @
jablan je apsolutno u pravu, iz par razloga.

1. Managed code pisan u C++-u mora da bude CLS compliant, i samim tim je ogranicen po pitanju svih onih stvarcica koje C++ cine "brzim" a sto je uglavnom direktna native-code optimizacija i unsafe manipulacija memorijom. Bez tih prednosti managed C++ ima iste performanse kao i C#. Stavise koristeci neke alatke kao sto je NETReflector managed C++ moze da se dissasembluje u C# i obrnuto.

2. Unmanaged C++ je onaj "pravi" C++ . Medjutim da bi dobio sve prednosti C++-a moras celu aplikaciju napisati u C++-u (sto znaci nista od .NET tehnologija, samo plain old MFC/ATL), cime se vracas u stare (dobre) dane pre .NETa.

Ja licno sam unmanaged C++ u .NET aplikacijama koristio samo da implementiram Platfom Invoke pozive gde standrni marshaling parametara ne funkcionise (sto je relativno retko), i to cisto zato sto je lakse uraditi tako nego pisati custom marshaling atribute.

Danas definitivno C++ ima samo dve primene, obe za pisanje performance-critical koda kao sto drajveri i igrice. Sve ostalo moze bez problema da se radi u C#-u.

[ Dragi Tata @ 14.10.2005. 14:57 ] @
@mmix: Pod 1) Nisi u pravu - za razliku od ostalih .NET kompajlera, C++/CLI optimizuje i IL, pa JIT pravi bolji kod što rezultuje bržim programima pisanim u C++/CLI. Samo, pitanje je koliko je to bitno u praksi, jer za tipične biznis aplikacije performanse na nivou koda nisu bitna stavka, a za one druge ćeš ionako verovatno da koristiš native C++ jer je .NET spor.

Inače, ako smem da iznesem svoje lično mišljenje, C++/CLI je bolji jezik od C# 2.0 čak i za čist .NET razvoj (automatski IDispose pattern me najviše impresionira) , ali za C# 3.0 najavljuju toliko interesantnih stvari, da nisam siguran da će tako ostati i u budućnosti.

Što se posla tiče, prilično sam siguran da će C# poslova biti više, ali mislim da će dodatno znanje C++/CLI da ti da prednost a verovatno i veću platu. Ja sam jedno godinu dana radio primarno na .NET platformi (C# i Managed C++) a sad sam se vratio na native C++ i nameravam da tu i ostanem do daljeg ;)
[ mmix @ 14.10.2005. 21:04 ] @
Citat:
Dragi Tata: @mmix: Pod 1) Nisi u pravu - za razliku od ostalih .NET kompajlera, C++/CLI optimizuje i IL, pa JIT pravi bolji kod što rezultuje bržim programima pisanim u C++/CLI. Samo, pitanje je koliko je to bitno u praksi, jer za tipične biznis aplikacije performanse na nivou koda nisu bitna stavka, a za one druge ćeš ionako verovatno da koristiš native C++ jer je .NET spor.

Na stranu native C++ (koji je definitivno i brzi i elegantniji od C#a), ali bih voleo da vidim neke primere te famozne C++/CLI optimizacije o kojoj svi pricaju (ukljucujuci i MSov C++ tim), ali za koje niko ne daje primere ili bilo kakvu drugu dokumentaciju sem da je C++/CLI brzi od C# (citiram) "due to some optimizations we can perform in the compiler front-end".
Mi smo ovde radili dosta testiranja u jednom idle periodu i nismo primetili nikakve krajnje razlike na nivou IL-a, niti bilo kakav segment koda koji nije mogao da se disasemblira (dakle i isprogramira) u C#-u.

Primetili smo samo neke optimizacije u debug modu, dok je release build bio skoro identican.

Daleko od toga da su nasi testovi bili sveobuhvatni i savrseni (na kraju je idle period presusio pa su tekuci projekti prekinuli nase zevzecenje ), ali bih stvarno (i zbog licnog napretka) konacno voleo da vidim gde se i kako ispoljava ta optimizacija.
[ NrmMyth @ 14.10.2005. 21:19 ] @
Koliko sam shvatio C++/CLI ti omogucava prosirenje sa "obicnog" C++ na .NET platformu i jednostavni backward nativnom C++-u. A C# nema taj kompatibilitet sa C++, i ukoliko ti se nadje kriticni dio.
Jesam li dobro razumio.

Slobodno vi nastavite raspravu neometano, ja cu pratiti iz pozadine i "upijati" znanje.
Hvala.
[ Dragi Tata @ 14.10.2005. 22:14 ] @
Citat:
mmix: Na stranu native C++ (koji je definitivno i brzi i elegantniji od C#a)


Brži jeste, a elegantni nisu ni jedan ni drugi :) U stvari, ne zna se koji je ružniji.

Citat:
mmix: ali bih voleo da vidim neke primere te famozne C++/CLI optimizacije o kojoj svi pricaju (ukljucujuci i MSov C++ tim), ali za koje niko ne daje primere ili bilo kakvu drugu dokumentaciju sem da je C++/CLI brzi od C# (citiram) "due to some optimizations we can perform in the compiler front-end".


Mislim da sam nešto iscrpniju priču o tome video na nekoj video prezentaciji Herb Sutter-a (link je negde na njegovom blogu). Otprilike je poenta u tome da JIT nema vremena za neke velike optimizacije jer on sam mora da bude jako brz i da je zato fora da se izoptimizuje IL, a jedino C++/CLI kompajler uopšte pokušava da uradi tako nešto.

Što se tiče rezultata koje si ti dobio, ipak se radi o Beta verziji. Sačekaj do 7-og novembra pa proveri ponovo :)

Kao što napomenuh, najviše mi kod C++/CLI jezika prija automatsko generisanje Dispose patterna. Ljudi obično misle da je to trivijalna stvar, a i ja sam tako mislio dok nisam pročitao ovo:

http://www.bluebytesoftware.co...df-5919-4ac7-bc33-20c06ae539ae

E sad, kao što rekoh .NET platforma je usmerena za razvoj biznis i Web aplikacija a optimizacije tog tipa su u takvim uslovima malo bitne.

Tako da ipak verujem da će C++/CLI vladati samo u oblasti Interop-a, mada je i to značajno tržište. Za mainstream .NET programiranje mislim da C# ostaje glavni igrač.

Moje 2 pare dinarske ;)

[Ovu poruku je menjao Dragi Tata dana 14.10.2005. u 23:19 GMT+1]
[ Dragi Tata @ 14.10.2005. 22:17 ] @
Citat:
NrmMyth: Koliko sam shvatio C++/CLI ti omogucava prosirenje sa "obicnog" C++ na .NET platformu i jednostavni backward nativnom C++-u. A C# nema taj kompatibilitet sa C++, i ukoliko ti se nadje kriticni dio.
Jesam li dobro razumio.


Dobro si razumeo :)