[pt] REVISITANDO CO-ROTINAS
[en] REVISITING COROUTINES
Descrição
[pt] O objetivo deste trabalho é defender o resgate do conceito de co-rotinas como uma construção de controle poderosa e conveniente, que pode substituir tanto continuações de primeira classe como threads com um conceito único e mais simples. Para suprir a ausência de uma definição precisa e adequada para o conceito de co-rotinas, propomos um novo sistema de classificação, e introduzimos o conceito de co- rotinas completas, para o qual provemos uma definição formal, baseada em uma semântica operacional. Demonstramos a seguir a equivalência de poder expressivo entre co-rotinas completas simétricas e assimétricas e entre co-rotinas completas e continuações one-shot tradicionais e parciais, discutindo as vantagens de corotinas completas assimétricas em relação a co-rotinas simétricas e continuações de primeira classe. Finalmente, analizamos os benefícios e desvantagens associados aos diversos modelos de concorrência, justificando a adoção de modelos alternativos a multithreading e o oferecimento de co-rotinas como uma construção básica de concorrência, adequada à implementação desses modelos.[en] The purpose of this work is to defend the revival of coroutines as a powerful and convenient control construct, which can replace both firstclass continuations and threads with a single and simpler concept. In order to provide an adequate and precise definition of the concept of coroutines, we propose a new classifying system, and introduce the concept of complete coroutines, for which we provide a formal definition based on an operational semantics. We then demostrate that complete symmetric coroutines and complete asymmetric coroutines have equivalent expressive power, as well as complete coroutines and one-shot traditional and partial continuations. We also discuss the advantages of using complete asymmetric coroutines instead of symmetric coroutines or first-class continuations. Finally, we analyse the benefits and problems associated with different concurrency models, and argue in favor of the replacement of multithreading with alternative concurrency models and the provision of coroutines as a basic concurrency construct, adequate for the implementation of these alternative models.