regular expressions: PyPy <-> CPython...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Wenn es denn richtig funktioniert :D
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

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.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Also die unittests von python-creole laufen eigentlich mit PyPy genauso schnell, wie mit CPython...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten