Code Metaphor

Programming, Writing, Reading, Thoughts…

Io를 넘어서, Metaphor

내 주변 사람들은 알겠지만, 내가 고안하고 있는 프로그래밍 언어가 하나 있다. 시작한지 거의 1년이 지나서야 내가 생각한 언어가 이미 있는 Io 언어와 상당히 비슷하다는 것을 알았다. (이 언어는 여러모로 재미있는데, 그 가운데 가장 나를 충격에 빠뜨렸던 것은, 이 언어의 창시자인 Steve Dekorte—이 사람 성씨는 어떻게 읽어야 하나?—가 디자인에 조예가 있다는 것이다. 원래 디자이너인지, 디자인은 단지 취미인지, 프로그래밍이 취미인지는 나도 잘 모르겠다.)

굉장히 말랑말랑한 것이, 이 언어는 LISP과 많이 닮아 있다. 컨텍스트(context)를 해킹하여 클로져(closure)를 만들어 쓴다거나, 구문 확장을 통해 리터럴을 추가할 수도 있다. 내 취향에 꼭 맞는 언어라고 할 수 있다(그런데 난 Python을 아직 더 좋아한다. 순수하지는 않지만, 강력하기 때문이다).

그런 Io에도 부족한 느낌이 몇 있다.

  1. 컨텍스트를 해킹하여 클로져를 완전히 흉내낼 수 있지만, 그것이 명시적으로 드러나지 못한다. 메세지 인자에서 그것이 즉시 평가(evaluation)되어 전달될지, 아니면 소극적으로 평가(lazy-evaluation)될지는 미지수다.

    i = 1
    list(1, 2, 3) foreach(i, (i + 1) println)
    

    내가 Io의 표준 라이브러리에 아무 짓도 하지 않았다면 저것은 Python의

    for i in [1, 2, 3]:
        print i + 1
    

    와 같은 의미의 코드였을 것이다. 하지만 내가 아래와 같이 해킹을 해두었다면,

    List foreach = method(i, j, writeln(i, j))
    

    원하는대로 작동하지 않을 것이다. (정말 원하는대로 작동하지 않는다. 무슨 이유에서인지 v에 응답할 수 없다고 하는데, 대체 저 v는 어디서 나오는 식별자인가? 표준 API를 건드려서 저런 에러가 나는 것 같다.)

    차라리 아래와 같이 작성하는 편이 훨씬 더 귀여울 것이다.

    list(1, 2, 3) foreach("i", method("(i + 1) println"))
    

    한층 더 성숙하고 섹시하게 구문을 수정한다면, 심볼과 메서드를 위한 리터럴을 추가하면 되겠다.

    list(1, 2, 3) foreach(:i, [(i + 1) println])
    
  2. 공식 소개 웹 페이지에서는 키워드가 하나도 없다고 해놓았지만, 내 눈에는 여전히 몇 가지 강제된 것들이 보인다.

  1. 굳이 setSlot()updateSlot()을 구분할 이유가 있을까? 난 아직도 a := 1a = 1를 구분해서 써야 하는 이유를 모르겠다.

  2. 최상위 컨텍스트가 사실은 Object 인스턴스의 슬롯이라는 것은 멍청해 보인다. (내가 Ruby에서 느낀 실망감을 그대로 안겨주었다.)

    Io> type
    ==> Object
    

최소주의 디자인 목표를 가진 Io와 나의 이상적 언어 모델이 굉장히 유사하긴 하지만, 조금 다른 부분도 있는 것 같다.

  1. 나는 명시성이 상당히 중요한 부분이라고 생각한다. 그런 의미에서, 나는 덕 타입(duck type)을 더 좋아하긴 하지만, 때때로 타입 힌팅(type hinting)이 필요하다고 생각한다.

  2. 같은 기능을 하는 언어적 요소는 단 하나만 있어야 한다. 그리고 그 요소의 실체들은 반드시 동등해야 한다. 연산자와 메서드를 구분할 필요가 있을까? 동사적 요소는 메서드로 통합하고, 그것들 사이에 예외적인 평가 우선 순위가 있어서는 안 된다.

  3. 중요한 모듈(module)에 쓸데없는 찌꺼기가 껴서는 안된다. 만약, 꼭 찌꺼기를 생성해야 하고, 그것이 어딘가에 속해야만 한다면, 쓰레기통 하나를 만들어주는 것이 낫다. (아무리 생각해도 Object는 쓰레기통이라기에는 너무 숭고한데!)

나는 위에서 말한 원칙을 지키면서 언어를 고안하고 있다. 내 소박한 목표은—그 언어가 사용되든 말든 간에—누군가 A4 용지 하나를 주고 스펙(specification)을 적어달라고 할 때, 그 자리에서 순식간에 명세 모두를 적어줄 수 있는 언어를 완성하는 것이다. 그리고 그것이 멋지게 구현된다면 바랄 것이 없겠다. 그 언어를 나는 Metaphor라고 부른다.

덧. Io는 “아이오”[ai:o]로 읽는다.

This entry was posted on December 8, 2006 at 12:09 PM. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

One Response to “Io를 넘어서, Metaphor”

  1. Heung-sub Lee Says:

    누군가 A4 용지 하나를 주고 스펙(specification)을 적어달라고 할 때, 그 자리에서 순식간에 명세 모두를 적어줄 수 있는 언어를 완성하는 것이다.

    감동적입니다. Metaphor 많이 기대하고 있어요! 내년 대안언어축제 땐 Metaphor 세션을 볼 수 있음 좋겠네요.

Leave a Reply

Powered by WordPress. Styled by Hong, MinHee. XML Feed, Comments XML Feed.