La interoperabilidad de lenguajes es la capacidad de dos lenguajes de programación diferentes para interactuar de forma nativa como parte del mismo sistema. [1] La interoperabilidad es ventajosa porque los lenguajes de programación están optimizados para tareas específicas y permitirles comunicarse puede crear mejores sistemas.
Hay muchas formas en que los lenguajes de programación son interoperables entre sí. HTML , CSS y JavaScript son una forma de interoperabilidad de lenguajes, ya que trabajan juntos para representar páginas web. Algunos lenguajes orientados a objetos pueden hacer esto gracias a la máquina virtual de alojamiento (por ejemplo, lenguajes compatibles con .NET CLI en Common Language Runtime y lenguajes compatibles con JVM en la máquina virtual Java ). [2] Los lenguajes de programación de alto nivel suelen ser interoperables con algunos lenguajes de nivel inferior, por ejemplo Swift y Objective-C de Apple .
Métodos de interoperabilidad
Modelos de objetos
Para facilitar la interoperabilidad entre lenguajes, un método es utilizar modelos de objetos . CORBA y COM son los modelos de objetos más populares. Estos estándares proporcionan un conjunto básico de reglas sobre cómo los lenguajes orientados a objetos implementarían sus modelos de datos para permitir una forma neutral en cuanto al lenguaje de implementar objetos que se pueden usar en entornos diferentes de aquel en el que fueron creados.
Maquinas virtuales
Una máquina virtual (VM) es un software que emula sistemas operativos y actúa como un búfer entre el lenguaje y el hardware. Esto permite que un programa se ejecute en cualquier hardware o sistema operativo. Una ventaja para las máquinas virtuales es que pueden usar estos sistemas de tipos para garantizar la corrección de los idiomas participantes y les da a los idiomas un terreno común para su información de tipo. Otra ventaja es que los lenguajes diseñados para máquinas virtuales se compilan en un lenguaje intermedio de bajo nivel. El lenguaje intermedio luego pasa por su propio compilador o intérprete que puede hacer más tipos de optimización. [1]
Desafíos
Diferencias del modelo de objeto
Con los lenguajes orientados a objetos, intente emparejar contenedores de datos con código, pero la forma en que cada idioma elige cómo hacerlo puede ser ligeramente diferente. Esas decisiones de diseño no siempre se asignan fácilmente a otro idioma. Un ejemplo de esto sería cómo los diferentes lenguajes manejan la herencia . Una sola clase puede tener cero ( Go ), una ( Java ) o muchas superclases ( C ++ ) . Un enfoque común para este problema es definir un subconjunto de un idioma que se asigna directamente al otro, pero que también puede comprender completamente el otro idioma. [3] Este enfoque significa que para que el superconjunto se comunique, tendrá que envolver algunas de sus interfaces en clases que puedan ser entendidas por el subconjunto.
Modelos de memoria
Las diferencias en cómo los lenguajes de programación manejan la desasignación de memoria es otro problema cuando se intenta crear interoperabilidad. La desasignación manual y automática no es el único problema, pero si tiene una destrucción determinista y no determinista. Según las limitaciones del idioma, existen muchas estrategias diferentes para superar los diferentes comportamientos. C ++ que usa la desasignación manual podría usar un recolector de basura con estilo Java cambiando el comportamiento de desasignación para eliminar el objeto, pero no recuperar la memoria. Esto requiere que cada objeto deba desasignarse manualmente para que el recolector de basura libere la memoria de forma segura.
Mutabilidad
La mutabilidad se convierte en un problema cuando se intenta crear interoperabilidad entre lenguajes funcionales y orientados a objetos. Los lenguajes como Haskell no tienen tipos mutables, mientras que en C ++ hay algunas construcciones para marcar clases como inmutables pero carecen de soporte para determinar si algo es mutable o no. Muchos tipos funcionales cuando se conectan a lenguajes orientados a objetos no pueden garantizar que los objetos subyacentes no se modifiquen.
Ver también
Referencias
- ↑ a b Malone, Todd (2014). "Interoperabilidad en lenguajes de programación". CiteSeerX 10.1.1.684.337 . Cite journal requiere
|journal=
( ayuda ) - ^ "Interoperabilidad entre idiomas" . Microsoft Developer Network (msdn.microsoft.com).
- ^ Chisnall, David (1 de octubre de 2013). "El desafío de la interoperabilidad entre idiomas" . Cola . 11 (10): 20-28. doi : 10.1145 / 2542661.2543971 . ISSN 1542-7730 .