stringtranslate.com

Barra invertida

La barra invertida \ es un signo que se utiliza principalmente en informática y matemáticas . Es la imagen reflejada de la barra común / . Es un signo relativamente reciente, documentado por primera vez en la década de 1930. A veces se le llama hack , whack , escape (de C / UNIX ), reverse slash , slosh , downwhack , backslant , backwhack , bash , reverse slant , reverse solidus y reversed virgule . [1] [2]

Historia

Un teclado perforador Wheatstone de teletipo de la década de 1930, con barra invertida al final de la tercera fila
Disposición del teclado del teletipo ASR-33 con conjunto de caracteres ASCII, anterior al 14 de junio de 1966, con barra invertida al presionar shift+L

Hasta noviembre de 2022 , los esfuerzos por identificar el origen de este carácter o su propósito antes de la década de 1960 no han tenido éxito. La referencia conocida más antigua encontrada hasta la fecha es un manual de mantenimiento de 1937 de Teletype Corporation con una fotografía que muestra el teclado de su perforadora de teclado Kleinschmidt WPE-3 utilizando el sistema Wheatstone . [3] [4] El símbolo se llamaba "tecla diagonal", [5] y se le dio un código Morse (no estándar) de   ▄ ▄▄▄ ▄ ▄ ▄▄▄  . [6] [a]

En junio de 1960, IBM publicó un "estándar de conjunto de caracteres extendido" que incluye el símbolo en 0x19. [4] En septiembre de 1961, Bob Bemer (IBM) propuso al comité de estándares X3.2 que [, ]y \formaran parte del estándar propuesto, describiendo la barra invertida como un "operador de división inversa" y citó su uso anterior por Teletype en telecomunicaciones. En particular, dijo, el \ era necesario para que los operadores booleanos ALGOL ( conjunción lógica ) y ( disyunción lógica ) pudieran componerse utilizando /\ y \/ respectivamente. El Comité adoptó estos cambios en el borrador del Estándar Americano (posteriormente llamado ASCII ) en su reunión de noviembre de 1961. [4]

Estos operadores se utilizaron para min y max en las primeras versiones del lenguaje de programación C suministrado con Unix V6 [7] y V7. [8]

Uso

Lenguajes de programación

En muchos lenguajes de programación como C , Perl , PHP , Python , lenguajes de script Unix y muchos formatos de archivo como JSON , la barra invertida se utiliza como un carácter de escape , para indicar que el carácter que la sigue debe ser tratado de manera especial (si de otra manera se trataría literalmente), o literalmente (si de otra manera se trataría de manera especial). Por ejemplo, dentro de una cadena literal de C, la secuencia \nproduce un byte de nueva línea en lugar de una 'n', y la secuencia \"produce una comilla doble real en lugar del significado especial de la comilla doble que finaliza la cadena. Una barra invertida real se produce por una barra invertida doble \\.

Los lenguajes de expresión regular lo utilizan de la misma manera, cambiando los caracteres literales subsiguientes por metacaracteres y viceversa. Por ejemplo, \||b busca '|' o 'b', la primera barra se escapa y se busca, la segunda no se escapa y actúa como un "o".

Fuera de las cadenas entre comillas, el único uso común de la barra invertida es ignorar ("escape") una nueva línea inmediatamente después de ella. En este contexto, se la puede llamar "línea continua" [9], ya que la línea actual continúa en la siguiente. Algunos programas reemplazan la barra invertida + nueva línea con un espacio. [10]

Para dar soporte a los ordenadores que carecían del carácter de barra invertida, se añadió el trígrafo de C , que es equivalente a una barra invertida. Dado que este puede escapar del siguiente carácter, que puede ser un , el principal uso moderno puede ser para la ofuscación de código . El soporte para trígrafos en C++ se eliminó en C++17 , y se planea eliminar el soporte para ellos en C en C23 .??/?

En Visual Basic (y algunos otros dialectos BASIC ) la barra invertida se utiliza como símbolo de operador para indicar división de enteros . [11] Esto redondea hacia cero.

El lenguaje de programación ALGOL 68 utiliza el "\" como su símbolo de exponente decimal . ALGOL 68 tiene la opción de elegir entre 4 símbolos de exponente decimal: e, E, \ o 10. Ejemplos: 6.0221415e23 , 6.0221415E23 , 6.0221415\23 o 6.0221415 10 23. [12]

