Mi respuesta es realmente solo una elaboración de Gilles, que no había leído antes de escribir la mía. Tal vez, sin embargo, sea útil.
Permítanme comenzar mi intento de responder a su pregunta con una distinción entre dos dimensiones del trabajo de lenguajes de programación que se relacionan de manera muy diferente con la teoría del lenguaje de programación en general y el cálculo de procesos en particular.
Este último generalmente tiene lugar en la industria con el objetivo de proporcionar lenguajes de programación como producto. Los equipos que desarrollan Java en Oracle y C # en Microsoft son ejemplos. Por el contrario, la investigación pura no está vinculada a los productos. Su objetivo es comprender los lenguajes de programación como objetos de interés intrínseco y explorar las estructuras matemáticas subyacentes a todos los lenguajes de programación.
Debido a objetivos divergentes, los diferentes aspectos de la teoría del lenguaje de programación son relevantes en la investigación pura y en la I + D centrada en el producto. La imagen a continuación puede indicar qué es importante dónde.
En este punto, uno puede preguntarse por qué las dos dimensiones son tan diferentes y cómo se relacionan.
La idea clave es que la investigación y el desarrollo del lenguaje de programación tiene múltiples dimensiones: técnica, social y económica. Casi por definición, la industria está interesada en la rentabilidad económica de los lenguajes de programación. Microsoft y otros no desarrollan lenguajes por la bondad de sus corazones, sino porque creen que los lenguajes de programación les dan una ventaja económica. Y han investigado profundamente por qué algunos lenguajes de programación tienen éxito, y otros, aparentemente similares o con características más avanzadas, no lo hacen. Y descubrieron que no hay una sola razón. Los lenguajes de programación y sus entornos son complejos, y también lo son las razones para adoptar o ignorar cualquier lenguaje específico. Pero el factor más importante para el éxito de un lenguaje de programación es el apego preferencial de los programadores a los idiomas que ya se usan ampliamente: mientras más personas usan un lenguaje, más bibliotecas, herramientas, material didáctico están disponibles y más productivo es un programador. puede estar usando ese lenguaje. Esto también se llama efecto de red. Otra razón es el alto costo de cambiar idiomas para individuos y organizaciones: dominar el lenguaje, especialmente para un programador no tan experimentado, y cuando la distancia semántica a los idiomas familiares es grande, es un esfuerzo serio que lleva mucho tiempo. Teniendo en cuenta estos hechos, uno puede preguntarse ¿por qué los nuevos idiomas obtienen tracción? ¿Por qué las empresas desarrollan nuevos idiomas? ¿Por qué no nos quedamos con Java o Cobol? Creo que hay varias razones clave para que un idioma tenga éxito,
Se abre un nuevo dominio de programación que no tiene titulares que desplazar. El ejemplo principal es la web con su aumento concomitante de Javascript.
Lenguaje pegajoso. Con esto quiero decir el alto precio de cambiar el idioma. Pero a veces los programadores se trasladan a diferentes campos, toman un lenguaje de programación con ellos y tienen éxito con el lenguaje antiguo en el nuevo campo.
Un lenguaje es impulsado por una gran empresa con gran poder de fuego financiero. Este respaldo reduce el riesgo de adopción, porque los primeros usuarios pueden estar razonablemente seguros de que el lenguaje seguirá siendo compatible en unos pocos años. Un buen ejemplo de esto es C #.
Un lenguaje puede venir con herramientas convincentes y un ecosistema. Aquí también se podría mencionar C # y su ecosistema .Net y Visual Studio como ejemplo.
Los idiomas antiguos recogen nuevas características. Me viene a la mente Java, que, en cada iteración, recoge más buenas ideas de la tradición de la programación funcional.
Finalmente, un nuevo lenguaje podría tener ventajas técnicas intrínsecas, por ejemplo, ser más expresivo, tener una sintaxis más agradable, sistemas de tipeo que detecten más errores, etc.
Teniendo en cuenta estos antecedentes, no debería sorprendernos que haya una cierta desconexión entre la investigación del lenguaje de programación puro y el desarrollo del lenguaje de programación comercial. Si bien ambos tienen como objetivo hacer que la construcción y la evolución del software sean más eficientes, especialmente para el software a gran escala, el trabajo del lenguaje de programación industrial debe estar más interesado en facilitar la adopción rápida para alcanzar una masa crítica y obtener el efecto de red. Esto lleva a un enfoque de investigación en cosas que les interesan a los programadores que trabajan. Y eso tiende a ser cosas como la disponibilidad de la biblioteca, la velocidad del compilador, la calidad del código compilado, la portabilidad, etc. El cálculo del proceso tal como lo practicamos hoy es de poca utilidad para los programadores que trabajan en proyectos convencionales (aunque creo que eso cambiará en el futuro).
La investigación pura del lenguaje de programación es bastante diferente. Funciona con modelos simplificados de lenguajes de programación: el cálculo es una simplificación masiva de la programación funcional. Del mismo modo, -calculus es una simplificación masiva de la programación concurrente. Estas simplificaciones masivas son la clave para una investigación exitosa. Nos permiten centrarnos en los mecanismos informáticos centrales (por ejemplo,π βλπβ-reducción para programación funcional, resolución / unificación para programación lógica, paso de nombres para computación concurrente). Para entender si un lenguaje como Scala puede tener una inferencia de tipos completa viable, no debemos preocuparnos por la JVM. De hecho, pensar en la JVM le restará una mejor comprensión de la inferencia de tipos. Es por eso que la abstracción de la computación en pequeños cálculos centrales es vital y poderosa.
Por lo tanto, puede pensar en la investigación del lenguaje de programación como una caja de arena masiva donde las personas juegan con juguetes, y si encuentran algo interesante cuando juegan con un juguete específico y lo han investigado a fondo, ese juguete interesante comienza su larga marcha hacia la aceptación industrial convencional . Digo una larga marcha porque las características del lenguaje inventadas por primera vez por el investigador del lenguaje de programación tienden a tomar décadas antes de ser ampliamente aceptadas. Por ejemplo, la recolección de basura se concibió en la década de 1950 y se hizo ampliamente disponible con Java en la década de 1990. La coincidencia de patrones se remonta a 1970 y se usa ampliamente solo desde Scala.
El cálculo del proceso es un juguete especialmente interesante. Pero es demasiado nuevo para ser investigado a fondo. Eso tomará otra década de investigación pura. Lo que actualmente está en la investigación de la teoría de procesos es tomar la historia de éxito más grande de la investigación del lenguaje de programación, la teoría de los tipos (secuenciales) y desarrollar la teoría de los tipos para la concurrencia de mensajes. Los sistemas de mecanografía de expresividad moderada para la programación secuencial, dicen Hindley-Milner, ahora son bien entendidos, ubicuos y aceptados por los programadores que trabajan. Nos gustaría tener tipos moderadamente expresivos para la programación concurrente. La investigación sobre esto comenzó en la década de 1980 por pioneros como Milner, Sangiorgi, Turner, Kobayashi, Honda y otros, a menudo basados, explícita o implícitamente, en la idea de linealidad que proviene de la lógica lineal. Los últimos años han visto un aumento importante en la actividad y espero que esta trayectoria ascendente continúe en el futuro previsible. También espero que este trabajo comience a filtrarse hacia la I + D centrada en el producto, en parte por la razón pragmática de que los jóvenes investigadores que han sido capacitados en cálculo de procesos irán y trabajarán en laboratorios industriales de I + D, pero también debido a la evolución de la arquitectura de la CPU y la computadora. de formas secuenciales de computación.
En resumen, no me preocuparía que no encuentre útil la teoría del lenguaje de programación de vanguardia, como el cálculo de procesos, en su propio trabajo de construcción de lenguajes. Eso es simplemente porque la teoría de vanguardia no aborda las preocupaciones de los lenguajes de programación actuales. Se trata de futuros idiomas. Tomará un tiempo para que el 'mundo real' se ponga al día. El conocimiento que usa para construir lenguajes para hoy es la teoría del lenguaje de programación del pasado. Te animo a que aprendas más sobre el cálculo de procesos porque es una de las áreas más emocionantes de toda la informática teórica.