Quais idiomas são dinamicamente digitados e compilados (e quais são estaticamente digitados e interpretados)?

StackOverflow https://stackoverflow.com/questions/2329460

Pergunta

Na minha leitura sobre digitação dinâmica e estática, continuo enfrentando a suposição de que os idiomas estaticamente digitados são compilados, enquanto os idiomas tipados dinamicamente são interpretados. Eu sei que, em geral, isso é verdade, mas estou interessado nas exceções.

Eu realmente gostaria que alguém não apenas desse alguns exemplos dessas exceções, mas tente explicar por que foi decidido que esses idiomas deveriam funcionar dessa maneira.

Foi útil?

Solução

Aqui está uma lista de alguns sistemas interessantes. Isso é não Exaustivo!

Dinamicamente digitado e compilado

  1. O compilador de esquema de gambit, Esquema de chez, O compilador de esquema de furto de Clinger, o Bigloo Compilador de esquema, e provavelmente muitos outros.

    Por quê?

    Muitas pessoas realmente gostam do esquema. Programas como dados, bom sistema macro, 35 anos de desenvolvimento, grande comunidade. Mas eles querem desempenho. Portanto, vários bons compiladores de código nativo-o esquema Chez é até um produto comercial bem-sucedido (bytecodes interpretados são gratuitos; códigos nativos pelos quais você paga).

  2. O compilador Luajit just-in-time para Lua.

    Por quê?

    Para mostrar que poderia ser feito. E então, as pessoas começaram a Curti Obtendo 3x aceleração em seus programas Lua. Lua está em muitos jogos, onde o desempenho é importante, além de se transformar em outros produtos. 70% do código no Adobe Lightroom é Lua.

  3. o iconc Ícone-to-c compilador.

    Por quê?

    As cinquenta pessoas que usaram amavam Ícone. Modelo de avaliação totalmente incomum, o sistema de processamento de cordas mais inovador (e na minha opinião, melhor) já projetado. Mas esse modelo de avaliação era muito caro, especialmente nos computadores do final da década de 1980. Ao compilar o ícone em C, o projeto de ícones possibilitou a execução de programas de Ícone grandes em menos horas.

Conclusão: As pessoas primeiro desenvolvem um apego a um idioma dinamicamente digitado e provavelmente uma base de código significativa. Eventualmente, a comunidade cospe um compilador de código nativo para que você possa obter melhor desempenho e resolver problemas maiores.

Estaticamente digitado e interpretado

Esta categoria é menos comum, mas ...

  1. Caml objetivo. Dialeto de ml, veículo para grande quantidade de experimentos inovadores em design de idiomas.

    Por quê?

    Sistema muito portátil e tempos de compilação muito rápidos. Pessoas gostam de ambas as propriedades, de modo que as novas idéias de design de idiomas são amplamente desseminadas.

  2. Moscou Ml. ML padrão com alguns recursos extras do sistema de módulos.

    Por quê?

    Tempos de compilação rápidos e portáteis, fáceis de fazer um loop interativo de leitura/avaliação/impressão. Tornou -se um compilador de ensino popular.

  3. C-Terp. Um produto antigo, acho que talvez do Gimpel Software. Sabre C - um produto, acho que você não pode mais comprar.

    Por quê?

    Depuração. Especialmente, depurando o hardware dos anos 80 no MS-DOS. Para muito poucos recursos, você pode obter uma boa ajuda para depurar o código C em hardware muito limitado (pense: processador de 4,77 MHz com um barramento de 8 bits, 640k de RAM totalmente carregado). Quase impossível obter um bom depurador visual para o código compilado nativo, mas com o intérprete, bastante fácil.

  4. UCSD Pascal-o sistema que fez do "código P" uma palavra familiar.

    Por quê?

    Os professores gostaram do design de idiomas de Niklaus Wirth, e o compilador poderia executar muito pequenas máquinas. O design limpo de Wirth e o sistema p UCSD fizeram uma combinação imbatível, e Pascal foi a Linguagem de ensino padrão da década de 1970. Os jovens podem achar difícil apreciar que na década de 1970 havia não debate sobre qual idioma ensinar no primeiro curso. Hoje eu conheço programas usando C, C ++, Haskell, Java, ML e Esquema. Na década de 1970, sempre era Pascal, e o sistema P U UCSD era uma grande razão.

    Caso você esteja se perguntando, P defendeu portátil.

Resumo: Interpretar um idioma tipado estaticamente é uma ótima maneira de obter uma implementação nas mãos de todos rapidamente. (Também tinha vantagens para a depuração do hardware da Idade do Bronze.)

Outras dicas

Objective-C é compilado e suporta a digitação dinâmica (certamente quando chama os métodos via [target doSomething] sintaxe). Ou seja, você pode enviar qualquer mensagem para um alvo (usando a sintaxe da linguagem comum, sem programar contra uma API de reflexão), receber apenas um aviso no tempo de compilação de que ele pode não ser tratado e receber uma exceção apenas em tempo de execução se o alvo não fizer 'T responde a esse seletor (que é como uma assinatura de método); E você pode perguntar qualquer objeto (que pode ser do tipo estático id Se seu código não conhece melhor ou não se importa) se ele respondsToSelector: Para investigar suas capacidades.

O Java (um idioma tipado estaticamente) é compilado ao JVM ByteCode, que foi interpretado nas versões mais antigas da JVM, enquanto agora usa a compilação do tempo (JIT), o que significa que o código da máquina é gerado em tempo de execução. Eu também acredito que o ML e seus dialetos podem ser interpretados, e o ML é definitivamente estaticamente digitado.

O ActionScript possui tipagem dinâmica e compila com bytecode.

E até compila até o código da máquina nativo, se você deseja lançar um aplicativo flash no iPhone.

O Python é uma linguagem dinâmica que possui compiladores.

Ver isso é tão pergunta - Python - why compile?, por exemplo.

Em geral, a compilação faz o programa funcionar muito mais rápido.

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