stringtranslate.com

Azúcar sintáctica

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 pueden expresarse de manera más clara, más concisa o en un estilo alternativo que algunos prefieran. El azúcar sintáctico suele ser una abreviatura de una operación común que también podría expresarse en una forma alternativa y más detallada: el programador tiene la opción de utilizar la forma más corta o la forma más larga, pero normalmente utilizará la forma más corta ya que es más corto 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 matriz . 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 get_array(Array, vector(i,j)). En cambio, muchos lenguajes proporcionan sintaxis como Array[i,j]. De manera similar, una actualización de un elemento de 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.

Una construcción en un idioma es azúcar sintáctica si se puede eliminar del idioma sin ningún efecto sobre lo que el idioma puede hacer: la funcionalidad y el poder expresivo seguirán siendo los mismos.

Los procesadores de lenguaje, incluidos los compiladores y analizadores estáticos , a menudo expanden las construcciones azucaradas a sus equivalentes más detallados antes del procesamiento, 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 superficial 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 "dónde".

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

Basándose en 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 las "creencias ampliamente extendidas" en la literatura. Definió "más expresivo" en el sentido de que sin las construcciones del lenguaje en cuestión, un programa tendría que reorganizarse por completo. [4]

Ejemplos notables

Crítica

Algunos programadores sienten que estas características de usabilidad de sintaxis no son importantes o son completamente 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 visió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 " Epigramas sobre programación ", en una referencia a lenguajes delimitados por corchetes , que "el azúcar sintáctico causa cáncer de punto y coma ". [13]

Términos derivados

sal sintáctica

La metáfora se ha ampliado acuñando 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 atravesar solo para demostrar que saben lo que está sucediendo, en lugar de expresar una acción del programa.

En C# , cuando se oculta un miembro de clase heredado, 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 de cambio con la de C o C++, C# requiere una para cada etiqueta breakno vacía de a (a menos que se use , o ), aunque no permite la caída implícita. -a través de . [16] (El uso y especificación de la etiqueta posterior produce un error similar a C/C++ ).caseswitchgotoreturnthrowgoto

La sal sintáctica puede frustrar 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 al salt sintáctico es generar advertencias del compilador cuando existe una alta probabilidad de que el código sea el resultado de un error, una práctica común en los compiladores modernos de C/C++.

sacarina sintáctica

Otras extensiones son sacarina sintáctica y jarabe sintáctico , es decir, 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 central 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 las expresiones» (PDF) . La revista informática . Diario de informática . 6 (4): 308–320. doi : 10.1093/comjnl/6.4.308 . Consultado el 21 de julio de 2014 .
  2. ^ Abelson & 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 . Springer-Verlag. 17 (1–3): 35–75. doi : 10.1016/0167-6423(91)90036-W . Consultado el 19 de julio de 2014 .
  5. ^ "Asignación compuesta 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 la expresión1 solo una vez, mientras que la versión expandida evalúa la 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é los atajos como x += y se consideran una buena práctica?". stackexchange.com . Consultado el 20 de junio de 2016 . la optimización se puede [realizar] 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). El diccionario del nuevo hacker - 3.ª edición. Prensa del MIT. pag. 432.ISBN 978-0-262-68092-9. Consultado el 5 de agosto de 2012 .
  9. ^ "usando la declaración (referencia de C#)" . Consultado el 16 de septiembre de 2014 .
  10. ^ "magrittr: viñeta" . 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 & Sussman 1996, capítulo 1, nota al pie 11.
  13. ^ Perlis 1982, Epigrama n.° 3.
  14. ^ "The Jargon File - sal sintáctica". 2003-06-12. Archivado desde el original el 12 de junio de 2003 . Consultado el 19 de marzo de 2018 .
  15. ^ "nuevo modificador (referencia de C#)". microsoft.com . Microsoft . Consultado el 3 de agosto de 2015 .
  16. ^ "cambiar (referencia de C#)". 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. Saltador. ISBN 9783540438571. Consultado el 3 de agosto de 2015 .
  19. ^ Decano, Thomas (2004). Hablar con computadoras: exploraciones en la ciencia y tecnología de la computación . Prensa de la Universidad de Cambridge. pag. 115.ISBN 9780521542043.
  20. ^ Harrison, William; Sheard, Tim (8 al 10 de julio de 2002). «Matemáticas de la Construcción de Programas» (PDF) . Matemáticas de la construcción de programas: Sexta Conferencia Internacional, MPC 2002, Castillo de Dagstuhl, Alemania, 8 al 10 de julio de 2002. Actas . Congreso Internacional de Matemáticas de Construcción de Programas. Apuntes de conferencias sobre informática. vol. 2386. Castillo de Dagstuhl, Alemania: Springer Berlin Heidelberg. pag. 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 (Doctor). Universidad de California en San Diego.
  22. ^ "Documentación 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