Pregunta

Quiero hacer un lenguaje compilado. Actualmente estoy evaluando backends. Hasta ahora estoy mirando C debido a su rapidez de ejecución, la compilación, y un pequeño, fácil de usar compilador llamado TCC.

Después de leer las discusiones aquí acerca de su uso como lengua intermedia, que estoy tratando de pensar en cómo hacerlo compatible con la recolección de basura, y el manejo de excepciones. Hasta el momento, creo que puedo resolver ambos, pero con muchos gastos.

Aquí están algunos de mis pensamientos sobre los otros backends posibles:

  1. Asamblea:. No portables y un total dolor de programar en
  2. .NET: Se siente muy lento. 5 segundos para poner en marcha y 5 segundos para evaluar 1 + 2 en IronPython y Boo. No se puede ejecutar sin gran biblioteca.
  3. JVM: Se siente un poco lento. No hay acceso a bibliotecas binarias. No se puede ejecutar sin gran biblioteca.
  4. LLVM: No hay ventanas de apoyo. He oído que el tamaño del ejecutable compilado es de 16 MB +
  5. C--: parece poco desarrollado
  6. .
  7. C ++: posiblemente. No se puede encontrar un buen pequeño libre me puedo paquete con.

Puede alguno de ustedes cambiar de opinión o tiene más que añadir a esta lista?

Editar

He estado experimentando con LLVM recientemente. Descubrí que tienen binarios precompilados y que es posible compilar para el montaje nativo.

http: //www.antlr. org wiki / pantalla / CS652 / máquina / Generating + + + ejecutable binarios + con + LLVM

Estos son los pasos:

  1. Ejecutar llvm-como en la Asamblea LLVM, que produce un archivo de código de bytes LLVM.
  2. LLC Ejecutar en el archivo de código de bytes LLVM para producir un archivo de ensamblaje.
  3. Ejecutar un ensamblador en el archivo de ensamblaje para producir un archivo objeto. (O ejecutar llvm-ld, que parece depender de un compilador de C instalado externamente)
  4. Compilar a ejecutable con gcc, etc.
¿Fue útil?

Solución

¿Ha considerado escribir un frontend para GCC ? Menciono esto por el bien completo sólo - por lo que yo sé la interfaz de gestión es bastante complicado y el código base es enorme y difícil de comprender

.

Por otro lado, el CCG es un producto maduro con muchos programadores expertos que trabajan en él. Por lo menos, es probable que proporciona la base más sólida de todas las alternativas.

En lo personal, yo preferiría LLVM (arquitectura emocionante) o IL de .NET: muy, muy fácil de usar, tiene un gran soporte de herramientas ( Reflector , Cecil , Reflexil y por último pero no menos importante, la API .NET reflexión) y dos implementaciones muy eficientes (es decir, la aplicación canónica de Microsoft y Mono ).

Pero no puedo reclamar experiencia en cualquiera de las arquitecturas a fin de tomar esta respuesta con un grano de sal.

Otros consejos

En ese caso LLVM es probablemente una mejor opción.

LLVM tiene soporte para Windows, sólo se necesita un poco de tiempo para compilar

C ++ no le dará tanto, el uso de C en su lugar. Pero si quieres idioma que se utilizará en la web, el uso de .NET o Java, seguro que tarda en cargarse pero cuando lo son, lo más rápido que C.

En SmartEiffel usamos C como un back-end.

Tcc es una muy buena opción para desarrollo- aunque no para la liberación final (el objeto producido es equivalente a -O0 gcc)

Otra para añadir a la lista: Slava implementó recientemente Smalltalk en un Factor backend . No he probado esto por mí mismo, pero tengo la sensación de que ofrecería más de las características que desee de los de más alto nivel con más como el tamaño / rendimiento de los de nivel inferior.

TCC es la mejor opción. Es portátil y tiene una biblioteca por lo que fácilmente puede ser utilizado como un motor que se llama libtcc. Los ejecutables son más pequeños que gcc y es ANSI C.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top