사용자:스니피/작업장: 두 판 사이의 차이

(문서 내용을 "*/펀지 */스페이스켐"으로 바꿈)
 
1번째 줄: 1번째 줄:
{{llang|en|Funge}}
*[[/펀지]]
 
*[[/스페이스켐]]
== 개요 ==
[[1998년]]에 만들어진 [[난해한 프로그래밍 언어]]들인 유니펀지(Unefunge), 비펀지(Befunge), 트리펀지(Trefunge)를 통틀어 부르는 이름. 이들의 조상격인 [[1993년]] 사양의 비펀지-93 등도 포함시키기도 한다.
 
공통적인 특징은
*명령어가 '펀지스페이스(Fungespace)'라는 공간에 기록되고, 포인터가 이 안을 돌아다니며 명령을 수행한다는 것,
*자료구조로는 {{ㅊ|일단은}} 스택을 사용한다는 것
*빈 스택에서 자료를 빼면 에러 대신 0을 뱉는다는 것
등이 있다.
 
<source lang="text">
>78*vD
v$_#>vN
7#!@  A
3 :v??v
9,-""""
4+1ACGT
+,,""""
>^^<<<<
</source>
 
대략 {{ㅊ|이딴}} 이런 식으로 코딩한다.
 
== 비펀지-93 ==
최초의 펀지. "[[컴파일]]이 최대한 어려운 언어"를 지향점으로 설계되었으며, 그 결과 최초의 '''2차원 프로그래밍 언어'''가 되었다(...) 이후 여러 [[난해한 프로그래밍 언어]]들에 영향을 주었다.
 
펀지스페이스의 크기는 80*25로 제한되어있으며, 포인터는 오른쪽, 왼쪽, 위, 아래의 네 방향으로만 움직일 수 있다. 다음과 같은 명령어를 지원한다.
 
{| class="wikitable" style="text-align:center;"
|-
! 명령어 !! 설명
|-
| + || 스택에서 두 값 a, b를 차례로 빼내고, a+b를 집어넣는다.
|-
| - || 스택에서 두 값 a, b를 차례로 빼내고, b-a를 집어넣는다.
|-
| * || 스택에서 두 값 a, b를 차례로 빼내고, a*b를 집어넣는다.
|-
| / || 스택에서 두 값 a, b를 차례로 빼내고, b/a의 몫을 집어넣는다. a가 0이면 무슨 값을 넣을지 사용자에게 묻는다.
|-
| % || 스택에서 두 값 a, b를 차례로 빼내고, b/a의 나머지를 집어넣는다. a가 0이면 b를 집어넣는다.
|-
| ! || 스택에서 값 하나를 빼내고 그 값이 0이면 1을, 아니면 0을 집어넣는다.
|-
| ` || 스택에서 두 값 a, b를 차례로 빼내고, b>a면 1을, 아니면 0을 집어넣는다.
|-
| > || 포인터의 이동 방향을 오른쪽으로 설정한다.
|-
| < || 포인터의 이동 방향을 왼쪽으로 설정한다.
|-
| ^ || 포인터의 이동 방향을 위로 설정한다.
|-
| v || 포인터의 이동 방향을 아래로 설정한다.
|-
| ? || 포인터의 이동 방향을 임의로 설정한다.
|-
| _ || 스택에서 값 하나를 빼내고 그 값이 0이면 포인터의 이동 방향을 오른쪽으로, 아니면 왼쪽으로 설정한다.
|-
| &#124; || 스택에서 값 하나를 빼내고 그 값이 0이면 포인터의 이동 방향을 아래로, 아니면 위로 설정한다.
|-
| " || 일명 문자열 모드. 다음 "가 나올 때까지 포인터가 이동하며 만난 문자들의 [[ASCII]] 값을 순서대로 스택에 집어넣는다.
|-
| : || 스택 맨 위의 값을 복제한다.
|-
| \ || 스택 맨 위의 두 값의 자리를 바꾼다.
|-
| $ || 스택 맨 위의 값을 빼내서 버린다.
|-
| . || 스택 맨 위의 값을 빼내서 정수로 출력한다.
|-
| , || 스택 맨 위의 값을 빼내서 문자로 출력한다.
|-
| # || 다음 명령어를 무시한다.
|-
| g || 스택에서 두 값 y, x를 차례로 빼내고, 펀지스페이스의 좌표 (x, y)에 있는 문자의 ASCII 값을 스택에 집어넣는다. 그런 좌표가 없을 경우, 스택에 0을 집어넣는다.
|-
| p || 스택에서 세 값 y, x, v를 차례로 빼내고, 펀지스페이스의 좌표 (x, y)에 있는 문자를 ASCII 값이 v인 문자로 설정한다. {{ㅊ|본격 컴파일러 엿먹이기}}
|-
| & || 정수를 입력받아서 그 값을 스택에 집어넣는다.
|-
| ~ || 문자를 입력받아서 그 ASCII 값을 스택에 집어넣는다.
|-
| @ || 프로그램을 종료한다.
|-
|0~9 || 대응하는 수를 스택에 집어넣는다.
|}
 
== 펀지-98 ==
[http://quadium.net/funge/spec98.html 사양]
 
펀지의 최종 진화형. 상기했듯 유니펀지, 비펀지, 트리펀지라는 세 언어로 이루어져있으며, 각각 1차원, 2차원, '''3차원''' 프로그래밍 언어이다. 이와 같은 방식으로 n차원의 Nefunge를 만들수도 있다고(...) {{ㅊ|정신이 아득해진다}}
 
비펀지-93에서 달라진 점은
*펀지스페이스의 크기가 사실상 '''무제한'''이 되었다.
*포인터가 상하좌우가 아닌 다른 방향으로도 움직일 수 있다(!)
*다룰 수 있는 스택의 수가 늘었다. 이 스택들은 하나의 '''스택 스택'''에 들어있다(...)
*파일 입출력을 지원
*멀티스레딩을 지원
*잡다한 명령어 추가
 
그 외에 Fingerprint라는 방식으로 [[Python]]의 import문 비스무리한 것도 지원했던 것 같지만(...) 시간이 흐르면서 지윈이 끊긴 것으로 보인다.

2015년 10월 12일 (월) 18:22 기준 최신판