화이트스페이스

1 일반적인 의미

컴퓨터에서 콘솔이나 프린터로 찍었을 때 공백을 표현하는 문자들을 의미한다.
POSIX 표준에 따르면 아스키 코드 9(Horizontal Tab), 10(Line Feed), 11(Vertical Tab), 12(Form Feed), 13(Carriage Return), 32(Space) 다섯 개가 여기에 속한다.
C언어isspace 함수로 화이트스페이스를 가려낼 수 있다.

2 난해한 프로그래밍 언어의 한 종류

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

얼핏 보면 코드로 보이지도 않는 의미불명, 정체불명의 프로그래밍 방식이 압권이다. 이름 그대로 화이트스페이스(Whitespace)인데, 모든 명령어가 스페이스, 탭, 엔터로 구성되어 있다. 공백과 개행문자를 1바이트로 치기 때문에 바이트 수는 늘어나지만 소스 코드를 열어보면 아무것도 안 쓰여있는 것처럼 보인다. 여기서 이걸 만든 인간들이 얼마나 변태인지 파악할 수 있다.왜인지는 나만 모르나? 소스 코드를 종이에 복사해서 가지고 다녀도 완벽하게 비밀이 유지된다는 크나큰 장점이 있다. 하지만 자기자신도 못알아보겠지

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

사용되는 명령어들은 다음과 같다.
(편의를 위해 공백은 s, 탭은 t, 엔터는 e로 표기)

  • ss 숫자 - 해당하는 숫자를 탭에 넣는다. 참고로 숫자는 2진법으로 표현. s=0, t=1 이며 뒤에 e를 입력해줘야 숫자로 인식된다
  • ses - 스택 맨 앞에 있는 숫자를 복제한다
  • sts 숫자(n) - 스택 맨 꼭대기서부터 n번째 숫자를 복사해서 스택 앞에 넣는다
  • set - 스택 꼭대기에 있는 두 숫자의 자리를 바꾼다
  • see - 스택에서 숫자 하나를 버린다
  • ste 숫자(n) - 스택 꼭대기만 빼고, 스택 위쪽에 있는 n개의 숫자를 버린다
  • tsss - 스택에서 a,b를 꺼낸 다음 a+b하여 넣는다
  • tsst - 스택에서 a,b를 꺼낸 다음 b-a하여 넣는다
  • tsse - 스택에서 a,b를 꺼낸 다음 a*b하여 넣는다
  • tsts - 스택에서 a,b를 꺼낸 다음 a/b하여 몫을 넣는다
  • tstt - 스택에서 a,b를 꺼낸 다음 a/b하여 나머지를 넣는다
  • tts - 스택에서 v,a를 꺼낸 다음 힙 공간의 주소 a에 v를 넣는다
  • ttt - 스택에서 a를 꺼낸 다음 힙 공간의 주소 a에 있는 값을 넣는다
  • ess 라벨 - 현위치에 라벨을 설정한다. 라벨은 공백과 탭만으로 구성되며 끝에 엔터를 넣어서 인식시킨다
  • est 라벨 - 지정 라벨의 서브루틴을 호출한다
  • ese 라벨 - 지정 라벨로 이동한다
  • ets 라벨 - 스택에서 숫자를 꺼내서 0이면 지정된 라벨로 이동한다
  • ett 라벨 - 스택에서 숫자를 꺼내서 -이면 지정된 라벨로 이동한다
  • ete - 서브루틴을 끝내고 돌아간다
  • eee - 프로그램 종료
  • tess - 스택에서 숫자를 하나 꺼내 아스키 문자로 출력한다
  • test 시험 - 스택에서 숫자를 하나 꺼내 문자열로 출력한다
  • tets - 문자 하나를 입력받고 스택에서 숫자 a를 꺼내 힙 공간의 주소 a에 문자의 아스키 값을 저장한다
  • tstt - 숫자 하나를 입력받고 스택에서 숫자 a를 꺼내 힙 공간의 주소 a에 숫자를 저장한다

Whitespace_in_vim2.png

...빨간 건 공백이고 파란색은 탭이다.