화이트스페이스
2. 난해한 프로그래밍 언어의 한 종류
1. 공백문자
컴퓨터에서 콘솔이나 프린터로 찍었을 때 공백을 표현하는 문자들을 의미한다.
POSIX 표준에 따르면 아스키 코드 9(Horizontal Tab), 10(Line Feed), 11(Vertical Tab), 12(Form Feed), 13(Carriage Return), 32(Space) 여섯 개가 여기에 속한다.
C언어의 ''isspace'' 함수로 화이트스페이스를 가려낼 수 있다.
LF, FF, CR은 모두 줄바꿈과 관련된 문자로, 과거 타자기 시절 기능에서 유래된 문자들이다. 문제는 현재 운영체제에 따라 어떤 문자를 줄바꿈으로 쓰는지가 다르기 때문에 호환성에 지대한 악영향을 미치고 있다. 강제 줄 바꿈 참고.
2. 난해한 프로그래밍 언어의 한 종류
2003년 만우절에 에드윈 브래디(Edwin Brady), 크리스 모리스(Chris Morris)라는 두 사람이 발표한 난해한 프로그래밍 언어.
얼핏 보면 코드로 보이지도 않는 의미불명, 정체불명의 프로그래밍 방식이 압권이다. 이름 그대로 화이트스페이스(Whitespace)인데, '''모든 명령어가 스페이스, 탭, 엔터로 구성되어 있다.''' 공백과 개행문자를 1바이트로 치기 때문에 바이트 수는 늘어나지만 소스 코드를 열어보면 '''아무것도 안 쓰여있는 것처럼 보인다.''' 여기서 이걸 만든 인간들이 얼마나 변태인지 파악할 수 있다.
기본적으로는 스택 기반의 '''명령어 입력형'''이다. 즉 공백과 탭과 엔터의 조합이 전부 명령어라는 것이다. 또한 스택과 힙을 갖고 있어서 스택에 임의의 '''정수(부동소수와 실수는 못 쓴다고 한다)'''를 입출력 가능하며, 변수와 자료구조 보존을 위해 힙에 접근할 수 있다고 한다.
편의를 위해 공백은 S, 탭은 T, 개행은 L로 표기하고, 스택 맨 위의 숫자는 a, 두 번째 숫자는 b로 표기한다.
명령어는 종류에 따라 앞에 '임프'(IMP)를 붙여야 쓸 수 있다.
임프는 다음의 종류가 있다.
명령어를 설명하기 전에, 화이트스페이스에서는 숫자를 2진법으로 표현한다. 부호는 숫자 앞에 S를 붙이면 양수, T를 붙이면 음수이다(둘 중 하나는 꼭 붙여야 한다). S=0, T=1 이며 뒤에 L을 입력해야 숫자로 인식된다.
스택 조작(IMP: S)
연산(IMP: TS)
참고로 a, b는 위에서도 말했듯이 스택 가장 위의 두 숫자를 뜻한다.
힙 액세스(IMP: TT)참고로 a, b는 위에서도 말했듯이 스택 가장 위의 두 숫자를 뜻한다.
흐름 제어(IMP: L)
입/출력(IMP: TL)
- 화이트스페이스로 만든 Hello, world!
- 공백,탭