Pergunta

Eu quero fazer uma linguagem compilada. Atualmente, estou avaliando backends. Até agora eu estou olhando para C por causa de sua velocidade de execução, compilando, e um pequeno, fácil de compilador utilização chamado TCC.

Depois de ler as discussões aqui em usá-lo como uma linguagem intermediária, eu estou tentando pensar em como torná-lo compatível com coleta de lixo e tratamento de exceções. Até agora, eu acho que pode resolver ambos, mas com muita sobrecarga.

Aqui estão alguns dos meus pensamentos sobre os outros backends possíveis:

  1. Assembleia:. Portável e uma dor total para o programa no
  2. NET: Se sente muito lento. 5 segundos para o arranque e 5 segundos para avaliar 1 + 2 em ironpython e vaia. Não é possível executar sem grande biblioteca.
  3. JVM: Sente-se um pouco lento. Sem acesso a bibliotecas binários. Não é possível executar sem grande biblioteca.
  4. LLVM: Sem janelas apoio. Ouvi dizer que o tamanho do executável compilado é de 16 mb +
  5. C--: olhares subdesenvolvidos
  6. .
  7. C ++: possivelmente. Não consegue encontrar um bom pequeno livre I pode agrupar com.

Algum de vocês pode mudar de idéia ou ter mais a acrescentar a esta lista?

Editar

Eu tenho experimentado com LLVM recentemente. Eu descobri que eles têm binários pré-compilados e que é possível compilar a montagem nativa.

http: //www.antlr. org / wiki / display / CS652 / Geração + máquina + executável + binários + com + LLVM

Aqui estão os passos:

  1. Executar llvm-as em LLVM Assembléia, que produz um arquivo LLVM bytecode.
  2. Executar LLC no arquivo LLVM bytecode para produzir um arquivo de montagem.
  3. Executar uma montadora no arquivo de montagem para produzir um arquivo de objeto. (Ou correr llvm-LD que parece depender de um compilador c instalado externamente)
  4. Compilar ao executável com gcc etc.
Foi útil?

Solução

Você considerou escrever um frontend para GCC ? Digo isto Para ser completo única - tanto quanto eu sei a interface backend é bastante complicado e a base de código é enorme e difícil de compreender

.

Por outro lado, o GCC é um produto maduro, com muitos programadores experientes trabalhando nisso. No mínimo, isso provavelmente constitui a base mais sólida de todas as alternativas.

Pessoalmente, eu preferiria LLVM (arquitetura emocionante) ou IL do NET: muito, muito fácil de usar, tem suporte grande ferramenta ( refletor , Cecil , Reflexil e por último mas não menos importante, a API .NET reflexão) e duas implementações muito eficientes (nomeadamente a implementação canônica da Microsoft e Mono ).

Mas não posso reclamar experiência em qualquer uma das arquiteturas assim que tomar esta resposta com um grão de sal.

Outras dicas

Nesse caso LLVM é provavelmente uma escolha melhor.

LLVM tem suporte do Windows, ele só leva algum tempo para compilação

C ++ não lhe dará muito, uso C em seu lugar. Mas se você quiser, idioma a ser usado na Web, use .NET ou Java, com certeza eles lento para carregar, mas quando eles são, eles tão rápido quanto C.

Para SmartEiffel usamos C como um back-end.

Tcc é uma opção muito boa para a desenvolvimento-embora não para a libertação final (o objecto produzido é equivalente a gcc -O0)

Outro para adicionar à lista: Slava recentemente implementado Smalltalk em uma Fator backend . Eu não tentei isso mesmo, mas tenho a sensação de que vai oferecer mais das características que você quer de os de nível superior com mais como o tamanho / desempenho desde os de nível inferior.

TCC é a melhor escolha. É portátil e tem uma biblioteca para que ele possa ser facilmente usado como um backend que é chamado libtcc. Os executáveis ??são menores do que gcc e é ANSI C.

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