Svenska ElektronikForumet
http://elektronikforumet.com/forum/

C still powers the world
http://elektronikforumet.com/forum/viewtopic.php?f=43&t=86678

Författare:  lillahuset [ 12.50 2017-04-01 ]
Inläggsrubrik:  C still powers the world

http://tekhinnovation.blogspot.se/2017/03/after-all-these-years-world-is-still.html?imm_mid=0efb22&cmp=em-prog-na-na-newsltr_20170401

OBS! Absolut inte menat som ett inlägg mot andra språk utan som en förklaring till att mycket fortfarande skrivs i C.

Författare:  sodjan [ 13.40 2017-04-01 ]
Inläggsrubrik:  Re: C still powers the world

Ja, C är ju primärt ett implementeringsspråk så som artikeln också beskriver. Operativsystem, databaser och andra verktyg och plattformar. Om man däremot tittar på applikationer så är C inte lika dominerande. Ganska naturligt med tanke på bakgrunden till C och hur C "är" rent generellt.

Författare:  SvenW [ 14.13 2017-04-01 ]
Inläggsrubrik:  Re: C still powers the world

Och jag har slitit i 10 år med huruvida jag borde försöka gå över mer till C++ eller annat för större PC applikatoner.
För små inbyggda processorer är det säkert C som gäller ett tag till men i övrigt.
Ge mig gärna ett gott råd! Kanske ingen idé att byta. Speciellt om man är 60+.

Författare:  lillahuset [ 14.29 2017-04-01 ]
Inläggsrubrik:  Re: C still powers the world

Alla jag känner som använder C++ älskar det. Personligen har mitt intresse för C++ minskat ordentligt. Lat? Ja! Obildbar? Möjligen. :)

Författare:  baron3d [ 15.02 2017-04-01 ]
Inläggsrubrik:  Re: C still powers the world

C++ ÄR språket !
Men som med alla verktyg så kan det brukas och missbrukas.
C++ passar alla plattformar men kan naturligt inte brukas full ut i en t.ex. PIC16.
Eftersom C är en del av C++ så kan man använda C++ möjligheter efter behov.
Skulle gärna se en light C++ som C+.

Btw C# skulle ju bara förbjudas !

Författare:  lillahuset [ 15.07 2017-04-01 ]
Inläggsrubrik:  Re: C still powers the world

EC++ kanske?
https://en.wikipedia.org/wiki/Embedded_C%2B%2B

Författare:  henkebenke [ 07.47 2017-04-04 ]
Inläggsrubrik:  Re: C still powers the world

Det har ju seglat upp ett par intressanta språk i "systemprogrammeringsspråksdomänen" om man nu kan anse att C hör dit.

Go: Automatisk minnehantering med GC. Bättre typsystem än C. Ungefär samma primitiver som C. https://golang.org/

Rust: Manuell minneshantering, men ändå säker med strikta regler. https://www.rust-lang.org/

Finns mycket mer att säga om dem men jag har inte använt dem än, men klart intressanta i sammanhanget.

Författare:  abcabc [ 22.49 2017-04-07 ]
Inläggsrubrik:  Re: C still powers the world

Spännande med rust!

Jag har jobbat många år med C och ofta upplevt att det är synd att jag som programmerare får slita, när kompilatorn skall slita, men att nya interpreterande/bytekompilerande språk (java, C#, python) inte fungerar i och med att de inte producerat maskinkod. Det fungerar oftast inte för inbyggda system.

När jag såg Go som är kompilerande blev jag eld och lågor (nästan inga nya kompilerade språk kommer ju), men när jag såg att den dels har en "garbage collection" och ändå inte hade objektorientering (vad jag förstår av religiösa/politiska skäl) så blev jag lite ledsen/matt. Men det var ändå ett modern språk som klarar mängder och en rad andra moderna strukturer (många från funktionsorienterade språk).

Jag tycker om C++ men den börjar bli föråldrad, det finns moderna saker så som att hantera mängder som jag tycker man bör ha idag. Det kan varken C, C++ eller java, men python och go klarar det.

Dags att kolla rust!

Författare:  sodjan [ 09.40 2017-04-08 ]
Inläggsrubrik:  Re: C still powers the world

> Det ["interpreterande/bytekompilerande språk (java, C#, python)"] fungerar oftast inte för inbyggda system.

I många fall fungerar det inte bra i "vanliga" system heller.
Resurskravet är högre och de skalar sämre än var traditionella språk/verktyg gör.
Go och Rust ser ut som två svar på det, på sätt och vis.

Författare:  hanpa [ 10.18 2017-04-08 ]
Inläggsrubrik:  Re: C still powers the world

Har aldrig varit så förtjust i C eftersom det finns för många möjligheter att göra fel. Det går att bygga på med andra verktyg för statisk analys etc. men det är bättre om språket är designat för att ge säker kod från början. Hoppas därför på att Swift får stor spridning då det från början har säkerhet i åtanke. Framtaget av geniet Chris Lattner, samma person som ligger bakom LLVM och Clang.

https://en.wikipedia.org/wiki/Chris_Lattner

Nu jobbar han tydligen med programvaran för Tesla, det ska bli spännande att se vad han kan åstadkomma där.

Med detta hoppas jag på att C tynar bort så småningom då det finns bättre alternativ. Om det sen blir Swift eller andra språk återstår att se.

Författare:  lillahuset [ 14.33 2017-04-08 ]
Inläggsrubrik:  Re: C still powers the world

Lägg av / GeekJoan

Författare:  Findecanor [ 15.43 2017-04-08 ]
Inläggsrubrik:  Re: C still powers the world

Det jag gillar med C över C++ och Swift är att semantiken är så pass synlig i jämförelse.

I C++ så blir det ofta implicita kopieringar (med anrop till copy-constructor eller C++11's move-semantik) som
inte alltid är så lätt att kunna se om man inte tänker efter. Dessutom är det norm att man ska ha pass-by-value-syntax med pekarsemantik i många fall, vilket öppnar upp för aliasing-buggar.
Swift verkar mer elegant och modernt på vissa sätt men kollar man upp hur det funkar så märker man att med nästan samma syntax kan variabler som man trodde låg på stacken ligga på heapen... och det är inget som spec:ats i själva språket utan är resultatet av en optimering av en version av kompilatorn. Skrämmande ...

Författare:  lillahuset [ 16.23 2017-04-08 ]
Inläggsrubrik:  Re: C still powers the world

hanpa skrev:
Med detta hoppas jag på att C tynar bort så småningom då det finns bättre alternativ. Om det sen blir Swift eller andra språk återstår att se.


Hoppas kan du ju alltid.

Författare:  Icecap [ 16.41 2017-04-08 ]
Inläggsrubrik:  Re: C still powers the world

Jag är mycket säker på att C finns kvar ett mycket bra tag än.

Författare:  bearing [ 17.23 2017-04-08 ]
Inläggsrubrik:  Re: C still powers the world

Anledningen till att C har blivit stort är väl mest tillfälligheter. Hade ju varit bättre om t.ex. Ada eller annat säkrare språk blivit stort.
Som jag förstått det var de första kompulatorerna för C relativt bra, vilket gjorde att språket valdes framför andra. Med mycket kod skriven stannade man så klart kvar vid språket i fortsättningen. Trots de lite märkliga och svårfunna buggar som uppkom ibland.

Författare:  lillahuset [ 17.33 2017-04-08 ]
Inläggsrubrik:  Re: C still powers the world

Att C har blivit så populärt beror till stor del att det är ett väldigt enkelt språk som finns till de flesta arkitekturer.
Det mesta som är lite mer komplicerat finns i olika bibliotek som är skrivna i C. Resultatet av detta är att C är nästan trivialt att porta till en ny arkitektur.
De flesta kompilatorer genererar dessutom väldigt effektiv kod.

En av nackdelarna med C är att det är ganska stor risk att skära sig på den vassa kniven. Och när man skär sig på en riktigt vass kniv gör det inte ont förrän senare.

Författare:  xxargs [ 18.55 2017-04-08 ]
Inläggsrubrik:  Re: C still powers the world

ADA var en myt, en dröm på 80 och början av 90-talet associerad med amerikans militär, NASA, stora 16 bitars datorer med massor a RAM etc.

Det var totalt utanför räckhåll på 8 bits epoken på 80-talet där 64 kB dynamisk ram kostade en månadslön och disketter det enda som var ekonomiskt överkomligt i lagring, och en hårddisk på 10 MB kostade 10 papp - exklusive kontrollern... däremot fanns det mer eller mindre inkompletta men fungerande C-kompilatorer (kriteriet var att kompilatorn skulle kunna kompilera sig själv till en fungerande binär på sin egen källkod) för CP/M och Z80-miljön på den tiden - och om man ville slanta mycket även kommersiella varianter...

Författare:  MiaM [ 02.24 2017-05-11 ]
Inläggsrubrik:  Re: C still powers the world

bearing skrev:
Anledningen till att C har blivit stort är väl mest tillfälligheter. Hade ju varit bättre om t.ex. Ada eller annat säkrare språk blivit stort.
Som jag förstått det var de första kompulatorerna för C relativt bra, vilket gjorde att språket valdes framför andra. Med mycket kod skriven stannade man så klart kvar vid språket i fortsättningen. Trots de lite märkliga och svårfunna buggar som uppkom ibland.
Nja, det var väl mest så att de språk som fanns då C växte fram var väl skit i jämförelse? Förutom de totalt utdöda föregångarna B, BCPL o.s.v. så var det väl FORTRAN och PASCAL som kunde ses som nån tänkbar konkurrent.

Att PASCAL fick ett lyft på åttiotalet har vi väl Borland att tacka för. De gjorde en väldigt snabb och liten kompilator ihop med integrerad utvecklingsmiljö, där allt var så litet att det fram till och med TP 3.0 rent av gick att köra på CP/M på en 8080/8085/Z80. Att kompilatorn inte producerade särskilt bra kod var en annan sak, den var ändå många gånger bättre än t.ex. interpreterande BASIC och det gick många gånger snabbare att skriva sina program än att använda assembler.

Angående det xxargs skriver:
Vi ska inte glömma att de C-kompilatorer som fanns var en plåga under samma tidsepok. Jag har petat lite på C innan jag hade hårddisk. Då hade jag ändå en dator med "en årslön" av minne, enligt ditt mått av minnespriser :) , dock bara diskettstationer. Det var på den tiden man kunde komma över lösa diskdrives av mer eller mindre märklig typ utan att betala särskilt mycket, så jag hade nog som mest tre diskettstationer varav en var en 80-spårs 5,25" DS/DD-diskdrive vars disketter var inkompatibla med alla andras burkar. Men det gick bra att använda den driven med en diskett för att ha includefiler, libbar å sånt till C-kompilatorn. Tiden det tog att kompilera med disketter var ingen höjdare.

Samtidigt på samma burk, rent av med mindre minne, så gick det att köra en integrerad miljö med editor, assemblator och debugger där enda problemet var att man av lathet ibland inte orkade spara källkoden innan man provkörde senaste ändringen och därför tappade just senaste ändringen ifall man gjort något fel som gjorde att man var tvungen att boota om.

Jag har inte kört något i ADA själv, men mitt intryck är att ADA försöker vara en slags "plusplus"-motsvarighet till Pascal på det sätt C++ är en påbyggnad av C.

Den största bristen med C, som hela världen fått lida av många gånger, är att det inte finns någon inbyggd range-checking för framförallt strängar (men även arrayer som ju rent tekniskt är samma sak som strängar i vanlig C). Hade det funnits range-checking av längden på strängar så hade vi sluppit enormt många av alla buggar (framförallt säkerhetsrelaterade) som dykt upp under många år. Visst är det en prestandaförlust att ha sådan koll överallt automagiskt, men då kan man göra så att den default är på och man själv måste slå av den med kompilatordirektiv och då blir tvungen att tänka efter när man gör detta. Den som t.ex. sätter ihop en Linuxdistribution skulle kunna låta detta vara påslaget överallt där man själv inte audit:at koden. Dessutom skulle det kunna vara påslaget på alla ställen där prestanda inte har största betydelse. Exempelvis kan det vara påslaget i sshd men inte i httpd på en burk som agerar webserver.

Författare:  TomasL [ 08.48 2017-05-11 ]
Inläggsrubrik:  Re: C still powers the world

Det har ju funnits rätt många kuliga språk genom tiderna, till exempel LISP och OCCAM är två av dem som i princip dött helt och hållet.
LISP blev man tvungen att lära sig en gång i tiden, väldigt stökigt.

Författare:  Findecanor [ 14.58 2017-05-11 ]
Inläggsrubrik:  Re: C still powers the world

MiaM skrev:
Den största bristen med C, som hela världen fått lida av många gånger, är att det inte finns någon inbyggd range-checking för framförallt strängar (men även arrayer som ju rent tekniskt är samma sak som strängar i vanlig C). Hade det funnits range-checking av längden på strängar så hade vi sluppit enormt många av alla buggar (framförallt säkerhetsrelaterade) som dykt upp under många år.

En del av felet är inte range-checking i språket i sig utan att C-biblioteket har funktioner som inte gör range-checking alls eller gör det inte ibland: de värsta är strcpy() and strcat().
På BSD lade man 1999 till funktionerna strlcpy() and strlcat() ('l' för "limit") som alltid kollar längd och alltid nollterminerar och andra Unix-varianter, bl.a. Solaris följde. Windows lade istället till sina egna strxxx_s() - varianter.
GNU libc (nästan varje Linux) har dock fortfarande inte strl - varianterna. När någon försökte lägga till det redan år 2000 så ratades det av maintainern med:
Citera:
This is horribly inefficient BSD crap. Using these function only leads to other errors. Correct string handling means that you always know how long your strings are and therefore you can you memcpy (instead of strcpy).

Eller, översatt: "Man behöver inte säkrare funktioner om man skriver buggfri kod" ...
*suck*

Författare:  jesse [ 15.44 2017-05-11 ]
Inläggsrubrik:  Re: C still powers the world

>En del av felet är att C-biblioteket har funktioner som inte gör range-checking alls...

mnja... men begränsningen i C är väl i så fall att du inte vet längden på en sträng, array eller vad som helst utan att behöva trixa med sizeof(...) eller använda macron som i char namn[MAX_ANTAL_TECKEN] vilket i sig lätt kan bli fel... jag håller nog med om att det kunde vara inbyggt på nåt vis, men att man skulle kunna välja bort det eftersom man ibland kanske inte har råd med extra kontroller i alla loopar, särskilt i små microcontrollers.

Författare:  sodjan [ 16.27 2017-05-11 ]
Inläggsrubrik:  Re: C still powers the world

Många problem där C är inblandat har ju just med hanteringen av "strängar"
och buffrar att göra. T.ex. att förlita sig på att det ska finnas ett null som
avslutar en sträng (istället för att man vet längden). Sen har det med
minnesskydd att göra också, t.ex. att data areor kan exekveras. Och
att exekverbar kod inte är skrivskyddad (så att en "buffer overflow"
kan skriva över exekverbar kod). Det är en kombination av brister i
C i sig och brister i OS'et där det körs.

Även API'erna mot vissa OS system funktioner har brister där man
använder enkla pekare till buffrar/strängar istället för t.ex. "descriptors".
https://en.wikipedia.org/wiki/Data_descriptor

Författare:  Findecanor [ 20.06 2017-05-11 ]
Inläggsrubrik:  Re: C still powers the world

Alla moderna operativsystem tillåter inte skrivning i programsegment och tillåter inte exekvering i vanliga minnessegment - så länge som hårdvaran stödjer det.
32-bittars x86 har dock inget skydd mot att inte köra från varsomhelst. Det kom först med x86-64.

En attack behöver dock inte alltid skriva över existerande kod - utan det räcker med att skriva över en returadress på stacken med en adress till den kod som hacken vill köra.
När en funktion anropas så lagras först aktuell programadress på stacken för att processorn ska kunna hitta tillbaka. Sedan allockerar funktionen minne på samma stack för sina lokala variabler.
Av historiska skäl växer processorstackar nedåt - och instruktionerna för funktionsanrop gör så - vilket har till följd att returadressen till den anropande funktionen alltid ligger på ett positivt index relativt en lokal array-variabel.
Man skulle kanske komma runt det genom att ha separata stackar för anrop och för data, men det skulle kräva att man allockerade ett extra processorregister just för data - och x86 har ganska få register så prestanda skulle bli lidande.

Författare:  lillahuset [ 20.28 2017-05-11 ]
Inläggsrubrik:  Re: C still powers the world

Inse att C ursprungligen skapades för PDP-7 1972 med 4kord RAM i grundutförande. Expanderbart till 64k.

Filosofin med C, om jag inte har missuppfattat allt, är ett enkelt språk med bibliotek för mer avancerade saker. Vill man att någon ska hålla handen får man använda lämpliga bibliotek.

Författare:  sodjan [ 20.59 2017-05-11 ]
Inläggsrubrik:  Re: C still powers the world

Findecore, det där undviks väl med descriptors? Då läggs inga lokala variabler
på stacken (om det är för funktionsanropet det gäller) utan descriptors, vilka
ju är en fast struktur som i sig pekar till datat.

Författare:  jpalsson [ 10.49 2017-05-12 ]
Inläggsrubrik:  Re: C still powers the world

MiaM skrev:
Att PASCAL fick ett lyft på åttiotalet har vi väl Borland att tacka för. De gjorde en väldigt snabb och liten kompilator ihop med integrerad utvecklingsmiljö, där allt var så litet att det fram till och med TP 3.0 rent av gick att köra på CP/M på en 8080/8085/Z80. Att kompilatorn inte producerade särskilt bra kod var en annan sak, den var ändå många gånger bättre än t.ex. interpreterande BASIC och det gick många gånger snabbare att skriva sina program än att använda assembler.


TurboC tyckte jag var en höjdare, första gången man fick uppleva hur trevligt ett IDE kan vara, supersnabb dessutom.

MiaM skrev:
Vi ska inte glömma att de C-kompilatorer som fanns var en plåga under samma tidsepok. Jag har petat lite på C innan jag hade hårddisk. Då hade jag ändå en dator med "en årslön" av minne, enligt ditt mått av minnespriser :) , dock bara diskettstationer. Det var på den tiden man kunde komma över lösa diskdrives av mer eller mindre märklig typ utan att betala särskilt mycket, så jag hade nog som mest tre diskettstationer varav en var en 80-spårs 5,25" DS/DD-diskdrive vars disketter var inkompatibla med alla andras burkar. Men det gick bra att använda den driven med en diskett för att ha includefiler, libbar å sånt till C-kompilatorn. Tiden det tog att kompilera med disketter var ingen höjdare.

