stringtranslate.com

Azúcar sintáctico

En informática , el azúcar sintáctico es la sintaxis dentro de un lenguaje de programación que está diseñada para hacer que las cosas sean más fáciles de leer o expresar. Hace que el lenguaje sea "más dulce" para el uso humano: las cosas se pueden expresar de manera más clara, más concisa o en un estilo alternativo que algunos pueden preferir. El azúcar sintáctico suele ser una abreviatura para una operación común que también podría expresarse en una forma alternativa, más detallada: el programador tiene la opción de usar la forma más corta o la forma más larga, pero generalmente usará la forma más corta, ya que es más corta y más fácil de escribir y leer.

Por ejemplo, muchos lenguajes de programación proporcionan una sintaxis especial para hacer referencia y actualizar elementos de una matrizget_array(Array, vector(i,j)) . De manera abstracta, una referencia a una matriz es un procedimiento de dos argumentos: una matriz y un vector de subíndice, que podría expresarse como . En cambio, muchos lenguajes proporcionan una sintaxis como Array[i,j]. De manera similar, una actualización de un elemento de una matriz es un procedimiento que consta de tres argumentos, por ejemplo set_array(Array, vector(i,j), value), pero muchos lenguajes también proporcionan una sintaxis como Array[i,j] = value.

Un constructo en un lenguaje es azúcar sintáctico si puede eliminarse del lenguaje sin ningún efecto sobre lo que el lenguaje puede hacer: la funcionalidad y el poder expresivo seguirán siendo los mismos.

Los procesadores de lenguaje, incluidos los compiladores y los analizadores estáticos , a menudo expanden las construcciones endulzadas en sus equivalentes más detallados antes de procesarlas, un proceso a veces llamado "desazucarado".

Orígenes

El término azúcar sintáctico fue acuñado por Peter J. Landin en 1964 para describir la sintaxis de superficie de un lenguaje de programación simple tipo ALGOL que se definió semánticamente en términos de las expresiones aplicativas del cálculo lambda , [1] [2] centrado en reemplazar léxicamente λ con "donde".

Lenguajes de programación posteriores, como CLU , ML y Scheme , extendieron el término para referirse a la sintaxis dentro de un lenguaje que podía definirse en términos de un núcleo de lenguaje de construcciones esenciales; las características convenientes de nivel superior podían "desazucar" y descomponerse en ese subconjunto. [3] Esta es, de hecho, la práctica matemática habitual de construir a partir de primitivos.

Partiendo de la distinción de Landin entre construcciones lingüísticas esenciales y azúcar sintáctico, en 1991 Matthias Felleisen propuso una codificación del "poder expresivo" para alinearse con "creencias ampliamente aceptadas" en la literatura. Definió "más expresivo" como que sin las construcciones lingüísticas en cuestión, un programa tendría que ser reorganizado por completo. [4]

Ejemplos notables

Crítica

Algunos programadores creen que estas características de usabilidad de la sintaxis son poco importantes o directamente frívolas. En particular, las formas sintácticas especiales hacen que un lenguaje sea menos uniforme y su especificación más compleja, y pueden causar problemas a medida que los programas se vuelven grandes y complejos. Esta opinión está particularmente extendida en la comunidad Lisp , ya que Lisp tiene una sintaxis muy simple y regular, y la sintaxis superficial se puede modificar fácilmente. [12] Por ejemplo, Alan Perlis bromeó una vez en " Epigrams on Programming ", en una referencia a los lenguajes delimitados por corchetes , que "el azúcar sintáctico causa cáncer de los puntos y coma ". [13]

Términos derivados

Sal sintáctica

La metáfora se ha ampliado con el término sal sintáctica , que indica una característica diseñada para dificultar la escritura de código incorrecto. [14] Específicamente, la sal sintáctica es un aro que los programadores deben superar solo para demostrar que saben lo que está sucediendo, en lugar de expresar una acción del programa.

En C# , al ocultar un miembro de una clase heredada, se emite una advertencia del compilador a menos que newse use la palabra clave para especificar que la ocultación es intencional. [15] Para evitar posibles errores debido a la similitud de la sintaxis de la declaración switch con la de C o C++, C# requiere una breakpara cada etiqueta no vacía casede a switch(a menos que se use goto, returno throw) aunque no permite un paso a través implícito . [16] (El uso y la especificación de la etiqueta posterior produce un paso a travésgoto similar a C/C++ ).

La sal sintáctica puede anular su propósito al hacer que el código sea ilegible y, por lo tanto, empeorar su calidad; en casos extremos, la parte esencial del código puede ser más corta que la sobrecarga introducida para satisfacer los requisitos del lenguaje.

Una alternativa a la sal sintáctica es generar advertencias del compilador cuando hay una alta probabilidad de que el código sea el resultado de un error, una práctica común en los compiladores C/C++ modernos.

Sacarina sintáctica

