[SP-pm] Compilados ou Interpretados, mas sempre programas... [Was: Boas Vindas ao Otávio Fernandes]

Luis Motta Campos luismottacampos em yahoo.co.uk
Quarta Abril 18 01:47:31 PDT 2007


On Apr 17, 2007, at 6:28 PM, Otávio Fernandes wrote:
> On 4/17/07, Luis Motta Campos <luismottacampos em yahoo.co.uk> wrote:
>> On Apr 17, 2007, at 3:00 PM, Otávio Fernandes wrote:
>>> será que mesmo usando o PAR::Filter::Crypto
>>> (http://search.cpan.org/~shay/Filter-Crypto-1.18/lib/PAR/Filter/
>>> Crypto.pm)
>>> o deparse ainda teria sucesso ?
>>
>>    Claro. Como você espera que o Perl execute o seu programa? Alguém
>> tem de ter a chave para abrir a criptografia, ou o interpretador não
>> vai conseguir ler o código. Quando você abrir, entra o B::Deparse, e
>> adeus, código.
>
> hehehe, esperava que ele guardasse outras informações do programa,
> como o byte code, por exemplo, e fizesse uso deste como instrução e
> não como código, propriamente dito ...

   Vamos falar sobre morfologia, a ciência que estuda a forma das  
coisas, e também das linguagens de programação.
   Qual é a diferença entre um programa Perl, um programa C  
compilado, um programa assembly e linguagem de máquina,  
morfológicamente falando? Existe alguma diferença na *forma* dos  
programas?

   A resposta mais simples é "não". Morfologicamente, todos os  
programas são a mesma coisa: um conjunto de sinais elétricos que  
estimula um pedaço de silício a produzir outro conjunto de sinais  
elétricos de uma forma muito rápida e bem previsível. Assim, exceto  
pelo "mito" criado sobre a engenharia eletrônica, programas de  
computador não estão mais ou menos protegidos quando compilados.

   Isso implica diretamente que todos os programas podem ser  
"compilados" para outras linguagens: um programa C é "compilado" para  
linguagem de máquina para ser executado por um processador  
específico, mas o que o compilador gera, na verdade, nada mais é do  
que um programa, como o que foi apresentado para ele inicialmente. Um  
programa Perl, ou assembly, segue o mesmo caminho: são compilados  
para linguagem de um processador específico, que "entende" e  
"executa" as "instruções" que lhe são passadas. Que, na verdade, em  
nada diferem de qualquer outra linguagem de programação.

   Isso quer dizer que NADA IMPEDE QUE UM PROGRAMA EM LINGUAGEM DE  
MÁQUINA (também conhecido como "executável" em algumas culturas) SEJA  
COMPILADO DE VOLTA PARA UMA OUTRA LINGUAGEM DE PROGRAMAÇÃO QUALQUER.

   Claro, tem complicantes e agravantes: um programa C normalmente  
sofre otimizações horríveis, e faltam muitas informações, depois que  
a gente compila ele para linguagem de máquina. É necessário um  
profissional com profundos conhecimentos da linguagem de máquina e do  
sistema operacional utilizado para "compilar" o programa em linguagem  
de máquina para outra linguagem qualquer. Mas isso normalmente é  
possível e relativamente fácil de fazer, comparativamente com o que  
era alguns anos atrás.

   Espero que isso ajude você a encontrar a luz... :)
   Putamplexos!
--
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}




Mais detalhes sobre a lista de discussão SaoPaulo-pm