Samtidigt på samma burk, rent av med mindre minne, så gick det att köra en integrerad miljö med editor, assemblator och debugger där enda problemet var att man av lathet ibland inte orkade spara källkoden innan man provkörde senaste ändringen och därför tappade just senaste ändringen ifall man gjort något fel som gjorde att man var tvungen att boota om.


Håller med, innan jag kom över TurboC var jag hänvisad till nåt elände som hette DeSmet C, tog lång tid innan jag litade på att C var nåt att ha
efter den upplevelsen.
Då var kombinationen A86/D86 mycket trevligare på PC:n :-)

MiaM skrev:
Jag har inte kört något i ADA själv, men mitt intryck är att ADA försöker vara en slags "plusplus"-motsvarighet till Pascal på det sätt C++ är en påbyggnad av C.


Syrran gick teknisk fysik på Chalmers på 90-talet, där var det ADA-first i alla lägen när det skulle lämnas in uppgifter.
(fast ibland fick hon lämna in körbara filer, då blev det C :-)

MiaM skrev:
Den största bristen med C, som hela världen fått lida av många gånger, är att det inte finns någon inbyggd range-checking för framförallt strängar (men även arrayer som ju rent tekniskt är samma sak som strängar i vanlig C).


Nu var det väldigt länge sen jag skrev nåt i C, så kunskapen om hur skyddsmekanismer och annat fungerar nu är väldigt daterad.
Men, jag tror att man vinner mycket på att betrakta C som assembler med ett större utbud av bibliotek, dvs. man måste
ha det här med minneshantering i åtanke hela tiden för att inte råka in i problem.

