화이트스페이스

덤프버전 :




1. 공백문자[편집]


컴퓨터에서 콘솔이나 프린터로 찍었을 때 공백을 표현하는 문자들을 의미한다.

POSIX 표준에 따르면 아스키 코드 9(Horizontal Tab), 10(Line Feed), 11(Vertical Tab), 12(Form Feed), 13(Carriage Return), 32(Space) 여섯 개가 여기에 속한다.

문자
유니코드
이름
약칭

U+0020
space
SPC
\\t
U+0009
horizontal tab
TAB
\\n
U+000A
newline
LF
\\v
U+000B
vertical tab
VT
\\f
U+000C
feed
FF
\\r
U+000D
carriage return
CR

LF, FF, CR은 모두 줄바꿈과 관련된 문자로, 과거 타자기 시절 기능에서 유래된 문자들이다. 문제는 현재 운영체제에 따라 어떤 문자를 줄바꿈으로 쓰는지가 다르기 때문에 호환성에 지대한 악영향을 미치고 있다. MS-DOS와 Windows는 실제 타자기처럼 CR+LF을 사용/인식하고, 유닉스/리눅스 계열(Mac OS X 포함)에서는 바이트 절약을 위해 LF만 사용/인식한다. (구형인 Mac OS 9에서는 CR만 사용했다). 그래서 같은 데이터라도 이를 읽는 환경(OS)이 바뀌면 줄 바꿈 없이 한 줄로 쭉 이어지는 글타래가 보이게 된다. 자세한 내용은 강제 줄 바꿈 참고.

C언어isspace 함수로 화이트스페이스를 가려낼 수 있다.

2. 난해한 프로그래밍 언어의 한 종류[편집]


2003년 만우절에 에드윈 브래디(Edwin Brady), 크리스 모리스(Chris Morris)라는 두 사람이 발표한 난해한 프로그래밍 언어.

얼핏 보면 코드로 보이지도 않는 의미불명, 정체불명의 프로그래밍 방식이 압권이다. 이름 그대로 화이트스페이스(Whitespace)인데, 모든 명령어가 스페이스, 탭, 엔터로 구성되어 있다. 공백과 개행문자를 1바이트로 치기 때문에 바이트 수는 늘어나지만 소스 코드를 열어보면 아무것도 안 쓰여있는 것처럼 보인다. 즉, 메모장 등의 에디터로 열거나 인쇄하면 모르는 사람의 눈에는 단순히 백지로만 보인다. 여기서 이걸 만든 인간들이 얼마나 변태인지 파악할 수 있다.

기본적으로는 스택 기반의 명령어 입력형이다. 즉 공백과 탭과 엔터의 조합이 전부 명령어라는 것이다. 또한 스택과 힙을 갖고 있어서 스택에 임의의 정수(부동소수와 실수는 못 쓴다고 한다)를 입출력 가능하며, 변수와 자료구조 보존을 위해 힙에 접근할 수 있다고 한다.

편의를 위해 공백은 S, 탭은 T, 개행은 L로 표기하고, 스택 맨 위의 숫자는 a, 두 번째 숫자는 b로 표기한다.
명령어는 종류에 따라 앞에 '임프'(IMP)를 붙여야 쓸 수 있다.
임프는 다음의 종류가 있다.
임프(IMP)
용도
S
스택 조작
TS
수 연산
TT
힙 액세스
L
흐름 제어
TL
입/출력

명령어를 설명하기 전에, 화이트스페이스에서는 숫자를 2진법으로 표현한다. 부호는 숫자 앞에 S를 붙이면 양수, T를 붙이면 음수이다(둘 중 하나는 꼭 붙여야 한다). S=0, T=1 이며 뒤에 L을 입력해야 숫자로 인식된다.

스택 조작(IMP: S)
명령어
매개 변수
의미
S
숫자
숫자를 스택에 넣는다.
LS
-
스택 맨 위에 있는 숫자를 복제한다.
TS
숫자(n)
스택 맨 위에서부터 n번째 숫자를 복사해서 스택 맨 위에 넣는다.
LT
-
스택 맨 위에 있는 두 숫자의 자리를 바꾼다.
LL
-
스택 맨 위의 숫자 하나를 버린다.
TL
숫자(n)
스택 맨 위를 제외하고 스택 위쪽에 있는 n개의 숫자를 버린다.

연산(IMP: TS)
참고로 a, b는 위에서도 말했듯이 스택 가장 위의 두 숫자를 뜻한다.
명령어
의미
SS
스택에서 a,b를 꺼낸 다음 a+b하여 넣는다.
ST
스택에서 a,b를 꺼낸 다음 a-b하여 넣는다.
SL
스택에서 a,b를 꺼낸 다음 a*b하여 넣는다.
TS
스택에서 a,b를 꺼낸 다음 a/b하여 몫을 넣는다.
TT
스택에서 a,b를 꺼낸 다음 a/b하여 나머지를 넣는다.

힙 액세스(IMP: TT)
명령어
의미
S
스택에서 v,a를 꺼낸 다음 힙 공간의 주소 a에 v를 넣는다.
T
스택에서 a를 꺼낸 다음 힙 공간의 주소 a에 있는 값을 넣는다.

흐름 제어(IMP: L)
명령어
매개 변수
의미
SS
라벨
현위치에 라벨을 설정한다. 라벨은 공백과 탭만으로 구성되며 끝에 엔터를 넣어서 인식시킨다.
ST
라벨
지정 라벨의 서브루틴을 호출한다.
SL
라벨
지정 라벨로 이동한다.
TS
라벨
스택에서 숫자를 꺼내서 0이면 지정된 라벨로 이동한다.
TT
라벨
스택에서 숫자를 꺼내서 -이면 지정된 라벨로 이동한다.
TL
-
서브루틴을 끝내고 호출자에게 컨트롤이 넘어간다.
LL
-
프로그램을 종료한다

입/출력(IMP: TL)
명령어
의미
SS
스택 맨 위의 숫자에 해당하는 ASCII 문자를 출력한다.
ST
스택 맨 위의 숫자를 문자열로 출력한다.
TS
문자 하나를 입력받고 스택 맨 위에 있던 값 대신 그 위치에 문자의 ASCII 값을 저장한다.
TT
숫자 하나를 입력받고 스택 맨 위에 있던 값 대신 그 위치에 숫자를 저장한다.


파일:external/upload.wikimedia.org/Whitespace_in_vim2.png
파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2023-12-26 22:40:16에 나무위키 화이트스페이스 문서에서 가져왔습니다.