Ok tack för förklaringen! Jag trodde först att ett språk skapades för att i grunden använda JVM. Det är mer en feature som språket använder om jag förstått rätt nu. Men om man nu har det tillgängligt på så många plattformar (webb, server, applikation etc.), förlorar man inte prestanda då? Eller ger det bara fördelar?
I teori finns det ingenting som säger att prestandan måste bli lidande av att kompilera till en "plattform", men sanningen är mycket mer nyanserad.
Om Kotlin kompileras till Javascript — en process som kallas transpilation — beror prestandan direkt på hur bra kompilatorn är på att omvandla Kotlin till Javascript, samt den plattform som kör den resulterande Javascript-koden. Den slutgiltiga plattformen kan vara exempelvis V8 som Chrome använder sig av för att köra javascript på webbsidor.
När Kotlin istället kompileras till bytecode omvandlas koncept som bara återfinns i Kotlin till instruktioner för JVM:en. Detta kan innebära att en rad kod blir femton instruktioner i bytecode. Samma sak görs för Java och andra språk, men Java är "närmst" bytecode så ofta är omvandlingen naturligare där. Detta i sig innebär inte att Kotlin är dömt att vara mindre effektivt än Java, då en rad Kotlin kan ersätta flera rader Java: Kotlins kompilator optimerar för effektiv bytecode på samma sätt som en C-kompilator optimerar för att ge så effektiv maskinkod som möjligt.
I slutändan beror prestandan på hur JVM:en är implementerad: Då det rör sig om en virtuell maskin som ansvarar för att omvandla bytecode till processorinstruktioner som den underliggande hårdvaran förstår sig på. Även här görs en mängd optimeringar, och avancerade virtuella maskiner så som Oracles JRE eller Azul Zing ger ofta prestanda som kan mäta sig med optimerad C.
Jag är inte säker på hur moget Kotlin native är och hur de har löst garbage collection och liknande problem, men en möjlig lösning är att koden kompileras till maskinkod och en GC inkluderas i det slutgiltiga resultatet. Uppstartstider tenderar att bli bättre än motsvarande JVM-lösning medan garbage collecting är ett typiskt svårt problem att få bättre då Sun/Oracle lagt åtskilliga utvecklingsår på den biten för JVM:en.
Sammanfattningsvis är frågan svår att besvara — vet inte ens om jag förstod dig rätt till att börja med :). Vanligtvis behöver man inte oroa sig för eventuella prestandaproblem, och om de ändå uppstår brukar man analysera vilken del av koden som är långsam och försöka skriva om den mer effektivt.
Program skrivna i språk som kompilerar till bytecode brukar oavsett vara långt (10x till 100x) snabbare än motsvarande program skrivna i exempelvis PHP eller Ruby.