Skip to content

Latest commit

 

History

History
214 lines (127 loc) · 12.6 KB

versions.md

File metadata and controls

214 lines (127 loc) · 12.6 KB

BSP specification versions

This document aims to both describe the versioning system to be used for the BSP specification, and to act as a changelog that briefly describes all past versions and points to them.

Any version listed in this document is considered immutable; the version and revision number shall be a persistent identifier for that specific version.

Versioning scheme

Version numbers for the specification consist of three numbers separated by dots followed by a single revision number. The version numbers are respectively called the major, minor and patch version numbers. For instance, a version number of 23.45.67, rev. 8901 has a major version number of 23, minor version 45, patch version 67, revision 8901.

The meaning of the numbers is as follows:

  • The major version number indicates that the specification is not compatible with prior versions. As of the time of writing, this number is 0, meaning that the specification is not yet considered stable; major version 1 will be the first stable version, and any further major versions may be completely incompatible with prior ones.
  • The minor version number increases when additional features are added to the specification, without breaking already existing ones. For as long as the specification remains in major version 0, this will also be incremented for breaking changes; however, such changes should be rare and clearly indicated in the changelog.
  • The patch version number increases when the specification is updated to fix corner cases, undefined behavior, or other updates that do not constitute new features and should not alter the behavior of strictly conforming code.
  • The revision number is merely an update counter, and increases with every change to the specification. The revision number may be changed on its own, without modifying the version numbers, if the change is completely trivial (for instance, spelling fixes) or if it only changes the way in which already-present information is shown. Any implementations written to conform to a specific version number should not be affected by an update that only increments the revision number.

Note that, since the revision number is never reset, it may be used by itself to identify a single version of the specification. However, this does not convey as much information as the full version number.

Changelog

Adds a section about characters and strings (referenced from all instructions that handle text data), including changes such as:

  • Forbidding the use of invalid UTF-8 strings, requiring a fatal error in all cases
  • Actually pointing to the UTF-8 spec (i.e., the RFC) instead of leaving it implied
  • Specifying the acceptable behaviors of valid UTF-8 strings: what characters must be supported by the engine, and which ones can be substituted
  • Requiring that any valid UTF-8 string is accepted, including those containing control characters (despite those control characters need not be actually displayed)
  • Elaborating on character/byte limits for strings, detailing how an engine that imposes such limits must behave
  • Adding a few notes that address corner cases regarding invalid UTF-8 strings
  • Indicating that arguments to bufchar above 0x1fffff are reserved and may actually have some purpose in future versions of the spec (since they are completely outside the range of Unicode)
  • Adds a version number to the specification and a link to the (newly-written) changelog
  • Adds an index to the specification
  • Adds a note that mandates overflows in the calculation of the effective address for jumptable to result in fatal errors
  • Fixes various writing errors (grammar mistakes, unclear sentences, etc.) throughout the specification
  • Fixes a formatting error in the description of longmulacum
  • Adds a note specifying the behavior of the getbyteinc, getbytedec, gethalfwordinc, gethalfworddec, getwordinc and getworddec instructions when both of their arguments point to the same variable
  • Adds 64-bit arithmetic instructions
  • Fixes another grammatical mistake in the description of instructions that read from the file buffer
  • Fixes a grammatical mistake in the description of instructions that read from the file buffer
  • Adds the getfilebyte, getfilehalfword, getfileword and getvariable instructions
  • Fixes several grammatical errors in the description of checksha1
  • Fixes formatting errors in the description of the bit-shifting instructions
  • Fixes a formatting error in the description of getstacksize
  • Improves the formatting of the table listing the bit-shifting instructions
  • Fixes a grammatical error in the description of rotateleft
  • Adds the setstacksize and getstacksize instructions, and the bit-shifting instructions
  • Fixes a few typos and similar errors
  • Adds notes clarifying the interaction of poppos and the seek family of instructions with a locked current file pointer
  • Updates stackread and stackwrite to accept negative stack positions
  • Amends the description of bufchar to require engines to accept spaces
  • Adds a message buffer to the execution environment of the patch
  • Adds the bufstring, bufnumber, bufchar, printbuf and clearbuf instructions
  • Updates the description of the bsppatch instruction regarding behavior of the newly-introduced message buffer
  • Fixes an error in the argument lists for the truncate instruction
  • Fixes a formatting error in the description of the bsppatch instruction

First complete version of the specification.

  • Adds a description for the bsppatch instruction
  • Further improves the wording in the description of the ipspatch instruction
  • Fixes the wording in the description of the ipspatch instruction
  • Updates the argument lists for the ipspatch instruction
  • Adds descriptions for ipspatch and checksha1
  • Fixes grammatical mistakes in the descriptions of the pushpos and poppos instructions
  • Specifies the behavior of the print instruction when an invalid string is encountered
  • Adds a note mandating that one-option menus must be shown to the user
  • Adds descriptions for the writedata, xordata, length, truncate and truncatepos instructions, and for the instructions dealing with manipulating or retrieving the current file pointer
  • Adds descriptions for instructions that read from and write to the file buffer
  • Fixes the formatting of a section header
  • Fixes the writing in the description of instructions that read values from patch space
  • Adds a note in that section regarding compiler behavior
  • Adds descriptions for advanced stack operations and instructions that read values from patch space
  • Updates the argument lists for menu and jumptable
  • Adds descriptions for conditional jumps, menu, print, exit and jumptable
  • Adds descriptions for arithmetic instructions, basic control flow, push and pop
  • Adds a list of all instruction names and describes the nop instruction
  • Initial draft version of the specification; contains an introduction and the initial instruction list