mboost-dp1

Jeg hader C


Gå til bund
Gravatar #1 - dktekno
22. mar. 2007 21:45
Ja, nu lægger jeg op til kamp mellem programmeringssprogene!

Nu har jeg programmeret i PHP i ca. 2-3 måneder og jeg vil altså sige, at jeg ikke bryder mig særligt meget om sproget. Naturligvis vil jeg vælge sproget når skal lave noget webbaseret. Men jeg bryder mig ikke om det, fordi det er lavet så... C-agtigt. Og jeg kan ikke lide C.

Hvorfor har de valgt at lave det så C-agtigt? Og så alligevel ikke helt C-agtigt? PHP er en underlig størrelse. Men anyways, meget af PHP's komplekse opbygning stammer jo fra C. Og C er et GRIMT sprog. Det er afskyeligt.

Hvorfor vælger programmører altid C fremfor Pascal?

Pascal er dejligt struktureret. Og det bruger ORD istedet for tegn. Sigende ord, der gør kildekoden langt mere læsbar.

Alt i Pascal er struktureret. Deklaration af variabler og konstanter er struktureret.

Når jeg kigger på en C-kildekode så bliver jeg forvirret af alle de mange tegn der står skrevet. Jeg skal bruge tid og energi på lige at tænke dem igennem. Også selvom det er nogle jeg har kendt til i mange år. F.eks. er det jo velkendt, at ! står for IKKE, altså if (!blablabla) betyder "hvis IKKE blablabla". Men du kan altså ikke komme uden om, at det ville spare programmøren for en masse mental energi, hvis det var et reelt ord som NOT eller AND eller OR.

Dertil kommer så den meget trælse ting ved C, og det er at compileren er så fandens langsom. Det tager faktisk tid at kompilere selv et simpelt Hello World program. I Pascal lægges resourcerne mere over på runtime, så koden afvikles efterhånden som der bliver brug for den, hvilket gør, at det er langt hurtigere at teste - og dermed sparer programmøren for en masse tid og energi.

2 sekunders ventetid betyder faktisk meget, især for mig.
Hvis jeg har brug for, at teste om noget virker, så skal det være med det samme, og ikke om 2 sekunder. For på de 2 sekunder kan jeg glemme det, jeg lige har lavet, og så skal jeg til at sætte mig ind i koden igen.

Det er frustrerende.

Jeg fatter bare ikke, at C overhovedet blev opfundet.

Det er afskyeligt, det er ækelt, og værst af alt: Man kan ikke slippe for det, for div. programmører bruger det, og jeg kan ikke slippe for det lort, fordi det har inficeret alt.

Det ville være bedre, hvis nye programmeringssprog havde haft størrer indflydelse fra Pascal end fra C, for så ville kildekoden være mere læsbar og struktureret, istedet for, som det er nu, fyldt med tegn, istedet for ord.


Men den egentlige årsag til, at jeg hader C og elsker Pascal, skal nok ses i forhold til hvordan matematiske ligninger stilles op.

Generelt har jeg det ikke særlig godt med ligninger. Her snakker vi ikke almindelige +, -, * og /. Men altså nogle, der er lidt mere komplekse.

Hvis en sådan ligning, der involverede f.eks. matricer, eller vektorer blev stillet op på et stykke papir eller en tavle for mig, ville jeg ikke kunne finde ud af den. Men skrives den i Pascal er alle dele til at overskue. Alt er skåret ud i pap. Og jeg ELSKER bare når alting bliver skåret ud i pap, som man jo siger det.

Så bliver det overskueligt. Så kan jeg se, hvad det er der sker, og jeg kan følge med i hvert eneste skridt. Skridt for skridt for skridt.

Og det er netop denne struktur C gør op med. C-kode ligner mere en ligning som den skrives på papir eller en tavle, end den ligner noget, der er skåret ud i små kasser placeret i en bestemt rækkefølge. C er alt for tæt forbundet med de matematiske udtryksformer, og dette gør, at det bliver fuldstændigt umuligt for mig, at følge med i en C-kode.

Hvis det stod til mig burde alt i verden skrives efter Pascal-strukturen. Alle sprog burde have "pascal-agtig" grammatik. Især matematik. Det ville fylde mere på tavlen, men så ville flere også kunne være med.

Er jeg den eneste der har det sådan?

De eneste gange hvor jeg synes, at C er rart at have med at gøre, er når jeg endten koder noget OpenGL eller hvis jeg skal skrive noget kildekode til en mod til et spil, f.eks. i sproget Quake C.

Her ville Pascal være alt for tungt at slæbe rundt på, og så vil man miste overblikket. Jeg kan slet ikke forestille mig, at skulle kode basale funktioner i et script til en COD2 mod i Pascal. Det vil være alt for tungt at rodde med.

Eller hvis jeg skal lave noget i OpenGL. Her er C også mere belejligt at have med at gøre.
Gravatar #2 - bugger
22. mar. 2007 21:48
Ja
Gravatar #3 - Fjolle
22. mar. 2007 21:50
Det lyder som om at du er talblind og har brug for en hurtigere computer :)
Gravatar #4 - dktekno
22. mar. 2007 21:51
#3 - er 2.4 Ghz ikke nok?
Det burde da kunne afvikle et Hello World program. Men alligevel tager min C-kompiler 2 sekunder om at kompilere et Hello World program.
Gravatar #5 - Fjolle
22. mar. 2007 21:53
Åbenbart ikke hvis det tager længere tid at compile et hello world program end det tager at skrive kommandoen...
Gravatar #6 - trylleklovn
22. mar. 2007 21:53
Hvad er der nu galt med matematik. Det er da oftest langt bedre syntax end almindelige sprog?
Gravatar #7 - arne_v
22. mar. 2007 22:59
#1

Jeg synes ikke at 2 sekunder er langt tid om at builde et
program.

Jeg er f.eks. ret sikker på at du ikke kan starte din browser
hurtigere.

Hvis builde tid betyder meget, så er der nok visse ting man kan
tune lidt.

Men 2 sekunder er altså ikke meget.


Hvis nu du var et par timer om at builde, så kunne jeg forstå at du
var utilfreds.
Gravatar #8 - arne_v
22. mar. 2007 23:04
#1

Med hensyn til syntax, så er C syntax altså blevet meget populært
(C, C++, Java, C#, JavaScript, PHP).

Mens Algol syntax er trådt lidt i baggrunden (Algol, Pascal,
Modula-2, Ada, VB).

Grunden er formentligt at C/C++ har været det mest native sprog
på Unix og Windows platformene og dermed blev C/C++ dominerende
i løbet af 90'erne da de to platforme "overtog verden". Nyere
sprog vælger så typisk at følge den grundliggende syntax.
Gravatar #9 - arne_v
22. mar. 2007 23:05
#1

Hvis du gerne vil lave dine web apps i Pascal, så brug ASP.NET med
Delphi.NET som sprog !
Gravatar #10 - amokk
22. mar. 2007 23:17
"Ja, nu lægger jeg op til kamp mellem programmeringssprogene!"

Eller demonstrerer din manglende erfaring

"Nu har jeg programmeret i PHP i ca. 2-3 måneder og jeg vil altså sige, at jeg ikke bryder mig særligt meget om sproget. Naturligvis vil jeg vælge sproget når skal lave noget webbaseret. Men jeg bryder mig ikke om det, fordi det er lavet så... C-agtigt. Og jeg kan ikke lide C."

den "c-agtige" syntaks går igennem på stort set alle seriøse programmeringssprog, såsom C, C++, PHP, Perl, C#, Java, JavaScript osv.

"Hvorfor har de valgt at lave det så C-agtigt? Og så alligevel ikke helt C-agtigt? PHP er en underlig størrelse. Men anyways, meget af PHP's komplekse opbygning stammer jo fra C."

PHPs syntaks er baseret på Perl og C++, samt lidt fra java


"Og C er et GRIMT sprog. Det er afskyeligt."

Det er funktionelt og stilrent

"Hvorfor vælger programmører altid C fremfor Pascal?"

Fordi C ligger tættere på de underliggende lag måske? Al kerne-kode, drivere mv. er lavet i C...

"Pascal er dejligt struktureret. Og det bruger ORD istedet for tegn. Sigende ord, der gør kildekoden langt mere læsbar."

Hvis man ikke kan huske betydningen af 10-20 specialtegn, men skal have det skåret ud i pap, tvivler jeg på man får ret meget ud at at læse source koden alligevel - de fleste programmører kan nok godt nævne funktionen af ; { } = ? | & osv. i søvne.

"Alt i Pascal er struktureret. Deklaration af variabler og konstanter er struktureret."

Hvorfor er de ikke det i C?

Når du nu er inde på at du ikke kan lide alle de "grimme tegn", så forklar mig hvordan deklarationen

"a: integer;"

er mere overskuelig end

"int a;"

? i dette tilfælde har dit elskede pascal da et overflødigt tegn for meget.
"Når jeg kigger på en C-kildekode så bliver jeg forvirret af alle de mange tegn der står skrevet. Jeg skal bruge tid og energi på lige at tænke dem igennem. Også selvom det er nogle jeg har kendt til i mange år."

Øv dig :)

"F.eks. er det jo velkendt, at ! står for IKKE, altså if (!blablabla) betyder "hvis IKKE blablabla". Men du kan altså ikke komme uden om, at det ville spare programmøren for en masse mental energi, hvis det var et reelt ord som NOT eller AND eller OR."

Og dermed vil du mene at vi skal droppe + - = osv og kalde dem PLUS, MINUS etc?

"Dertil kommer så den meget trælse ting ved C, og det er at compileren er så fandens langsom. Det tager faktisk tid at kompilere selv et simpelt Hello World program. I Pascal lægges resourcerne mere over på runtime, så koden afvikles efterhånden som der bliver brug for den, hvilket gør, at det er langt hurtigere at teste - og dermed sparer programmøren for en masse tid og energi."

Hurra hurra, det tager nogle sek. mindre at teste sin kode i pascal ift. C - men hvad hvis din kode skal køres som en realtime driver, som looper tusinder af gange pr sekund?

"2 sekunders ventetid betyder faktisk meget, især for mig.
Hvis jeg har brug for, at teste om noget virker, så skal det være med det samme, og ikke om 2 sekunder. For på de 2 sekunder kan jeg glemme det, jeg lige har lavet, og så skal jeg til at sætte mig ind i koden igen.

Det er frustrerende."

Ryg noget mindre hash, det skader kortidshukommelsen.


"Jeg fatter bare ikke, at C overhovedet blev opfundet.

Det er afskyeligt, det er ækelt, og værst af alt: Man kan ikke slippe for det, for div. programmører bruger det, og jeg kan ikke slippe for det lort, fordi det har inficeret alt."

Det er det som hedder en standard - ANSI C er en reel standard. Det er ikke ét som har mast det igennem på markedet, så mon ikke der er en grund til at alle har taget det til sig?

"Det ville være bedre, hvis nye programmeringssprog havde haft størrer indflydelse fra Pascal end fra C, for så ville kildekoden være mere læsbar og struktureret, istedet for, som det er nu, fyldt med tegn, istedet for ord."

Det smarte ved at have både tegn og ord, er at det gør et meget lettere at se forskel på operatorer og variabel/funktionsnavne


"Men den egentlige årsag til, at jeg hader C og elsker Pascal, skal nok ses i forhold til hvordan matematiske ligninger stilles op.

Generelt har jeg det ikke særlig godt med ligninger. Her snakker vi ikke almindelige +, -, * og /. Men altså nogle, der er lidt mere komplekse.

Hvis en sådan ligning, der involverede f.eks. matricer, eller vektorer blev stillet op på et stykke papir eller en tavle for mig, ville jeg ikke kunne finde ud af den. Men skrives den i Pascal er alle dele til at overskue. Alt er skåret ud i pap. Og jeg ELSKER bare når alting bliver skåret ud i pap, som man jo siger det.

Så bliver det overskueligt. Så kan jeg se, hvad det er der sker, og jeg kan følge med i hvert eneste skridt. Skridt for skridt for skridt."

Eksempel?
Gravatar #11 - arne_v
22. mar. 2007 23:52
#10

den "c-agtige" syntaks går igennem på stort set alle seriøse programmeringssprog, såsom C, C++, PHP, Perl, C#, Java, JavaScript osv.


Jeg kan ikke lige se hvorfor den liste nødvendigvis er mere "seriøs"
end Cobol, Fortran, Pascal, Modula-2, Ada, VB.

Fordi C ligger tættere på de underliggende lag måske? Al kerne-kode, drivere mv. er lavet i C...


På de mest gængse styre systemer idag (Unix familen og diverse
Windows etc.).

Men der er faktisk lavet styre systemer i andre sprog.

Men C/C++ er blevet populær sammen med Unix og Windows.

Det er det som hedder en standard - ANSI C er en reel standard. Det er ikke ét som har mast det igennem på markedet, så mon ikke der er en grund til at alle har taget det til sig?


Pascal er også en standard. Det er nok ikke det som gør forskellen.
Gravatar #12 - Spiderboy
23. mar. 2007 07:49
#1
Jeg forstår godt hvad du mener og er enig i noget af det. Pascal og C er meget forskellige sprog og har meget forskellige fordele og ulemper.

Jeg vil give dig ret i, at læsbarheden af C er ved Gud ikke noget at råbe hurra for, og at det er utroligt nemt at lave en bug, da der ikke er nogen form for safe checking nogen steder.

Men omvendt så er C et temmelig "low-level high-level sprog", som giver meget optimerede programmer, samt at syntaksen faktisk er utrolig fleksibel. Eksempel:

x = 2 * (y = (z!=0) ? 1 : 0);

er meget kompakt at skrive. I Pascal skulle du lave noget i retning af:

if z <> 0 then y := 1 else y := 0;
x := 2*y;

Ja, mindre læsbar, men mere kompakt. Der er fordele og ulemper ved begge sprog.



PS: Jeg foretrækker også Pascal/Delphi og bryder mig heller ikke synderligt meget om C, så #2's svar er ukorrekt.
Gravatar #13 - NFX
23. mar. 2007 08:20
#1:
Udover hvad de andre har tilføjet, vil jeg lige sige at det for mig tager cirka 0,1 sekund at compile et hello word-program i C, med gcc, på Windows.
Derudover siger du at de ekstra 2 sekunder det tager for dig at compile er alt for lang tid for dig at vente, men samtidig vil du hellere skrive NOT end !, du vil hellere skrive integer frem for int, osv? Det løber også hurtigt op i 2 sekunder ekstra tid.
Gravatar #14 - buch
23. mar. 2007 08:35
hvis du hader c, så hader jeg de resterende 27 bogstaver ;)
Gravatar #15 - BurningShadow
23. mar. 2007 08:43
#14

Hvilket bogstav er det så du ikke hader?

29 = ABCDE FGHIJ KLMNO PQRST UVWXY ZÆØÅ
eller
26 = ABCDE FGHIJ KLMNO PQRST UVWXY Z
Gravatar #16 - NFX
23. mar. 2007 16:18
#15:
Ø og L, formodentligt. Han er nok bare ikke så god til at tælle.
Gravatar #17 - dktekno
23. mar. 2007 20:23
#12 -

x = 2 * (y = (z!=0) ? 1 : 0);

er meget kompakt at skrive. I Pascal skulle du lave noget i retning af:

if z <> 0 then y := 1 else y := 0;
x := 2*y;


Lige netop. Jeg vil langt hellere foretrække det nederste eksempel. Jeg anede ikke et hak om hvad du snakkede om, før jeg læste det nederste. Det var noget jeg kunne forstå. Det er læsbart.

Netop fordi Pascal er så dejligt læsbart, og TVINGER programmørerne til at skrive læsbare koder, så sparer det programmørerne utroligt meget tid og energi, som de kan bruge på at programmere istedet for at skulle omfortolke og sætte sig ind i tingene i flere timer pga. enkelte linjers kode.

Jeg ville ønske alle matematiklærere og professorer gik væk fra den matematiske skrivemåde, og istedet skrev deres ligninger i Pascal-kode. Så kunne jeg forstå selv de mest komplekse regnestykker.
Gravatar #18 - plazm
23. mar. 2007 21:58
#17
Tja, der er man jo så forskellig.

Jeg fattede ikke en skid af det nederste, hvis det ikke var fordi jeg vidste det fra tidligere eksempel.
Gravatar #19 - dktekno
23. mar. 2007 22:15

Jeg fattede ikke en skid af det nederste, hvis det ikke var fordi jeg vidste det fra tidligere eksempel.


Det kan ikke passe. Så gør du sagen mere kompliceret, end det i virkeligheden er. Sætningen er faktisk ren og skær almindelig engelsk, blot med forkortelser:

if z <> 0 then y := 1 else y := 0;
x := 2*y;

HVIS z er forskellig fra 0 SÅ er y = 1 ELLERS er y = 0
x = 2*y

Det kan da ikke være så svært. Modsat den første sætning, der jo er ekstremt kompliceret.

x = 2 * (y = (z!=0) ? 1 : 0);

Kan jo knapt nok læses på engelsk. Hvordan vil du læse en betinget operator på engelsk? Der er jo intet foreståeligt for mennesker i denne her.

Et programmeringssprog bør bedømmes på, hvor tæt det er på det menneskelige skriftssprog og den naturlige logik.
Gravatar #20 - dktekno
23. mar. 2007 22:29
High level sprog blev opfundet for at få maskinsproget tættere på det menneskelige sprog. Så jeg fatter bare ikke idéen i, at lave et programmeringssprog, der yderligere komplicerer tingene, ved ikke blot at trække det væk fra maskinsproget, men også at trække det væk fra det almindelige skriftssprog. Hvad er hele idéen i det?

Pascal er det mest dansk eller engelsk-nære sprog der findes, samtidig med, at det tvinger programmøren til at skære alting ud i pap, hvilket forøger læsbarheden ekstremt for andre, der skal læse i kildekoden.

Basic var/er et forsøg på at gøre det menneskeligt, men den mistede desværre logikken (læs: Basic-programmering er som at bygge med legoklodser, uden at kende hver enkelte klods' navn eller nummer). Pascal kombinerer med success logik og menneskesprog.
Gravatar #21 - arne_v
23. mar. 2007 22:34
#20

Pas på hvad du ønsker dig.

ADD X TO Y GIVING Z
DISPLAY Z
Gravatar #22 - plazm
24. mar. 2007 00:42
#20
Tja, jeg læste det som
hvis z er mindre end eller større end 0 så er y lig 1 ellers er y lig 0;

Hvorfor ikke bare
Hvis z ikke er lig med 0 så..... (if (z != 0))

Desuden så syns jeg ikke at
if statement then
er mere overskueligt end
if (statement) {

}
Gravatar #23 - sKIDROw
24. mar. 2007 10:06
Hvis du er 2 sekunder om at compile et helloworld, burde du udskifte din compiler.

Når jeg forsøger det er det færdigt, i samme øjeblik jeg trykker enter GCC 4.1.1 på en AthlonXP 33200+ 2.2Ghz.

kjakobsen@PC_01 ~ $ time gcc -o helloworld helloworld.c

real 0m0.984s
user 0m0.077s
sys 0m0.034s
Gravatar #24 - übermench
24. mar. 2007 11:59
Jeg hader også C.

Jeg var sku nød til at have meget hjælp med bare at skrive "Hello world"
Gravatar #25 - amokk
24. mar. 2007 12:15
#24 du kan altså udtale dig så kompetent om C, at du ligefrem kan sige at du hader det, uden at være i stand til at skrive et Hello world program i sproget?

prøv at høre dig selv...
Gravatar #26 - bugger
24. mar. 2007 14:20
Et programmeringssprog bør bedømmes på, hvor tæt det er på det menneskelige skriftssprog og den naturlige logik.
Naturlig logik ER matematik.

Det tager dig 2 sekunder at compile (hvilket ikke er sprogets skyld), men du vil gerne spilde tid på at skrive AND OR osv. i stedet for at bruge tegn?

Programmeringssprog bruges fordi det er hurtigere at skrive OG lettere forståeligt end maskinkode.

Skal vi så ikke bare sige at Pascal er nemmere at forstå uden at kende syntaksen og at C er hurtigere at bruge.
Gravatar #27 - Spiderboy
25. mar. 2007 18:38
#17
Tja, smag og behag er forskellig. Nogle kan bedre lide at skrive kompakt end at skulle skrive en hel masse.

Netop fordi Pascal er så dejligt læsbart, og TVINGER programmørerne til at skrive læsbare koder,

Nope, det er bestemt ikke en selvfølge, heller ikke i Pascal.

Jeg ville ønske alle matematiklærere og professorer gik væk fra den matematiske skrivemåde, og istedet skrev deres ligninger i Pascal-kode

Jeg synes til gengæld at den matematike notation er genial (med få undtagelser). Men i matematik kan man sagtens bruge en anden notation, hvis du sørger for at definere hvad tingene betyder.

#20
High-level sprog er skabt for at kunne formulere programmer på en mere sofistikeret måde vha. en eller flere programmeringsparadigmer. Et high-level sprog letter programmeringsarbejdet ved at indføre abstrakte begreber som f.eks. klasser.

Selv om jeg foretrækker Pascal, synes jeg der er nogle fede features i C, som Pascal ikke har, f.eks. at en assigment operator returnerer værdien, som jeg også brugte i #12.

Når det så er sagt, så er C forholdsvis low-level af et high-level sprog at være (som jeg krytpisk skrev i #12), så jeg synes godt man kunne argumentere for at kalde det et mid-level sprog.
Gravatar #28 - hundeboll
25. mar. 2007 21:51
Kan man ikke bare lave #DEFINE i c?

Fx:
#DEFINE AND &&;
#DEFINE NOT !;

(Mit c er ikke så veludviklet, men I forstår vel budskabet.. :)
Gravatar #29 - Spiderboy
26. mar. 2007 11:14
#28
Jeg er heller ikke C-ekspert, men jeg tror godt man kan gøre, som du har eksemplificeret.
Gravatar #30 - arne_v
26. mar. 2007 11:29
#define AND &&
#define NOT !

men det er sjældent en god ide at programmere i X i Y.
Gravatar #31 - Saxov
26. mar. 2007 12:32
#30, husk så også lige

#define TRUE 0
#define FALSE !0

og så håb på du ikke selv skal veligeholde koden.. ;)
Gravatar #32 - SmackedFly
26. mar. 2007 15:31
#29

Eller du kan bare overloade dine operatorer på linje... Og så iøvrigt håbe på jeg ikke er i nærheden med en rifel, for så fik du godt nok en gang havl.

Jeg har svært ved helt at forstå det, jeg synes C på mange måder er et enormt let læseligt sprog. Der er dog en ting der frustrerer mig omkring C, det er når folk bruger K&R notationen ala:

function() {

}

...istedetfor...

function()
{

}

Det er SÅ træls at læse kode, hvor paranteserne ikke står ret over hinanden, men sproget selv har jeg det fint med.

#1

Hvis du er så utilfreds, så skriv dig dog en pre-compiler and be done with it...
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