Lisp을 공부하면서 cmd창의 REPL환경에서 코딩은 역시 작은 규모의 테스트만 용이하기에, 귀찮아서 미뤄뒀던 Emacs에서 lisp환경을 구성하기로 결정. 윈도우에서 환경을 구축해야 했기에 과정이 너무 고달펐고, 온갖 삽질을 다하다가 허무하게 찿은 방법이 있기에 삽질의 여정을 기록으로 남기고자 페이지를 만듭니다.
첫번째 여정 ¶
현제 나의 emacs는 cygwin emacs와 gnu emacs 두개를 쓰는데(어짜피 .emacs 설정파일은 공유해도 문제 없음!) emacs에서 lisp 프로그래밍 환경을 원활하게 세팅해줄 emacs 모드가 필요했기에 구글링을 통해 찿아보았다.
그 결과 보통 사람들이 구성하기로는 emacs + slime(emacs interative lisp mode) + sbcl(steel bank common lisp)을 쓰기에 나도 clisp을 쓰던차에 이 구성을 택하였다.
우선 HOME 환경변수에 세팅해둔 위치에 따로 폴더하나를 만들어서 다운 받은 slime의 압축을 풀었다. 순진한것, 이때까지만해도 모든게 탄탄대로로 진행될줄 알았겟지.. 하지만 비극의 시작은 이때부터 시작됬다.
두번째 여정 ¶
맨처음에 참고한 사이트는 구글 그룹스에 lisp을 좋아하는 사람들의 모임?에서 번역한건지 만든건지 모를 글을 참고해서 조금씩 환경을 구축하엿다.(http://lisp-korea.wikispaces.com/IDE+for+Lisp) 이 사이트에서 설명한대로 slime의 path를 설정하고, sbcl.exe의 경로를 설정한뒤에 emacs를 실행시키자,
(add-to-list 'load-path "c:/lisp/slime/") (setq inferior-lisp-program "c:/lisp/sbcl/sbcl.exe") (require 'slime) (slime-setup '(slime-fancy slime-fuzzy slime-c-p-c)) (setq slime-net-coding-system 'utf-8-unix)
그랬더니 이게 왠걸 이상한오류가 뜬다?!
Spawning child process: invalid argument.
이게 무슨 소린고하며 요모조모 살펴봐도 도무지 모르겠어서 다시 구글링을 하자, 상당히 유명한? 오류인가보다 나와 같은 증세를 호소하는 여러사람들이 끙끙 신음을 앓은 흔적들이 여기저기 보인다. 일단 신뢰성이 가장높은 stack overflow 사이트의 링크로 들어가서 내용을 확인해보니...음.. 무슨말인지 모르겠다. 해석도 해석이거니와, 내가 겪고있는 문제와는 약간 맥락을 달리하는것같아 다른 링크로 들어가 찿아본다.
이러기를 몇번 반복후 이거 심상치않음을 느끼고 머리가 아파온다. solution을 찿았다는 사람은 딱 2명을 보았다. 그리고 이는 모두 환경변수 문제라고 말해오고 각각 다른 해결책을 제시한다. 둘다 시도해보고 실패하여 좌절에 빠진다. 아....이 해결책을 제시한 사람들도 매우 stressful problem 이라서 다른사람에게 도움이 될까 공유한거라는데, 되질않는다. 가슴이 답답하여 그냥 다른일을 하는걸 결정한다.
세번째 여정 ¶
아침에 일어나자마자 어제 골머리썩힌 이녀석을 혼쭐내주기위해 다시 컴퓨터를 붙잡았다. 마음을 차분히 가라앉히고 어제 얻은 실마리를 떠올려본다. 음.. 환경변수가 문제라는거지... 그럼 이를 키워드로 넣어서 다르게 검색해보자. 새롭게 나온 페이지가 범람하듯 쏟아진다. 쭉 훝고있는데 문뜩 눈에 띄는 페이지가 보인다.(http://lists.common-lisp.net/pipermail/slime-devel/2008-May/007331.html) 이럴수가 나의 증상과 100%일치한다. 흥분을 가라앉히고 차분하게 보는데 문제는 다름아닌 아래와 같음을 발견했다.
- 최근에 올라온 sbcl 1.0.13버젼부터는 설치할때 환경변수 SBCL_HOME(이게 이멕스가 참고하는 sbcl의 설치된 위치인것같다.)과 Path가 시스템(os) 재시작을 하지 않으면 인식되지(propagated)않는다.
- 혹은 당신이 .emacs(혹은 init.el) 설정파일에 path를 잘못 입력했을수도 있다. 예를들어 만약 당신이 (setq inferior-lisp-program "C:/Program Files/Steel Bank CommonLisp/1.0.13/sbcl.exe") 이런식으로 입력했다면, 되지 않는다..(왜?!?!? ㅠㅜ) 고로 당신은 (setq inferior-lisp-program "sbcl")과같이 입력해야한다.
추가 여정 ¶
- 혹시 여기에서 sbcl대신에 clisp을 쓰고 싶은 사람이 있을 수 있다. 그런분들은 clisp의 버그가 하나 있는데.. 만약 설치를 다하고 inferior-interpretor를 clisp으로 설정한후 m-x slime으로 슬라임을 실행할때 polling "이상한경로" count..1..2..3 이런식으로 emacs 하단의 미니버퍼에 계속해서 뜬다면, 그리고 REPL 화면에 뜨는 오류가
OPEN: Directory #P"C:\\DOCUME~1\\USERR~2\\IMPOST~1\\Temp\\" does not exist
- 이런식이라면, 이는 emacs의 variable중에 temporary-file-directory라는 녀석에 저 디렉토리 url이 저장되어있는데 저 url 중에서 ~1이나 ~2같이 되어있는부분을 제대로 완전한 폴더로 고치면 경로를 올바르게 찿아가서 버그가 해결된다...