[pypy-issue] [issue955] move struct.Struct to interplevel

Alex Gaynor tracker at bugs.pypy.org
Wed Dec 7 00:31:30 CET 2011

New submission from Alex Gaynor <alex.gaynor at gmail.com>:

There are a few reasons and issues to be fixed:

1) format should be immutable on the Struct instance
2) format should be promoted so that unpack/pack loops are unrolled correctly
3) it should work nicer with buffers

Discussion from IRC:

 [6:24 PM] <Alex_Gaynor> arigato: so struct.unpack is very fast because the JIT 
checks if the 
format str is constant and if it is unrolsl the loops
 [6:24 PM] <arigato> ah, bah
 [6:24 PM] <Alex_Gaynor> arigato: however if you have x = Struct("format str"); 
for i n 
xrange(100): x.unpack(i) or so, the string isn't constant
 [6:24 PM] <Alex_Gaynor> it'd be ok if Struct was a global or something
 [6:24 PM] <Alex_Gaynor> I would if Struct instances should just promote their 
format and be done 
with it
 [6:24 PM] <arigato> and even not, because x.format is not a constant attribute
 [6:25 PM] <Alex_Gaynor> is it constant on CPython?
 [6:25 PM] <arigato> I suppose, but right now it's written at app-level
 [6:25 PM] <arigato> in pypy
 [6:25 PM]  ⇐ lucian (~lucian at cpc1-newc15-2-0-
cust84.gate.cable.virginmedia.com) quit: Ping 
timeout: 240 seconds
 [6:25 PM] <Alex_Gaynor> arigato: yes, I guess it might make sense to move it to 
interplevel so 
we can make it const and do the promotion
 [6:25 PM] <Alex_Gaynor> I think promote makes sense here
 [6:25 PM] <arigato> yes and no, as usual
 [6:26 PM] <Alex_Gaynor> indeed
 [6:26 PM] <arigato> e.g. what if someone does x = Struct("i" * n)
 [6:27 PM] <arigato> well I suppose that he's punished and it's his fault, or 
 [6:27 PM] <Alex_Gaynor> indeed, as always the mess of heuristics :/
 [6:27 PM] <arigato> yes
 [6:27 PM] <exarkun> I did that this afternoon.
 [6:27 PM] <arigato> ah no, it's potentially a bad idea to promote a string, 
 [6:27 PM]  ⇐ JaRoel|4d (~jaroel|4d at 2001:980:7133:1:317d:e87f:5636:fdbe) quit: 
Remote host closed 
the connection
 [6:28 PM] <arigato> I think it's promoting the pointer, not the actual string 
 [6:28 PM] <Alex_Gaynor> arigato: err, yes, we have string_promote nowadays 
 [6:28 PM] <arigato> ah, ok

Benchmark: http://pastebin.com/brfj0Aq9

messages: 3546
nosy: agaynor, pypy-issue
priority: performance bug
status: unread
title: move struct.Struct to interplevel

PyPy bug tracker <tracker at bugs.pypy.org>

More information about the pypy-issue mailing list