Funktsionaalse programmeerimiskeele liigisüsteem

Date

2018

Journal Title

Journal ISSN

Volume Title

Publisher

Abstract

Staatilised tüübisüsteemid võimaldavad leida programmidest teatud vigu juba enne koodi käivitamist ja aitavad seega kaasa töökindlama koodi kirjutamisele. Paljud funktsionaalsed keeled, näiteks Haskell ja Idris, on staatiliselt tüübitud.Mida väljendusrikkam on keele tüübisüsteem, seda rohkem vigu on võimalik juba tüübikontrolli ajal leida. Osad keeled, näiteks Idris, kasutavad sõltuvaid tüüpe, mis muudavad tüübisüsteemi võimsaks, aga ka keeruliseks. Hiljuti Haskellis sisse toodud edutamine tõstab tüübisüsteemi väljendusrikkust ilma sõltuvate tüüpideta, võimaldades tüübitaseme andmeid, näiteks tüübitaseme naturaalarvusid ja liste. Koos üldistatud algebraliste andmetüüpidega laseb edutamine programmeerijal konstrueerida kasulikke andmestruktuure, näiteks staatilise pikkusega vektoreid ning üldistatud ennikuid.Käesoleva töö eesmärgiks oli arendada staatiliselt tüübitud funktsionaalne programmeerimiskeel, mille tüübisüsteemi on rikastatud edutamise abil. Tulemuseks olev keel Awful näitab, et edutamise teel saadud liikidele ja tüüpidele on palju kasulikke rakendusi ka keeles, milles puuduvad üldistatud algebralised andmetüübid.Awful kasutab üldistatud algebraliste andmetüüpide abil piiravamat aga oluliselt lihtsamat uut andmetüüpide konstrueerimise viisi. Hargnevad andmetüübid võimaldavad konstrueerida paljusid kasulikke struktuure, näiteks staatilise pikkusega vektoreid, mille jaoks Haskellis või Idrises kasutataks üldistatud algebralisi andmetüüpe.
Static type systems find some classes of bugs before the program is run, thereby assisting in writing safer code. Many functional languages, for example, Haskell and Idris, are statically typed.The more expressive a language's type system is, the more bugs can be found during type checking. Some languages, for example, Idris, use dependent types, which result in an expressive albeit complex type system. Promotion, which has been recently introduced in Haskell, improves the expressiveness of the type system without resorting to dependent types by endowing the language with type level data, like type level natural numbers and lists. Together with generalised algebraic data types it allows the programmer to construct, for example, statically sized vectors and tuples of arbitrary length.The aim of this work was to develop a statically typed functional language with a type system that has been enriched via promotion. The language which is the result of this work, Awful, shows that promoted kinds and types have many useful applications even in a language that does not have generalised algebraic data types.Instead of generalised algebraic data types Awful employs a more restrictive but also considerably simpler new way of constructing new data types. Branching data types enable construction of many useful data structures, like statically sized vectors, for which we would use generalised algebraic data types in Haskell or Idris.

Description

Keywords

Citation