문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 Malbolge (문서 편집) [[분류:난해한 프로그래밍 언어]] [목차] == 개요 == 벤 올름스테드(Ben Olemstead)가 1998년에 만든 [[난해한 프로그래밍 언어]]. 이름은 [[단테 알리기에리|단테]]의 [[신곡]] [[신곡/지옥편|지옥편]]에 나오는 [[지옥]] 중 제8옥인 말레볼제(Malebolge)에서 왔다. 이름부터가 개념인 이 언어의 가장 큰 특징은, 현존하는 모든 언어중 가장 '''난해한 [[프로그래밍 언어]]'''라는 것이다. 실제로 벤 올름스테드는 Malbolge외에도 Gis라는 난해한 프로그래밍 언어를 만들거나, Esoteric Awards이라는 난해한 프로그래밍 언어 대회 따위를 만들거나 했다. 기본적으로 정말 더럽고 어렵고 복잡해서 첫 Malbolge 프로그램이 만들어지기까지 장장 2년이라는 세월이 걸렸다. 그것도 사람의 손으로 쓰인 것이 아니라, LISP로 구현된 빔 탐색 알고리즘을 통해서 만들어진 것.[[http://acooke.org/malbolge.html|#]] 그 후에도 프로그램이 매우 간간이 제작되었는데, 예를 들자면 Malbolge를 통한 민감한 루프는 Malbolge가 나온 지 7년만에 구현되었다. 사실 이것도 처음에는 구현이 가능한지 논란이 있었다. == 상세 == Malbolge는 3진법 가상 머신인 Malbolge 인터프리터의 [[기계어]]다. a, c, d의 세 레지스터를 사용하는데, 그 중 c 레지스터는 현재 실행되는 명령을 가리키는 특수한 용도로 사용된다. 기본적으로 메모리는 3진수 숫자로 저장되며, 메모리 공간은 3^^10^^개인 59049개다. 이 각각의 공간에는 0부터 59048까지의 주소가 붙어 있고, 0부터 59048까지의 값을 저장할 수 있다.[* 여담으로 언어 자체적으로 정의된 이 메모리 용량의 한계때문에 이 언어는 [[튜링 완전]]하지 않다고 한다.] 이 Malbolge 프로그램이 시작되기 전에, 메모리의 앞부분이 프로그램으로 채워진다. 프로그램에 들어 있는 모든 공백문자는 사라지고, 더욱 더 사용자들을 엿먹이기 위해 공백 문자를 제외한 프로그램은 특정한 명령 중 하나로 시작되어야 한다. 나머지 메모리 공간은 Crazy 연산이라는, 이름부터 간지가 넘치는 연산으로 계산한 값으로 채워진다. 이 Crazy 연산의 식은 {{{[m]=crz[m-2], [m-1]}}}으로 나타내어지는데, 두 숫자의 각각의 3진법 자리마다 다음의 표를 적용해서 결과를 얻는다. 예를 들자면 crz 0001112220, 0120120120의 결과는 1001022211이 되는 식. 한번 계산해보자. ||||<|2><#FFAAFF> '''crz''' ||||||||<#FFAAFF> '''Input 2''' || ||<#FFAAFF> '''0''' ||<#FFAAFF> '''1''' ||<#FFAAFF> '''2''' || ||<|3><#FFAAFF> '''input 1''' ||<#FFAAFF> '''0''' || 1 || 0 || 0 || ||<#FFAAFF> '''1''' || 1 || 0 || 2 || ||<#FFAAFF> '''2''' || 2 || 2 || 1 || 명령도 골때리는데, Malbolge에 존재하는 여덟 개의 명령은 {{{[c]}}}값에 c를 더하고, 그 값을 94로 나눈 나머지에 따라 어떤 명령을 실행할지 결정한다. 이때 c는 레지스터 값의 메모리 주소, {{{[c]}}}는 그 주소에 저장된 값이다. 여덟 개의 명령에 속하지 않는 모든 값은 그냥 아무것도 하지 않는다. 명령이 실행된 후에, 해당 명령은 또 '''암호화'''가 되어서, 이동 명령이 실행되지 않으면 다음에 실행됐을 때 같은 역할을 하지 않는다! 이동 명령이 실행되면 이동된 위치 바로 앞에 있는 명령이 암호화된다. 암호화 과정도 황당한데, 일단 {{{[c]}}}의 값이 94보다 작을 때까지 94를 빼고, 특수한 표에서 결과값을 찾은 후 그 값을 {{{[c]}}}에 저장하는 방식. 그런 다음에는 c와 d의 값이 1씩 증가하고 다음 명령이 실행된다. == 이 언어로 쓰인 프로그램 == === 실행기 === Malbolge 코드를 실행하기 위한 [[인터프리터]]는 다음 주소에서 구할 수 있다: [[http://www.lscheffer.com/malbolge_interp.html|인터프리터]] 벤 올름스테드가 [[C언어]]로 구현한 버전이다. [[https://github.com/Avantgarde95/pyMalbolge|이곳]]에서 [[Python|파이썬]]으로 작성된 버전도 실행해 볼 수 있다. === 예제 === 다음은 Malbolge의 [[Hello, world!]] 프로그램이다. {{{Hello, world.}}}를 출력하는 버전. {{{ (=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk** hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O< }}} {{{HEllO WORld}}}를 출력하는 버전. {{{ (=<`$9]7<5YXz7wT.3,+O/o'K%$H"'~D|#z@b=`{^Lx8%$Xmrkpohm-kNi;gsedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543s+O저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기