Gå til innhold

Skal begynne med C++


Anbefalte innlegg

Morn morn..

 

Jeg har tenkt til å begynne med C++, jeg er helt ny så derfor har jeg noen spørsmål før jeg begynner:

 

- Hvilket program trenger jeg til å komplimere og bygge opp i?

 

- Må jeg ha kunnskaper fra C, eller andre programmeringspråk?

 

- Er det innmari vanskelig?

 

Håper noen har svar på spørsmålene mine :)

Lenke til kommentar
Videoannonse
Annonse

Mårnings! :]

 

- Hvilket program trenger jeg til å komplimere og bygge opp i?

Google: "bloodshed", eller http://irc.cpp.no/ ("C++ kompiler under Windows" på bunn der.)

 

- Må jeg ha kunnskaper fra C, eller andre programmeringspråk?

Nei. Noen tror det er lurt å starte med C før C++, men det greieste er å starte med C++ med en gang.

 

- Er det innmari vanskelig?

Jeg vet ikke.

Endret av søppel
Lenke til kommentar
  • 2 uker senere...

Jeg tenkte jeg kunne legge til: C++ er ikke et særlig bra språk å starte med, ettersom det er et spesialspråk - beregnet for systembygging. OSer, hastighetskritisk programmering o.l.

 

En mye bedre ide er å starte med Lisp eller (kanskje bedre) Scheme. Noen ressurser, bare for å ha hevet de ut:

 

Bøker:

Practical Common Lisp

SICP

 

Lisp-miljø:

Allegro CL, som har en nedlastbar prøveutgave.

Lisp in a Box, en fri variant som er både dårligere og bedre. (I Windows. I Linux er den nesten like bra som den kommersielle utgaven av Allegro)

DrScheme, for Scheme, som jeg ikke har URL på.

 

Ressurser:

Cliki, in Lisp-Wiki.

Lenke til kommentar

C++ er et spesialspråk?

C++ er "general purpose"

Du kan lage alt med c++, bortsett fra noen få ting som krever low level asm og slikt, samtidig som det går raskt. jeg ser ingenting galt å begynne med c++. når du først kan det trenger du egentlig ikke å kunne noen andre programmeringsspråk og hvis du skulle trenge det er det lett å lære seg nye.

Lenke til kommentar

Tiong som bruker lavnivå-assembler kan skrives i C++ lett nok - bruk inline assembly. Det eneste som *ikke* kan er vel operativsystemer, og det bare hvis du ikke starter det med GRUB!

 

Jeg snakker ikke om hva C++ *kan* gjøre, jeg snaker om hva som er hensiktsmessig. Det er ikke særlig mye.

 

Det er ikke helt uten grunn at C++-programmer tenderer å bruke ti-femten ganger så mange kodelinjer som et tilsvarende Lisp-program.

Lenke til kommentar

Joda, C++ kan være nyttig der hastighet (eller kontroll, greit nok) er viktig. Det var en av tingene jeg nevnte.

 

Det du må huske på er at C++ tvinger dere til å ha full kontroll; Lisp, for eksempel, tillater deg å gjøre stort sett de samme tingene som C++, men du er ikke nødt.

 

For de fleste situasjoner er det viktigere å ha feilfrie, små programmer som er raske å skrive enn å ha et 15% raskere C++-program.

Lenke til kommentar

Selvfølgelig fins det språk hvor du bruker mindre kodelinjer enn c++, men det betyr ikke at c++ er et "spesialspråk" av den grunn. se f.eks på programmeringsjobber, det er ganske mange fler som søker c++-programmerere enn lisp-programmerere. Når c++ er et av de mest brukte programmeringsspråkene sier det seg selv at det ikke er et spesialspråk. Jeg skjønner egentlig ikke hva du mener med spesialspråk uansett. C++ var definitivt ikke beregnet OS'er som du sier. Jeg vet heller ikke hva du mener med systembygging.

Lenke til kommentar

De har ikke noe med hverandre å gjøre, så det er ikke rart at du ikke skjønner. ;)

 

C++ har mange kodelinjer: Det tar lengre tid å skrive C++-programmer, og de får proporsjonalt flere feil. Punktum.

C++ er et spesialspråk: Det er beregnet på å fungere som grensesnitt mot en bestemt type maskinvare, og lar deg ikke omgå begrensningene til denne. (Manuell minnebehandling, manuell bruk (eller oftere ikke-bruk) av bignums, osv.)

Systembygging: Skriving av infrastruktur, som OS, biblioteker som libc og Qt, osv. Ikke egentlig knyttet til C++, men poenget er at C++ er bedre egnet enn f.eks. Fortran. Dette er en styrke ved språket.

 

Det finnes flere jobber for C++-programmerere enn Lisp-programmerere: Sant.

