Seite 1 von 1

regular expressions: PyPy <-> CPython...

Verfasst: Montag 15. August 2011, 14:04
von jens
Hab mal meine unitests von python-creole unter PyPy laufen lassen und Fehler entdeckt.

PyPy (pypy-c-jit-43780-b590cf6de419-linux64):
Python 2.7.1 (b590cf6de419, Apr 30 2011, 02:00:34)
[PyPy 1.5.0-alpha0 with GCC 4.4.3] on linux2
Raus destilliert ist es u.a. das:

Code: Alles auswählen

import re

link = re.compile(
    r'''(?P<link>
        \[\[
        (?P<link_target>.+?) \s*
        ([|] \s* (?P<link_text>.+?) \s*)?
        ]]
    )''', re.VERBOSE | re.UNICODE
)
def test(match):
    print match.groupdict()
link.sub(test, "1 [[internal links|link text]] test.")
Rauskommen sollte (tut es auch mit CPython):

Code: Alles auswählen

{'link_target': 'internal links', 'link': '[[internal links|link text]]', 'link_text': 'link text'}
Mit PyPy kommt allerdings das raus:

Code: Alles auswählen

{'link_target': 'internal links|link text', 'link': '[[internal links|link text]]', 'link_text': None}
Jemand eine Idee?

Re: regular expressions: PyPy <-> CPython...

Verfasst: Montag 15. August 2011, 15:10
von jens
Nach einer Nachfrage im IRC auf #pypy ist es wohl ein Bug, der in der aktuellen nightly build gefixed ist :)

EDIT: Jup, mit der aktuellen nightly build passiert es nicht mehr...

Re: regular expressions: PyPy <-> CPython...

Verfasst: Montag 15. August 2011, 22:03
von snafu
Hm, da CPython seine Regex-Funktionalität ja in reinem Python (innerhalb des `sre`-Moduls) implementiert hat, könnte ich mir bei einer PyPy-Implementierung durchaus merkliche Performance-Verbesserungen vorstellen. Bei sowas kann PyPy sicher viele seiner Stärken ausspielen, würde ich mal vermuten wollen.

Re: regular expressions: PyPy <-> CPython...

Verfasst: Montag 15. August 2011, 22:11
von jbs
Wenn es denn richtig funktioniert :D

Re: regular expressions: PyPy <-> CPython...

Verfasst: Dienstag 16. August 2011, 07:22
von Darii
snafu hat geschrieben:Hm, da CPython seine Regex-Funktionalität ja in reinem Python (innerhalb des `sre`-Moduls) implementiert hat, könnte ich mir bei einer PyPy-Implementierung durchaus merkliche Performance-Verbesserungen vorstellen. Bei sowas kann PyPy sicher viele seiner Stärken ausspielen, würde ich mal vermuten wollen.
Nein, die Engine ist in C geschrieben. Nur der Ausdruck selbst wird in Python verarbeitet, das ist aber meist der geringste Aufwand.

Re: regular expressions: PyPy <-> CPython...

Verfasst: Dienstag 16. August 2011, 08:20
von jens
Also die unittests von python-creole laufen eigentlich mit PyPy genauso schnell, wie mit CPython...