Lycantrophe Skrevet 16. november 2012 Del Skrevet 16. november 2012 (endret) Det kan man fint gjøre i C++ og. De verbose, noe krøkkete bitene jeg sikter til kommer forøvrig ikke fra C, de har C++ introdusert helt på egen hånd. Endret 16. november 2012 av Lycantrophe Lenke til kommentar
HDSoftware Skrevet 16. november 2012 Del Skrevet 16. november 2012 Ja, mente å ta med C++ i henvisningen. For meg er ikke C++ noe annet enn Objektorientert C Lenke til kommentar
Lycantrophe Skrevet 16. november 2012 Del Skrevet 16. november 2012 Det har blitt en hel del mer enn det, men den kan vi alltids la ligge. Lenke til kommentar
HDSoftware Skrevet 16. november 2012 Del Skrevet 16. november 2012 Det har blitt en hel del mer enn det, men den kan vi alltids la ligge. Enig.. De som er interessert kan heller lese dette: http://unthought.net/c++/c_vs_c++.html Lenke til kommentar
HDSoftware Skrevet 16. november 2012 Del Skrevet 16. november 2012 Artig, kikket litt på den artikkelen jeg refererte til og ser jo at Generic types i C# egentlig er det samme som templates i C++. Anyway, på tide at tråden faller tilbake til sitt opprinnelige tema. På tide at trådstarter begynner å spørre og grave så vi andre kan svare ;-) Lenke til kommentar
GeirGrusom Skrevet 16. november 2012 Del Skrevet 16. november 2012 (endret) Artig, kikket litt på den artikkelen jeg refererte til og ser jo at Generic types i C# egentlig er det samme som templates i C++. Anyway, på tide at tråden faller tilbake til sitt opprinnelige tema. På tide at trådstarter begynner å spørre og grave så vi andre kan svare ;-) Generics og templates er ikke heeeelt det samme Templates tillater veldig mye mer. Generics kan ikke ha annet enn typeargumenter, samt at alle typeargumenter som er satt må være statisk garantert til å la seg kompilere. Dette er lovlig i C++: template<typename T> T Add(const T lhs, const T rhs) { return lhs + rhs; } Dette er ulovlig C#: T Add<T>(T lhs, T rhs) { return lhs + rhs; } Som sagt er det heller ikke tillat med annet enn typeargumenter. Dette er gyldig C++: template<typename T, int Dim> struct vector { private: T values[Dim]; }; C# har ikke noe lignende. Endret 16. november 2012 av GeirGrusom Lenke til kommentar
HDSoftware Skrevet 16. november 2012 Del Skrevet 16. november 2012 Hvorfor er dette mere lovlig i C++ en i C# ? Så vidt jeg kan se så er lovligheten i C# kun begrenset fordi C# ikke vet om + er en operator til T. Løses i såfall ved å legge til et WHERE og en klasse som inneholder operatoren og som angir at T må være nedarvet fra klassen. Er det sånn at C++ bare lar dette gå igjennom fordi kompilatoren overlater til utvikler å ha kontroll på om dette er lov eller ikke ? I så fall bare forsterker det min antydning tidligere om at "Alt er lov i C og ingenting passer på" Lenke til kommentar
Lycantrophe Skrevet 16. november 2012 Del Skrevet 16. november 2012 (endret) Fordi C++-templates bare klipper inn typene du gir den og sjekker etterpå om den klarer å kompilere det, tenker jeg. Når man bruker templates lager kompilatoren like mange utgaver av samme funksjon som du gir den forskjellige typer. Med andre ord blir det generert like mye kode som om man skulle gjort det selv, man bare slipper. På godt og vondt. For ordens skyld: hvordan C# løser det har jeg ingen peiling på. Endret 16. november 2012 av Lycantrophe Lenke til kommentar
GeirGrusom Skrevet 16. november 2012 Del Skrevet 16. november 2012 Hvorfor er dette mere lovlig i C++ en i C# ? Så vidt jeg kan se så er lovligheten i C# kun begrenset fordi C# ikke vet om + er en operator til T. Løses i såfall ved å legge til et WHERE og en klasse som inneholder operatoren og som angir at T må være nedarvet fra klassen. Er det sånn at C++ bare lar dette gå igjennom fordi kompilatoren overlater til utvikler å ha kontroll på om dette er lov eller ikke ? I så fall bare forsterker det min antydning tidligere om at "Alt er lov i C og ingenting passer på" Det er ikke praktisk å få dette til i C#. Det er ingen value-types du kan arve fra (annet enn indirekte fra System.ValueType) så dersom du får det til, så blir det med en reference type, noe som ikke er praktisk da det skaper en ganske kraftig 0-generasjons jobb for GC. I C# er implementasjonen ganske annerledes. Genercis lager ikke masse instanser (som Lycantriphe nevner at C++ gjør) men det blir kun gjort det av Just-In-Time kompilatoren. Derfor er det viktig at dette stemmer før en engang kommer såpass langt. Det er fullt mulig å skrive en slik generic add funksjon i CIL (har gjort det for å teste dette selv) men den kan slutte å funke ganske fort dersom man dytter inn feil datatyper som argumenter. Det er ingen typer, eller interfaces man kan constraine til som inneholder operatøren +. Jeg har lest at noen har fått dette til, men det er langt ifra trivielt. C# vil da hindre at dette skjer rett og slett ved å ikke tillate å skrive kode som muligens kan gå i stykker. Lenke til kommentar
HDSoftware Skrevet 16. november 2012 Del Skrevet 16. november 2012 ahh, så klart. Man kan vel ikke operator overloade mot en ref.type. Ser den.. Lenke til kommentar
Lycantrophe Skrevet 16. november 2012 Del Skrevet 16. november 2012 Man kan gjøre det i C++. :--) Lenke til kommentar
HDSoftware Skrevet 16. november 2012 Del Skrevet 16. november 2012 Man kan gjøre det i C++. :--) Ja, og det var vel det som var påstanden til GG også Lenke til kommentar
Ruarcs Skrevet 16. november 2012 Forfatter Del Skrevet 16. november 2012 (endret) Artig, kikket litt på den artikkelen jeg refererte til og ser jo at Generic types i C# egentlig er det samme som templates i C++. Anyway, på tide at tråden faller tilbake til sitt opprinnelige tema. På tide at trådstarter begynner å spørre og grave så vi andre kan svare ;-) Hehe. Jeg har enda ganske mye å lese, selvsagt kunne jeg spørt om alt jeg lurte på men jeg regner med at mye blir "oppklart" når jeg har lest igjennom diverse introduksjons materiale til div. programering språk. Det er desuten ganske interesant det som blir diskutert "off topic" :-) Anyway, bruk forumet her, spør og grav. De fleste er hyggelige typer med trang til å fortelle deg hemmelighetene deres ;-) Lykke til... Jeg har også lagt merke til at folk jeg har kranglet med tideligere, som jeg regner med kjenner igjen mitt nick, er meget hjelpsomme, det hadde jeg nesten ikke regnet med,hehe. Men det blir nok c# eller visual basic av alle ting. Jeg hadde nok litt høye tanker om meg selv da jeg ville begynne på det mest avanserte med en gang. Dette funker nemmelig veldig godt vist man skal lære seg et innstrument, man tjener masse tid vist man har perspektiv på par - 3 år, men jeg burde jo ha skjønt at det å lære et instrument vs å programere blir som å lære å stå stille på 2 bein vs løpe 100m på under 10 sek for å sette det på spissen,hehe Jeg tror jeg har lesestoff for den neste uken så jeg kommer nok til å være ganske stille en liten stund. Men gå gjerne vekk i fra topic også, bare det dreier seg om programering generelt, myntet på en nybegynner :-) Endret 16. november 2012 av Ruarcs Lenke til kommentar
Lycantrophe Skrevet 16. november 2012 Del Skrevet 16. november 2012 Jeg anbefaler ingen å starte med C# - det kan sikkert være et trivelig språk, men det er Microsoftspesifikt. :--D Lenke til kommentar
Ruarcs Skrevet 16. november 2012 Forfatter Del Skrevet 16. november 2012 Jaha? Jeg leker nemmelig med tanken på å gå over på linux, men fikk noen råd om at det å begynne med nytt operativsystem sammtidig med programering var dumt. Når det skal være sagt så kan jeg jo ingenting med windows selv om mine kamerater kaller meg datakynding, er lite som skal til for det,hehe. Stemmer dette at man bør kunne op man skal programere "i"? ( da burde jeg vel lære meg windows også da,hehe) Hva slags språk annbefaler dere vist man vil lage programmer som virker på både linux og windows? Men jeg har nå lest "mye" om div. språk og de er vist mere like en hva jeg trodde, så nå heller jeg mot å velge noe av det lettere først, mestre dette til en hvis grad, for så å bytte språk og heller "undo" noe av hva jeg har lært for å lære noe nytt. Lenke til kommentar
Lycantrophe Skrevet 16. november 2012 Del Skrevet 16. november 2012 (endret) Det er fjas at det er dumt. Om man skal skrive for ting som virker (les: har god støtte. C# virker sikkert, men Mono ER ikke god støtte) har man fortsatt en mengde språk. En kjapp liste: C C++ Java Perl Python Javascript (olol) Common Lisp Clojure, Scala (språk som kjører på JVMen, altså kan de settes sammen med Java) Lua Erlang D PHP (olol) Haskell Ruby Fra toppen av hodet mitt. Mine inntrykk av Windowsvariantene av en del av disse (begrenser seg i hovedsak til Perl + Python) er ganske røtne, men det kan jo være fordi jeg kommer fra *nix. Endret 16. november 2012 av Lycantrophe 2 Lenke til kommentar
GeirGrusom Skrevet 16. november 2012 Del Skrevet 16. november 2012 Om man skal skrive for ting som virker (les: har god støtte. C# virker sikkert, men Mono ER ikke god støtte) har man fortsatt en mengde språk. Mono fungerer da utmerket godt? 1 Lenke til kommentar
Lycantrophe Skrevet 16. november 2012 Del Skrevet 16. november 2012 Både og. Det tekniske til siden er det absolutt en, tjah, ulempe. Lisensmessig er en ting. En annen er catch-up game til .NET-stacken. Videre kan Microsoft plutselig ombestemme seg, og da sitter man med skjegget i postkassen. Lenke til kommentar
GeirGrusom Skrevet 16. november 2012 Del Skrevet 16. november 2012 Både og. Det tekniske til siden er det absolutt en, tjah, ulempe. Lisensmessig er en ting. En annen er catch-up game til .NET-stacken. Videre kan Microsoft plutselig ombestemme seg, og da sitter man med skjegget i postkassen. Det er jo sant. Microsoft har jo hatt den Embrace, Extend, Extinguish opplegget på gang, som sikkert er grunnen til at kun C# 2.0 faktisk er blitt standardisert. Men jeg synes ikke det er en god grunn til å ikke bruke C# som et nybegynnerspråk. Det er relativt enkelt å lære, men omfattende nok til at man lærer noe nytt om det hele tiden. Det har flere forskjellige paradigmer implementert, og har flotte utviklingsverktøy tilgjengelig. Det er verdt å merke seg at C# er veldig utbredt i Norge. Jeg jobber som IT-konsulent i Oslo området, og med .NET kompetanse er det lett å selge seg inn. Lenke til kommentar
se# Skrevet 16. november 2012 Del Skrevet 16. november 2012 Skulle jeg valgt språk for både Windows og Linux/Unix og ikke kunne C# fra før ville jeg heller gått for Java, det gjør verden litt enklere. Særlg for en nybegynner. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå