Investigación y desafíos abiertos en teoría del lenguaje de programación

32

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.

rev. Bellpeace
fuente
77
wiki de la comunidad?
Suresh Venkat
2
Creo que realmente mejoraría esta pregunta y las que la responderían si citara o resumiera el texto de la pregunta "Fronteras de TCS". El alcance esperado de las respuestas a esta pregunta no está claro, mientras que la otra pregunta es más precisa sobre lo que esperaba.
Vijay D
cuando hice esta pregunta en stackoverflow hace algún tiempo ... recibí votos negativos y mi pregunta se cerró.
Rorschach

Respuestas:

23

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.

Martin Berger
fuente
1
si puedo agregar, computación cuántica y lenguajes de programación cuántica, incluso si la computación cuántica no está sucediendo, sin embargo, el estudio de cómo se pueden transferir algunos conceptos de programación en este modelo de computación es interesante si nada más, programación en lenguaje natural, programación difusa, e incluso computación física y programación física (programación directamente sobre la materia, más allá del nivel molecular)
Nikos M.
1
@NikosM. Estoy de acuerdo, el control de calidad es un gran problema y muy investigado. Este artículo muestra una conexión sorprendente entre los fundamentos de la mecánica cuántica y la teoría del lenguaje de programación, desenterrada solo por la abstracción.
Martin Berger
Bien, tal vez una pregunta podría abordar este tipo de relaciones formales (o no formales)
Nikos M.
11

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.

  1. Los programas son construcciones sintácticas.

    • Los programadores reales nunca usarían iPads para construir el código fuente. E incluso si lo hicieran, nunca podrían ser tan eficientes como con Emacs, Eclipse, NetBeans, XCode, etc.
    • La investigación sobre formas alternativas de construir programas no es el diseño del lenguaje de programación, sino el diseño gráfico de la interfaz de usuario o la educación (cf. Scratch).
  2. Un programa parcialmente escrito no se puede ejecutar.

    • Como mínimo, se produce un error de tiempo de ejecución cuando la ejecución llega a una parte faltante.
    • ¿De qué puede servir ejecutar programas inacabados?
  3. Los programas consisten en dar instrucciones a las computadoras.

    • El diseño del lenguaje de programación no tiene nada que decir sobre cómo escribir y organizar leyes. electrodomésticos
    • Las bacterias no escriben programas.
  4. La programación es como ingeniería y no puede ser realizada por personas comunes.

    • Las personas comunes no conocen la sintaxis, los conceptos, las herramientas, por lo que no pueden escribir programas.
    • Incluso si tratamos de hacer posible que la gente común escriba programas, solo podrán escribir cosas triviales.

Creo que podría seguir.

Andrej Bauer
fuente
2
James: excelente, informaré a mi tía. Martin: este es precisamente el tipo de cosas de las que estoy hablando: la programación no textual no se ha establecido de manera convincente porque la comunidad PL no se lo toma en serio, porque no se ha establecido de manera convincente. Pero me parece bastante obvio que los humanos no fueron hechos para escribir palabras en las pantallas. Somos buenos tirando cosas y recogiendo arándanos.
Andrej Bauer
1
@AndrejBauer Como argumento científico, "es bastante obvio para mí" no está más allá de la mejora. Si nos fijamos en la historia de los sistemas de escritura, de los cuales los lenguajes de programación son solo un ejemplo reciente, su trayectoria histórica ha estado lejos de la escritura logográfica. Tal vez nuestra capacidad de analizar cadenas es más relevante que los arándanos. La escritura alfabética ha evolucionado durante milenios, por lo que es poco probable que contenga errores masivos y fáciles de corregir. Dicho esto, estoy feliz de creer que podemos hacerlo mejor que las cadenas lineales basadas en ASCII. Creo que pasará un tiempo antes de que lo hagamos.
Martin Berger
1
El punto de mi respuesta es "pensar fuera de la caja". Examinar los supuestos ocultos en la investigación de PL y ver cómo limitan el potencial que tiene la investigación de PL.
Andrej Bauer
44
@AndrejBauer, creo que limitar el alcance a POPL es un error: gran parte de este tipo de trabajo se realiza en OOPSLA, ICSE o incluso en CHI. POPL no está interesado a menos que haya un enfoque formal novedoso, pero POPL no es toda la comunidad PL.
Sam Tobin-Hochstadt
2
@DominicMulligan: claro, todas estas son ideas muy bienvenidas. Con mis comentarios estoy tratando de cambiar la percepción de lo que es la programación. Entonces, si las ideas teóricas pueden aprovecharse en la práctica (con lo que quiero decir que los programadores "ordinarios" las usarán en la vida diaria), entonces hemos ganado.
Andrej Bauer
0

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.

babou
fuente
La concisión es exagerada.
Andrej Bauer
1
Puedo ver que no hay mucho acuerdo sobre esta sugerencia, aunque sea modesta. Aún así, podría ser más útil, al menos para mí, tener algunas palabras explicativas de por qué. En caso de que no estuviera claro, nunca quise decir que las matemáticas podrían ser inconsistentes, solo que no estaba (necesariamente) agregado con medios consistentes (los historiadores dirían mejor). Desde el punto de vista de CS, puedo estar equivocado con respecto a la dificultad de la agregación (nunca hice ningún trabajo técnico sobre esto), pero solo estoy relatando la experiencia del usuario y el punto de vista comúnmente escuchado, indirectamente perjudicial para los lenguajes producidos por TCS.
babou
1
Bueno, mi comentario es principalmente sobre el hecho de que la consistencia es una idea de todo o nada, mientras que en realidad la mayoría del software es "en su mayoría consistente". Y, sin embargo, lo usamos y lo encontramos útil. ¿Por qué entonces los teóricos están obsesionados con lo que parece ser un concepto prácticamente inalcanzable y demasiado idealista? Parecería mejor poder cuantificar la consistencia de una manera menos trivial.
Andrej Bauer
@AndrejBauer - Gracias por responder. Estoy un poco sorprendido por su declaración, aplicada a lo que escribí. Nada allí admite alguna forma de consistencia absoluta, sino solo el deseo de un enfoque viable que haga posible la agregación y tenga sentido en un contexto en evolución. Sobre todo consistente como dices, podría hacer. Encontrar lo que debería significar coherente para el propósito era parte de la idea, y no estaba sugiriendo ninguna respuesta, trivial o de otro tipo. Nunca he sido un teórico obsesivo, y no veo en su respuesta dónde podríamos estar en desacuerdo.
babou
1
Creo que solo estaba despotricando sobre "teóricos puros", eso es todo. Por favor ignórame.
Andrej Bauer
0

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.

revs vzn
fuente