2018-06-27, 01:33
  #1
Medlem
abcabcs avatar
Jag har tidigare jobbat med programmering av inbyggda system på 90-talet, då med främst C men även lite C++ och Java. Även om C kändes gammalt redan då var C++ och Java ok, men idag känns de gamla.

Jag har varit på jakt efter ett programmeringsspråk som ersätter dessa, dels för mina husbehov, men främst för att försöka förutsäga vad branchen behöver.

C++ är föråldrat, dålig säkerhet, ingen vettig range control av arrayer, ingen inbyggd hantering av moderna typer som dynamiska mänger av blandade typer.

Jag har nog kommit fram till att Java ej är lösningen, dels är den föråldrad, och att den ej producerar maskinkod som nog visat sig vara fatalt.

Jag har kollat in Swift, jag hoppades mycket på den, den är kompilerande och producerar maskinkod. Fokus på säker och stabil kod. Bra objektorientering. Dock en normal garbage collector som gör den svår för inbyggda system, gör att prestanda blir för dålig. En mycket stor run-time-system som krävs att den finns för att kunna köra Swift över huvud taget, jag har hört 500k byte, vilket är mycket, det begränsar andvändningen rejält. Tafflig support för att hantera låg-nivå för att accessa minne. Annars ett modernt och trevligt språk. Kontrollerat av Apple, och även om det är öppet är de oklart om de verkligen vill sprida de utanför Apple-världen.

En annan språk är go från google, ok men saknar objektorientering vilket är mycket tråkigt, men är modernt med dynamiska typer enligt ovan, har dock en traditionell garbage-collector, vilket kan ge problem.

Min faforit och hopp nu är Rust, har moderna dynamiska typer, är modernt språk med de saker vi är vana vid från tex python, har viss objektorientering utan att gå till överdrift (så ej polymorft arv), tycks på något sätt klarat sig utan garbage collector, är helt öppet och det tycks finnas intresse av att det kanske skall ersätta C/C++ som arbetshästen för inbyggda system och hela os. Språket är fokuserat på att bygga stabil och säker kod, vilket är mycket bra.

Vad jag förstår så skrivs fortfarande linux i C, windows i C/C++ och macOS i C och Objective C, hela MS Office i C/C++, så C/C++ är fortfarade arbetshäsyen. Så om vi räknar in alla mobiltelefonet, tv-apparater, smarta klockor och kärnvapenmissiler, så kanske 98% av all maskinkod i värden som exekveras är C just nu. En filosofisk fråga blir hur man skall bedöma all PHP och javascript som i sin tur resulterar i C/C++ i slutändan

Jag har läst att USA militärindustri tidigare haft krav att använda ADA, men på senare år i ökande grad gått över till C (somär ett mycket äldre språk).

Vad tror ni? Kommer vi få leva med C/C++ i 20 år till för inbyggda system, operativsystem och liknande?
Citera
2018-06-27, 01:44
  #2
Medlem
Trollfeeders avatar
Det bästa programmeringsspråket är det som är mest anpassat för det specifika ändamålet. Att påstå att ett programmeringsspråk är bäst är typ som att påstå att blå är den bästa färgen, eller att cirklar är bättre än trianglar.

Rust ser intressant ut men jag ställer mig frågande till om det är ändamålsenligt i dom fall där det ställs krav på absolut maxad prestanda. En kernel vill man ju typiskt optimera rätt så maximalt. Däremot skulle Rust säkerligen kunna ersätta C och C++ i vissa applikationer.
Citera
2018-06-27, 01:55
  #3
Medlem
Det är precis som trollfeder säger. Det finns inget "det bästa språket". Lär dig styrkorna och svagheterna hos de specifika språken istället för att stirra dig blind på att språk "känns föråldrat". Och ja, C kommer leva kvar länge till. Dels då du kan optimera det extremt väl då du har full kontroll över vad som händer, men också för att det redan finns så extremt mycket c-kod som måste maintainas. Att göra om hela ekosystem av hundratusental, ibland miljontals rader kod är inte något som är genomförbart i praktiken i en överskådlig tid. Bättre att i sådana fall underhålla systemet tills det byts ut.
__________________
Senast redigerad av Motherofgod 2018-06-27 kl. 01:59.
Citera
2018-06-27, 02:25
  #4
Medlem
Sprutnarkomans avatar
Citat:
Ursprungligen postat av abcabc
Språket är fokuserat på att bygga stabil och säker kod, vilket är mycket bra.

Orkade inte läsa så mycket, men bara för att säga emot räckte det med ett par sidor för att komma hit:
A function need not end with a return expression: in this case the last expression in the function creates the return value.
-- Wikipedia

