Author: jonathan
Date: Thu Sep 28 15:55:52 2006
New Revision: 14785

Modified:
   trunk/docs/pdds/clip/pdd13_bytecode.pod

Log:
Add most of the changes resulting from discussion with Allison.

Modified: trunk/docs/pdds/clip/pdd13_bytecode.pod
==============================================================================
--- trunk/docs/pdds/clip/pdd13_bytecode.pod     (original)
+++ trunk/docs/pdds/clip/pdd13_bytecode.pod     Thu Sep 28 15:55:52 2006
@@ -145,58 +145,43 @@
   |        |        |    0x00 - IEEE 754 8 byte double                       |
   |        |        |    0x01 - i386 little endian 12 byte long double       |
   +--------+--------+--------------------------------------------------------+
-  | 11     | 1      | Major version number of the earliest version of Parrot |
-  |        |        | that should be able to run this file. For example, if  |
-  |        |        | Parrot 0.9.5 was the first Parrot that was able to     |
-  |        |        | run this bytecode file properly, this byte would       |
-  |        |        | have the value 0.                                      |
-  +--------+--------+--------------------------------------------------------+
-  | 12     | 1      | Minor version number of the earliest version of Parrot |
-  |        |        | that should be able to run this file. For example, if  |
-  |        |        | Parrot 0.9.5 was the first Parrot that was able to     |
-  |        |        | run this bytecode file properly, this byte would       |
-  |        |        | have the value 9.                                      |
-  +--------+--------+--------------------------------------------------------+
-  | 13     | 1      | Patch version number of the earliest version of Parrot |
-  |        |        | that should be able to run this file. For example, if  |
-  |        |        | Parrot 0.9.5 was the first Parrot that was able to     |
-  |        |        | run this bytecode file properly, this byte would       |
-  |        |        | have the value 5.                                      |
-  +--------+--------+--------------------------------------------------------+
-  | 14     | 10     | Opcode fingerprint. This stores the fingerprint of the |
-  |        |        | opcodes that the Parrot this packfile was written by   |
-  |        |        | was built with. This enables detection of packfiles    |
-  |        |        | that can not be run by the version of Parrot reading   |
-  |        |        | the file.                                              |
-  |        |        |                                                        |
-  |        |        | The fingerprint is computed by taking the MD5 hash of  |
-  |        |        | the file PBC_COMPAT, a file in the Parrot repository   |
-  |        |        | that is only updated when an incompatible change is    |
-  |        |        | made to the Packfile format, for example renumbering   |
-  |        |        | operation codes.                                       |
-  |        |        |                                                        |
-  |        |        | This need only be checked when running a development   |
-  |        |        | version of Parrot. Release versions should choose to   |
-  |        |        | accept or decline a PBC file based only on the major,  |
-  |        |        | minor and patch version numbers.                       |
+  | 11     | 1      | Major version number of the version of Parrot that     |
+  |        |        | wrote this bytecode file. For example, if Parrot 0.9.5 |
+  |        |        | wrote it,this byte would have the value 0.             |
+  +--------+--------+--------------------------------------------------------+
+  | 12     | 1      | Minor version number of the version of Parrot that     |
+  |        |        | wrote this bytecode file. For example, if Parrot 0.9.5 |
+  |        |        | wrote it,this byte would have the value 9.             |
+  +--------+--------+--------------------------------------------------------+
+  | 13     | 1      | Patch version number of the version of Parrot that     |
+  |        |        | wrote this bytecode file. For example, if Parrot 0.9.5 |
+  |        |        | wrote it,this byte would have the value 5.             |
+  +--------+--------+--------------------------------------------------------+
+  | 14     | 1      | Major version number of the bytecode file format. See  |
+  |        |        | the section below on bytecode file format version      |
+  |        |        | numbers.                                               |
+  +--------+--------+--------------------------------------------------------+
+  | 15     | 1      | Minor version number of the bytecode file format. See  |
+  |        |        | the section below on bytecode file format version      |
+  |        |        | numbers.                                               |
   +--------+--------+--------------------------------------------------------+
-  | 24     | 1      | The type of the UUID associated with this packfile.    |
+  | 16     | 1      | The type of the UUID associated with this packfile.    |
   |        |        | Must be one of:                                        |
   |        |        |    0x00 - No UUID                                      |
   |        |        |    0x01 - MD5                                          |
   +--------+--------+--------------------------------------------------------+
-  | 25     | 1      | Length of the UUID associated with this packfile. May  |
+  | 17     | 1      | Length of the UUID associated with this packfile. May  |
   |        |        | be zero if the type of the UUID is 0x00. Maximum       |
   |        |        | value is 255.                                          |
   +--------+--------+--------------------------------------------------------+
