Kampa: from a prototype to practical usability
Kampa: od prototypu k praktické použitelnosti
diploma thesis (DEFENDED)
View/ Open
Permanent link
http://hdl.handle.net/20.500.11956/184126Identifiers
Study Information System: 244099
Collections
- Kvalifikační práce [11241]
Author
Advisor
Referee
Petříček, Tomáš
Faculty / Institute
Faculty of Mathematics and Physics
Discipline
Computer Science - Software Systems
Department
Department of Distributed and Dependable Systems
Date of defense
6. 9. 2023
Publisher
Univerzita Karlova, Matematicko-fyzikální fakultaLanguage
English
Grade
Excellent
Keywords (Czech)
návrh programovacích jazyků|programovací jazyk Kampa|silně typované jazykyKeywords (English)
programming language design|Kampa programming language|strongly typed languagesKampa je experimentální všeobecný imperativní programovací jazyk s prvky funkcionálního programování. Ačkoliv disponuje řadou potenciálně užitečných vlastností, jeho použitelnost je v tuto chvíli omezená nedokonalostmi implementace, ale i jazyka samotného. V této práci jsou odstraňovány tyto nedostatky. Je zlepšena expresivita jazyka přidáním podpory pro koprogramy (coroutines) a inferenci parametrů. Byly pozměněny některé detaily syntaxe s cílem vylepšit čitelnost. Zdokonalila se implementace odstraněním zdánlivě náhodných omezení, zejména co se týká generických a závislých typů, což (mimo jiné) umožní programátorům i knihovně definovat generické typy. Nakonec je názorně předvedena praktičnost jazyka na příkladu standardní knihovny zahrnující obecná dynamická pole, optional a nástroje pro asynchronní programování, psaní generátorů a práci s řetězci.
Kampa is an experimental general-purpose imperative programming language influ- enced by functional programming. While Kampa offers several potentially useful features, its usability is limited by some properties of its current implementation as well as of the language itself. We add support for coroutines and parameter inference, making the language more expressive. We also make changes to the syntax that improve code read- ability, in particular reducing the tendency to "line noise". We refine the implementation to remove several arbitrary restrictions regarding generic and dependent types, enabling generic type definitions (among others). Lastly, we demonstrate the practicality of the result by writing a library providing collections, optional, asynchronous programming, generators, and string utilities. 1