IronPython 1.0 Beta 5
IronPython 1.0 Beta 5가 릴리즈되었습니다.
http://workspaces.gotdotnet.com/ironpython
릴리즈 노트 번역해서 올립니다.
안녕하세요,
방금 IronPython 1.0 Beta 5를 릴리즈했습니다. 이번 릴리즈의 초점은 성능 개선입니다. 처음 시작할 때 컴파일하는 시간을 줄이기 위해 메소드 최적화를 on-demand로 합니다. 어트리뷰트 접근 제어를 개선했고, 자주 쓰이는 코드의 오버헤드를 줄였습니다. 그 외에 자잘한 튜닝이 있었습니다.
주) 소스를 diff 떠서 살펴본 결과, 성능 개선의 세부 내용은 다음과 같습니다. 내장 타입 사이의 비교 연산자가 boxing/unboxing을 피하기 위해 따로 처리됩니다. 즉 예전에는 1 < 2가 파이썬 True 객체로 간 다음에 .NET true가 되서 브랜칭이 됐는데, 지금은 파이썬 True를 거치지 않고 바로 .NET true로 갑니다. 데이터 흐름 분석을 해서 로컬 변수 체크를 줄입니다. 만약 a가 항상 대입되거나 또는 항상 대입되지 않는다면, a를 불러올 때마다 NameError를 던지기 위해서 체크를 할 필요가 없습니다. 많은 파이썬 심볼이 정수형으로 변환되어 처리됩니다. (파이썬의 intern()과 비슷합니다.) 따라서 __dict__, __add__, __mul__ 같은 문자열을 주고받는 대신 심볼 테이블의 인덱스만 주고받게 됩니다. 제너레이터 객체에서 불리는 메소드는 주로 next이기 때문에, 제너레이터 객체에 어트리뷰트 접근 제어를 할 때 next만 따로 체크하여 빠르게 처리합니다. (이 마지막 변경만으로 간단한 제너레이터 벤치마크에서 50%에 가까운 성능 향상이 있었습니다.)
늘 그렇듯 많은 버그를 잡았는데, 주로 여러분이 보고해 주신 버그들입니다. 그 밖에, .NET과 파이썬 연동에 중요한 변화가 하나 있었습니다.
public class Foo {
public void Bar(int arg) {}
public void Bar<T>(int arg) {}
}
와 같은 클래스가 있을 때, 이제 보통 메소드를 부르려면
foo.Bar(1)
foo.Bar.__overloads__[int](1)
처럼 할 수 있고, 제네릭 메소드를 부르려면
foo.Bar[str](1)
foo.Bar[str].__overloads__[int](1)
처럼 할 수 있습니다. 이것은 이전 버전에서 인덱스 연산자가 제네릭 메소드를 부르기 위해서만 사용되었던 것과 차이가 있습니다.
버그 리포트와 제안으로 이 릴리즈에 도움을 주신 다음 분들께 감사드립니다: Aaronm, Anthony Tarlano, Eugene Rosenzweig, Shigeru Hemmi, JoeSox, John Platt, Klaus M?ller, Lewis Franklin, Pete Sheill, Rusty Deschenes, and Sanghyeon Seo (접니다).
감사합니다.
IronPython 팀 올림
댓글 달기