Jump to content
Kurt Lekanger

Vokste raskere enn Python: C ble årets programmerings­språk i 2019

Recommended Posts

1 minute ago, Gavekort said:

Vi snakker ikke om C. Vi snakker om C++ i sammenheng med embedded der 90% av hva du kanskje forbinder med C++-programmering er tvilsom bruk. Du kan sikkert krangle deg frem til en eller annen innsnevret variant av C++ som kunne tilfredsstilt mine krav for gadgets som templates og overloading, men ærlig talt så har tiden allerede løpt ut for salgspitchen.

 

Hvis du snakker om C++ for > 20 år siden så har du kanskje rett?

Men C++ for embedded er langt fra tvilsomt. Da er det nok du som ikke henger litt med...

  • Like 1

Share this post


Link to post
l0mf0mgl0mbl0og skrev (49 minutter siden):

Hvis du snakker om C++ for > 20 år siden så har du kanskje rett?

Men C++ for embedded er langt fra tvilsomt. Da er det nok du som ikke henger litt med...

Moderne C++ er desto verre da det bare abstraherer bort enda mer kontroll. Jeg vet ikke hva du anser som embeddedutvikling, men hva ser du for deg at jeg skal bruke auto og smartpointers til? Jeg bruker ikke standard C data typer en gang fordi det gir tap av kontroll. Jeg bruker stdint fordi da vet jeg nøyaktig hva som ligger bak en variabel når jeg omsider må angripe det på bit-nivå.

Du kan godt prøve å rakke ned på hvor mye jeg henger med i industrien, men om målet her er å overbevise meg som utvikler til å ta i bruk C++ i profesjonell sammenheng så går dette svært dårlig.

Jeg er klar over at C++ er mulig å bruke i embedded sammenheng. Poenget er at uten STL, inheritance, auto og ukritisk bruk av smart pointers og templates så er dere en dørselger som prøver å selge meg en relativt dårlig spikerpistol til å erstatte en hammer, som om mangel på overloading var en daglig irritasjon for oss som skriver C. Jeg synes C++ er et flott språk på datamaskiner med et operativsystem, men jeg personlig anser C++ som et kontroversielt og amatørmessig valg på mikrokontrollere, bedre egnet for eksperimentelle hobbyprosjekter for C++ disipler, uten at det er noe i veien med det.

Edited by Gavekort
  • Like 2

Share this post


Link to post

Ser ikke helt problemet, integrerte systemer, "embedded", kan være så mangt.
Det er vel maskinvare og formål som bestemmer hvilket språk man velger?


Dersom man har maskinvare "nok", og kan gjøre ting lettere med C++, så er det vel ikke noe i veien for å bruke C++, med de bibliotekene og det man trenger.
Mange ganger er dessverre C++ for tungt og tregt, med for lite kontroll, å da man velger man vel C i stedet.

Noen ganger er selv C for abstrahert, og det kan være behov for assembly i stedet.

Simulerer man kretser, er man helt avhengig av HDL (Hardware Description Language), som Verilog eller VHDL, for eksempel hvis man har FPGA'er i maskinvaren.

Det var verre før, når språk som asm, abel, stapl med flere, var mer eller mindre standard.

  • Like 1

Share this post


Link to post

Når jeg sier embedded så snakker jeg om f.eks 8-bit mikrokontrollere med 8KB RAM og 32KB Flash, der store deler av koden er knyttet opp til maskinvaren på bits and bytes nivå, med MMIO, shift-register, bitmasking, DMA, atomics, tyning av RAM-bruk, unngå heap-allokering og rekursjon som pesten, ta to bits fra denne byten og putt inn i 0x2000A5FE, pass på at denne interrupt-rutinen har en runtime på mindre enn 2 millisekunder slik at du ikke bryter sanntid, osv. Til og med litt assembly om du er uheldig...

Jeg klarer ikke å se for meg verdien i å dra slike ting opp og ned i tunge abstraksjonslag uten at dette bare blir massivt med boilerplatekode fra en eksperimentell teknologistack. Kanskje om jeg hadde hevet inn et sanntidsoperativsystem og gjort en skilsmisse mellom hardwarestyring og "applikasjonslogikk" så kunne det kanskje hatt sin verdi om sistnevnte har høy kompleksitet. Men om vi er på dette nivået her så begynner C++ og Linux på en SoC å bli et bedre alternativ.

Som jeg nevnte så liker jeg godt C++, men når jeg skriver C++ på toppen av et operativsystem så gjør jeg noe feil om maskinvaren ikke er abstrahert helt bort. Det jeg prøver å gi inntrykk for er at embedded er mindre som ressursknappe datamaskiner og mer som C-språket på et kognitivt nivå med assembly.

Edited by Gavekort
  • Like 1

Share this post


Link to post
3 hours ago, Gavekort said:

Moderne C++ er desto verre da det bare abstraherer bort enda mer kontroll. Jeg vet ikke hva du anser som embeddedutvikling, men hva ser du for deg at jeg skal bruke auto og smartpointers til? Jeg bruker ikke standard C data typer en gang fordi det gir tap av kontroll. Jeg bruker stdint fordi da vet jeg nøyaktig hva som ligger bak en variabel når jeg omsider må angripe det på bit-nivå.

Du kan godt prøve å rakke ned på hvor mye jeg henger med i industrien, men om målet her er å overbevise meg som utvikler til å ta i bruk C++ i profesjonell sammenheng så går dette svært dårlig.

Jeg er klar over at C++ er mulig å bruke i embedded sammenheng. Poenget er at uten STL, inheritance, auto og ukritisk bruk av smart pointers og templates så er dere en dørselger som prøver å selge meg en relativt dårlig spikerpistol til å erstatte en hammer, som om mangel på overloading var en daglig irritasjon for oss som skriver C. Jeg synes C++ er et flott språk på datamaskiner med et operativsystem, men jeg personlig anser C++ som et kontroversielt og amatørmessig valg på mikrokontrollere, bedre egnet for eksperimentelle hobbyprosjekter for C++ disipler, uten at det er noe i veien med det.

Nye C++ gir deg mer muligheter uten å ofre performance. Med constexpr osv. Du må ikke bruke RTTI og this pointer heller, men jeg trodde du visste dette? For CRTP har eksistert siden 1989-1995... https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern

https://solarianprogrammer.com/2017/12/27/cpp-17-constexpr-everything-as-much-as-the-compiler-can/

De som mener C++ er tungt og tregt, har ikke satt seg inn i (moderne) C++.

Edited by l0mf0mgl0mbl0og

Share this post


Link to post
l0mf0mgl0mbl0og skrev (13 timer siden):

De som mener C++ er tungt og tregt, har ikke satt seg inn i (moderne) C++.

Jeg har aldri sagt at C++ er tungt og tregt. Når jeg sier tungt så snakker jeg om boilerplate i en kontekst av unødvendig abstrahering. Jeg har ikke lyst til å diskutere videre når du insinuerer og rakker ned på min påståtte kunnskap i hvert innlegg. Det er umoden og uhøflig oppførsel.

  • Like 1

Share this post


Link to post
On 1/9/2020 at 1:13 PM, Gavekort said:

Det C++ tilbyr er kjekt for programmere, men er kaos for en som ønsker kontroll over systemet sitt.

Det er en litt drøy påstand. For små systemer er det kanskje korrekt. Men for større og mer sammensatte systemer, som f.eks. Unreal Engine eller Photoshop, så finnes det tross alt gode grunner til at man velger C++ fremfor C. Grunnen er nettopp at man vil ha kontroll, og ikke kaos.

Edited by BjartmarO

Share this post


Link to post
BjartmarO skrev (Akkurat nå):

Det er en litt drøy påstand. For små systemer er det kanskje korrekt. Men for større og mer sammensatte systemer, som f.eks. Unreal Engine eller Photoshop, så finnes det tross alt gode grunner til at man velger C++ fremfor C. Grunnen er nettopp at man vil ha kontroll, og ikke kaos.

Jeg tror bare vi har en forskjellig definisjon av kontroll. Jeg tror du tenker på komplekse programvarearkitekturer, og der jeg er enig i at C gir tap av kontroll i funksjonsmåte. Det jeg mener med kontroll er kontroll over hva prosessoren din gjør.

Share this post


Link to post
57 minutes ago, Gavekort said:

Jeg tror bare vi har en forskjellig definisjon av kontroll. Jeg tror du tenker på komplekse programvarearkitekturer, og der jeg er enig i at C gir tap av kontroll i funksjonsmåte. Det jeg mener med kontroll er kontroll over hva prosessoren din gjør.

De eksakte instruksjonene, mener du ja... Ja, så lavnivå er det sjelden at jeg selv har noe konkret behov for å være. Men C er jo et enklere språk, og jeg kan se at det trolig også er enklere å ha eksakt kontroll på instruksjonene som gis til CPU-en, der, enn i C++.

Her er forøvrig et verktøy som jeg ikke visste om før for et par måneder siden:

https://godbolt.org/

Det virker nyttig, til de tilfellene hvor de enkelte CPU-instruksjonene faktisk teller.

 

Share this post


Link to post
On 1/11/2020 at 3:07 PM, Gavekort said:

Jeg har aldri sagt at C++ er tungt og tregt. Når jeg sier tungt så snakker jeg om boilerplate i en kontekst av unødvendig abstrahering. Jeg har ikke lyst til å diskutere videre når du insinuerer og rakker ned på min påståtte kunnskap i hvert innlegg. Det er umoden og uhøflig oppførsel.

Hvilken boilerplate? Du kan bestemme om du vil benytte det eller ikke... Du må ha brukt noen veldig rare IDE/prosjekter hvis du mener at det er unødvendig abstrahering fra børjan...

Edited by l0mf0mgl0mbl0og

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...