Whitespace es un lenguaje de programación esotérico con una sintaxis en la que solo los caracteres de espacio en blanco ( espacio , tabulación y salto de línea ) tienen significado, a diferencia de los lenguajes típicos que ignoran en gran medida los caracteres de espacio en blanco. [1] [2]
Como consecuencia de su sintaxis, el código fuente de espacios en blanco puede estar contenido dentro de los espacios en blanco del código escrito en un lenguaje que ignora los espacios en blanco, lo que hace que el texto sea políglota . [2]
Whitespace es un lenguaje imperativo basado en pilas . El programador puede insertar valores enteros de ancho arbitrario en una pila y acceder a un montón para almacenar datos.
Los creadores de Whitespace proporcionan un intérprete , junto con su código fuente Haskell .
Edwin Brady y Chris Morris, quienes también desarrollaron los lenguajes Kaya e Idris , crearon Whitespace en 2002 en la Universidad de Durham . Slashdot publicó una reseña el Día de los Inocentes de 2003. [3]
La idea de utilizar caracteres de espacio en blanco como operadores para el lenguaje C++ había sido sugerida jocosamente cinco años antes por Bjarne Stroustrup . [4]
Los espacios en blanco definen un comando como una secuencia de caracteres de espacio en blanco. Por ejemplo, [Tab][Space][Space][Space]
realiza una suma aritmética de los dos elementos superiores de la pila.
Un comando se escribe como un parámetro de modificación de instrucción (IMP) seguido de una operación y luego cualquier parámetro. [1]
Las secuencias IMP incluyen:
Las secuencias de operadores, organizadas por IMP, incluyen: [1]
Las operaciones de copia y deslizamiento se agregaron en Whitespace 0.3. [1]
Los caracteres que no sean space
, tab
y linefeed
se ignoran y, por lo tanto, pueden usarse para comentarios.
Un valor numérico se representa como una secuencia de caracteres space
y tab
que representan 0 y 1 respectivamente y terminan con un linefeed
. El primer carácter representa el signo del valor, space
para positivo y tab
para negativo. Los caracteres posteriores antes del terminador representan los dígitos binarios de un valor.
Por ejemplo:
space
y representa 1001011 en binario, que es 75 en decimal.tab
y representa -110010 en binario, que es −50 en decimal.Una etiqueta se utiliza para el flujo de control . Es una linefeed
secuencia de caracteres space
y terminada en tab
. Como solo hay un espacio de nombres, todas las etiquetas deben ser únicas. [1]
El código fuente siguiente corresponde a un programa de espacios en blanco "¡Hola, mundo!" . Para mayor claridad, se anota con S
, T
y L
antes de cada space
, tab
, y linefeed
.
S S S T S S T S S S L:Push_+1001000=72='H'_en_la_pilaT- LS S :Salida_'H';_S S S T S S T S T S T L:Push_+1100101=101='e'_en_la_pila T- LS S :Salida_'e';_S S S T T S T T S S L :+1101100=108='l'T- LL : + 1101100 = 108 = ' l ' T- LS S S S S T S T T T T T L :+1101111=111='o' T- LSSSSSTSTSTSTSLSL : + 101100 = 44 = ' , ' T- LS S S S S T S S S S S L :+100000=32=EspacioT- LSSSSSSSTTTTSTTT L : + 1110111 = 119 = ' w ' T- LS S S S S T S T T T T T L :+1101111=111='o' T- LSSSSSTTTSTSLTSL : + 1110010 = 114 = ' r ' T- LL : + 1101100 = 108 = ' l ' T- LSSSSSTSTSTSTSLSLT = + 1100100 = 100 = ' d ' T- LSSSSSTSSSTSTSLT L : + 100001 = 33 = ' ! ' T- LS S :Salida_'!';_LyoL:Finalizar el programa
Cuando se muestra el código fuente de espacios en blanco en algunos navegadores, el espaciado horizontal producido por un carácter de tabulación no es fijo, sino que depende de su ubicación en el texto en relación con la siguiente posición de tabulación horizontal . Según el software, los caracteres de tabulación también pueden reemplazarse por la cantidad variable correspondiente de caracteres de espacio.