레이블이 Clojure인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Clojure인 게시물을 표시합니다. 모든 게시물 표시

2015년 9월 11일 금요일

Clojure 간단한 코드 실행해보기

요즘 꾸준하게 매일 조금씩 Clojure를 공부하고 있다. Living Clojure에서 추천하는 7주 과정 진도에 맞춰 이번주까지 4Clojure 문제를 주로 많이 풀었고 다음 주 부터는 몇가지 카타를 풀어볼 예정이다.

4Clojure 문제들은 함수를 하나 작성하는 것이 주된 것이고, 그러다보니 간단한 클로져 코드를 작성하고 결과를 확인해 볼 일이 많다. 그런데 아직은 이 과정이 뭔가 매끄럽지가 않다.

지금 시도해보는 방법들,

1. lein repl 


터미널에서 바로 repl을 뛰울 수 있는 간단한 방법. lein이 생각보다 실행되는데 시간이 걸린다. 게다가 repl까지~
또, repl은 IPython과 같은 상호작용성이 부족하다. 

2. emacs + cider + nrepl


아직 emacs가 익숙하지 않지만 단축키며 설정이며 하나둘씩 익혀보는 중. .clj파일로 저장하거나 직접 Clojure 모드로 설정을 바꾸고 나면 관련 단축키들을 사용할 수 있다. C-c M-j 라는 복잡한 단축키를 누르면 cider-nrepl도 연결되어 버퍼와 repl을 왔다갔다 하면서 조금씩 바꿔볼 수 있다. 단순히 repl만 있는 것 보단 낫다.

다만 emacs가 아직도 손에 익지 않아서 ㅠ.ㅠ 게다가 emacs를 띄우는 거나 repl 띄우는게 여전히 조금 무거운 느낌이다.  (맥에서는 그나마 조금 나은데, 윈도에서 이맥스는 처음 실행할 때 더 느린것 같음) 바로 뭔가 타이핑하고 결과 보고 .. 하려고 할때는 좀 ..

3. LightTable instarepl (http://lighttable.com/)


코드를 작성하는 중에도 인라인으로 실행 트레이스를 보여주는 건 매우 파워풀하다. repl의 진화된 형태. 단축키로 문서를 열어본다든지 자동완성이라든지.. 등등도 좋다.

다만 중간중간 LightTable이 먹통이 되기도 하고, 역시나 instarepl을 처음 띄우는 게 느리다. ㅠ.ㅠ  
안정성/성능 등에 아직은조금 문제가 있는 것 같음.

4. tryclj (http://www.tryclj.com/)


단순히 repl만 원한다면 이 방법이 제일 편한 것 같다. 로컬보다 리모트라니 -.-;;;  (물론 repl이어서 상호작용성에는 똑같은 단점이 있다)


이 밖에도 IntelliJ IDEA + Cursive 등의 방법도 있지만, 바로 뭔가 코드를 작성해보려는데 프로젝트 생성하고 REPL까지 띄우는 건 매우 번거롭다. 이미 이 과정이 선행되어 있다면 emacs보다 조금더 편한 방법이 아닐지..


이것 저것 느린걸 보면 내가 뭔가를 잘못 설정하고 쓰는 것이든가, 참을성이 부족하든가 둘 중 하난가 싶기도 하다. 그냥 repl하나, emacs하나, lighttable 등을 미리 다 띄워놓고 언제든지 스위치해서 하는게 제일인가 싶기도 하고.

2015년 9월 7일 월요일

Clojure의 lazy

http://clojure.org/lazy 를 보면 초기 lazy-cons 로 구현하던 lazy sequence를 lazy-seq을 이용하게 바꾼 내용을 설명하고 있다.

평가 지연을 위해 람다를 사용하되 어떻게 클로져에 담긴 레퍼런스를 관리할것인가..

Lazy를 구현하려면 이정도의 고민은 해줘야 하나 싶다.

2015년 8월 19일 수요일

"Clojure 시작하기" 시작하기

Clojure로 뭔가를 만들어보겠다고 덤비면서 공부하는 내용들을 정리해보려고 한다. 누군가에게는 도움이 될지도 모르니까. 적어도 내게는 도움이 될거다.

최근에는 페이스북, 구글+, 트위터 등의 SNS와 미디엄, 브런치, 텀블러 등의 좀더 단순화된 블로깅 서비스들이 많아서 블로그는 한물 간것 같지만, 그래도 뭔가를 정리해보려면 블로그가 제일 만만한 것 같다.

----

새로운 언어로 뭔가를 해보자고 덤비면 좀 막막하다.

Clojure와의 첫만남을 살펴보면...  한참 Ruby, Erlang 등이 유행처럼 알려지고 책들도 한두권씩 나오던 그때 번역서를 하나 보다 만 것이 첫 만남이었다. 아마도 2010년 전후?... SICP라는 책을 공부하겠다고 덤비면서 Scheme(나중에 Racket)을 알게 되었고, Clojure는 Scheme의 JVM 버전 정도인가? 하는 느낌만 남아 있었다.

하지만 Rich Hickey (Clojure를 만든 아저씨)의 발표는 재미있어서 Clojure는 공부 안하면서 이 아저씩의 발표는 줄곧 봐 왔었다. 그 중에는 도저히 무슨 얘기인지 알아먹기 힘든 이야기들도 많았지만 Clojure에 대한 이야기는 그런데로 알아들을만 했다. Clojure 만의 설계 철학이랄까, 아니면 Lisp하는 사람들의 우쭐거림(?)이 뭔가 있어 보이기도 했고 말이지. (특히 매크로! 멋있지 않나?)

그러다가 ClojureScript 개발자인 David Nolen 도 레이더에 잡혀서 이 아저씨의 동영상도 많이 봤다. 자기가 어떻게 공부했는지, 공부하는데 그치지 않고 그것들을 어떻게 실제로 구현해보고 실험해봤는지, 그 결과가 어떻게 Core.async 혹은 Core.match 등에 녹아들었는지 등의 발표들은 보는 것만으로 즐거웠다. 아마, ClojureScript 발표는 JS컨퍼런스 어딘가의 발표에서 본것이었을거고, 원래 Clojure에 막연히 가져왔던 로망과 맞물려서 굉장히 맘에 들었던 모양이다.

SICP만 보고나서 Clojure를 접했던 처음과, 그동안 동영상도 많이 보고 Haskell/Scala 등으로 함수형 프로그래밍도 어느정도 익히고 나서 보는 지금은 분명 다른 느낌일거라 기대한다.

(이미 2~3주 작업을 해 오면서 '많이 다름'을 절실히 느끼고 있다. -.-;;)

---

이제 정말 '시작하기'를 어떻게 했나 돌아보자.

새로운 언어를 시작할 때마다 대개 비슷한데, 난 먼저 초간단 책(이미 책이 나와있다면..)을 하나 스르륵 훑어보는 것으로 시작한다. Clojure의 경우엔 비교적 최근에 나온 Living Clojure 라는 책을 골라서 말그대로 초스피드 대충대충 훑어봤다. 뭐 직접 짜보려 덤비면 기초적인 함수 하나도 몰라서 일일이 구글링 해야 하는 수준이지만, 그래도 뭐가 있구나를 빨리 파악해둬야 하니까..

그런 다음으로 고른 책은 Reactive Clojure Programming 이란 제목이다. 이건 최근에 Rx에 관심이 많았던 것이 반영된 결과다. Rx를 이용하여 Asynchronous/Event-based programming을 어떻게 하나 보여주고, 이걸 다시 Core.async로 어떻게 하는지 비교하여 보여준다. 이 책을 읽으면서는 Clojure 코드가 어떤식으로 만들어지는지, 혹은 다른 라이브러리를 가져다 쓸때 어떤 식이 되는지에 포커스를 두었다.

(팀 계정으로 safaribooksonline을 이용할 수 있으니 얼마나 다행인가!)

1, 2주 정도 지나면서 그나마 기본적인 lein 명령어나 프로젝트 구성, 프로그램 구성이 눈에 들어오고, 코드도 (구글링의 도움을 받아) 읽을 수 있게 되면서 Korean Clojure User Group (구글 그룹스)에 기웃거리기 시작했다. Korean Lisper에서 분리되어 2015년 생겨난 그룹인데, 눈팅만 해오다 관심가는 글에 답글도 달기 시작했다. 사람들이 Clojure로 뭘 하는지, 뭘 어려워 하는지 등을 아는 것도 도움이 되니까!

지난주부터 시작한 것은 Clojure 팟캐스트 듣기! 물론 Clojure 관련 동영상 시청은 줄곧 하고 있는데, 팟캐스트도 듣기 시작했다. 걸으면서 동영상 보다보니 나중에 눈이 초점도 잘 안맞고 간혹 스크린캐스트의 글자들이 너무 작아서 넥서스6 풀스크린으로 봐도 잘 안보이는 등의 문제도 있어서 팟캐스트도 도전하기로 한 것. Clojure 뒤에 있는 Cognitect라는 곳에서 팟캐스트를 하고 있길래 그거 하나 듣고, 또 오늘은 MostlyLazy라는 팟캐스트를 하나 들었다. 역시 발표나 스크린캐스트에 비해서 초대손님 불러다가 자기네들끼리 떠들고 하는 팟캐스트는 영어의 장벽이 더 느껴졌다. ㅠ.ㅠ

그리고 마지막으로... 이렇게 블로깅까지 시작하게 된 것!

시작!
홈