Författare:  hanpa [ 15.23 2017-05-12 ]
Inläggsrubrik:  Re: C still powers the world

Givet att det kommer in många nybörjare i programmering på "Arduino" så skulle man önska att man hade ett mer modernt programmeringsspråk, plus att man borde ha stöd för simulering av allt utan att behöva koppla in diverse komponenter för att provköra. Lite åt hållet som man jobbar med appar för iPhone eller Android.

En "Arduino IDE" baserat på Swift istället för C/C++ vore helt suveränt för då får man ett betydligt modernare programmeringsspråk med utmärkt stöd för att undvika de vanligaste programmeringsfelen dessutom.

Författare:  Mr Andersson [ 15.46 2017-05-12 ]
Inläggsrubrik:  Re: C still powers the world

Swift kräver en runtime och alla former av range checking och minnesskydd kräver extra cpu-cykler och minne. Tror inte det skulle fungera så bra med de begränsade resurser som finns på AVR, främst på minnessidan. På t.ex. ARM och PIC32 tror jag det skulle fungera mycket bra (givet att man har externt ram. det inbyggda brukar vara ganska litet), men då får man en splittrad plattform där avr-arduino använder C och arm-arduino använder swift. Men jag skulle gärna vilja ha en swift-kompilator till bare metal ARM.

