Derfor skifter chat-appen Discord Go ud med Rust

Illustration: Pixabay.com-bruger terimakasih0
Discord, som anvendes af millioner af gamere, udskifter dele af sin infrastruktur kodet i Go med nye services kodet i Rust. Læs hvorfor.

Discord-appen er med omkring 250 millioner brugere en af de mest populære messaging-platforme, og den har især fundet indpas blandt gamere.

Meget af den bagvedliggende infrastruktur er kodet i det relativt nye programmeringssprog Go fra 2009, som er det programmeringssprog som flest udviklere ønsker at lære.

For nylig blev nogle af de bagvedliggende Go-services for Discord dog erstattet med services skrevet i et andet nyere programmeringssprog, nemlig Rust som er fra 2010.

Automatisk memory-oprydning med forsinkelser

Det er den ansvarlige for Discords infrastruktur, Jesse Howarth, der i en detaljeret blog fortæller om årsagen til at udskifte Go med Rust.

Go anvender ligesom Java en 'garbage collector' til løbende at rydde op i et programs memory, og det kan skabe forsinkelser, fordi processoren skal bruge tid på at gennemløbe memory for datastrukturer, som ikke længere anvendes af et program.

Oprydning hvert andet minut

I Discord er der en service, Read States, der holder øje med, hvilke beskeder på hvilke kanaler en bruger har læst. Servicen bliver brugt hver eneste gang, en bruger logger på Discord, hver eneste gang der sendes en besked, og hver eneste gang der læses en besked.

Det er derfor en service der anvendes meget ofte med millioner af brugere og beskeder og følgelig skal servicens performance være god. Discord-udviklerne havde da også været meget omhyggelige med at skrive optimeret Go-kode, men alligevel kunne de konstatere, at hvert andet minut var der et kraftigt forøget CPU-forbrug og en forsinkelse i form af latency.

Det skyldtes, at Go's garbage collector som minimum aktiveres hvert andet minut, uanset om der løbende er blevet allokeret og deallokeret meget eller lidt memory. Udviklerne forsøgte at optimere hukommelsesoprydningen på forskellig vis, men det lykkedes ikke at undgå irriterende periodiske forsinkelser.

Dansk baggrund for Rusts memory-håndtering

Udviklerne tog derfor et kig på Rust, som gennem de seneste år er blevet kåret som det mest elskede programmeringssprog i StackOverflows årlige undersøgelse, ligesom Microsoft er begyndt at se nærmere på sproget som fremtidens systemprogrammeringssprog .

Rust har en anden tilgang til memoryhåndtering end Go, og den tilgang er blandt andet inspireret af den tidligere ITU-rektor Mads Toftes arbejde med hukommelsesadministration.

»Et af de centrale koncepter i Rust kommer fra Mads Tofte. Region inference, som er programanalyse og hukommelsesadministration, udviklede han sammen med Jean-Pierre Talpin,« har Peter Sestoft, professor på IT-Universitetet sagt til Version2.

Rust anvender konceptet memory-ejerskab, hvor der holdes styr på, hvem der kan læse og skrive til memory, så memory kan frigives øjeblikkeligt, når det ikke længere bruges af et program. Det overflødiggør anvendelse af en garbage collector og gjorde, at Rust var mere velegnet end Go til at sikre en konstant god performance for Read States-servicen.

Jesse Horwarth skriver, at det ikke betyder at man hovedkulds skal kaste sig ud i at omskrive alting i Rust, men i dette tilfælde gav det mening for Discord-udviklerne.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Følg forløbet
Kommentarer (0)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Log ind eller Opret konto for at kommentere