Skip to content

Pinafore 0.4

Choose a tag to compare

@AshleyYakeley AshleyYakeley released this 27 Aug 22:07
  • Install
    • Debian package works on:
      . Ubuntu 22.04 LTS "jammy"
      . Debian 12 "bookworm"
    • add Nix flake
  • Language
    • overhaul of declarations
      . separate namespaces from modules,
      with "namespace" declarations and "with" and "import" declarators
      . both non-recursive ("let") and recursive ("let rec") declarators
      . "expose" declarations
      . allow declaration documentation with #| and {#| #} comments
    • datatype declarations
      . "closedtype" now "datatype storable"
      . can now have parameters
      . can now have subtypes
      . record constructors/patterns for datatypes
      . allow recursive types in datatypes
    • can declare arbitrary subtype relations
    • import lists
    • syntax
      . allow defintion of new operators
      . changed recursive type syntax from "rec v. T" to "rec v, T"
      . type names (+:), (*:), List, Unit
      . tuple constructor/pattern (,,) etc.
      . type signatures now attach to bindings, not stand-alone
      . separate syntax for static ":" and dynamic ":?" pattern typing
      . new syntax for function expressions: fn, match, =>
      . new syntax for datatype definitions
      . generalised "{}" and "do" syntax to any namespace
    • reject rather than mutate uninvertible type signatures
    • allow polymorphic recursion with type signatures
  • Interactive
    • :doc to retrieve name documentation
  • Library
    • Std
      . Literal type now byte array rather than text
      . Literal types now have GDS Literal
      . add Showable type for showing, show replacing toText
      . add min/max/lesser/greater functions
      . add List1 type for non-empty lists, subtype of List
      . rename "Ref" types and functions to "Model"
      . add TextModel type & associated functions, use for uiTextArea
    • new Task module
      . add Task type & associated functions
    • new Stream module
      . add sinks & sources
    • new Env module
      . move invocation-type stuff here
      . add stdin, stdout, stderr
    • new Eval module
      . move evaluate here
    • new Colour module
      . add Colour & AlphaColour types, etc.
    • new GIO module
      . add GIO File type and functions
    • new Cairo module
      . add Cairo-based functions for creating drawings
    • new Image module
      . add Image, HasMetadata, PNGImage, JPEGImage types, etc.
    • GTK
      . rename (from "UI")
      . explicit control over context
      . menu bar is just ordinary element
      . element for Image
  • Storage
    • Anchors now 256 bit, hash using BLAKE3
    • Store literals as binary rather than as text
    • Embed smaller literals directly in the anchor
  • Fixes
    • fix defect in lexical scoping