
Los lenguajes de programación han desempeñado un papel importante en la evolución de la inteligencia artificial (IA) desde finales de la década de 1950. Son las principales herramientas para la construcción de programas informáticos que simulan procesos inteligentes como la planificación, el aprendizaje, el razonamiento, la resolución de problemas, la percepción, la manipulación, etc.
El uso principal de las computadoras en los primeros días era realizar cálculos con números. Sin embargo, los investigadores pronto descubrieron que uno de los requisitos especiales de la IA es manipular fácilmente símbolos y listas de símbolos en lugar de procesar números o cadenas de caracteres. Esto condujo a la noción de computación simbólica como un medio adecuado para definir algoritmos que procesaran información de cualquier tipo y pudieran usarse para simular la inteligencia humana.
Pronto resultó que la programación con símbolos requería un mayor nivel de abstracción que el que era posible con los lenguajes de programación que fueron diseñados específicamente para procesar números.
Dado que los lenguajes de la época no ofrecían tales facilidades, un investigador del MIT, John MacCarthy, desarrolló, durante 1956-58, la definición de un lenguaje ad-hoc para la programación lógica, denominado LISP (LISt Processing language). Desde entonces, han surgido varios cientos de lenguajes derivados, los llamados «dialectos Lisp». Debido a su expresividad y flexibilidad, LISP tuvo mucho éxito en la comunidad de inteligencia artificial hasta la década de 1990.
Otro evento importante al comienzo de la IA fue la creación de un lenguaje con el objetivo principal de expresar reglas y axiomas lógicos. Alrededor de 1972, Alain Colmerauer y Philippe Roussel crearon un nuevo lenguaje llamado Prolog (PROgramming in Logic), en el que se pueden definir las reglas lógicas esperadas de una solución y el compilador las transforma automáticamente en una secuencia de instrucciones.
Prolog se utiliza en IA y procesamiento de lenguaje natural. Sus reglas de sintaxis y su semántica son simples y se consideran accesibles para los no programadores. Uno de los objetivos era proporcionar una herramienta para la lingüística que fuera compatible con la informática.
En la década de 1990, los lenguajes de máquina con C/C++ y Fortran ganaron popularidad y eclipsaron el uso de LISP y Prolog. Se puso mayor énfasis en la creación de funciones y bibliotecas para el cómputo científico en estas plataformas y se utilizaron para tareas intensivas de análisis de datos o inteligencia artificial con los primeros robots.
A mediados de la década de 1990, Sun Microsystems inició un proyecto para crear un lenguaje que resolviera fallas de seguridad, programación distribuida y subprocesos múltiples de C++. Además, querían una plataforma que pudiera ser portada a cualquier tipo de dispositivo o plataforma. En 1995, presentaron Java, que llevó el concepto de orientación a objetos mucho más allá que C++.
Una de las adiciones más importantes a Java fue Java VM (JVM), que permitió la capacidad de ejecutar el mismo código en cualquier dispositivo, independientemente de su tecnología interna y sin la necesidad de compilar previamente para cada plataforma. Java ofreció uno de los primeros marcos, con herramientas específicas para Internet, brindando la posibilidad de ejecutar aplicaciones en forma de applets de Java y scripts de Java (es decir, programas autoejecutables) sin necesidad de instalación. Esto tuvo un enorme impacto en la IA y sentó las bases en los campos de la web 2.0/3.0 y el internet de las cosas (IoT).
Sin embargo, el desarrollo de IA utilizando lenguajes puramente procedimentales fue costoso, requería mucho tiempo y era propenso a errores. En consecuencia, esto dirigió la atención hacia otros lenguajes multiparadigmáticos que podrían combinar características de lenguajes orientados a objetos funcionales y procedimentales.
Aunque se publicó por primera vez en 1991, Python comenzó a ganar popularidad como una alternativa a C/C++ con Python 2.2 en 2001. El concepto de Python era tener un lenguaje que pudiera ser tan poderoso como C/C++ pero también expresivo y pragmático para ejecutar «scripts». ” como Shell Script. En 2008, la publicación de Python 3.0 solucionó varias fallas iniciales. Más tarde, el lenguaje comenzó a ser considerado un serio competidor para C++, Java y otros lenguajes de secuencias de comandos como Perl.
Desde 2008, la comunidad de Python ha estado tratando de ponerse al día con lenguajes específicos para computación científica, como Matlab y R. Debido a su versatilidad, Python ahora se usa con frecuencia para la investigación en IA. Sin embargo, aunque Python tiene algunas de las ventajas de la programación funcional, las velocidades de tiempo de ejecución todavía están muy por detrás de otros lenguajes funcionales, como Lisp o Haskell, y aún más de C/C++. Además, carece de eficiencia al administrar grandes cantidades de memoria y sistemas altamente concurrentes.
A partir de 2010 y principalmente impulsadas por la necesidad de traducir la IA en productos comerciales que pudieran ser utilizados por miles de usuarios en tiempo real, las empresas de TI buscaron alternativas mediante la creación de lenguajes híbridos que combinaran lo mejor de todos los paradigmas sin comprometer la velocidad, la capacidad y concurrencia.
En los últimos años, utilizaron nuevos lenguajes como Scala y Go (Google), así como Erlang (Facebook) o Clojure, para aplicaciones con muy alta concurrencia y paralelización, principalmente del lado del servidor. También han surgido nuevos lenguajes como Julia y Lua para la computación científica.
En esta publicación, echaremos un vistazo rápido a la lista de los principales lenguajes de programación utilizados en la historia de la IA.
1. ceceo
Año: 1958
Tipo: Multiparadigma (funcional, procedimental)
Influenciado por: IPL
- El segundo lenguaje de programación más antiguo.
- Homoicónico: fácil de manejar con una gran cantidad de datos.
- Buena alineación matemática.
- Muchos recursos para IA simbólica (Eurisko o CYC)
- Creación rápida de prototipos, creación de objetos dinámicos, recolección de elementos no utilizados y flexibilidad
2. pitón
Año: 1972
Tipo: Procesal
Influenciado por: C++, Java, Haskell, Perl
- Biblioteca estándar de gran utilidad que hace que el lenguaje sea versátil y flexible. Centrarse en el desarrollo rápido.
- Gran cantidad de marcos y utilidades para IA, ML, aprendizaje profundo, computación científica, lenguaje de procesamiento natural, etc.
- Algunas de sus bibliotecas más populares incluyen TensorFlow, scikit-learn, PyTorch, Keras, SparkMLlib, MXNet, Theano y Pybrain.
- Excelente apoyo comunitario
3. R
Año: 1972
Tipo: Declarativo
Influenciado por: Lisp, Scheme
- Los conjuntos más completos de funciones y paquetes de análisis estadístico.
- Amplia comunidad de herramientas para IA o ML proporcionadas gratuitamente a través del repositorio CRAN.
- Los paquetes de programación de IA incluyen Gmodels, Tm, RODBC y OneR.
- Comunidad activa y solidaria.
- Amplia variedad de bibliotecas y paquetes.
4.C++
Año: 1983
Tipo: Procesal
Influenciado por: C, Algol 68
- Rápidos tiempos de ejecución.
- Algunas bibliotecas compatibles para IA, como Alchemy para lógica Markov y Mlpack para ML general.
5. Prólogo
Año: 1984
Tipo: (procedimiento, funcional)
Influenciado por: Planificador
- Buen conjunto de utilidades para expresar las relaciones entre objetos y computación simbólica.
- Amplio conjunto de funcionalidades internas para realizar programación lógica.
- Prolog ofrece dos enfoques: enfoque simbólico (sistemas expertos basados en reglas, probadores de teoremas, enfoques basados en restricciones) y enfoque estadístico (redes neuronales, minería de datos, aprendizaje automático)
6. Erlang
Año: 1986
Tipo: funcional concurrente
Influenciado por: Lisp, Prolog
- Buen marco para lidiar con concurrencia y nubes elásticas (escalabilidad).
- Bibliotecas para programación lógica como erlog
7. Ir
Año: 1990
Tipo: Funcional
Influenciado por: Algo, CSP, Python
- Fácil concurrencia y patrones asincrónicos con un tiempo de ejecución decente.
- Algunas bibliotecas para el aprendizaje automático, como Golearn.
8. Haskell
Año: 1990
Tipo: Funcional
Influenciado por: Lisp
- Fácil paralelización y posibilidad de manejar infinitos cómputos.
- Algunas utilidades para implementar redes neuronales (LambdaNet) y ML general (HLearn).
- Fuertes capacidades de abstracción
- Gestión de memoria integrada
- Código reusable y fácil de entender
9. Matlab
Año: 1993
Tipo: Multi-paradigma
Influenciado por: APL
- Sólido Entorno integrado. Matrix, lenguaje orientado al álgebra lineal.
- Una selección de cajas de herramientas y utilidades para aprendizaje automático, estadísticas y procesamiento de señales.
10. Lúa
Año: 1993
Tipo: (procedimiento, funcional)
Influenciado por: C++, Esquema
- Lenguaje versátil y ligero.
- Es el lenguaje de facto utilizado para la máquina y el marco de trabajo de aprendizaje profundo Torch.
11. Escala
Año: 1993
Tipo: Multiparadigma (procedimiento, funcional)
Influenciado por: Erlan, Haskel, Java, Lisp, Lisp (Esquema)
- Tiempo de ejecución rápido (casi como C). Se ejecuta sobre la JVM. Muy buen soporte para sistemas distribuidos.
- Varias bibliotecas y marcos para IA, ML y computación numérica (ScalaNLP).
12.Java
Año: 1995
Tipo: Procedimental Concurrente
Influenciado por: C++, Ada 83
- VM proporciona capacidad de mantenimiento, portabilidad y transparencia eficientes.
- Una gran cantidad de bibliotecas y herramientas para IA como Tweety y ML (DeepLearning4, Weka, Mallet, etc.)
- Fácil de usar, flexible e independiente de la plataforma.
13. Do#
Año: 2000
Tipo: Multiparadigma (funcional, procedimental)
Influenciado por: C++, Java, Haskel
- Fácil creación de prototipos y entorno bien elaborado.
- El lenguaje más utilizado para la IA en los juegos, ya que proporciona una excelente compatibilidad con motores de juegos populares como Unity.
14. Cierre
Año: 2007
Tipo: Funcional
Influenciado por: Lisp, Erlang, Prolog
- Diseño sencillo e infraestructura en la nube que funciona sobre la JVM.
- Desarrollo interactivo rápido y bibliotecas para el desarrollo de árboles de comportamiento (alter-ego)
- Memoria transaccional de software (STM), estructuras de datos inmutables persistentes y programación interactiva
15. Julio
Año 2012
Tipo: Multi-paradigma
Influenciado por: Lisp, Lua, Matlab, Python
- Fácil integración con C y Fortran. Lenguaje de orientación científica.
- Varios paquetes de ML como Mocha o MLBase.
- Es rápido, tiene una sintaxis amigable con las matemáticas y administración automática de memoria.
- Paralelismo superior.
- Sistema de tipos dinámicos y administrador de paquetes incorporado
- Soporte directo para funciones C