Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer
20-talets högsta prioritet på språk - Säkerhet & Snabbhet
Jag har forskat lite bland språk då jag har kommit i kontakt med "C++ vs Rust" debatter dom senaste månaderna och sett lite statistik om vilka språk som är snabbast.
Jag brukar följa Dave's Garage på YouTube: https://www.youtube.com/watch?v=pSvSXBorw4A&ab_channel=Dave%2...
Han listar 5 snabbaste språken idag:
Zig
Rust
C
C++
Java
Han beskriver deras styrkor och syften. Han går inte in på deras nackdelar, då det är inte relevant. Men något som jag märker att han pratar mycket om är just säkerhet kring dessa språk. Java ska tydligen vara supersäkert att programmera i. C och C++ är inte alls säkra språk. Rust är mycket säkert. Jag kan inte uttala mig hur säkert Rust är, men jag har läst att Rust skapades för att vara säkert.
Men sedan finns det ett språk till som, enligt Dave's Garage, är det snabbaste språket. Det är Zig. Zig är tydligen en "kopia" på C++ fast med en säkerhet som Java och en snabbhet som C.
Jag började gräva djupare bland Zig och helt plötsligt så hittade jag "Zig VS Rust" debatter där Zig anses vara ett bättre språk.
Jag grävde ännu djupare och nu hittar jag "Carbon Vs Zig".
Det allt detta "VS" handlar om är just minnessäkerhet och snabbhet. Bara det. Inget annat.
Då tänkte jag, är inte detta just 20-talets framtida fokus på språk?
På 90-talet så skulle OOP vara högst prioriterat. Allt skulle vara en klass. på 00-talet så skulle allt kunna köras överallt, typ Python, Java, Matlab, C# osv. På 10-talet så skulle allt optimeras och nu så är säkerhet största fokus.
Vad tror ni? Kommer vi se ett språk som är så fasansfullt säkert att man knappt behöver skriva kod?
Övrigt så tycker jag Zig ser lovande ut. En relativ enklare syntax som är lätt att läsa, jämfört med Rust. Men jag vågar nog inte investera min tid varken i Zig eller Rust för att snart har vi säkerligen ett nytt språk som konkurrerar ut allt och alla...Vem vet?
Kommer vi se nya språk(inom kort) som är ännu säkrare och snabbare än Zig? Om svaret är Ja: Varför gör man inte ett språk som är så optimerat att det går inte optimera något mera?
Har läst på lite om Zig senaste två veckorna, så har bara skrapat på ytan än, men när det kommer till att vara det språk som man kan skriva "snabbast tänkbara kod" i har det visat sig att det är mer än bara varmluft!
I de mest grundläggande sakerna påminner syntaxen i Zig en hel del om Rust, men Zig-gänget ser sig helt som en modern version av C medan Rust kanske mer kan ses som en modern version av C++.
Likt C lyfter Zig fram egenskaper som
* "det är ett språk man kan lära sig på mycket kort tid". likt t.ex. Go, orsak: så man bara behöver debugga problemet, inte sina kunskaper i språket
* "no hidden control flow", "a=b+c" är verkligen bara en addition, det kan inte finnas gömda anrop genom att överlagra "=" och "+" (samt i C++ kan man även vara kreativ med implicit typomvandling...).
En trevlig sak är null pointer safety, även i de fall Rust kallar "unsafe" (även Rust har detta i "safe Rust"). (null är av sin skapare benämnt som "NULL: The Billion Dollar Mistake").
samt lite annat smått och gott.
Zig försöker inte göra det Rust åstadkommer med sin borrow-checker, man ur en viss synvinkel lägre satta krav på "säkerhet" men ur andra högre satta krav. Det finns saker som är svårt/omöjligt att göra inom ramen av "safe Rust", Zig verkar ha som mål att inte ha specialfall får något relevant fall för t.ex. mikrokontrollers, OS-kärnor etc men ändå vara långt säkrare än C och C++.
Sedan till prestanda: idiomatisk Zig kan i vissa lägen producera maskinkod som är (något) snabbare än C/C++/Rust, en orsak är att man bl.a. definierar alla former av overflow som "undefined behavior". C/C++/Rust har alla väldefinierad aritmetik med "unsigned" medan C och C++ har "signed" overflow som UB.
Finns en del extra optimeringar kompilatorn kan göra i vissa lägen i Zig p.g.a. Vill man ha väldefinierad hantering av overflow i Zig går det både för signed och unsigned, finns speciella operatorer för det.
Men den stora saken är att hantering av SIMD är en first-class citizen i Zig. LLVM (kompilatorinfrastrukturen som Rust standardkompilatorn använder, som C/C++ kompilatorn Clang använder, Swift kompilatorn använder m.fl.) har väldigt avancerad hantering av SIMD. Bl.a. Intel har lagt en hel del krut på detta via deras ISPC projekt (en C variant som påminner om Nvidias CUDA), även Nvidia/AMD har jobbat med LLVM då de använder tekniken för deras GPUer.
Semantiken i grundspråken C, C++ och även Rust gör det relativt svårt för en kompilator att använda SIMD mer än väldigt sporadisk, det blir inte i närheten samma nivå som t.ex. med ISPC.
Det ISPC gör för CPUer är i praktiken en grundläggande den av Zig. Några saker det medför är:
* problem som är data-parallella kan kodas i ett sätt med Zig som gör det trivialt för en kompilator att generera väldigt effektiv SIMD kod när man bygger för en CPU som har SIMD-stöd, samtidigt som koden fortfarande blir effektiv och gör rätt saker även man t.ex. bygger för en 8 bit AVR (populär CPU för mikrokontrollers)
* man kan utnyttja SIMD fullt ut utan att behöva dra till med specifika för x86/x86_64 eller ARM64 eller OS-specifika saker.
Ett område där Zig känns som handen-i-hansken är spel! Dels p.g.a. SIMD-hanteringen men också då spelmotorer ofta har behov av custom-minneshanterare, Zigs standardbibliotek är designat så att allt som arrayer, hashmaps, ja allt, inte förutsätter något kring minnesallokering utan de tar en allokator som argument.
Även WebASM har nytta av detta då minneshanteringen där är "speciell" och har ofta svårt att samarbete bra med standardbiblioteken i de flesta andra språk.
Är det en given succé? Knappast, är rätt tuff konkurrens att bli en relevant språk. Men Zig har i alla fall ett par rätt trevliga egenskaper och det är (i nuläget) "bäst" på ett par saker. Blir spännande att följa språket fram till 1.0 (årets Advent of Code språk är nog hittat för min del )!
Har läst på lite om Zig senaste två veckorna, så har bara skrapat på ytan än, men när det kommer till att vara det språk som man kan skriva "snabbast tänkbara kod" i har det visat sig att det är mer än bara varmluft!
I de mest grundläggande sakerna påminner syntaxen i Zig en hel del om Rust, men Zig-gänget ser sig helt som en modern version av C medan Rust kanske mer kan ses som en modern version av C++.
Likt C lyfter Zig fram egenskaper som
* "det är ett språk man kan lära sig på mycket kort tid". likt t.ex. Go, orsak: så man bara behöver debugga problemet, inte sina kunskaper i språket
* "no hidden control flow", "a=b+c" är verkligen bara en addition, det kan inte finnas gömda anrop genom att överlagra "=" och "+" (samt i C++ kan man även vara kreativ med implicit typomvandling...).
En trevlig sak är null pointer safety, även i de fall Rust kallar "unsafe" (även Rust har detta i "safe Rust"). (null är av sin skapare benämnt som "NULL: The Billion Dollar Mistake").
samt lite annat smått och gott.
Zig försöker inte göra det Rust åstadkommer med sin borrow-checker, man ur en viss synvinkel lägre satta krav på "säkerhet" men ur andra högre satta krav. Det finns saker som är svårt/omöjligt att göra inom ramen av "safe Rust", Zig verkar ha som mål att inte ha specialfall får något relevant fall för t.ex. mikrokontrollers, OS-kärnor etc men ändå vara långt säkrare än C och C++.
Sedan till prestanda: idiomatisk Zig kan i vissa lägen producera maskinkod som är (något) snabbare än C/C++/Rust, en orsak är att man bl.a. definierar alla former av overflow som "undefined behavior". C/C++/Rust har alla väldefinierad aritmetik med "unsigned" medan C och C++ har "signed" overflow som UB.
Finns en del extra optimeringar kompilatorn kan göra i vissa lägen i Zig p.g.a. Vill man ha väldefinierad hantering av overflow i Zig går det både för signed och unsigned, finns speciella operatorer för det.
Men den stora saken är att hantering av SIMD är en first-class citizen i Zig. LLVM (kompilatorinfrastrukturen som Rust standardkompilatorn använder, som C/C++ kompilatorn Clang använder, Swift kompilatorn använder m.fl.) har väldigt avancerad hantering av SIMD. Bl.a. Intel har lagt en hel del krut på detta via deras ISPC projekt (en C variant som påminner om Nvidias CUDA), även Nvidia/AMD har jobbat med LLVM då de använder tekniken för deras GPUer.
Semantiken i grundspråken C, C++ och även Rust gör det relativt svårt för en kompilator att använda SIMD mer än väldigt sporadisk, det blir inte i närheten samma nivå som t.ex. med ISPC.
Det ISPC gör för CPUer är i praktiken en grundläggande den av Zig. Några saker det medför är:
* problem som är data-parallella kan kodas i ett sätt med Zig som gör det trivialt för en kompilator att generera väldigt effektiv SIMD kod när man bygger för en CPU som har SIMD-stöd, samtidigt som koden fortfarande blir effektiv och gör rätt saker även man t.ex. bygger för en 8 bit AVR (populär CPU för mikrokontrollers)
* man kan utnyttja SIMD fullt ut utan att behöva dra till med specifika för x86/x86_64 eller ARM64 eller OS-specifika saker.
Ett område där Zig känns som handen-i-hansken är spel! Dels p.g.a. SIMD-hanteringen men också då spelmotorer ofta har behov av custom-minneshanterare, Zigs standardbibliotek är designat så att allt som arrayer, hashmaps, ja allt, inte förutsätter något kring minnesallokering utan de tar en allokator som argument.
Även WebASM har nytta av detta då minneshanteringen där är "speciell" och har ofta svårt att samarbete bra med standardbiblioteken i de flesta andra språk.
Är det en given succé? Knappast, är rätt tuff konkurrens att bli en relevant språk. Men Zig har i alla fall ett par rätt trevliga egenskaper och det är (i nuläget) "bäst" på ett par saker. Blir spännande att följa språket fram till 1.0 (årets Advent of Code språk är nog hittat för min del )!
Det finns ett annat relativt nytt språk som har lite liknande ambitioner (C ersättare). https://odin-lang.org/
Det finns ett annat relativt nytt språk som har lite liknande ambitioner (C ersättare). https://odin-lang.org/
Har du någon erfarenhet av Odin?
Läste på lite snabbat om språket, det verkar ju skapat ungefär samtidigt som Zig. Det är skapat av Ginger Bill (är det hans riktiga namn?) som bl.a. är spelprogrammerare.
Men verkar som Odin inte alls fått samma fart som Zig, ser ut som det är långt färre som hjälper till där och om jag förstod det hela rätt kör man med transpiling till C, i stället för som Zig ha en native-implementation med kompilatorn.
Ett mål med Odin är att inte binda det hårt till LLVM, Zig har gjort det omvända och gått "all-in" med LLVM. Ett ställe man ser detta är prestanda, i nuläget verkar likvärdiga program skrivna i Zig vara rätt mycket snabbare än motsvarande i Odin (t.ex. Benchmark Game för respektive språk).
Nu är båda dessa språk väldigt unga, ingen har nått 1.0 än. I nuläget verkar Odin ha lite mer uppförsbacke då det inte nått lika långt, samtidigt har de stora överlapp i att båda har väldigt enkel/effektiv integration mot C, båda siktar på att vara en modern variant av C, d.v.s. snabba, effektiva, men fortfarande enkla språk med manuell minneshantering.
Får lägga upp Odin på listan över saker "att undersöka vidare i framtiden". Saker kan ju hända, sannolika för de flesta språk är att typ "ingen" bryr sig. Men kan också ta fart rätt vad det är, som Rust som nu hittat in både i Linux och Windows kernel vilket lär garantera att det språket kommer hänga med ett bra tag framåt.
Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer
Har du någon erfarenhet av Odin?
Läste på lite snabbat om språket, det verkar ju skapat ungefär samtidigt som Zig. Det är skapat av Ginger Bill (är det hans riktiga namn?) som bl.a. är spelprogrammerare.
Men verkar som Odin inte alls fått samma fart som Zig, ser ut som det är långt färre som hjälper till där och om jag förstod det hela rätt kör man med transpiling till C, i stället för som Zig ha en native-implementation med kompilatorn.
Ett mål med Odin är att inte binda det hårt till LLVM, Zig har gjort det omvända och gått "all-in" med LLVM. Ett ställe man ser detta är prestanda, i nuläget verkar likvärdiga program skrivna i Zig vara rätt mycket snabbare än motsvarande i Odin (t.ex. Benchmark Game för respektive språk).
Nu är båda dessa språk väldigt unga, ingen har nått 1.0 än. I nuläget verkar Odin ha lite mer uppförsbacke då det inte nått lika långt, samtidigt har de stora överlapp i att båda har väldigt enkel/effektiv integration mot C, båda siktar på att vara en modern variant av C, d.v.s. snabba, effektiva, men fortfarande enkla språk med manuell minneshantering.
Får lägga upp Odin på listan över saker "att undersöka vidare i framtiden". Saker kan ju hända, sannolika för de flesta språk är att typ "ingen" bryr sig. Men kan också ta fart rätt vad det är, som Rust som nu hittat in både i Linux och Windows kernel vilket lär garantera att det språket kommer hänga med ett bra tag framåt.
Det har jag inte, men när du nämnde att du troligtvis hade hittat årets språk för AoC så tänkte jag bara göra dig uppmärksam om ytterligare ett C alternativ
Som du säger, det återstår att se om språket får någon kritisk massa.
- Idag Meta Quest 3 lanseras den 10 oktober 41
- Idag Samsungs minnesmoduler gör bärbara datorer enklare att uppgradera 12
- Idag Intel "Meteor Lake" blir inget alternativ för hemmabyggda datorer 22
- Igår Nya strömkontakten "12V-2x6" säkrare än 12VHPWR i test 34
- Igår Testpilot: Phanteks NV5 – plånboksvänligt alternativ med dubbelsidig glasdesign 10
- Komplett Geek Week och Bonanza 8 - Diskussion168
- Microsoft vill driva datacenter med kärnkraft281
- Apple överraskar med tidigt släpp av Mac OS Sonoma43
- Användare får betalt för sina Reddit-inlägg41
- ShikakuOfThe.Day - Dagliga shikaku pussel1274
- Counter-Strike 2225
- Dagens fynd — Diskussionstråden46249
- Meta Quest 341
- Beredskapsveckan - klarar du dig i 7 dagar utan el?48
- Wordle på svenska - ordlig.se6593
- Köpes söker 3070/3070ti/3080 eller motsvarande
- Säljes O11-dynamic Vit plus fläktar
- Säljes Iphone 13 Pro Green 128GB
- Säljes MSI GeForce GTX 1080 GAMING X 8GB
- Köpes Köper dator asap
- Säljes Acer predator X34A - 34" 21:9 ultrawide
- Säljes Dator utan grafikkort
- Säljes Fractal Design Define 7 TG (svart)
- Säljes Nintendo Switch (day one) - Moddad (Läs hela annonsen!)
- Säljes Faokze Hot Air 700 W
- Meta Quest 3 lanseras den 10 oktober41
- Användare får betalt för sina Reddit-inlägg41
- Samsungs minnesmoduler gör bärbara datorer enklare att uppgradera12
- Veckans fråga: Hur mycket mobildata använder du i månaden?66
- Tävla inför Komplett Bonanza Live – Tema enklare smarta hem168
- Nvidias VD: "Ingen kan bära fler kaffekoppar än jag"28
- Intel "Meteor Lake" blir inget alternativ för hemmabyggda datorer22
- Apple överraskar med tidigt släpp av Mac OS Sonoma43
- Gen Z mer lättlurade på nätet än ”boomers”90
- Nya strömkontakten "12V-2x6" säkrare än 12VHPWR i test34
Externa nyheter
Spelnyheter från FZ
- Ubisoft om molnrättigheterna till Activisions spel: "När det tar fart kommer det gå snabbt" idag
- Warcraft leds numer av superveteranen Chris Metzen idag
- Fiendeskeppen i Starfield var för smarta, behövde göras "riktigt dumma" idag
- Phantom Liberty tekniktestat på konsoler: "Cyberpunk 2077 har kommit en bra bit" idag
- Horizon Forbidden West + expansion till pc nästa år idag