Mejores prácticas para proyectos de lenguaje de programación múltiple

StackOverflow https://stackoverflow.com/questions/313756

  •  10-07-2019
  •  | 
  •  

Pregunta

¿Alguien tiene alguna experiencia haciendo esto? Estoy trabajando en un descompilador de Java en este momento en C ++, pero me gustaría un lenguaje de nivel superior para hacer las transformaciones reales de los árboles internos. Tengo curiosidad por saber si la sobrecarga de ordenar datos entre idiomas vale la pena de un lenguaje más expresivo para articular mejor lo que estoy tratando de lograr (como Haskell). ¿Se hace esto realmente en el "mundo real", o generalmente se elige un idioma al comienzo de un proyecto y se adhiere a él? ¿Algún consejo de quienes lo han intentado?

¿Fue útil?

Solución

Soy un gran defensor de elegir siempre el lenguaje de programación adecuado para cada desafío. Si hay otro idioma que maneja fácilmente alguna tarea difícil, diría que lo haga.

¿Sucede en el mundo real? Sí. Actualmente estoy trabajando en un proyecto que está compuesto tanto de PHP como de código Objective-C.

El truco es, como usted señaló, la comunicación entre los dos idiomas. Si es posible, deje que cada idioma se adhiera a su propio dominio y haga que las dos secciones se comuniquen de la manera más simple posible. En mi caso, fueron documentos XML enviados a través de http. En su caso, algún tipo de archivo de texto formateado podría ser la respuesta.

Otros consejos

Los costos de clasificación dependen de los idiomas y la arquitectura con la que está trabajando. Por ejemplo, si está en CLR o JVM, hay soluciones de interoperabilidad de bajo costo disponibles, aunque sé que está trabajando con C ++ probablemente no administrado.

Otra vía es un lenguaje incrustado específico del dominio. Las transformaciones de árbol a menudo se pueden expresar mediante la coincidencia de patrones y la aplicación de un número relativamente pequeño de funciones. Podría considerar escribir un patrón de árbol simple, por ejemplo algo que se parece a Lisp s-exprs pero usa marcadores de posición para capturar variables, con acciones asociadas que son funciones que transforman el subárbol coincidente.

John Ousterhout , el inventor de Tcl / Tk fue un gran defensor de la programación en varios idiomas y escribió bastante sobre él. Para hacerlo, necesita un mecanismo de interfaz limpio entre los idiomas que está utilizando para ello. Hay bastantes mecanismos para esto. Ejemplos de diferentes mecanismos para hacer esto son:

  • SWIG (Envoltorio simplificado y El generador de interfaz puede tomar una c o c ++ (o varios otros idiomas) archivo de encabezado y generar un interfaz para un lenguaje de alto nivel como perl o python que permite usted para acceder a la API. Existen otros sistemas que usan esto enfoque.

  • Java admite JNI , y varios otros sistemas como el de Python ctypes , VisualWorks DLL / C conectar son mecanismos nativos que te permiten explícitamente construir la llamada a la baja subsistema de nivel.

  • Tcl / Tk fue diseñado explícitamente para ser incrustado y tiene una API nativa para una biblioteca C para agregar ganchos en el idioma. Las construcciones para esto se asemeja a las estructuras argv [] en C, y fueron diseñados para hacerlo relativamente fácil de interactuar con un programa C basado en línea de comandos en Tcl. Esto es similar a lo anterior ejemplo, pero viniendo de lo contrario dirección. Muchos lenguajes de script tales como Python, Lua y soporte Tcl este tipo de mecanismo.

  • Mecanismos de pegamento explícitos como Pyrex , que son similares a un generador de envoltura, pero tienen su lenguaje propio para definir el interfaz. Pyrex es en realidad un lenguaje de programación completo Middleware como COM o CORBA permite un genérico definición de interfaz a construir externamente a la aplicación en un lenguaje de definición de interfaz y enlaces de idiomas para el idiomas interesados ??en utilizar el mecanismo de interfaz común.

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