En APL, \ se llama Expand cuando se usa para insertar elementos de relleno en matrices y Scan cuando se usa para producir reducción de prefijo (plegado acumulativo).

En la versión 5.3 y superiores de PHP , la barra invertida se utiliza para indicar un espacio de nombres . [13]

En Haskell , la barra invertida se utiliza tanto para introducir caracteres especiales como para introducir funciones lambda (ya que es una aproximación razonable en ASCII de la letra griega lambda, λ) . [14]

Nombres de archivos

MS-DOS 2.0, lanzado en 1983, copió la idea de un sistema de archivos jerárquico de Unix y, por lo tanto, utilizó la barra invertida como separador de directorios. [15] Posiblemente por insistencia de IBM, [16] [17] Microsoft agregó la barra invertida para permitir que las rutas se escriban en el indicador del intérprete de línea de comandos, al tiempo que conservaba la compatibilidad con MS-DOS 1.0 (en el que / era el indicador de opción de línea de comandos. Escribir " DIR/W " le daba la opción "ancha" al comando " DIR ", por lo que se necesitaba algún otro método si uno realmente quería ejecutar un programa llamado W dentro de un directorio llamado DIR ). A excepción de COMMAND.COM , todas las demás partes del sistema operativo aceptan ambos caracteres en una ruta , pero la convención de Microsoft sigue siendo usar una barra invertida, y las API que devuelven rutas usan barras invertidas. [18] En algunas versiones, el carácter de opción se puede cambiar de / a - mediante SWITCHAR , lo que permite a COMMAND.COM conservar / en el nombre del comando.

La familia de sistemas operativos Microsoft Windows heredó el comportamiento de MS-DOS y por eso todavía admite ambos caracteres, pero los programas y subsistemas individuales de Windows pueden, equivocadamente, aceptar solo la barra invertida como delimitador de ruta, o pueden malinterpretar una barra diagonal si se usa como tal. Algunos programas solo aceptarán barras diagonales si la ruta está entre comillas dobles . [19] El fracaso de las características de seguridad de Microsoft para reconocer barras diagonales en direcciones inesperadas en rutas locales y de Internet, mientras que otras partes del sistema operativo aún actúan sobre ellas, ha llevado a algunas fallas graves en la seguridad. Se ha accedido a recursos que no deberían estar disponibles con rutas que usan combinaciones particulares, como http://example.net/secure\private.aspx . [20] [21]

Marcado de texto

La barra invertida se utiliza en el sistema de composición tipográfica TeX y en archivos RTF para comenzar las etiquetas de marcado.

En USFM , [22] la barra invertida se utiliza para marcar características de formato para editar traducciones de la Biblia .

En la notación de cursor , ^\representa el carácter de control 0x1C, separador de archivos . [23] Esto es completamente una coincidencia y no tiene nada que ver con su uso en rutas de archivos.

Matemáticas

Se utiliza un símbolo similar a una barra invertida para la diferencia de conjuntos . [24]

La barra invertida también se utiliza a veces para indicar el espacio de clases laterales derecho . [25]

Especialmente cuando se describen algoritmos informáticos, es común definir la barra invertida de modo que a \ b sea equivalente a a / b . [26] Esta es una división de números enteros que redondea hacia abajo, no hacia cero.

En MATLAB y GNU Octave, la barra invertida se utiliza para dividir la matriz por la izquierda , mientras que la barra (hacia adelante) se utiliza para dividir la matriz por la derecha. [27]

Confusión con ¥ y otros caracteres

En las codificaciones japonesas ISO 646-JP (un código de 7 bits basado en ASCII ), JIS X 0201 (un código de 8 bits) y Shift JIS (una codificación multibyte de 8 bits para ASCII), el punto de código 0x5C que se usaría para la barra invertida en ASCII se representa en cambio como un signo de yen ¥ . Debido al uso extensivo del punto de código 005C para representar el signo de yen, incluso hoy en día algunas fuentes como MS Mincho representan el carácter de barra invertida como ¥, por lo que los caracteres en los puntos de código Unicode 00A5 (¥) y 005C (\) se representan como ¥ cuando se seleccionan estas fuentes. Los programas de computadora aún tratan 005C como una barra invertida en estos entornos, pero lo muestran como un signo de yen, lo que causa confusión, especialmente en los nombres de archivo MS-DOS. [28]

