Å skrive effektive algoritmer kan ha enormt mye å si for ytelsen til et program. Men hvor effektiv kode er det mulig å skrive – og hvilket programmeringsspråk lønner det seg å skrive koden i hvis du vil gjøre virkelig vei i vellinga?
Den tyske utvikleren Gunnar Morling la nylig ut en konkurranse på bloggen sin som han kalte "One Billion Row Challenge". Det skriver DevClass.
I konkurransen ber han utviklere om å skrive et program i Java som henter ut temperaturdata fra en fil med 1 milliard linjer og så regner ut minimum-, maksimum- og gjennomsnittstemperatur for hver by.
📢 "The One Billion Row Challenge"
— Gunnar Morling 🌍 (@gunnarmorling) January 1, 2024
How fast can YOU aggregate 1B rows using modern #Java? Grab your threads, flex your SIMD, and kick off 2024 true coder style by joining this friendly little competition. Submissions accepted until Jan 31.
👉 https://t.co/qIYfqb1ugF pic.twitter.com/vChzxci3Me
Bidragene begynte raskt å strømme inn, og etter hvert begynte det også å komme inn bidrag i andre programmeringsspråk enn Java.
Derfor har Morling også laget et eget Github-repo der folk kan dele sine kodeforslag i andre språk. Det har til nå kommet inn forslag i blant annet Go, Rust, C, C++, Python, C# og PostgreSQL.
Hvor raskt er egentlig Java?
Selv om konkurransen handler om å lage den raskeste algoritmen i Java innen 31. januar, har konkurransen skapt en masse debatt på blant annet Hacker News og Reddit om også andre programmeringsspråk.
Der diskuterer utviklere alt fra hva som er den mest effektive algoritmen til hvordan kode kan kjøres i parallell og tekniske finurligheter.
Morlin kjører alle Java-kodeforslagene i en skybasert VM med 8 dedikerte vCPU-er og 32 GB RAM. I skrivende stund er det utvikleren Sam Pullara som leder med 12,063 sekunder.
Det er temmelig mye raskere enn Morlings egen veldig grunnleggende algoritme som han har laget for at andre kan bruke som målestokk. Morlings algoritme brukte 4 minutter og 13,449 sekunder.
De raskeste språkene
Kodeforslagene som har kommet inn med andre programmeringsspråk enn Java er som nevnt ikke en del av konkurransen, og det er vanskelig for oss å sammenligne ytelsen siden koden er kjørt på ulik maskinvare.
DevClass skriver at det likevel er noen temmelig imponerende resultater, blant annet en C-løsning som kjører på en AMD-laptop på under 5 sekunder, og en C#-løsning som kjører på 5,3 sekunder på en Core i5-12500-PC med 6 kjerner.
Så hvilket språk er egentlig raskest? En annen utvikler ved navn attractivechaos har lagt ut benchmarks for 25 ulike språk og kjøremiljøer som kan gi en pekepinn:
Ifølge DevClass er målet å teste ytelsen til selve språket, uten noen biblioteker. Disse testene har altså ikke noe med One Billion Row Challenge å gjøre, men utvikleren som har laget oversikten har kjørt fire forskjellige ytelsestester (nqueens, matmui, sudoku og bedcov – mer info her.)
Utvikleren som har laget ytelsestestene koder for det meste i C selv, og innrømmer at noen av implementasjonene hans ikke nødvendigvis er optimale.
I testene går det blant annet frem at godt optimaliserte språk med AOT-kompilering ("ahead-of-time") kan ha svært god ytelse. Språk som C#, Go, Swift og Zig har for eksempel nesten like god ytelse som C i en av benchmarkene. Mens i Sudoku-testen var C og Rust dobbelt så raskt som C# og Java.
Av fire testede JavaScript-kjøremiljøer var Bun raskest og Deno tregest.