바쁘게 돌아가는 파이썬 3000 요새 소식

파이썬계에서 8월은 파이썬 3000으로 열기가 가득한 한 달이었습니다. 8월 초에 드디어 문자열의 유니코드화 작업이 완료돼서 py3k 브랜치로 머지되었고, 새 I/O 스택도 거의 제 모습을 갖췄습니다. 그리고, 약속을 지키기 위해 드디어 8월 31일(미국 서부시간 기준), 파이썬 3.0a1이 릴리스될 예정입니다.

최근의 변화를 보자면, 문자열 유니코드화는 이미 다른 곳에서 많이 보셔서 지겨울 정도이고, 최근 논란이 많았던 str.format이 얼마 전에 구현이 완료되어서 들어갔습니다. str.format이 그동안 파이썬의 마스코트(?)같았던 존재인 문자열 % 연산자를 대체할 예정입니다.

그리고, 아시아 컴퓨터교육계의 염원(?)이었던 국제화 식별자(i18n identifier)가 드디어 들어갔습니다. (여기에 대해서 OLPC 쪽에서도 관심을 보이고 있더군요.)

그렇지만 아직 토크나이저의 유니코드 처리가 좀 미숙해서 아주 특별한 조건에서만 제대로 동작하고 있는데, 3.0a2 전까지는 어디서든 유연하게 돌아가도록 고치려고 하고 있습니다.

그리고, 전체 디폴트 인코딩 뿐만 아니라, 소스코드 인코딩도 UTF-8이 디폴트로 바뀌었기 때문에, 소스코드를 UTF-8로 작성하면 따로 # coding: 을 쓸 필요가 없어지고, 요새 나오는 언어들하고 비슷하게 가고 있습니다. 🙂

파이썬 3000에 대해서는 전에 쓴 적이 있기 때문에, 구체적으로 다시는 안 쓰고 조만간 파이썬 3.0a1 출시 기념으로 스크린캐스트로 파이썬 3.0을 소개해 드리는 기회를 한번 만들어볼까 합니다. ㅎㅎ; ^_^

파이썬 합성 프로그래밍 환경

오늘은 요새 여러 블로그에서 인기를 끌고 있는
파이썬 합성 프로그래밍 환경(Synthetic Programming Environment for Python)
에 대해 간단한 리뷰를 해 봅니다.

그동안 파이썬에서 행렬 계산은 Numeric/NumPy, 기타 과학 연산은
SciPy 등 속도가 필요한 분야에 대한 해결책을 대체로 제시하고 있었지만
동적계획법(Dynamic Programming)이나 몬테카를로 시뮬레이션 같이 비교, 분기가 대량으로
발생하는 경우 파이썬만 가지고는 도저히 어떻게 해 볼 수 없는 한계가 어느 정도 있었습니다.
Pyrex는 뭔가 좀 답답하고 Psyco는 썩 만족스러운 단계까지
올라가지도 않고, 결국에 눈물을 머금고 C로 주요 코드를 짤 수 밖에 없었습니다.

그래서 몇 군데에서 시도했던 것이 파이썬에서 직접 어셈블리 코드를 실행시간에 생성해서
실행할 수 있는 JIT 어셈블러들이 등장했었는데요. 파이썬 코드랑 어셈블리랑 어색하게 결합하고
있다보니 인라인 어셈블리쓴 C보다 훨씬 더 어색해서 별로 쓰기가 유쾌하지는 않았지요.

합성 프로그래밍 환경(SPE)는 이걸 좀 더 우아하게 해결해보려는 라이브러리 입니다.
OpenSSL에서 사용하는 perlasm같이 스크립트 언어의 자체 문법으로
약간은 추상화된 방법으로 명령을 작성하면, 그 코드가 실행되면서 어셈블리 코드가 생성되고
그게 결국 실행되는 방법입니다. 너무 추상화하면 C나 다름 없으니, 거의 1:1로 맞춰볼 수 있을 정도로
간단하게 처리했지만, 사실 “합성(synthetic)”이란 말에서 드러나듯, 파이썬 문법에 대체적으로
끼워넣어서 재사용성을 매우 높일 수 있다는 점이 장점입니다.

