mir.pe (일반/어두운 화면)
최근 수정 시각 : 2024-03-21 11:04:24

난해한 프로그래밍 언어

1. 개요2. 전용 위키3. 난해한 프로그래밍 언어의 요소4. 예시
4.1. 난해한 프로그래밍 언어4.2. 난해한 프로그래밍 스타일

[clearfix]

1. 개요

Esoteric programming language / Esolang

일부러 다른 프로그래밍 언어에 비해 사용하기 어렵게 만든 언어.

제작 이유는 대부분 컴퓨터 프로그래밍 언어의 한계를 테스트하기 위해서, 어떤 개념의 증명으로서, 또는 장난하기 위해서이며, 절대로 실용적인 프로그래밍에 적용하기 위한 의도는 아니다. 실제 업무에서 쓰는 프로그래밍 언어는 최대한 다양하게 쓸 수 있으면서도 쉽게 작성할 수 있게 만드려고 애를 쓴다.

따라서 실무에 쓰이는 언어 중 쓰기 전용 언어로 악명높은 Perl, 웹 개발자 사이에서 까야 제맛으로 대동단결하는 PHP, Node.js 개발자들에게 애증의 존재인 JavaScript, 태초의 C언어 등도 난해하긴 하지만, Esolang으로 부르지는 않는다.

최초의 난해한 프로그래밍 언어는 제임스 라이언스(James Lyons)와 돈 우즈(Don Woods)가 1972년에 만든 인터칼이라고 한다. 제작 이유는 "자신들이 알고 있는 언어들과 완전히 다른 언어를 만들고 싶어서."

2. 전용 위키

<colbgcolor=#717522><colcolor=#FFFFFF> Esolang
파일:Esolang_Logo.png
종류 위키
회원가입 선택
주소 https://esolangs.org/wiki/Main_Page

다양한 난해한 프로그래밍 언어를 전문적으로 다루는 위키로, 후술할 언어들 중 대다수를 포함한다.

3. 난해한 프로그래밍 언어의 요소

난해한 프로그래밍 언어들은 다양한 방법으로 프로그래머들을 농락하는데, 대략적으로 아래와 같다.

4. 예시

4.1. 난해한 프로그래밍 언어

4.2. 난해한 프로그래밍 스타일

정상적인 언어를 사용해 난해하게 작성하는 것. 스파게티 코드 같이 그냥 실력이 없어서 어려워진건 해당되지 않는다.

[1] 명령어의 간결함과 유명세 때문인지, 많은 난해한 프로그래밍 언어들의 튜링 완전 여부는 브레인퍽으로 번역이 가능함을 보여서 증명되곤 한다. [2] [math(SKxy)] = [math(Ky(xy))] = [math(y)]에서 [math(SKx=I)]임을 보일 수 있다. [3] 여기서 말하는 구성이란 대수적 구조와는 관계없다. 모든 튜링 완전한(Turing-complete) 언어는 대수적으로 보면 결국 모두 동일한 구조다. [4] 괴델 넘버링을 응용한 것이다. 괴델은 괴델 베타 함수를 이용하여 inductive structure를 갖는 모든 클래스의 원소를 하나의 자연수로 표현하였고, 이를 이용하여 프로그램 뿐 아니라, 수학 증명 자체도 하나의 자연수로 표현하였다. 이러한 자연수로의 인코딩/디코딩을 이용하여 증명한 것이 불완전성 정리이다. [5] 정규표현식과 비슷한 맥락이다. [6] 셰익스피어 프로그래밍 언어도 자연어를 사용하지만, 아스키 한 글자를 출력하는 명령인 Speak your mind가 수없이 반복되는 것을 볼 수 있다. [7] 프로그램 자신의 소스코드를 화면에 문자열로 출력하는 것. [8] 아래 홈페이지의 예시에 이거 말고도 8개의 Hello World를 출력하는 방법이 더 있다. [9] 예시로 Hello, world!는 이렇게 쓴다. 혀어어어어어어어엉........ 핫. 혀엉..... 흑... 하앗... 흐윽... 형. 하앙. 혀엉.... 하앙... 흐윽... 항. 항. 형... 하앙. 흐으윽... 형... 흡... 혀엉.. 하아아앗. 혀엉.. 흡... 흐읍... 형.. 하앗. 하아앙... 형... 하앙... 흐윽... 혀어어엉.. 하앙. 항. 형... 하앙. 혀엉.... 하앙. 흑... 항. 형... 흡 하앗. 혀엉..... 흑. 흣 [10] 사실 코드 시작과 끝에 어떻게, 이 사람이름이냐ㅋㅋ를 쓰기는 한다