Simulatorer finns som tredje-partsprogram men jag har inte än sett någon som fungerar riktigt bra. En simulator som följer med den officiella arduinoprogramvaran skulle vara optimalt.

Författare:  TomasL [ 15.59 2017-05-12 ]
Inläggsrubrik:  Re: C still powers the world

jpalsson skrev:
Nu var det väldigt länge sen jag skrev nåt i C, så kunskapen om hur skyddsmekanismer och annat fungerar nu är väldigt daterad.
Men, jag tror att man vinner mycket på att betrakta C som assembler med ett större utbud av bibliotek, dvs. man måste
ha det här med minneshantering i åtanke hela tiden för att inte råka in i problem.

Hmm, C är väl definierat som ett lågnivåspråk jämsides assembler (som iofs inte är något språk, per definition).

Författare:  hanpa [ 16.04 2017-05-12 ]
Inläggsrubrik:  Re: C still powers the world

Swift är fortfarande väldigt nytt. Det lär komma nya versioner med mindre behov av runtime och att man kan stänga av olika kontroller i runtime etc. Det fina med Swift är att kompilatorn i sig tar de allra vanligaste problem genom att språket är designat från början för att ge säker kod. Just nu finns det bara för Mac och Ubuntu vad jag vet men det pågår portering till andra plattformar.

