맨위로가기

브레인퍽

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

브레인퍽은 1993년 Urban Müller가 설계한 최소한의 튜링 완전 프로그래밍 언어이다. 8개의 명령어(>, <, +, -, ., ,, [, ])로 구성되며, 간단한 머신 모델(0으로 초기화된 바이트 배열, 데이터 포인터, 입출력 스트림)을 기반으로 한다. 브레인퍽은 난해한 특성으로 인해 이해하기 어렵지만, 튜링 완전성을 갖춰 이론적으로 모든 계산 가능한 함수를 계산할 수 있다. 헬로 월드 프로그램과 ROT13 암호화 예제가 존재하며, Ook!과 같은 파생 언어들도 존재한다. 최근에는 구글 연구 프로젝트에서 인공 디지털 환경의 기반으로 사용되기도 했다.

더 읽어볼만한 페이지

  • 영어 기반이 아닌 프로그래밍 언어 - 두리틀 (프로그래밍 언어)
    두리틀은 다국어 지원, 터틀 그래픽스 기반 직관적인 프로그래밍, 충돌 감지, 음악 지원, 프로토타입 기반 객체 지향 특징을 갖춘, 레고 조립 방식의 쉬운 프로그래밍 언어로서 다양한 운영체제와 웹 브라우저를 지원한다.
  • 영어 기반이 아닌 프로그래밍 언어 - 말레볼제
    말레볼제는 극도로 난해한 프로그래밍 언어로서 복잡한 문법과 자기 수정 특성을 가지며, 삼진법 가상 머신 기반으로 8개의 명령어와 세 개의 레지스터를 사용하고 59,049개의 메모리 공간을 가지지만 튜링 불완전성을 극복하기 위한 변종들이 개발되고 있으며, 프로그램 난독화나 암호 시스템 연구 등에 활용되나 극심한 난해함으로 인해 실용성은 낮다는 비판을 받지만, 컴퓨터 과학 분야에서 언어 설계의 극단적인 예시를 제시하며 프로그래밍 언어의 복잡성에 대한 이해를 높이는 데 기여한다.
  • 1993년 개발된 프로그래밍 언어 - 루아 (프로그래밍 언어)
    루아는 C 언어와의 통합이 용이하고 작고 가벼운 확장 가능한 스크립트 언어로, 테이블 기반의 자료 구조를 통해 다양한 프로그래밍 패러다임을 지원하며 여러 분야에서 활용된다.
  • 1993년 개발된 프로그래밍 언어 - 비주얼 베이직 포 애플리케이션
    비주얼 베이직 포 애플리케이션(VBA)은 마이크로소프트 오피스 제품군 등에서 매크로 생성 및 자동화 작업을 위해 사용되는 프로그래밍 언어로서, 여러 응용 프로그램에서 자동화 솔루션 구축, 오피스 프로그램 기능 확장, 사용자 정의 함수 제작, 다른 응용 프로그램과의 통합 등에 활용되며 보안 문제도 포함한다.
  • 난해한 프로그래밍 언어 - HQ9+
    HQ9+는 간단한 인터프리터 구현이 가능한 난해한 프로그래밍 언어로, 'Hello, world!' 출력, 소스 코드 출력, "99 Bottles of Beer" 가사 출력, 누산기 값 증가의 네 가지 명령을 제공한다.
  • 난해한 프로그래밍 언어 - FRACTRAN
    FRACTRAN은 정수의 소인수 지수를 레지스터로 활용하여 분수 목록을 곱하는 과정을 반복하며 다양한 계산을 수행하는 계산 모델이다.
브레인퍽 - [IT 관련 정보]에 관한 문서
개요
이름Brainfuck (브레인퍽)
파일 확장자.b, .bf
프로그래밍 패러다임난해한, 명령형, 구조적
발표 시기1993년 9월
설계자Urban Müller (우어반 뮐러)
자료형자료형 없음
영향을 받은 언어P′′, FALSE
영향을 준 언어Malbolge, Ook!, Pxem

