¿Es posible compilar un lenguaje de nivel superior a C ++ legible? [cerrado]

12

C ++ es un gran lenguaje en muchos sentidos, pero algunas cosas en particular son difíciles de escribir sin un IDE. Como usuario de VIM, sería muy interesante si tuviera acceso a un lenguaje de nivel superior que me permitiera escribir C ++ con S-Expressions y posiblemente con macros similares a Lisp, permitiendo la generación de código limpio y evitando volver a escribir los mismos patrones. Una y otra vez.

He preguntado en freenode y he probado varias ideas, como compilar Lisp- > C con compiladores como ECL y Bigloo, pero ninguno de ellos generó código C particularmente limpio.

¿Hay algún trabajo sobre este tema?

    
pregunta MaiaVictor 29.08.2013 - 20:48

3 respuestas

13

La compilación de idiomas de nivel superior a los de nivel inferior es un pastel. Hay innumerables ejemplos de que se está haciendo. Sin desviarnos de gran parte de la tangente, podemos apuntar a los primeros compiladores de C ++ que se compilaron hasta C.

Cuando empiezas a lanzar "limpio" y "legible" en la mezcla, sin embargo, las cosas se ponen muy difíciles. El código limpio y legible expresa el significado y intención de lo que estaba escribiendo. Las computadoras son notoriamente malas para interpretar & creando significado. Es más probable que termines con variables llamadas int_147 que input_buffer_length . Claro, si realmente quería hacer que este proyecto funcionara, podría involucrarse en un proyecto masivo de AI para manejar la conversión de su Lisp a algún tipo de C ++ decentemente legible pero, para ser perfectamente honestos, los compiladores Common Lisp son Bastante jodidamente bueno en lo que hacen.

Más importante que la dificultad de generar C ++ a partir de un Lisp es la utilidad de esto. ¿Qué propósito serviría para que el C ++ generado sea legible? Si el Lisp es su código fuente, las representaciones intermedias deben ser irrelevantes. Si desea poder entregar el C ++ a los programadores que no entienden su Lisp original, ahora tiene otro problema. ¿Qué pasa cuando quieren modificar su C ++ generado? ¿Qué sucede si escriben cosas en C ++ que no se traducen limpiamente en tu Lisp?

Digamos que hemos resuelto eso. Es una década más tarde y, después de gastar cientos de millones de dólares en donaciones del DoD, hemos desarrollado este motor de traducción de lenguaje masivo, complejo (pero perfecto) que puede convertir a Lisp en C ++ idiomático y viceversa. ¿Qué hemos ganado realmente que no se lograría mejor enseñando a las personas un nuevo lenguaje de programación o simplemente desarrollando un nuevo compilador que nos permita vincular los dos idiomas?

Oh, cierto. Tu jefe quiere que escribas C ++ y prefieres no hacerlo. Actualice su currículum vitae & encontrar un nuevo trabajo.

    
respondido por el Sean McSomething 02.09.2013 - 02:40
3

Respuesta corta, actualmente no hay nada que lo ayude a convertir Lisp a C ++. Seguro que puedes convertir cualquier cosa a C ++ o C pero el código legible está escrito por personas, no por programas. Claro que puede generar código C ++ con el formato adecuado, sangrías, buenos nombres de clase y tal vez incluso obtener la traducción perfecta de los objetos de la clase Lisp a las clases de C ++. Tal vez pueda vincular las dependencias de su biblioteca de la manera correcta, y tal vez pueda compilar binarios que estén muy cerca de lo que habría producido el lenguaje C si lo hubiera escrito todo en C. Pero en última instancia, el código legible es una belleza que nadie entiende, al menos no todavía, y posiblemente nunca considerando que el término legible es, para empezar, bastante subjetivo y lo que podría considerarse legible entre un grupo de desarrolladores puede ser considerado atroz por otros.

Para hacer que C ++ sea legible, debes escribir en C ++, no en Lisp. También debe poder cambiar su estilo de codificación de acuerdo con lo que las personas que leerán su código entenderán mejor. Al igual que los libros, los programas se escriben con una audiencia específica en mente y pueden ser hermosos y conmovedores si están bien escritos, y ofuscados y tediosos si no lo están. Y si no podemos crear un programa para escribir bellas novelas de ficción para nosotros, entonces no podremos encontrar algo para convertir a C ++ legible.

    
respondido por el Shashank Gupta 02.09.2013 - 02:56
3

ViM es un gran IDE para C ++. También tiene la mejor terminación que he visto hasta ahora, aunque se vuelve un poco lento si tira muchos encabezados, clang complete . Y para la compilación encontré todos los IDE carentes de todos modos; Terminas escribiendo el sistema de compilación en CMake o algo así. Y no he visto nada para proporcionar ninguna ayuda durante el período de visualización.

Cierto, C ++ no tiene macros de estilo lisp, pero las plantillas pueden hacer todo lo que pueden hacer las macros higiénicas y algunas más, porque puede implementarlas de manera diferente según los tipos y las capacidades. Es cierto que la falta de recolector de basura hace que los cierres sean un poco más tediosos, pero el lenguaje RAII utilizado para la administración de recursos tiene sus propias ventajas y propiedades interesantes.

Si eres estudiante, ¿realmente sabes todo el C ++ avanzado? Desde la biblioteca de algoritmos sobre plantillas de escritura con implementaciones alternativas basadas en las propiedades de los tipos de argumentos, ¿compilar cálculos de tiempo usando la meta-programación de plantillas (usando Boost.MPL) para entender cómo funciona Boost bajo el capó? Si no, recomiendo tomar esto como una oportunidad para aprender algo de C ++ avanzado. La asignación de la escuela no tendrá que mantenerse, por lo que puedes jugar con el idioma para ver qué valen las funciones en qué lugar del código de producción deberías tener cuidado con la legibilidad.

Y para responder la pregunta directa final: C ++ tiene muchos más modismos en su haber que no hay forma de generar C ++ idiomático desde cualquier cosa. Simplemente porque no habrá manera de expresar la mayoría de esos modismos en otra cosa. A partir del hecho de que cualquier cosa se recolectará en la basura, se asignará todo en el montón, mientras que en C ++ es idiomático aprovechar la pila.

    
respondido por el Jan Hudec 02.09.2013 - 10:48

Lea otras preguntas en las etiquetas