Avatar billede pablopablo Nybegynder
30. november 2003 - 17:14 Der er 42 kommentarer og
1 løsning

C# compilret til maskinkode vs. C++

Hejsa...

Jeg har læst på microsofts side, at de er i gang med at lave en compiler, som kan compilere C# kode til maskinkode...

http://research.microsoft.com/act/ se under projects -"Bartok".

Spg. 1: Vil det så sige, at et C# program kan blive afviklet ligeså hurtigt som fx. et C++ program?

Spg. 2: Vil C# derfor være ligeså eget til de ellers mere C++ specifikke arbejds opgaver, samt generel windows programmering?

C# allokerer jo selv plads i rammen osv. så det ville da være supersmart hvis det er sandt :)

Spg. 3: Sådan som det er nu, kan man så ikke stort set lave de samme ting i C# som i C++ - Hvis vi nu ikke sammenligner dem på performance et øjeblik...?

mvh. PabloPablo
Avatar billede arne_v Ekspert
30. november 2003 - 17:23 #1
Spg. 1:

Det kan det allerede.

IL bliver nemlig oversat til native kode inden det køres første gang

Projektet lyder mere som et forsøg på at få .NET kode til at køre med
en betydeligt mindre runtime en standard .NET !

Spg. 2:

C++ er mere portabelt end C#.

C++ er stadig valget hvis man skal tæt på hardwaren eller hvis
garbage collection giver for dårlige real time egenskaber.

Til generel programmering er jeg ikke i tvivl om at C# vil afløse C++
på MS platform.

.NET API vil gradvist afløse Win32 API oG MFC API.

Spg. 3:

Jo (med visse undtagelser) - og også selvom du tænker på performance.
Avatar billede omen Nybegynder
30. november 2003 - 17:28 #2
Spg. 1: Hmm, jeg tvivler!

Spg. 2: Til generelt Windows programmering, så er det allerede mere egnet! (letere, hurtigere)

Spg. 3: Overhovedet ikke! Vi vil aldrig se C#(i nuværende tilstand) blive brugt til f.eks 3D spil, avanceret 3D modelering, Anti-virus, Firewall, generelt programmer som arbejder tæt på Windows kernen, for det kan .NET programmer ikke! Du kan lave alt i c++, hvorimod det er begrænset hvad du kan i C#

Vi vil nok ikke se en seriøs afløser til c++ de næste 10 år.
Avatar billede pablopablo Nybegynder
30. november 2003 - 17:46 #3
1. Arne v : "Det kan det allerede"? kan jeg få fat filen, som ikke kører/kræver .net framework, men som er kompileret til ren maskinkode ligesom normal C++?

2. Jeg må sige, at jeg stadig er forvirret...nemlig pga. folk ofte har forskellige meninger herom...jeg er selv glad for at programmere i C# og har ikke så meget C++ erfaring...Det jeg nok søger et konkret svar på er, om jeg kan programmere windows-programmer(Forms), som fx. også inteagere med hardware, men hvor det blot skal virke og ikke være 100% som C++ nok ville være?

3. Da jeg er glad for C# ville jeg jo ønske at det "kunne det hele", i stedet for, at jeg også skal sætte mig ind i C++ - dvs. generelt et det grænsen mellem hvad jeg kan bruge C# til og hvad jeg bliver nød til at bruge til C++...?
Avatar billede arne_v Ekspert
30. november 2003 - 17:51 #4
Selvom IL er ovrsat til natiev kdoe har du stadig brug for
runtime. Alle klaserne. Garbage collection og alt det andet som
hører managed til.
Avatar billede fangel Nybegynder
30. november 2003 - 17:52 #5
hvad har normalt C gjordt for ikke at blive nævn? rigtigt meget OpenSource er jo netop C - så dette må siges at være en vigtig medspiller ;)

(har aldrig selv leget med C, så dette er hvad jeg har forstået omkring C) : C har et langt mere indviklet hukommelses system, og man kan derfor lave hurtigere, mindre ram-brugende programmer... og Linux er jo lavet i C - tror jeg ikke du for C# til at kunne... !

Morten
Avatar billede arne_v Ekspert
30. november 2003 - 17:53 #6
Normal GUI, database, business logic etc. kan du sagtens lave i C#.

Hardware interaktionen skal formentlig laves i C++.

Du kan jo imidelrtid kalde C++ stumper fra C#.

Ligesom man kan kalde assembler fra C++, når man har behov for
noget specielt.
Avatar billede arne_v Ekspert
30. november 2003 - 17:56 #7
dea>

Jeg formoder at vi snakker Windows platform. C++/C ratioen er langt
højere på Windows end på Linux.

C# er næppe velegnet til at skrive operativ systems kerner i.

Og ja du kan sagtens lave noget mindre RAM forbrugende i C. Men med
pris forholdet mellem programmør timer og RAM klodser, så er det kun
i specielle tilfælde at det kan betale sig.
Avatar billede fangel Nybegynder
30. november 2003 - 17:58 #8
arne => faktisk bruger jeg Linux...