2. 역사

브레인퍽은 개발자 어번 뮐러(Urban Müller)가 컴파일러가 최대한 작아지도록 설계한 언어이다.[7][8] 뮐러는 가능한 가장 작은 컴파일러를 구현하는 것을 목표로 FALSE 프로그래밍 언어용 1024-바이트 컴파일러에서 영감을 받았다.[7][8] 뮐러가 개발한 초기 컴파일러는 어셈블리어로 구현되었으며 296바이트 크기의 바이너리 파일로 컴파일되었다. 그는 1993년에 최초의 브레인퍽 컴파일러를 아미넷에 업로드했다.[9] 이 프로그램은 언어를 간략하게 설명하고 독자에게 "누가 이걸로 유용한 걸 프로그래밍할 수 있을까요? :)"라는 도전을 하는 "Readme" 파일과 함께 제공되었다. 뮐러는 또한 인터프리터와 몇 가지 예제를 포함시켰다. 두 번째 버전의 컴파일러는 240바이트만 사용했다.[9] 이후 컴파일러 크기는 123바이트, 인터프리터는 98바이트까지 작아졌다.

Brainfuck 프로그램은 가독성과 기술성이 매우 낮아 실용성은 기대하기 어렵지만, 튜링 완전하다. 그 간결함으로 인해 많은 파생 언어를 낳았다.

3. 언어 설계

브레인퍽은 1993년 스위스의 물리학과 학생이었던 어번 뮐러(Urban Müller)가 개발한 난해한 프로그래밍 언어이다.[7][8] 뮐러의 목표는 가능한 가장 작은 컴파일러로 구현할 수 있으면서도 튜링 완전한 프로그래밍 언어를 만드는 것이었다. 그는 컴파일러 크기가 1024바이트였던 False라는 다른 난해한 프로그래밍 언어에서 영감을 받았다.

뮐러가 아미가 컴퓨터용으로 개발한 초기 컴파일러는 어셈블리어로 작성되었으며, 크기가 296바이트에 불과했다. 그는 1993년에 이 컴파일러를 아미넷에 공개했는데, 여기에는 언어에 대한 간략한 설명과 함께 "누가 이걸로 유용한 걸 프로그래밍할 수 있을까요? :)"라는 질문을 던지는 "Readme" 파일이 포함되어 있었다. 이후 컴파일러는 240바이트까지 크기가 줄어들었다.[9]

이름처럼 브레인퍽 프로그램은 대체로 이해하기 어렵다. 이는 약간만 복잡한 작업을 하려 해도 매우 긴 명령어 나열이 필요하고, 프로그램 텍스트만으로는 프로그램의 상태를 직관적으로 파악하기 어렵기 때문이다. 이러한 난해함, 비효율성, 그리고 제한된 입출력 기능 때문에 브레인퍽은 실제 프로그래밍 환경에서는 거의 사용되지 않는다.[10]

하지만 브레인퍽은 튜링 기계와 마찬가지로 튜링 완전하기 때문에, 이론적으로는 충분한 메모리와 시간이 주어진다면 컴퓨터가 수행할 수 있는 모든 종류의 계산 작업을 처리할 수 있다.[10] 실제로 다양한 브레인퍽 프로그램이 작성되기도 했다.[11] 브레인퍽 자체로 프로그램을 작성하는 것은 어렵지만, 언어 자체가 매우 단순하기 때문에 C와 같은 다른 언어로 브레인퍽 인터프리터를 만드는 것은 상대적으로 쉽다. 심지어 브레인퍽 언어로 작성된 브레인퍽 인터프리터도 존재한다.[12][13]

이 언어는 8개의 단일 문자 명령어와, 0으로 초기화된 바이트 배열, 배열의 특정 위치를 가리키는 데이터 포인터, 그리고 입력출력을 위한 두 개의 바이트 스트림으로 구성된 매우 간단한 기계 모델을 기반으로 한다.

