[cwn] Attn: Development Editor, Latest OCaml Weekly News
Alan Schmitt
alan.schmitt at polytechnique.org
Tue Oct 18 05:10:55 PDT 2022
Hello
Here is the latest OCaml Weekly News, for the week of October 11 to 18,
2022.
Table of Contents
─────────────────
Routes v2.0.0 released
Domainslib 0.5.0 released
Videos of ML 2022 workshop talks
OCaml 5.0.0, first beta release
ppx_deriving_yaml 0.1.0
A sandbox for proposing new features in odoc
OCaml Platform Installer alpha release
dkml-dune-dsl 0.x.x - Parameterizable Dune files embedded in OCaml
Other OCaml News
Old CWN
Routes v2.0.0 released
══════════════════════
Archive:
<https://discuss.ocaml.org/t/ann-routes-v2-0-0-released/10617/1>
Anurag Soni announced
─────────────────────
I’d like to announce release of version 2.0.0 of [routes ] to the
[ocaml package registry].
*Routes* provides a DSL for typed bi-directional URI dispatch. It
allows writing route definitions that can be used for both matching,
and printing URI paths. The internal representation of the router uses
a `trie' to perform route matching.
[routes ] <https://github.com/anuragsoni/routes/>
[ocaml package registry] <https://ocaml.org/p/routes/2.0.0>
Changes since the last opam release:
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
◊ New updates
• use `ppx_expect' for tests.
• A new `route' function is available and is an alias for `@-->' which
is used to connect a route pattern to a “handler”.
◊ Breaking changes
• Drop support for OCaml 4.05-4.07
• Switch to a new model for trailing slash handling. In routes 1.0.0
users needed to be careful about using `/?' and `//?' as the former
would only match routes without a trailing slash, and the latter
would enforce a trailing slash.
• Users only need to use `/?' to end routes, and it will cover both
routes ending with trailing slashes and without
• The type used for representing match results has more information
about whether it was an exact match, or if it was a match but the
input target had a trailing slash at the end.
• `MatchWithTrailingSlash' informs the user that the current target
was considered a match, but that the target has an additional
trailing slash
Examples of how to use the library are available in the [tests ] and a
[small demo ]
Documentation can be found [here ]
[tests ]
<https://github.com/anuragsoni/routes/blob/4af400b3d72e75f87907a04f47598a6580cd9d2f/test/routing_test.ml>
[small demo ]
<https://github.com/anuragsoni/routes/blob/4af400b3d72e75f87907a04f47598a6580cd9d2f/example/no_http.ml>
[here ] <https://anuragsoni.github.io/routes/>
Domainslib 0.5.0 released
═════════════════════════
Archive:
<https://discuss.ocaml.org/t/ann-domainslib-0-5-0-released/10620/1>
Sudha Parimala announced
────────────────────────
I’m happy to announce the release of [Domainslib 0.5.0].
[Domainslib] is a parallel programming library for the upcoming OCaml
5. Domainslib provides support for parallel operations such as
`parallel_for', `async~/~await' tasks etc. with an efficient
work-stealing mechanism in its core. Tasks are expressed with effect
handlers, enabling efficient nested parallelism.
You can give it a spin with the [5.0.0~alpha1 compiler]. For examples
of Domainslib programs, here is a [tutorial on parallel programming
with domainslib], KC’s [hands on tutorial] at the Tarides retreat, and
[another one] Marek and I did at ICFP 2022.
Submissions of interesting Domainslib benchmarks appreciated at
[sandmark]. Results of existing ones can be viewed at
<https://sandmark.tarides.com/> under the parallel benchamrks tab.
Please feel free to add your multicore/effects libraries and
experiments to [awesome-multicore-ocaml].
Changes from the previous release:
• Bug fix for `parallel_for_reduce' on empty loops.
• Make Chan.t and Task.promise injective [Make Chan.t and
Task.promise injective ocaml-multicore/domainslib#69]
• Add lockfree dependency [remove Ws_deque module
ocaml-multicore/domainslib#70]
• CI fixes ([Add alpha repo to GitHub Actions
ocaml-multicore/domainslib#73], [Run `5.0.0~alpha0' in the CI
ocaml-multicore/domainslib#76])
• Breaking change: Rename `num_additional_domains' to `num_domains'
for setup_pool
• Documentation updates ([Use `invalid_arg'
ocaml-multicore/domainslib#80], [Document that non-commutative
operators are okay ocaml-multicore/domainslib#81], [Explain what
will happen with an empty pool ocaml-multicore/domainslib#82])
[Domainslib 0.5.0]
<https://opam.ocaml.org/packages/domainslib/domainslib.0.5.0/>
[Domainslib] <https://github.com/ocaml-multicore/domainslib>
[5.0.0~alpha1 compiler]
<https://github.com/ocaml-multicore/awesome-multicore-ocaml#installation>
[tutorial on parallel programming with domainslib]
<https://github.com/ocaml-multicore/parallel-programming-in-multicore-ocaml>
[hands on tutorial] <https://github.com/kayceesrk/ocaml5-tutorial>
[another one] <https://github.com/Sudha247/ocaml5-tutorial-icfp-22>
[sandmark] <https://github.com/ocaml-bench/sandmark>
[awesome-multicore-ocaml]
<https://github.com/ocaml-multicore/awesome-multicore-ocaml>
[Make Chan.t and Task.promise injective ocaml-multicore/domainslib#69]
<https://github.com/ocaml-multicore/domainslib/pull/69>
[remove Ws_deque module ocaml-multicore/domainslib#70]
<https://github.com/ocaml-multicore/domainslib/pull/70>
[Add alpha repo to GitHub Actions ocaml-multicore/domainslib#73]
<https://github.com/ocaml-multicore/domainslib/pull/73>
[Run `5.0.0~alpha0' in the CI ocaml-multicore/domainslib#76]
<https://github.com/ocaml-multicore/domainslib/pull/76>
[Use `invalid_arg' ocaml-multicore/domainslib#80]
<https://github.com/ocaml-multicore/domainslib/pull/80>
[Document that non-commutative operators are okay
ocaml-multicore/domainslib#81]
<https://github.com/ocaml-multicore/domainslib/pull/81>
[Explain what will happen with an empty pool
ocaml-multicore/domainslib#82]
<https://github.com/ocaml-multicore/domainslib/pull/82>
Videos of ML 2022 workshop talks
════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/videos-of-ml-2022-workshop-talks/10621/1>
Benoit Montagu announced
────────────────────────
Dear community, the videos of the talks given at the [ML workshop] in
September 2022 in Ljubljana are now [available]. Enjoy!
[ML workshop] <https://icfp22.sigplan.org/home/mlfamilyworkshop-2022>
[available]
<https://www.youtube.com/playlist?list=PLyrlk8Xaylp7f8T7L5SFFwOS5_c5d1Jyq>
OCaml 5.0.0, first beta release
═══════════════════════════════
Archive:
<https://discuss.ocaml.org/t/ocaml-5-0-0-first-beta-release/10623/1>
octachron announced
───────────────────
The release of OCaml 5.0.0 is drawing near.
After two alpha releases, we have released a first beta version to
help you update your softwares and libraries ahead of the release (see
below for the installation instructions). The standard library has
been stabilized and many opam packages already work with this release.
If you find any bugs, please report them here:
<https://github.com/ocaml/ocaml/issues>
Compared to the last alpha release, this beta contains many small
internal runtime fixes (in particular in the systhreads library). At
the user level, the interfaces of the Domain and Effect modules have
been tweaked to be more forward-compatible:
• Exceptions related to effects are now defined in the Effect module.
• The value `Domain.recommended_domain_count' is no longer a constant
and the function `Domain.at_each_spawn' has been removed.
With those changes, the standard library should be stable now. The
final release of OCaml 5.0.0 is currently expected to be in December.
If you are interested by the ongoing list of bug fixes, the updated
change log for OCaml 5.0.0 is available at:
<https://github.com/ocaml/ocaml/blob/5.0/Changes>
You can also follow the state of the opam ecosystem on
<https://github.com/ocaml/opam-repository/issues/21526>
and
<http://check.ocamllabs.io/>
A short summary of the changes since the last alpha release is also
available below.
Installation instructions
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
The base compiler can be installed as an opam switch with the
following commands on opam 2.1:
┌────
│ opam update opam switch create 5.0.0~beta1
└────
For previous version of opam, the switch creation command line is
slightly more verbose:
┌────
│ opam update
│ opam switch create 5.0.0~beta1 --repositories=default,beta=git+https://github.com/ocaml/ocaml-beta-repository.git
└────
It might be also interesting to check the new support for parallelism
by installing the domainslib library with
┌────
│ opam install domainslib
└────
The source code for the beta release is available at these addresses:
• <https://github.com/ocaml/ocaml/archive/5.0.0-beta1.tar.gz>
• <https://caml.inria.fr/pub/distrib/ocaml-5.0/ocaml-5.0.0~beta1.tar.gz>
◊ Fine-tuned compiler configuration
If you want to tweak the configuration of the compiler, you can switch
to the option variant with:
┌────
│ opam update
│ opam switch create <switch_name> ocaml-variants.5.0.0~beta1+options <option_list>
└────
where `option_list' is a comma separated list of `ocaml-option-*'
packages. For instance, for a `flambda' and `no-flat-float-array'
switch:
┌────
│ opam switch create 5.0.0~beta1+flambda+nffa ocaml-variants.5.0.0~beta1+options ocaml-option-flambda
│ ocaml-option-no-flat-float-array
└────
The command line above is slightly more complicated for opam versions
anterior to 2.1:
┌────
│ opam update
│ opam switch create <switch_name> --packages=ocaml-variants.5.0.0~beta1+options,<option_list>
│ --repositories=default,beta=git+https://github.com/ocaml/ocaml-beta-repository.git
└────
In both cases, all available options can be listed with “opam search
ocaml-option”.
◊ Optional opam alpha repository
During the beta release, if your dependencies are not yet compatible
with OCaml 5.0.0, you might want to check the alpha opam repository:
<https://github.com/kit-ty-kate/opam-alpha-repository>
Which can be installed with
┌────
│ opam repo add alpha git+https://github.com/kit-ty-kate/opam-alpha-repository.git
└────
You can check that the alpha repository has been correctly installed
with
┌────
│ $ opam repo
│ <><> Repository configuration for switch 5.0.0~beta1 <><><><><><><><><><><><><>
│ 1 alpha git+https://github.com/kit-ty-kate/opam-alpha-repository.git
│ 2 default https://opam.ocaml.org
└────
This alpha repository contains various fixes that are in the process
of being upstreamed, but it should be less and less required with the
progress of the beta release.
Changes since the last alpha release
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
◊ Stdlib changes
• [#11309], [#11424], [#11427], +[#11545]: Add
Domain.recommended_domain_count. (Christiano Haesbaert, Konstantin
Belousov, review by David Allsopp, KC Sivaramakrishnan, Gabriel
Scherer, Nicolas Ojeda Bar)
• [#11423]: Move the effect exceptions to the Effect module (KC
Sivaramakrishnan, Xavier Leroy, and Florian Angeletti, review by
Florian Angeletti, Xavier Leroy, and KC Sivaramakrishnan)
• [#11593]: Remove `Domain.at_each_spawn' (Florian Angeletti, review
by Guillaume Munch-Maccagnoni and KC Sivaramakrishnan)
[#11309] <https://github.com/ocaml/ocaml/issues/11309>
[#11424] <https://github.com/ocaml/ocaml/issues/11424>
[#11427] <https://github.com/ocaml/ocaml/issues/11427>
[#11545] <https://github.com/ocaml/ocaml/issues/11545>
[#11423] <https://github.com/ocaml/ocaml/issues/11423>
[#11593] <https://github.com/ocaml/ocaml/issues/11593>
◊ Bug fixes
• [#11303]: Ensure that GC is not invoked from bounds check failures
(Stephen Dolan, review by Sadiq Jaffer and Xavier Leroy)
• [#5299], [#4787], [#11138], [#11272], [#11506]: To help debugging,
`Caml_state' now dynamically checks that the domain lock is held,
and fails otherwise (with a fatal error at most entry points of the
C API, or systematically in debug mode). A new variable
`Caml_state_opt' is introduced, and is `NULL' when the domain lock
is not held. This allows to test from C code if the current thread
holds the lock of its domain. (Guillaume Munch-Maccagnoni, review by
Florian Angeletti, Damien Doligez, Sadiq Jaffer, Xavier Leroy, and
Gabriel Scherer)
• [#11223]: The serialization format of custom blocks changed in 4.08,
but the deserializer would still support the pre-4.08 format. OCaml
5.x removed support for this old format; provide a clear error
message in this case. (Hugo Heuzard, review by Gabriel Scherer)
• [#11504], [#11522]: Use static allocation in `caml_make_float_vect'
in no-flat-float-array mode, it’s more efficient and avoids a a race
condition (Xavier Leroy, report by Guillaume Munch-Maccagnoni,
review by David Allsopp)
• [#11461], [#11466]: Fix gethostbyaddr for IPv6 arguments and make it
domain-safe (Olivier Nicole, Nicolás Ojeda Bär, David Allsopp and
Xavier Leroy, review by the same)
• [#11479]: Make Unix.symlink domain-safe on Windows (Olivier Nicole,
review by Xavier Leroy and David Allsopp)
• [#11294]: Switch minimum required autoconf to 2.71. (David Allsopp,
review by Xavier Leroy)
• [#11370], [#11373]: Don’t pass CFLAGS to flexlink during configure.
(David Allsopp, report by William Hu, review by Xavier Leroy and
Sébastien Hinderer)
• [#11487]: Thwart FMA test optimization during configure (William Hu,
review by David Allsopp and Sébastien Hinderer)
• [#11468]: Fix regression from [#10186] (OCaml 4.13) detecting IPv6
on Windows for mingw-w64 i686 port. (David Allsopp, review by Xavier
Leroy and Sébastien Hinderer)
• [#11482], [#11542]: Fix random crash in large closure allocation
(Damien Doligez, report by Thierry Martinez and Vincent Laviron,
review by Xavier Leroy)
• [#11508], [#11509]: make Bytes.escaped domain-safe (Christiano
Haesbaert and Gabriel Scherer, review by Xavier Leroy, report by Jan
Midtgaard and Tom Kelly)
• [#11516], [#11524]: Fix the `deprecated_mutable' attribute. (Chris
Casinghino, review by Nicolás Ojeda Bär and Florian Angeletti)
• [#11576]: Fix bug in Bigarray.Genarray.init in the the case of
zero-dimensional arrays. (Nicolás Ojeda Bär, Jeremy Yallop, report
by Masayuki Takeda, review by Jeremy Yallop and Florian Angeletti)
• [#11587]: Prevent integer comparison from being used on pointers
(Vincent Laviron, review by Gabriel Scherer)
[#11303] <https://github.com/ocaml/ocaml/issues/11303>
[#5299] <https://github.com/ocaml/ocaml/issues/5299>
[#4787] <https://github.com/ocaml/ocaml/issues/4787>
[#11138] <https://github.com/ocaml/ocaml/issues/11138>
[#11272] <https://github.com/ocaml/ocaml/issues/11272>
[#11506] <https://github.com/ocaml/ocaml/issues/11506>
[#11223] <https://github.com/ocaml/ocaml/issues/11223>
[#11504] <https://github.com/ocaml/ocaml/issues/11504>
[#11522] <https://github.com/ocaml/ocaml/issues/11522>
[#11461] <https://github.com/ocaml/ocaml/issues/11461>
[#11466] <https://github.com/ocaml/ocaml/issues/11466>
[#11479] <https://github.com/ocaml/ocaml/issues/11479>
[#11294] <https://github.com/ocaml/ocaml/issues/11294>
[#11370] <https://github.com/ocaml/ocaml/issues/11370>
[#11373] <https://github.com/ocaml/ocaml/issues/11373>
[#11487] <https://github.com/ocaml/ocaml/issues/11487>
[#11468] <https://github.com/ocaml/ocaml/issues/11468>
[#10186] <https://github.com/ocaml/ocaml/issues/10186>
[#11482] <https://github.com/ocaml/ocaml/issues/11482>
[#11542] <https://github.com/ocaml/ocaml/issues/11542>
[#11508] <https://github.com/ocaml/ocaml/issues/11508>
[#11509] <https://github.com/ocaml/ocaml/issues/11509>
[#11516] <https://github.com/ocaml/ocaml/issues/11516>
[#11524] <https://github.com/ocaml/ocaml/issues/11524>
[#11576] <https://github.com/ocaml/ocaml/issues/11576>
[#11587] <https://github.com/ocaml/ocaml/issues/11587>
◊ Documentation changes
• [#11093]: Add tutorials on parallelism features and the relaxed
memory model (KC Sivaramakrishnan, review by Damien Doligez, Anil
Madhavapeddy, Gabriel Scherer, Thomas Leonard, Tom Ridge, Xavier
Leroy, Luc Maranget, Fabrice Buoro, Olivier Nicole, Guillaume
Munch-Maccagnoni, Jacques-Henri Jourdan)
[#11093] <https://github.com/ocaml/ocaml/issues/11093>
ppx_deriving_yaml 0.1.0
═══════════════════════
Archive:
<https://discuss.ocaml.org/t/ann-ppx-deriving-yaml-0-1-0/7007/2>
Patrick Ferris announced
────────────────────────
A new `0.2.0' version has just been released. Thanks to all the
contributors (including Outreachy applicants!), there’s a lot of nice
additions including:
• `to_yaml' and `of_yaml' attributes allowing you to add custom
encoders and decoders
• a `skip_unknown' flag for ignoring yaml keys so you can partially
decode yaml values
• a `default' attribute
• `[@@deriving yaml]' is now an alias to `[@@deriving to_yaml]' and
`[@@ deriving of_yaml]' so you can get decoders, encoders or both.
See the documentation in the README:
<https://github.com/patricoferris/ppx_deriving_yaml>
A sandbox for proposing new features in odoc
════════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/a-sandbox-for-proposing-new-features-in-odoc/10650/1>
jbeckford announced
───────────────────
/For people interested in good documentation for their projects, but
need a bit more from odoc./
I wanted to make a place where the broader OCaml community can
experiment and propose odoc features:
[https://diskuv.github.io/odoc-sandbox/]
I had two goals for the sandbox:
• Let you visually see any proposals for new features to odoc.
Hopefully this will make scoping the proposal easier.
• No one should be blocked. Assuming the proposal is ok, it may take
months (or even years) to implement. Any early adopter could use the
custom Dune rules from the experiment to adopt in their own
projects. Early adoption would be complex (custom Dune rules) but
since the syntax shouldn’t change they won’t have to throw out their
documentation.
I have one proposal in the sandbox and more will come later; there are
also a few experiments using Sphinx and Markdown tools.
The first proposal would translate an odoc verbatim block:
┌────
│ {v
│ ::code-block:: LANGUAGE
│
│ source code
│ v}
└────
into syntax highlighted code. [The visual results and the original
`.mli' are available in experiment 400].
As I mentioned earlier, it has Dune rules which can be copied if you
need it in your own projects. I don’t precisely know _how_ it would be
implemented for real in odoc (probably it would be a .mli transformer)
but that is not the point. Instead if you have an implementation idea
or simply love/hate the proposal, you can just go to GitHub and file
an issue at [https://github.com/diskuv/odoc-sandbox/issues].
[https://diskuv.github.io/odoc-sandbox/]
<https://diskuv.github.io/odoc-sandbox/>
[The visual results and the original `.mli' are available in experiment
400] <https://diskuv.github.io/odoc-sandbox/400-codeblock/index.html>
[https://github.com/diskuv/odoc-sandbox/issues]
<https://github.com/diskuv/odoc-sandbox/issues>
OCaml Platform Installer alpha release
══════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/ann-ocaml-platform-installer-alpha-release/10652/1>
Thibaut Mattio announced
────────────────────────
In anticipation of the forthcoming OCaml 5 release—and hot on the
heels of its beta release—we are thrilled to announce the alpha
release of the [OCaml Platform Installer].
As a reminder, the [OCaml Platform] is the recommended toolchain for
developers to work with OCaml.
The Platform Installer allows the user to easily setup OCaml’s
development environment, both for a first-time installation and for
any new opam switches.
You can try it now by following the [installation
instructions](#platform-installer-2), but TL;DR, you can install it
with
┌────
│ $ bash < <(curl -sL https://github.com/tarides/ocaml-platform-installer/releases/latest/download/installer.sh)
└────
And run it to install the Platform in your opam switch with
┌────
│ $ ocaml-platform
└────
Don’t hesitate to [open an issue] if you encounter any problem!
[OCaml Platform Installer]
<https://github.com/tarides/ocaml-platform-installer>
[OCaml Platform] <https://ocaml.org/docs/platform>
[open an issue]
<https://github.com/tarides/ocaml-platform-installer/issues>
Update of the Platform State
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
As part of the work on the Installer, we’ve updated the [state of the
Platform] to make it up to date and clarify the requirements to
include a project in the Platform. Here are some of the notable
changes:
• `odoc' has been promoted from Incubate to Active
• OCamlformat has been promoted from Incubate to Active
• `ppxlib' and other metaprogramming frameworks have been removed from
the Platform (and `ppxlib' is now documented as the official way to
do metaprogramming, as part of the official [OCaml documentation])
You can see the complete changes on the [corresponding PR].
In parallel, we also want to make the Platform more open and
transparent. To do this, we want to provide a clear governance model
that can be driven by the community. The governance model should
answer questions like:
• How can I incubate my project in the Platform?
• Who decides when a project can be promoted?
• How to discuss changes that would impact multiple Platform projects?
We’re currently following the [OCaml.org’s governance], but are
exploring new ways to govern the OCaml Platform.
We are leaning toward an RFC process for this, but we are still
discussing the alternatives and how this could take shape. We will
continue to experiment on the best governance model for the Platform
with the project maintainers in the coming months, and we will publish
the resulting governance on OCaml.org.
[state of the Platform] <https://ocaml.org/docs/platform>
[OCaml documentation] <https://ocaml.org/docs/metaprogramming>
[corresponding PR] <https://github.com/ocaml/ocaml.org/pull/571>
[OCaml.org’s governance] <https://ocaml.org/governance>
Platform Installer
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
The Platform Installer provides the best way to install OCaml and the
recommended development tools for both newcomers and existing users.
*Simplicity.* It aims at replacing the [existing installation steps]
with a much simpler workflow.
To install the Platform Installer `ocaml-platform', you can run:
┌────
│ $ bash < <(curl -sL https://github.com/tarides/ocaml-platform-installer/releases/latest/download/installer.sh)
└────
This script will install opam, if not already present in the system,
and the latest version of `ocaml-platform'.
Then, to install the Platform tools:
┌────
│ $ ocaml-platform
└────
If opam is not initialised, this command will initialise it. Then it
will proceed to installing the Platform tools in the current opam
switch.
For first-time users, the above two lines will set them up with a
working environment that’s complete enough to hack comfortably with
OCaml.
*Speed.* In order to speed up the process of installing development
tools, the Installer caches the binaries to avoid for redundant
compilation. For instance, you will only need to compile `ocamlformat'
once per version of the tool.
However, some tools such as Merlin depend on the OCaml version. For
those, the Installer’s cache distinguishes the binaries, depending on
the version of the tool as well the OCaml version it was compiled
with.
*Integration.* The Installer integrates the development tools it
installs as opam packages to make it fully aware of what has been
installed. The binary provided by the Installer for the `dune' tool
will allow the installation of any package with a Dune dependency
without reinstalling it.
However, some development tools include libraries in their opam
package that are not provided by the Installer. In this case,
installing the original opam package for the tool will replace the one
provided by `ocaml-platform'.
The opam packages installed by `ocaml-platform' are dependency-free.
This means that installing specific versions of your development tools
will never mess with the actual dependencies of your project!
[existing installation steps] <https://ocaml.org/docs/up-and-running>
◊ The Tools Installed
The list of tools installed by `ocaml-platform' will ultimately be the
platform tools listed in the [Platform Docs] as either Active and
Incubate. Currently, this list is still incomplete for different
reasons, such as keeping installation time short for new users, the
number of dependencies, or other technical constraints.
The set of installed tools already provides a complete working
environment, with:
• A build system: Dune
• A documentation generator: `odoc'
• A code formatter: OCamlformat
• A release helper: `dune-release'
• Editor integration: `ocaml-lsp' and Merlin.
[Platform Docs] <https://ocaml.org/docs/platform>
Next Steps
╌╌╌╌╌╌╌╌╌╌
There’s still a lot to do!
*Governance.* As mentioned above, we should have a clear governance
model for how incubation and promotions happen in the Platform, who
decides, and which criterias are applied. This should obviously be an
open process driven by the community; however, we want to make sure
that we propose a governance model that will work well, so we’re still
discussing alternatives and experimenting on some options. We’d love
your input on this, so expect a Discuss post with a proposed
governance model for the Platform soon. Don’t hesitate to [reach
out](<mailto:thibaut at tarides.com>) to us before then if you want to
get involved!
*Editor Integration.* While the Installer is a step forward towards a
simple way to install OCaml, the UX for newcomers can still be
improved. We plan to integrate the Installer to the official VSCode
plugin. This will provide a way to get a complete development
environment in only a few clicks directly in the editor. We will also
explore how to make the setup of Emacs and Vim more straighforward.
*Remote Cache.* In order to further reduce the time taken to start
hacking on a project, we are working on a remote cache for the
Installer. The cache will be populated by a CI and would remove the
need for compiling the tools locally. The local cache and compilation
mechanism would still be used as a fallback if the remote repo is down
or incomplete (such as for a pinned compiler).
Acknowledgments
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
Thank you to the developers and alpha-testers who contributed to the
Plaform Installer project, particularly the Tarides engineers who have
been driving the development:
• [Jules Aguillon]
• [Paul-Elliot]
• [Sonja Heinze]
We’d also like to thank our major funder Jane Street for supporting
our work to improve OCaml’s installation experience!
[Jules Aguillon] <https://github.com/Julow>
[Paul-Elliot] <https://github.com/panglesd>
[Sonja Heinze] <https://github.com/pitag-ha>
dkml-dune-dsl 0.x.x - Parameterizable Dune files embedded in OCaml
══════════════════════════════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/ann-dkml-dune-dsl-0-x-x-parameterizable-dune-files-embedded-in-ocaml/10654/1>
jbeckford announced
───────────────────
I am pleased to announce dkml-dune-dsl, an embedding of Dune inside
OCaml (aka. an eDSL) for developers that need to simplify complex Dune
logic. An excerpt from the [README]:
Once installed you will be able to write DSL expressions
like:
┌────
│ open DkmlDuneDsl
│
│ module Build (I : Dune.SYM) = struct
│ open I
│
│ let res =
│ [
│ rule
│ [
│ target "{{{ name }}}.txt";
│ action
│ (with_stdout_to "%{target}"
│ (echo [ "{{{ age }}}" ]));
│ ];
│ ]
│ end
└────
that are run over the parameters in a JSON file:
┌────
│ {
│ "param-sets": [
│ {"name": "batman", "age": 39},
│ {"name": "robin", "age": 24}
│ ]
│ }
└────
You can do also do aggregation or, if you are really
adventurous, define your own interpreter. Even if you
don’t use parameterization you get things you take for
granted with OCaml: type-safety, auto-complete and `let`
constants.
The full documentation including installation instructions and
examples are available in the [README].
A few cautionary notes:
• The current version (0.1.0 as of Oct 17 2022) does not have 100%
coverage of all Dune expressions; it just has the parts of Dune I’ve
needed in my own projects. That includes an encoding of the Ordered
Set Language and virtual libraries but not (for example) `select'
forms, plugins, ctypes and lex/yacc. But I strongly suspect the same
people who need a tool like dkml-dune-dsl are the same people who
can easily contribute a PR to add any parts of Dune they need.
• The API is unstable; if someone adds more Dune expressions they may
have to tweak the API. And I haven’t settled on whether the API
needs some first-class features to track Dune’s `(lang dune X.Y.Z)'
versioning.
• This is not blessed in any way by the Dune team! Hopefully they
don’t mind though.
[README] <https://github.com/diskuv/dkml-dune-dsl#readme>
Other OCaml News
════════════════
>From the ocaml.org blog
───────────────────────
Here are links from many OCaml blogs aggregated at [the ocaml.org
blog].
• [Real World OCaml Book Giveaway!]
• [8 OCaml Libraries to Make Your Life Easier]
• [ICFP 2022 Review]
[the ocaml.org blog] <https://ocaml.org/blog/>
[Real World OCaml Book Giveaway!]
<https://tarides.com/blog/2022-10-14-real-world-ocaml-book-giveaway>
[8 OCaml Libraries to Make Your Life Easier]
<https://tarides.com/blog/2022-10-12-8-ocaml-libraries-to-make-your-life-easier>
[ICFP 2022 Review]
<https://tarides.com/blog/2022-10-10-icfp-2022-review>
Old CWN
═══════
If you happen to miss a CWN, you can [send me a message] and I’ll mail
it to you, or go take a look at [the archive] or the [RSS feed of the
archives].
If you also wish to receive it every week by mail, you may subscribe
[online].
[Alan Schmitt]
[send me a message] <mailto:alan.schmitt at polytechnique.org>
[the archive] <https://alan.petitepomme.net/cwn/>
[RSS feed of the archives] <https://alan.petitepomme.net/cwn/cwn.rss>
[online] <http://lists.idyll.org/listinfo/caml-news-weekly/>
[Alan Schmitt] <https://alan.petitepomme.net/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.idyll.org/pipermail/caml-news-weekly/attachments/20221018/f4066733/attachment-0001.html>
More information about the caml-news-weekly
mailing list