2011-06-08 16 views
9

son generadores soportados en RPython, porque acabo de leer algo en la documentación del PyPy que dice que no sonson generadores compatibles en RPython?

PyPy Doc - Coding Guide

Parecen fáciles de ser traducido a un lenguaje de tipos estáticos como C, porque cada etapa de generación se genera en Llamada de función.

¿Alguien puede explicar por qué? O arrojar más luz sobre el tema. Actualmente estoy tratando de aprender los conceptos básicos para escribir el código seguro RPython.

+1

Esta es una pregunta ortogonal, pero ¿para qué idioma está escribiendo un intérprete? Si no lo eres, entonces RPython es probablemente la solución incorrecta. – DSM

+0

No estoy escribiendo un intérprete, ya que dije que quería saber los consejos para escribir el código RPython seguro, y mientras estaba leyendo la Guía de codificación PyPy me intrigó esta cosa de generador –

Respuesta

21

Los generadores no son compatibles simplemente porque no se necesitaban en ese momento. El problema no es realmente tener una funcionalidad más o menos equivalente en C, sino la necesidad de mantener vivo un marco de generador. Como los fotogramas de RPython se traducen en cuadros C, para admitir generadores de pitón completos, necesitarás un poco de ayuda para obtener el fotograma C y copiarlo en otro lugar, o en algún otro equivalente.

Esto fue simplemente difícil/no necesario y no se implementó.

+0

Cuando dices 'mantener vivo el marco de un generador' ¿se refiere a generadores basados ​​en rendimiento? –

+0

¿No se pueden transformar los generadores implementados con yeild en memoria a un generador basado en clases? Lo cual supongo que no necesita un marco propio –

+0

@costy: estoy bastante seguro de que tal transformación sería posible (similar a [elevación lambda] (http://en.wikipedia.org/wiki/Lambda_lifting) tal vez) , pero incluso así sería mucho trabajo. – delnan

Cuestiones relacionadas