posted by 아겔-_- 2010.07.15 17:38

이번에 읽은책은 덕스러운 책들을 즐겨 출판하샤 세간의 찬사를 받고 계신 '도서출판 인사이트'에서 우리글로 내어놓은  "프로그래밍 클로져".
클로저 표지
 


http://pragprog.com/images/covers/original/shcloj.jpg 사실은 영문판으로 개인적으로 구입해서 "커먼리습 덕질이 우선"와 "남자라면 네이티브 컴파일러?!"라는 생각으로 한 세 챕터정도만 조금 읽어두고 썩히고 있었읍죠. (맛만 봐두고 정작 중요한 functional programming, laziness, concurrency와 관련한 부분은 읽지도 않았던게죠^^;)


Clojure 언어 자체는 최근에 들어서 GitHub, BitBucket등의 오픈소스 프로젝트 피드들을 살펴볼때마다 느끼지만 오픈소스 커뮤니티 안에서 급성장했다고 생각합니다. 정말 기존의 수많은 lisp-clone이나 이러한 시도를 했던 스킴 환경들과 달리 급성장하고있고, 충분히 성숙하고 멋진 프로젝트/라이브러리들이 이미 세상에 나와있다고 생각합니다. 그리고 JVM에서 굴러갈
무언가를 개발 하기에도 더없이 매력적인 환경이라고 생각하구요. 제가 생각하는 요인, 혹은 현재의 현상은...

  • 언어자체가 리습이지만, 기존의 리습의 역사적이고 약간은 고리타분한 모습을 벗고 non-Lisper들에게조차 idiomatic하려 매우 노력한게 곳곳에서 느껴진다.
  • 자바언어, 그리고 수많은 자바 라이브러리에 별다른 레이어나 추가적인 작업없이 직관적이고 직접적으로 접근
  • 클로져로 작성하더라도 자바측에 이를 노출하여 상호호환이 자유로움
  • 커먼리습의 매크로(defmacro), 하스켈의 지연평가(lazy evaluation)와 같은 멋진 기능들을 적절히 융합
  • 쉽고 직관적으로 고수준의 동시성 제어가 가능하도록하여 멀티코어, JVM을 최대한 활용하도록.
  • Leiningen 그리고 Clojars
    • Apache Maven처럼 프로젝트 자체의 의존성, 형태의 선언적 기술이 가능하도록 했고
    • 빌드, 테스트, 배포 등의 일반적인 작업을 Leiningen을 통해서 쉽고, 선언적으로.
    • 의존성 관리도 메이븐의 jar뿐만 아니라 Clojars을 통해서 RubyGems와 같이 사용자간의 쉬운 공유가 가능
    • Apache Maven처럼 단순히 Leiningen에 내장된 기능만이 아니라 수많은 플러그인을 통해서 Leiningen이 지원하는 기능을 확장/개발이 가능
    • 이미 수많은 라이브러리, 애플리케이션, 플러그인이 개발되어 공유하고 있음

뭐 이런것들이 생각나는 지금의 급성장하는 요인인거 같음.

책을 읽으며 많은 부분을 새로이 생각하거나 느꼈다. 특히나 이책에서는 그간 실용성이랑은 좀 안친해보이고 심지어 고리타분하게 느낄정도의 함수형 프로그래밍을 실용적인 의미로서 다시 접근해 보이는데 크게 놀랐다.

클로져에서 제공하는 동시성 제어(책에서는 '병행성'이라고하셨음. 병행성이 더 적절한 말일듯)에 대한 설명이나 늦은 평가나 무한한 리스트/시퀀스에 대한 소개, 다중메서드라고 표현한 multiple dispatch에 관한 부분은 사실 다른 언어에서 없거나, 찾기 힘들거나 모호한 개념으로 설명을 그냥 빙 돌아가는게 일반적이라고 생각했는데 이들에 대해서 처음 접하는 이들도 명확하게 개념을 잡고 이들을 어떤때 어떻게 적용할지를 생각해보게 해준다고 생각한다.


그럼에도 약간 아쉬운점도 못되는점들은...
  • 어쩔수없이 책이 나올 시점에는 세상에 없었던것들에 대한 설명이 있었으면 했다.
    • Leiningen을 이용한 개발 방법
    • deftype, defprotocol 같은 타입정의


어쨌든 좋은책을 세상에 내주고 우리말판까지 내주신 모든분들에게 감사드리고 싶은 책이었다. :-)










ps. 오늘도 말투는 이랬다 저랬다 일관성없음;;; (고치기 귀찮;;;)

ps2. 저번 "프로그래밍 루아" 독후감도 그렇고 인사이트에서 뭐 떡고물이라도 주셔야 되는거 아닌지 깊이 생각해볼일;;;

