Nashorn is a JavaScript engine that compiles JavaScript source code to Java bytecode and executes it on a Java Virtual Machine. The new bytecode in-struction invokedynamic that was introduced in Java 7 to make it easier for dynamic languages to handle linking at runtime is used frequently by Nashorn. Nashorn also has a type system that optimizes the code by using primitive bytecode instructions where possible. They are known to be the fastest imple-mentations for particular operations. Either types are proved statically or a method called optimistic type guess-ing is used. That means that expressions are assumed to have an int value, the narrowest and fastest possible type, until that assumption proves to be wrong. When that happens, the code is deoptimized to use types that can hold the current value. In this thesis a new architecture for Nashorn is presented that makes Nashorn’s type system reusable to other dynamic language implementations. The solution is an intermediate representation very similar to bytecode but with untyped instructions. It is referred to as Nashorn bytecode in this thesis. A TypeScript front-end has been implemented on top of Nashorn’s cur-rent architecture. TypeScript is a language that is very similar to JavaScript with the main difference being that it has type annotations. Performance mea-surements which show that the type annotations can be used to improve the performance of the type system are also presented in this thesis. The results show that it indeed has an impact but that it is not as big as anticipated. / Nashorn är en JavaScriptmotor som kompilerar JavaScriptkod till Java bytekod och exekverar den på en Java Virtuell Maskin. Nashorn använder sig av den nya bytekodinstruktionen invokedynamic som introducerades i Java 7 för att göra det lättare för dynamiska språk att hantera dynamisk länkning. I Nashorn finns ett typsystem som optimerar koden genom att i så stor utsträckning som möjligt använda de primitiva bytekodinstruktioner som är kända för att vara de snabbaste implementationerna för specifika operationer. Antingen bevisas typen för ett uttryck statiskt om det är möjligt eller så används något som kallas för optimistisk typgissning. Det innebär att uttrycket antas ha typen int, den kompaktaste och snabbaste typen, ända tills det antagandet visar sig vara falskt. När det händer deoptimeras koden med typer som kan hålla det nuvarande värdet. I det här dokumentet presenteras en ny arkitektur för Nashorn som gör det möjligt för andra dynamiska språk att återanvända Nashorns typsystem för bättre prestanda. Lösningen är en intermediate representation som påminner om bytekod men som är uttökat men otypade instruktioner. I det här doku-mentet refereras den som Nashorn bytekod. En TypeScript front-end har implementerats ovanpå Nashorns nuvaran-de arkitektur. TypeScript är ett språk som liknar JavaScript på många sätt, den största skillnaden är att det har typannoteringar. Prestandamätningar som visar att typannoteringarna kan användas för att förbättra prestandan av Nashorns typsystem presenteras i det här dokumentet. Resultaten visar att typannoteringar kan användas för att förbättra prestandan men de har inte så stor inverkan som förväntat.
Identifer | oai:union.ndltd.org:UPSALLA1/oai:DiVA.org:kth-175443 |
Date | January 2015 |
Creators | Gabrielsson, Andreas |
Publisher | KTH, Skolan för datavetenskap och kommunikation (CSC) |
Source Sets | DiVA Archive at Upsalla University |
Language | English |
Detected Language | Swedish |
Type | Student thesis, info:eu-repo/semantics/bachelorThesis, text |
Format | application/pdf |
Rights | info:eu-repo/semantics/openAccess |
Page generated in 0.002 seconds