Cpython é o intérprete de bytecode?
-
10-07-2019 - |
Pergunta
Eu realmente não recebo o conceito de "intérprete de bytecode" no contexto do Cpython. Alguém pode lançar alguma luz sobre toda a imagem?
Isso significa que o cpython compilará e executará o arquivo pyc (arquivo bytecode?). Então qual arquivo py compilar no arquivo pyc? E como o Jython é diferente de Cpython (exceto que eles são implementados em diferentes idiomas).
Eu também li em algum lugar que o Python é a interpretação do C ++. Isso está correto? E o que isso significa?
Ainda sou muito novo no Python, então me perdoe se eu fizer as perguntas idiotas ... muito obrigado!
Solução
Cpython é a implementação do Python em C. É a primeira implementação, e ainda é a principal que as pessoas significam quando falam sobre Python. Ele compila arquivos .py para arquivos .pyc. Os arquivos .pyc contêm bytecodes. A implementação do CPython também interpreta esses bytecodes. Cpython não está escrito em C ++, é C.
A compilação de .py para .pyc acontece transparentemente, conforme necessário. Quando você executa um arquivo .py, ele será compilado primeiro a um arquivo .pyc, se necessário, o arquivo .pyc será interpretado.
O Jython é diferente porque (além de ser implementado em Java em vez de c) Ele compila arquivos .py em arquivos .class para que possam ser executados na JVM.
Outras dicas
Primeiro: o fato de o CPython ser um intérprete de bytecode não deve importar para você como usuário do Python. Vá em frente e escreva código e não se preocupe com a forma como se transformou em ação.
Portanto, para responder à sua pergunta e satisfazer sua curiosidade, eis o que acontece: o Cpython lê o código -fonte do Python e a compila no código Python Byte, que é armazenado no arquivo .pyc. Em seguida, ele executa esse código usando um intérprete de bytecode. Esse design separa a análise do Python da execução, permitindo que as duas partes do intérprete sejam mais simples.
O Jython é apenas a metade da frente - ele lê a fonte do Python e produz produtos de bytes Java, que são então interpretados pela JVM. É a mesma arquitetura que o Cpython, com duas diferenças notáveis: uma: o bytecode java é padronizado e documentado, enquanto o cpython bytecode é considerado interno ao Python e pode mudar a qualquer momento. Dois: A JVM é muito mais complicada que o intérprete Cpython. A JVM possui um dos motores JIT mais avançados do mundo, enquanto o intérprete Cpython é bastante simples.
O CPYTHON é o compilador de bytecode e o intérprete (máquina virtual).
Ele detecta automaticamente se não houver arquivo pré-compilador existente (.pyc), compila o código e salvá-lo.