맬볼지

Malbolge
맬볼지
말벌게의 고양이 프로그램
패러다임난해한, 명령형, 스칼라, 가치 수준
설계자 :벤 옴스테드[1]
디벨로퍼벤 옴스테드[1]
첫 등장1998
타이핑규율미입력
파일 확장명.mal, .mb
영향을 받음
브레인퍽, 인터칼(Tri-INTERCAL), 비펑스
영향받은
디스, 말볼지 언패킹

말볼게(Malbolge)는 1998년 벤 올름스테드(Ben Olmstead)가 개발한 공용 영역 난해한 프로그래밍 언어로, 단테인페르노에서 지옥의 여덟 번째 원인 말볼게에서 이름을 따왔습니다.그것은 반직관적인 '크레이지 연산', 베이스-쓰리 산술, 그리고 자체 수정 코드를 통해, 사용이 거의 불가능하도록 특별히 설계되었습니다.[2]그것은 초기의 난해한 언어(예: 브레인퍽이나 비펑스)의 어려움을 기반으로 하지만, 컴퓨터 과학암호화의 얽힌 역사를 이용하여 이 측면을 극단적으로 과장합니다.이러한 설계에도 불구하고 유용한 말볼지 프로그램을 작성할 수 있습니다.

말벌게의 프로그래밍

말볼지는 도착했을 때 이해하기가 매우 어려웠습니다.최초의 말벌지 프로그램이 등장하기까지 2년이 걸렸습니다.작가 자신은 말벌지 프로그램을 쓴 적이 없습니다.[2]최초의 프로그램은 사람이 작성한 것이 아니라 앤드류 쿡이 설계한 빔 검색 알고리즘에 의해 생성되었으며 리스프에서 구현되었습니다.[3]

나중에 루 쉐퍼는 말볼지의 암호 분석을 게시하고 입력을 출력에 복사하는 프로그램을 제공했습니다.[4]그는 또한 원래 사이트가 작동을 멈춘 후 원래의 통역사와 사양을 저장하고, 말벌게에서 프로그램을 작성하는 일반적인 전략과 튜링의 완성도에 대한 몇 가지 생각을 제시했습니다.[5]

Olmstead는 Malbolge가 선형 경계 자동화라고 믿었습니다.Malbolge에서 합리적인 루프를 구현할 수 있는지에 대한 논의가 있습니다. 최초의 비종단 루프가 도입되기까지 여러 해가 걸렸습니다.단순하지 않은 루프와 조건을 다루는 정확한 99병 맥주 프로그램은 7년 동안 발표되지 않았습니다. 첫 번째 정확한 프로그램은 2005년 이자와 히사시에 의해 발표되었습니다.[6]Hisashi Iizawa et al. 는 또한 소프트웨어 보호를 위한 난독화를 목적으로 말벌게에서 프로그래밍을 위한 가이드를 제안했습니다.[7]

2020년, GitHub 사용자 kspalaiologos는 말볼지 언체일드에서 작동하는 리스프 인터프리터를 만들었습니다.[8]

예제 프로그램

안녕, 세상아!

이 프로그램에는 "Hello, World"가 표시됩니다.[9]