er der en stor forskel på C (eller C++)'s egenskaber i Win vs Linux

Morten
Avatar billede arne_v Ekspert
30. november 2003 - 18:01 #9
Næh.

Men der er tradition for C på Linux og mere tradition for C++ på Windows.
Avatar billede omen Nybegynder
30. november 2003 - 18:01 #10
Det er umuligt at lave et OS med C#. Hovedfunktionen med et OS er at det kan få adgang til hardware direkte. Det kan .NET ikke!
Avatar billede pablopablo Nybegynder
30. november 2003 - 18:04 #11
Ja vi snakker kun windows platform...

Dvs. den optimale sammensætning ville som du arne_v siger det, at flette C++ stumper ind i sit C# program til de dele som skal interagere med hardware eller blot være meget hurtigt...at tage fordelene ved begge sprog lyder da smart...den mindre krævende laves i C# for at spare udviklingstid og det krævende laves i C++ for at optimere bestemte dele af systemet...?-)

Jeg skal evt. lave et program, som modtager noget data fra en maskine til com-porten på en pc...kan jeg ikke sagten lave det i C#...eller?
Avatar billede arne_v Ekspert
30. november 2003 - 18:06 #12
Meget store dele af et operativ system kunen sagtens være managed kode.
Formentlig >90% med alt det crap der følger med et operativ system idag.

Men de helt centrale dele kan ikke.
Avatar billede omen Nybegynder
30. november 2003 - 18:06 #13
Ja, COM porten er vidst tilgængelig for C#!
Avatar billede arne_v Ekspert
30. november 2003 - 18:08 #14
At lave GUI og database i C# og hardware interface i C++ lyder som en
ganske fornuftig måde at gøre det på.

Helt basale ting som at læse fra COM port vil jeg tro, at .NET enten
kan allerede elle rvil kune komme til at kunne.
Avatar billede odegaard Nybegynder
30. november 2003 - 18:09 #15
Omen: Ja via funktioner i kernel.dll
Avatar billede arne_v Ekspert
30. november 2003 - 18:10 #16
Avatar billede arne_v Ekspert
30. november 2003 - 18:12 #17
Så det er med kald til C kode.

Bare kode som MS har skrevet.

Jeg vil da forvente at .NET class library på et tidspunkt udvides
me dnogke klaser til COM & LPT port handling.
Avatar billede arne_v Ekspert
30. november 2003 - 18:13 #18
Avatar billede pablopablo Nybegynder
30. november 2003 - 18:29 #19
arne_v>>> Det sidste link du sendte virker noget bedre og mere overskueligt :)

Vil sådan et program, som skal kommunikarer over com-porten, lavet i C#, som beskrevet på linket...vil det ikke virke fint eller vil det stadig køre meget bedre i enten C# koblet sammen med C++ eller KUN C++???-)
Avatar billede arne_v Ekspert
30. november 2003 - 18:54 #20
Jo men du bruger også en komponent - det andet bruger kun ren windows.

C# -> C/C++ skrevet af Microsoft og C# -> C/C++ kode skrevet af dig bør
virke lige godt (medmindre du goofer i det).

Jeg kan ikke umiddelbart se nogen fordele ved at lave det hele i C++.
Avatar billede pablopablo Nybegynder
30. november 2003 - 18:54 #21
Du må stadig godt lige svare på mit sidste spg...bare så det lige er slået helt fast ;)
Avatar billede arne_v Ekspert
30. november 2003 - 19:18 #22
Jeg formoder at min sidste kommentar dækker det.
Avatar billede pablopablo Nybegynder
30. november 2003 - 19:18 #23
Nu er tråden godt nok afsluttet :) Men hvad mente du med "Jo men du bruger også en komponent - det andet bruger kun ren windows."?
Avatar billede arne_v Ekspert
30. november 2003 - 19:21 #24
Det sidste eksempel bruger en OCX/ActiveX komponent, so man skal have fat
på og installere.

Det første eksempel bruger kernel32.dll som alle windows brugere har.
Avatar billede arne_v Ekspert
30. november 2003 - 19:21 #25
Tråden er vel ikke afsluttet førend du har fået svar på dine spørgsmål.
Avatar billede pablopablo Nybegynder
30. november 2003 - 19:32 #26
hehe..nej okey...men jeg mente nu har jeg jo givet dig points :)

Den der OCX/ActiveX komponent er det nogen forhindring? koster den noget eller har den andre ulemper? Jeg spørger kun fordi det første eks. så noget rodet ud...:) Men det kan altså komme ud på et, hvilken metode man benytter?

Vil jeg have svært ved at lære C++ når jeg tidligere har programmeret Java og C#?
Avatar billede arne_v Ekspert
30. november 2003 - 19:36 #27
Jo - men derfor stopper jeg jo ikke med at svare.

Ifølge artiklen så kommer den komponent med VB6 i Visual Studio. Hvis det er
et problem, så tilbage til kernel32.dll - den kommer med Windows.

