난해한 프로그래밍 언어: 두 판 사이의 차이

위키백과, 우리 모두의 백과사전.
내용 삭제됨 내용 추가됨
편집 요약 없음
태그: 되돌려진 기여
편집 요약 없음
태그: 되돌려진 기여
7번째 줄: 7번째 줄:
* 많은 수의 난해한 프로그래밍 언어들은 최소한의 요소만을 가지고도 [[튜링 완전성|튜링 완전]]한 언어를 추구한다. 여기에는 [[브레인퍽]](명령 8개, 피연산자 없음), [[OISC]](명령 1개, 피연산자 3개), [[Thue 프로그래밍 언어|Thue]](명령 1개, 피연산자 2개) 등이 속한다.
* 많은 수의 난해한 프로그래밍 언어들은 최소한의 요소만을 가지고도 [[튜링 완전성|튜링 완전]]한 언어를 추구한다. 여기에는 [[브레인퍽]](명령 8개, 피연산자 없음), [[OISC]](명령 1개, 피연산자 3개), [[Thue 프로그래밍 언어|Thue]](명령 1개, 피연산자 2개) 등이 속한다.
* 난해한 프로그래밍 언어들도 굳이 분류하면 여러 개의 [[프로그래밍 패러다임]]에 속할 수 있고, 이를 통해 언어가 작동하는 방법을 이해할 수 있다. 예를 들어 브레인퍽 등의 많은 언어는 자료를 어떻게 다룰지 명령으로 기술하는 [[명령형 프로그래밍|명령형]] 언어이고, [[언람다]](Unlambda)는 최소한의 요소만을 남긴 [[함수형 프로그래밍|함수형]] 언어이며, Thue 같이 변환 함수를 초기 상태에 연속적으로 적용하여 결과를 얻어 내는 언어도 있다.
* 난해한 프로그래밍 언어들도 굳이 분류하면 여러 개의 [[프로그래밍 패러다임]]에 속할 수 있고, 이를 통해 언어가 작동하는 방법을 이해할 수 있다. 예를 들어 브레인퍽 등의 많은 언어는 자료를 어떻게 다룰지 명령으로 기술하는 [[명령형 프로그래밍|명령형]] 언어이고, [[언람다]](Unlambda)는 최소한의 요소만을 남긴 [[함수형 프로그래밍|함수형]] 언어이며, Thue 같이 변환 함수를 초기 상태에 연속적으로 적용하여 결과를 얻어 내는 언어도 있다.
* 상당수의 난해한 프로그래밍 언어는 [[비펀지]]의 영향을 받아 1차원이 아닌 자료 및 코드 영역을 사용한다. 가장 극적인 경우로 0차원 프로그래밍 언어 [[NULL (프로그래밍 언어)|NULL]]을 들 수 있는데, 여기서는 하나의 숫자가 하나의 프로그램이며 [[소인수 분해]]를 통해 명령을 생성해 낸다.<span style="color:grey"><del>특히 큰 숫자는 계산기로 소인수분해가 안되는데 그런 계산을 할 수 있는 것 자체가 흠좀무</del></span>
* 상당수의 난해한 프로그래밍 언어는 [[비펀지]]의 영향을 받아 1차원이 아닌 자료 및 코드 영역을 사용한다. 가장 극적인 경우로 0차원 프로그래밍 언어 [[NULL (프로그래밍 언어)|NULL]]을 들 수 있는데, 여기서는 하나의 숫자가 하나의 프로그램이며 [[소인수 분해]]를 통해 명령을 생성해 낸다. <span style="color:grey"><del>특히 큰 숫자는 계산기로 소인수분해가 안되는데 그런 계산을 할 수 있는 것 자체가 흠좀무</del></span>
* 몇몇 난해한 프로그래밍 언어는 [[비결정적]]으로 동작한다. Java2K나 Thue 등의 프로그래밍 언어는 경우에 따라 같은 프로그램이 다른 결과를 내놓을 수 있는 비결정적인 언어이다.
* 몇몇 난해한 프로그래밍 언어는 [[비결정적]]으로 동작한다. Java2K나 Thue 등의 프로그래밍 언어는 경우에 따라 같은 프로그램이 다른 결과를 내놓을 수 있는 비결정적인 언어이다.
* 가끔 프로그래밍 언어의 사용자가 이해하기 힘들도록 언어가 설계된 경우가 있다. 대표적인 예로 [[Malbolge]]가 있다.
* 가끔 프로그래밍 언어의 사용자가 이해하기 힘들도록 언어가 설계된 경우가 있다. 대표적인 예로 [[Malbolge]]가 있다.
* 일부 프로그래밍 언어는 사용자가 이것이 프로그래밍을 위한 코드임을 쉽게 알아차리지 못하게 한다. 대표적인 예로 얼핏 보면 로미오와 줄리엣이 나오는 이야기처럼 보이는 [[셰익스피어 프로그래밍 언어|셰익스피어]]가 있다<span style="color:grey"><del>문과를 위해 만든 프로그래밍 언어인 것 같다</del></span>
* 일부 프로그래밍 언어는 사용자가 이것이 프로그래밍을 위한 코드임을 쉽게 알아차리지 못하게 한다. 대표적인 예로 얼핏 보면 로미오와 줄리엣이 나오는 이야기처럼 보이는 [[셰익스피어 프로그래밍 언어|셰익스피어]]가 있다. <span style="color:grey"><del>문과를 위해 만든 프로그래밍 언어인 것 같다</del></span>


== 같이 보기 ==
== 같이 보기 ==

2021년 3월 7일 (일) 23:07 판

난해한 프로그래밍 언어(esoteric programming language, esolang)는 몇몇 해커들 사이에서, 컴퓨터 프로그래밍 언어의 한계를 테스트하기 위해서, 혹은 어떤 개념의 증명으로서, 혹은 장난으로 설계된 프로그래밍 언어이며, 실용적인 프로그래밍에 적용하기 위한 의도로 만들어진 언어가 아니다.

최초의 난해한 프로그래밍 언어는 제임스 라이온스(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 등의 프로그래밍 언어는 경우에 따라 같은 프로그램이 다른 결과를 내놓을 수 있는 비결정적인 언어이다.
  • 가끔 프로그래밍 언어의 사용자가 이해하기 힘들도록 언어가 설계된 경우가 있다. 대표적인 예로 Malbolge가 있다.
  • 일부 프로그래밍 언어는 사용자가 이것이 프로그래밍을 위한 코드임을 쉽게 알아차리지 못하게 한다. 대표적인 예로 얼핏 보면 로미오와 줄리엣이 나오는 이야기처럼 보이는 셰익스피어가 있다. 문과를 위해 만든 프로그래밍 언어인 것 같다

같이 보기

외부 링크