태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

'java'에 해당되는 글 1건

  1. 2010.08.08 (1/2) Programming in clojure (4)

(1/2) Programming in clojure

Tech 2010. 8. 8. 13:35
Programming in Clojure 를 지르고 3일. 이건 뭐하는 녀석일까? 라는 세근세근한 기분으로 책을 한번 주욱 훑어보고, 몇 개의 짧은 코드를 만들어 보았다. 더불어 이맥스에도 붙여 보고 ... 그리고 천천히 다시 읽기 시작해서 절반 정도. 여기까지 보고 난 감상(?)을 정리한다. 나머지 절반을 더 읽고 나서는 지금의 생각이 번복될 수도 있다.

  * 설탕문법으로 가득하다

    이건 좋다/나쁘다로 나누기는 좀 어려운 부분이다. 전체적으로는 리습 방언에 항상 따라다리는 Bad-point 인(역시 사람차가 나지만) **괄호난무**에 대한 방비가 좀 있다. 예를 들어서,

(let ((a 1)
      (b 2))
  (+ a b))

이런 스킴(리습?)코드가 클로져에서는

(let [a 1
      b 2]
  (+ a b))

이렇게 풀린다... 잘 보면 괄호를 하나 덜 사용했다. 이것 말고도 괄호의 Depth를 줄이고자 한 노력이 엿보인다. ... 하지만 이로써 <코드 자체가 Parsing tree> 라고 하기에는 조금 어려운 듯도 하고, 아닌 듯도 하고 ... 책에서는 가끔 저 Bindings 부분을 이렇게 풀어놓곤 하는데, 처음 봤을때 헷갈려서 약 3분 정도 정신을 못차렸다.

(let [a 1 b 2] (+ a b))

이렇게 써놓으면 a<-1, b<-2 처럼 안보이잖아... ㅠ_ㅠ 당황했다규... ㅠ_ㅠ

그 외에도 "한 가지 일을 하기 위한 여러가지 설탕" 들이 존재한다. 내가 처음... 은 아니고 가장 오랫동안 만지고 있는 리습 방언인 스킴은, SICP를 통해서 접해서인지는 몰라도 "문법을 기억 할 필요가 없는 언어" 였는데, 클로져는 그렇지는 않다. 물론 교육용으로 디자인된 언어랑 비교하는거니 공정하진 않지만, 이렇게 기억할게 많은거(그래봐야 자바나 C++에 비하면...) 어려운데... 그래도 손에 조금만 익숙해지고 나면, 큰 어려움 없이 다른 리습 계열 언어에서 만들던 코드를 클로져로도 만들 수 있다.

주의할 사항은 - 책에서도 주의하라고 나온다!

(if '()
    true
    false)

빈 리스트가 nil 이 아니다, 빈 리스트는 참이다, 라는걸 주의해서 기억해야 한다.

그 외에, 스킴과 들여쓰기 컨벤션이 좀 다른 듯 한데 이거 은근히 신경쓰인다. ㅠ_ㅠ

  * 자바와 이다지도 가깝다니...!

    난 자바에 그다지 익숙하진 않지만, 클로저로 코드를 만들다가 - 어... 이거 빌트인이 있을 것 같은데 모르겠어...?? - 정도의 느낌이 들면 그냥 javadoc 을 띄워 찾은 다음에 자바쪽 API 를 사용해버릴 수 있을 정도로 쉽다. JVM위에 올라간다는 건 이런 것인가... 우왕 +_+

내가 자바에 조금 더 익숙했더라면, 이것 저것 많이 해볼 수 있었을텐데 - 자바랑 친하게 만들어놔도 내가 자바랑 안친해서 ... 그래도 방대한(맞지?) 자바쪽 라이브러리들을 쉽게 가져다 쓸 수 있다는 점은 매력적일듯. 거꾸로도 마찬가지이다. 클로져로 만든 함수들을 자바에서 가져다 쓰는 것도 쉬운 듯 하다.