-  | 26     | u      | A UUID of u bytes in length, where u was specified as  |
+  | 18     | u      | A UUID of u bytes in length, where u was specified as  |
   |        |        | the length of the UUID in the previous field. Be sure  |
   |        |        | that UUIDs are stored and read as strings. The UUID is |
   |        |        | computed by applying the hash function specified in    |
   |        |        | the UUID type field over the entire packfile not       |
   |        |        | including this header and the trailing zero padding.   |
   +--------+--------+--------------------------------------------------------+
-  | 26 + u | n      | Zero-padding to make the total header length a         |
+  | 18 + u | n      | Zero-padding to make the total header length a         |
   |        |        | multiple of 16 bytes in length.                        |
   |        |        |    n = u % 16 == 0 ? 0 : 16 - (u % 16)                 |
   +--------+--------+--------------------------------------------------------+
@@ -206,6 +191,33 @@
 that is reading the PBC file do not match these, it needs to transform the
 words making up the rest of the packfile.
 
+=head4 Bytecode File Version Numbers
+
+The bytecode file version number exists to decouple the format of the bytecode
+file from the version of the Parrot implementation that is reading/writing it.
+It has a major and a minor part.
+
+The major version number should be incremented whenever there is a change to
+the layout of bytecode files. This includes new segments, changes to segment
+headers or changes to the format of the data held within a segment.
+
+The minor version number should be incremented in all other cases when a
+change is made that means a previous version of Parrot would not be able to
+run the program encoded in the packfile. This is mostly opcode re-numbering or
+the addition of new opcodes.
+
+{{ QUESTION: Should this also include changes to the core PMC types? }}
+
+A single version of Parrot can support reading and writing of more than one
+bytecode file format. In fact, once Parrot is in production use it will be
+preferable to write as early a bytecode format as is possible, to allow the
+greatest compatibility with previous Parrots.
+
+These versions will be listed in the PBC_COMPAT file, sorted with the latest
+version first. in the format:
+
+MAJOR.MINOR DATE DESCRIPTION
+
 
 =head3 Directory Format Header
 
@@ -305,7 +317,8 @@
 
 The default segment has no additional headers. It will, if possible, be memory
 mapped. More than one may exist in the packfile, and they are identified by
-name.
+name. They may be used for storing any data that does not fit into any other
+segment, for example the source code from a high level language.
 
 
 =head3 Bytecode Segment
@@ -496,7 +509,9 @@
   |        |        |    n                                                   |
   +--------+--------+--------------------------------------------------------+
 
-Following this are n annotation key entries, which take the following format.
+Following this are n annotation key entries. There is one entry per key (such
+as "line" or "file"), but the bytecode may be annotated many times with that
+key. Key entries take the following format.
 
   +--------+--------+--------------------------------------------------------+
   | Offset | Length | Description                                            |
@@ -547,6 +562,9 @@
 will provide a programatic way to construct and walk packfiles, both for the
 Parrot internals and from programs running on the Parrot VM.
 
+{{ QUESTION: Will the CStruct PMC make it into Parrot? If so, we may want to
+change the interface of these PMCs to take advantage of it. }}
+
 
 =head3 Packfile.pmc
 
@@ -577,6 +595,8 @@
 =item version_major
 =item version_minor
 =item version_patch
+=item bytecode_major
+=item bytecode_minor
 =item uuid_type
 =item uuid_length
 =back
@@ -587,7 +607,6 @@
 keys are:
 
 =over 4
-=item opcodefingerprint
 =item uuid
 =back
 
@@ -632,7 +651,8 @@
 
 Takes the packed representation for a segment of the given type and then
 unpacks it, setting this PMC to represent that segment as a result of the
-unpacking (provided it is successfully unpacked).
+unpacking. If an error occurs during the unpacking process, an exception will
+be thrown.
 
 
 =head3 PackfileDirectory.pmc (isa PackfileSegment)
@@ -669,7 +689,7 @@
 will be replaced with the supplied PMC.
 
 
-=head3 DefaultSegment.pmc (isa PackfileSegment)
+=head3 RawSegment.pmc (isa PackfileSegment)
 
 This PMC presents a segment of a packfile as an array of integers. This is the
 lowest possible level of access to a segment, and covers both the default and
@@ -683,7 +703,8 @@
 
 =head4 set_integer_keyed_int (v-table)
 
-Stores an integer at the specified offset into the segment.
+Stores an integer at the specified offset into the segment. Will throw an
+exception if the segment is memory mapped.
 
 =head4 elements (v-table)
 
@@ -943,3 +964,4 @@
 Local Variables:
   fill-column:78
 End:
+

Reply via email to