Varias otras versiones de ISO 646 también reemplazan la barra invertida con otros caracteres, incluidos ₩ (coreano), Ö (alemán, sueco), Ø (danés, noruego), ç (francés) y Ñ (español), lo que genera problemas similares, aunque con un impacto menos duradero en comparación con el signo del yen.

En 1991, el RFC 1345 sugirió un mnemónico// único de dos caracteres que podría usarse en estándares de Internet como "una forma práctica de identificar [este] carácter, sin referencia a un conjunto de caracteres codificados y su código en [ese] conjunto de caracteres codificados". [29] En consecuencia, este estilo puede verse en los primeros documentos del Internet Engineering Task Force .

Notas

  1. ^ Este es el inverso del código para el símbolo de barra (   ▄▄▄ ▄ ▄ ▄▄▄ ▄  ).

Referencias

  1. ^ Diccionario Macquarie (3.ª edición)
  2. ^ Raymond, Eric S. "ASCII". El archivo de jerga . Archivado desde el original el 18 de enero de 2019. Consultado el 28 de julio de 2007 .
  3. ^ Boletín 125, número 2: Descripción y ajustes del perforador Wheatstone del teletipo (PDF) . Teletype Corporation. Mayo de 1938 [agosto de 1937]. pág. ii. Archivado (PDF) desde el original el 2021-02-12 . Consultado el 2021-03-15 – vía navy-radio.com.
  4. ^ abc Fischer, Eric (20 de junio de 2000). «La evolución de los códigos de carácter, 1874-1968» (PDF) . pp. 14-15 (Tabla 35). Archivado (PDF) desde el original el 30 de noviembre de 2022. Consultado el 30 de noviembre de 2022 .Referencias a Bemer, RW; Buchholz, W. (1 de junio de 1960). Un estándar de conjunto de caracteres extendido (informe técnico). Laboratorio de desarrollo de productos, División de sistemas de datos, International Business Machines Corporation. TR 00.721.Colección de Estándares Informáticos, Centro de Archivos, Museo Nacional de Historia Estadounidense, Institución Smithsonian, caja 1.
  5. ^ "Boletín 188: Juego de perforadores automáticos para teletipo" (PDF) . Teletype Corporation. Agosto de 1945. pág. 6. Archivado (PDF) desde el original el 2021-12-19 . Consultado el 2021-12-19 – vía navy-radio.com.
  6. ^ "Boletín 1025, número 3: Piezas para el perforador Wheatstone del teletipo" (PDF) . Teletype Corporation. Julio de 1945. pág. 9. Archivado (PDF) desde el original el 2021-12-19 . Consultado el 2021-12-19 – vía navy-radio.com.
  7. ^ "Código fuente del compilador de C". bitsavers.org . 1975. Archivado desde el original el 15 de agosto de 2011 . Consultado el 11 de octubre de 2009 .
  8. ^ "Código fuente del compilador de C". mit.edu . 1979. Archivado desde el original el 2013-12-03 . Consultado el 2009-10-11 .
  9. ^ "El preprocesador de C". GNU .org . Archivado desde el original el 2021-08-03 . Consultado el 2021-01-04 .
  10. ^ "3.1.1 División de líneas largas". Manual de GNU make . Archivado desde el original el 5 de junio de 2018. Consultado el 28 de julio de 2019 .
  11. ^ "Operadores aritméticos en Visual Basic". Características del lenguaje Visual Basic: operadores y expresiones . MSDN. 10 de julio de 2012. Archivado desde el original el 17 de septiembre de 2012 . Consultado el 7 de octubre de 2012 .
  12. ^ "Informe revisado sobre el lenguaje algorítmico Algol 68". Acta Informatica . 5 (1–3): 1–236. Septiembre de 1973. doi :10.1007/BF00265077. S2CID  2490556. Archivado desde el original el 26 de julio de 2020 . Consultado el 10 de febrero de 2020 .
  13. ^ "Descripción general de los espacios de nombres". php.net . Archivado desde el original el 16 de octubre de 2012 . Consultado el 10 de octubre de 2012 .
  14. ^ O'Sullivan, Stewart y Goerzen, Real World Haskell , cap. 4: funciones anónimas (lambda), pág. 99
  15. ^ "¿Por qué el carácter de ruta de DOS es "\"?". Blogs.msdn.com. 24 de junio de 2005. Archivado desde el original el 19 de noviembre de 2022. Consultado el 16 de junio de 2013 .
  16. ^ Necasek, Michal (24 de mayo de 2019). "¿Por qué Windows realmente usa la barra invertida como separador de ruta?". OS/2 Museum . Archivado desde el original el 24 de mayo de 2019. Consultado el 28 de mayo de 2019 .
  17. ^ Larson, Chris; Immerwahr, Don (1983), MS-DOS v1.25 and v2.0 Source Code, README.txt, Microsoft, archivado desde el original el 21 de noviembre de 2022 , consultado el 21 de noviembre de 2022 , El manual del usuario contiene algunos errores importantes. La mayoría de ellos se deben a cambios de último momento para lograr un mayor grado de compatibilidad con la implementación de IBM de MS-DOS (PC DOS). Esto incluye el uso de "\" en lugar de "/" como separador de ruta y "/" en lugar de "-" como carácter de cambio. Para el transporte de archivos por lotes entre máquinas, Microsoft fomenta el uso de "\" y "/" respectivamente en el mercado estadounidense. [...] Pedimos disculpas por cualquier inconveniente que estos cambios puedan haber causado a su personal de publicaciones técnicas.
  18. ^ "Método Path.GetFullPath". Biblioteca de clases de .NET Framework . Microsoft. Archivado desde el original el 21 de diciembre de 2008. Consultado el 2 de enero de 2009 .
  19. ^ "¿Cuándo empezó Windows a aceptar la barra diagonal como separador de ruta?". Bytes.com. Archivado desde el original el 6 de febrero de 2009. Consultado el 2 de enero de 2009 .
  20. ^ Kaplan, Simone (2004). "Microsoft investiga un error en ASP.NET". DevSource, patrocinado por Microsoft . Ziff Davis Enterprise Holdings Inc. Archivado desde el original el 21 de enero de 2013. Consultado el 14 de junio de 2009 .
  21. ^ Burnett, Mark (2004). "Agujeros de seguridad que son profundos". SecurityFocus. Archivado desde el original el 2021-02-02 . Consultado el 2009-06-14 .
  22. ^ "USFM – Marcadores de formato estándar unificado". paratext.org . 18 de abril de 2017. Archivado desde el original el 13 de agosto de 2020 . Consultado el 30 de junio de 2013 .
  23. ^ "Conjunto de caracteres de control C0, 1987". pd.infn.it . Archivado desde el original el 2019-09-06 . Consultado el 2021-03-14 .
  24. ^ "Cantidades y unidades – Parte 2: Signos y símbolos matemáticos para uso en las ciencias naturales y la tecnología". ISO 80000-2:2009 . Organización Internacional de Normalización. 15 de abril de 2008. Archivado desde el original el 2014-03-26 . Consultado el 2012-10-07 .
  25. ^ "Definición: Espacio de cosets". ProofWiki. Archivado desde el original el 26 de febrero de 2021. Consultado el 1 de febrero de 2017 .
  26. ^ "División de enteros". mathworld.wolfram.com . Archivado desde el original el 21 de febrero de 2020 . Consultado el 10 de marzo de 2020 .
  27. ^ Eaton, John W.; David Bateman; Søren Hauberg (febrero de 2011). «GNU Octave: Un lenguaje interactivo de alto nivel para cálculos numéricos» (PDF) . Free Software Foundation. pág. 145. Archivado (PDF) desde el original el 24 de octubre de 2012. Consultado el 7 de octubre de 2012 .
  28. ^ "¿Cuándo una barra invertida no es una barra invertida?". Blogs.msdn.com. Archivado desde el original el 23 de marzo de 2016. Consultado el 16 de junio de 2013 .
  29. ^ Simonsen, Keld (26 de diciembre de 1991). «RFC 1345». Tools.ietf.org. Archivado desde el original el 13 de junio de 2016. Consultado el 16 de junio de 2013 .

Enlaces externos