25. Oktober 2023
IronRuby
Her til aften fik jeg den skøre idé at afprøve, om man kunne få hastighedsforbedringer af at køre Mastodon på enten JRuby eller IronRuby. Fortolkede sprog som Ruby (CRuby) er ret sløve, så man kan få et performanceboost ved at smide koden igennem en virtuel maskine (Java: JVM, .NET: CLR/DLR), der konverterer koden til bytekode og afvikler den.
Mastodon er skrevet med frameworket Ruby on Rails - desværre virker JRuby ikke med det projekt, og IronRuby er flere generationer bagud. Det er lidt skægt, for det lignende IronPython-projektet sprudler og vedligeholdes stadig. Jeg har studeret Rubys syntaks og jeg synes umiddelbart, det er et sjovt og lettilgængeligt sprog. Så det undrer mig lidt, at det ikke får samme opmærksomhed som IronPython-projektet.
Jeg brugte godt og vel en times tid på IronRuby-projektet, og fik det til compile med Mono-compileren (v6.12 på Linux) via MSBuild. Det var som standard sat op med xbuild, som jeg mener er en ældre Mono-builder. Hvis du prøver at compile projektet, så vil du formentlig få en build-fejl, der siger, at den ikke kan finde gmcs. Det er en “deprecated” Mono-kompiler. Du kan udbedre fejlen ved at symlinke ‘gmcs’ til ‘mcs’, som er den seneste Mono-compiler.
IronRuby kommer dog næppe til at drive Mastodon lige med det samme. IronRuby 1.1 er kompatibel med Ruby 1.9 og der er langt op til version 3.2, så der er formenlig sket en masse under motorhjelmen i tiden, der er gået. Jeg kiggede i changeloggen og skyndte mig ud igen.. hehe.
Så altså ingen succes med at få det til at køre sådan lige. Men IronRuby-projektet i sig selv er en interessant disciplin ud i code generation, så jeg vil studere koden for at lære mere. Det kunne være interessant, hvis jeg kunne få større Ruby-apps til at køre på Mono. Jeg er lidt træt af at se folk disse dynamiske sprog som værende langsomme. Og realistisk set vil Mastodon nok komme til at kræve et speed boost på de største instanser. I de tidlige Twitter-år, så vi “FailWhale” ret ofte, og jeg husker netop at Twitter gik fra Ruby til Scala på Javas VM.
Back to business
Jeg prøvede at kompile IronRuby under .NET Core… Det var totalt no-go, alt for mange compilerfejl. Jeg ved ikke nok om .NET Core rent arkitektonisk ift. .NET Frameworket, men der har ikke været meget snak omkring support for dynamiske sprog, så jeg antager, at konceptet er droppet.. (fremtids-Simon: Nope, IronPython-projektet har the goodies, så jeg kigger derover, de anbefaler dog stadig det gamle .NET Framework)
Det ville kræve større for tilpasning af projektet end de småtterier, jeg allerede har lavet. Så her viser Mono-projektet styrken ved at være bagudkompatibel med .NET 2.0-4.5. Og det viser, at det er absolut nødvendigt med den slags open-source projekter. Så kæmpe thumbs up og street credit til dem, der stadig arbejder på projektet.
Links:
Mit IronRuby repository