2011-06-08 12 views
9

sono generatori supportato in RPython, perché ho appena letto qualcosa nella documentazione di PyPy che dice che non sonosono generatori supportati in RPython?

PyPy Doc - Coding Guide

Sembra facile essere tradotto in un linguaggio a tipizzazione statica come C, perché ogni passo generazione è generata in chiamata di funzione.

Qualcuno può spiegare perché? O gettare un po 'più di luce sull'argomento. Attualmente sto cercando di imparare le basi della scrittura di codice sicuro di RPython.

+1

Questa è una domanda ortogonale, ma per quale lingua stai scrivendo un interprete? Se non lo sei, allora RPython è probabilmente la soluzione sbagliata. – DSM

+0

Non sto scrivendo un interprete, come ho detto voglio sapere i consigli per scrivere codice RPython sicuro, e mentre stavo leggendo la PyPy Coding Guide mi sono incuriosito da questa cosa generatore –

risposta

21

I generatori non sono supportati semplicemente perché non erano necessari al momento. Il problema non è in realtà avere una funzionalità approssimativamente equivalente in C, ma è necessario mantenere attivo un frame del generatore. Poiché i frame RPython sono tradotti in frame C, per supportare i generatori Python completi è necessario un supporto per ottenere il frame C e copiarlo da qualche altra parte, o qualcosa di equivalente.

Questo è stato semplicemente difficile/non necessario e non è stato implementato.

+0

Quando dici "per mantenere vivo il frame di un generatore" ti riferisci ai generatori in base al rendimento? –

+0

I generatori non implementati con yeild possono essere trasformati in memoria in un generatore basato su classi? Quale suppongo non abbia bisogno di un suo frame –

+0

@costy: sono abbastanza sicuro che una tale trasformazione sarebbe possibile (simile a [lambda lifting] (http://en.wikipedia.org/wiki/Lambda_lifting) forse) ma anche allora sarebbe molto lavoro. – delnan

Problemi correlati