Corrotinas (Coroutines) em C
- Introdução às corrotinas: Estruturar programas de grande porte sempre foi uma tarefa difícil. Quando há código que produz dados e código que consome dados, muitas vezes surge a questão de decidir qual é o chamador (caller) e qual é o chamado (callee).
- Reescrita (Rewriting): Uma solução comum é reescrever um dos lados do canal de comunicação como uma função chamável. Isso é menos claro do que o código original e aumenta a carga de manutenção.
- As corrotinas de Knuth (Knuth's coroutines): Donald Knuth propôs uma solução que abandona o conceito de pilha e passa a considerar os processos como colaboradores em pé de igualdade. Porém, isso só é possível em linguagem assembly e não é suportado em linguagens de alto nível como C.
- Corrotinas baseadas em pilha (Stack-based coroutines): A ideia é imitar em C o princípio de chamada das corrotinas de Knuth. Para isso, usa-se a instrução
goto e variáveis de estado para mover o controle para pontos arbitrários dentro da função.
- O dispositivo de Duff (Duff's device): Usa-se
case dentro de switch para fazer o salto com o próprio switch, em vez de usar rótulos. Com isso, implementa-se o truque das corrotinas.
- Avaliação (Evaluation): O uso de macros de corrotina permite a passagem de dados entre produtor e consumidor. Isso é implementado de forma portátil em ANSI C.
- Padrões de codificação (Coding Standards): Essa técnica viola padrões de codificação, mas ajuda a revelar com clareza a estrutura do algoritmo. Padrões de codificação deveriam buscar clareza algorítmica, e não apenas clareza sintática.
- Aprimoramentos e código (Refinements and Code): Em aplicações reais, é necessária uma implementação de corrotinas que não dependa de variáveis estáticas, seja reentrante e funcione também em ambientes multithread. Para isso, usa-se uma estrutura de contexto como parâmetro.
Opinião do GN⁺
- Importância: Este artigo apresenta uma forma criativa de implementar corrotinas na linguagem C, explicando como programadores podem codificar com mais eficiência a interação entre produtores e consumidores de dados.
- Interessante: A tentativa de aplicar o conceito de corrotinas de Knuth à linguagem C mostra a criatividade de desenvolvedores ao tentar superar os limites da linguagem de programação.
- Útil: Com corrotinas, é possível implementar processamento assíncrono sem escrever explicitamente máquinas de estado complexas, melhorando a legibilidade e a manutenção do código.
Ainda não há comentários.