Brainfuck
Brainfuck는 Urban Müller가 1993년 설계한 난해한 프로그래밍 언어로, 단 8개의 명령 문자만으로 계산을 수행하도록 만들어졌다. 문법을 극도로 단순화해 언어 구현의 크기와 표현 능력 사이의 관계를 실험하는 것이 주요한 특징이다. 일반적인 고수준 언어의 변수 선언, 함수...
| 분류 | 난해한 프로그래밍 언어 |
|---|---|
| 설계자 | Urban Müller |
| 등장 | 1993년 |
| 패러다임 | 명령형, 최소 명령어 기반 |
| 튜링 완전성 | 이론적 모델에서 튜링 완전 |
| 명령어 수 | 8개 |
| 명령 문자 | >, <, +, -, ., ,, [, ] |
| 메모리 모델 | 데이터 셀의 배열과 포인터 |
| 제어 구조 | 셀 값 기반 반복 |
| 입출력 | 한 문자 입력과 출력 |
| 구현 형태 | 인터프리터·컴파일러 |
| 주요 목적 | 최소 언어 연구, 난해한 언어 실험 |
| 상태 | 역사적 언어, 다양한 구현 유지 |
| 관련 분야 | 계산 가능성, 코드 최소화 |
Brainfuck는 Urban Müller가 1993년 설계한 난해한 프로그래밍 언어로, 단 8개의 명령 문자만으로 계산을 수행하도록 만들어졌다. 문법을 극도로 단순화해 언어 구현의 크기와 표현 능력 사이의 관계를 실험하는 것이 주요한 특징이다. 일반적인 고수준 언어의 변수 선언, 함수, 자료형과 명시적인 연산식을 제공하지 않으며, 프로그램은 메모리 셀의 배열과 현재 셀을 가리키는 포인터를 조작하는 명령어 열로 구성된다.[1]
명령어 >와 <는 데이터 포인터를 이동하고 +와 -는 현재 셀 값을 증감한다. .과 ,는 출력과 입력을 수행하며 [와 ]는 현재 셀 값에 따라 반복을 시작·종료한다. 각 명령의 의미는 단순하지만 복잡한 계산을 작성하려면 값을 여러 셀에 분배하고 반복 구조로 산술·조건 동작을 직접 구성해야 한다. 이 때문에 짧은 소스 코드조차 사람이 읽고 이해하기 상당히 어려울 수 있다.
Brainfuck의 계산 표현력은 이론적인 튜링 기계와 연결된다. 메모리 테이프와 반복 구조의 전제를 적절하게 두면 튜링 완전한 계산을 표현할 수 있지만, 실제 구현은 셀의 크기, 포인터 이동 범위, 입력의 종료 처리와 셀의 오버플로 동작 등을 서로 다르게 정의할 수 있다. 따라서 언어의 이론적 계산 모델과 구체적인 인터프리터가 제공하는 유한한 실행 환경은 구분해야 한다.
Brainfuck는 실용적인 앱 개발 언어로 널리 쓰이기보다 인터프리터 제작, 컴파일러 구현 실습, 최소 명령어 집합의 설계와 계산 가능성 교육 등에 활용된다. 동시에 사람이 이해하기 좋은 추상화나 표기법 없이도 아주 작은 언어가 강한 계산 표현력을 가질 수 있다는 사실을 극단적으로 보여주는 사례다. 이름이 비슷하거나 기호만을 사용하는 다른 난해한 언어와도 구체적인 명령어와 메모리 모델은 구별된다.[2]