Wow, Parrot has certainly made a lot of progress since I've last looked at it.

I've lightly gone through the documentation Perl Assembly Language 
documentation a couple times, and I'm confused over a couple of (hopefully 
simple) points. Keep in mind that I'm not a Perl coder:

1. How do you handle variant (either string or numeric) data? Do you set up 
one of the string registers with a string "ssnnnnssnnnn" to keep track of 
datatypes?

2. What happens if a routine needs more than 32 variables of one datatype? Do 
you use hash tables? (Sounds like Lua)

3. What about variant arrays? Hash tables again?

4. What's a frame? (ex: push_p : Push the current frame of the PMC...)

5. How are pointers from DLLs handled? For example, I might have a DLL routine 
which returns a pointer of some flavor, or expects pointers as parameters. Is 
there a 'void *' PMC?

6. What's a "scratchpad?" Is it different from a "pad?" What are they used 
for?

7. How are pad *descriptors* created? They are specified in the constant area 
of the bytefile, but it's not clear how they get there. Then again, I'm not 
entirely clear on what they are, either.

8. How do you store things in non-global pads? There is a store_global opcode, 
but no store_lex opcode.

9. Is there a substring op? If not, how do you get a substring?

10. I didn't see any equality (eq, gt, le, etc.) opcodes for comparing values.

11. There's no opcode for supporting a for loop?

12. There's a string to number op, but no number to string op?

I've also got a couple questions related to the byetcode file format. These 
are more idle curiosity:

1. Was there a compelling reason to mix the strings and numbers into the 
constant section, instead of creating a seperate string and numeric section?

2. Are duplicate values (strings, numbers) consolidated in the data section?

3. Why store numbers in binary format instead of text format? Doesn't that 
limit precision?

Thanks!

-- David Cuny

Reply via email to