Skrivet av orp:
Jag delar inte din syn på C. Jag skulle inte säga att C "fokuserar" på, som i att vara designat för, prestanda och resursoptimering. C ger dig kontroll över minneshantering och var trevligare att arbeta med än assembly eller fortran och som en följd av att det är ett primitivt språk är snabbt. Sedan är det upp till hur utvecklaren hanterar minne och arkitektur som kommer avgöra om det upplevs som resurseffektivt i slutändan.
Jag såg en dokumentär om just C och lite om övriga språk. Men fokus var mycket om C.
Allt började med 1 och 0, bokstavligen. Detta kallas för maskinernas kod och en 1:a kunde antingen bestå av ett hål i ett kort, eller 12V hög spänning, där 0:an motsvarar 0 volt spänning.
Men eftersom så blev det allt mer krav på att en maskin måste göra mer. Programmen blev större och tillslut så bestämde man sig att ersätta maskinkoden med instruktioner istället. Nu uppfanns assembler. Assembler var enkelt, men även där så blev det problem när assemblerkoden blev flera hundra rader lång.
Ett nytt verktyg måste utvecklas. Målet var att verktyget skulle vara enkelt och lika effektivt som assembler.
Många försök gjordes på att hitta det optimala språket.
Under 50-talet så började man tänka i algoritmer. Tyskarna var tidigt ute med matematiska algoritmer så som Plankalkül och Superplan. Dessa var alltså en direkt översättning från räkneram till algoritmer. Därför hete dom Plan-Kalkylator. Amerikanernas motsvarighet hette Fortran - Formula transformation.
Men dessa var matematiska språk. Behovet var ett programmeringsspråk som kunde hantera algoritmer. Vid år 1958, bara ett år efter Fortran kom till världen, så skapades ALGOL 58 - Algorithms 1958. Det var ett bra språk som kunde ersätta assembler.
Notera att på denna tid så växte det fram väldigt många olika språk som gjorde in princip samma sak.
- ALGOL 60
- Lisp
- Cobol
- PL/1
Nu började språken få sin moderna form. Men det var ofta en gröt där vissa av språken hade vissa fördelar och andra delar av språken hade nackdelar. Det måste finnas ett språk som verkligen kan göra allt som dessa 50-språk kan göra.
Om man kombinerar dessa språk, då får man CPL (Combined Programming Language). Alltså ett språk som kunde göra allt som 50-talets språk kan!
Men CPL var bökigt. Det måste bli enklare, för nu blev det enklare att programmera assembler. Datorutvecklarna tyckte att CPL borde vara ett rätt "basic" språk, så man lade till BCPL (Basic Combined Programming Language).
Men nu var det inte ett kombinerat språk längre. Det var ett eget språk för BCPL hade utvecklats till en egen gren. Så man tog bort CPL från BCPL och fick programmeringsspråket B. B står för BASIC om någon undrar varför man inte började på "A".
Men B var ung och hade mycket uppdateringar. Tillslut när dom lanserade sin stabila version av B så kallade dom den för C, för det var liksom nästa version. C blev en succé för den verkligen blev enkel, snabb och kunde ersätta assembler.
Målet var uppfyllt. Men när datorerna skulle utvecklas till mer avancerade system och datorgrafik var ett krav på 80-talet, då var det helt plötsligt bökigt att skriva C, för C var konstruerad för att vara optimal och enkel, inte hantera komplexa saker.
Så då lade man till objektorientering i C och kallade den för "C with classes", vilket var C's nästa version. Objektorienteringen gjorde det lättare att hantera fönster på skärmen. Men istället för att kalla C för D, så valde man bara att skriva C++ för skaparen ville markera att det var samma språk, bara en utökning.
Så jag delar inte din syn på C
Citat:
1. Dynamisk minnesallokering brukar referera till malloc, free osv, så nej det handlar inte om dynamisk minnesallokering.
2. Gällande slutsatsen om att det skulle vara minnesbegränsningar. Att deklarera iterator variabeln i for-loopen borde reducera scopet för variabeln men detta hade framförallt varit aktuellt med Rust. Jag skrev två applikationer där jag enbart flyttade deklarationen och de båda producerade identisk assembly med gcc 13.1.1 och objdump v2.40.0 (med viss varning för att detta inte kanske inte är ett entydigt sätt att disassemble:a). Dvs det är antagligen ett designval man gjorde när man introducerade C men som man insett är en onödig begränsning som bara sätter hinder för utvecklares alternativ att uttrycka sig.
Så det var bara ett val av design?
Handlar det inte mera om att undvika mer assemblerkod?