Författare:  Castello [ 20.23 2017-05-18 ]
Inläggsrubrik:  Re: C still powers the world

Vilken intressant artikel! Det är ju skönt för mig som novis på c-programmering att veta att "slitet" inte är förgäves. :lol:

Författare:  SvenW [ 08.14 2017-05-19 ]
Inläggsrubrik:  Re: C still powers the world

>> "slitet" inte är förgäves. 
Helt korrekt om man vlll fortsätta programmera.
Man skall inte tro att det kommer något som är väsentligt bättre, eller att det senaste är det som alltid är bäst.
Det finns en berömd essä som heter No Silver Bullet av Fred Brooks, som lärde från IBM360-projektet för
mer än 50 år sedan.
Det han säger där gäller nog än.

Författare:  Icecap [ 14.02 2017-05-19 ]
Inläggsrubrik:  Re: C still powers the world

För mig är sanningen inom programmering att språket är sekundärt, det är metodiken som är primärt.

Kan man lösa uppgiften vid att utföra en rad steg - då kan man skriva ett program som klarar jobbet, oavsett vilket programmeringsspråk man använder. Visst, vissa kan vara knepigare än andra men i grunden kan alla språk samma saker: fastställa en instruktionsföljd vilket i sin tur utför uppgiften.

Javisst, man kan ha mer eller mindre check av boundaries osv men i slutändan är det programmören som ska göra rätt.

Författare:  sodjan [ 14.27 2017-05-19 ]
Inläggsrubrik:  Re: C still powers the world

Visst ska programmeraren göra rätt, men det är olika lätt i olika språk att göra rätt... :-)
Ibland får man mer hjälp ett göra rätt (vilket jag föredrar), ibland mindre.

Författare:  hummel [ 19.20 2017-05-19 ]
Inläggsrubrik:  Re: C still powers the world

Programmera (knappa in kod i valfritt språk) är enkelt, det svåra är systemera (designa).

Alla tidsangivelser är UTC + 1 timme
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/