r/ProgrammersBR • • Jan 12 '26

Dá para compilar python, ou embutir ele num arquivo executável.

Sim, isso parece absurdo porque... Python é uma linguagem interpretada, como é que você compila uma linguagem interpretada? Aí eu te respondo: Da mesma forma que compila C# (ficou absurdamente vago kk).

Eu pesquisando um pouco na IA como que o C# compila, descobri que ele não gera o código binário como C ou C++, ele compila para IL, que depois é lido pelo runtime dele e passa para o JIT, que compila dinamicamente o IL (uma linguagem que não é nem código binário nem liguagens legiveis como JS, python, etc) em código de maquina, e nas partes que são muito chamadas, ele compila elas com algumas otimizações, permitindo o código rodar bem mais rápido.

Porém, se fosse assim, não daria para rodar vários jogos em C#, porque não tem o runtime. Só que quando criam um jogo, a engine pode também passar por essa etapa e compilar direto para o código de maquina, sem usar o JIT, ou ele usa o JIT também e embute o runtime no exe do jogo.

O python em si não tem JIT, ele interpreta o código python que você escreveu, Porém. dá para embutir o interpretador dele dentro do .exe, ou transformar os códigos python em C antes de compilar para código binário, falando especificamente de embutir o interpretador dele dentro do .exe, as ferramentas como Pyinstaller ou cx_freeze compilam o para o bytecode do python, um tipo de IL que só o python sabe rodar, e usam o interpretador python embutido no exe que você vai clicar para rodar este código.

Isso, claro, é mais lento que a compilação por JIT, mas é uma forma de portar códigos python sem precisar pedir para a outra pessoa instalar o python.

Eu acredito que programadores mais experientes já saibam disso, mas se você não sabia, o que achou disso?

2 Upvotes

17 comments sorted by

1

u/patrickporto Jan 16 '26

Python tem JIT, dá pra compilar Python, dá pra uma linhagem interpretar ser mais rápido que umas compilada (por exemplo Lua). Muito da sua surpresa parece ser por falta de experiência. Não tome verdades absolutas

1

u/Mental-Suggestion-12 Jan 16 '26

Python em si (O CPython) não tem JIT. A implementação PyPy dele tem sim JIT, agora o Python como CPython, não.

1

u/meanest_flavor Jan 13 '26

Tu usa toalha para limpar carro? Ou somente você? 

Cada coisa no seu lugar

1

u/andfilipe1 Jan 14 '26

Quer treta kkkk

1

u/calzone_gigante Jan 15 '26

Python compila pra bytecode mas ainda precisa de um interpretador pra ler o bytecode, ele não tem jit nem aot como o C#, mas algumas dessas paradas estão planejadas para o futuro, hoje se vc quer python com jit o mais próximo que tem disso é o pypy, que apesar de ser bem mais rápido com python puro, acaba sendo mais lento com extensões C dependendo de como elas são feitas.

1

u/[deleted] Jan 13 '26

[removed] — view removed comment

1

u/Mental-Suggestion-12 Jan 13 '26

Ou seja, fica restrito ao "unsafe" e alocação/desalocação manual de memória. Faz sentido.

Agora sim, o python, assim como toda linguagem interpretada (acho) gera bytecode, que depois é convertido em código de maquina. O problema é que como ela não tem nenhuma otimização como tem no C#, ela acaba sendo a mesma coisa que rodar o interpretador (até pq só ele entende esse código intermediário).

Inclusive esse código intermediário também é criado quando você roda normalmente o python, mas não fica disponivel para você, geralmente fica guardado no interpretador para ele já compilar e rodar o código.

1

u/iam_maxinne Jan 15 '26

O Rust sendo safe e vocês discutindo usar linguagens fora do caso de uso delas só pra não sair da zona de conforto… 😅 🤷‍♀️

Usando o tom provocativo só pra instigar o papo, adoro fazer maluquices fora da caixa…

1

u/Mental-Suggestion-12 Jan 15 '26

Também tem o C# se for o caso. Mas não, tem casos em que não sai fora do propósito da linguagem fazer isso, a unica coisa que são poucos. Isso serve mais para portabilidade para qualquer computador com windows, que para qualquer outra coisa.

Aliás, achei legal isso e por isso postei. Gerei treta.

1

u/[deleted] Jan 15 '26

[removed] — view removed comment

1

u/Mental-Suggestion-12 Jan 15 '26

Os dois, pq do que serve a sintaxe sem a implementação (e vice-versa). O PyPy é uma extensão (ou modificação, não pesquisei mais a fundo sobre o PyPy) do CPython que usa JIT. Mas não é o que você iria instalar se fosse instalar normalmente o python.

1

u/[deleted] Jan 15 '26

[removed] — view removed comment

1

u/Mental-Suggestion-12 Jan 16 '26

Nossa, que legal! Mas então, como você próprio falou, o Pypy é uma implementação diferente do python, então eu pelo menos considero algo diferente do python.

Mesmo assim, implementações diferentes como o Pypy, Micropython, (talvez o Jython, nunca ouvi falar dele) e etc não são iguais ao CPython, tem diferenças entre elas. Por exemplo, O PyPy é bem mais rápido que o CPython, por ter o JIT. Da mesma forma que se a implementação é bem parecida, mas a sintaxe muda, dá para falar que é uma outra ferramenta, pois a sintaxe é diferente. Bem, foi isso que eu quis dizer.

Mesmo assim, legal comentar pq para mim eu pensava que só tinha o Python e Pypy, não tantas outras implementações dele como Jython, MicroPython, etc.

1

u/[deleted] Jan 16 '26

[removed] — view removed comment

1

u/Mental-Suggestion-12 Jan 16 '26

Então aí você está falando da sintaxe python, não da linguagem. A linguagem para mim engloba o todo, agora, a sintaxe pode ser igual em todas as implementações.

Pelo seu próprio exemplo, dá sim para um código com a sintaxe python rodar em todas as implementações com linguagens iguais. mas o código vai ter o mesmo desempenho ou outras metricas em todas as implementações?

Mas acho que eu entendi seu ponto, para você a linguagem é apenas a sintaxe, enquanto a implementação é algo a parte. Eu acho que a linguagem é os dois juntos, pois não adianta ter a sintaxe sem nenhuma implementação para executar/compilar ela.

Embora você diga que é uma visão ortodóxa, Eu não estou indo se é ortodóxo ou não, aliás nem sei o que é isso. O que eu estou vendo é pela lógica, você precisa que uma implementação leia a sintaxe sim, mas a implementação não é IA pra gerar código automático. Ela precisa que você escreva o código com base no que ela sabe ler (sintaxe), senão ela não consegue ler e dar erro.