En informática , la abstracción metalingüística es el proceso de resolver problemas complejos mediante la creación de un nuevo lenguaje o vocabulario para comprender mejor el espacio de problemas. En términos más generales, también abarca la capacidad o habilidad de un programador de pensar más allá de las nociones preconcebidas de un lenguaje específico para investigar de manera exploratoria un espacio de problemas en busca del tipo de soluciones que sean más naturales o cognitivamente ergonómicas para él. Es un tema recurrente en el influyente libro de texto del MIT Structure and Interpretation of Computer Programs , que utiliza Scheme , un dialecto de Lisp , como marco para construir nuevos lenguajes.
Por ejemplo, imaginemos que se modela un aeropuerto dentro de una computadora. El aeropuerto tiene elementos como pasajeros, reservas, empleados, presupuestos, aviones, equipaje, llegadas y salidas y servicios de tránsito.
Un programador procedimental (por ejemplo, C ) podría crear estructuras de datos para representar estos elementos de un aeropuerto y procedimientos o rutinas para operar en esas estructuras de datos y actualizarlas, modelando el aeropuerto como una serie de procesos que atraviesan sus diversos elementos. Por ejemplo, las reservas son una base de datos que se utiliza para mantener sincronizados a los pasajeros y los aviones mediante actualizaciones registradas como llegadas y salidas; los presupuestos son similares, pero por dinero: los aeropuertos son muchas cosas que deben hacerse en el orden correcto para asegurarse de que los pasajeros lleguen a su destino.
Un programador orientado a objetos (por ejemplo, Java ) podría crear objetos para representar los elementos del aeropuerto con métodos que representan sus comportamientos, modelando el aeropuerto como una colección de cosas posiblemente relacionadas que interactúan entre sí de manera característica. Por ejemplo, los pasajeros, los empleados y los aviones poseen atributos de ubicación que se pueden modificar mediante métodos de tránsito aplicables: los servicios de tránsito tienen métodos para llevar a los empleados y pasajeros hacia y desde los aeropuertos, los aviones tienen métodos para llevar a los pasajeros junto con ellos entre diferentes aeropuertos: los aeropuertos son una agrupación de cosas que funcionan juntas según lo previsto.
Un programador funcional (p. ej. Scheme ) podría crear funciones de orden superior que representen tanto los elementos como los comportamientos o procesos del aeropuerto, modelando el aeropuerto como un mapa de relaciones entre elementos en sus diversos dominios y aquellos en sus codominios surtidos. P. ej., los aeropuertos asignan presupuestos a horarios de reservas, cada uno de los cuales es en sí mismo un mapa de elementos a elementos: balances de ingresos y gastos, y balances de llegadas y salidas, cada uno de los cuales es, recursivamente, su propio mapeo de elementos y sus propios mapeos en especie, que comprenden colectivamente un conjunto de morfismos: los aeropuertos son, transitivamente, la transformación evaluativa de una cierta economía espacio-temporal.
Por último, un programador metalingüístico podría abstraer el problema creando nuevos lenguajes específicos de dominio para modelar aeropuertos, con primitivas y tipos peculiares para hacerlo. El nuevo lenguaje podría abarcar cualquiera o todos los enfoques anteriores cuando sea más adecuado, [1] lo que potencialmente permitiría al programador conservar tanto la generalidad abstracta del modelo funcional, la sensibilidad intuitiva del modelo de objetos y el pragmatismo orientado a los detalles del modelo procedimental.
Debido a que la creación de abstracciones metalingüísticas funcionales en lenguajes no funcionales puede ser engorrosa mientras que lo inverso suele ser trivial (por ejemplo, generalmente es mucho más fácil tomar una abstracción de programación libre de efectos secundarios y simplemente agregarle efectos que tomar una abstracción con estado y evitar o encapsular su propagación de estado), y debido a la flexibilidad sintáctica y la seguridad referencial de las macros funcionales , la programación metalingüística es en su mayoría idiomática de los lenguajes de programación funcional.