Dette er delvis en historisk treghet fordi maskinene tidligere var for trege (og Lisp-kompilatorere for dumme) til å kunne kjøre Lisp i fornuftige hastigheter, men skyldes hovedsaklig to faktorer:

- Lisp blir oppfattet som en bedriftshemmelighet av de som bruker det. Det gir en stor konkurransefordel når det blir brukt rett, så de reklamerer ikke for det.

- Lisp er fiendtlig mot bedrifter. Lisp-programmerere er færre, og det er vanskeligere for en annen programmerer å sette seg inn i Lisp-kode hvis den første må byttes ut. Dette liker ikke bønnetellerne, og de har mye å si for markedet som helhet.

 

(Ikke for det; Lisp-kode er lettere å lese enn *tilsvarende* C++-kode, men den er sjelden tilsvarende; Lisp-programmene blir bare mye mer kompliserte enn noen ville forsøke med C++.)

 

Se Paul Graham's skriverier for bedre begrunnelser. ;)

Lenke til kommentar

Begge to er fine fra et estetisk/teoretisk synspunkt, men de er ikke praktiske for de fleste oppgaver.

 

Funksjonell programmering har sin plass, men de fleste interessante problemer vil bare bruke det på en (ganske liten?) del av programmet. Det er derfor viktig å bruke et språk som støtter så mange metodikker som mulig.

 

C++ er slitsomt å programmere funskjonelt, og har dårlig støtte for objektorientert programmering. Ocaml/Haskell har dårlig støtte for iterativ/objektorientert programmering. Lisp har god støtte for alle tre, og har i tillegg makroer, så det er lett å utvide hvis noen finner på noe nytt.

 

(Nei, #define er ikke makroer. Lisp-ekvivalenten til for er implementert som en makro (med goto); prøv det med #define.)

Lenke til kommentar

Har inntrykk av at språk som Lisp er gode og kanskje bedre enn C/C++ i teorien, men i praksis må man alikevell bruke C/C++ siden det ikke finnes støtte for å gjøre det man gjerne vil gjøre i Lisp - altså biblioteker.

Endret av søppel
Lenke til kommentar

A_N_K: Bare relativt sett. Ocaml har et *brukbart* objektsystem, men det kommer ikke opp mot Lisp sitt; det er vel mer på høyde med C++.

 

Søppel: Sant nok, men alle Lisp-implementasjoner jeg har sett har støtte for å kalle C/C++-biblioteker på en relativt grei måte, så det er bare et argument for *svært* små proghrammer.

Lenke til kommentar

Kan man eksplisitt destruere objekter i Lisp? Eller /må/ man bruke GC hele tiden?

 

Har vonde minner fra Java-tiden, som for meg riktignok var rundt 1996-1997, der programmer ble "ujevne" fordi GC'en slo inn med gjevne mellomromm.

 

Vaughn: Stemmer; jeg kom på dette med kalling av C/C++-biblioteker etter jeg hadde postet - altså at det var en mulighet. Har du et eksempel på hvordan det gjøres? En kodesnutt? Jeg er mest nysjerrig på dette med C++-biblioteker.

 

Edit:

Waldmeister:

Det går helt greit å begynne med C++ (I did), det er objekt-orientert og har i tillegg støtte for "generics" (templates). Du må riktignok ofre liiitt mer av deg selv for å lære det enn f.eks. Actionscript og Java/ECMAscript.

 

Lisp er ikke en erstating for C++ i mine øyne -- Lisp er noe helt annet. Hvis du er i tvil om valg tror jeg du bør tenke på hva du er ute etter å lage først, og så hvilket språk du velger.

Endret av søppel
Lenke til kommentar

søppel: Det er ikke noe alternativ til GC. Dette er ikke så ille som du tror; maskiner er raskere, og GC-algoritmene i de fleste Lisp-implementasjoner ligger langt foran Java, selv nå. I tillegg har mange kommersielle Lisp-varianter mulighet for å bruke "incremental" GC; dette koster 10-30% lavere hastighet, men pausene forsvinner.

 

 

Waldmeister: Vil du lære å programmere hva som helst, eller vil du lære å programmere en bestemt type programmer?

 

Hvis det er det første, vil du ungå en del uvaner (stort sett å ikke vite hva som er mulig/måter å tenke) ved å først lære Lisp eller Scheme. Hvis det er det andre, kommer det an på programmet; hvis C++ faktisk er best egnet, kan du bli litt raskere ferdig ved å lære det først.

 

Lisp er uansett verdt å lære, om ikke annet så for å få full oversikt over alle de forskjellige måtene å konstruere algoritmer. Du blir en bedre programmerer av det.

 

Et godt start-punkt er c2.com; denne siden har mange fine startpunkter for å lære Lisp, og hele wikien (den opprinnelige wikien, faktisk) er full av... visdom. Det finnes ikke noe annet ord.

 

Det må nevnes at C++ sine "templates" bare er en svak, forvridd skygge av Lisp's makroer.

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...