This is the first public release since 2.6, and there have been massive changes since then. Most of the changes are described in the list of features for 3.0. The other main changes are as follows: a) A "virtual memory" mechanism is used to store various information generated during a simulation (including the contents of databases). This mechanism replaces the "disposal policy" facility of releases up to 2.6. The idea is that information that is accessed rarely, if at all, is written to a disc file and frequently accessed information is cached in memory. Therefore, simulations should be able to run for as long as required without using up any more memory (causing paging etc.), as long as there is enough disc space. b) The random and arbitrary choice primitives have been changed significantly. The new primitives have four arguments: the resulting choice, a term to be instantiated with possible choices (when a subclause is evaluated), a uniquifying term, and finally the subclause to specify the possible choices. c) Some terminological changes have been made. In particular, "simulation groups" have been renamed "modules" (in order to use computer science terminology). Also, the term "workbench" is used to denote a collection of windows that can be used in order to perform simulations, analyse results, make changes, etc. A "workbench" is different from a "simulation" in that many simulations can be run using the same workbench - but only one at a time. d) New searching mechanisms are provided. The three SDML search mechanisms (apart from the find text option in text browsers) are as follows: 1) Browse named object This mechanism is provided via an option in the pull down menus of workbench browsers and agent browsers. The user is requested to enter the name of an object. Objects with that name within the particular agent (or the entire simulation if done from the workbench browser) are searched for. If more than one object with that name is found, they are listed (with their paths) and the user selects the appropriate one. Then a browser on the object is opened. The user can optionally enter a path (e.g. "salesDepartment@bigFirm") in which case a browser is opened on the object with that path (within the universe, or the agent from which the menu option has been selected). 2) Find object This mechanism is provided via a page in object browsers and agent browsers (i.e. the user can click on the appropriate tab at the bottom of the browser). The particular object being browsed is searched for in databases and/or rulebases (as specified by switches) within every agent in the simulation. The user can also select a stage, in which case data/rulebases specific to that stage, as well as data/rulebases from which they inherit, are searched. This mechanism only searches for information generated during the simulation - i.e. for clauses on databases that were asserted by rules firing, and/or rules that were asserted by meta-rules (in a MetaAgent's rulebase). Three panes at the bottom of the browser page display a list of data/rulebases, a list of predicates in the selected database or rules in the selected rulebase, and details of the selected predicate/rule. The browser page is automatically updated when the simulation runs to reflect changes made by firing rules. 3) Find symbol This mechanism is provided via a new browser. Such browsers can be opened from the SDML launcher or a workbench browser, in which case the user is prompted for a symbol to search for. They can also be opened from various other SDML browsers, in which case the name of the structure being browsed (e.g. type or object) is used as the symbol to search for. The search symbol can be modified later from within the search browser itself. The particular symbol being browsed is searched for within the module hierarchy. If the symbol is the name of a type then that type within all modules is found. Additionally, switches can be used to search for the following: i) Rulebases - search for the symbol in all rules (including those within clause definitions). Also, if the symbol is used as a time level, initial/final rulebases for that time level are found. ii) Object defintions - search for definitions of objects with that name. Also, if the symbol is a type name, objects defined as that type are found. iii) Clause definitions - if the symbol is a type name, search syntax diagrams for that type. Also if the symbol is a predicate name, defintions for that predicate are found. iv) Containers - if the symbol is a type name, search for agent types with containers constrained to instances of that type. Panes at the bottom of the browser display a list of types, a list of items in which the symbol is found (within the selected type) and an explanation of the selected item. An extra pane appears when required for a list of rules in which the symbol is found. The browser is automatically updated when operations are performed to reflect any appropriate changes.