Pergunta

Eu me perguntei se existe uma linguagem de programação que compila para código de máquina/binário (não bytecode e então executado por uma VM, isso é algo completamente diferente quando se considera a digitação) que apresenta digitação dinâmica e/ou fraca, por exemplo:

Pense em uma linguagem compilada onde:

  • Variáveis ​​não precisam ser declaradas
  • Variáveis ​​podem ser criadas durante o tempo de execução
  • Funções podem retornar valores de diferentes tipos

Questões:

  • Existe tal linguagem de programação?
  • (Por que não?

Eu acho que uma linguagem compilada de tipo dinâmico, mas forte, realmente faria sentido, mas é possível?

Foi útil?

Solução

Acredito que Lisp se encaixa nessa descrição.

http://en.wikipedia.org/wiki/Common_Lisp

Outras dicas

Objective-C pode ter algumas das propriedades que você procura.As classes podem ser abertas e alteradas em tempo de execução, e você pode enviar qualquer tipo de mensagem para um objeto, independentemente de ele responder normalmente ou não.Dessa forma, você pode implementar a digitação duck, assim como em Ruby.O tipo id, aproximadamente equivalente a um void*, pode ser dotado de interfaces que especificam um contrato ao qual o tipo (de outra forma desconhecido) irá aderir.

O C# 4.0 tem muitas, senão todas essas características.Se você realmente deseja código de máquina nativo, você pode compilar o bytecode até o código da máquina usando um utilitário.

Em particular, a utilização do dynamic A palavra-chave permite que objetos e seus membros sejam vinculados dinamicamente em tempo de execução.

Confira o vídeo de Anders Hejlsberg, O futuro do C#, para uma cartilha:

http://channel9.msdn.com/pdc2008/TL16/

Objective-C tem muitos dos recursos que você mencionou:ele compila em código de máquina e é efetivamente digitado dinamicamente em relação às instâncias de objeto.O id type pode armazenar qualquer instância de classe e Objective-C usa passagem de mensagens em vez de chamadas de função de membro.Os métodos podem ser criados/adicionados em tempo de execução.O tempo de execução do Objective-C também pode sintetizar variáveis ​​de instância de classe em tempo de execução, mas as variáveis ​​locais ainda precisam ser declaradas (assim como em C).

O C# 4.0 possui muitos desses recursos, exceto que é compilado em IL (bytecode) e interpretado usando uma máquina virtual (o CLR).Isso traz à tona um ponto interessante, no entanto:se o bytecode for compilado just-in-time em código de máquina, isso conta?Nesse caso, isso abre a porta não apenas para qualquer uma das linguagens .Net, mas também para Python (consulte PyPy ou Andorinha sem carga ou FerroPython) e Ruby (veja MacRuby ou FerroRubi) e muitas outras linguagens de tipo dinâmico, sem mencionar muitas variantes do LISP.

Sim, é possível.Ver Júlia.É uma linguagem dinâmica (você pode escrever programas sem tipos), mas nunca roda em uma VM.Ele compila o programa em código nativo em tempo de execução (compilação JIT).

Na mesma linha do Lisp, existe Fator, uma linguagem concatenativa* com sem variáveis por padrão, digitação dinâmica e um sistema de objetos flexível.O código do fator pode ser executado no interpretador interativo ou compilado em um executável nativo usando seu deploy função.

* baseado em pilha funcional sem pontos

VB 6 tem mais disso

Não conheço nenhuma linguagem que tenha exatamente essas capacidades.Posso pensar em dois que têm um subconjunto significativo:

  • D possui inferência de tipo, coleta de lixo e recursos poderosos de metaprogramação, mas compila em código de máquina eficiente.No entanto, ele não possui digitação dinâmica.
  • C# pode ser compilado diretamente em código de máquina por meio do projeto mono.C# possui um conjunto de recursos semelhante ao D, mas novamente sem digitação dinâmica.

Python para C provavelmente precisa desses critérios.

  1. Escreva em Python.

  2. Compile Python para executável.Ver Processo para converter script Python simples em executável do Windows.Veja também Escrevendo tradutor de código de Python para C?

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