난해한 프로그래밍 언어
Esoteric programming language난해한 프로그래밍 언어(때로는 esolang으로 줄임말)는 개념 증명, 소프트웨어 아트, 다른 언어(특히 기능적 프로그래밍 또는 절차적 프로그래밍 언어)에 대한 해킹 인터페이스 또는 농담으로 컴퓨터 프로그래밍 언어 설계의 경계를 테스트하기 위해 설계된 프로그래밍 언어입니다.난해한 단어의 사용은 그들을 일하는 개발자들이 소프트웨어를 작성하기 위해 사용하는 언어들과 구별한다.비록 시각공간 [1]구문과 같은 일부 난해한 특징들이 예술에서 실용적인 응용에 영감을 주었지만, 대부분의 에솔랑의 창작자들은 주류 프로그래밍에 그것들을 사용할 의도가 없습니다.그러한 언어는 해커들과 취미 [citation needed]생활자들 사이에서 종종 인기가 있다.
난해한 프로그래밍 언어의 설계자에게는 사용성이 목표가 되지 않는 경우가 드물며, 설계상 정반대로 이어지는 경우가 많습니다.이들의 통상적인 목표는 튜링완전 또는 컴퓨터 클래스가 불분명한 언어를 유지하면서 기존의 언어 특징을 제거하거나 대체하는 것입니다.
역사
난해한 프로그래밍 언어의 최초이자 여전히 표준적인 예는 1972년 Don Woods와 James M에 의해 설계된 INTCAL입니다.[2]리옹은 그들이 익숙한 어떤 [3][4]언어와는 달리 프로그래밍 언어를 만드는 것이 그들의 의도라고 말했다.Fortran, COBOL, 어셈블리 언어 등 당대의 확립된 프로그래밍 언어의 요소를 패러디했다.
수년간 인터CAL은 INTERCAL 매뉴얼의 종이 사본으로만 표시되었습니다.1990년 Unix의 C에서 구현되어 부활한 것은 난해한 컴퓨터 언어의 의도적인 설계에 대한 관심의 물결을 불러일으켰다.
1993년, Wouter van Oortmerssen은 코드를 본질적으로 난독화, 혼란스럽고 읽을 수 없도록 설계된 구문을 가진 작은 스택 지향 프로그래밍 언어인 FALSE를 만들었습니다.컴파일러의 [5]크기는 1024바이트에 불과합니다.이것은 Urban Muller가 더 작은 언어인 유명한 Brainfuck을 만들도록 영감을 주었습니다. Brainfuck은 겨우 8개의 인식된 캐릭터로 구성되어 있습니다.Brainfuck은 Chris Presey의 Befunge(FALSE와 비슷하지만 2차원 명령 포인터 포함)와 함께 현재 가장 잘 지원되는 난해한 프로그래밍 언어 중 하나로, 최소한의 튜링 타피트와 불필요하게 난독화된 언어 특징의 표준적인 예를 가지고 있다.Brainfuck은 튜링 기계의 PP족과 관련이 있다.
공통 기능
난해한 프로그래밍 언어들은 많은 면에서 다르지만, 패러디, 미니멀리즘,[6] 프로그래밍을 어렵게 만드는 목표와 같은 많은 언어들을 특징짓는 몇 가지 공통적인 특징들이 있다.
고유한 데이터 표현
기존의 명령형 프로그래밍 언어에서는 일반적으로 데이터를 변수에 저장할 수 있지만, 난해한 언어에서는 데이터를 저장하고 액세스하는 방법이 다를 수 있습니다.Brainfuck 및 Malbolge와 같은 언어에서는 하나의 포인터를 통해서만 데이터를 읽을 수 있습니다. 포인터는 데이터를 읽기 전에 해당 위치로 이동해야 합니다.Befunge나 Shakespeare와 같은 다른 것들은 데이터를 저장하기 위해 하나 이상의 스택을 사용하므로, 리버스 폴란드어 표기법과 유사한 실행 방식을 초래합니다.마지막으로, Brainfuck 변종 Boolfuck은 단일 비트에서만 작업을 허용하는 반면, Malbolge와 INTERCAL 변종 TriINTCAL은 모두 기본 3진법으로 [7]비트를 대체합니다.
고유 명령 표현
난해한 언어들은 프로그램 명령을 표현하는 독특한 방법도 보여줍니다.Befunge와 Piet와 같은 일부 언어는 프로그램을 [8][page needed]2차원 이상 나타내며 프로그램 제어는 프로그램을 통해 여러 방향으로 이동합니다.이것은 프로그램이 일반적으로 순차적으로 발생하는 일련의 명령어인 기존 언어와는 다릅니다.다른 언어들은 명령을 변형하여 특이한 형태로 나타나게 하는데, 종종 기본 명령과 대체적인 의미를 가진 인간이 읽을 수 있는 언어입니다.셰익스피어는 모든 프로그램을 셰익스피어 연극과 비슷하게 만들어서 이것을 달성한다.셰프는 모든 프로그램을 [7]레시피로 함으로써 같은 것을 달성합니다.셰프는 특히 프로그램과 레시피로 기능하는 프로그램을 만들어 이 이중의 [9]의미를 만들어내는 언어의 능력을 보여준다는 점에서 주목할 만하다.
읽기 및 쓰기 어려움
많은 난해한 프로그래밍 언어들은 매우 난독화되어 읽기 및 [10]쓰기가 어려운 코드를 생성하도록 설계되어 있습니다.이것의 목적은 프로그램 작성자에게 흥미로운 퍼즐이나 도전을 제공하는 것일 수 있습니다. 예를 들어, Malbolge는 분명히 도전적이도록 설계되었기 때문에 자체 수정 코드와 매우 반직관적인 [10]조작과 같은 기능을 가지고 있습니다.한편, 일부 난해한 언어는 다른 디자인 선택으로 인해 쓰기가 어려워집니다.Brainfuck은 최소한의 명령어 집합이라는 생각에 전념하고 있기 때문에, 그 명령어는 원칙적으로 간단하지만, 발생하는 코드는 인간이 읽기 어렵다.INTERCAL의 어려움은 다른 프로그래밍 언어에서 사용되는 조작을 피하는 선택으로 인해 발생합니다.이것은 다른 [10]언어의 패러디에서 유래한 것입니다.
패러디 및 스푸핑
난해한 프로그래밍 언어의 목적 중 하나는 프로그래밍 [10]분야의 기존 언어와 트렌드를 패러디하거나 스푸핑하는 것입니다.예를 들어, 최초의 난해한 언어 인터칼은 APL, Fortran, COBOL과 같은 1960년대에 사용된 언어의 스푸핑으로 시작되었다. 인터칼의 규칙은 이러한 다른 [11]언어의 규칙과 반대되는 것으로 보인다.그러나 패러디의 주제가 항상 또 다른 확립된 프로그래밍 언어인 것은 아니다.예를 들어 셰익스피어는 셰익스피어 연극의 구조를 스푸핑한 것으로 볼 수 있다.Ook!이라는 언어는 Brainfuck의 8가지 명령이 "Ook. Ook?"과 같은 다양한 오랑우탕으로 대체되는 Brainfuck의 패러디물이다.[7]
예
비번지
Befunge는 명령 포인터가 코드를 통해 다차원으로 로밍할 수 있도록 합니다.예를 들어, 다음 프로그램은 "Hello World"를 표시하며, 문자를 역순으로 스택에 밀어넣은 다음 명령을 시계 방향으로 순환하는 루프 형태로 인쇄합니다.>
,:
,v
,_
,,
,그리고.^
.
"dlroW 올레H">:v ^,_@
베번지에는 많은 버전이 있는데, 가장 흔한 것은 베번지-93이다.[citation needed]
이항 람다 미적분
이진 람다 미적분은 알고리즘 정보 이론의 관점에서 설계되어 29바이트의 자기 해석기, 21바이트의 소수 체 및 112바이트의 Brainfuck [citation needed]해석기를 특징으로 하는 최소 수단으로 가능한 가장 밀도 높은 코드를 가능하게 합니다.
브레인 fuck
Brainfuck은 극단적인 미니멀리즘을 위해 설계되었으며 8개의 다른 캐릭터만 포함하는 난독화된 코드로 이어진다.다음 프로그램은 "Hello World!"[citation needed]를 출력합니다.
++++++++++[>+++++++>++++++++++>+++<<<< >-]>++.>+.+++++++ ..+++.>++.<< >+++++++++++++++.>.+++.------.--------.>+.
셰프
Chef는 David Morgan-Mar가 만든 스택 지향 프로그래밍 언어로, 프로그램을 요리 [12]레시피처럼 보이게 디자인했습니다.프로그램은 제목, 변수 및 데이터 값 목록 및 스택 조작 [13]명령 목록으로 구성됩니다.농담의 디자인 원칙은 "프로그램 레시피는 유효한 출력을 생성해야 할 뿐만 아니라 준비하기 쉽고 맛있어야 한다"고 말하고 있으며, Morgan-Mar는 "101개의 계란"과 "111컵의 기름"으로 구성된 Hello World 프로그램의 예는 "한 사람이 [13][14]먹을 수 있는 많은 음식"을 생산할 수 있다고 지적한다.
프랙트란
FRACTRAN 프로그램은 초기 양의 정수 n n과 함께 양의 분수를 순서대로 나열한 목록입니다.프로그램은 정수 nf}에 목록의 첫 번째 f f를 곱하여 실행합니다(f {\ nf는 정수). 다음 정수 nnf가 nf로 되고 규칙이 반복됩니다.n{\ n을 곱했을 때 목록 내에 정수가 생성되지 않으면 프로그램이 중지됩니다.프랙트란은 수학자 존 콘웨이에 [citation needed]의해 발명되었다.
골프 스크립트
코드 골프용 언어인 GolfScript의 프로그램은 코드 블록을 값으로 하는 변수를 제외하고 각 [citation needed]항목이 스택에 푸시되는 항목 목록으로 구성됩니다.
인터칼
인터칼은 1972년 당시 다양한 프로그래밍 언어의 [4]측면을 풍자하기 위해 패러디로 만들어졌다.
JSFuck
JSFuck은 JavaScript의 난해한 프로그래밍 스타일로 코드는 6자만 사용합니다.[
,]
,(
,)
,!
,그리고.+
독자적인 컴파일러나 인터프리터가 필요한 Brainfuck과는 달리 JSFuck은 유효한 자바스크립트 코드입니다.즉, [15][16]JSFuck 프로그램은 JavaScript를 해석하는 웹 브라우저나 엔진에서 실행할 수 있습니다.
롤코드
LOLCODE는 LOLCODE의 말투를 닮도록 고안되었습니다.다음으로 "Hello World"의 예를 나타냅니다.
하이캔에 STDIO가 있나요? '하이월드'가 보입니다.KTHXBYE
LOLCODE는 매우 난해하지 않고 오히려 특이한 [17]어휘를 가진 평범한 절차 언어라는 비판을 자주 받는다.
말볼주
말볼지(지옥의 8번째 원을 따서 이름 지어짐)는 가장 어렵고 난해한 프로그래밍 언어로 설계되었다.다른 특징들 중에서 코드는 설계에 의해 자체 수정되며 명령의 효과는 메모리 [citation needed]내 주소에 따라 달라집니다.
피에트
Piet는 David Morgan-Mar가 디자인한 언어로, 그의 프로그램은 추상 [18]예술처럼 보이는 비트맵이다.실행은 연속된 색상 영역에서 다음 색상 영역으로 이미지 주위를 이동하는 "포인터"에 의해 안내됩니다.포인터가 영역을 벗어날 때 절차가 수행됩니다.
동작이 지정된 색상은 20가지입니다. "컬러풀" 색상은 6단계 색상 사이클과 3단계 밝기 사이클로 정렬된 18가지 색상과 정렬되지 않은 검은색 및 흰색입니다."컬러풀" 색상을 종료하고 다른 색상을 입력할 때 수행되는 절차는 색상 및 밝기의 변화 단계 수에 따라 결정됩니다.검은색은 입력할 수 없습니다. 포인터가 검은색 영역에 들어가려고 하면 대신 다음 블록을 선택하는 규칙이 변경됩니다.가능한 모든 규칙이 시행되면 프로그램이 종료됩니다.영상의 테두리 밖에 있는 영역도 검은색으로 취급됩니다.흰색은 작업을 수행하지 않지만 포인터가 "통과"할 수 있습니다.지정된 20가지 색상 이외의 색상의 동작은 컴파일러 [18][non-primary source needed]또는 인터프리터에 맡깁니다.
변수는 단일 스택에 부호 있는 정수로 메모리에 저장됩니다.지정된 대부분의 프로시저는 해당 스택에서의 연산을 취급하지만 다른 프로시저는 입력/출력 및 컴파일 포인터가 [citation needed]이동하는 규칙을 취급합니다.
피에트는 네덜란드 화가 피에트 [19]몬드리안의 이름을 따서 지어졌다.원래 의도한 이름인 몬드리안은 이미 오픈 소스 통계 데이터 시각화 [18]시스템에 의해 채택되었다.
록스타
Rockstar는 Dylan Beattie가 [20][21][22]만든 헤어 메탈 파워 발라드이기도 한 프로그램을 만들기 위해 고안된 컴퓨터 프로그래밍 언어입니다.
셰익스피어
셰익스피어는 프로그램을 셰익스피어 연극처럼 보이게 하기 위해 고안되었다.예를 들어, 다음 문은 GOTO 유형 [citation needed]문을 통해 도달할 수 있는 프로그램의 지점을 선언합니다.
1막: 햄릿의 모욕과 아첨.
언람다
Unlambda는 SKI 미적분에 기반한 최소 함수 프로그래밍 언어이지만, 1등급 연속 및 필수 I/O와 결합됩니다(일반적으로 [citation needed]연속을 사용해야 하는 입력).
공백
공백은 공백 문자(스페이스, 탭 및 반환)만 사용하고 다른 모든 문자는 무시하므로 설명에 사용할 수 있습니다.이것은 다른 공백 문자를 구분하지 않고 탭과 공백을 동일하게 취급하는 많은 전통 언어의 반대입니다.또한 C와 같은 언어로 [citation needed]된 프로그램의 소스 코드에 Whitespace 프로그램을 숨길 수 있습니다.
문화적 맥락
에솔랑의 문화적 맥락은 제프 콕스에 의해 연구되어 왔는데, 그는 에솔랑은 "명령과 통제에서 문화적 표현과 거부로 주의를 옮긴다"[23]면서 메즈브리즈의 메자넬과 같은 코드 예술과 코드 시와 유사하다고 보았다.Daniel Temkin은 Brainfuck을 "인간의 표현과 어셈블리 코드 사이의 경계를 완화하는 것을 거부하여 우리를 우스꽝스러운 [24]논리의 여정에 이르게 하는 것"이라고 설명하면서 인간의 사고와 컴퓨터 논리 사이의 본질적인 충돌을 폭로했다.그는 에솔랑 내의 프로그래밍을 플럭서스 운동과 같은 이벤트 점수 수행과 연결시켜 코드 로직의 규칙을 연주하면 언어의 관점이 [25]명확해집니다.
레퍼런스
- ^ 맥린, A., 그리피스, D., 콜린스, N. 및 위긴스, G. (2010)."실시간 코드 시각화"런던, Electronic Visualization and the Arts, 2010.
- ^ Matthew Fuller, 소프트웨어 연구, MIT Press, 2008
- ^ Eric S. Raymond (1996). The New Hacker's Dictionary. MIT Press. p. 258. ISBN 978-0-262-68092-9.
- ^ a b Woods, Donald R.; Lyon, James M. (1973), The INTERCAL Programming Language Reference Manual, Muppetlabs.com, archived from the original on 20 February 2009, retrieved 24 April 2009
- ^ "Interview with Wouter van Oortmerssen". Esoteric.codes. 1 July 2015. Archived from the original on 8 December 2015. Retrieved 1 December 2015.
- ^ Fuller, Matthew (2008). Software studies: a lexicon. MIT Press. ISBN 978-0-262-06274-9. OCLC 1156851190.
- ^ a b c 모어, 세바스찬"Esoteric Programming Languages." (2015년).
- ^ 2013년 콕스
- ^ Mike (31 March 2013). "Baking a Hello World Cake". Products of Mike's Mind. Retrieved 1 June 2022.
- ^ a b c d Mateas, M. and Montfort, N. A Box, Darkly: 난독화, 이상한 언어, 코드 미학.디지털 예술 및 문화 분야: 디지털 익스피리언스: 디자인, 미학, 실천 (DAC 2005), 덴마크 코펜하겐, 2005.
- ^ Gaboury, Jacob (2018). "Critical Unmaking: Toward a Queer Computation". In Jentery Sayers (ed.). The Routledge Companion to Media Studies and Digital Humanities. New York: Routledge. pp. 483–491. doi:10.4324/9781315730479-50. ISBN 978-1-315-73047-9.
- ^ Cozens, Simon (2005). Advanced Perl programming. O'Reilly Media. p. 269. ISBN 978-0-596-00456-9.
A final Acme curiosity, and one of my favourites, is Acme: :Chef, an implementation of David Morgan-Mar's Chef programming language. In Chef, programs are expressed in the form of recipes: ...
- ^ a b Morgan-Mar, David (24 March 2011). "Chef". DM's Esoteric Programming Languages. Self-published. Retrieved 28 June 2014.
- ^ Morgan-Mar, David (28 June 2014). "Chef Sample Program: Hello World Souffle". DM's Esoteric Programming Languages. Self-published. Retrieved 28 June 2014.
- ^ Bailey, Jane (29 February 2016). "Bidding on Security". The Daily WTF. Retrieved 2 March 2020.
- ^ "Exploring JSF*ck". alligator.io. Retrieved 2 March 2020.
- ^ "LOLCODE#Criticism". Esolangs.org. Retrieved 30 November 2015.
LOLCODE is often criticized for not being Esoteric enough. By design, LOLCODE is actually a normal procedural language behind its lulzy syntax. This is a stark contrast from "True" Esolangs like Befunge, which features a two-dimensional, almost game board-like syntax. For this reason, LOLCODE is technically categorized as a Weirdlang.
- ^ a b c Morgan-Mar, David (25 January 2008). "Piet programming language". Retrieved 18 May 2013.
- ^ Cox 2013, 페이지 6
- ^ "rockstar : home". codewithrockstar.com.
- ^ Lewrypublished, Fraser (1 August 2018). "Meet the boffin behind a computer programming language based on power ballads". loudersound.
- ^ Doctorow, Cory (25 July 2018). "Rockstar: a programming language whose code takes the form of power ballads". Boing Boing.
- ^ Cox 2013, 페이지 5
- ^ Temkin, Daniel (15 January 2014). "Glitch && Human/Computer Interaction". NOOART: The Journal of Objectless Art (1).
- ^ Temkin, Daniel. "brainfuck". Media-N Journal (Spring 2013). Retrieved 6 May 2014.
참고 문헌
- Paloque-Bergès, Camille (2009). "Langages ésotériques". Poétique des codes sur le réseau informatique. Archives contemporaines. ISBN 978-2-914610-70-4.
- Cox, Geoff (2013). Speaking Code: Coding as Aesthetic and Political Expression. MIT Press. ISBN 978-0-262-01836-4.
외부 링크
