Muitos desenvolvedores sentem arrepios só de pensar no trabalho que dá converter um código de uma linguagem para outra. E se essa tarefa pudesse ser feita automaticamente, em poucos passos? Essa é a proposta do TransCoder, modelo de conversão de linguagens desenvolvido por pesquisadores do Facebook.
Como é de se imaginar, a ferramenta é baseada em inteligência artificial. A ideia é converter código em linguagem de alto nível — como C++, Java e Python — em outra com o menor nível possível de supervisão ou intervenção humana.
É difícil. Até para um programador experiente, executar esse trabalho frequentemente requer paciência e, como fator principal, bom conhecimento das linguagens de origem e destino.
Transcompiladores (transcompilers) são ferramentas que contribuem com essa tarefa. Graças a elas, o novo código não precisa ser reescrito do zero. Mas, hoje, as vantagens não vão muito além disso: ainda cabe ao desenvolvedor lidar com diferenças de sintaxe, mudanças de biblioteca ou adaptações de APIs, por exemplo.
Nas palavras do próprio Faceboook, o TransCoder vem para ser um transcompilador “neural”, isto é, um transcompilador que utiliza aprendizagem de máquina para fazer todo o trabalho sujo.
O processo começa com um pré-treinamento que mapeia instruções de um código que sãos as mesmas nas linguagens de destino e origem. “Pontos de ancoragem” comuns a muitas linguagens, a exemplos de instruções como “if ou “while” e operadores matemáticos, servem de base para esse trabalho.
Um processo de “retrotradução”, ou seja, de converter o código novamente para a primeira linguagem, permite ao TransCoder gerar dados paralelos para serem comparados aos originais. As diferenças constatadas nesse processo reforçam o treinamento.
A ferramenta foi treinada com mais de 2,8 milhões de repositórios de código aberto disponíveis no GitHub. Também foram realizados testes com 852 funções em C++, Java e Python oriundas do GeeksforGeeks, plataforma que reúne problemas de programação para serem resolvidos (o GeeksforGeeks é ótimo para treinar lógica de programação e habilidades relacionadas; o Spoj também).
Os resultados empolgaram. Na conversão de C++ para Java, por exemplo, o TransCoder obteve 74,8% de precisão nos resultados esperados; de Python para C++, 57,8%; de Java para C++, 91,6%.
Por ora, a ferramenta funciona justamente com C++, Java e Python, mas os pesquisadores do Facebook destacam que o TransCoder pode ser treinado para trabalhar com praticamente qualquer linguagem de programação.
O modelo foi desenvolvido para fins acadêmicos, mas, com os devidos aperfeiçoamentos, é possível que o TransCoder encontre utilidade prática: “nossos resultados sugerem que muitos erros cometidos pelo modelo podem ser corrigidos facilmente com a adição de restrições simples ao decodificador para garantir que as funções geradas sejam sintaticamente corretas”, dizem os responsáveis.
É possível saber mais sobre o Facebook TransCoder neste estudo (PDF).
Com informações: VentureBeat.
Nenhum comentário:
Postar um comentário