Una especificación (estándar, definición) de un lenguaje de programación es un tema de documentación que define un lenguaje de programación para que los usuarios y desarrolladores de un lenguaje puedan ponerse de acuerdo sobre qué significan los programas en un lenguaje determinado. Las especificaciones suelen ser detalladas y formales, y las utilizan principalmente los diseñadores de lenguajes, mientras que los usuarios se refieren a ellas en casos de ambigüedad: por ejemplo, los usuarios suelen citar la especificación del lenguaje C++ debido a su complejidad. La documentación relacionada incluye una referencia del lenguaje de programación que es específicamente para los usuarios y una justificación del lenguaje de programación que explica por qué la especificación está escrita de la forma en que está; estos últimos suelen ser más informales que las especificaciones.
No todos los principales lenguajes de programación tienen especificaciones; Los idiomas pueden existir y ser populares durante décadas sin una especificación. Un lenguaje puede tener una o más implementaciones cuyo comportamiento sea el estándar de facto, pero cuyo comportamiento no esté documentado en la especificación. Perl (Perl 5) es un ejemplo bien conocido de un lenguaje sin especificación, mientras que PHP solo recibió una especificación en 2014, después de haber sido utilizado durante 20 años [1] .
El lenguaje puede implementarse y luego estandarizarse, o estandarizarse y luego implementarse, o ambos pueden evolucionar juntos, como ahora es una práctica común. Esto se debe a que la implementación y la especificación se verifican mutuamente: escribir una especificación requiere especificar el comportamiento de la implementación, y la implementación verifica que la especificación sea factible, razonable y consistente.
Escribir especificaciones antes de la implementación a menudo se evitó después del Algol 68 (1968), debido a dificultades de implementación inesperadas cuando la implementación se retrasó. Sin embargo, los lenguajes todavía se usan ocasionalmente y ganan popularidad sin una especificación formal: es necesaria una implementación del lenguaje para su uso, mientras que una especificación es deseable pero no necesaria.
La especificación de lenguajes de programación puede tomar varias formas, incluyendo:
La sintaxis de un lenguaje de programación generalmente se describe usando una combinación de los siguientes dos componentes:
Formular la semántica estricta de un lenguaje de programación grande, complejo y práctico es un desafío incluso para personas con experiencia, y la especificación resultante puede ser difícil de entender para cualquiera que no sea un experto. Las siguientes son algunas de las formas de describir la semántica de un lenguaje de programación; todos los idiomas usan al menos uno de estos métodos de descripción, y algunos idiomas combinan más de uno [4] :