O PHP é compilado ou interpretado?
142
PHP é uma linguagem interpretada. O binário que permite interpretar o PHP é compilado, mas o que você escreve é interpretado.
Você pode ver mais na página da Wikipedia para idiomas interpretados
Ambos. O PHP é compilado em um bytecode intermediário que é então interpretado pelo mecanismo de tempo de execução.
O trabalho do compilador PHP é analisar seu código PHP e convertê-lo em um formato adequado para o mecanismo de tempo de execução. Entre suas tarefas:
Dependendo da configuração do PHP, essa etapa geralmente é realizada apenas uma vez, na primeira vez em que o script é chamado. A saída do compilador é armazenada em cache para acelerar o acesso em usos subsequentes. Se o script for modificado, no entanto, a etapa de compilação será feita novamente.
O mecanismo de tempo de execução percorre o AST e o bytecode quando o script é chamado. A tabela de símbolos é usada para armazenar os valores das variáveis e fornecer os endereços de bytecode para funções.
Esse processo de compilação para bytecode e interpretação em tempo de execução é típico para linguagens executadas em algum tipo de máquina de tempo de execução virtual, incluindo Perl, Java, Ruby, Smalltalk e outros.
fonte
Geralmente é interpretado, mas algum tempo pode usá-lo como compilado e realmente aumenta o desempenho. Ferramenta de código aberto para executar esta operação: hhvm.com
fonte
PHP é uma linguagem interpretada. Ele pode ser compilado no bytecode por ferramentas de terceiros.
fonte
Um código compilado pode ser executado diretamente pela CPU do computador. Ou seja, o código executável é especificado no idioma nativo da CPU
O código dos idiomas interpretados deve ser traduzido em tempo de execução de qualquer formato para as instruções da máquina da CPU. Esta tradução é feita por um intérprete.
Não seria apropriado dizer que uma linguagem é interpretada ou compilada porque a interpretação e a compilação são propriedades da implementação dessa linguagem específica e não uma propriedade da própria linguagem . Portanto, qualquer idioma pode ser compilado ou interpretado - depende apenas do que a implementação específica que você está usando faz.
A implementação PHP mais usada é alimentada pelo Zend Engine e conhecida simplesmente como PHP. O Zend Engine compila a fonte PHP em um formato que pode ser executado, portanto, o mecanismo Zend funciona como um intérprete .
fonte
Esta é uma pergunta sem sentido. O PHP usa yacc (bison), assim como o GCC. O yacc é um "compilador compilador". A saída do yacc é um compilador. A saída de um compilador é "compilada". O PHP é analisado pela saída do yacc. Por isso, é, por definição, compilado.
Se isso não satisfizer, considere o seguinte. Tanto o php (o binário) quanto o gcc leem seu código-fonte e produzem uma árvore de sintaxe abstrata. Nas versões 4 e 5, o php percorre a árvore para converter o programa em bytecode (a etapa de compilação). Você pode ver o bytecode traduzido para opcodes (que são análogos ao assembly) usando o Vulcan Logic Dumper . Finalmente, o php (em particular, o mecanismo Zend) interpreta o bytecode. gcc, em comparação, percorre a árvore e monta saídas; Ele também pode executar montadores e vinculadores para concluir o processo. Chamar um programa tratado por um "interpretado" e outro programa tratado pelo outro "compilado" não faz sentido. Afinal, os programas são executados através de um "compilador" com ambos.
Você realmente deve fazer a pergunta que deseja fazer. ("Pago uma penalidade de desempenho porque o PHP recompila meu código-fonte para cada solicitação?", Etc.)
fonte
Sei que essa pergunta é antiga, mas está vinculada a todos os lugares e acho que todas as respostas aqui estão incorretas (talvez porque sejam antigas).
Há NO tal coisa como uma linguagem interpretada ou uma linguagem compilada. Qualquer linguagem de programação pode ser interpretada e / ou compilada.
Antes de tudo, uma linguagem é apenas um conjunto de regras; portanto, quando estamos falando de compilação, nos referimos a implementações específicas dessa linguagem.
HHVM , por exemplo, é uma implementação do PHP. Ele usa a compilação JIT para transformar o código no bytecode intermediário do HipHop e depois convertido em código de máquina. Basta dizer que é compilado? Algumas implementações de Java (nem todas) também usam JIT. O V8 do Google também usa o JIT.
Usar as definições antigas de compilado versus interpretado não faz sentido atualmente.
Uma maneira possível de delimitá-los é (não acho nenhum significado nesta dicotomia):
linguagens compiladas usam compilação Ahead of Time (C, C ++);
linguagens interpretadas usam compilação Just in Time ou nenhuma compilação (Python, Ruby, PHP, Java).
fonte
in most cases
, sim. em todos os casos, não. portanto, você não pode desenhar uma linha que seja semanticamente significativa e concordada.Pelo menos, ele não compila (ou, devo dizer, otimizar) o código tanto quanto se deseja.
Este código ...
... atrasa o programa igualmente sempre que é executado.
Poderia ter detectado que é um cálculo que só precisa ser feito na primeira vez.
fonte
A resposta aceita é descaradamente falsa. O PHP É compilado. Fim da história. Talvez não para instruções nativas, mas para um código de código interpretado.
fonte