Dhall-golang releases thread

I’ve made a lot of progress on Dhall bindings for Go recently, and I think it’s time to make progress towards a v1.0 release. As a result, I’m releasing the first release candidate today. You can use it by adding this line to your go.mod:

require github.com/philandstuff/dhall-golang v1.0.0-rc.1

The full changelog is here. Note that some things are still in flux and
subject to change:

  • The dhall package is stable and will not have any breaking
    changes. In particular, dhall.Decode and dhall.Unmarshal will
    not have any breaking changes before a v1.0.0 release.
  • The parser package is also stable and will not have any breaking
    changes.
  • The core package is still subject to change: in particular, names
    which are currently exported may be unexported before a v1.0.0
    release.

Added

  • Core Dhall functionality:
    • Parse Dhall source to Terms
    • Resolve Dhall imports
    • Use Dhall cache for imports
    • Typecheck Dhall Terms
    • Evaluate Dhall Terms to Values
    • Marshalling/unmarshalling to CBOR format
  • Go bindings:
    • dhall.Decode to decode a Dhall Value into a Go variable
    • dhall.Unmarshal as a convenience all-in-one
      Dhall-source-to-Go-variable function
11 Likes

(Rather than start a new thread for each dhall-golang release, I’m going to keep them all in one thread.)

I’ve just released dhall-golang v1.0.0-rc.2. You can use it by adding this to your go.mod:

require github.com/philandstuff/dhall-golang v1.0.0-rc.2

Release notes

Another release candidate. As promised, the core package is still
in flux and has undergone a huge refactor in this release. Along with
that, the godoc has been vastly improved, and a new README has been
written to replace the previous scrappy development notes.

Also, this brings dhall-golang up to version 14.0.0 of the language
standard.

Breaking changes

  • refactoring of the core package
    • moved core.Term and implementations to new package term
    • removed core.AppValue from public interface
    • renamed various types to remove -Val and -Term suffixes
  • (from Dhall 14.0.0): decimal Natural literals can no longer have
    leading 0 digits

Changed

Fixed

  • dhall.Unmarshal() now resolves imports and typechecks before
    evaluating

Added

  • added core.ListOf, core.OptionalOf, core.NoneOf Value types
    to represent List a, Optional a and None a Values
    respectively
3 Likes

I’ve just released dhall-golang v1.0.0-rc.3. You can use it by adding this to your go.mod:

require github.com/philandstuff/dhall-golang v1.0.0-rc.3

Another release candidate. A few more breaking changes, though less
drastic than rc.2 was. Things are slowly stabilising.

Thanks to @Duncaen for his contribution to this release.