신고
posted by 아겔-_- 2009.03.21 14:00
그간 Slava가 new_ui에 대한 작업을 해온건 알고 있었고, 원래 유니코드를 완전히 지원하는 언어이고, 한글 인코딩에 대해서는 제가 지원을 했기 때문에 "설정이 제대로 되있다면" 이맥스+FUEL등에서 한글을 입력하고 출력하는게 팩터에서 가능함을 잘알고 있었습니다.

그런데 한국인으로서 딱하나 팩터를 사용하는데 좀 거시기한 부분도 팩터의 UI에서 유니코드 입출력이 안되던점이었는데요. 이번 new_ui을 도입하면서 pango을 이용하여 완전히 유니코드 출력이 가능해졌고, 한글입력은 Win32에서 테스트해본 결과 특별한 작업이 없이도 잘 굴러감을 확인했습니다. :-)

아직 윈도용 official-binary은 2009/02/23으로 new_ui을 지원하지 않고 있습니다. 윈도에서는 tools.disassembler가 정상적으로 단위테스트를 통과하지 못해서라고 하네요. 해당 부분을 제외하고는 사용이 충분히 가능한 상태라고 하기에, 

1. cygwin에서 git pull한 다음에 
2. 'make'으로 vm을 만들고
3. bootstrap이미지를 받아서 "./factor.com -i=boot.image"로 부트스트래핑...
4. 그리고 마지막으로 build-supports/dlls.txt에 필요하다고 적힌 dll들을 찾아다 팩터와 같은 디렉토리에 복사. (전부 cairo, pango, libpng, libtiff, zlib 같은 기본적인것들이라 GIMP-win32을 설치한 디렉토리를 찾아보면 나오더라구요.)
5. 그리고 즐거운 팩터링!


또, 리눅스랑 Cocoa에서는 아직 제가 테스트를 못해봤습니다. (출력은 아마 정상이겠고, 둘 다 IME에 대한 지원 코드가 있다고 Slava가 그러더군요. 그래서 아마 잘 굴러가지 않을까 하는 중.)



가젯(팩터의 UI프레임웍)을 이용해서 한글을 넣어도 잘되더군요. (당연히 팩터 UI리스너가 가젯으로 되어있으니^^;)

하여튼 더 깔끔해지고, UI체감속도도 훨씬 원할해졌고 좋아졌네요.



ps. 바이너리 필요하신분 계시면 배포할까요?

신고
posted by 아겔-_- 2009.03.18 17:59

하악하악...

SBCL에서 기본적으로 유니코드를 지원하지만, 뭔가 부족했음. (사실 전 커먼리습 요즘엔 다 까먹;;;)

중국어도, 일본어도 기본적으로 native encodings을 지원하는데...

그래서 그냥 감기로 병가내고 쉬면서 작업해서 만들어봤음.


sbcl-devel에 코드 보내야징...
신고
posted by 아겔-_- 2009.03.01 19:24
CP949문자열을 ISO-2022-KR로 변환하는 예제.

DESIGNATOR을 출력하지 않아도 되긴 되는구나.

테스트는 2022kr등으로 컴파일한 다음에 

$ ./2022kr | iconv -f

...이렇게 iconv을 이용해서 CP949로 다시 변환해보기로.
 
 1 #include <stdio.h> 
 2 #include <string.h> 
 3
 4
 5 #define CP949_PHRASE "이것이 바로 락앤롤 땐스!" 
 6
 7 const char DESIGNATOR[] = {0x1b, 0x24, 0x29, 0x43};
 8
 9 const char SO = 0x0e;
10 const char SI = 0x0f;
11
12 main() {
13     int n = 0;
14     char state = SI;
15
16     // print designator 
17     /* 
18     for ( n = 0 ; n < 4 ; n ++ ) { 
19         putc(DESIGNATOR[n], stdout); 
20     } 
21     */ 
22
23     // cp949-phrase -> iso2022kr 
24     for ( n = 0 ; n < strlen(CP949_PHRASE) ; n ++ ) {
25         char c = CP949_PHRASE[n];
26         if (c & 0x80) {
27             // non-ascii 
28             if (state != SO) {
29                 state = SO;
30                 putc(SO, stdout);
31             }
32             putc(c & 0x7f, stdout);
33         } else {
34             // ascii 
35             if (state != SI) {
36                 state = SI;
37                 putc(SI, stdout);
38             }
39             putc(c, stdout);
40         }
41     }
42
43 }


신고
posted by 아겔-_- 2009.03.01 12:50


팩터의 인코딩시스템에 다음을 작업중/작업완료입니다.

  • 조합형 : 구현완료. 테스트도 성공.
  • io.encodings.blackhole : /dev/null 같은 인코딩-_-;;; 심심해서 만들어봄
  • io.encodings.asian : 유니코드 코드테이블 로딩/변환 모듈, cp949, johab, sjis등 많은 인코딩 변환에 공통적으로 이용하는 vocab. 한국어에는 적용을 했는데 일본어는 Dan이 적용하길;;;
  • ISO-2022-KR : 뭔가 제대로 작동하고 있지 않은듯. 뭔가 <SO>~<SI>처리가 틀린걸지도...
  • EUC-JP : 내가 왜 일본어 인코딩을 작업하고 있는지-_- 문득 깨어나보니 작업중이었음;;; 대충 작성해서 커밋했음. 테스트는 심심할때 해볼 생각.

