En el espíritu de algunas discusiones generales como esta , estoy abriendo este hilo con la intención de reunir opiniones sobre cuáles son los desafíos abiertos y los temas candentes en la investigación sobre lenguajes de programación . Espero que la discusión pueda traer a la superficie opiniones sobre el futuro de la investigación en lenguajes de programación.
Creo que este tipo de discusión ayudará a los nuevos estudiantes investigadores, como yo, interesados en PL, así como a aquellos que ya están algo involucrados.
pl.programming-languages
open-problem
research-practice
rev. Bellpeace
fuente
fuente
Respuestas:
Creo que el objetivo general de la teoría PL es reducir el costo de la programación a gran escala mediante la mejora de los lenguajes de programación y el ecosistema tecnológico en el que se utilizan los lenguajes.
Aquí hay algunas descripciones de alto nivel, algo vagas, de áreas de investigación de PL que han recibido atención constante, y que probablemente continuarán haciéndolo por un tiempo.
La mayor parte de la investigación del lenguaje de programación se ha realizado en el contexto del cómputo secuencial, y por ahora hemos convergido en un núcleo de características que están disponibles en la mayoría de los lenguajes de programación modernos (por ejemplo, funciones de orden superior, inferencia de tipos (parcial), coincidencia de patrones , ADT, polimorfismo paramétrico) y son bien entendidos. Todavía no existe tal consenso sobre las características del lenguaje de programación para computación concurrente y paralela.
En relación con el punto anterior, el campo de investigación de los sistemas de mecanografía ha visto que la mayor parte de su actividad es sobre computación secuencial. ¿Podemos generalizar este trabajo para encontrar disciplinas de escritura manejables y útiles que limiten la computación concurrente y paralela?
Como un caso especial del punto anterior, la correspondencia de Curry-Howard relaciona la teoría de la prueba estructural y la programación funcional, lo que lleva a una transferencia de tecnología sostenida entre la informática y los fundamentos de las matemáticas, por ejemplo, la teoría del tipo de homotopía es un ejemplo impresionante. Hay muchas sugerencias tentadoras que se pueden extender a (algunas formas de) cómputo concurrente y paralelo.
La especificación y verificación de programas ha madurado mucho en los últimos años, por ejemplo, con asistentes de prueba interactivos como Isabelle y Coq, pero la tecnología aún está lejos de ser utilizable a gran escala en la programación diaria. Todavía queda mucho trabajo por hacer para mejorar este estado de cosas.
Lenguajes de programación y tecnología de verificación para nuevas formas de computación. Estoy
pensando aquí en particular en la computación cuántica y los mecanismos computacionales inspirados biológicamente, ver, por ejemplo, aquí .
Unificación. Hay muchos enfoques para los lenguajes de programación, tipos, verificación, y a veces uno siente que hay una gran superposición entre ellos, y que hay un enfoque más abstracto a la espera de ser descubierto. En particular, es probable que los mecanismos computacionales inspirados biológicamente continúen abrumados.
Un problema de la investigación de PL es que no hay problemas abiertos bien definidos como la pregunta P / NP donde podemos decir de inmediato si una solución propuesta funciona o no.
fuente
Permítanme enumerar algunos supuestos que limitan la investigación del lenguaje de programación. Es difícil separarse de ellos porque sienten que son una parte esencial de los lenguajes de programación o porque explorar alternativas sería "no diseñar más el lenguaje de programación". Con cada suposición enumero sus efectos limitantes.
Los programas son construcciones sintácticas.
Un programa parcialmente escrito no se puede ejecutar.
Los programas consisten en dar instrucciones a las computadoras.
La programación es como ingeniería y no puede ser realizada por personas comunes.
Creo que podría seguir.
fuente
Hay un problema por el que me he estado preguntando. No tengo idea si califica como un desafío abierto.
El conocimiento matemático ha ido creciendo constantemente con el tiempo. Los fundamentos teóricos, conceptos, notaciones y pruebas han evolucionado a lo largo de los siglos. Los matemáticos han manejado la agregación sin verificar necesariamente su consistencia global de manera sistemática y formal en cualquier momento (aunque hubo intentos de hacerlo).
Deberíamos esperar que los lenguajes de programación y las bibliotecas de programas se agreguen y evolucionen de manera similar a lo largo del tiempo. ¿Qué tipo de herramientas podrían ayudar a gestionar la agregación de resultados de programación y bibliotecas para mantenerlas consistentes y efectivamente utilizables por todos, ya que las computadoras pueden ser más formales y exigentes con respecto a la coherencia? ¿Tenemos que rehacer las bibliotecas para cada nuevo lenguaje de programación? ¿Por qué deberíamos elegir un idioma porque tiene las bibliotecas adecuadas para la aplicación prevista en lugar de sus cualidades intrínsecas como medio de programación?
En un tema diferente, puede encontrar ideas en la siguiente pregunta: ¿Los lenguajes de programación se parecen más a los lenguajes naturales? Me doy cuenta de que la idea puede no ser atractiva para muchos científicos teóricos de la informática, pero aún así puede ser útil al analizar diferentes problemas o desde un punto de vista diferente. Estoy lejos de estar de acuerdo con muchas de las ideas que se publicaron, pero para eso es para la discusión.
fuente
Ha habido una tremenda innovación y explosión en los lenguajes de programación desde los lados teóricos y aplicados durante el siglo pasado, sin embargo, se podría argumentar que este es un evento singular / único en la historia de la informática, similar a una "explosión evolutiva" (ver también "¿por qué hay tantos lenguajes de programación?" en cs.se), y que, por lo tanto, el futuro no será como el pasado a este respecto. Sin embargo, hay algunas tendencias actuales de largo alcance identificables en el juego / en desarrollo.
La complejidad de la programación / software y las formas de administrarla / minimizarla / mitigarla / reducirla es un tema que siempre ha influido en el diseño del lenguaje y posiblemente sea aún más significativo en la era actual con sistemas de software muy grandes / complejos bastante comunes. ¡Era un aspecto importante de la lógica del diseño de OOP, pero ahora tenemos sistemas de OOP altamente complejos! la reflexión centrada en ello ha llevado a clásicos en el campo, como Mythical man-month de Brooks, que en muchos sentidos sigue siendo una perspectiva muy válida, posiblemente incluso más relevante que cuando se escribió.
paralelismo. hay un cambio en el hardware hacia un mayor paralelismo (por ejemplo, multinúcleo, etc.) y los aumentos de la velocidad del reloj ya no son suficientes para aumentar el rendimiento. Este cambio ocurrió a mediados de la década de 2000 y está teniendo una gran influencia en la investigación / diseño del lenguaje. el paralelismo siempre fue un tema, pero tiene un nuevo protagonismo / urgencia, y existe un pensamiento / consenso generalizado de que el paralelismo es demasiado complicado y difícil en la programación y tal vez diferentes enfoques teóricos podrían aliviar algo de esto. una buena referencia sobre esto: El paisaje de la investigación en computación paralela: una vista desde Berkeley
minería de datos / big data . Estos están influyendo en el diseño del lenguaje de programación. También las nuevas direcciones en la arquitectura de la base de datos son lenguajes de programación ondulantes / impactantes.
la supercomputación tiene un impacto significativo en el diseño del lenguaje y también se superpone con el paralelismo y la minería de datos / big data, por ejemplo, con nuevos lenguajes como MapReduce .
programación visual / flujo de datos . ha habido un aumento en este tipo de "lenguajes" (en cierto sentido, la programación visual en muchos sentidos desacopla la programación de los "lenguajes"). También fuerte polinización cruzada con paralelismo.
AI . Esto es más un comodín de larga data y no está muy claro en este momento cómo afectará los lenguajes y la programación de la computadora, pero probablemente será muy sustancial. en el pasado [en una forma diferente] condujo a idiomas enteros como el prólogo . Una indicación temprana de cómo se puede aplicar con resultados sorprendentes es Algoritmos Genéticos / Programación Genética .
una referencia que podría tener algunas ideas útiles en la línea del "futuro de los lenguajes de programación", Beyond Java by Tate. Él reflexiona (aunque de manera controvertida) que quizás Java (posiblemente uno de los lenguajes de programación más sofisticados / completos que existen) está comenzando a mostrar su edad y hay signos tempranos de nuevos lenguajes / enfoques emergentes que ocupan su lugar a largo plazo.
fuente