C ++ es un gran lenguaje en muchos sentidos, pero algunas cosas en particular son engorrosas 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 reescribir los mismos patrones una y otra vez.
Le pregunté sobre freenode y probé varias ideas, como compilar Lisp-> C con compiladores como ECL y Bigloo, pero ninguno de ellos generó un código C particularmente limpio.
¿Hay algún trabajo sobre este tema?
Respuestas:
Compilar idiomas de nivel superior a los de nivel inferior es muy sencillo. Hay innumerables ejemplos de que se está haciendo. Sin salir de una tangente, podemos señalar los primeros compiladores de C ++ que se compilaron en C.
Sin embargo, cuando comienzas a poner "limpio" y "legible" en la mezcla, las cosas se ponen realmente difíciles. El código limpio y legible expresa el significado y la intención de lo que estaba escribiendo. Las computadoras son notoriamente malas para interpretar y crear significado. Es más probable que termines con variables nombradas
int_147
queinput_buffer_length
. Claro, si realmente quisiera hacer que este proyecto funcionara, podría participar en un proyecto de IA masivo para manejar la conversión de su Lisp a algún tipo de C ++ legible decentemente, pero, para ser sincero, los compiladores de Common Lisp son bastante buenos en lo que hacen .Más importante que la dificultad de generar C ++ a partir de un Lisp es la utilidad de esto. ¿Para qué serviría que el C ++ generado sea legible? Si 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é sucede cuando quieren modificar su C ++ generado? ¿Qué sucede si escriben cosas en C ++ que no se traducen limpiamente a su Lisp?
Digamos que lo hemos resuelto. Es una década más tarde y, después de gastar cientos de millones de dólares en fondos de donaciones del Departamento de Defensa, hemos construido este motor de traducción de idiomas masivo, complejo (pero sin fallas) 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?
Correcto. Su jefe quiere que escriba C ++ y prefiere no hacerlo. Actualice su currículum y encuentre un nuevo trabajo.
fuente
Respuesta corta, actualmente no hay nada que lo ayude a convertir Lisp a READABLE C ++. Claro que puede convertir cualquier cosa a C ++ o C, pero el código legible está escrito por humanos, no por programas. Claro que puede generar código C ++ con el formato adecuado, sangrías, nombres de clase agradables y tal vez incluso de alguna manera obtener una traducción perfecta de los objetos de clase Lisp a clases C ++. Tal vez pueda vincular las dependencias de su biblioteca correctamente, y tal vez pueda compilar binarios que estén muy cerca de lo que el lenguaje C habría producido si hubiera escrito todo en C. Pero, en última instancia, el código legible es una belleza que no se entiende por cualquiera, al menos no todavía, y posiblemente nunca considerando que el término sea legible Para empezar, es bastante subjetivo y lo que podría considerarse legible entre un grupo de desarrolladores puede ser considerado atroz por otros.
Para que C ++ sea legible, debe 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 un público específico en mente y pueden ser hermosos y conmovedores si se escriben bien, y ofuscados y tediosos si no. Y si no podemos encontrar un programa para escribir bellas novelas de ficción para nosotros, entonces no podremos encontrar algo para convertir a C ++ legible.
fuente
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 extraes muchos encabezados, el sonido metálico se completa . Y para la compilación encontré todos los IDEs que faltan de todos modos; terminas escribiendo el sistema de compilación en CMake o algo de todos modos. Y no he visto nada para proporcionar cualquier ayuda para Lisp, y punto.
Es cierto que C ++ no tiene macros de estilo lisp, pero las plantillas pueden hacer todo lo que pueden hacer las macros higiénicas del esquema y algunas más, porque puede implementarlas de manera diferente según los tipos y sus capacidades. Es cierto que su falta de recolector de basura hace que los cierres sean un poco más tediosos, pero el lenguaje RAII utilizado para la gestión de recursos tiene sus propias ventajas y propiedades interesantes.
Si eres estudiante, ¿conoces realmente todos los C ++ avanzados? Desde la biblioteca de algoritmos hasta la escritura de plantillas con implementaciones alternativas basadas en las propiedades de los tipos de argumentos, compile los cálculos de tiempo usando metaprogramación de plantillas (usando Boost.MPL) para comprender cómo funciona Boost. Si no, recomiendo aprovechar esta oportunidad para aprender algo de C ++ avanzado. No será necesario mantener la asignación de la escuela, por lo que puede jugar con el lenguaje para ver lo que valen las características en qué parte del código de producción debería tener cuidado con la legibilidad.
Y para responder a la pregunta directa final: C ++ tiene muchos más modismos en su haber que no hay forma de generar C ++ idiomático a partir de nada. Simplemente porque no habrá forma de expresar la mayoría de esos modismos en otra cosa. Comenzando por el hecho de que cualquier cosa será la recolección de basura asignará todo en el montón, mientras que en C ++ es idiomático aprovechar la pila.
fuente