| Nome: | Descrição: | Tamanho: | Formato: | |
|---|---|---|---|---|
| 970.19 KB | Adobe PDF |
Autores
Orientador(es)
Resumo(s)
In an evermore connected world, communication is key. Communication is found at
a very large scale in distributed systems and global networks, but also on a smaller scale
in parallel execution on our computers’ processors. As technology progresses, communication becomes more complex, more structured. We now have complex protocols that
guide communication with a strict set of rules. Common knowledge tells us that for each
line of code we write we possibly introduce a new bug, and the more complex the logic
is, the more probable it is to happen. Thus, it is only logical that nowadays, software is
more prone to communication-related bugs than ever.
Session types gave programmers the missing tools to ensure the correctness of communication. With session types, programmers can express protocols as types and attach
them to communication channels to guarantee the protocol is fulfilled. There have been
many implementations of session types, but programming languages have shown to be
the best due to their seamless integration of session types and primitives that empower
the programmer in a relatively simple syntax. FreeST is one of these languages and the
subject of this thesis.
However, FreeST’s use cases are held down by its limiting channels. FreeST’s channels only allow for one-to-one communication and therefore, patterns such as producerconsumer, client-server and thread pools are either impossible to implement or too restrictive to use. There is a world of use cases that depend on these patterns, and FreeST
can’t achieve its full potential until it supports them, or in other words, until it supports
one-to-many, many-to-one and many-to-many communication through its channels. Furthermore, FreeST’s connection with the real world is only done through simple prints, so
interaction with the user or with the file system is completely out of its scope.
In this thesis we extend FreeST with shared session types and channels so that we can
support all kinds of parallel and concurrent programming. We quickly make use of these
novel channels to create abstractions made available in FreeST’s standard library, and
more importantly, implement a more extensive suite of IO primitives. Standard IO can
be expressed through session types, and shared channels allow these to be shared among
many threads while still behaving the same way as traditional IO primitives. The cherry
on top of this thesis is file IO. Finally, FreeST is able to interact with its surroundings.
Descrição
Tese de mestrado, Engenharia Informática, 2022, Universidade de Lisboa, Faculdade de Ciências
Palavras-chave
tipos de sessão canais partilhados linguagens de programação programação concurrente Teses de mestrado - 2023
