Logo do repositório
 
A carregar...
Miniatura
Publicação

Subtyping Context-Free Session Types

Utilize este identificador para referenciar este registo.
Nome:Descrição:Tamanho:Formato: 
TM_Gil_Silva.pdf1.21 MBAdobe PDF Ver/Abrir

Resumo(s)

Os tipos de sessão [51, 52, 94] permitem a especificação de protocolos de comunicação em canais bidirecionais e heterogéneos. Tipicamente, estas especificações incluem o tipo, direção e ordem das mensagens, bem como pontos de ramificação onde os participantes podem escolher como deve prosseguir a comunicação. Ao suportar tipos de sessão, as linguagens de programação conseguem oferecer mais segurança na programação concorrente, permitindo ao seu verificador de tipos assegurar a fidelidade das sessões (i.e., que a comunicação procede de acordo com o protocolo), a privacidade (i.e., que os canais de comunicação são conhecidos apenas pelos participantes) e a integridade da comunicação (i.e., que não há incompatibilidades resultantes da ordem e tipos das mensagens). Em certas formulações, também é possível assegurar que a comunicação nunca chega a um impasse [53]. Até recentemente, os tipos de sessão apenas permitiam a recursão terminal, e estavam, portanto, limitados à especificação de protocolos correspondentes a linguagens regulares (em particular, à união das linguagens regulares e ω-regulares). Esta classe de linguagens exclui muitos protocolos de interesse prático, sendo o exemplo mais típico a serialização de dados com estrutura de árvore num só canal. Os tipos de sessão livres de contexto, propostos por Thiemann e Vasconcelos [96], libertam os tipos de sessão desta restrição, permitindo a recursão não-terminal através de um operador de composição sequencial que forma um monóide com o elemento neutro Skip (um tipo que representa o protocolo vazio, i.e., sem ação). Tal como o nome indica, os tipos de sessão livres de contexto conseguem especificar protocolos correspondentes a linguagens livres de contexto (determinísticas e simples [62]), e são portanto consideravelmente mais expressivos que os tipos de sessão convencionais. Na sua busca pela fiabilidade, os tipos de sessão podem tornar a programação demasiado rígida para os programadores. A subtipagem, um aspeto central de muitos sistemas de tipos, procura aliviar a tensão entre a fiabilidade e a flexibilidade. É tipicamente justificada por um apelo ao princípio da substituição segura de Liskov [65]: um tipo T é considerado subtipo de U se um valor do tipo T puder ser usado no lugar de um valor do tipo U em qualquer contexto, sem violar as propriedades desejáveis do sistema de tipos em questão. O que significa dizer que um tipo de sessão livre de contexto é subtipo de outro? Uma possível resposta, seguindo o princípio de Liskov, pode ser encontrada no influente trabalho de Gay e Hole [42] sobre os tipos de sessão regulares: um tipo de sessão S é subtipo de R se um canal governado pelo tipo S puder ser usado em qualquer contexto onde é esperado um canal governado pelo tipo R. De forma mais concreta, a subtipagem para tipos de sessão permite uma maior flexibilidade nos tipos das mensagens trocadas e nas escolhas oferecidas aos participantes, sem comprometer as garantias mencionadas acima. Na prática, esta flexibilidade promove a modularidade no desenvolvimento de software concorrente: o protocolo de um participante pode ser refinado, mantendo intacto o do seu correspondente. Enquanto que propriedades algorítmicas da subtipagem para os tipos de sessão regulares são bem conhecidas (graças também ao trabalho de Gay e Hole), o mesmo não pode ser dito sobre os os tipos de sessão livres de contexto. Os maiores desafios neste sentido são as suas propriedades algébricas (identidade, associatividade, distributividade e absorção), a sua interpretação equirecursiva e a possibilidade de recursão não-terminal. A investigação de Padovani [82] sobre este tópico mostrou que o problema da subtipagem para estes tipos, quando formulado segundo os princípios clássicos de Gay e Hole, é indecidível—o preço habitual a pagar por mais expressividade. Apesar destes desafios, propomos duas abordagens à subtipagem para os tipos de sessão livres de contexto: uma sintática e baseada em regras de inferência, e outra semântica e apoiada numa nova noção de pré-ordem observacional a que chamamos de simulação-X YZW, uma generalização da noção de simulação-X Y proposta por Aarts e Vaandrager [1]. Esta relação permite uma combinação seletiva dos requisitos da simulação simples, simulação inversa e de uma certa forma de contra-simulação, o que lhe permite suportar a habitual covariância e contravariância dos construtores de tipos de sessão na sua plenitude (em contraste, a relação proposta por Padovani não permite qualquer variância nos tipos das mensagens). A equivalência dos tipos de sessão livres de contexto é baseada na noção de bissimulação [83], a qual a simulação-X YZW generaliza. Tirando partido deste facto, derivamos um algoritmo de subtipagem a partir de um algoritmo de equivalência já existente [5]. O nosso algoritmo é correto (i.e., as suas respostas afirmativas são verdadeiras) mas, devido à indecidibilidade do problema, necessariamente incompleto. Este algoritmo foi implementado no verificador de tipos da linguagem FREEST [2, 4, 95], uma linguagem de programação funcional com suporte para tipos de sessão livres de contexto. De forma a avaliar a sua performance, construímos um conjunto de 4000 testes, gerados automaticamente com a ajuda da biblioteca Quickcheck para a linguagem Haskell [22]. Obtivémos uma performance satisfatória, observando apenas 200 timeouts. Para uma avaliação mais realista, e de forma a comparar a nossa adaptação com o algoritmo original, corremos ambos os algoritmos lado-a-lado num conjunto de 288 programas FREEST sem subtipagem. Nesta avaliação não observamos diferenças significativas de performance, o que sugere que a aplicação prática do nosso algoritmo é viável. O trabalho desenvolvido no âmbito desta tese foi apresentado na 34ª Conferência Internacional de Teoria da Concorrência (CONCUR 2023) e no INForum 2023, Simpósio de Informática, e publicado nas atas correspondentes sob a forma de artigo [90] e resumo [92], respetivamente.
Session types allow the specification of structured communication protocols on bidirectional, heterogeneously typed channels. Typically, these specifications include the type, direction and order of messages, as well as branching points where participants can choose how communication should proceed. By supporting session types, programming languages are able to offer safer concurrency, ensuring session fidelity, privacy and communication safety. Until recently, session types were restricted to the description of regular, tail-recursive protocols, considerably limiting their expressiveness. Context-free session types liberate themselves from this restriction by introducing a monoidal type operator to express the sequential composition of any two protocols, making them significantly more expressive. However, in their quest for safe concurrency, session types can make programming too rigid. Subtyping, an important feature of many type systems, is meant to alleviate this tension between safety and flexibility. While the algorithmic properties of subtyping for regular session types are by now well known, the same cannot be said for their context-free counterparts. The main challenges in this respect are the algebraic properties they exhibit, along with their equirecursive interpretation. A previous investigation into this topic by Padovani has shown this problem to be undecidable—the usual, unfortunate price to pay for expressive power. Despite these challenges, we propose two novel approaches to subtyping for context-free session types: one syntactic and based on inference rules, and another semantic and based on a novel kind of observational preorder we call X YZW-simulation, which generalizes X Y-simulation and therefore also bisimulation, on which type equivalence for context-free session types is often based. We take advantage of this fact to derive a sound (but, due to the undecidability of the problem, necessarily incomplete) subtyping algorithm from an existing type equivalence algorithm. We then present an empirical evaluation of its performance in the context of a programming language compiler.

Descrição

Tese de mestrado, Informática , 2024, Universidade de Lisboa, Faculdade de Ciências

Palavras-chave

Tipos de sessão Subtipagem Simulação Recursão não-terminal Gramáticas simples Teses de mestrado - 2024

Contexto Educativo

Citação

Projetos de investigação

Unidades organizacionais

Fascículo

Editora

Licença CC