By 카메론 레이어드
관련 기사
조금만 노력하면 컨티뉴에이션을 임포트하는 등 스택리스 파이썬 기반의 프로그램을 스스로 작성할 수 있다. 이 기사에서는 원하는 파일을 어떻게 찾고 설치하는지, 설치한 프로그램이 적절하게 작동하는지를 어떻게 확인하는지 등, 프로그래밍을 시작하는 방법에 대해 설명할 것이다.
깨끗한 코드
크리스찬 티즈머(Christian Tismer: 스택리스 파이썬을 만든 사람)는 거의 WinNT 환경에서만 작업하는데, 스택리스는 조사해야 할 프로젝트라고 주장한다. 짧은 시간동안 그는 소스 코드를 잘 다듬었기 때문에, 유닉스와 맥 OS에서도 사용자가 직접 이 프로그램을 사용하여 시스템을 구축할 수 있다.
만약 Win95, Win98, WinNT, Win2000이나 팜 III에서 작업하고 있다면,
스택리스 파이썬 홈페이지에서 설치 패키지를 다운로드 받기만 하면 된다.
- 스택리스 사이트에 있는 파이썬 1.5.2 소스 번들(bundle)을 다운로드 받아라.
- 다운로드 받은 파일을 예를 들어 라는 디렉토리에서 압축을 풀어라. 다시 말해서, Python-1.5.2.zip 의 복사본을 $WORKING1 디렉토리에 넣고, 압축을 풀라는 것이다. 그 내용이 $WORKING1/Python-1.5.2와 아래에 나타날 것이다.
- chmod +x $WORKING1/Python-1.5.2/configure.
- 스택리스 소스를 다운로드 받아라.
- 다운로드 받은 스택리스 소스를 $WORKING2/src 에서 압축을 풀어라.
- 다음에 나와 있는 소스를 복사해라.
tar -cf - -C $WORKING2/src
Python/*.c Objects/*.c
Include/*.h Modules/*.c
Modules/Setup.in.
| tar xpf - -C $WORKING1/Python-1.5.2
|
- 평소에 하던 대로 파이썬을 다음과 같이 생성하라.
cd $WORKING1/Python-1.5.2
./configure
make
make install
|
네 번째부터 다섯 번째 단계는 스택리스에서만 필요한 것들이다.
스택리스 웹 사이트에서는 현재 스택리스가 작동하는 솔라리스만을 다루고 있다. 하지만 내 경험상 FreeBSD, Tru64 Unix, 리눅스 등 다양한 컴파일러에서도 아무 문제 없이 사용할 수 있을 것이다. 스택리스 사용자들과 이야기를 해 보면, 다양한 유닉스 환경에서 소스가 잘 작동한다는 것을 확인할 수 있을 것이다.
스택리스 파이썬으로 무엇을 해야 하는가?
일단 첫 번째 스택리스 파이썬을 구축한다면, 양방향으로 인터프리터를 시작하고
을 하는 것 만으로 간단하게 "완전성 검사"를 할 수 있다.
이 단계에서 문제가 생긴다면, 위에서 설명한 어느 단계를 잘못 했기 때문이거나 당신이 설치한 파이썬보다 버전이 오래된 것을 수행하고 있기 때문일 것이다.
테스트를 좀 더 재미있게 만들려면, 컨티뉴에이션 기반의 계수기로 시험해도 된다. 이 컨티뉴에이션은 파라미터를 발신, 수신한다:
import continuation
def looptest(n):
my_continuation = continuation.current()
k = my_continuation.update(n)
if k:
print k
my_continuation(k - 1)
else:
del my_continuation.link
looptest(3)
|
이것을 수행할 때, 단지
만을 보면 된다.
이 시리즈 중 첫 번째 기사였던 "스택리스 파이썬 소개"에서, 컨티뉴에이션은 미래의 프로그램의 계산을 반영한다고 쓴 바가 있다. 미래에 사용될 경로(path)를 파라미터화(parameterize) 함으로써, looptest 는 간단한 카운트 다운 루프(count-down loop)를 코드 입력할 수 있다. 각각의 루프를 반복하면, 코드가 파라미터 k의 현재 값을 시험하고 프린트한다. 그 뒤에 나오는 my_continuation 을 사용하면 프로그램이 마지막 상태에 가깝게 진행된다. 이것은 재귀 반복(recursion)을 사용한 루핑과 비슷한 가치를 지닌다.
더 구체적으로 논의하자면, my_continuation은 언제든지 할당을 k = my_continuation.update()로 옮길 수 있는 컨티뉴에이션이다. 만약 할당이 수행되면, k는 컨티뉴에이션이 보낸 값을 받는다. 만약 k값이 0이라면, 컨티뉴에이션은 버려지고, 프로세싱은 looptest() 밖으로 다시 돌아간다. 그렇지 않다면, my_continuation(k - 1)의 효과는 할당에 통제를 할당으로 다시 되돌리지만 인자(argument)에 새로운 값을 주게 된다.
이 설명에 당황할 필요는 없다. 컨티뉴에이션은 추상적이라서, 처음 그것을 접할 때에는 모든 사람들이 애매하다고 생각한다. 하지만 스택리스 파이썬의 핵심은 컨티뉴에이션이 재귀 반복이나 통제 흐름 상태를 일반화한다는 것이다. 컨티뉴에이션으로 looptest가 구현될 수 있어서, 다른 장치들 사이에서도 연산이 하나의 번역 환경에서 다른 것으로 이동이 가능하며, 영속이거나 나중에 다시 시작하도록 만들 수도 있으며, 다른 컨커런시 모델을 스레딩에 부기를 해야 하는 어려움 없이도 지원할 수 있다.
컨티뉴에이션으로 카운트할 수 있게 되었다면, 스택리스에 의존하는 파이썬을 작성할 기본이 되어 있는 것이다. 사실 컨티뉴에이션을 이해하는지의 여부에 상관 없이, 컴퓨터에서 사용할 예제만 가지고 있다면, 컨커런시 구조를 이행할 수 있으며, 이렇게 하는 것이 더 이해하기 쉬울 지도 모른다. 마이크로스레트 작업은 파이썬의 창시자인 귀도 반 로섬과(Guido van Rossum) 마이클 플레쳐(Mike Fletcher)가 만든 윌 웨어(Will Ware)의 패키지를 가지고 하면 제일 하기 쉽다. 이것의 장점은 점점 강화될 것이다.
아이디어가 모든 것을 만들어 낸다.
티즈머는 스택리스에서 가장 중요한 것이 바로 아이디어라고 강조했다. 티즈머가 스택리스 아키텍처를 강화하고 다듬는 일을 계속 하고 있기 때문에, 구현의 세부사항과 심지어는 프로그래밍 인터페이스는 내년까지 변할 것 같다. 한편, 티즈머와 그의 동료들은 프로그램을 주의 깊게 디자인하기 때문에, 스택리스 파이썬으로 작업한 것을 다른 작업과 연계시킬 수 없는 사태가 올 것 같지는 않다. 예를 들어서 당신이 점점 사그러들 마이크로스레딩 정의를 사용한다고 해 보자. 스택리스에서는 더 일반적인 것을 지원하기 때문에, 애플리케이션이 양립 가능하도록 정의를 쉽게 덮어쓸 수 있을 것이다.
스택리스는 유동성이 있기 때문에, 스택리스 파이썬이 무엇인지에 대해 초보자들이 명확한 개념을 잡기는 힘들 것이다. 스택리스 파이썬은 흥미로운 컨커런시 구조를 더 유용하게 만들기 위해 파이썬의 구현을 다시 쓴(rewrite) 것이다.
동시에, 스택리스 구현은 계속 개발될 것이다. 적어도 세부 사항들은 개발될 것이다. 더 혼란스러운 것은, 파이썬 코딩의 단계에서 스택리스를 표현하는 유일한 방법이 컨티뉴에이션 모듈이라는 점이다. "프리젠테이션" 층이 스택리스 파이썬의 디자인 중에서 가장 많이 변하는 부분이기 때문에 아마 그 점이 혼란스러울 것이다. 반 로섬과 그의 동료들이 한 실험에서는 컨티뉴에이션에서 구현한 것 보다 원래 있던 코루틴으로 구현한 것이 두 배 정도 빠르다는 것이 증명되었다.
결론: 지금 스택리스를 가지고 일할 수 있다. 그것을 잘 활용하라. 세부적인 사항들은 많이 변하겠지만, 혁신적인 컨커런시 추상이라는 테마를 항상 인식할 수 있어야 한다. 현재 스택리스 이야기는 복잡하지만 일단 수용되고 표준화되기만 하면 그다지 복잡하지 않을 것이다.