Pergunta

Há uma ferramenta disponível que irá converter o código fonte em Perl para código fonte em C?Qualquer plataforma, é bom.

Foi útil?

Solução

perlcc que "traduz" Perl para C.

Não é realmente um compilador Perl para C; Sua saída é simplesmente um pacote do intérprete Perl e o bytecode analisado do seu programa.

Outras dicas

A resposta canônica para isso é MJD "Por que não traduzir Perl para C?".

A resposta será praticamente "não". Perl é uma linguagem extremamente dinâmica. C é um idioma para tipos de dados de tamanho estaticamente. Qualquer tradução de Perl para C provavelmente será praticamente "executar esta chamada de sub -rotina para simular o que Perl faz" repetidamente. E há pouco sentido na construção de um tradutor assim, pois é improvável que o Perl seja muito mais rápido do que Perl.

Eu escrevi um grande programa em Perl que cria PDF baseado em HTML e consultas de banco de dados que é praticamente agindo como um navegador.Todo o código-fonte do volume é mais de 1MB.Os programas avalia HTML, cria consultas SQL e recupera dados, pesquisas de imagens no disco ou baixa-los a partir de servidores HTTP, cria uma estrutura de documento, faz todo o esquema de cálculos e, finalmente, produz um PDF.

Eu tinha de descobrir como a velocidade de operação em um número de maneiras.Com base no que afirmo que o Perl, é bastante rápido, e muitas tarefas concluídas rapidamente e com sucesso em Perl levar um longo tempo em C, e até mesmo o C++.

Existem 2 maneiras de fazer Perl lento ou consumindo da memória:um grande número de complexas estruturas de dados - eles precisam de uma grande quantidade de memória e um grande número de cálculos.Sim, o cálculo é de fato muito lento em Perl.Um termo simples, como

$a = $b * $c

é bastante demorado em Perl, mas muito rápido em qualquer linguagem compilada.Os operandos aqui pode até ser inteiros, e não variáveis de ponto flutuante - é lento.Acho que esta é a razão pela qual o Perl pontuações muito ruim na língua de pênaltis concurso [http://shootout.alioth.debian.org/](A Linguagem do Computador de Referenciais de Jogo).

Eu encontrei o meu grande programa ele usa muitos Perl do núcleo e adicionais CPAN módulos, bem como - e para começar rapidamente, apesar de ser interpretados.

Ele executa muito bem...até que ele vem para o cálculo de tamanhos de texto e layout de coordenadas.Isso é muito demorado.Depois de afirmar isso, escrevi pequeno Perl programas de teste, basta fazer milhões de cálculos aritméticos e achei-os muito lento.

Além disso, eu estou usando e abordagem orientada a objeto, modelo de cada um e de cada elemento do layout.Cada objeto é representado por um hash - isso é pelo menos cerca de 10 kb por objeto.Se houver uma grande quantidade de dados para impressão, um consumo de memória de vários 100MBytes não é incomum para o programa.

Então, eu ainda tenho um bom motivo para mover a parte calcular o layout C, utilizando estruturas onde agora tenho hashes com teclas fixas e C inteiros aritmética, onde agora o Perl faz um trabalho lento.

Mas tudo o resto foi feito e testado rapidamente e corre tão rápido que eu não vejo qualquer razão para mudar.Eu também acho código Perl muito mais conveniente escrever e teste de C código.E um monte de módulos CPAN fornecer soluções você não tem de trabalhar para fora de si mesmo.Muitos deles são bem testados e documentados.

Após esta muito demorada dicussion eu concluo:se é para ser um servidor ou de um programa de linha de comando, considerar o Perl.Mas se este programa tem para construir grandes estruturas de dados ou lotes de aritmética, considere a possibilidade de algo mais rápido.Às vezes, pode ser um programa Perl com um módulo escrito em C.

Existem tradutores Perl para C, mas nenhum é perfeito. Idealmente, você deseja um tradutor que seja correto e elegante. Infelizmente, você não pode ter os dois, o código PERL simples não é o código C simples equivalente, então você precisa ter uma tradução que não seja 100% correta ou seja tão complexa quanto a própria Perl. Isso levou alguns a acreditar que você não deve tentar traduzir Perl. Seria mais preciso dizer que você precisa deixar claro o que deseja alcançar com a tradução e não esperar milagres.

100% correto é fácil: se o seu script perl for myperl.pl então o programa C void main(){system("perl myperl.pl")} fará exatamente o que o myperl.pl fará; Isso é inútil. o perlcc O compilador é um pouco mais sofisticado, mas ainda não parece dar muito benefício. Eu não notei perlcc sendo mais rápido que o Plain Perl. Além disso, embora o código Perl possa ser notoriamente difícil de ler, eu prefiro print "Hello World\n" para a monstruosidade de 700 linhas que perlcc traduz isso em. Eu não vi esses programas produzir nada que passaria em uma revisão de código e código C elegante e escrito. OTOH, se você deseja um compilador porque não deseja distribuir seu código-fonte de uma maneira não obscada, então perlcc poderia fazer maravilhas.

Rperl pode alcançar velocidades, mas é muito limitado no que pode traduzir.

Para um exemplo de tradutor trivial "elegante, mas não correto", consulte o protótipo Perl2c ++. PL. Isso funciona substituindo (alguns) perl-isss padrão por C ++-ISMS. O C ++ foi escolhido porque é uma linguagem de alto nível como Perl, mas ainda compartilha o mesmo ethos de metal nu de C.

No caso de um simples gerador de números de número Pseudo-aleatório LCG Lcg.pl, a saída de perl2c++.pl é um código C ++ limpo e sucinto que executa dezenas de vezes mais rápido que o Perl original e não depende de nenhuma biblioteca Perl. Pode ser estendido para procurar todas as respostas padrão para "Como fazer x no Perl" e substituí -lo por "Como fazer x em C ++". Em seguida, pode traduzir com sucesso muitos scripts Perl simples, mas reais, e ajudar um humano a traduzir o software Perl não trivial em um elegante código C ++. Isso seria mais útil se você se encontrar escrevendo software numérico em Perl, que deveria ter sido escrito em C ++ em primeiro lugar.

Para o software para o qual o Perl é adequado, mas você só quer ir um pouco mais rápido, a abordagem JIT usada pelo JavaScript (e, finalmente, Perl 6) é mais promissor.

O conversor é chamado de programador, e o processo de conversão programação. Sério, o idioma adequado de Perl é tão vasto e poderoso que qualquer pessoa que tenta escrever um conversor desprezava uma tarefa ao longo da vida. Além disso, o efeito na melhoria do desempenho pode não ser uma ordem de magnitude, então por que se preocupar?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top