For en liten stund siden skrev min kollega Filip Van Laenen et innlegg her på kode24 der han bemerket fraværet av nye programmeringsspråk.
Det er uklart for meg om han synes dette er et problem eller ikke, men personlig har jeg ikke behov for nye programmeringsspråk kun for nyhetens skyld.
Jeg kunne godt tenkt meg et språk egnet for å programmere FPGA, og den C-like syntaksen for å programmere GPGPU kan vel heller ikke sies å være ideell, men som gammel C++-utvikler er jeg mye mer glad for å se evolusjonen av dette språket i moderne tid.
Det vil si - selve språket er ikke endret veldig mye: «[[nodiscard]]», «override» og så videre gjør det litt lettere å lage korrekt kode, det har kommet inn støtte for lambda, og med «constexpr» kan utviklere nå hjelpe kompilatoren til å gjøre mest mulig compile-time (det er vel lite som gir mere tilfredstillelse enn å lage kode som kjører i O(0)?).
- Hvorfor kommer det ingen nye programmeringsspråk?
Føles som nytt språk
Den store utviklingen i C++11/14/17/20 er for så vidt ikke i selve språket, men i standardbiblioteket. Og etter min mening mer spesifikt i støtte for smart pointers og move-semantikk, altså pekere med innebygget reference counting og eierskap.
Der du tidligere brukte new/new[]/malloc, og for all del måtte huske å kjøre delete/delete[]/free (selvfølgelig i samme tråd...), bruker du nå std::make_unique eller std::make_shared og så garanterer kompilatoren at applikasjonen holder orden på minneområdet selv.
«Nå for tiden er det liksom ingen som stusser over at en JVM for "Hello World" får 1,5 GB minne.»
Kjente problemer som use-after-free, double-free og minnelekkasjer er plutselig historie, samtidig som kompilatoren kan generere svært effektiv kode.
Da jeg konverterte en C++ web-applikasjon fra libWt 3/C++98 til libWt 4 (basert på C++17 og støtte for smartpointers) gikk jeg fra «Jeg har kjørt applikasjonen i Valgrind og tror ikke det er noe særlig minnelekkasjer» til «Jeg håndterer ikke minne selv. Kompilatoren garanterer at det ikke er minnelekkasjer».
For en utvikler vant til tradisjonell C++ (C++98 eller eldre) vil moderne C++-kode se ut som om det er skrevet i et nytt språk, men egentlig er det bare en gradvis forbedring av språket som har pågått i over 40 år.
Hvordan og hvorfor koder noen i C++?
Fragmentering av andre språk
Andre språk har sett splittelser.
Java blir stadig sluppet i nye versjoner med ny funksjonalitet, men likevel har noen følt behovet for å opprette Java-generatorer, som Kotlin og Scala, som utad fremstår som egne språk.
Slik fragmentering er det vel kun kursholdere som tjener på, og for min del hadde jeg heller sett at Java-gjengen bruker tiden på å se hvorfor noen har følt behovet for å lage Kotlin og Scala, og se om det kan inkluderes i native Java i stedet.
Kotlins coroutines og Scalas sterke typing og funksjonelle programmering burde ikke kreve alt for mange breaking changes for å få inn? Klarer alle disse miljøene å dra lasset sammen, vil det kanskje også bli tid til å se på hvordan utviklere kan støttes til å lage mer effektiv kode?
Nå for tiden er det liksom ingen som stusser over at en JVM for «Hello World» får 1,5 GB minne og at en datamaskin som kan gjøre milliarder av operasjoner i sekundet bruker 10-15 sekunder på å starte opp en enkel enterprise-applikasjon!
Slik fungerer coroutines i Kotlin
Forbedring bedre enn nytt språk
Å lage et nytt programmeringsspråk er ikke gjort i en fei, og å lage det bra er i hvert fall ikke gjort i en fei.
Derfor mener jeg at gradvis forbedringer av eksisterende språk er en mye bedre løsning enn å lage nok et språk i håp om at dette løser alle programmeringsproblemene.
Å forbedre eksisterende språk er jeg derfor helt for at gjøres. For IT-verdenen utvikler seg i rasende fart, og veldig mange språk har overhodet ikke tilpasset seg dagens muligheter og trusler.