Publicação

Shared Channels on Context-free Session Types

Ver documento

Detalhes bibliográficos
Resumo: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.
Autores principais:Barros, Diogo Filipe da Paz de
Assunto:tipos de sessão canais partilhados linguagens de programação programação concurrente Teses de mestrado - 2023
Ano:2023
País:Portugal
Tipo de documento:dissertação de mestrado
Tipo de acesso:acesso aberto
Instituição associada:Universidade de Lisboa
Idioma:inglês
Origem:Repositório da Universidade de Lisboa
Descrição
Resumo: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.