ISO-2022-KR은 뭔가 도움이 필요할듯하군함.

이제 이번주는 인코딩 이렇게 완료하고 다음주부터는 유니코드 한글에서 가나다 정렬지원(Unicode Collation)등을 작업해야겠군함.

EUC-JP은 Dan한테 미룰까-_-;;;
신고
posted by 아겔-_- 2009.02.23 23:12
2009/2/22 팩터 바이너리를 받아 실행해보니 적용이 잘되어있네요. 

간단히 작성한 문서도 잘 포함이 되있구요. 

new_ui에 대한 작업이 어느정도 이루어지면 한글출력도 팩터ui에서 가능할걸로 보입니다. (pango backend) 그리고 추가적으로 win32, cocoa, x11에서 입력기에 대한 지원을 더하면 완전한 한글환경을 갖출것으로 생각됩니다. :-) 


ㅋ... 매일 매일이 설레고 즐겁군요. :-)
신고
posted by 아겔-_- 2009.02.17 22:20
저의 개인 factor clone에 io.encodings.korean을 push했습니다.

사실 지난 주말부터 factor offical git-repository에 올라와있어서 원하는 사람은(특히 개별적으로 팩터를 빌드하시거나 하시는 분들) 얼마든지 한글코드 지원을 맛보실 수 있었습니다.

Daniel Ehrnberg의 큰 갈굼도움으로 좋은일을 할수있었던것 같습니다. (Daniel, thank you!)

도움말 문서도 얼추 작성했고 보람차네요.

현재로서는 cp949(euckr, uhc, 확장완성형)만을 지원하지만 조합형이나, 쌩뚱맞게 euc-jp코드에 대한 작업도 해나갈 생각입니다. (마지막것두 io.encodings.korean에 넣어볼까요?^^;)

나름 별거 아닌 인코딩 지원이지만, 이를 위해서 많은 지원을 해준 Slava Pestov에게도 고맙네요. (알고보니 저보다 두살이나 어리더군요! 아... 참 인생 헛살았다는 느낌;;)


팩터가 io.encodings.korean와 연관하여 개선된 부분과 개선될 부분도 생겨서 기쁩니다.
  • 리소스 pathname에 vocab:을 지정가능하게되었습니다. 예를 들어, resource:work/io/encodings/korean/cp949.txt
  • 와 같이 work디렉토리나 basis디렉토리에 참조가 있을수밖에 없었는데, 이를 vocab:io/encodings/korean/cp949.txt와 같이 어떤 위치에 있건 vocab의 위치에 따라가게. (현재 git버젼엔 반영)
  • cp949, shift-jis, euc-jp등 unicode.org에서 제공하는 코드 테이블을 이용하여 매핑하는 방식을 공식적으로 지원하기 위한 파서/코드테이블 vocab (작업중)



마지막으로 스샷 하나 올립니다. 아직 ui-listener에서는 유니코드 한글출력이 구현되지않아 어렵지만, 유니코드를 정상적으로 지원하게 설정한 emacs+fuel에서는 한글을 느끼실수있답니다. ^^
신고

'삽질+돈되는짓 > FactorLanguage' 카테고리의 다른 글

Imperative Factor  (0) 2009.02.21
어째서 함수의 조합은 복잡해야만 할까?  (0) 2009.02.19
io.encodings.korean 커밋  (2) 2009.02.17
Factor에서 개발하기  (0) 2009.02.15
Factor History & Features  (0) 2009.02.14
concatenative language?  (1) 2009.02.14
posted by 아겔-_- 2009.02.12 21:59
k은행 파견에도 지치지 않고,(사실 지친 주제에!)

퇴근후 매일 1시간정도 작업해서 4일정도 작업하여 겨우 cp949 인코딩 지원 vocab을 완성했습니다.

단위테스트를 잘 통과해서 기쁘네요. (물론 테스트도 제가 짰지만. ^^;)

어서 official에 반영하고 싶다는 마음인데 아아;;; irc에도 별 응답이 없고. (거기는 아침일까;)
메일링도 잠잠하고;;;

하악하악... happy factor-ing!
신고

'삽질+돈되는짓 > FactorLanguage' 카테고리의 다른 글

팩터는 어떤 언어임까?  (0) 2009.02.13
Why "Factor"?  (0) 2009.02.13
io.encodings.korean을 완성했습니다.  (2) 2009.02.12
factor-kr을 시작했습니다.  (0) 2009.02.08
ProjectEuler 풀면서 한컷!  (0) 2009.02.01
FactorLanguage을 위한 SLIME?  (2) 2009.01.31

티스토리 툴바