C# vs C++

Andrej Jancura hw_aj@zoznam.sk
Pátek Leden 29 07:34:09 CET 2010


Dakujem vsetkym velmi pekne za vysvetlenie. Viackrat som si to precital a 
myslim, ze uz tomu rozumiem.

A.


----- Original Message ----- 
From: "Marek Sembol" <hwm.land@gmail.com>
To: "HW-news" <hw-list@list.hw.cz>
Sent: Wednesday, January 27, 2010 2:24 PM
Subject: Re: C# vs C++


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


2010/1/27 Andrej Jancura <hw_aj@zoznam.sk>:
> Dobry den,
>
> kedze tu bezala diskusia o knihe k Visual Studiu a debata sa odklonila k
> tomu, ci pouzivat tu ci nou platformu, chcel by som poprosit
> zainteresovanych o vysvetlenie toho, aky je vlastne rozdiel medzi C# a 
> C++.
> Z toho, co tu padlo som pochopil, ze C# je kvazi interpreter jazyka a C++ 
> je
> klasicky kompilator. Prosim Vas o vysvetlenie toho, aka je syntax C#, da 
> sa
> programovat so syntaxou jazyka C a dalej ake zjednodusenia pri 
> programovani
> pod Windows prinasa C#. Moje znalosti C++ koncia pri MFC. Velmi pekne
> dakujem.
>
> A.
>
> __________ Informacia od ESET NOD32 Antivirus, verzia databazy 4809
> (20100127) __________
>
> Tuto spravu preveril ESET NOD32 Antivirus.
>
> http://www.eset.sk
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
>
_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz
Hw-list@list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list

__________ Informacia od ESET NOD32 Antivirus, verzia databazy 4812 
(20100128) __________

Tuto spravu preveril ESET NOD32 Antivirus.

http://www.eset.sk




__________ Informacia od ESET NOD32 Antivirus, verzia databazy 4816 (20100128) __________

Tuto spravu preveril ESET NOD32 Antivirus.

http://www.eset.sk





More information about the Hw-list mailing list