C# vs C++

Petr Toąovský PetrTosHW@PTmodel.cz
Středa Leden 27 14:48:00 CET 2010


Tak presne tohle jsem si potreboval precist, ale vcera jsem se na to 
neumel spravne zeptat.
Diky!

Tosa



Marek Sembol wrote:
> Dobry den,
> pochopil jste spatne, pokusim se uvest na pravou miru.
>
> C++ jazyk vznikl (puvodne) rozsirenim/dopresnenim jazyka C (pametnici
> vzpomenou, ze puvodne C++ existoval jen jako PREPROCESOR k normalnimu
> C prekladaci). Jako takovy umoznuje psat (dnes) programy prakticky pro
> libovolny MCU/CPU/operacni system. (prosim vynechme zalezitosti MCU
> bez zasobniku a tak). Ma spornou typovou kontrolu (kdyz mu reknu, ze
> dane 4 byte pameti ma chapat jako DWORD, tak to udela at uz je tam
> cokoliv), pracujete s "realnymi" adresami v pameti (ukazatele), pamet
> si dle potreby alokujete/uvolnujete. C++ generuje primo spustitelny
> kod procesoru, pro ktery preklada (videl jsem i interpret, ale to byla
> jen exotika - vynechme)
> Kdyz prisel MS s technologii .NET, dodelal rozsireni do C++ aby v nem
> bylo mozno psat programy pro .NET (jeste se k tomu vratim pozdeji)
>
> Naproti tomu C# vznikl jako novy jazyk specialne pro prostredi .NET.
> Jako zaklad syntaxe/konstrukci/... si vzali autori C++, ale vynechali
> co se nehodilo (predevsim dedeni od vice predku, ale bylo toho vic) a
> pridali co potrebovali. Jazykem C# jste omezen pouze na .NET framework
> a jeho varianty (Compact na mobilnich zarizenich, Micro na MCU, Mono
> na linuxu) Dale opustim C# a prejdu k .NET, jelikoz od toho se to
> odviji. Jen jeste poznamenam, ze C# generuje .NET kod, je to tedy
> PREKLADAC, ne interpret (ale viz. povidani o .NET)
>
> Tak ted chvili k .NET. Prelozeny program .NET je v jakemsi mezikodu
> nezavislem na pouzitem procesoru/operacnim systemu. Po spusteni
> programu .NET si tento prelozi tento mezikod na kod ciloveho procesoru
> ("just-in-time kompilace") a tento spusti. Nejedna se tedy o
> interpretaci (pomaly je kazdy prubeh), ale o 'odlozenou kompilaci'
> (pomale je prvni volani funkce)
> Zasadni vec, kterou .NET prinasi (urcite jich celou radu zapomenu:))
> je sprava pameti. Jednak se o uvolnovani vami zaalokovane pameti stara
> .NET (vy pouze alokujete, .NET sampozna, ze uz ji nepotrebujete)
> Jednak v 99.9999% pripadu neprijdete do styku s adresou pameti, jednak
> se objekt v pameti muze pohybovat (coz nevadi, kdyz nemate adresu,
> ze:)) Dalsi podstatna vec je, ze .NET presne vi jakeho typu dany
> objekt je a nedovoli vam k nemu pristoupit jinak. Ta typova kontrola
> je dana .NET a NE pouzitym prekladacem. Prekladac sice taky dela
> typovou kontrolu (C# lepsi, VB.NET slabsi), ale je to pouze prvni
> hradba. (Priklad: v C mohu ukazatel na int pretypovat na ukazatel na
> float a prekladac je spokojeny, bezici program taky (ac je to zjevny
> nesmysl). V prostredi .NET sice muzete prekladac oblafnout podobne,
> ale dojde vam k chybe za behu, neprovede se nesmysl)
>
> Ted opet hlasim navrat k C++ - ovsem ve spojeni s .NET. Jak jsem psal,
> je to mozne, ale "mate hodne prace navic" Navic se vam michaji 2 svety
> (pamet, kterou jste si alokoval a musite ji uvolnit a .NET objekty,
> ktere jen alokujete). Musite napr. se starat o tzv. "boxing"
> (zakrabickovani jednoduche hodnoty jako je int do formy objektu, kdyz
> je to zrovna treba ci naopak) Proste pridelate si hromadu problemu a
> pripravite se o mnoho z vyhod cisteho .NET prostredi. Nutno vsak
> dodat, ze obcas je to prakticky nutnost (hlavne kdyz delate most mezi
> temi svety)
>
> Doufam, ze vam to trosku pomuze udelat si obrazek. Urcite jsem na
> strasne hodne veci zapomnel. Dalo by se o tom psat hodiny:)
> Marek
>   
>


More information about the Hw-list mailing list