Return to search

Record Types in Scala: Design and Evaluation / Record-typer för Scala: Design och utvärdering

A record type is a data type consisting of a collection of named fields that combines the flexibility of associative arrays in some dynamically typed languages with the safety guarantees and possible runtime performance of static typing. The structural typing of records is especially suitable for handling semi-structured data such as JSON and XML making efficient records an attractive choice for high-performance computing and large- scale data analytics. It has proven difficult to implement record types in Scala however. Existing libraries suffer from either severe compile-time penalties, large runtime over- head, or other restrictions in usability such as poor IDE integration and hard-to-compre- hend error-messages. This thesis provides a systematic description and comparison of both existing and possible new approaches to records in Scala and Dotty, a new compiler for the Scala 3 language. A novel benchmarking suite is presented, built on top of the Java Microbench- mark Harness (JMH), for measuring runtime and compile-time performance of records running on the Java Virtual Machine and currently supporting Scala, Dotty, Java and Whiteoak. To achieve field access times comparable to nominally typed classes, it is conjectured that width subtyping has to be restricted to explicit coercion and a compilation scheme for such record types is sketched. For unordered record types with width and depth sub- typing however, hashmap-based approaches are found to have the most attractive run- time performance characteristics. In particular, Dotty provides native support for such an implementation using structural refinement types that might strike a good balance be- tween flexibility and runtime performance for records in the future. / En record-typ är en datatyp som består av en en uppsättning namngivna fält som kombinerarflexibiliteten hos associativa arrayer i vissa dynamiskt typade programmeringsspråkmed säkerhetsgarantierna och den potentiella exekveringshastigheten som fås av statisk typning. Records strukturella typning är särskilt väl lämpad för att hantera semistruktureraddata såsom JSON och XML vilket gör beräkningseffektiva records ett attraktivt val för högprestandaberäkningar och storskalig dataanalys. Att implementera records i programmeringsspråket Scala har dock visat sig svårt. Existerande bibliotek lider antingenav långa kompileringstider, långsam exekveringshastighet, eller andra problem med användbarheten såsom dålig integration med olika utvecklingsmiljöer och svårförståddafelmeddelanden. Den här uppsatsen ger en systematisk beskrivning och jämförelse av både existerandeoch nya lösningar för records i Scala och Dotty, en ny kompilator för Scala 3. Ett nyttbenchmarkingverktyg för att mäta exekveringshastigheten och kompileringstiden av recordssom körs på den virtuella Java maskinen presenteras. Benchmarkingverktyget ärbyggt på Java Microbenchmark Harness (JMH) och stöder i nuläget Scala, Dotty, Java ochWhiteoak. För att åstadkomma körtider som är jämförbara med nominellt typade klasser antasatt subtypning på bredden måste begränsas till explicita konverteringsanrop och enskiss till en kompileringsstrategi för sådana records presenteras.  För record-typer med ickeordnade fält och subtypning på bredden och djupet visar sig istället records baseradepå hashtabeller ha de mest attraktiva exekveringstiderna. Dotty tillhandahåller stöd fören sådan implementation med strukturella förfiningstyper som kan komma att träffa enbra balans mellan flexibilitet och exekveringshastighet för records i framtiden.

Identiferoai:union.ndltd.org:UPSALLA1/oai:DiVA.org:kth-211048
Date January 2017
CreatorsKarlsson, Olof
PublisherKTH, Skolan för datavetenskap och kommunikation (CSC)
Source SetsDiVA Archive at Upsalla University
LanguageEnglish
Detected LanguageSwedish
TypeStudent thesis, info:eu-repo/semantics/bachelorThesis, text
Formatapplication/pdf
Rightsinfo:eu-repo/semantics/openAccess

Page generated in 0.0018 seconds