Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

documentation: update News for 4.14.0 release #11135

Merged
merged 1 commit into from
Mar 29, 2022

Conversation

Octachron
Copy link
Member

This PR updates the release-info/News file in preparation of the imminent 4.14.0 release.
It is also the right place for bikeshedding my current list of release highlights:

OCaml 4.14.0 (?? March 2022)

  • Integrated support for "go to definitions" in Merlin
  • Improved error messages in particular for module-level error
  • Standard library: new modules In_channel and Out_channel,
    many new functions in Seq module, improved utf encoding support.
  • Runtime optimisation: GC prefetching
  • Deprecated functions and modules in preparation for OCaml 5
  • Tail modulo cons transformation
  • Work-in-progress: refactorisation of the type checker
  • Many other quality of life improvements
  • Many bug fixes

@gasche
Copy link
Member

gasche commented Mar 22, 2022

Tail modulo cons transformation

I suggest to add (experimental) at the end to manage expectations.

@gasche
Copy link
Member

gasche commented Mar 22, 2022

Potential new things to mention

(this is arguably mentioned in the list but in a very unclear way I think?)

(This Changes entry could be completed with actual code examples, one for val and one for existentials in GADT constructors.)

Potential things to remove

If I had to make space, I would drop "refactorisation of the type checker" (this is not visible to most users) and "many other quality of life improvements" / "many other bug fixes" (this is not informative), and then TMC (this is for advanced users only).

Suggested changes

Runtime optimisation: GC prefetching

You should give some numbers of potential gains to expect (for programs that spend a lot of time in the major GC).

Deprecated functions and modules in preparation for OCaml 5

Maybe mention that in particular Stream and Genlex are deprecated?

- Integrated support for "go to definitions" in Merlin
- Improved error messages in particular for module-level error
- Standard library: new modules In_channel and Out_channel,
many new functions in Seq module, improved utf encoding support.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree with @gasche that this is a confusing way to put it. We had encoding support for quite some time :–)
I suggest , string and bytes UTF decoding and validation support.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would propose

- Standard library: new modules In_channel and Out_channel,
  many new functions in Seq module, UTF decoding and validation support
  for strings and bytes.

to reduce the size of the prefixed part of the nominal group.

@Octachron
Copy link
Member Author

An argument for mentioning the refactoring of the typechecker is that both the changes at for classes and type expressions might end up visible through the prism of unexpected bugs. But the highlight are probably not the right place for that pessimism.

The number of highlights is quite reasonable for now. I think it make sense to add the explicit binder syntax and the new guarantee for the tailcall optimisation:

  • Integrated support for "go to definitions" in Merlin.
  • Standard library: new modules In_channel and Out_channel,
    many new functions in Seq module, UTF decoding and validation support
    for strings and bytes.
  • Runtime optimisation: GC prefetching. Benchmarks show a speedup of around 20%
    in GC-heavy programs.
  • Improved error messages in particular for module-level error.
  • Deprecated functions and modules in preparation for OCaml 5.
    In particular, the Stream and Genlex modules are now deprecated.
  • Type variables can be explicitly introduced in value and variant constructor
    declarations. For instance,
    val fold: ('acc -> 'elt -> 'acc) -> 'acc -> 'elt list -> 'acc
    type showable = Show: a * ('a -> string) -> showable

can now be written as

    val fold: 'acc 'elt. ('acc -> 'elt -> 'acc) -> 'acc -> 'elt list -> 'acc
    type showable = Show: 'a. 'a * ('a -> string) -> showable
  • Tail-call with up to 64 arguments are now guaranteed to be optimized
    for all architectures.
  • Experimental tail modulo cons (TMC) transformation
    (with some expected future breaking changes on the horizon).

declarations. For instance,
```ocaml
val fold: ('acc -> 'elt -> 'acc) -> 'acc -> 'elt list -> 'acc
type showable = Show: a * ('a -> string) -> showable
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
type showable = Show: a * ('a -> string) -> showable
type showable = Show: 'a * ('a -> string) -> showable

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed, thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants