mboost-dp1

Bjarne Stroustrup

C++-opfinders forslag nedstemt af standardkomité

- Via Version2 - , redigeret af Net_Srak , indsendt af arne_v

Programmeringssproget C++ blev i sin tid opfundet af danskeren Bjarne Stroustrup og har gennem årene udviklet sig løbende. Til at varetage integriteten af sproget er der nedsat en standardkomité; ISO C++-standardkomitéen.

I 2010 vil komitéen godkende en ny standard af C++, kaldet C++0x, men Version2 beretter, at det bliver uden et tiltag fra Stroustrup, som ellers var ventet af mange. Tiltaget kalder Stroustrup “concepts” og vil gøre det nemmere at fejlfinde templates.

Årsagen til afvisningen er ifølge komitéen, at concepts endnu ikke er moden nok til at blive en del af standarden, til trods for at specifikationerne har været undervejs siden 2002.

Stroustrup selv er skuffet over beslutningen, men vil nu arbejde på, at en forbedret udgave kan blive en del af standarden om fem år.

Yderligere deltaljer om concepts kan læses her (pdf).





Gå til bund
Gravatar #1 - XorpiZ
14. aug. 2009 10:09
Off-topic:

Han er godt nok ucharmerende.. hvornår gik de bluser der af mode? Starten af 90'erne? :D
Gravatar #2 - ssboisen
14. aug. 2009 10:13
#1 http://www.simontoth.cz/en/system/files/images/bja... happy now? :)

Manden er genial nok til at være ligeglad med sådan noget :)
Gravatar #3 - cyandk
14. aug. 2009 10:40
XorpiZ (1) skrev:
Off-topic:

Han er godt nok ucharmerende.. hvornår gik de bluser der af mode? Starten af 90'erne? :D


Who the fuck cares hvordan han ser ud? Han kan sit kram og alt respekt for det.
Gravatar #4 - XorpiZ
14. aug. 2009 10:57
cyandk (3) skrev:
XorpiZ (1) skrev:
Off-topic:

Han er godt nok ucharmerende.. hvornår gik de bluser der af mode? Starten af 90'erne? :D


Who the fuck cares hvordan han ser ud? Han kan sit kram og alt respekt for det.


Haha ja, jeg er enig. Han er fandme dygtig. Men jeg måtte alligevel smile lidt, da jeg så ham :D
Gravatar #5 - d0rk
14. aug. 2009 10:57
5 år er godt nok lang tid at vente mere, når man har været igang siden 2002...
Gravatar #6 - mireigi
14. aug. 2009 11:15
Klassisk "nørd" vi har med at gøre her.

Umiddelbart vil man ikke mene at han er andet end en landsbytosse, indtil man får at vide hvem han er. Så får piben en helt anden lyd og man får respekt for intellektet og personen i stedet for udseende og væremåde.
Gravatar #7 - nezz_dk
14. aug. 2009 11:39
han kan sit kram, man han burde få klippet resten af håret af!
Gravatar #8 - reonekot
14. aug. 2009 12:30
Jeg synes både denne og version2s artikel forsøge at lave BT nyhed her. (Især overskriften er overdreven sprogbrug IMO) Måske er ordet nedstemt bare mere negativt i mine øjne end andres, men ja concepts er ikke med i C++0x. Men concepts er ikke med fordi de ikke er langt nok med implementering og ikke på grund af folk i standard komiteen ikke kan lide ideen. Selv Bjarne er enig i beslutningen om ikke at inkludere concepts.
Gravatar #9 - Windcape
14. aug. 2009 21:26
Det er dog ret skuffende at det ikke kommer med. Rigtig support af generics, og ikke noget lal ligesom SUNs implementering i Java, ville gøre C++ til et så meget bedre sprog.

Men så igen, man kan jo bare bruge C# istedet ;)
Gravatar #10 - Anderslm
14. aug. 2009 21:58
#9
C++ har fin support for templates (Kaldet generics i C#). Stroustrup's concepts giver ikke bedre support for templates/generics, men bedre type-checking ved compile time og bedre fejl beskeder.

Mener du at C++'s templates er ligesom implementeringen af generics i Java? Hvis der er to sprog der ligner hinanden, så er det godt nok C# og Java.

C# er, for en lille sidebemærkning, da den største blanding af programmerings-paradigmer nogle sinde set - med en masse syntaktisk sukker. Jeg kan ikke se hvor C# er bedre end C++ - De kan slet ikke sammenlignes på den måde.
Gravatar #11 - Windcape
15. aug. 2009 02:57
Anderslm (10) skrev:
C++ har fin support for templates (Kaldet generics i C#)
Du ved vel udemærket er du skal definere en template for hver eneste type du agter at benytte!

Hvor at generics i Java og C#, samt andre sprog, tillader en vilkårlig type.

Anderslm (10) skrev:
Jeg kan ikke se hvor C# er bedre end C++ - De kan slet ikke sammenlignes på den måde.
Man kan sammenligne værktøj der benyttes til samme formål!
Gravatar #12 - arne_v
15. aug. 2009 03:15
windcape (11) skrev:
Du ved vel udemærket er du skal definere en template for hver eneste type du agter at benytte!


Ikke korrekt.

Man definerer sin template en gang for enhver type.

Du tænker nok på at compileren genererer ny kode hver gang man bruger templaten for en ny type.

Gravatar #13 - arne_v
15. aug. 2009 03:17
Anderslm (10) skrev:
C# er, for en lille sidebemærkning, da den største blanding af programmerings-paradigmer nogle sinde set


C++ understøtter vel flere paradigmer end C# ?
Gravatar #14 - cryo
15. aug. 2009 06:28
#9, #10 etc.:

Ja C++ templates er langt mere kraftfulde end C#'s generics, det kan der ikke være tvivl om. Men generics er tilstrækkelige til 95% af det man har brug for, efter min erfaring, og man har til gengæld:

a) langt mindre kompleksitet og noget federe syntaks,
b) langt bedre fejlbeskeder,
c) mulighed for instantiering JIT-time (ville svare til link-time med C++).

Java's generics er bare sukker for en type-cast. Nothing to see here. C#'s (og C++ templates) genererer rent faktisk optimeret kode til den enkelte situation.
Gravatar #15 - cryo
15. aug. 2009 06:31
#13, ja det er jeg til dels enig i. Som daglig bruger af C# er jeg dog ret glad for de forskellige paradigmer. De som brokker sig over det er vist mest folk som ikke bruger sproget; man kan jo bare holde sig fra de dele man ikke kan li', hvis det er det.

Altså hvis man ikke kan li' at se på numbers.Where(n => n < 100) kan man da bare lave en ny liste, løbe den første igennem og tilføje alle dem under 100 til den anden ;-).... 3-4 gange så meget kode, en anelse hurtigere og lidt sværere at læse. Så hvorfor? :-p
Gravatar #16 - Montago.NET
15. aug. 2009 07:48
#15

på arbejdet har vi en livlig diskussion om Extension Methods er ok eller ej....

jeg elsker at bruge dem - de andre basher mig for det...

C# er fantastisk :D
Gravatar #17 - paltas
15. aug. 2009 08:47
Anderslm (10) skrev:
#9
C++ har fin support for templates (Kaldet generics i C#). Stroustrup's concepts giver ikke bedre support for templates/generics, men bedre type-checking ved compile time og bedre fejl beskeder.


Concept-based overloading giver dig faktisk bedre support for generic programming i C++. Pt. skal man bruge type traits samt tag dispatching for at lave det samme; den concept baserede version vil i langt de fleste tilfælde være kortere og mere læsevenlig.

C++0x inkluderer static assertions, biblioteks udviklerne vil være
i stand til at lave de samme "concept" checks vh.a. type-traits og SFINAE (bliver benyttet af BOOST concept check), men i så fald bliver koden endnu mere ulæselig.

Man har iøvrigt valgt at inkludere flere type traits i standard biblioteket, men mange af dem er ikke helt klare. F.eks. er det ikke specifiseret hvornår std::tr1::is_pod<V>::value evaluere til true.
Gravatar #18 - Windcape
15. aug. 2009 09:12
Montago (16) skrev:
på arbejdet har vi en livlig diskussion om Extension Methods er ok eller ej....

jeg elsker at bruge dem - de andre basher mig for det...
Smid dem en bog i hovedet omkring funktional programmering, og hvorfor det giver mere stabil kode?

var numbers = listOfXs.Where(x => x > 100)


Retunere jo en 'pratisk immutable' enumeration, hvor imod den lign. kode:


var numbers = new List<T>();
foreach(var x in listOfXs)
{
if(x > 100) { numbers.Add(x); }
}


jo kan have en række fejl, andre threads som måske ændre på numbers listen og hvad ved jeg.
Gravatar #19 - mrF0x
15. aug. 2009 11:13
arne_v (13) skrev:
C++ understøtter vel flere paradigmer end C# ?


Så absolut!

C# vil gerne være med som et multi-paradigme sprog, men er det jo reelt set ikke - ser man med krakilske briller.

#18
At kalde Extension methods for funktionel programmering ?? Ahh er det ikke bare "omvendt" syntaktisk sukker for et statisk metode-kald ? Jo..

#14
STL vs Generics ? No brainer ;)


Noget jeg synes der er langt mere interessant fra Bjarne er hvorledes han ser kritisk på arkitektur.

Noget helt andet er at han angriber "hypede" sprog. Nu ved jeg ikke lige præcis hvilke sprog han umiddelbart angriber, men jeg vil give manden ret i - at der er noget forkert i at vi konstant skal tilføje nye elementer.

Noget der er rart ved C++ er at der ikke konstant rodes i sproget og der tilføjes nye elementer.

Jeg er ret kritisk overfor C# selvom jeg dagligt programmerer i det. Læs f.eks. denne korte liste: var, dynamics, linq, extension methods, default properties og meget mere. Der proppes konstant ned i sækken af nye "features" - og når 2010(VS) nu engang kommer frem - skal der nok blive "hyped" på bl.a. dynamics. Puha en grim tanke.

Til tider ville jeg ønske at vi vendte næsen retur mod C++. Det kan godt være at C++ er mere kompleks, men det tilbyder også så meget mere på de samme fundamentale principper.
Gravatar #20 - Windcape
15. aug. 2009 11:29
mrF0x (19) skrev:
At kalde Extension methods for funktionel programmering ?? Ahh er det ikke bare "omvendt" syntaktisk sukker for et statisk metode-kald ? Jo..
Men funktionel programmering er jo netop at du indfanger logik i funktioner, istedet for inline kode!

Extension Methods er det pragmatiske svar på at indbygge funktionel programmering i et imperativt sprog. Samt at du kan benytte lambda expressions som parameter, noget du ikke kan i C++.

mrF0x (19) skrev:
Læs f.eks. denne korte liste: var, dynamics, linq, extension methods, default properties og meget mere. Der proppes konstant ned i sækken af nye "features" - og når 2010(VS) nu engang kommer frem - skal der nok blive "hyped" på bl.a. dynamics. Puha en grim tanke.
De fleste af disse "nye features" er bare biblioteks udvidelser.

Og dynamics er smart i forhold til at implementere f.eks. Python i .NET. Husk at mange spil allerede benytter noget lign. som f.eks. LUA sammen med C++ !

mrF0x (19) skrev:
Til tider ville jeg ønske at vi vendte næsen retur mod C++. Det kan godt være at C++ er mere kompleks, men det tilbyder også så meget mere på de samme fundamentale principper.
Fundamentale principper er ligegyldige, og betyder bare du skal skrive mere besværlig kode, uden enligt at opnå noget som helst.

Vi skal arbejde hen imod mindre imperativ programmering, og C# gør klart et bedre job en noget andet imperativt sprog so far!

mrF0x (19) skrev:
STL vs Generics ? No brainer ;)
Ja, hvis der var ordenlige generics ville folk måske benytte noget ala. List<T> istedet for Vectors med konstante typecasts!
Gravatar #21 - Anderslm
15. aug. 2009 12:45
windcape (20) skrev:
Men funktionel programmering er jo netop at du indfanger logik i funktioner, istedet for inline kode!

Extension Methods er det pragmatiske svar på at indbygge funktionel programmering i et imperativt sprog. Samt at du kan benytte lambda expressions som parameter, noget du ikke kan i C++.


Og det er langt hen ad vejen det, der er problemet. Ikke akkurat fordi man kan bruge lambda expressions som parameter, men sammen med alle de andre ting (var, dynamics, linq osv.) kan du virkelig skrive kode, som er så forskelligartet at det bliver svært at vedligeholde. Bare prøv at tænk på, hvor mange måder du kan itterere over en collection på (Løkker, LINQ, Extension Methods).

windcape (20) skrev:

Fundamentale principper er ligegyldige, og betyder bare du skal skrive mere besværlig kode, uden enligt at opnå noget som helst.


Fundamentale principper er så absolut ikke ligegyldige. C# er ret så ligeglad med principper og tvinger derfor en til at skrive noget så selvmodsigende som "static class" hvis man skal bruge noget, som ikke passer ind i en klasse.

windcape (20) skrev:

Vi skal arbejde hen imod mindre imperativ programmering, og C# gør klart et bedre job en noget andet imperativt sprog so far!


Jeg ved ikke om jeg syntes vi skal arbejde hen imod mindre imperativ programmering, men mulighederne i f.eks. LINQ er spændende.
Jeg vil dog give dig ret i, at C# er et ganske udemærket sprog (Og programmerer også i det til daglig), men jeg kan stadig ikke lide at sammenligne det alt for meget med C++. C# er et high-level sprog, med en virtual machine (Ligesom med Java) og det egner sig utrolig godt til at lave userland programmer i - Og nærmest intet andet. C++ er et low/middle-level sprog og kan give dig en utrolig performance og kontrol, og med et framework som QT egner det sig lige så fint som C# til at lave userland applikationer med.

Det vi skal arbejde hen imod er ensartet kode - Ligegyldigt hvilket sprog der bruges. C# opfordrer, efter min mening, programmører til at skrive kode, som netop ikke er ensartet. Det skaber uenighed og besværliggører vedligeholdese og samarbejde. Hvornår skal man foreksempel bruge "var" - Og er det god skik? Hvad med LINQ vs. Extension methods? Og bør man overhovedet bruge lambda expressions?
Det handler om at skrive kode som et letlæseligt, ensartet og gør arbejdet effektivt. Alt for lidt af det kode jeg har overtaget fra andre i C# er nogle af de ting, og det er da muligt det er fordi dem der har skrevet det, ikke er dygtige nok - Men har et stykke software været igennem flere udviklere, kan man nærmest følge hvordan koden bliver mere og mere forskelligartet, som C# har fået flere og flere features med tiden. Det er som om C# bare propper mere og mere ned i værktøjskassen og jeg tror det forvirrer mere end det gavner.
Gravatar #22 - Windcape
15. aug. 2009 14:30
Anderslm (21) skrev:
kan du virkelig skrive kode, som er så forskelligartet at det bliver svært at vedligeholde.
Vedligeholdelse skal afhænge af selv-dokumenterede kode, og code-conventions, end sprog-specifikationer!

Derudover er ting som users.Select(user => user.Age >= 30); meget mere selv dokumenterede end 5 linjer med en ny liste oprettelse, og en løkke!

Anderslm (21) skrev:
Det er som om C# bare propper mere og mere ned i værktøjskassen og jeg tror det forvirrer mere end det gavner.
Kun for folk der nægter at flytte sig ud af deres imperative tankegang, og ikke opsøge mulighederne ved de nye paradigmer.
Gravatar #23 - Windcape
15. aug. 2009 14:44
Anderslm (21) skrev:
Hvornår skal man foreksempel bruge "var" - Og er det god skik?
Det er nemt nok, bare tænk dig om.

var bør kun bruges når det er nærmest er duck typing, som f.eks. ved:

- Instansisering
var windcape = new User("Windcape");


- foreach iteration, eller lign block code
foreach(var user in users) {} 

using(var stream = File.Open("hi.txt")) {}


Det er super produktivt ikke at skulle definere lange typer TO gange, og giver en mere overskuelig og læsbar kode.

var something = new SuperLongClassNameWith<SuperLongKey, AndSuperLongType>();


versus

SuperLongClassNameWith<SuperLongKey, AndSuperLongType> something = new SuperLongClassNameWith<SuperLongKey, AndSuperLongType>();


Anderslm (21) skrev:
Hvad med LINQ vs. Extension methods? Og bør man overhovedet bruge lambda expressions?
Anders Hejlberg har givet massere af eksempler på diverse konferencer det sidste års tid. Du bør benytte et LINQ query når det giver mening, og giver den mest simple og læsebare kode.

Extension methods giver også fint mening til funktionalitet som LINQs, et statisk bibliotek er jo bare besværligt. Kan virkelig ikke se hvorfor at man vil vælge den mest rodede tilgang.

Statisk (Java):
Collections.Sort(users);


Extension (C#):
users.Sort();


Og mht. lambda, sammenlign her med predicates og statisk kode:

(Java)
Collections.Sort(users, new Comparator<User>() {
// Læg mærke til at vi skal definere en type *sigh*
public int compare(User user1, User user2)
{
return user1.getAge() > user2.getAge();
}
});


Lambda (C#):
users.Sort(user => user.Age)
Gravatar #24 - Windcape
15. aug. 2009 14:48
Hvorfor at du nogen sinde ville have den lange kode forstår jeg så ikke.

Derudover giver extension methods jo netop mere ensartet kode, end at skrive predicates manuelt hver eneste gang, eller værrere, slet ikke benytte predicates/comperators!

Desværre hører C++ jo netop med til linjen af sprog som hellere ser at udviklerne bruger lang tid på at kode, og ikke kan skrive selv-forklarende kode, end at udvikle sproget.

Hvilket så giver det udslag, at udviklerne så bare benytter pointer magic o.lign. i sådan en grad at det er HELT UMULIGT at vedligeholde!
Gravatar #25 - Lunxed
15. aug. 2009 15:15
Wall of text crits you for 21560(754000 overkill)
Gravatar #26 - Windcape
15. aug. 2009 15:22
Lunxed (25) skrev:
Wall of text crits you for 21560(754000 overkill)
newfag!

/me saver "nyheder for nørder" i <title />
Gravatar #27 - Whoever
15. aug. 2009 15:36
#9, du ved intet om C++...

Læs nu på lektion... f.eks. lamba expressions i Boost eller bare lidt om templates.
Gravatar #28 - Windcape
15. aug. 2009 16:09
Whoever (27) skrev:
lamba expressions i Boost
Lambda er ikke særlig elegant hvis man skal implementere det på biblioteks niveau.

Det bliver ligeså rodet kode som predicates i Java. Folk vælger simpelthen IKKE at bruge det fordi det er for rodet, og kræver et bibliotek i første omgang.
Gravatar #29 - RAJensen
16. aug. 2009 00:42
Off Topic:
Så var det man kom til enden af tråden og tænkte: Fuck, det er sort snak!

Respekt til programmøre der får min computer til at kunne alt muligt mellem himmel og jord!

Lidt sejt at vide at det er Dansker der opfandt C++
:-P

I'm Out!
Gravatar #30 - arne_v
16. aug. 2009 00:49
RAJensen (29) skrev:
Lidt sejt at vide at det er Dansker der opfandt C++


Danskere er ret godt med på sprog fronten.

C++ : Bjarne S
Delphi og C# : Anders H
PHP : Rasmus L
RoR : David H H

(OK - RoR er så teknisk set ikke et sprog)

Finnerne er så til gengæld foran os på OS fronten.
Gravatar #31 - cyandk
16. aug. 2009 08:17
Jeg ved ikke hvad der sker for Windscape, men hver gang der er en "kode" nyhed spytter han koder ud, som om han skal bevise for alle at han er 1337 super duber koder?

Eller er det bare for hans egen e-peen skyld?
Gravatar #32 - Windcape
16. aug. 2009 08:26
#31

Vi diskuterede lambda og extension-methods. Hvad er der galt i nogle eksempler til at illustrere pointen?

Du kunne jo overveje at nærlæse det, måske ville du lære noget ;)
Gravatar #33 - arne_v
17. aug. 2009 00:46
windcape (9) skrev:
Det er dog ret skuffende at det ikke kommer med. Rigtig support af generics,


C++ har haft en langt mere fleksibel form for generics i form af templates i ca. 20 år.

windcape (18) skrev:
Smid dem en bog i hovedet omkring funktional programmering, og hvorfor det giver mere stabil kode?


Extension metoder har intet med funktionel programmering at gøre, så medmindre det er en meget tyk bog og hensigten er at slå dem ud, så hjælper det ikke.

Extension metoder har en lille smule til fælles med AOP.

windcape (18) skrev:

var numbers = listOfXs.Where(x => x > 100)


Retunere jo en 'pratisk immutable' enumeration, hvor imod den lign. kode:


var numbers = new List<T>();
foreach(var x in listOfXs)
{
if(x > 100) { numbers.Add(x); }
}


jo kan have en række fejl, andre threads som måske ændre på numbers listen og hvad ved jeg.


numbers listen er en lokal variabel, så den er der ikke andre tråde som retter i.

Eksemplet kræver iøvrigt slet ikke extension metoder, da List<> har en FindAll metode, som gør noget tilsvarende.
Gravatar #34 - arne_v
17. aug. 2009 00:57
windcape (20) skrev:
Men funktionel programmering er jo netop at du indfanger logik i funktioner, istedet for inline kode!

Extension Methods er det pragmatiske svar på at indbygge funktionel programmering i et imperativt sprog.


Extensions metoder er præcis lige så imperative som alle andr metoder.

windcape (20) skrev:
Vi skal arbejde hen imod mindre imperativ programmering, og C# gør klart et bedre job en noget andet imperativt sprog so far!


Der er mange som antager at fremtiden ligger i funktionelel sprog og ikke i imperative sprog.

Men indtil videre er det kun en interesant hypotese.

Og det er langtfra givet at det er bedre at tilføje funktionelle egenskaber til et ikke funktionelt sprog end at skifte sprog i forbindelse med et paradigme skifte.

Generelt har "do everything" sprogene ikke haft så stor success som de mere simple sprog.

windcape (20) skrev:
Ja, hvis der var ordenlige generics ville folk måske benytte noget ala. List<T> istedet for Vectors med konstante typecasts!


Øh.

Hvornår caster du i.f.m. brug af STL vector ??
Gravatar #35 - arne_v
17. aug. 2009 01:12
windcape (23) skrev:

Extension methods giver også fint mening til funktionalitet som LINQs, et statisk bibliotek er jo bare besværligt. Kan virkelig ikke se hvorfor at man vil vælge den mest rodede tilgang.

Statisk (Java):
Collections.Sort(users);


Extension (C#):
users.Sort();



List<> Sort er ikke en extension men et helt normalt member.

windcape (23) skrev:

Og mht. lambda, sammenlign her med predicates og statisk kode:

(Java)
Collections.Sort(users, new Comparator<User>() {
// Læg mærke til at vi skal definere en type *sigh*
public int compare(User user1, User user2)
{
return user1.getAge() > user2.getAge();
}
});


Lambda (C#):
users.Sort(user => user.Age)


Ingen tvivl om at funktioner som første klasses objekter er en god ting (lyder gyseligt på dansk).

Men det er altså lykkes dig at lave fejl i både Java og C# koden !

return user1.getAge() > user2.getAge();

->

return user1.getAge() - user2.getAge();

og:

users.Sort(user => user.Age);

->

users.Sort((u1,u2) => u1.Age - u2.Age);
Gravatar #36 - arne_v
17. aug. 2009 01:14
cyandk (31) skrev:
Jeg ved ikke hvad der sker for Windscape, men hver gang der er en "kode" nyhed spytter han koder ud, som om han skal bevise for alle at han er 1337 super duber koder?


Kode kan jo illustrere ens pointe mere præcist end dansk prosa kan.
Gravatar #37 - arne_v
17. aug. 2009 01:14
windcape (32) skrev:

Vi diskuterede lambda og extension-methods. Hvad er der galt i nogle eksempler til at illustrere pointen?

Du kunne jo overveje at nærlæse det, måske ville du lære noget ;)


Forudsætter jo så at koden rent faktisk virker og relaterer sig til det som den påståes at relatere sig til.
Gravatar #38 - mrF0x
17. aug. 2009 11:50
Windscape der noget du totalt har misforstået hvis du mener at STL bruger tonsvis af typecasts ?

Der findes ikke funktioner i C#... period!

C# er stadigvæk på samme niveau som Java et rent objekt oritenteret sprog - og det eneste paradigme det reelt set overholder.

Jeg giver også C# at det er et godt sprog, men det bygger ikke på egne principper, men låner fra alle lejre. Det kan man så rynke på næsen af -hvilket jeg nok lidt gør må jeg erkende.

Noget der ikke kommer som overraskelse er at i den næste spec bliver det tilladt at skrive default værdier på metode erklæringer...

void Foo(bool show=true);
C++ syntaks.. Det bliver vist noget grimt pascal lignende med := i C#

Hov den manglede og mange har savnet den... LÆNGE! Så - gammel vin på nye flasker ikke sandt.

Så ja C# er god nok til Userland applikationer, men - men, det er stadigvæk C++ der tilbyder os den bedste performance og samtidig kan porteres mellem platforme.
Samtidig glemmer vi helt i diskussionen at hvor C++ er et sprog som varetages af en komité og en matematiker - så er C# et sprog som varetages (for det meste, altså ikke standarder) af et en virksomhed som lever af at sælge sin proprietære platform.


Gravatar #39 - Windcape
17. aug. 2009 12:15
mrF0x (38) skrev:
Så - gammel vin på nye flasker ikke sandt.
Jo, men der er ingen som har påstået andet.

Language-purity er nok det største fejl man kan lave. Sprog er værktøjer, og bør optimeres derefter.

mrF0x (38) skrev:
men, det er stadigvæk C++ der tilbyder os den bedste performance og samtidig kan porteres mellem platforme.
C# er hurtigere end C++ på visse punkter, så hold nu op med at snakke om performance.

Og portability på source-niveau virker så ligegyldigt. Specielt når det typisk er baseret på preprocessor statements, og ikke abstraktion! Det er så dybt fustrende at læse #IF WIN , eller #IF LINUX over det hele i kode.

Samtidig låser du dig alt for nemt til en enkelt platform i C++, da der langtfra benyttes abstraktion nok på biblioteks niveau.
Gravatar #40 - mrF0x
25. aug. 2009 19:48
Nej C# er ikke hurtigere end C++.

Alt sker via JIT'en for det første.

For det andet virker C# hurtigere i det den kan håndtere mange små objekter af gangen grundet GC.

Når det så er sagt - så vil en dygtig C++ programmør til enhver tid kunne udvikle en memory management model som til enhver tid vil smadre C# i performance tests..

Skal du knuse tal er C++ også hurtigere. Dog skal du op i matematisk tunge applikationer før du ser et reelt spring i performance.

Microsoft anbefaler heller ikke at C# anvendes til tidskritiske applikationer.

En helt anden diskussion er at JIT er undskyld PISSE irriterende set fra kundens synspunkt.
Kunden opfatter ganske enkelt éns nye .NET software for langsom og klodset.
Så back to sqrt() med NGEN :-(
Gravatar #41 - Windcape
25. aug. 2009 20:06
mrF0x (40) skrev:
Nej C# er ikke hurtigere end C++.
Jo C# kan være hurtigere end C/C++, jeg mente det ikke for sjov. Og mange gange er de næsten lige hurtige! (Forskelle så små at det ikke er relevant)

Og nej, det er ikke om handlende garbage-collection!

Tag et kig ind på http://shootout.alioth.debian.org/

mrF0x (40) skrev:
Kunden opfatter ganske enkelt éns nye .NET software for langsom og klodset.
Jeg har ikke oplevet userland software i C# der var langsommere end C++

Hvis du havde sagt Java... så ja, Java er skrækkeligt.
Gravatar #42 - zin
26. aug. 2009 06:58
#41: Den side du linker til, taler i mod dit argument. Grafen er logaritmisk, med centrum ved 1. C# kommer i alle tider over dette og op i 1 - 10 (som dog er meget fint). C++ ligger ofte under en og kun senere op i lidt over 1, hvor C# i samme område ligger i 3 - 10 området.

Den eneste situation hvor du vil have auto-genereret kode til at være "bedre" end selvskrevent kode er følgende:
1) Hvis den autogenererede kode er helt vildt god (Usandsynligt, da sådanne algoritmer altid vil til passe en generel situation hellere end en specifik).
2) Hvis den selvskrevne kode er noget bras (mere sandsynligt).
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login