Skip to content

v0.19.0

Choose a tag to compare

@github-actions github-actions released this 03 Nov 02:46
736d7b8

MINOR: before 1.0.0, a breaking change increases MINOR. check finds more issues in trees, encodeValue can give a different document, and factsOf gives other facts for a verb other than eval. The type of WorldIssue.code gets a second value. No export goes.

Changes of behavior

  • check finds attribute faults of a tree (D106). In 0.18.0, check accepted a read of an attribute that no rung answers, and the run gave #N/A. In 0.19.0, check gives that #N/A at the same place before a run. It also gives #NAME? for an attribute named parent or type, and #CALC! for a tree kind of the run side.
  • check finds the cycles of attributes (D107). In 0.18.0, a cycle of tree attributes gave #CYCLE! only in a run. In 0.19.0, check gives that #CYCLE! before a run for each certain cycle, with the same place and reason. A cycle through a lazy branch or an unknown read is not an issue.
  • encodeValue uses the codec of the most specific domain (D109). In 0.18.0, it tried the domains with a codec in the order of their names. Thus a parent with an early name encoded the members of its subdomains. In 0.19.0, it tries the deepest domain first. Names decide only between domains of the same depth. A table where no codec domain has a parent gives the same documents as before.
  • factsOf gives the facts of a verb from its own contract (D111). In 0.18.0, factsOf with a verb other than eval gave the side and the effects of the eval contract. In 0.19.0, it gives the effects that the entry of the verb in verbEffects declares. A kind is on the run side for that verb only when its entry declares an effect. A kind without an entry adds nothing, as in check.
  • WorldIssue.code can be #TYPE! (D110). In 0.18.0, its type was only "#NOEVAL". In 0.19.0, it is "#NOEVAL" | "#TYPE!". Code that gives issue.code to the literal type "#NOEVAL" does not compile. Calls without the new option give the same issues as before.

New features

  • attributeGraph gives the graph of the attribute instances of a tree (D107). It gives one vertex for each node and attribute, one edge for each read, the edges with an unknown source, and the certain cycles. attributeVertexId gives the id of a vertex.
  • treeNodeEvaluator({ cell }) takes the memo cells of a host (D108). A host can keep the cell of each attribute between evaluations of one plan. A change of its store then computes only the attributes whose cells it drops. Without cell, the standard code does not change.
  • checkWorld(machine, verbs, { types: true }) checks each value type of a machine (D110). In 0.18.0, check found a bad value type of a contract, a domain or a signature only at the first document that used it. In 0.19.0, this option finds each bad value type before a document exists. Each bad term gives one #TYPE! issue, with its owner and its keys in at. A type rule lists what it reads with the new optional field declared.
  • printReads finds a host value that changed in place (D112). In 0.18.0, verifyReads compared host values by identity, so a value changed in place kept a stale result. In 0.19.0, printReads and the verifyReads option prints find such a change, and give the changed read with inPlace: true. durable and schedule take the option inPlace. Without the new options, nothing changes.

Tests and CI

These changes are not in the package. Each bench record names its mode (K199). The ladder of STATIC.LINEAR also measures the memory of each walk (D105).