간단한 perlasm에서도 풀어쓰기(unroll)이나 스택 셋업, 인수 대량 전달, 디버그 출력,
클린업 같이 많은 작업들을 라이브러리화 해서 쓰고 있어서, 실제 생성되는 최종 어셈블리 코드보다
훨씬 사람이 보기 쉽고 재사용할 수 있는 코드를 씁니다. SPE에서는 perlasm에서 쓰는 것 뿐만 아니라
벡터연산을 훨씬 쉽고 간단하게 쓸 수 있게 해 주기도 하고, 간단하고 단순노동적인 조건문이나
오프셋 계산 같은 것들을 우아하고 보기 쉽게 쓸 수 있도록 해 줍니다. 게다가 파이썬 코드
안에서 섞어 쓸 수 있기 때문에, 귀찮게 왔다갔다 할 필요도 없습니다.

결국, SPE의 모토는 “Skipping C”라고 하는데, 두 가지 의미가 있습니다. 하나는 원래 파이썬이
C언어로 된 인터프리터, 익스텐션 라이브러리, 컴파일러 등을 통해서 기계어로 실행(+번역)되어
왔는데, 이를 건너뛰어서 그냥 파이썬에서 바로 기계어를 쓰자는 의미로 볼 수 있고,
나머지 하나는 개발할 때 C언어로 개발할 필요를 많이 줄여서 C는 쓰지 말자 뭐 이런 의미로
볼 수도 있겠죠. 즉, 평소같으면 C로 상당수 기반을 만들어서 파이썬에서 사용하는 방식을 채택할
경우라도 파이썬과 SPE에서 제공하는 어셈블리를 쓰면 C 안 쓰고도 비슷하거나 빠른 속도를
낼 수 있다는 얘기입니다.

많은 분들이 이쯤 되면, 속도가 상당히 궁금하실텐데, 간단하게 1000만까지 숫자를 더하는 프로그램을
작성했을 때, 파이썬으로 작성된 코드가 3.64초, 내부 코드 및 자료구조가 모두 C로 작성된
NumericPython으로 0.054초, SPE로 0.019초라고 합니다. (SIMD는 사용하지 않음)
요새 C 컴파일러가 좋긴 하지만, 사람은 알고리즘까지도 변경하면서 최적화할 수 있고, 굳이
프로파일링 하지 않고도 어느 정도까지는 분기 수요를 예측할 수 있다는 점 때문에
아무래도 같은 시간 노력하면 짧은 코드는 SPE로 하는 어셈블리가 C보다 이렇게 빠를 수 있지 않을까 싶군요.
(물론, 요새 유행하는 프로파일링 컴파일러를 빡시게 돌리면 C나 SPE나 결국 비슷한 최고속도에 도달하겠지만요.)

SPE가 주 대상으로 하는 것은 아무래도 과학계산과 멀티미디어 연산이 되겠지만, 사실 과학연산에서
어셈블리를 다룰 정도로 컴퓨터 구조에 대한 지식이 있는 연구자의 수가 그렇게 많지 않은 것을 생각해 보면
기계 지식없이도 어셈블리를 쉽게 할 수 있게 라이브러리가 많이 확충되어서 “합성”만 해도 프로그램이 되면 아주 좋겠네요.
물론, 파이썬에서 도저히 어떻게 해결할 방법이 없던 한가지 프로그램 주제를 비교적 깔끔하게 해결해버렸다는
점에서는 벌써 상당한 가치가 있는 시도로 보입니다.

