mir.pe (일반/어두운 화면)
최근 수정 시각 : 2024-12-29 16:21:17

난해한 프로그래밍 언어


[[컴퓨터공학|컴퓨터 과학 & 공학
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)

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
<nopad> 파일: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개의 Hello World를 출력하는 방법이 더 있다. [8] https://github.com/Shine-Loi-Lee/HRON [9] 예시로 Hello, world!는 이렇게 쓴다. 혀어어어어어어어엉........ 핫. 혀엉..... 흑... 하앗... 흐윽... 형. 하앙. 혀엉.... 하앙... 흐윽... 항. 항. 형... 하앙. 흐으윽... 형... 흡... 혀엉.. 하아아앗. 혀엉.. 흡... 흐읍... 형.. 하앗. 하아앙... 형... 하앙... 흐윽... 혀어어엉.. 하앙. 항. 형... 하앙. 혀엉.... 하앙. 흑... 항. 형... 흡 하앗. 혀엉..... 흑. 흣 [10] 사실 코드 시작과 끝에 어떻게, 이 사람이름이냐ㅋㅋ를 쓰기는 한다 [11] 슈퍼패미컴 패드의 입력부는 16개이다. 여기에 멀티탭을 통해 패드를 여러개 연결해 명령수단을 16x(n)로 확장하는듯