Loading
2014. 4. 8. 20:56 - lazykuna

aheui 그리고 sugar syntax

aheui는 puzzlet씨가 개발한 난해한 프로그래밍 언어로서 자세한 설명은 아래 소개 링크를 참조해 보라.

보면 프로그램의 흐름이 일반적인 프로그램과는 다르게 line이 아니라 (x,y)꼴로 흐르게 되고, goto 구문이 없지만 바로 옆 혹은 2칸씩 코드의 흐름을 제어할 수 있다.

그러면, aheui로 sugar syntax들을 모두 구현할 수 있을까? 그러니까, if/for/while clause나, function 및 class 같은 것들 말이다.


먼저 조건문에 대해서 생각해 보았다. aheui는 'ㅊ' 자음으로 프로그램의 흐름을 바꿀 수 있다. 이를 이용하면 분기문을 만들 수 있을 것이라는 생각이 들었다. 여러 가지 방법이 있겠지만, 일단 이 간단한 do~while 코드를 만들어 볼 수 있을 듯 하다.[각주:1]

우잉잉잉우어어어어어어어어어어어어어어잉잉

삾박박다삭밣밣따박다맣삾받박타타빠촙아희

잉잉잉잉잉잉잉잉잉잉잉잉잉잉잉잉잉잉아오잉

별개의 설명이지만 이 코드는 안의 빨간색 코드를 박박다 횟수만큼, 즉 4번 실행하게 된다.


여기서 이것들이 하는 일을 C언어의 꼴로 나타내면

i = 4;

do {

  어쩌구 저쩌구...

  i--;

} while (i != 0); 


꼴이 될 것이다.

이중 구문도 끄떡없다. 하지만 내 머리는 별로 안 끄떡없을 것 같다...

우어어어어 어어어어어어어어어어어어어어어어 어어어어어어어잉

우잉잉잉잉 우어어어어어어어어어어어어어어잉 잉잉잉잉잉잉오잉

아삾박박다 아가나다라가나다라가나다라샀촙아 삾받박타타빠촙아희

잉잉잉잉잉 잉잉잉잉잉잉잉잉잉잉잉잉잉잉아오 잉잉잉잉잉잉아오

잉잉잉잉잉 잉잉잉잉잉잉잉잉잉잉잉잉잉잉잉잉 잉잉앙앙앙앙앙잉

테스트는 안 해봤지만 어떤 느낌인지 알 수 있을 것이다. 이런 느낌일 것이다.




구조를 파악하니 어느 정도의 정형화는 가능할 것으로 보인다.

여기에 좀 더 제한을 주면 어떨까. @aheui 계정의 인터프리트 된 멘션을 받으려면 twitter의 특성상 한줄로 코드를 보내야 한다.[각주:2]

이런 제약을 걸고서 내가 생각한 do~while clause는 다음과 같다.

삮박박다여첩아희

여기서 pure code는 샦뱓뱍탸탸뺘 이다. 즉 코드의 절반이 프로그램의 흐름을 제어하기 위한 dummy code인 셈.

이렇게 한줄 제약을 줬을 때 앞에서와 마찬가지로 2중구문이 가능할까? 이게 가능하려면


  1. 여러 스택과 ㅊ 기능을 이용한 복잡한 흐름 제어 구문. 이 경우 각각의 code들은 뭉쳐서 존재하게 됨.
  2. 스택을 사용하지 않고, 방금전 방식과 유사하게 코드의 부분부분을 서로 섞어서 넣는 방식.


1과 같은 경우 코드 길이가 1이 넘는 경우 실행이 불가능하다. 왜냐하면 aheui의 기본구조상 PC가 2 넘게 이동할 수 없기 때문이다.

2도 마찬가지. 적어도 3 이상의 PC값 이동이 가능해야 가능한 이야기인데 ... 한줄코드로는 이것이 불가능하다. 여러줄이면 가능하지만.

두가지 방식을 모두 혼용하면 어떨까[각주:3] 싶기도 했는데 원래 코드로 돌아갈 수 있는 부분을 넣을 수가 없어서 실패했다. 결국 어찌됐든 3글자간의 이동이 필요한 셈.


어찌됐든, while 구문의 구현에 따라 for/if 조건분기문도 자연스럽게 사용이 가능함은 굳이 해 보지 않아도 알 수 있다. 필요하면 직접 만들어 봐도 좋고...


그렇다면 함수의 구현과, 더불어 OOP 개념의 구현이 가능할까? 그러니까, 클래스 같은 것 말이다. 우선 함수가 구현 가능한지 살펴보면, 내 생각엔 된다고 볼 수 있을 것 같다. 아마, 이런 식으로 구현이 가능하리라고 생각한다.


- 는 사실, 이미 보면 알겠지만 문제가 있다. 바로 원래 코드로 return 하는 기능이 없다는 것. 아희 언어 내부에서 스택 두개 빼다가 특정 위치로 돌아가게 해주는 명령어라도 집어넣었으면 좋았으련만!


함수가 구현 된다면 클래스와 같은 OOP 객체들도 구현하는데는 별 문제가 없을 것이라고 생각한다. 사실상 클래스는 변수들의 묶음 집합인데다가, 그 묶음을 함수들로 다루는 것일 뿐이니.


그 이외의 sugar syntax나 이런저런 것들이 뭐가 있는지는 잘 모르겠다. 하지만 뭐, 이 정도만으로도 아희 언어의 기능과 한계점을 충분히 파악하지 않았나 싶다...

물론 내 주장이 철저한 근거에 기반하지 않다는 건 잘 알고 있다. 문제점을 발견하면 언제든지 덧글로 호응해 주시면 됨.


참조 사이트


  1. 코드는 http://puzzlet.org/doc/aheui/jsaheui_ko.html 에서 실행해볼 수 있다. [본문으로]
  2. 이전과는 달리 multiline도 지원하는 듯 하지만 ... [본문으로]
  3. 복잡한 흐름 제어 구문과 함께, 원하는 부분으로 이동할 수 있도록 코드 중간중간에 이동을 위한 dummy code를 섞는 방식을 생각했다. [본문으로]