(참고사항: SPE의 구현인 CorePy는 현재 PowerPC만 지원하고 있고, 라이선스도 오픈소스가 아니라 시험용으로만
사용할 수 있는 라이선스이기 때문에, 이걸로 당장 뭔가 해 보기는 힘듭니다. 🙂

리눅스에 SEED가 들어갔습니다.

예전에 올린 적 있는 리눅스 SEED 구현이 오늘 드디어 git 보관소에 들어갔습니다.

전에도 말씀드린대로, 커널에 들어간 것이기 때문에 웹브라우저나 전자결제 같은 것과는 거의 관련없고, IPsec, crypt-fs 같은 커널에서 사용하는 보안 레이어에만 실제로 적용됩니다. 몇가지 사용 예를 더 생각해보면, 커널 모듈로 뜨는 키보드 보안(해주는 척 하는) 모듈이 유저랜드를 거쳐서 통신하는 경우라던지 그럴 때도 어떻게 잘 하면 쓸 수 있을 것 같기도 하네요;; 어떻게 봐도 사실 일반 최종사용자들이 직접적으로 사용할 일은 거의 없습니다;; ^^;;

FreeBSD에도 넣으려고 했는데, 뭔가 손이 잘 안 가는 것이.. 흐흐 드라마보는 시간 조금만 줄이면 정말 많은 일을 할텐데, 큰일이네요 -ㅇ-;;;

아마도 리눅스 2.6.23은 벌써 RC가 진행 중이라 못 들어갈 것 같고, 2.6.24에는 들어갈 수 있지 않을까 싶네요~

파이썬 euc-kr 코덱에 첫가끝 지원 추가

그동안 파이썬의 euc-kr 코덱에서는 KS X 1001 완성형에 들어있지
않은 글자는 그냥 에러로 처리해 왔습니다. GNU libiconvGNU libc를 포함한
대부분의 오픈소스 프로그램들도 그냥 완성형만 지원해 왔었는데요.
얼마전에 MSIE에서 어떤 상황에서 EUC-KR에서도 첫가끝 코드를 활용하는 사례가 보고되었고, 모질라에서도 2001년부터 이미 첫가끝을 지원하고 있었습니다.

그래서, 파이썬에서도 뭔가 그래도 부록이지만 표준 문서에 있긴 있는 내용이니 지원해야겠다 마음이 들어서, EUC-KR 코덱에 새로 구현하여 넣었습니다. 코덱 이름은 바뀌지 않고 그대로 euc_kr 이기 때문에 사용상 별로 다른 점은 없고, 완성형만 걸러내기 위한 목적으로 쓰셨던 분들은 이제부터 다른 방법을 쓰셔야 됩니다.

예를 들면 이렇게 나옵니다.

적용되는 버전은 호환성 유지를 위해 2.6 이상으로 적용됐기 때문에 앞으로 나올 2.5.2나 2.5.3 버전에는 옛날 동작 그대로 완성형 한글만 변환됩니다.

마지막으로 파이썬의 숨겨진 비밀 하나 공개해 볼까요. 🙂

파이썬 2.4 이상에는 인천여중 학생의 유명한 시(?)가 하나 숨어있습니다. -ㅇ-;; 이렇게 해 보세요.

파이썬 마을 입추 기념 번개합니다

입추 기념(;;)으로 파이썬 마을 번개를 오랜만에 합니다. 사실 그동안 제가 대전에 있어서 별로 모임을 못 가서, 휴가 틈을 타서 한번 서울 갈 핑계를 만들어보고자.. ^_^;;

  • 일시: 2007년 8월 10일(금요일) 오후 8시~
  • 장소: 포스코사거리 JS타워 야후코리아 10층 서니베일 회의실
  • 내용: 오후 8시~9시30분 – 파이썬 3000과 관련된 잡담과 토론. 그 이후 주변 어딘가에서 뒷이야기
  • 참가비: 뒷풀이 비용에서 1/n 더치, 잡담은 참가비 없음 (야후코리아에서 간단한 다과 제공)

참가신청은 파이썬마을 자유게시판에서 선착순 20명 받겠습니다.
장소가 한정되어 있어서 딱 자를 계획이니 꼭 참가하실 수 있는
분들만 신청해 주세요~ 🙂

파이썬 마을 번개 장소를 구합니다

글도 별로 없는 블로그에 광고를 해서 무척 죄송합니다. -ㅇ-;
그래도 곧 번개 소식이 약간 가미되어 있으니 정보가 되지 않을까 하고 예쁘게 봐 주세요. 🙂

이번 주에 여름 기념으로 오랜만에 파이썬 마을 번개를 한번 할까합니다.
그냥 번개만 하면 썰렁하니까 Python 3000에 대한 얘기를 조금 하다가
밥먹고 뒷이야기를 하는 자리를 만들려고하는데, 우선 조용하게 모여서
얘기할 곳이 필요해서, 토즈 같은 모임 전용 공간을 쓸 수도 있겠지만
참가비를 안 받고도 할 수 있으려면 혹시 파이썬 마을 회원 분들 중에서
회사나 학교에서 공간을 빌릴 수 있는 분이 있으시다면 그 편이 편할 것 같아서
우선 공개적으로 한번 구해 봅니다.

공간은 20명 내외가 원형또는 사각형으로 모여서 얘기할 수 있는 곳이면
좋구요. 프로젝터를 사용할 수 있어야 합니다. 물론 많은 분들이 쉽게
모일 수 있어야 하기 때문에 되도록 서울에서 교통이 편리한 곳이면 좋겠습니다.
시간은 금요일 저녁이나 토요일 오후로 생각하고 있습니다.

참가신청은 장소에 따라서 시간이 정해진 후에 따로 파이썬 마을에서 받을 예정이니 우선은 장소 대여가 가능한 분 있으시면 알려주세요 ^^;