-- Clojure's functions implement Runnable and Callable.

  * Functional?

    책에서는 몇 장에 걸쳐 장황하게 Sequence를 다루는 여러가지 빌트인들에 대한 이야기를 한다. 그 자체는 Lisp 방언이라는 관점에서 별로 특별한 것은 없고, 그 여러가지 Seq-able 아이들이 Java collection 과 어떻게 연결되는지에 대해 간간히 나오는 설명이 꽤 중요할 것 같다. ... 자바쪽의 피쳐를 잘 가져다 써야 클로져가 의미있는거잖아? - 자바와의 Integration 없이 언어 스펙만 보면 딱히 특별한 점은 그다지 ... - STM이 언어 스펙이라고 하면 좀 도드라져 보일 수도 있겠지만! ... 혹 이런 류의 개념들에 익숙하지 않다면 - Pure java/C/C++ programmers - 책에서 설명하는 sequence(Lazy evaluated!)에 대해 잘 읽어보고 감을 잡는 것도 좋을 듯 하다. 혹시나 파이썬 유저라면, itertools 패키지를 잘 뒤져보면 ... ...

  * Rich Builtins/Libraries

    (아마) SICP만 봐서 그런거겠지만, 언어에 딸려오는 기본적인 피쳐들이 (Scheme 에 비해서) 풍부하다는 사실에 감동. SICP에서 하나씩 직접 구현했던... 많은 것들을 그냥 쓸 수 있다. 사실 이건 클로져가 아니라 clisp 에서도 마찬가지일텐데(ㅠ_ㅠ), 그래도 좋은건 좋잖아.

게다가 - 위에서 한 이야기와 중복이겠지만 - 자바쪽 API가 거의 언어 빌트인 수준으로 노출되어 있어서 아예 레퍼런스로 javadoc을 띄워놓고 작업해도 될 정도라서, 우왕ㅋ 굿ㅋ.

남은 절반은 다음 주 중에 읽고 리뷰 2/2 를 후다닥 쓰자.

-----

클로져와 직접적인 연관이 있는 것은 아니지만, 책에서 기억나는 구절을 하나만 뽑아본다면:

-- Don't write ugly code in search of speed. Start by choosing appropriate algorithms and getting your code to simply work correctly. If you have performance issues, profile to identify the problems. Then, introduce only as much complexity as you need to solve those problems. - 격하게 공감 =3=3

리팩토링, TDD 같은 류의 책에도 조끔씩 핀트는 다르지만 큰 맥락에서는 비슷한 얘기들이 많이 등장한다. Complexity는 보이지 않는 곳에 추상화시켜 던져 둘 수 있는 것이 좋고, 그렇다면 Simple and Naive code 를 나중에 바꿔치기 하는 접근이 어느정도 <추상화를 강제/유도> 할 수 있다.

'Tech' 카테고리의 다른 글

Thrift in D  (6) 2011.05.15
fix: ugly gitweb page  (3) 2010.12.12
(1/2) Programming in clojure  (4) 2010.08.08
자바스크립트로 벽돌깨기를 만들어보고 싶은데 ... ...  (5) 2010.07.24
Bit count with CUDA (T_T)  (3) 2010.05.16
iterator invalidation  (5) 2010.05.10
Trackbacks 0 : Comments 4
  1. Favicon of http://etnalry.pe.kr 레타라슈 2010.08.09 10:21 신고 Modify/Delete Reply

    기억나는 구절이겠지..

  2. Favicon of http://zerosumz.tistory.com 옵시디안 2010.08.11 09:05 Modify/Delete Reply

    우왕 요즘은 클로저가 대세네용 ~

    • Favicon of http://deisys.net dgoon 2010.08.11 11:00 Modify/Delete

      대세라기보단 "새 Lisp 방언이 나왔네?" 정도...

      근데 확실히 Java 개발자 기반이 강해서 그 득을 보긴 볼 듯 해요. ;-)

Write a comment