Breaking changes

  • core.Pi.Range has been renamed to core.Pi.Codomain (#12)
  • core.TextLit has been removed and replaced with core.PlainTextLit.
    There is no longer a (public) interpolated text Value type.
  • struct tags are now dhall not json (#15)

Fixed

  • fixed a parser bug related to single quote strings (#1)

Changed

  • faster parser by approx 30% (#11)
4 Likes

I’ve just released dhall-golang v1.0.0-rc.4.

You can use it by adding this to your go.mod:

require github.com/philandstuff/dhall-golang v1.0.0-rc.4

Another release candidate. There was one more breaking change. I don’t anticipate any more breaking changes so if there are no reported issues, this will become 1.0.

Breaking changes

  • dhall.Decode() now returns an error instead of panicking (#18)

Changed

  • regenerate parser from mna/pigeon master (#16)
  • support for unmarshalling into pointer types (#17)
  • better encoding of Optional types (#19)

I’ve just released dhall-golang v1.0.0 :tada::champagne::confetti_ball:

You can use it by adding this to your go.mod:

require github.com/philandstuff/dhall-golang v1.0.0

This is functionally identical to v1.0.0-rc.4.

8 Likes

Congrats on the 1.0.0 release! :tada:

1 Like

I’ve also raised a PR to make dhall-golang an official implementation :tada: :ice_cream:

2 Likes

I’ve just released dhall-golang v2.0.0.

You can use it by adding this to your go.mod:

require github.com/philandstuff/dhall-golang v2.0.0

This brings dhall-golang up to version 15.0.0 of the Dhall standard.
As the standard had breaking changes, this release is a major version
bump.

Breaking changes

  • added with keyword (technically breaking since you can no longer
    use with as an identifier)

Added

  • added record puns (ie { x } is now shorthand for { x = x })
  • added UnmarshalFile function (#25)

Changed

  • Unmarshal() and Decode() will check a Dhall function matches the
    given Go type before decoding (#23)
  • imports are now evaluated at import time (#27)

Fixed

  • fixed bug in evaluation of merge (3171f34)
2 Likes

I’ve just released dhall-golang v3.0.0. You can use it by running

go get github.com/philandstuff/dhall-golang/v3

or, if you don’t use go modules:

go get github.com/philandstuff/dhall-golang

This brings dhall-golang up to version 16.0.0 of the Dhall standard.
As the standard had breaking changes, this release is a major version
bump.

Breaking changes

New features

Bug fixes

  • We now save fully-alpha-normalized expressions to the cache (#31)
  • We now check the hash of expressions fetched from the cache (#32)
3 Likes

I’ve just released dhall-golang v4.0.0. You can use it by running

go get github.com/philandstuff/dhall-golang/v4

or, if you don’t use go modules:

go get github.com/philandstuff/dhall-golang

This brings dhall-golang up to version 17.0.0 of the Dhall standard.
Again the standard had breaking changes, so this release is a major
version bump.

Thanks to @lisael for their contributions to this release.

Breaking changes

Added

Fixed

  • Fix potential stack overflow in typechecker (#40)
    • When typechecking certain pathological expressions, the
      typechecker would get into an infinite loop until it exhausted
      the stack.
  • Fix error messages when x === y fails to typecheck (#39)
4 Likes

I’ve just released dhall-golang v4.1.0. You can use it by running

go get github.com/philandstuff/dhall-golang/v4

or, if you don’t use go modules:

go get github.com/philandstuff/dhall-golang

This brings dhall-golang up to version 17.1.0 of the Dhall standard.

Added

  • Language changes
    • Allow trailing delmiters (such as trailing commas in lists,
      trailing pipes in unions)

Fixed

  • Fix potential panic when typechecking toMap expressions (#49)
2 Likes

I’ve just released dhall-golang v5.0.0. You can use it by running

go get github.com/philandstuff/dhall-golang/v5

or, if you don’t use go modules:

go get github.com/philandstuff/dhall-golang

This brings dhall-golang up to version 18.0.0 of the Dhall standard.

Changed

  • Language changes
    • Enable with optimizations

This implements the newly-possible with optimizations such that
deeply-nested with expressions do not experience pathological
slowdown.

3 Likes

I’ve just released dhall-golang v6.0.0. You can use it by running

go get github.com/philandstuff/dhall-golang/v6

or, if you don’t use go modules:

go get github.com/philandstuff/dhall-golang

This brings dhall-golang up to version 19.0.0 of the Dhall standard.

Added

  • From Dhall 19.0.0: add Text/replace builtin
  • Add dhall-golang json command

The new dhall-golang json command takes some Dhall and outputs it as
JSON, similar to dhall-haskell’s dhall json. One key difference is
that it also supports Prelude.JSON types. For example, the following
command:

dhall-golang json <<EOF
let JSON = https://prelude.dhall-lang.org/JSON/package.dhall

in  { x = JSON.natural 4
    , y =
        JSON.array
          [ JSON.string "foo", JSON.natural 4, JSON.null, JSON.bool True ]
    }
EOF

will output:

{
  "x": 4,
  "y": [
    "foo",
    4,
    null,
    true
  ]
}

Changed

  • From Dhall 19.0.0: implement with as first-class expression
  • Allow unmarshalling Dhall values into interface{}; dhall-golang
    will select appropriate Go types for Dhall values when doing this.
1 Like

I’ve just released dhall-golang v6.0.1. You can use it by running

go get github.com/philandstuff/dhall-golang/v6

or, if you don’t use go modules:

go get github.com/philandstuff/dhall-golang

This fixes a showstopper bug in 6.0.0.

Fixed

  • Fix import paths to match new major version (#56)

Thanks to @Trundle for their contribution to this release.

1 Like