DEV Community

Pedro Fernandes
Pedro Fernandes

Posted on

Como Integrar Diferentes Linguagens de Programação em um Projeto: A Abordagem Multilíngue

No desenvolvimento de software, principalmente no mundo das startups e pequenas empresas, é comum trabalhar com uma única linguagem de programação para todo o projeto — frontend e backend, por exemplo, usando JavaScript/TypeScript. No entanto, há situações em que diferentes linguagens precisam coexistir dentro da mesma aplicação. Seja para aproveitar bibliotecas especializadas, melhorar a performance de determinados processos ou integrar sistemas legados, saber como combinar múltiplas linguagens de forma eficiente pode ser um grande diferencial.

A escolha pela forma com que se irá integrar diferentes linguagens, depende muito da complexidade do problema enfrentado. Desta forma, escrevo este artigo na tentativa de desmistificar as abordagens e auxiliar na solução de eventuais questionamentos, além de também promover uma visão mais holística e crítica sobre o desenvolvimento de softwares.

Bibliotecas específicas

Uma das maneiras mais diretas de realizar a integração de diferentes tecnologias é por meio de bibliotecas desenvolvidas especificamente para essa finalidade. Essas bibliotecas têm como objetivo atuar de forma rápida e direta, mas podem apresentar problemas ao executar códigos muito complexos e robustos, que realizem ações complexas ou que dependam de outras bibliotecas. Alguns exemplos de bibliotecas específicas que facilitam a integração entre linguagens incluem:

  1. CFFI (C Foreign Function Interface) — Python:
    O CFFI é uma biblioteca que permite que código C seja chamado diretamente a partir de Python.

  2. ffi-napi — Node.js:
    A biblioteca ffi-napi permite que o Node.js faça chamadas para funções nativas de bibliotecas escritas em C ou C++. Ela oferece uma maneira de integrar funcionalidades de baixo nível em projetos Node.js, como manipulação de arquivos ou criptografia, utilizando o poder de bibliotecas nativas sem a necessidade de reescrever código.

Application Programming Interface — APIs

É comum que muitos desenvolvedores considerem as APIs apenas como ferramentas para comunicação entre o frontend e o backend de seus projetos ou que sirvam para comunicar algum site/sistema externo à aplicação como em situações de autenticação ou busca por informações públicas. Entretanto, o uso de APIs, de forma conceitual, tem como função a de atuar como intermediário entre diferentes componentes de softwares — sejam eles o frontend e backend, seu sistema e algum sistema externo mas inclusive, diferentes linguagens de programação.

O importante é que, independentemente de as linguagens estarem em repositórios separados ou não, é necessário que se tenha endpoints em uma das linguagens. Assim, o código do servidor na linguagem X pode realizar uma requisição para o outro servidor que está escrito na linguagem Y.

No exemplo a seguir, observa-se uma situação em que um backend escrito em Node.js realiza uma requisição, utilizando a biblioteca Axios, para um outro servidor backend escrito na linguagem Python, o qual executa um processo de ETL (Extract, Transform, Load) de dados.

Código Node.js



Figura 1 – Requisição HTTP usando Axios (Node.js) para um endpoint Python que executa um processo de ETL e devolve os dados transformados.

Código Python


Código Python implementando um processo de ETL para extração, transformação e carregamento de dados.

Foreign Function Interface — FFI

Outra abordagem para integrar diferentes linguagens, evitando a sobrecarga das chamadas HTTP, é a utilização de FFI (Foreign Function Interface), que permite chamadas diretas entre códigos escritos em diferentes linguagens. Embora essa estratégia ofereça uma performance superior, ela pode ser mais complexa de implementar e depurar.

Essa técnica demonstra ser mais utilizada para a chamada de código de linguagens de baixo nível como C/C++ e Rust e é muito utilizada na criação e uso de bibliotecas. Muitas bibliotecas são escritas nessas linguagens com o objetivo de aproveitamento de performance e apenas expõem uma interface para que possam ser utilizadas em outras linguagens como Python, Nodejs ou Java. Exemplos clássicos dessa abordagem são o uso das bibliotecas NumPy (escrita em C e Fortran) e TensorFlow (escrita em C++).

Além de objetivos em performance, muitas bibliotecas e algoritmos já estão implementados em C/C++, de forma que por meio do FFI é possível reutilizar essas implementações em linguagens mais “modernas”, excluindo assim a necessidade de reescrita de código e facilitando a comunicação entre diferentes gerações de código.


Integrar diferentes linguagens de programação em um mesmo projeto pode ser uma tarefa desafiadora, mas também uma oportunidade valiosa para aproveitar as forças específicas de cada tecnologia. Seja utilizando bibliotecas específicas, APIs ou interfaces de função estrangeira (FFI), cada abordagem oferece soluções que podem melhorar a performance, facilitar a reutilização de código e permitir que sistemas diversos trabalhem de forma conjunta.

Top comments (0)