난해한 프로그래밍 언어

난해한 프로그래밍 언어()는 실생활에 사용하기 힘들 정도로 복잡하게 만들어진 프로그래밍 언어이다. 대개 실제로 사용하려는 목적이 아니라 단순 장난 또는 재미를 목적으로 설계된다.

최초의 난해한 프로그래밍 언어는 제임스 라이온스(James Lyons)와 돈 우즈(Don Woods)가 1972년에 만든 INTERCAL로 여겨지고 있다. 개발자들은 자신들이 알고 있는 언어들과 전혀 닮지 않은 언어를 의도했다고 밝혔다. 그 뒤 우어반 뮐러(Urban Müller)가 1993년에 브레인퍽(Brainfuck)을 발표했으며, 브레인퍽은 비펀지(Befunge)와 함께 가장 사용자가 많은 난해한 프로그래밍 언어가 되었다.

특징 
난해한 프로그래밍 언어들은 다양한 방법을 동원하여 '난해함'을 추구한다.

많은 수의 난해한 프로그래밍 언어들은 최소한의 요소만을 가지고도 튜링 완전한 언어를 추구한다. 여기에는 브레인퍽(명령 8개, 피연산자 없음), OISC(명령 1개, 피연산자 3개), Thue(명령 1개, 피연산자 2개) 등이 속한다.

난해한 프로그래밍 언어들도 굳이 분류하면 여러 개의 프로그래밍 패러다임에 속할 수 있고, 이를 통해 언어가 작동하는 방법을 이해할 수 있다. 예를 들어 브레인퍽 등의 많은 언어는 자료를 어떻게 다룰지 명령으로 기술하는 명령형 언어이고, 언람다(Unlambda)는 최소한의 요소만을 남긴 함수형 언어이며, Thue 같이 변환 함수를 초기 상태에 연속적으로 적용하여 결과를 얻어 내는 언어도 있다.

대부분의 난해한 프로그래밍 언어는 비펀지의 영향을 받아 1차원이 아닌 자료 및 코드 영역을 사용한다. 가장 극적인 경우로 0차원 프로그래밍 언어 NULL을 들 수 있는데, 여기서는 하나의 숫자가 하나의 프로그램이며 소인수 분해를 통해 명령을 생성해 낸다.

일부 난해한 프로그래밍 언어는 비결정적으로 동작한다. Java2K나 Thue 등의 프로그래밍 언어는 경우에 따라 같은 프로그램이 다른 결과를 내놓을 수 있는 비결정적인 언어이다.

사용자가 이것이 프로그래밍을 위한 코드임을 쉽게 알아차리지 못하게 하는 경우도 있다. 대표적인 예로 셰익스피어가 있다.

같이 보기 
 코드 난독화

외부 링크 
 
  Esolangs 위키 - 난해한 프로그래밍 언어를 다루는 위키

 
프로그래밍 언어 분류