(=<'#9]~6ZY327Uv4-QsqpMn&+Ij'E%e{Ab~w=_:]Kw%o44Uqp0/Q?xNvL:'H%c#DD2^WV>gY;dts76qKJimZkj

cat프로그램.

이 프로그램은 유닉스 명령줄 유틸리티와 유사하게 사용자로부터 문자열을 읽고 해당 문자열을 인쇄합니다.cat.[10]

(=BA#9"=<;:3y7x54-21q/p-,+*")!h%B0/.~P<:(8&66#")!~} {zyxwvugJ%

설계.

Malbolge는 3원 가상 머신인 Malbolge 인터프리터를 위한 기계어입니다.

표준 통역사와 공식 사양이 완벽하게 일치하지 않습니다.[11]한 가지 차이점은 컴파일러가 33-126 범위 밖의 데이터로 실행을 중지한다는 것입니다.처음에는 컴파일러에서 버그로 간주되었지만 벤 옴스테드는 이를 의도한 것이며 실제로는 "스펙에 버그"가 있다고 말했습니다.[2]

레지스터

Malbolge에는 a, c, d의 3개의 레지스터가 있습니다.프로그램이 시작되면 레지스터 세 개의 값이 모두 0이 됩니다.

a는 'accumulator'의 약자로, 메모리의 모든 쓰기 작업에 의해 쓰여진 값으로 설정되며 표준 I/O에 사용되는 코드 포인터인 c는 특별합니다. c는 현재 명령어가리키며 d는 데이터 포인터입니다.[12]각 명령 후에 자동으로 증가하지만, 지시하는 위치가 데이터 조작 명령에 사용됩니다.

포인터 표기

d는 메모리 주소를 보유할 수 있습니다. [d]레지스터 간접입니다. 해당 주소에 저장된 값입니다.[c]비슷합니다.

기억

가상 시스템에는 각각 10자리 숫자를 유지할 수 있는 59,049개(3개10)의 메모리 위치가 있습니다.각 메모리 위치에는 0 ~ 59048의 주소가 있으며 0 ~ 59048의 값을 유지할 수 있습니다.이 제한을 초과하면 다시 0으로 돌아갑니다.

이 언어는 데이터와 명령 모두에 동일한 메모리 공간을 사용합니다.이것은 x86 아키텍처와 같은 하드웨어의 작동 방식에 영향을 받았습니다.[2]

Malbolge 프로그램이 시작되기 전에 메모리의 첫 부분이 프로그램으로 채워집니다.프로그램의 모든 빈 공간은 무시되며 프로그래밍을 더 어렵게 하려면 프로그램의 다른 모든 것은 아래 지침 중 하나로 시작해야 합니다.

나머지 메모리는 이전 두 주소([m] = crz [m - 2], [m - 1])에서 크레이지 연산(아래 참조)을 사용하여 채웁니다.이렇게 채워진 메모리는 12개의 주소마다 반복됩니다(개별 3진 숫자는 3~4개의 주소마다 반복되므로 3진 숫자 그룹은 12개마다 반복됩니다).

2007년, 외르잔 요한센은 임의의 메모리 제한이 없는 말볼게의 버전인 말볼게 Unshackled를 만들었습니다.희망은 가능한 한 말볼게의 정신을 지키면서 튜링을 완성하는 언어를 만드는 것이었습니다.다른 규칙은 변경되지 않으며 메모리 한계에 도달하지 않은 모든 Malbolge 프로그램은 완전히 작동합니다.[13]

지침들

말볼지는 8가지 지시사항이 있습니다.Malbolge는 [c] 값을 취하고 c의 값을 더하고 이것을 94로 나누었을 때 나머지를 가져감으로써 실행할 명령을 결정합니다.최종 결과는 인터프리터에게 다음과 같은 작업을 지시합니다.

지침들
의 가치
([c] + c) % 94
설명
대표의
설명.
4 jmp[d] [d]에서 c로 을 복사합니다.이 명령을 실행한 후에도 c는 계속 증가하므로 실행할 다음 명령은 [d] + 1(modulo 59049)에 있는 명령입니다.
5 을 제외하고 ASCII 문자인 a 값을 화면에 인쇄합니다.
23 일순간에 문자를 ASCII 코드로 a에 입력합니다.새 라인 또는 라인 피드는 모두 코드 10입니다.파일 종료 조건은 코드 59048입니다.
39 로트[드]
mova, [d]
[d]에서 값을 오른쪽으로 세제곱 자리만큼 회전합니다(000211112는 200021111이 됩니다).결과를 [d]a에 모두 저장합니다.
40 이동, [d] [d]에서 d로 값을 복사합니다.
62 crz [d], a
mova, [d]
[d]의 값과 a의 값으로 crazy operation(아래 참조)을 수행합니다.결과를 [d]a에 모두 저장합니다.
68 아녜요 아무 것도 안 돼요.
81 끝. 말벌지 프로그램을 종료합니다.
기타 값 68: nothing과 동일하게 수행합니다.이러한 다른 값은 프로그램이 로드되는 동안에는 허용되지 않지만 그 이후에는 허용됩니다.

각 명령이 실행된 후에는 점프가 발생하지 않는 한 다음에 동일한 작업을 수행하지 않도록 암호화됩니다(아래 참조).점프 직후 말볼지는 명령어를 대신 점프하기 직전에 암호화합니다.그런 다음 c와 d의 값이 모두 1씩 증가하고 다음 명령을 실행합니다.

크레이지 오퍼레이션

두 입력의 각 3진 숫자에 대해 다음 표를 사용하여 결과의 3진 숫자를 구합니다.예를 들어 crz 0001112220, 0120120120은 1001022211을 제공합니다.

크레이지 오퍼레이션[2][7]
crz 입력2
0 1 2
입력1 0 1 0 0
1 1 0 2
2 2 2 1

암호화

명령이 실행된 후 [c]의 값이 (추가된 것 없이) 자체 mod 94로 바뀝니다.그런 다음 결과는 다음 두 가지 동등한 방법 중 하나로 암호화됩니다.

방법1
아래에서 결과를 찾으십시오.그 아래에 있는 문자의 ASCII 코드를 [c]에 저장합니다.
 000000111111222222223333333333344444444445555556666666667777777788888889901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------TVac'uY*MK'X~xDl}REOKN:#?G"i@5z]&gqtyfr$(we4{WP)H-Zn,[%\3dL+Q;>U!pJS72FhOA1CB6v^=I_0/8jsb
방법2
아래에서 결과를 찾으십시오.[c]에 암호화된 버전을 저장합니다.
암호화 테이블
결과 암호화된 결과 암호화된 결과 암호화된 결과 암호화된 결과 암호화된
0 57 19 108 38 113 57 91 76 79
1 109 20 125 39 116 58 37 77 65
2 60 21 82 40 121 59 92 78 49
3 46 22 69 41 102 60 51 79 67
4 84 23 111 42 114 61 100 80 66
5 86 24 107 43 36 62 76 81 54
6 97 25 78 44 40 63 43 82 118
7 99 26 58 45 119 64 81 83 94
8 96 27 35 46 101 65 59 84 61
9 117 28 63 47 52 66 62 85 73
10 89 29 71 48 123 67 85 86 95
11 42 30 34 49 87 68 33 87 48
12 77 31 105 50 80 69 112 88 47
13 75 32 64 51 41 70 74 89 56
14 39 33 53 52 72 71 83 90 124
15 88 34 122 53 45 72 55 91 106
16 126 35 93 54 90 73 50 92 115
17 120 36 38 55 110 74 70 93 98
18 68 37 103 56 44 75 104

Lou Scheffer의 Malbolge 암호 분석은 순열에서 6개의 다른 순환을 언급합니다.여기에 나열되어 있습니다.

  • 33 ⇒ 53 ⇒ 45 ⇒ 119 ⇒ 78 ⇒ 49 ⇒ 87 ⇒ 48 ⇒ 123 ⇒ 71 ⇒ 83 ⇒ 94 ⇒ 57 ⇒ 91 ⇒ 106 ⇒ 77 ⇒ 65 ⇒ 59 ⇒ 92 ⇒ 115 ⇒ 82 ⇒ 118 ⇒ 107 ⇒ 75 ⇒ 104 ⇒ 89 ⇒ 56 ⇒ 44 ⇒ 40 ⇒ 121 ⇒ 35 ⇒ 93 ⇒ 98 ⇒ 84 ⇒ 61 ⇒ 100 ⇒ 97 ⇒ 46 ⇒ 101 ⇒ 99 ⇒ 86 ⇒ 95 ⇒ 109 ⇒ 88 ⇒ 47 ⇒ 52 ⇒ 72 ⇒ 55 ⇒ 110 ⇒ 126 ⇒ 64 ⇒ 81 ⇒ 54 ⇒ 90 ⇒ 124 ⇒ 34 ⇒ 122 ⇒ 63 ⇒ 43 ⇒ 36 ⇒ 38 ⇒ 113 ⇒ 108 ⇒ 39 ⇒ 116 ⇒ 69 ⇒ 112 ⇒ 68 ⇒ 33 ...
  • 37 ⇒ 103 ⇒ 117 ⇒ 111 ⇒ 120 ⇒ 58 ⇒ 37 ...
  • 41 ⇒ 102 ⇒ 96 ⇒ 60 ⇒ 51 ⇒ 41 ...
  • 42 ⇒ 114 ⇒ 125 ⇒ 105 ⇒ 42 ...
  • 50 ⇒ 80 ⇒ 66 ⇒ 62 ⇒ 76 ⇒ 79 ⇒ 67 ⇒ 85 ⇒ 73 ⇒ 50 ...
  • 70 ⇒ 74 ⇒ 70 ...

이러한 사이클은 매번 다른 작업을 수행하고 결국 반복되는 루프를 만드는 데 사용될 수 있습니다.Lou Scheffer는 이 아이디어를 사용하여 사용자가 입력하는 모든 것을 반복하는 Malbolge 프로그램(아래 링크된 그의 암호 분석에 포함됨)을 만들었습니다.

변형

말볼지는 메모리 한계 때문에 튜링이 완전하지 않습니다.그러나 그렇지 않으면 순차적 실행, 반복 및 조건부 실행이 있습니다.튜링-완전 버전의 말볼게를 만들기 위한 몇 가지 시도가 있었습니다.

  • 말볼지20은 말볼지의 확장된 워드 사이즈가 20트릿인 버전으로, 최대 3.4기가바이트의 크기로 프로그램을 작성할 수 있습니다.[14]
  • Malbolge-T는 Malbolge의 이론적 버전으로, 끝에 도달하면 입출력 스트림을 재설정하여 무제한 프로그램을 허용합니다.Malbolge-T는 Malbolge와 하위 호환성이 있습니다.[4]
  • Malbolge Unshackled는 튜링-완전 변형으로, 어떤 길이의 프로그램도 가능합니다.그러나 257 이상의 값을 허용하기 위한 명령 변형으로 인해 유효한 Malbolge 프로그램이 Malbolge Unshackled에서 반드시 올바르게 실행되지는 않습니다.[15]

대중문화

TV 시리즈 "The Leviathan"(시즌 1, 10화)에서 커피 주문서에 적힌 단서가 말볼게로 쓰여진 것으로 묘사됩니다.위에 나와 있는 좀 더 상세한 "Hello World" 예제를 약간 수정한 것으로 보입니다.[2][16]

드라마 종합병원에서는 KFC샌더스 대령이 게스트로 출연하는데, 이는 11가지 허브와 향신료의 비밀 레시피를 얻기 위해 누군가가 그를 죽이려 하기 때문입니다.그는 말볼지를 알고 파괴 서열을 무장해제 시킬 수 있습니다.[17][18]

레버리지에서: 리뎀션 에피소드 "The Golf Job" (시즌 1, 12화), SMS 자동 응답에는 "Breanna는 목요일부터 일요일까지 또는 Malbolge 코드를 마스터할 때까지 사용할 수 없습니다."

"The Limitless Shit"(시즌 5, 에피소드 7)에서 액스 캐피털의 프로그래머 분석가는 그가 "...맬볼지와 장난치곤 했습니다."

참고 항목

참고문헌

  1. ^ a b "Malbolge - Esolang". Retrieved 2022-08-27.
  2. ^ a b c d e f Temkin, Daniel (2014-11-03). "Interview with Ben Olmstead". esoteric.codes. Retrieved 2021-01-07.
  3. ^ Cooke, Andrew. "malbolge: hello world". Archived from the original on 2019-12-06. Retrieved 2021-01-08.
  4. ^ a b Scheffer, Lou (2015-04-17). "Introduction to Malbolge". Retrieved 2017-06-09.
  5. ^ Mykhailova, Mariya (2012-05-11). "Malbolge - Programming language". Progopedia. Retrieved 2017-06-09.
  6. ^ "Language Malbolge". 99 Bottles of Beer. 2005-12-29. Archived from the original on 2020-05-14. Retrieved 2020-11-19.
  7. ^ a b IIZAWA, Hisashi. "Programming Method in Obfuscated Language Malbolge" (PDF) (in Japanese). Nagoya University. Retrieved 2017-06-09.
  8. ^ Palaiologos (2021-03-04), kspalaiologos/malbolge-lisp, retrieved 2021-03-23
  9. ^ Palaiologos (2021-03-04), kspalaiologos/hello.mb, retrieved 2021-03-23
  10. ^ Lutter, Matthias. "Malbolge cat". lutter.cc. Retrieved 2022-08-28.
  11. ^ Green, Austin (2000-12-01). "Malbolge". Louisiana Tech University. Retrieved 2017-06-09.
  12. ^ Olmstead, Ben (1998). "Malbolge Specification". www.lscheffer.com. Retrieved 2017-06-09.
  13. ^ Johansen, Ørjan (2013-10-25). "An interpreter for the Malbolge Unshackled dialect" (Haskell). oerjan.nvg.org. Retrieved 2017-06-09.
  14. ^ "Malbolge20 - Esolang". esolangs.org. Retrieved 2022-12-12.
  15. ^ "Malbolge Unshackled". esolangs.org. 2017-04-14. Retrieved 2017-06-09.
  16. ^ "Leviathan". Elementary. Season 1. Episode 10. Manhattan. 2012-12-14. CBS.
  17. ^ General Hospital. Season 56. Episode 68. 2018-07-06. ABC.
  18. ^ "General Hospital Official Twitter Account". Twitter. Retrieved 2021-07-06.

외부 링크