얼마전에 Python 3000에 대한 대략적인 것을 이제 슬슬 정해 보자고 토론 되었던 대로, 오늘 PEP3000이 등록되었습니다. amk와 brett이 지난 PyCon때, 얼마전 토론, 위키에서 나온 내용 등을 토대로 정리한 것인데 처음 듣는 것도 몇개 있어서 상당히 흥미롭군요. 아직 나올 날은 멀었지만 무척 세련되어 질 것 같아서 설렙니다. 주요 차이점들 (아직 그냥 예정이고 결정된 것은 아님) 중 제가 재미있다고 생각한 것들은 이렇습니다.
-
문자열은 이제 유니코드!: 엊그제 블로그에서 얘기했던 대로, 이제 바이트 타입을 따로 신설하고, 자바나 C#처럼 기본 문자열 타입을 유니코드로 가 버릴 듯합니다. 이로써 세련된 다국어 지원을 좀 더 완벽히 지원할 수 있을 것 같네요. ^^;
-
long과 int의 완전 통합: 현재는 int와 long이 따로따로 있으면서 int가 상황에 따라 long으로 업그레이드 되는 어정쩡한 통합 구조를 택하고 있는데, Python 3000에서는 int와 long이 같은 타입으로 값에 따라 내부 표현을 정하며 외부 인터페이스는 완전히 동일한 방법을 택할 듯 합니다.
-
정적 타입 인자의 지원: 효율적인 최적화나 입력값의 제한 등 여러가지 정적 타입인자의 장점을 선택적으로 취하기 위해서, 필요한 경우 정적 타입을 쓸 수 있도록 합니다.
-
모든 클래스가 new style: 현재 Exception을 비롯한 대부분의 라이브러리에서 구식 클래스를 쓰고 있는데, Python 3000에서는 완전히 모두 new style class로 바뀝니다.
-
이터레이터의 대거 도입: dict.keys(), dict.items(), range(), zip() 등을 비롯한 대부분의 리스트를 리턴하는 내장 타입, 내장 함수들이 이터레이터를 리턴하도록 바뀝니다.
-
print, exec, lambda 키워드 소멸: print 키워드가 사라지고 write(), writeln()등의 내장 함수로 대체되며, exec키워드 대신 exec함수가 생기고, lambda는 그냥 없어집니다.
-
백쿼트 (
) 표현 소멸: 파이썬에서 제일 Perl스러운 부호 중의 하나인
가 없어집니다.
-
내장 함수들 대거 소멸: apply, buffer, callable, compile, coerce, input, intern, map, filter, raw_input, reduce, xrange 등 현재 다른 스타일로 대체되었거나 대체되는 중인 내장 함수들이 모두 사라집니다.
이 외에도 앞으로 10배는 더 많이 충격적인 내용이 들어가야 할 것 같은데~ 모두 좋은 아이디어를 생각해 봅시다 크흐흐;
제가 전혀 모르는 lambda 식이 없어지다니. .. 공부하지 않아도 되겠군요. :]
print 키워드는 없어지는 것이 합리적이지만, 이제 겨우 print >>sys.stdout, 에 익숙해진 사람들에게는 참 아쉬운 변화일 듯… =.=’
lambda는 간단한 함수나 이름 짓기 귀찮을 때 즐겨 사용했는데, 저는 결사반대.. (라고 외쳐봐야 소용없지만. -_-)
map, filter, reduce는 itertools에 있는 것들로 대체되는 건가 보군요. 파이썬이 list 처리에 강한 언어여서 흡인력이 있다고 생각했는데, iterator/generator 세상으로 매끄럽게 전환할 수 있을지 모르겠습니다. 물론 아직 먼 얘기지만…=.=
lambda 사라지는 건 저도 반대에요 -_- 그나저나 exec가 함수 되는 건 환영이군요.
map, filter, reduce는 functional 모듈로 이사갑니당. 그리고, lambda도 함수로 비슷한 기능이 제공될 예정입니다. 흐흐. lambda(“x = merong”) 이라던지.. -O-
이게 우찌 돌아가는 일인지…? @_@ Python은 그동안 조그마한 범위에서나마 (큰건 능력이 안돼서) 실무에 써먹을 수 있는 제 유일한 무기였는데, 이젠 또다시 Python맹(盲)으로 전락해야하나봅니다. 우엥~ T_T
그러나 저러나 파이썬 유저들이 펄에 대해 컴플렉스를 은근슬쩍 느끼고 있다는 느낌이 드는건 대체….
알고보면 단칸방 2개 ..
퍼형은 단칸방 부자! ‘ㅇ’)b