Tcl을 임베드할 때 C 쪽 코드가 엽서 한 장에 다 들어간다는 게 정말 좋아요. Tcl_CreateInterp로 만들고, Tcl_EvalEx나 Tcl_EvalObjEx로 스크립트를 평가하고, Tcl_GetObjResult로 답을 읽으면 끝이에요. 넘어가는 건 전부 문자열이고, 문자열은 양쪽이 이미 합의한 유일한 타입이잖아요!
음, 거의요. Tcl_Obj는 문자열 표현을 갖고 있고, 다른 용도로 한 번 쓰이면 내부 표현도 하나 더 들고 있어요. 같은 값을 한 곳에서는 리스트로, 다음 곳에서는 숫자로 쓰면, 쓸 때마다 다른 쪽 내부 표현을 버리고 문자열에서 자기 표현을 다시 만들어요. 이게 shimmering이고, 프로파일에 찍히기 전까지는 보이지 않아요.
넘어가지 않는 게 하나 더 있어요. 스레드요. 인터프리터는 자기를 만든 스레드에 속해서, 호스트가 워커 풀에서 아무렇게나 불러 들어갈 수 없어요. (호스트 프로그램은 이걸 놀랄 만큼 빨리 잊어요.)
그러면 함수 이름 말고 뭐가 넘어가느냐. 텍스트, 그 텍스트가 지난번에 무슨 뜻이었는지에 대한 캐시, 그리고 스레드 정체성이에요. 셋 중 둘은 놓치기 쉬워요.