Header

  1. View current page

    딥뿔이 자라나는 노트

Profile_image?t=1225424611&type=big
나를 바꾼 똑똑한 생활 습관, 스프링노트 - 여러분도 지금 시작해보세요!
38

새로운 언어와 함께한 주말! Hello, Factor!

얼마전  몽그렐을 만든 Zed Shaw의 인터뷰를 통해 FactorLanguage에 대해 알게 되었다.

 

Q:  What's the next language for you after Ruby?

 

A:  The language I have been playing with a lot and only really for desktop applications, because of the way it is designed is called Factor, but that's mostly kind of an esoteric language it's a modernized Forth so it's got all the stuff you get from LISP and functional programming languages. You got comprehension and list processing, but it's done in a stack language style, you can build really nice DSLs with it, really sweet looking programs, code is very efficient and fun to work in, but the main thing is that in just in three years they cranked out so much stuff.

Very few people manage to produce way more capability than even Ruby has got, full GUI languages, web servers, web frameworks, multi protocols, every kind of compressions, algorithms, in a very small amount of time, very small space and their virtual machine is only 6000 lines of C code which is impressive. They have a multi platform compiles on about 16 platforms and runs in 6 K of C code.

 

Zed가 요즘 재미있게 보고 있다는 Factor라는 언어다.  처음 들어보는데 3년뿐이 안된 Forth를 따르는 스택 기반 언어라는 힌트를 얻을 수 있었다. 3년이라는 짧은 시간동안 적은 양의 코드로 루비보다 많은 것을 구현해놓았다는 점이 인상적이란다.

 

그림_18.png

 

프로그래밍  언어의 로고가 랩터 공룡이라니 웃긴다.  또 검색을 해보니  아겔님의 블로그에 factor에 대한 글들을 찾을 수 있었다. 처음이라 전부 이해할 수는 없었지만, 최대한 정독하면서 조금은 분위기 파악을 할 수 있게 되었다.

 

그리고  어떤 블로그에서  Factor Magic이라는 글에서 이런 문구를 읽게 되었다.

 

According to Doug Coleman, one of Factor's top gurus, you need to learn the following words by heart:

  dup, keep, 2dup, 2keep, swap, pick, rot, -rot, roll, -roll, 2apply, 2array, first2, nth, set-nth, append.

 

He also advises to learn the following words for iterating:

  each, each-with, map, map-with, 2each, 2map.

 

저 워드들에 대해 아직 마음속 깊은 곳에서 공감은 하지 못했지만, 그래도 이런게 필요하겠구나 하는 생각은 든다.

 

암튼, Factor를 처음 접한 느낌은 생소함이다. 하지만 GUI 툴이 무척 완성도가 높고, 또 문서도 잘 되어 있어서 여기 저기 눌러보며 꽤 많은 정보를 얻을 수 있었다. 처음 나를 반겨준 cookbook도 좋았다. 친절하다.

 

그림_19.png

 

언제나 그렇듯, Hello world 프로그램을 만들어본다. 문법이 그리 익숙한 형태는 아니다.

 

  1. : hello ( x -- y ) "Hello, " swap append ;
  2. "Factor" hello print

결과는 당연히

  1. Hello, Factor

 

그리고 대안언어축제2006에서 언어교환에 사용했던 문제들을 풀어보기로 했다. 오늘은 일단 제일 쉬운 두가지가 목표다. 먼저  N까지 합을 구하는 문제.

 

  1. ! 1부터 N까지 자연수의 합
    : sum ( seq -- y ) 0 [ + ] reduce ;
    : nth_sum ( x -- y ) 1 + sum ;
    : nth_even_sum ( x -- y ) 1 + [ even? ] subset sum ;
    : nth_odd_sum ( x -- y ) 1 + [ odd? ] subset sum ;

    [ 55 ] [ 10 nth_sum ] unit-test
    [ 35 ] [ 10 nth_even_sum ] unit-test
    [ 20 ] [ 10 nth_odd_sum ] unit-test

 

문서를 찾아보며 했는데, 적절한 word를 선택했는지는 잘 모르겠다.

 

그 다음은 구구단 문제.

 

  1. ! 구구단
    : dan ( x -- seq ) 9 [ 1+ ] map swap \ * 2array >quotation map ;

    [ { 2 4 6 8 10 12 14 16 18 } ] [ 2 dan ] unit-test

 

이 문제는 조금 더 시간이 걸렸는데, map을 하려는데 quotation을 만드는 방법을 몰라서 한참을 헤맸다. 그래도 답이 얻어지니 무척 신기하기도 하고 재밌다. 그런데 코드 가독성이 너무 떨어지는 것 같다. 문제를 좀 더 쪼갤걸 그랬나?

 

처음으로 Factor로 프로그래밍을 해봤다. 아직 많이 어색하고 어떤 장점이 있는지 잘 모르겠지만, 평소에 잘 하지 않던 스타일의 언어라 꽤 재밌다. Factor로 뭔가 유용한 것을 만들 수 있을 때까지 조금씩 시간을 내서 연습을 해볼 작정이다. 한동안 즐거울 것 같다.

아, 그리고 마소 12월호에 실린 서광열님의 얼랑 기사 '병렬 프로그래밍과 얼랑'도 흥미로웠다. 얼랑 책도 읽어야겠다. RailsCon2007에서 PragDave를 만났는데, 프로그래밍 루비의 번역자라고 소개하니 반갑게 인사하면서 요즘 자기는 얼랑을 재밌게 보고 있다면서, 얼랑책도 번역하라고 했던 기억이 난다. 루비 세미나에서 얼랑에 대한 발표도 잠깐 들었었고, 얼랑도 한번 공부해보고 싶다. 

 

왠지 새로운 걸 찾게되는 주말이다. ^^

 

2007/12/17 00:47:37

 

Tags

History

Last edited on 01/09/2008 16:54 by deepblue

Comments (0)

You must log in to leave a comment. Please sign in.