3. 1. 명령어

브레인퍽 언어는 여덟 개의 명령어로 구성되며, 각 명령어는 한 개의 문자로 이루어져 있다. 브레인퍽 프로그램은 이러한 명령어들의 나열이며, 다른 문자들은 주석으로 취급되어 무시된다. 명령어는 기본적으로 순서대로 실행되지만, 제어 흐름 명령어([])에 의해 실행 순서가 변경될 수 있다. 프로그램 실행은 명령어 포인터가 첫 번째 명령어를 가리키면서 시작되고, 마지막 명령어를 지나가면 종료된다.

브레인퍽은 간단한 기계 모델을 사용한다. 이 모델은 프로그램 코드, 명령어 포인터, 0으로 초기화된 최소 30,000개의 바이트 셀로 이루어진 1차원 배열, 배열의 셀을 가리키는 데이터 포인터 (초기에는 가장 왼쪽 셀을 가리킴), 그리고 입력과 출력을 위한 두 개의 바이트 스트림으로 구성된다. 입출력 스트림은 주로 키보드모니터에 연결되며, ASCII 문자 인코딩을 사용한다.

여덟 개의 명령어는 다음과 같다.

문자수행되는 명령어
>데이터 포인터를 1 증가시킨다 (오른쪽의 다음 셀을 가리키도록).
<데이터 포인터를 1 감소시킨다 (왼쪽의 다음 셀을 가리키도록).
+데이터 포인터가 가리키는 바이트의 값을 1 증가시킨다.
-데이터 포인터가 가리키는 바이트의 값을 1 감소시킨다.
.데이터 포인터가 가리키는 바이트의 값을 ASCII 문자로 출력한다.
,입력 스트림에서 한 바이트를 읽어 데이터 포인터가 가리키는 바이트에 저장한다.
[데이터 포인터가 가리키는 바이트의 값이 0이면, 다음 명령어로 명령어 포인터를 이동시키는 대신, 짝이 되는 ] 명령어의 다음 명령어로 점프한다.
]데이터 포인터가 가리키는 바이트의 값이 0이 아니면, 다음 명령어로 명령어 포인터를 이동시키는 대신, 짝이 되는 [ 명령어의 다음 명령어로 점프한다.



[] 명령어는 서로 짝을 이루어 반복문이나 조건문과 유사한 구조를 만든다. 모든 [는 정확히 하나의 ]와 짝을 이루며, 그 반대도 마찬가지이다. [가 항상 ]보다 먼저 나타나야 하며, 두 괄호 사이에는 짝이 맞지 않는 다른 []가 존재할 수 없다.

브레인퍽 프로그램은 ptrunsigned char* 형이라고 가정할 때 다음과 같은 변환 규칙을 사용하여 C 언어로 번역할 수 있다.

브레인퍽 명령어C 언어 코드
>++ptr;
<--ptr;
+++*ptr;
---*ptr;
.putchar(*ptr);
,*ptr = getchar();
[while (*ptr) {
]}


4. 해설

브레인퍽 언어는 프로그램과 명령어 포인터, 0으로 초기화된 최소 30,000개의 바이트 셀로 이루어진 1차원 배열, 이동 가능한 데이터 포인터 (배열의 가장 왼쪽 바이트를 가리키도록 초기화됨), 그리고 입력과 출력을 위한 두 개의 바이트 스트림 (일반적으로 키보드와 모니터에 각각 연결되며, ASCII 문자 인코딩을 사용)으로 구성된 간단한 추상 기계 모델을 사용한다.

브레인퍽 프로그램은 8개의 단일 문자 명령어 시퀀스로 이루어지며, 그 외의 문자들은 주석으로 간주되어 무시된다. 명령어는 순차적으로 실행되지만, 특정 명령어([, ])에 의해 실행 흐름이 변경될 수 있다. 명령어 포인터는 프로그램의 첫 번째 명령어를 가리키며 시작하고, 각 명령어가 실행된 후 다음 명령어로 이동한다. 프로그램은 명령어 포인터가 마지막 명령어를 지나가면 종료된다.

8개의 언어 명령어는 다음과 같다.

문자수행되는 명령어
>데이터 포인터를 1 증가시킨다 (오른쪽 다음 셀을 가리킴). C 언어의 "ptr++;"에 해당한다.
<데이터 포인터를 1 감소시킨다 (왼쪽 다음 셀을 가리킴). C 언어의 "ptr--;"에 해당한다.
+데이터 포인터가 가리키는 바이트를 1 증가시킨다. C 언어의 "(*ptr)++;"에 해당한다.
-데이터 포인터가 가리키는 바이트를 1 감소시킨다. C 언어의 "(*ptr)--;"에 해당한다.
.데이터 포인터가 가리키는 바이트 값을 ASCII 문자로 출력한다. C 언어의 "putchar(*ptr);"에 해당한다.
,입력 스트림에서 한 바이트를 읽어 데이터 포인터가 가리키는 바이트에 저장한다. C 언어의 "*ptr=getchar();"에 해당한다.
[데이터 포인터가 가리키는 바이트 값이 0이면, 명령어 포인터를 짝이 되는 ] 명령어 다음으로 점프시킨다. 0이 아니면 다음 명령어로 진행한다. C 언어의 "while(*ptr){"에 해당한다.
]데이터 포인터가 가리키는 바이트 값이 0이 아니면, 명령어 포인터를 짝이 되는 [ 명령어 다음으로 점프시킨다. 0이면 다음 명령어로 진행한다. C 언어의 "}"에 해당한다.



[] 명령어는 서로 짝을 이루어 반복문이나 조건문처럼 사용된다. 각 [는 정확히 하나의 ]와 짝을 이루며, 그 반대도 마찬가지이다. [가 항상 ]보다 먼저 나오며, 두 괄호 사이에는 다른 짝이 맞지 않는 괄호가 올 수 없다.

배열의 각 원소를 바이트(0~255)로 가정하면, - 명령어는 255개의 + 명령어로 대체될 수 있다. 비슷하게, 배열 크기가 유한하고 양 끝이 연결된 환형 구조라면, < 명령어는 (배열 크기 - 1)개의 > 명령어로 대체될 수 있다. 하지만 브레인퍽이 튜링 완전하려면 이론적으로 배열의 크기와 각 셀에 저장될 수 있는 값의 크기에 제한이 없어야 한다. 이는 유한한 메모리를 가진 실제 컴퓨터가 엄밀한 의미에서 튜링 완전하지 않은 것과 같은 이유이다.

브레인퍽 프로그램은 매우 이해하기 어렵다. 간단한 작업을 수행하는 데도 긴 명령어 나열이 필요하며, 프로그램 코드만 보고는 현재 프로그램의 상태를 파악하기 어렵기 때문이다. 이러한 난해함, 비효율성, 제한적인 입출력 기능 때문에 실제 프로그래밍에는 거의 사용되지 않는다. 그럼에도 불구하고, 브레인퍽은 튜링 완전한 언어이므로, 충분한 메모리와 시간이 주어진다면 이론적으로 어떤 계산 가능한 문제든 해결할 수 있고 다른 계산 모델을 흉내 낼 수도 있다.[10] 실제로 다양한 브레인퍽 프로그램이 작성되었다.[11] 브레인퍽으로 복잡한 프로그램을 작성하는 것은 어렵지만, 언어 자체는 매우 단순하기 때문에 C 언어와 같은 다른 언어로 브레인퍽 인터프리터를 만드는 것은 상대적으로 쉽다. 심지어 브레인퍽 언어 자체로 작성된 브레인퍽 인터프리터도 존재한다.[12][13]

5. 예제

가장 간단한 예시로, 다음 코드는 현재 셀의 값을 다음 셀로 옮기는(더하는) 동작을 수행한다. 루프가 실행될 때마다 현재 셀의 값은 1 감소하고, 데이터 포인터는 오른쪽으로 이동하여 다음 셀의 값을 1 증가시킨 뒤, 다시 데이터 포인터를 왼쪽으로 이동시킨다. 이 과정은 시작 셀의 값이 0이 될 때까지 반복된다.



[->+<]



이 코드를 활용하여 간단한 덧셈 프로그램을 만들 수 있다. 예를 들어, 2와 5를 더하는 과정은 다음과 같다.



++ 셀 c0 = 2 로 초기화

> +++++ 셀 c1 = 5 로 초기화

[ c1을 루프 카운터로 사용하여 루프 시작

< + c0에 1을 더함

> - c1에서 1을 뺌

] c1이 0이 되면 루프 종료



이 프로그램이 실행되면 셀 c0에는 7(2 + 5)이 저장되고, 셀 c1에는 0이 남게 된다.

하지만 이 상태로는 터미널에 숫자 7을 직접 출력할 수 없다. 컴퓨터는 문자를 ASCII 코드로 인식하기 때문에, 숫자 7을 나타내는 ASCII 코드 값으로 변환해야 한다. 숫자 '7'의 ASCII 코드는 55이다. 따라서 셀 c0의 값 7에 48을 더해야 한다. 48은 6 * 8과 같으므로, 이를 계산하는 코드를 추가하면 다음과 같다.



++++ ++++ c1 = 8 로 초기화 (덧셈 루프의 카운터)

[

< +++ +++ c0에 6을 더함 (8번 반복하여 총 48을 더함)

> - c1에서 1을 뺌

]

< . c0의 값(7 + 48 = 55)을 ASCII 문자 '7'로 출력


5. 1. 헬로 월드 프로그램

다음은 "Hello World!"와 줄 바꿈 문자를 화면에 출력하는 브레인퍽 프로그램의 예시이다.

브레인퍽은 8개의 명령어 문자(+, -, <, >, [, ], ,, .)만을 사용한다. 이 문자들 외의 다른 모든 문자는 무시되므로, 코드 가독성을 위해 공백, 줄바꿈, 주석 등을 자유롭게 추가할 수 있다.

아래는 주석 없이 8개 문자로만 작성된 코드이다.



++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.



같은 코드를 가독성을 높이기 위해 공백과 줄바꿈을 넣고 주석을 추가하면 다음과 같다.



+++++ +++++ initialize counter (cell #0) to 10

[ use loop to set the next four cells to 70/100/30/10

> +++++ ++ add 7 to cell #1

> +++++ +++++ add 10 to cell #2

> +++ add 3 to cell #3

> + add 1 to cell #4

<<<< - decrement counter (cell #0)

]

> ++ . print 'H'

> + . print 'e'

+++++ ++ . print 'l'

. print 'l'

+++ . print 'o'

> ++ . print ' '

<< +++++ +++++ +++++ . print 'W'

> . print 'o'

+++ . print 'r'

  • ---- - . print 'l'
  • ---- --- . print 'd'

> + . print '!'

> . print '\n'



다음은 좀 더 자세한 주석과 함께 "Hello World!"를 출력하는 다른 예시 프로그램이다.



[ This program prints "Hello World!" and a newline character to the screen; its length is 106 active command characters. [It is not the shortest.]

This loop is an "initial comment loop", a simple way to add comments to a BF program without worrying about the command characters. The ".", ",", "+", "-", "<" and ">" characters are simply ignored, and the "[" and "]" characters must be balanced. This loop and the commands contained within it are ignored because the current cell defaults to 0; the 0 value causes this loop to be skipped. ]

++++++++ Set Cell #0 to 8

[

>++++ Add 4 to Cell #1; this will always set Cell #1 to 4

[ as the cell will be cleared by the loop

>++ Add 2 to Cell #2

>+++ Add 3 to Cell #3

>+++ Add 3 to Cell #4

>+ Add 1 to Cell #5

<<<<- Decrement the loop counter in Cell #1

] Loop until Cell #1 is zero; number of iterations is 4

>+ Add 1 to Cell #2

>+ Add 1 to Cell #3

>- Subtract 1 from Cell #4

>>+ Add 1 to Cell #6

[<] Move back to the first zero cell you find; this will

be Cell #1 which was cleared by the previous loop

<- Decrement the loop counter in Cell #0

] Loop until Cell #0 is zero; number of iterations is 8

The result of this is:

Cell no : 0 1 2 3 4 5 6

Contents: 0 0 72 104 88 32 8

Pointer : ^

>>. Cell #2 has value 72 which is 'H'

>---. Subtract 3 from Cell #3 to get 101 which is 'e'

+++++++..+++. Likewise for 'llo' from Cell #3

>>. Cell #5 is 32 for the space

<-. Subtract 1 from Cell #4 for 87 to give a 'W'

<. Cell #3 was set to 'o' from the end of 'Hello'

+++.------.--------. Cell #3 for 'rl' and 'd'

>>+. Add 1 to Cell #5 gives us an exclamation point

>++. And finally a newline from Cell #6



위 코드에서 주석과 공백을 모두 제거하면 다음과 같이 한 줄로 표현할 수도 있다.



++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.


5. 2. ROT13

이 프로그램은 입력을 ROT13 암호로 변환한다. ROT13은 로마자 알파벳을 사용하는 간단한 치환 암호로, 각 글자를 알파벳 상에서 13글자 뒤의 글자로 바꾸는 방식이다. 이 프로그램은 A-M(ASCII 65–77)을 N-Z(78–90)로, a-m(97–109)을 n-z(110–122)로 서로 바꾸며, 그 외 다른 모든 문자는 그대로 유지한다. 프로그램은 입력에서 한 문자씩 읽어 변환한 후 출력하며, 파일 끝(EOF, 여기서는 -1 또는 "변경 없음"으로 가정)을 만나면 종료된다.

아래는 브레인퍽으로 작성된 ROT13 프로그램 코드이다. 코드 내 주석은 각 부분의 작동 방식을 설명한다.


  • ,+[ Read first character and start outer character reading loop
  • [ Skip forward if character is 0

>>++++[>++++++++<-] Set up divisor (32) for division loop

(MEMORY LAYOUT: dividend copy remainder divisor quotient zero zero)

<+<-[ Set up dividend (x minus 1) and enter division loop

>+>+>-[>>>] Increase copy and remainder / reduce divisor / Normal case: skip forward

<

<<<<<- Decrement dividend

] End division loop

]>>>[-]+ End skip loop; zero former divisor and reuse space for a flag

>--[-[<->+++[-]]]<[ Zero that flag unless quotient was 2 or 3; zero quotient; check flag

++++++++++++<[ If flag then set up divisor (13) for second division loop

(MEMORY LAYOUT: zero copy dividend divisor remainder quotient zero zero)

>-[>+>>] Reduce divisor; Normal case: increase remainder

>[+[<+>-]>+>>] Special case: increase remainder / move it back to divisor / increase quotient

<<<<<- Decrease dividend

] End division loop

>>[<+>-] Add remainder back to divisor to get a useful 13

>[ Skip forward if quotient was 0

  • [ Decrement quotient and skip forward if quotient was 1
  • <<[-]>> Zero quotient and divisor if quotient was 2

]<<[<<->>-]>> Zero divisor and subtract 13 from copy if quotient was 1

]<<[<<+>>-] Zero divisor and add 13 to copy if quotient was 0

] End outer skip loop (jump to here if ((character minus 1)/32) was not 2 or 3)

<[-] Clear remainder from first division if second division was skipped

<.[-] Output ROT13ed character from copy and clear it

<-,+ Read next character

] End character reading loop


6. 파생 언어

브레인퍽 프로그램은 가독성과 기술성이 매우 낮아 실용성은 기대하기 어렵지만, 튜링 완전하다는 특징을 가진다. 이러한 간결함 때문에 많은 파생 언어가 생겨났다.

브레인퍽의 8가지 명령 문자는 가독성을 위해 임의로 선택된 것으로, 반드시 해당 문자를 사용해야 하는 것은 아니다. 따라서 각 명령에 사용하는 문자를 바꾸어 더 난해하게 만들거나 단순한 놀이처럼 만든 파생 언어들이 등장했다. 대표적인 예는 다음과 같다.


  • A[15]: 오직 'A' 문자 하나만으로 코드를 작성한다. 기존 문자를 대체하여 난해함을 더한 예시다.
  • BrainCrash[16]: 기존 브레인퍽에 4개의 명령 '|&~^'을 추가한 언어다. 프로그램 종료 시, 데이터 포인터가 가리키는 셀의 값이 0이 될 때까지 포인터를 이동시키며 해당 위치의 값을 출력한다. 또한, 실행 전에 메모리에 "Hello, world!" 문자열이 미리 저장된다는 특징이 있다. 기존 브레인퍽을 확장하여 기능을 더한 예시다.
  • Ook!: 'Ook.', 'Ook!', 'Ook?' 세 가지 문자열 중 두 개를 조합하여 하나의 토큰으로 만들고, 이를 브레인퍽의 각 명령에 대응시킨다. 사용되는 기호(실제로는 문자열)의 종류가 3개뿐이어서 브레인퍽(8개)보다 적다. 8종류의 문자를 대체하여 유머러스함을 더한 예시다.

7. 최근 연구

2024년, 구글의 한 연구 프로젝트에서는 약간 수정된 7개 명령 버전의 브레인퍽을 인공 디지털 환경의 기반으로 사용했다. 이 환경에서 연구진은 복제자replicator|리플리케이터eng가 자연적으로 발생하여 환경 내 지배권을 두고 서로 경쟁하는 현상을 발견했다.[14]

참조

[1] 논문 Fully Human, Fully Machine: Rhetorics of Digital Disembodiment in Programming 2020-04-02
[2] 논문 Language without code: intentionally unusable, uncomputable, or conceptual programming languages https://revistas.ucp[...] 2017-09-01
[3] 문서 Implementing Brainfuck in COLA.
[4] 서적 Not Just for Fun. Bloomsbury Academic 2014
[5] 웹사이트 brainfuck - Esolang https://esolangs.org[...] 2024-02-07
[6] 웹사이트 The Brainfuck Programming Language https://muppetlabs.c[...] Muppetlabs.com 2023-04-30
[7] 웹사이트 The FALSE Programming Language — Wouter van Oortmerssen https://strlen.com/f[...] Strlen.com 2013-08-03
[8] AV media Tamedia TX 2017 - Livestream Werdino https://www.youtube.[...] 2017-06-13
[9] 웹사이트 Aminet - dev/lang/brainfuck-2.lha https://aminet.net/p[...] Aminet 2023-04-30
[10] 웹사이트 BF is Turing-complete https://iwriteiam.nl[...] Iwriteiam.nl 2023-04-30
[11] 웹사이트 Index of /esoteric/brainfuck/bf-source/prog https://sange.fi/eso[...] sange.fi 2002-01-22
[12] 웹사이트 BF interpreter written in BF https://iwriteiam.nl[...] Iwriteiam.nl 2023-04-30
[13] 웹사이트 brainfuck interpreter https://www.brainfuc[...] Daniel B. Cristofani 2024-06-19
[14] arXiv Computational Life: How Well-formed, Self-replicating Programs Emerge from Simple Interaction 2024
[15] 웹사이트 http://www.sksk.info[...] 2011-03-19
[16] 웹사이트 http://cfs.maxn.jp/n[...] 2008-02-10



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com