Interoperabilidad lingüística

La interoperabilidad de lenguajes es la capacidad de dos lenguajes de programación diferentes de interactuar de forma nativa como parte del mismo sistema y operar en el mismo tipo de estructuras de datos. [1]

Existen muchas formas en las que los lenguajes de programación son interoperables entre sí. HTML , CSS y JavaScript son interoperables ya que se utilizan en conjunto en páginas web. Algunos lenguajes orientados a objetos son interoperables gracias a su máquina virtual de alojamiento compartido (por ejemplo, lenguajes compatibles con .NET CLI en Common Language Runtime y lenguajes compatibles con JVM en Java Virtual Machine ). [2]

Métodos para la interoperabilidad

Modelos de objetos

Los modelos de objetos son modelos estandarizados que permiten representar objetos de una manera independiente del lenguaje, de modo que los mismos objetos pueden usarse en distintos programas y lenguajes. CORBA y COM son los modelos de objetos más populares.

Maquinas virtuales

Diferentes lenguajes se compilan en un entorno de ejecución compartido.

Una máquina virtual (VM) es un lenguaje intermedio especializado en el que se compilan varios lenguajes diferentes. Los lenguajes que utilizan la misma máquina virtual pueden interoperar, ya que compartirán un modelo de memoria y un compilador y, por lo tanto, las bibliotecas de un lenguaje se pueden reutilizar para otros en la misma VM. Las VM pueden incorporar sistemas de tipos para garantizar la corrección de los lenguajes participantes y dar a los lenguajes una base común para su información de tipos. El uso de un lenguaje intermedio durante la compilación o interpretación puede brindar más oportunidades de optimización. [1]

Interfaces de funciones externas

Las interfaces de funciones externas (FFI) permiten que los programas escritos en un lenguaje llamen a funciones escritas en otro. A menudo, existen consideraciones que impiden tratar las funciones externas como funciones escritas en el lenguaje anfitrión, como las diferencias en los tipos y el modelo de ejecución. Las interfaces de funciones externas permiten crear bibliotecas contenedoras que proporcionan funcionalidad de una biblioteca de otro lenguaje en el lenguaje anfitrión, a menudo en un estilo que es más idiomático para el lenguaje. La mayoría de los lenguajes tienen FFI para C , que es la "lengua franca" de la programación actual.

Desafíos

Diferencias entre los modelos de objetos

Los lenguajes orientados a objetos intentan emparejar contenedores de datos con código, pero la forma en que cada lenguaje elige cómo hacerlo puede ser ligeramente diferente. Esas decisiones de diseño no siempre se traducen fácilmente a otros lenguajes. Por ejemplo, las clases que utilizan herencia múltiple de un lenguaje que la permite no se traducirán bien a un lenguaje que no la permite. Un enfoque común para este problema es definir un subconjunto de un lenguaje que sea compatible con las características de otro lenguaje. [3] Este enfoque significa que para que el código que utiliza características fuera del subconjunto pueda interoperar, necesitará encapsular algunas de sus interfaces en clases que puedan ser entendidas por el subconjunto.

Modelos de memoria

Las diferencias en la forma en que los lenguajes de programación manejan la desasignación de memoria es otro problema al intentar crear interoperabilidad. Los lenguajes con desasignación automática no interoperarán bien con aquellos con desasignación manual, y aquellos con destrucción determinista serán incompatibles con aquellos con destrucción no determinista. Según las restricciones del lenguaje, existen muchas estrategias diferentes para unir los diferentes comportamientos. Por ejemplo: los programas C++, que normalmente utilizan la desasignación manual, podrían interoperar con un recolector de basura estilo Java modificando el comportamiento de desasignación para eliminar el objeto, pero no recuperar la memoria. Esto requiere que cada objeto tenga que ser desasignado manualmente, para que el recolector de basura libere la memoria de manera segura.

Mutabilidad

La mutabilidad se convierte en un problema cuando se intenta crear interoperabilidad entre lenguajes puramente funcionales y procedimentales. Los lenguajes como Haskell no tienen tipos mutables, mientras que C++ no ofrece garantías tan rigurosas. Muchos tipos funcionales, cuando se conectan a lenguajes orientados a objetos, no pueden garantizar que los objetos subyacentes no se modifiquen.

Véase también

Referencias

  1. ^ ab Malone, Todd (2014). "Interoperabilidad en lenguajes de programación". CiteSeerX  10.1.1.684.337 . {{cite journal}}: Requiere citar revista |journal=( ayuda )
  2. ^ "Interoperabilidad entre lenguajes". Microsoft Developer Network (msdn.microsoft.com).
  3. ^ Chisnall, David (1 de octubre de 2013). "El desafío de la interoperabilidad entre lenguajes". Queue . 11 (10): 20–28. doi : 10.1145/2542661.2543971 . ISSN  1542-7730.
Obtenido de "https://es.wikipedia.org/w/index.php?title=Interoperabilidad_lingüística&oldid=1214789662"