Jag tror att det är det gamla vanliga. Ett språk kommer med nya, bra idéer men fuckar samtidigt upp beprövade saker.
Citera
2018-06-27, 06:42
  #5
Medlem
Citat:
Ursprungligen postat av abcabc
Vad tror ni? Kommer vi få leva med C/C++ i 20 år till för inbyggda system, operativsystem och liknande?

Vad gäller systemprogrammering så kommer vi nog fortsätta vara bundna till de språk som de nativa APIerna stödjer, vilket för det som oftast menas med inbyggda system kommer fortsätta vara C för överskådlig framtid. Samtidigt finns det, i alla fall på Linuxsidan, dels en trend att lägga ut saker i userspace istället för att hacka i kärnan (och använda stabila interface istället), och då kommer de moderna språken in mer; dels finns det en ganska spännande trend mot att göra mer och mer i BPF och liknande DSLer som får interpreteras och exekveras av kärnan. Svårt att säga var det slutar men är en intressant utveckling.

På jobbet är trenden att gå från Python till Go på toolingsidan medans embedded-koden fortsätter vara nästan uteslutande C.
Citera
2018-06-27, 07:06
  #6
Medlem
Citat:
Ursprungligen postat av Trollfeeder
Det bästa programmeringsspråket är det som är mest anpassat för det specifika ändamålet. Att påstå att ett programmeringsspråk är bäst är typ som att påstå att blå är den bästa färgen, eller att cirklar är bättre än trianglar.

Rust ser intressant ut men jag ställer mig frågande till om det är ändamålsenligt i dom fall där det ställs krav på absolut maxad prestanda. En kernel vill man ju typiskt optimera rätt så maximalt. Däremot skulle Rust säkerligen kunna ersätta C och C++ i vissa applikationer.

Prestanda vs C (ingen stor skillnad):
https://benchmarksgame-team.pages.de...ster/rust.html
Citera
2018-06-27, 09:04
  #7
Medlem
Trollfeeders avatar
Citat:
Ursprungligen postat av grabb1948
Prestanda vs C (ingen stor skillnad):
https://benchmarksgame-team.pages.de...ster/rust.html

Jag har redan sett den. "Ingen stor skillnad" beror på ändamål.
Citera
2018-06-27, 09:31
  #8
Moderator
Protons avatar
C, C++ och assembler --> Övriga språk
/Moderator
Citera
2018-06-27, 15:19
  #9
Medlem
RostigHinks avatar
Citat:
Ursprungligen postat av abcabc
Jag har tidigare jobbat med programmering av inbyggda system på 90-talet, då med främst C men även lite C++ och Java. Även om C kändes gammalt redan då var C++ och Java ok, men idag känns de gamla.

Jag har varit på jakt efter ett programmeringsspråk som ersätter dessa, dels för mina husbehov, men främst för att försöka förutsäga vad branchen behöver.

C++ är föråldrat, dålig säkerhet, ingen vettig range control av arrayer, ingen inbyggd hantering av moderna typer som dynamiska mänger av blandade typer.

Jag har nog kommit fram till att Java ej är lösningen, dels är den föråldrad, och att den ej producerar maskinkod som nog visat sig vara fatalt.

Jag har kollat in Swift, jag hoppades mycket på den, den är kompilerande och producerar maskinkod. Fokus på säker och stabil kod. Bra objektorientering. Dock en normal garbage collector som gör den svår för inbyggda system, gör att prestanda blir för dålig. En mycket stor run-time-system som krävs att den finns för att kunna köra Swift över huvud taget, jag har hört 500k byte, vilket är mycket, det begränsar andvändningen rejält. Tafflig support för att hantera låg-nivå för att accessa minne. Annars ett modernt och trevligt språk. Kontrollerat av Apple, och även om det är öppet är de oklart om de verkligen vill sprida de utanför Apple-världen.

En annan språk är go från google, ok men saknar objektorientering vilket är mycket tråkigt, men är modernt med dynamiska typer enligt ovan, har dock en traditionell garbage-collector, vilket kan ge problem.

Min faforit och hopp nu är Rust, har moderna dynamiska typer, är modernt språk med de saker vi är vana vid från tex python, har viss objektorientering utan att gå till överdrift (så ej polymorft arv), tycks på något sätt klarat sig utan garbage collector, är helt öppet och det tycks finnas intresse av att det kanske skall ersätta C/C++ som arbetshästen för inbyggda system och hela os. Språket är fokuserat på att bygga stabil och säker kod, vilket är mycket bra.