Otras extensiones son la sacarina sintáctica y el jarabe sintáctico , es decir, una sintaxis gratuita que no facilita la programación. [17] [18] [19] [20]

Tipos azucarados

Se dice que los tipos de datos con soporte sintáctico básico son "tipos azucarados". [21] [22] [23] Los ejemplos comunes incluyen cadenas delimitadas por comillas, llaves para tipos de objetos y registros y corchetes para matrices.

Notas

  1. ^ Landin, Peter J. (1964). "La evaluación mecánica de expresiones" (PDF) . The Computer Journal . 6 (4). Computer Journal : 308–320. doi : 10.1093/comjnl/6.4.308 . Consultado el 21 de julio de 2014 .
  2. ^ Abelson y Sussman 1996, Capítulo 1, nota al pie 11.
  3. ^ Barbara Liskov, "Una historia de CLU", Informe técnico 561 del Laboratorio de Ciencias de la Computación del MIT (1993)
  4. ^ Felleisen, Matthias (diciembre de 1991). "Sobre el poder expresivo de los lenguajes de programación". Ciencia de la programación informática . 17 (1–3). Springer-Verlag: 35–75. doi : 10.1016/0167-6423(91)90036-W . Consultado el 19 de julio de 2014 .
  5. ^ "Asignación compuesta de C". msdn.microsoft.com . Microsoft . Consultado el 20 de junio de 2016 . Sin embargo, la expresión de asignación compuesta no es equivalente a la versión expandida porque la expresión de asignación compuesta evalúa expresión1 solo una vez, mientras que la versión expandida evalúa expresión1 dos veces: en la operación de suma y en la operación de asignación.
  6. ^ Garavaglia, Emilio (26 de julio de 2015). "¿Por qué se consideran buenas prácticas los atajos como x += y?". stackexchange.com . Consultado el 20 de junio de 2016. La optimización se puede hacer si "encontrar x" no tiene efectos secundarios.
  7. ^ "Modelo de datos de Python". docs.python.org . 21 de diciembre de 2020.
  8. ^ Raymond, Eric S. (11 de octubre de 1996). The New Hacker's Dictionary – 3.ª edición. MIT Press. pág. 432. ISBN 978-0-262-68092-9. Recuperado el 5 de agosto de 2012 .
  9. ^ "Instrucción using (referencia de C#)" . Consultado el 16 de septiembre de 2014 .
  10. ^ "magrittr: Vignette" . Consultado el 24 de diciembre de 2018 .
  11. ^ "Stack Overflow: ¿Qué significa el triple signo de interrogación en Scala?" . Consultado el 23 de enero de 2024 .
  12. ^ Abelson y Sussman 1996, Capítulo 1, nota al pie 11.
  13. ^ Perlis 1982, Epigrama #3.
  14. ^ "El archivo de la jerga: sal sintáctica". 12 de junio de 2003. Archivado desde el original el 12 de junio de 2003. Consultado el 19 de marzo de 2018 .
  15. ^ "Modificador nuevo (referencia de C#)". microsoft.com . Microsoft . Consultado el 3 de agosto de 2015 .
  16. ^ "switch (C# Reference)". microsoft.com . Microsoft . Consultado el 3 de agosto de 2015 .
  17. ^ "azúcar sintáctico". catb.org . Consultado el 3 de agosto de 2015 .
  18. ^ Boiten, Eerke A.; Möller, Bernhard (26 de junio de 2002). Matemáticas de la construcción de programas. Springer. ISBN 9783540438571. Recuperado el 3 de agosto de 2015 .
  19. ^ Dean, Thomas (2004). Hablando con computadoras: exploraciones en la ciencia y la tecnología de la computación . Cambridge University Press. pág. 115. ISBN 9780521542043.
  20. ^ Harrison, William; Sheard, Tim (8-10 de julio de 2002). "Matemáticas de la construcción de programas" (PDF) . Matemáticas de la construcción de programas: 6.ª conferencia internacional, MPC 2002, Castillo de Dagstuhl, Alemania, 8-10 de julio de 2002. Actas . Conferencia internacional sobre matemáticas de la construcción de programas. Notas de clase en informática. Vol. 2386. Castillo de Dagstuhl, Alemania: Springer Berlin Heidelberg. pág. 93. doi :10.1007/3-540-45442-X_6. ISBN 978-3-540-43857-1. S2CID  10059915. Archivado desde el original (PDF) el 31 de marzo de 2017.
  21. ^ Chugh, Ravi (2013). Tipos de refinamiento anidados para JavaScript (PhD). Universidad de California en San Diego.
  22. ^ "Documentación de LLVM en lenguaje C". clang.llvm.org . Consultado el 30 de junio de 2020 .
  23. ^ "La vida secreta de los tipos en Swift". medium.com/@slavapestov . 14 de julio de 2016 . Consultado el 30 de junio de 2020 .

Referencias