커먼리습 설정하기, ASDF 시스템 코드를 받기


1. ASDF을 최신 버젼으로 설정한다

(이부분에서 많이 고생했는데) SBCL와 다르게 CLISP, ECL 은 최신 버젼의 ASDF을 내장한걸 패키징해놓지 않았다.

대부분은 문제가 없이 동작하지만, 내가 작성한 커먼리습 시스템에서 실행파일을 빌드할 때 문제가 많았다.

  1. ASDF 의 최신 버젼을 git clone 해서 적당한 디렉토리에 받는다.
  2. make을 내려받은 ASDF 디렉토리에서 실행한다.
    • 실행하면 build/asdf.lisp 파일으로 한 파일으로 뭉쳐서 로딩하게 편안한 파일을 생성해준다.
  3. 내 커먼리습 구현체의 시작설정파일 맨 앞에 다음처럼 추가한다.
    • (load "~/local/asdf/build/asdf")
      • 여기서 나는 $HOME/local/asdf/ 에 ASDF을 받았다고 가정.
      • 그리고 asdf.lisp 파일이더라도, 마지막에 .lisp 확장자는 생략했다.
    • ECL은 $HOME/.eclrc
    • CLISP은 $HOME/.clisprc.lisp
  4. 그리고 중요한데, 그 다음에 Quicklisp 초기화 내용이 오도록 한다.
    • Quicklisp을 초기화하기 전에 ASDF 최신 버젼이 로딩되어 있는게 더 나을테니까.
    • 어차피 위의 (1~3)의 순서대로 ASDF 먼저 설정한 다음에 Quicklisp설치한 다음에 ql:add-to-init-file 실행하면 이런 순서로 추가해준다.

…별거 아닌데, 이거 때문에 빌드한 결과 실행파일이 이상해서 좀 고생했다.

(Common Lisp의 어두운 면) Equality


오늘은 커먼리습의 어두운 면을 이야기 해볼까. 보통 나는 리습 팬보이니까 리습에 대해 불리한 이야기는 잘 쓰지 않는거 같아서 한번 써보기로 생각했다. 그리고 놀랍게도 이 글의 끝에 가서는 다시 이런 리습의 결점을 리습의 위대함으로 승화시키는 단계까지 끌어가 보도록 하려고함.

뭐 커먼리습의 CLHS - HyperSpec을 읽다보면 비슷한데 아주 약간씩 미묘하게 달라서 지원하는 것들이 있다:

이렇게 나열해 놓으면 꽤 무서워 보이지만, 막상 차이를 이해하면 별로 복잡하지도 않아서 나중엔 더 편안해진다. (정말로)

(소프트웨어 고고학) 어째서 `String#replaceAll`처럼 메서드 경로의 구분자로 `#`을 쓸까?


오늘 아침

다음은 오늘 아침 트위터의 타임라인에서 내가 스쳐본 한 스크린샷의 일부이다:

img1

…뭐에 느낌을 받았냐하면, 바로 저 String#replace(..) 이라는 부분이다. (다른 부분에서는 String.prototype.replace(..) 와 같이 썼는데 굳이 저기서만 갑자기 튀어나온 표기법)

사실 나도 종종 내가 작업한 코드의 문서를 쓰거나2 아니면 다른 사람과 텍스트로 대화를 해야할 때 이렇게 표기를 해왔었다.3

각각의 언어들에서 (내가 생각하는) 저렇게 표기하는 근거들은 다음과 같다:

  1. Java: https://www.oracle.com/technetwork/articles/java/index-137868.html
    • @see Component#getGraphics() JavaDoc안에서 다른 메서드, 필드를 참고로 넣고 싶을 때 이게 표준표기법이고 javadoc도 요렇게 써줘야 링크처리를 해준다.
  2. JavaScript
  3. Ruby

스택오버플로우: Use a hash character or a dot when referring to methods and fields in software documentation? [closed]에 답변이 있으나 내가 볼 땐 내 가설이 더 확실한 이야기라고 본다.4