Vad jag förstår så skrivs fortfarande linux i C, windows i C/C++ och macOS i C och Objective C, hela MS Office i C/C++, så C/C++ är fortfarade arbetshäsyen. Så om vi räknar in alla mobiltelefonet, tv-apparater, smarta klockor och kärnvapenmissiler, så kanske 98% av all maskinkod i värden som exekveras är C just nu. En filosofisk fråga blir hur man skall bedöma all PHP och javascript som i sin tur resulterar i C/C++ i slutändan

Jag har läst att USA militärindustri tidigare haft krav att använda ADA, men på senare år i ökande grad gått över till C (somär ett mycket äldre språk).

Vad tror ni? Kommer vi få leva med C/C++ i 20 år till för inbyggda system, operativsystem och liknande?
För inbyggda system skulle jag fortfarande använda C++. I synnerhet efter C++11-standarden. Studera RAII för enklare resurshantering, https://en.cppreference.com/w/cpp/language/raii. Med 11 kom även move semantics för att reducera kopiering av objekt.

Range check kan man ta hand om, exempelvis std::vector slänger en exception om man accessar utanför.
Citera
2018-07-08, 01:02
  #10
Medlem
Citat:
Ursprungligen postat av Motherofgod
Det är precis som trollfeder säger. Det finns inget "det bästa språket". Lär dig styrkorna och svagheterna hos de specifika språken istället för att stirra dig blind på att språk "känns föråldrat". Och ja, C kommer leva kvar länge till. Dels då du kan optimera det extremt väl då du har full kontroll över vad som händer, men också för att det redan finns så extremt mycket c-kod som måste maintainas. Att göra om hela ekosystem av hundratusental, ibland miljontals rader kod är inte något som är genomförbart i praktiken i en överskådlig tid. Bättre att i sådana fall underhålla systemet tills det byts ut.


Jo, klart det finns "det bästa språket". Det bästa sättet att mäta det på är genom användning. Exempelvis:

Tekniskt sett så hade Rust varit bättre i detta område. Om det kan appliceras störst antal gånger genom tusentals diverse projekt så kan man med viss del anta att Rust är det bästa språket; då det har fler användningsområden. Och jo, såklart kan man anta att assembler är bäst tekniskt sett även om det är omänskligt att skriva i sådant nuförtiden. Nu får vi även ha en praktisk sida i det hela - men du förstår nog poängen.
Citera
2018-07-08, 13:56
  #11
Medlem
Citat:
Ursprungligen postat av klosor
Jo, klart det finns "det bästa språket". Det bästa sättet att mäta det på är genom användning. Exempelvis:

Tekniskt sett så hade Rust varit bättre i detta område. Om det kan appliceras störst antal gånger genom tusentals diverse projekt så kan man med viss del anta att Rust är det bästa språket; då det har fler användningsområden. Och jo, såklart kan man anta att assembler är bäst tekniskt sett även om det är omänskligt att skriva i sådant nuförtiden. Nu får vi även ha en praktisk sida i det hela - men du förstår nog poängen.

Vad menar du genom användning? Menar du då antal personer som använder det i diverse projekt eller något annat? Hävdar ändå att det inte finns det bästa språket utan beror helt på vilken miljö man befinner sig i. Det finns inget bra sätt att mäta hur universiellt "bra" ett programmeringsspråk är hävdar jag. Om det funnits en standard för att mäta det så hade jag accepterat att något kan vara det bästa språket.
Citera
2018-08-02, 02:59
  #12
Medlem
abcabcs avatar
Citat:
Ursprungligen postat av RostigHink
...Range check kan man ta hand om, exempelvis std::vector slänger en exception om man accessar utanför.
När det gäller säkerhet så har ju just out-of-bound varit en klassisk attack.

När det gäller C misstänker jag att det är för komplext att skydda sig helt, jag vet att C-biblioteket är uppdaterat för att mer skydda sig, de gamla osäkra strcpy finns ju kvar, vilket de måste så klart.

Jag har sett kodgranskningar av mycket skickliga programmerares kod, det finns luckor ändå, när man skriver i C.

När det gäller C++ så inser jag att möjligheten att skriva säker kod är större.

Tidigare har man ansett att prestanda är så viktigt, så vi måste acceptera assembler och språk som C i inbyggda system, IoT-saker, hemelektronik. Idag skulle jag säga att just dessa saker är det mycket viktigare med säkerhet än på din hem-PC, mobil eller i kanske till och med serverparker.
__________________
Senast redigerad av abcabc 2018-08-02 kl. 03:05.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in