i. Preface

  1. ii. Major changes from issue 3.1
  2. iii. Notes on revision 1

This is Issue 4.0 of the TDF Specification. TDF version 4.0 is not bitwise compatible with earlier versions.

ii. Major changes from issue 3.1

A new SORT for STRING is introduced having the same relationship to TDFSTRING as BOOL has to TDFBOOL. This is used in place of TDFSTRING in various 3.1 constructions.

They are also used in modified tag and token definitions and declarations to provide extra consistency checks in the use of these tags or tokens, and also may be used as names external to the TDF system. For example, the signature of make_id_tagdec is now:

t_intro:        TDFINT
acc:            OPTION(ACCESS)
signature:      OPTION(STRING)
x:              SHAPE
          -> TAGDEC

A new EXP constructor, initial_value, is introduced to allow dynamic initialisation of global tags.

These changes arise mainly from requirements of C++, but are clearly applicable elsewhere.

Magic numbers are introduced at the start of files containing TDF bitstream information.

The version 3.1 constructor set_stack_limit has had to be modified in the light of experience with platforms with ABIs which require upward-growing stacks or use disjoint frame stacks and alloca stacks.

Various other minor changes have been made to elucidate some rather pathological cases, e.g. make_nof must have at least one element. Also there are some cosmetic changes to improve consistency, e.g. the order of the arguments of token are now consistent with token_definition.

iii. Notes on revision 1

This Revision 1 of Issue 4.0 incorporates a number of corrections which have arisen where inconsistency or impracticability became evident when validating the OSF Research Institute's AVS (ANDF Validation Suite). Apart from minor textual corrections, the changes are:

  • Use of installer-defined TOKENs for accessing variable parameter lists - see the companion document TDF Token Register (Revision 1).

  • Tolerance of overflow necessary to allow simple implementation of complex multiply and divide.

  • Modified constraints on the arguments of shift_left, shift_right, rotate_left, rotate_right, make_dynamic_callees, make_var_tagdec, make_tokdec, make_tokdef, and user_info.

  • Modified constant evaluation constraints with respect to env_size and env_offset.

  • chain_extern no longer supported.

Changes under consideration but not included in Issue 4.0:

  • Tokenisation of the various LIST constructs.

  • Inclusion of the specification of run-time diagnostic information in the main specification. This is currently given as an appendix, as it it is less mature than the main specification.