La separación de los idiomas humanos proviene de la evolución (¿darwiniana?) En comunidades aisladas. La separación de los lenguajes de programación proviene de variaciones en la necesidad técnica, ideología técnica, de cambios en la comprensión técnica y teórica, de cambios en nuestra capacidad técnica para implementar. Es un proceso algo más consciente, creo.
¿Podrían los lenguajes de computadora ser más como lenguajes naturales? Probablemente un poco, hasta cierto punto. Supongo que gran parte de la complejidad del lenguaje natural es el resultado de una variedad de fenómenos de evolución concurrentes que no tienen ninguna razón para producir un resultado consistente en ningún momento, a pesar de que es probable que las viejas inconsistencias se eliminen progresivamente mientras aparecen nuevas. . No soy experto en lingüística diacrónica. Pero, ¿queremos ese tipo de complejidad en los lenguajes de programación?
El tema de la ambigüedad es importante, pero no como lo afirma la mayoría de las personas. Un lenguaje es un medio de comunicación, y debe analizarse en el contexto de esa comunicación (hombre-hombre, hombre-máquina, ambos, entre lugares o entre tiempos, ... para decirlo un poco simplista). Lo que importa no es si solo puede hacer declaraciones inequívocas en el idioma, sino si siempre puede asegurarse de que la comunicación será inequívoca en el contexto previsto. Existe un lenguaje de programación bien conocido y ampliamente utilizado, que permite escribir programas ambiguos (bueno, lo hizo, pero no he visto las últimas versiones por un tiempo). En este caso, el compilador es lo suficientemente inteligente como para detectar la ambigüedad y solicitar una aclaración, que se puede incorporar en el programa para eliminar la ambigüedad. Tenga en cuenta que la detección de ambigüedad no significa que solo una de las posibles opciones tenga significado, todas tienen significado. El problema es si una de las entidades comunicantes puede detectar la ambigüedad para que el remitente pueda aclararla. Los seres humanos son malos en esto, pero las computadoras pueden ser bastante buenas.
Los formalismos y los lenguajes de programación podrían tener una sintaxis más rica y flexible. Creo que la razón principal por la que no lo hacen es el simple conservadurismo. Las herramientas sintácticas utilizadas siguen siendo muy a menudo herramientas diseñadas hace treinta años o más, para cumplir con las limitaciones de las computadoras de la época. Analizar la eficiencia ya no es un problema tan crítico en la compilación y existen técnicas más potentes de manera manejable.
Curiosamente, la base más utilizada para la sintaxis de lenguajes de programación proviene de la investigación del lenguaje natural: la gramática libre de contexto. Gran parte de la investigación técnica se trasladó a la informática teórica / técnica en los años sesenta, para ser redescubierta a principios de los ochenta por personas de lenguaje natural (estoy simplificando). Desde entonces, se han realizado muchos progresos para la sintaxis en lenguajes naturales, mientras que la informática parece en gran medida atascada con las viejas herramientas sintácticas. El péndulo del lenguaje natural ahora se balancea nuevamente hacia técnicas estadísticas, pero no se olvidan los enfoques algebraicos para la sintaxis. Lo más probable es que los buenos enfoques provengan de una combinación de técnicas algebraicas y estadísticas.
Mi sensación es que el área crítica es la semántica y la transición entre la sintaxis y la semántica. Esto aún es muy difícil de formalizar para el lenguaje natural, mientras que tenemos muchas técnicas precisas en el caso de lenguajes de programación y sistemas formales. Como el juego está lejos de ser jugado para lenguajes naturales, es difícil decir qué impacto podría tener en los lenguajes de programación en el futuro.
Otro punto es que muchos diseñadores de lenguaje de programación están tratando de probar algo o imponer una ideología técnica. Por lo tanto, se vuelven extremadamente prescriptivos en su diseño para evitar que los usuarios se aparten de sus paradigmas previstos. Desafortunadamente, esto es extremadamente contraproducente para la creatividad. El lenguaje más creativo jamás diseñado fue uno de los primeros: Lisp (1958). La libertad y flexibilidad que permitió fue la fuente de una considerable creatividad. El precio era que requería autodisciplina y comprensión. Pero Lisp era realmente un metalenguaje, un lenguaje para la creación de idiomas.
Ahora, para tomar otra perspectiva, los programas son en realidad pruebas de su especificación vista como una declaración matemática (bueno, estoy simplificando nuevamente). Algunas personas (no recuerdo referencias, lo siento) han estado jugando con probadores de teoremas para producir pruebas que parecerían haber sido escritas por un matemático en lenguaje natural. Así que supongo que la idea de tener programas que parecen estar escritos en lenguaje natural puede no ser totalmente absurda.
Sin embargo, puede notar que, incluso cuando es escrito informalmente por un matemático, el discurso matemático se ve muy diferente de la conversación ordinaria o de un libro de historia. Esto se debe a una diferencia significativa en el universo del discurso en cuestión, los dominios semánticos de los que se habla. Por lo tanto, si bien puede imaginar lenguajes de programación que se parecen más a los lenguajes naturales, existe una limitación natural que es el dominio del discurso y sus propias propiedades deseables. Lo más probable es que siga siendo esencialmente superficial, es decir, mayormente sintáctico. El matemático puede hablar sobre sistemas formales y sobre política. Esperemos que los dos discursos no se vean similares. Las computadoras no pueden (¿todavía?) Hablar de política o entenderla. El día que lo hagan ya no estará programando.
Mirando hacia atrás en la historia, los lenguajes de alto nivel fueron, desde el primer momento (FORTRAN) un intento de acercarse a una forma más natural para expresar tareas computacionales, pero estas tareas se entendieron como matemáticas o lógicas (Fortran 1957, Algol 1958, Lisp 1958 ), o más orientado a los negocios (Cobol 1959). En 10 años, las personas se preocupaban por los idiomas que estarían más cerca, mejor adaptados al problema en cuestión, y hubo una investigación significativa en el llamado extensible
languages
, que abarca tanto la sintaxis como la semántica. Una vía importante para expresar problemas de forma más natural fue la aparición de object
orientation
(a veces bajo otros nombres). Aunque siempre es difícil asignar la paternidad, probablemente surgió del trabajo sobre inteligencia artificial, principalmente en Lisp, y del lenguajeSimula
67
(Familia Algol), que en sí misma tenía la intención de expresar problemas del mundo real más naturales que se simulan en una computadora. Todo parece históricamente consistente.