Python backend para Cantor nascendo no LaKademy

Aconteceu muita coisa no LaKademy e irei reportar tudo em vários posts temáticos. Este é sobre o que desenvolvi no sentido técnico, durante o encontro latino-americano dos colaboradores do KDE. Mais posts na tag LaKademy.

No Google Summer of Code deste ano submeti o projeto de desenvolvimento de um backend para programação científica em Python no Cantor, a exemplo do ano passado em que implementei um backend para o Scilab. Infelizmente a proposta não foi aceita.

Mas tudo bem, a vida continua. Isso não me desmotivaria a tocar o projeto para frente.

Durante a preparação para o LaKademy, coloquei como meta conseguir fazer funcionar a comunicação entre Cantor e Python. Minha primeira ideia foi fazer um fork do backend para Sage, que é também uma tecnologia de programação científica baseada em Python. Porém, ainda na fase de avaliação do projeto para o Google Summer of Code, o desenvolvedor principal do Cantor Alex Rieder me sugeriu a dar uma olhada na API Python/C.

Comecei a estudar esta API e outros materiais na web (como este, baseado em Elmer), ver exemplos e mais. Percebi que enviar comandos Python a partir de código C/C++ seria fácil, entretanto, a captura das saídas do interpretador seria o real desafio. Toda esta comunicação poderia ser simples se Python usásse standard streams por padrão, o que permitiria utilizar kprocess para fazer esta ponte. Scilab também não usava, o que me levou a implementar este suporte ano passado e possibilitar esta abordagem. Porém, em Python eu não poderia fazer isso – ou seria mais difícil de fazê-lo.

Com pesquisas na internet e alguns estudos, consegui implementar uma classe Python que redireciona as mensagens do interpretador, tanto de saídas convencionais quanto de de erro, para uma variável que depois pode ser recuperada em um tipo string via API Python/C. Voilà!

Com essa variável recuperada, posso dizer que o core do Python backend para Cantor está funcionando e pronto para implementação de mais funcionalidades. Vamos a alguns screenshots:

Computação de um simples contador em Python.

Cantor + Python + matplotlib realizando um plot externo

Mensagem de erro de Python no Cantor

Com esta parte implementada, as novas funcionalidades a serem adicionadas serão: adição de gráficos no ambiente de trabalho do Cantor; destaque de sintaxe; auto-complete de funções pré-definidas; e mais. Pretendo dar suporte em especial para as bibliotecas numpy, scipy e matplotlib, que quando adicionadas ao Python tornam-o uma interessante ferramenta para programação científica, a exemplo de outras que temos no mundo livre como GNU Octave, Scilab, Maxima, Sage e outras.

Quem quiser testar, o código está disponível no branch python-backend, no repositório do Cantor. Mas é sempre bom avisar: trata-se de uma versão experimental, e as principais funcionalidades ainda serão adicionadas. O que está funcionando é a comunicação de mão dupla C++ <-> Python, o core da aplicação.

Fiquem ligados para maiores informações. ;)

3 thoughts on “Python backend para Cantor nascendo no LaKademy

Leave a Reply

Your email address will not be published. Required fields are marked *