IronPython-2.6.1

Posted at 2010/06/10 18:10// Posted in IronPython

http://ironpython.net/

오오 -ㅁ-; iron python 1.x 의 허접함에 실망해서 거의 신경 쓰지 않고 있었는데...


엄청나게 강한 모습으로 다시 돌아왔습니다.

최근 앞으로 변화되는 플랫폼에 대응하기 위해 아래 3가지로 고민하고 있었는데...

1. HTML5 + JavaScript

2. FLASH + Action Script

3. Unity3D + JavaScript, CLR 언어

4. nebula3 + C++



사실 마음에 내키는게 별로 없었거든요.

HTML5 는 핵심인 canvas 기능에 대해 MS 가 딴청부리는 중인데다;
JavaScript 무조건 소스 공개 스타일이 게임에는 적합하지 않아보였고


FLASH 는 애플에서 노골적으로 거부를 하는 상황이죠;

Unity3D 는 과연 커스터마이징이 어느정도 될 것인가... 문제 발생시 대처가 어느정도나 가능할까...
(무엇보다 설치 후 툴이 실행 안되는 모습에 신뢰도가 -ㅅ-;; DEP 문제라는 것 같은데... )

nebula3 는 코어는 맘에드는데 최근 업데이트가 거의 없는데다가;
과연 다른 플랫폼에 대응하려면 엄청난 노력이 필요할것 같더군요.




제가 생각하는 프로그램을 만드는 가장 좋은 방법은

일단 스크립트 언어로 편하게 프로토 타입을 만든 다음
필요한 부분만 저수준 언어로 확장 모듈을 만드는 방법이거든요.


그런데 c 나 c++ 만 10년 정도 하신 분들은 새로운 언어에 대한 두려움아 꽤 많은 것 같더라구요.
더군다나 통합 디버깅 환경도 지원이 안되면... 모르겠다 -ㅁ-)~ 이런 결과가...;

이런 점에서 IronPython-2.6.1 버전은 꽤 괜찮은 솔류션으로 보입니다.

홈페이지 첫화면에 떠있는 대형 문구!

IronPython Tools


for Visual Studio 2010


오오 -ㅁ-);

다운로드 받아서 돌려보니

단독 실행 파일 생성 을 지원하더군요!!



ipy.exe Tools\Scripts\pyc.py /out:test /target:exe /main:test.py /platform:x86


Windows 뿐만 아니라 Mono 가 지원되는 유닉스 계열 운영 체제나 모바일 운영체제도 지원되죠
동일한 바이너리로 말이죠! -ㅁ-)! 오오;


파이썬 모듈은 ctypes 도 가능!


IronPython 2.6.1 (2.6.10920.0) on .NET 2.0.50727.4927
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
>>> ctypes.cdll.msvcrt.puts(b"HAHA")
HAHA
0
>>>


ctypes 가 된다는 말은 .NET 안쓰고
기존에 c/c++ 로 작성된 dll 을 그냥 불러와서 사용할 수 있다는 이야기거든요! 확장 모듈 만들기가 쉽다는 말이죠

>ㅁ<) 와하하~



멀티 코어 시대에 GIL 때문에 난감한 CPython 과는 달리


멀티 쓰레딩도 어느정도 지원한다는 것 같고요~



다만 몇가지 문제가 있긴 한데...

그중 하나가 성능입니다.

2008 년 성능 비교 (음... ;; )
http://ironpython.codeplex.com/wikipage?title=IP20VsCPy25Perf&referringTitle=IronPython%20Performance&ProjectName=ironpython


2010 년 성능 비교 ( 아아-_-;; )
http://ironpython.codeplex.com/wikipage?title=IP261Net20VsCPy26Perf&referringTitle=IronPython%20Performance

2년이 지난 결과가 오히려 더 안 좋다는건 그만큼 CPython 성능이 좋아진걸로 받아드리도록 하죠. 흠흠;;


개별 성능 비교를 보면 극단적인 결과를 찾아볼 수 있습니다.

빠른건 2배 가까이 빠른데

느린건 (구체적으로 말하면 문자열 처리-_-) 2배 이상 느리네요;;


열심히 최적화하다보면 언젠가는 빨라지지 않을까 기대해 봅니다.
(왜 이렇게 느린지는 소스를 한번 뜯어 봐야 할 듯 합니다)



두번째 모듈은 아직까지 Python 모듈 포팅이 완벽하지 않습니다.
자주 사용되는 모듈 중심으로 70% 정도 진행된것 같은데...

신기하게도 제가 자주 사용하는 expat 이 빠졌더군요 T_T)~


덕분에 xml.dom.minidom 을 사용 못하고 있습니다 orz;


스크립트 언어를 쓰는 이상 느리거나 없는 건 만들어 쓰는게 당연하니
큰 문제는 없으리라고 생각됩니다~

이런 이유로 오늘부터 저는 IronPython 의 세계로 들어가겠습니다. 햐햐 -ㅂ-)~
이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/06/10 18:10 2010/06/10 18:10
import sys
import ctypes

class DbgOut:
    def write(self, msg):
        conout.write(msg)
        trace(msg)

trace       = ctypes.windll.kernel32.OutputDebugStringA

dbgout      = DbgOut()
conout      = sys.stdout
conerr      = sys.stderr
sys.stdout  = dbgout
sys.stderr  = dbgout

if "__main__" == __name__:
    print "debug message test"


이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/05/30 15:06 2007/05/30 15:06

파이썬 GUID 만들기

Posted at 2007/05/15 10:50// Posted in python
from ctypes import *

class GUID(Structure):
    _fields_ = [
            ("data1", c_ulong),
            ("data2", c_ushort),
            ("data3", c_ushort),
            ("data4", c_ubyte * 2),
            ("data5", c_ubyte * 6),
        ]

    def __init__(self):
        windll.ole32.CoCreateGuid(byref(self))

    def __str__(self):
        return "%X-%X-%X-%s-%s" % (self.data1, self.data2, self.data3,
            "".join("%X" % (c) for c in self.data4),
            "".join("%X" % (c) for c in self.data5))

    def __repr__(self):
        return "{%s}" % self.__str__()

if __name__ == "__main__":
    print GUID()
이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/05/15 10:50 2007/05/15 10:50