Nej. De sprog har rigtigt meget tilfælles både i tanke gang og syntax.
Avatar billede pablopablo Nybegynder
30. november 2003 - 19:40 #28
"Ifølge artiklen så kommer den komponent med VB6 i Visual Studio"? Jamen artiklen handlede da om hvordan man kommunikerede med com-porten i C#?

Hvis jeg vil lærer C++, skal jeg så kaste mig over "den gamle version" eller den nye C++.Net? Hvad er forskellen?
Avatar billede arne_v Ekspert
30. november 2003 - 19:44 #29
Jo - men de bruger en komponent i C# som de hapser fra VB6.

Den nye. Fordi VC++.NET kan bruges både i unmanaged mode og managed mode.

Managed mode = .NET mode.

Unmanaged mode = samme som VC++6 bare med en masse bug fixes og forøget
ANSI C++ kompabilitet.
Avatar billede pablopablo Nybegynder
30. november 2003 - 20:00 #30
øøhm...hvad er VC++ / VC??6 ?

Dvs. hvis man kører i unmanaged mode, så svarer det til den gamle C++ version og hvis men kører i managed mode hva så, har man så adgang til garbage collection osv? og ikke direkte adgang til hardware - altså på C# niveau...?
Avatar billede pablopablo Nybegynder
30. november 2003 - 20:01 #31
Hvis det er rigtigt? Hvad er så forskelligen på C#.Net og C++.Net i Managed mode?
Avatar billede arne_v Ekspert
30. november 2003 - 20:15 #32
VC++ = Visual C++

Jeg har aldrig brugt VC++.NET i managed mode.

Men som jeg har forstået det så kan C#, VB.NET og VC++.NET i managed mode
præcis det samme - syntaxen er bare forskellig.
Avatar billede pablopablo Nybegynder
30. november 2003 - 20:40 #33
Okey...øøhmm...Men Hvis man kører C++ i unmanaged mode, så kører den altså ikke længere på CLR(Standart bibliotekerne i Dot Net)?

Jeg tænker på, hvad er det der sker rent funktionelt når man skifter fra Managed mode til Unmanaged mode i C++? Der er jo åbenbart meget stor forskel, siden at man har mulighed for meget mere, såsom direkte adgang til hardware osv...
Avatar billede arne_v Ekspert
30. november 2003 - 20:42 #34
Som sagt har jeg aldrig brugt det i praksis.

Men det formoder jeg. Man bruger vel Win32 API og MFC som man gjorde i VC++6.
Avatar billede pablopablo Nybegynder
30. november 2003 - 20:49 #35
okey :)

Den jeg ved er forskel på C# og C++.net er at C# er en del mere web-basseret, hvor det ikke ser ud til at C++ kan det samme...? Der er i hvert fald ikke ligeså mange forskellige ASP.NET skabeloner i C++ som i C#...Men tilgengæld er det så flere ikke-web-relaterede skabeloner til C++...
Avatar billede arne_v Ekspert
30. november 2003 - 21:00 #36
Det er uden tvivl VB.NET og C# som dominerer i ASP.NET - C++ bruges nok kun
hvis nogen skulle få lyst til at lave et ISAPI modul.
Avatar billede pablopablo Nybegynder
30. november 2003 - 21:39 #37
Jeg har lige spg. til...

Der findes så mange forskellige projet typer i V.S...

1. Hvis jeg skal lave en stump kode i C++ unmanaged mode til C#, hvad hedder så det jeg skal vælge under templates?

2. Hvis jeg vil lave et program i REN C++ unmanaged mode, hvad skal vælge under templates?
Avatar billede pablopablo Nybegynder
30. november 2003 - 21:41 #38
Er der ikke mulighed for at kunne designe GUI nu via "drag and drop" i C++ unmanaged mode?
Avatar billede arne_v Ekspert
30. november 2003 - 21:42 #39
Hvis du skal kalde C++ unmanged kode fra C# skal du lave en DLL.

Hvis du skal lave ren C++ unmanaged kode skal du vel lave en
windows app eller en console app.
Avatar billede arne_v Ekspert
30. november 2003 - 21:42 #40
Ved jeg ikke.
Avatar billede pablopablo Nybegynder
30. november 2003 - 22:27 #41
Hvis jeg vælger en C++ windows application - så er det jo med ".net" og det dutter jo ikke...de andre jeg har prøvet at trykke på har ikke mulighed for at design GUI? Men det ved at det kan lade sig gøre, det kunne man helt tilbage i ver. 5.0 af C++ ...inden Dot Net kom til :)
Avatar billede arne_v Ekspert
30. november 2003 - 22:31 #42
Jeg er helt blank.

Jeg har ikke lavet VC++.NET og jeg laver så godt som aldrig GUI.
Avatar billede pablopablo Nybegynder
30. november 2003 - 22:45 #43
hehe...okey - Du skal dog have mange tak for hjælpen!!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester