[[컴퓨터공학|컴퓨터 과학 & 공학
Computer Science & Engineering
]]- [ 펼치기 · 접기 ]
- ||<tablebgcolor=#fff,#1c1d1f><tablecolor=#373a3c,#ddd><colbgcolor=#0066DC><colcolor=white> 기반 학문 ||수학(해석학 · 이산수학 · 수리논리학 · 선형대수학 · 미적분학 · 미분방정식 · 대수학(환론 · 범주론) · 정수론) · 이론 컴퓨터 과학 · 암호학 · 전자공학 · 언어학(형태론 · 통사론 · 의미론 · 화용론 · 음운론) · 인지과학 ||
하드웨어 구성 SoC · CPU · GPU(그래픽 카드 · GPGPU) · ROM · RAM · SSD · HDD · 참조: 틀:컴퓨터 부품 기술 기계어 · 어셈블리어 · C/C++ · C# · Java · Python · BIOS · 절차적 프로그래밍 · 객체 지향 프로그래밍 · 해킹 · ROT13 · 일회용 비밀번호 · 사물인터넷 · 와이파이 · GPS · 임베디드 · 인공신경망 · OpenGL · EXIF · 마이크로아키텍처 · ACPI · UEFI · NERF · gRPC · 리버스 엔지니어링 · HCI · UI · UX · 대역폭 · DBMS · NoSQL · 해시(SHA · 브루트 포스 · 레인보우 테이블 · salt · 암호화폐) · RSA 암호화 · 하드웨어 가속 연구
및
기타논리 회로(보수기 · 가산기 · 논리 연산 · 불 대수 · 플립플롭) · 정보이론 · 임베디드 시스템 · 운영 체제 · 데이터베이스 · 프로그래밍 언어{컴파일러(어셈블러 · JIT) · 인터프리터 · 유형 이론 · 파싱 · 링커 · 난해한 프로그래밍 언어} · 메타데이터 · 기계학습 · 빅데이터 · 폰노이만 구조 · 양자컴퓨터 · 행위자 모델 · 인코딩(유니코드 · MBCS) · 네트워크 · 컴퓨터 보안 · OCR · 슈퍼컴퓨터 · 튜링 머신 · FPGA · 딥러닝 · 컴퓨터 구조론 · 컴퓨터 비전 · 컴퓨터 그래픽스 · 인공지능 · 시간 복잡도(최적화) · 소프트웨어 개발 방법론 · 디자인 패턴 · 정보처리이론 · 재귀 이론 · 자연어 처리(기계 번역 · 음성인식) · 버전 (버전 관리 시스템 · Git · GitHub)
[clearfix]
1. 개요
Esoteric programming language / Esolang일부러 다른 프로그래밍 언어에 비해 사용하기 어렵게 만든 언어.
제작 이유는 대부분 컴퓨터 프로그래밍 언어의 한계를 테스트하기 위해서, 어떤 개념의 증명으로서, 또는 장난하기 위해서이며, 절대로 실용적인 프로그래밍에 적용하기 위한 의도는 아니다. 실제 업무에서 쓰는 프로그래밍 언어는 최대한 다양하게 쓸 수 있으면서도 쉽게 작성할 수 있게 만들려고 애를 쓴다.
따라서 실무에 쓰이는 언어 중 쓰기 전용 언어로 악명높은 Perl, 웹 개발자 사이에서 까야 제맛으로 대동단결하는 PHP, Node.js 개발자들에게 애증의 존재인 JavaScript, 태초의 C언어 등도 난해하긴 하지만, Esolang으로 부르지는 않는다.
최초의 난해한 프로그래밍 언어는 제임스 라이언스(James Lyons)와 돈 우즈(Don Woods)가 1972년에 만든 인터칼이라고 한다. 제작 이유는 "자신들이 알고 있는 언어들과 완전히 다른 언어를 만들고 싶어서."
2. 전용 위키
<colbgcolor=#717522><colcolor=#FFFFFF> Esolang | |
종류 | 위키 |
회원가입 | 선택 |
주소 | https://esolangs.org/wiki/Main_Page |
다양한 난해한 프로그래밍 언어를 전문적으로 다루는 위키로, 후술할 언어들 중 대다수를 포함한다.
- 각종 난해한 프로그래밍 언어로 작성된 Hello, world! ▶
3. 난해한 프로그래밍 언어의 요소
난해한 프로그래밍 언어들은 다양한 방법으로 프로그래머들을 농락하는데, 대략적으로 아래와 같다.- 루프문, 대입문, 조건문 같은 정상적인 문법 구조가 거의 없으며, 포인터, 스택, 큐, 메모리 구조 같은 자료구조에 직접 접근하는 언어가 대부분이다.
- 최소한의 요소만을 가지고 튜링 완전한 언어를 만들어낸다.
튜링 불완전하기가 더 어렵다 - 브레인퍽: 8개의 명령어로 튜링 완전[1]
- Thue: 명령 1개에 피연산자 2개로 튜링 완전
- 수학의 SKI: [math(Sxyz=xz(yz), Kxy=x, Ix=x)]라는 3개의 함수로 구성된 언어가 튜링 완전한 언어임이 증명되어 있다. 이 중에서 [math(I)](Identity function)는 [math(S)]와 [math(K)]로부터 연역되므로[2], 사실상 [math(S)]와 [math(K)] 2개로 구성된 가장 심플한 수학적 프로그래밍 언어라 할 수 있다.
- 여기서 수학과 프로그래밍의 관점의 차이가 존재한다. 수학에서는 최소주의 및 뇌내 판타지를 충족시켜줄 수 있는 것을 선호하며, 오로지 해당 언어의 구조와 범주에만 신경쓴다. 특정 프로그램을 만드는게 얼마나 쉬운가, 구현 시 퍼포먼스는 얼마나 빠른가 등의 실용성은 전혀 신경쓰지 않는다. 덕분에 SKI로 프로그램을 구현하는 것이 삽질일지라도 수학에서는 아주 중요하게 취급된다. 다른 난해한 프로그래밍 언어들도 이런 측면에서는 어느 정도 수학과 관련이 있는 것.
...그러나 이것은 어디까지나 구성[3]이 전에 없이 새로운 언어에만 해당한다. 기존 언어에다가 단순히 명령어 몇 개를 넣고 뺀 다음에 파생 언어라고 하는 것은 수학적으로도, 프로그래밍적으로도 아무런 의미가 없다. 여기 있는 언어 중 대다수도 다른 언어의 구성을 그대로 사용했음을 알 수 있다. 뇌내판타지도 완전히 참신하기는 절대 쉬운 게 아니며, 성공하면 역사에 남는다. - 비슷한 언어로 Unlambda가 있다.
- Iota: 단 하나의 함수만 사용하는 언어다. [math(Ux = xSK)]로 정의된 함수 U로부터 S와 K를 유도해낸다([math(S=U(U(U(UU))))], [math(K=U(U(UU)))]). 다만 U는 함수의 정의에 변수만을 사용한 proper combinator가 아니므로 SKI와 Iota 중 어느 쪽을 더 '작은' 언어로 볼 것인가는 해석의 여지가 있다.
- Bitwise Cyclic Tag (BCT): 0과 1로만 구성되어 있으며, 맨 앞글자에 따라 실행할 명령어가 맨 뒤에 추가되는 Tag system 중 하나이다. 이 Tag system이 튜링 완전하므로 BCT 또한 튜링 완전하게 된다.
- 이상하거나 무의미한 기호를 이용한다.
- Whitespace: 오직 공백 문자, 탭, 줄바꿈 문자만을 이용하므로 보통 텍스트 에디터에서는 제대로 읽기도 어렵다.
- 아희: 무늬만 한글이지, 외계어가 따로 없다.
- 코드가 코드같지 않거나 표현이 과장되었다.
- Shakespeare: 겨우 "Hello, World!"를 출력하는데 코드가 50줄이 넘는다.
- Chef: 코드가 아예 레시피 형태이다.
- Dark: 중2병스럽게 표현을 과장시킨 예.
- 1차원이 아닌 자료 및 코드 영역을 사용한다.
- 비결정적으로 동작한다. 즉, 경우에 따라 같은 프로그램이 다른 결과를 내놓는다. NFA(비결정적 유한 오토마타 기계)의 컨셉을 활용한 것이 많다.
- Java2K : 11진수로 동작하며 함수의 동작에 기반하여 10% 확률로 잘못된 값(다른 결과)를 내놓는다.(...)
- Thue
- 존재 자체가 더럽다. 프로그램의 작성이 거의 불가능할 정도로 어렵게 만든 언어가 대부분이다.
만든 놈이 더 무섭다 - Malbolge: 소개된 지 무려 2년 만에 첫 프로그램이 나왔을 정도로 악질이다.
- 이름은 무언가의 패러디거나 장난식인 경우가 많다.
- 필수적인 특징은 아니고 경우마다 다른 경우도 있지만, 대체로 쓰기는 쉽지만 읽기는 어려운 경우가 많다[5]. 작성자가 의도한 내용이 확실하면 주어진 기호나 연산을 활용해
노력을 짜내서작성할 수는 있지만, 읽는 사람은 전체적인 구조는 커녕 의도조차 파악하기 힘들기 때문. - 반면 컴파일러나 인터프리터 등의 작성은 다른 고급 언어보다 오히려 쉬운 편이다. 일반적인 고급 언어는 대체로 구조가 복잡하기 때문에 번역기 작성이 어려운 편.
4. 예시
4.1. 난해한 프로그래밍 언어
- APL: 코드 전체가 난해한 특수문자라 치는 것과 쓰는 것 모두가 어렵다. 그러나 이 언어는 다른 난해한 프로그래밍 언어와 달리 지적 유희를 위해 만들어진 것이 아니고, 다른 언어들과 다르게 프로그래밍 언어의 발전에 공헌이라도 했다. 당장 NumPy의 많은 배열처리 기능들 중에는 APL 유래가 많다.
- ArnoldC: 아놀드 슈워제네거의 영화 속 명대사(One-liner)들로만 이루어진 언어. 예를 들어 Return 커맨드는 I'LL BE BACK, EqualTo는 YOU ARE NOT YOU YOU ARE ME, 그리고 False는 I LIED다.
- asdf: 말 그대로
a
,s
,d
,f
의 4글자로 프로그래밍을 한다. - A=B
- Chicken: 오직 Chicken이라는 단어만 연산자로 기능한다.
- Dark: 명령어가 전부 부정적인 단어들로 대치되어 있다. 중2병 컨셉으로, traceon이라는 명령어는 게임 Fate/stay night의 주인공 에미야 시로에서 따온 것이다.
- DNA#: DNA와 염기구조를 모티브로 한 언어. 코드들은 대개 유전자 모양을 띈다.
- emojicode: 이모지를 사용한 언어.
- ETA: 영어에서 가장 많이 쓰이는 알파벳인
E
,T
,O
,I
,A
,N
,S
,H
를 명령어로 사용한다. - FiM++: My Little Pony: Friendship is Magic의 팬들에 의해 만들어진 언어로, 트와일라잇 스파클이 셀레스티아 공주에게 보내는 우정 보고서를 바탕으로 실제 편지글처럼 읽을 수 있는 것을 목적으로 한 언어다. 예를 들어서 편지의 수신자는 곧 클래스의 이름이 되고, Hello world!는
I said “Hello World”!
가 된다. Java의 문법을 자연어로 치환한 것이라 자바와 완벽하게 1:1 대응이 되도록 제작중이다. 특이하게 편지가 소스 코드라는 티가 나지 않도록 하나의 명령에 같은 뜻을 지닌 여러 개의 단어가 대응된다.[6] 인터프리터 및 샘플 코드는 여기를 참조. - Fugue: 이름처럼 실제 악보로 코드를 구현한다.
- GNE(그네): 박근혜 화법 및 그 외 사건사고를 기반으로 한 언어다. 'GNE'란 'GNE is Not Eligible'의 약자라고 한다. 아직 구현된 컴파일러는 없다.
사실 제작자가 만들어서 올려뒀다가 무서워서 다시 지웠다고 한다.또한 하드웨어 사양으로 CPU: 인텔 제온E7, 메모리: 486GB, 승마장, 독일 직통 광케이블을 요구한다. 객체 지향에 문법이 거의 불규칙에 가깝고 식별자에는 띄어쓰기가 난무하는 것을 보면 구현이 더 난해할 듯 하다. - Grass:
W
,w
,v
의 3종류의 알파벳만으로 프로그램을 작성한다. 코드가 풀밭처럼 보여서 이런 이름이 되었다고 한다. - 호무호무: 위의 Grass의 파생 언어.
w
를ほむ
,W
를 공백 문자,v
를 개행 문자로 치환한 것으로 보인다. 이 이전에도 또 다른 파생 언어가 2개 있었다. - HQ9+: 명령어가
H
,Q
,9
,+
이렇게 4개뿐이다. H는 "Hello, world!" 출력을, Q는 콰인[7]을, 9는 99병의 맥주 가사 출력을, +는 가산기 1 증가를 담당한다. 물론 가산기만 증가시키는 거라 아무런 출력을 하지 않는다.그럼 존재 이유가 없잖아즉, 이 언어로 제대로 된 프로그래밍은 불가능하다.뭘 기대해 - Java2K: 비결정적으로 동작하는 프로그래밍 언어. 사칙연산조차 매번 10%의 확률로 랜덤하게 다른 값이 나올 수 있다.
- Kanjicode: 각각의 명령어를 비슷한 뜻의 한자로 대체한 언어. 'Kanji'라는 표기에서 알수있듯, 일본 신자체를 기반으로 하고 있다.
- Kvikkalkul
- LOLCODE: 인터넷 통신체를 명령어로 사용하여 만든 프로그래밍 언어. 비슷한 테마로 Omgrofl이 있다.
- Malbolge: 이쪽 계열의 끝판왕. 자세한 것은 해당 문서 참조.
- NULL: 본격 0차원 프로그래밍 언어. 그냥 양의 정수 자체가 프로그램이 되고, 그 숫자를 소인수분해해서 명령을 실행한다! 본격 괴델수 컴퓨터판.
- OISC: 단일 명령어 세트 컴퓨터(One Instruction Set Computer)의 약자로, 단 하나의 명령어만으로 튜링 완전하다. 이 짓거리가 가능한 명령어 중 가장 많이 구현되는
subleq
명령어의 정의는 다음과 같다. subleq(a, b, c)
: 메모리 주소a
에 있는 값에서 메모리 주소b
에 있는 값을 뺀 결과값을 메모리 주소b
에 저장한다(*b = *a - *b;
). 이 값이 0과 같거나 작으면 메모리 주소c
로 점프한다. 아니라면 다음 명령어를 실행한다.- ORK: 이름부터 패기가 넘친다. Objekts R Kool의 약자...라는데 대놓고 포자번식하는 어떤 우주 깡패들을 연상시킨다. 이름에서 보이듯이 객체지향 언어이며, 사실 소스 코드의 보이는 형태 자체는 워해머 오크들하고는 별 관련이 없다. C++로 포팅하는 것도 가능한 듯 하다.
- PATH: 비펀지+브레인퍽
- Piet: 데이비드 모건-마(David Morgan-Mar)란 사람이 몬드리안의 그림을 보고 만든 언어. 도트 노가다로 그림을 그리면 점의 위치와 RGB 값이 코드의 역할을 한다. "Hello, World!" 코드는 아래와 같이 짠다.[8]
RGB 값 중 실제로 프로그래밍 작동에 관여하는 색은 흰색, 검은색 포함 총 20개 뿐이고 나머지 색은 모두 흰색과 같은 역할이지만, 프로그래밍을 작동시키는 위치의 방향을 정하는 방법이 상당히 난해하다.사이트를 보면 바로 포기하게 될 것이다더 많은예술 작품코드는 여기서 볼 수 있다.본격 현대 미술 프로그래밍
Piet도 파생언어들이 존재하는데, - 이 언어와 브레인퍽을 합친듯한 Brainloller.
- 이모지중 바탕색에 글자가 칠해진 문자셋을 기반으로 하는 🅿🅸🅴🆃.
- Piet++
- PokéBattle: 코드를 포켓몬스터 전투 텍스트처럼 짠다.
- PUBERTY: 성인용 Esolang. 주로 수음과 성도착증에 관련된 단어들이 명령어로 작용된다.
- Pxem: 파일 이름이 코드의 역할을 한다. 파일 내용은 비어 있어도 된다.
- RPG: 고전 롤플레잉 게임의 메세지 출력처럼 코딩을 한다.
- Sclipting:
네모나서 써놓고 보면 반듯하게 잘 나열되는한글과 한자, 일부 전각 특수문자를 활용해서 만든 난해한 프로그래밍 언어다. 개발자는 해당 위키의 Timwi라는 유저. - SICKBAY: BASIC의 esolang化.
- 브레인퍽:
+-[]<>.,
의 8글자만으로 튜링 완전하다. 아래의 언어들은 모두 브레인퍽 기반의 파생 언어다. 하도 많아서 Esolang 위키에선 브레인퍽에 상응하는 분류가 아예 별도로 존재할 지경이다. - A: 알파벳 A만으로 프로그램을 작성한다.
- Runic: 룬 문자의 알파벳들을 명령어로 이용한 언어. 10부터 1까지 거꾸로 출력하려면
ᚦᚦᚦᚦᚦᚦᚦᚦᚦᚦᚲᚠᛉᛚ
이렇게 해야한다. - 포탈: 그 비디오 게임에서 따온것 맞다. 그 게임 특유의 장치에 상응하는 명령어인 o가 추가되었며, 포인터를 워프(?)시킨다는것도 원본과 똑같다. 개량판으로 Portal 2가 있다.
- Ook!
- Nyaruko: 브레인퍽에서 각 명령어를
(」・ω・)」うー(/・ω・)/にゃー
하게 바꾼 것. 기어와라! 냐루코 양의 오프닝 太陽曰く燃えよカオス에서 아이디어를 얻었다고 한다. - JapariProgrammingLanguage(자파리프로그래밍언어): 브레인퍽 기반으로, 케모노 프렌즈(애니메이션 1기)를 모티브로 삼았다.
- SpaghettiScript: 브레인퍽 파생은 아니지만 거기에 크게 영향을 받은 언어로 코드를 짜다보면 스파게티 면발을 아스키 아트처럼 쓴것으로 보일 것이다.
레알 스파게티 코드 - 슈슉: 브레인퍽 기반으로 각 명령어를 "슈슉" 같은 문자열으로 대체했다.
- Hq9eFuck: 브레인퍽 명령어에 HQ9+의 명령어를 추가한 버전.
- 开?关!: 한자 몇개만 포인터 명령어로 사용하며, 몇몇 명령어는 I/O없는 Brainbool에 상응한다. 사용하는 한자는 开,关,溜,回,空,变 정도.
- I Use Arch Btw: 뜻은 “근데 나는 아치 (리눅스)를 씀” 정도가 되겠다. i, use, arch, linux, btw, by, the, way, gentoo로 프로그래밍 한다.
- 재즈랭(Jazzlang): "재즈를 뭐라고 생각하세요?" 밈을 기반으로 만들어진 프로그래밍 언어다.
- 비펀지: 2차원 공간 위에 코드를 작성한다. 자세한 내용은 해당 문서 참조.
- 셰익스피어 프로그래밍 언어: 코드를 셰익스피어의 희곡처럼 쓴다.
- 셰프: 레시피 형식으로 코드를 쓴다. 코더가 신경을 좀
많이쓰면 실제 활용 가능한 레시피로 작성할 수 있다!맛은 보장 못한다. 비슷한 감각의 언어로는 Drive-In Window도 있는데, 드라이브인 식당에서 음식주문 대화가 오가는듯한 형식이다. - 아희: 국산 프로그래밍 언어. 한글만으로 프로그램을 작성한다. 위의 비펀지와 같이 2차원이다.
의도는 좋았다 - 언람다
- 인터칼: 최초의 난해한 프로그래밍 언어로 알려진 언어. 견해에 따라선 1964년에 먼저 나온 (Brainfuck의 전신인) [math(\mathcal{P}^{\prime \prime})]를 첫번째로 꼽기도 한다.
- HRON[9]: 국내 지하아이돌 하라무코의 멤버 해로온을 모티브로 한 프로그래밍 언어. 코드 종료 명령어 '해로온이라'를 제외한 모든 명령어와 변수가 '해'와 '롱' 두 글자의 조합으로만 구성되어 있다.
- 혀엉...:
형
,항
,핫
,흣
,흡
,흑
등 일부 한글 글자와 문장 부호.
,?
,!
, 특수 문자로 코드를 작성하는 언어. 사용하는 문자만 봐도 짐작할 수 있듯 완성된 코드는 아무것도 모르는 사람이 보기엔 영락없는 신음이 되어버린다. [10] - Whitespace: 공백 문자, 탭, 엔터로만 코드를 작성한다. 즉, 눈에 보이지 않는다.
- Unicat: 고양이 관련 이모지를 포인터로 한 esolang.
- 엄랭: "엄", "준", "식", "어", "동탄"과 "?!.,~ㅋ"만을 사용하는 언어이다.[11]
- 몰랭(Mollang): "몰?루", "아루", "가자!", "털자" 등, 블루 아카이브에서 출시한 이모티콘의 문구와 문장 부호 등을 사용하여 코드를 작성하는 프로그래밍 언어이다. 엄랭을 기반으로 해 문법 구조가 상당히 비슷하다. 엄랭 개발자가 몰?루 언어를 만들어 줄 개발자를 찾아서 만들어졌다. 이 외에도 몰?랭, 몰?루언어(MoluLang) 등이 존재한다.
- 어쩔랭(Asserlang): "어쩔티비"를 기반으로 만든 프로그래밍 언어이다.
코드가 매우 킹받게 생겼다. - 뭉랭(MungLang): 스트리머 케인의 밈 뭉탱이에 영감을 받아 제작된 언어이다. 키워드 "뭉" "탱" 등으로 코드를 작성한다.
- 상수랭(SangsuLang): "정상수"로 만든 프로그래밍 언어이다.
정상수가 반말을 싫어한다는 이유로 코드 뒤에 세미콜론 대신 "요"를 붙여야만 한다.엄랭과 문법이 비슷하다. - 오빠랭(OppaLang): "오빠 오빠 차 있어?"를 기반으로 만든 프로그래밍 언어이다.
- 록스타: 1980년대 하드 록 스타일의 가사처럼 입력해야 코드가 짜여지는 언어다
- 文言(원옌): 중화권 프로그래머인 황링둥이 개발한 언어로, 예문을 보면 중국 고전의 필담(공자왈 맹자왈)처럼 해놓았다. 튜링 완전.
- ערימה: 영어로 'Heap'에 상응하는 히브리어 단어로, 히브리 문자로 작성되는 esolang이다.
- قلب: 아랍 문자를 사용함.
- ᚱᚢᚾᛅᛦ(Rúnaʀ): 위의 Runic과는 다른듯 하며, 마찬가지로 룬 문자를 사용해서 작성된다.
- OTLanguage: 한글 이모티콘으로 이루어진 언어로 이름 유래는 'OTL' 과 'Language'를 합쳐서 OTLanguage이 되었다고 한다. 문법은 여기에 정리되어 있다.
- 버터랭: 트릭컬 리바이브의 테마극장 "멜트다운 버터"에 나오는 버터의 대사를 이용하여 프로그래밍 하는 언어이다.
기계어: 코드가 0과 1 뿐이므로 난해한 프로그래밍 언어는 맞지만, 이건 실제로 쓰려고 만들어진 것. 실제로 모든 프로그래밍 언어는 최종적으로 이 기계어로 번역되어 바이너리로 저장된다. 같은 맥락에서 어셈블리어도 현재 기준으로는 드럽게 어렵긴 해도 본 문서의 예시들에 해당되진 않는다. 무엇보다 이 둘은 활발히 쓰였고, 지금도 배울 사람은 배워야 한다.
4.2. 난해한 프로그래밍 스타일
정상적인 언어를 사용해 난해하게 작성하는 것. 스파게티 코드 같이 그냥 실력이 없어서 어려워진건 해당되지 않는다.- JSFuck: JavaScript에서 사용하는 문자 중
[
,]
,(
,)
,!
,+
만으로 완전한 자바스크립트 코드를 작성한다. - 역시 정상적인 언어인 C언어로 최대한 난해한 코드를 짜는 대회가 있다. IOCCC 문서 참고.
- 슈퍼 패미컴의 TAS로 임의 코드 실행의 경지까지 이르면 게임패드 여러대를 명령어로 활용해 게임 안에서 코딩하는 해킹을 보여주기도 한다. 제한된 명령수단[12]으로 코딩하는것은 브레인퍽류 esolang이 약간 연상되기도 한다.
[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] https://github.com/Shine-Loi-Lee/HRON[10] 예시로 Hello, world!는 이렇게 쓴다. 혀어어어어어어어엉........ 핫. 혀엉..... 흑... 하앗... 흐윽... 형. 하앙. 혀엉.... 하앙... 흐윽... 항. 항. 형... 하앙. 흐으윽... 형... 흡... 혀엉.. 하아아앗. 혀엉.. 흡... 흐읍... 형.. 하앗. 하아앙... 형... 하앙... 흐윽... 혀어어엉.. 하앙. 항. 형... 하앙. 혀엉.... 하앙. 흑... 항. 형... 흡 하앗. 혀엉..... 흑. 흣
[11] 사실 코드 시작과 끝에 어떻게, 이 사람이름이냐ㅋㅋ를 쓰기는 한다[12] 슈퍼패미컴 패드의 입력부는 16개이다. 여기에 멀티탭을 통해 패드를 여러개 연결해 명령수단을 16x(n)로 확장하는듯