Kampa: from a prototype to practical usability
Kampa: od prototypu k praktické použitelnosti
diplomová práce (OBHÁJENO)
Zobrazit/ otevřít
Trvalý odkaz
http://hdl.handle.net/20.500.11956/184126Identifikátory
SIS: 244099
Kolekce
- Kvalifikační práce [11241]
Autor
Vedoucí práce
Oponent práce
Petříček, Tomáš
Fakulta / součást
Matematicko-fyzikální fakulta
Obor
Informatika - Softwarové systémy
Katedra / ústav / klinika
Katedra distribuovaných a spolehlivých systémů
Datum obhajoby
6. 9. 2023
Nakladatel
Univerzita Karlova, Matematicko-fyzikální fakultaJazyk
Angličtina
Známka
Výborně
Klíčová slova (česky)
návrh programovacích jazyků|programovací jazyk Kampa|silně typované jazykyKlíčová slova (anglicky)
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