Olá Marcos! 🙂
Essa é uma boa discução de fato!
C#
O C# se trata de uma linguagem compilada que, realmente, possui certas semelhanças em seu processo de execução com o exemplo do Java, dado pelo professor na aula. Porém o c# apresente algumas diferenças e específidades singulares. Seu processo de execução pode ser acompanhado a seguir:
- Após escrever o código, o mesmo é compilado usando um C# Compiler;
- O processo de compilação se certifica se não há erros código. Caso exista algum erro, o compilador avisa o programador para concertá-lo e, apenas então, volta a processar o código desde o início novamente.
- Então, o compilador converte o código fonte do C# em um código intermediário específico chamado Commom Intermediate Language (CIL) ou Intermediate Language Code (ILC ou IL code). A partir dessa linguagem intermediária o C# pode rodar em qualquer sistea operacional, definindo-o como uma Platform Independent Language (Linguagem Indêpendente de Plataforma).
- A partir daí, o CIL ou ILC precisa ser convertido em linguagem de máquina. Isso é feito a partir do .NET Framework, um sistema de execução virtual conhecido como Common Language Runtime (CLR). Todo esse processo acaba se enquadrando na definição dada pelo professor do Just-In-Time Compilation (JIT).
- Finalmente, o programa é atribuido físicamente a pacotes denominados Assemblies. Esses pacotes são as bibliotécas ou arquivos executáveis que levam ao processamento do código.
PHP
O PHP é uma linguagem interpretada através da instância do Zend Engine, um mecânismo de interpretação criado no ano 2000 para o PHP 4 e que divide a execução do código em algumas fases:
- A primeira fase consiste em analizar o código fonte do PHP e converte-lo em um código binário denominado Zend OPCodes, parecido com o Java Bytecodes.
- Esses OPCodes são instruções particiondas que são guardadas na memória. O Zend Engine foi contruido de tal maneira que os OPCodes são guardados em espaços específicos da memória, isso é feito graças a algumas extensões do PHP denominadas OPCode Caching Extensions. O propósito dessas extensões é pular o processamento de certos códigos que já foram anteriormente compilados, ganhando velocidade na execução.
- Finalmente, os OPCodes são rodados no ambiente de execução virtual da Zend Engine, que por sua vez, levam ao processamento final do código.
Ao analisar essas duas linguagens, podemos ver que existe muito em comum na arquitetura de execução de ambas, porém cada uma possui suas peculiaridades que as tornam únicas.
Espero ter acrescentado algo que você tenho gostado!
Bons Estudos! 😉