| From: |
| Alan Schmitt <alan.schmitt-AT-polytechnique.org> |
| To: |
| "lwn" <lwn-AT-lwn.net>, caml-list-AT-inria.fr |
| Subject: |
| Attn: Development Editor, Latest OCaml Weekly News |
| Date: |
| Tue, 10 Oct 2023 09:48:51 +0200 |
| Message-ID: |
| <m2zg0qapek.fsf@mac-03220211.irisa.fr> |
Hello
Here is the latest OCaml Weekly News, for the week of October 03 to 10,
2023.
Table of Contents
─────────────────
Interesting OCaml Articles
bindings to the PARI algebra library
OCaml compiler project/contribution ideas
Ppxlib 0.31.0
dune 3.11.0
Arrakis: A new RISC-V simulator
Web Analytics on OCaml.org
A Roadmap for the OCaml Platform - Seeking Your Feedback
producer 0.2.0
Call for Contributions: BOB 2024, Berlin [March 15, Deadline Nov 17]
A little article about Miou
Old CWN
Interesting OCaml Articles
══════════════════════════
Archive:
<https://discuss.ocaml.org/t/interesting-ocaml-articles/18...>
Dmitrii Kovanikov said
──────────────────────
Today I’ve read a nice beginner-friendly blog post about pattern
matching in OCaml with lots of examples:
• <https://www.nexxel.dev/blog/pattern-matching>
bindings to the PARI algebra library
════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/ann-bindings-to-the-pari-alge...>
Julien announced
────────────────
I wrote [ocaml-pari], an OCaml library providing bindings to the
[PARI] algebra library. The bindings are automatically generated from
the library’s header files. In addition, a light wrapper offers a thin
layer of static typing to not only encode part of the written
documentation into types by means of phantom types, but to encode
actual invariants to prevent mismatches between functions and
arguments. E.g., to prevent from multiplying a group element by a
polynomial. One can find code samples in the `examples' directory,
notably cryptographic polynomial commitments (`kzg.ml') and an attack
on a knapsack cryptosystem (`knapsack_lll.ml').
The underlying library, PARI, is written in C and relies on a single
recursive type to represent all objects. With the wrapper, this type
is `(‘kind, ‘structure) t' so as to annotate it with its kind and the
operations it supports. It is thus possible to write a generic
algorithm that works with group elements `(‘a, group) t' for instance.
The library will be available on OPAM once its cache is synchronized
(so tomorrow): `opam install ocaml-pari'.
[ocaml-pari] <https://github.com/jtcoolen/ocaml-pari>
[PARI] <https://pari.math.u-bordeaux.fr/>
OCaml compiler project/contribution ideas
═════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/ocaml-compiler-project-contri...>
gasche announced
────────────────
We compiler maintainers were recently approached by students looking
for a contribution to the OCaml compiler that would be appropriate for
their final year project. We thought of a couple contribution topics,
but in the end the students decided to work on something else. I
turned our project ideas into github/ocaml issues; if you were looking
for a medium-size project to contribute to the OCaml compiler
codebase, you may be interested in some of them.
• small task: <https://github.com/ocaml/ocaml/issues/12629>
• medium-sized task: <https://github.com/ocaml/ocaml/issues/12630>
• medium-sized task: <https://github.com/ocaml/ocaml/issues/12631>
• larger task: <https://github.com/ocaml/ocaml/issues/12632>
• choose-the-size task: <https://github.com/ocaml/ocaml/issues/12633>
Let me use this occasion to remind people that we have tagged some
issues as “newcomer jobs”, which may be good entry point to contribute
to the compiler.
• [newcomer jobs] for relatively easy tasks
• [advanced newcomer jobs] for harder tasks (more work, or requires
good expertise in the language or learning technical aspects of how
the compiler works)
Please feel free of course to ask any question, make suggestions etc.
[newcomer jobs] <https://github.com/ocaml/ocaml/labels/newcomer-job>
[advanced newcomer jobs]
<https://github.com/ocaml/ocaml/labels/newcomer-job-advanced>
Ppxlib 0.31.0
═════════════
Archive: <https://discuss.ocaml.org/t/ann-ppxlib-0-31-0/13170/1>
Sonja Heinze announced
──────────────────────
We’re happy to announce the release of `Ppxlib' 0.31.0.
This `Ppxlib' release fixes a bug in the support of OCaml 5.1.0.
Before that bug fix, the warnings about a generative/applicative
mismatch between a functor creation and its application introduced by
OCaml 5.1.0 were also triggered when that mismatch didn’t exist.
Furthermore, the release contains a couple of bug fixes in the context
of attributes.
We’re also excited about two main enhancements. One allows authors of
extension node rewriters to add a path argument to the extension node.
That’s excellent for hygiene since it allows the PPX to be explicit
about modules rather than depending on its scope.
The other main enhancement allows an opt-in for compiler warnings
about unused code generated by derivers (warnings w32 and w60). That
opting in needs to happen on both sides of the deriver, the writer
side and the user side. Opting in to those code warnings will help to
clean up unused code, leading to performance improvements in
compilation and editor support.
• Fix support for OCaml 5.1: migrated code preserves generative
functor warnings, without creating more. Locations are better
preserved. (#432, @pitag-ha, @panglesd)
• Driver: Add `-unused-code-warnings' command-line flag. (#444,
@ceastlund)
• Add `?warning' flag to `Deriving.Generator.make'. (#440,
@jacksonzou123 via @ceastlund)
• Restore the “path_arg” functionality in the V3 API (#431,
@ELLIOTTCABLE)
• Expose migration/copying/etc. functions for all AST types needed by
`Pprintast' (#454, @antalsz)
• Preserve quoted attributes on antiquotes in metaquot (#441,
@ncik-roberts)
• Attribute namespaces: Fix semantics of reserving multi-component
namespaces (#443, @ncik-roberts)
PD: You can also find these release notes on the [ocaml.org
changelog].
[ocaml.org changelog] <https://ocaml.org/changelog>
dune 3.11.0
═══════════
Archive: <https://discuss.ocaml.org/t/ann-dune-3-11-0/13173/1>
Etienne Millon announced
────────────────────────
The Dune team is pleased to announce the release of Dune 3.11 [“for
workgroups”].
Here is the changelog:
[“for workgroups”]
<https://en.wikipedia.org/wiki/Windows_3.1x#Windows_for_Wo...>
Added
╌╌╌╌╌
• `enabled_if' now supports `arch_sixtyfour' variable (#8023, fixes
#7997, @Alizter)
• Experimental: Added a `$ dune monitor' command that can connect to a
running `dune build' in watch mode and display the errors and
progress. (#8152, @Alizter)
• The `progress' RPC procedure now has an extra field for the
`In_progress' constructor for the number of failed jobs. (#8212,
@Alizter)
• Add a `--preview' flag to `dune fmt' which causes it to print out
the changes it would make without applying them (#8289, @gridbugs)
• Introduce `(source_trees ..)' to the install stanza to allow
installing entire source trees. (#8349, @rgrinberg)
• Add `--stop-on-first-error' option to `dune build' which will
terminate the build when the first error is encountered. (#8400,
@pmwhite and @Alizter)
• Dune now displays the number of errors when waiting for changes in
watch mode. (#8408, fixes #6889, @Alizter)
• Add `with_prefix' keyword for changing the prefix of the destination
of installed files matched by globs. (#8416, @gridbugs)
• Added experimental `--display tui' option for Dune that opens an
interactive Terminal User Interface (TUI) when Dune is running.
Press ’?’ to open up a help screen when running for more
information. (#8429, @Alizter and @rgrinberg)
• Add a `warnings' field to `dune-project' files as a unified
mechanism to enable or disable dune warnings (@rgrinberg, 8448)
• `dune exec': support syntax like `%{bin:program}'. This can appear
anywhere in the command line, so things like `dune exec time
%{bin:program}' now work. (#6035, #8474, fixes #2691, @emillon,
@Leonidas-from-XIV)
• Add a new alias `@doc-json' to build odoc documentation in JSON
format. This output can be consumed by external tools. (#8178,
@emillon)
Changed and fixed
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
• Use `posix_spawn' instead of `fork' on MacOS. This gives us a
performance boost and allows us to re-enable thread. (#8090,
@rgrinberg)
• Modules that were declared in `(modules_without_implementation)',
`(private_modules)' or `(virtual_modules)' but not declared in
`(modules)' will raise an error. (#7674, @Alizter)
• No longer emit linkopts(javascript) in META files (#8168, @hhugo)
• RPC message styles are now serialised meaning that RPC diagnostics
keep their Ansi styling. (#8516, fixes #6921, @Alizter)
• Truncate output from actions that produce too much output (@tov,
#8351)
• Allow libraries to shadow OCaml builtin libraries. Previously,
builtin libraries would always take precedence. (@rgrinberg, #8558)
• `dune utop' no longer links `utop' in “custom” mode, which should
make this command considerably faster. (#8631, fixes #6894, @nojb)
• Ensure that package names in `dune-project' are valid opam package
names. (#8331, @emillon)
• init: check that module names are valid (#8644, fixes #8252,
@emillon)
• dune init: parse `--public' as a public name (#8603, fixes #7108,
@emillon)
• Stop signing source files with substitutions. Sign only binaries
instead (#8361, fixes #8360, @anmonteiro)
• Make copy sandbox support directory targets. (#8705, fixes #7724,
@emillon)
Deprecated and removed
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
• Deprecate install destination paths beginning with “..” to prevent
packages escaping their designated installation directories. (#8350,
@gridbugs)
• Remove warning against `.dune' files generated by pre dune 2.0
(#8611, @rgrinberg)
• Remove versions 0.1 and 0.2 of the experimental ctypes extension.
(#8293, @emillon)
Arrakis: A new RISC-V simulator
═══════════════════════════════
Archive:
<https://discuss.ocaml.org/t/arrakis-a-new-risc-v-simulato...>
Valoran announced
─────────────────
I’ve been working with a friend on a new RISC-V simulator called
Arrakis, and we just did our first release!
Most of the features are listed in the [README], but if you are
interested, here is a quick summary:
• Full RV32IM Instruction set
• Different type of environmental call support (UNIX and Venus)
• Partial GNU `as' assembler directive
• A debugging system using breakpoint
There is currently only a terminal interface, but we have already
implemented a UNIX socket to make it easy to develop plugin to
integrate it to other development environment (We are currently
working on a Vim plugin)
As it is our first release, they may still be some issue, but the
simulator is already quite usable.
The complete documentation for the project is available [here]
We would be more than happy to receive any feedback, so please feel
free to test it and open an issue if you find something!
[README] <https://gitlab.com/valoranM/arrakis>
[here] <https://gitlab.com/valoranM/arrakis/-/wikis/home>
Web Analytics on OCaml.org
══════════════════════════
Archive:
<https://discuss.ocaml.org/t/web-analytics-on-ocaml-org/13...>
Thibaut Mattio said, starting a discussion
──────────────────────────────────────────
As you’ve witnessed, the OCaml.org team has been hard at work to make
the site the best resource to learn OCaml and discover the ecosystem.
Since the [launch of V3] in April last year, we’ve revamped the
centralised documentation site based on community feedback, and we’re
currently doing the same for the Learn area and the documentation.
We’re planning to revisit the Blog and Community sections next.
While we’re receiving tons of qualitative feedback that indicates that
we’re moving in the right direction, it’s been a challenge to measure
the impact of the decisions we take. Are users of the site able to
find the Standard Library documentation more easily? How many users
who install OCaml end up reading the documentation? Are people using
the new [OCaml Changelog] and the [Job board]? A lot of questions are
currently difficult to answer and would allow us to make better
decisions to improve the experience on the site.
When we launched the site, we made a strong commitment to [protect
users’ privacy]. We refuse to use cookies, we are not using any
external service that might collect your data, we’re vendoring every
JavaScript and asset so as to not use external CDN, and we’re not
running any web analytics.
We’re still unwaveringly committed to protecting OCaml.org’s visitors’
privacy. To address our lack of data on the site’s usage while
respecting the principles we’ve adopted, we’ve selected [Plausible] as
a possible way to get usage statistics.
Plausible is a [privacy-focused] web analytics service. It doesn’t use
cookies, doesn’t collect any personal data, and is fully compliant
with GDPR, CCPA and PECR.
We plan on rolling out Plausible for OCaml.org in the coming weeks.
Do you have any questions or concerns with using Plausible on
OCaml.org?
[launch of V3]
<https://discuss.ocaml.org/t/v3-ocaml-org-we-are-live/9747>
[OCaml Changelog] <https://ocaml.org/changelog>
[Job board] <https://ocaml.org/jobs>
[protect users’ privacy] <https://ocaml.org/policies/privacy-policy>
[Plausible] <https://plausible.io/>
[privacy-focused] <https://plausible.io/privacy-focused-web-analytics>
A Roadmap for the OCaml Platform - Seeking Your Feedback
════════════════════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/a-roadmap-for-the-ocaml-platf...>
Deep in this thread, Xavier Leroy said and Anil Madhavapeddy replied
────────────────────────────────────────────────────────────────────
I agree that an integrated tool can have better
performance than a collection of standalone tools used via
their CLIs. But this is not a valid reason to kill the
standalone tools and their CLIs! It’s for end-users to
choose between the fast integrated tool with its fixed
workflow and the perhaps slower but more flexible
standalone tools that support the users’ preferred
workflow.
I fear I may be partly responsible for the ’killing the CLI’ part of
this, as I first demonstrated a really early integrated prototype back
in a [Oxford OCaml Workshop presentation]. Allow me to be really clear
on my position here today: *any CLI that is released as part of OCaml
Platform tooling and has users is one we try really hard to maintain*,
as that CLI is very often already integrated into build scripts (and
will thus break some opam packages that are already released, and we
do try so hard to keep those building over time without upper bounds).
Back when I started prototyping the integrated CLI in 2017, OCaml was
possibly at its lowest point in terms of the Platform tooling, since
almost no industrial users actually used the publicly released tools!
Jane Street had Jenga, Coq had Makefiles, Xen still used omake, the
OCaml compiler itself had backed away from using ocamlbuild, and every
project I talked to didn’t because they cited slow performance and
difficult debuggability to the then-recommended stack of
Oasis/ocamlbuild/ocamlfind. How did this happen? A fateful decision
back in 2012 resulted in Oasis _wrapping_ the ocamlbuild CLI, which in
turn had a special mode that wrapped ocamlfind, and every single
compiler invocation went through 5 forks before it ever got to
`ocamlopt.opt'. If instead Oasis had instead linked to ocamlbuild as a
library, we may have avoided this, but we’ll never find out. And I’m
not criticising the authors of Oasis for their decision either – it
was a very pragmatic one to get us past having to write direct
ocamlbuild _tags files.
What I underestimated with the integrated CLI is the sheer amount of
time any migrations take for downstream projects, and also what Xavier
points out above about multi-language builds and the flexibility of
Makefiles. So my own thinking has evolved on it too: what we need from
our tools is a OCaml library interface, with the CLIs being as thin as
possible. And by and large, that’s mostly how the active tools in the
Platform operate today. We have a number of CLI tools that
interoperate via opam-libs or the more lightweight opam-file-format.
Dune itself is just vendoring in big chunks of opam for its own
integration, which means that it can be upgraded with the same core
logic as used in future versions of the opam CLI. Dune’s also got a
library reimplementation of ocamlfind, so that it doesn’t need to
shell out to that but still retains strong compatibility.
This also points to a possible good toplevel metric for the OCaml
Platform: *what proportion of the community are using the tools that
we recommend?* This proportion is clearly increasing (opam, dune,
merlin, lsp-server and odoc are now widely adopted both in open source
and in monolithic codebases that use OCaml), but I think we’re less
clear on others like ocamlformat, dune-release _vs_ opam-publish, and
mdx. Suggestions for improvements on this metric, and for ways to
measure it more systematically, are welcome.
[Oxford OCaml Workshop presentation]
<https://watch.ocaml.org/w/83ANjgugXRtJ7ACNRapsQe?start=27m3s>
producer 0.2.0
══════════════
Archive: <https://discuss.ocaml.org/t/ann-producer-0-2-0/13191/1>
Trent Small announced
─────────────────────
Hi everyone!
I’m pleased to announce a new release of `producer', v0.2.0.
This release allows a Producer graph to be specified for Monads with
more than one type parameter (e.g. `Result.t'). The previous release
of this library only allowed Monads with one type parameter (e.g.
`Lwt.t').
Feel free to take a look and let me know what you think –
contributions are also welcome if you find this idea intriguing and
want to improve upon it.
Happy coding!
Call for Contributions: BOB 2024, Berlin [March 15, Deadline Nov 17]
════════════════════════════════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/call-for-contributions-bob-20...>
Michael Sperber announced
─────────────────────────
OCaml-related material is very much welcome at BOB!
Web version of call is here:
<https://bobkonf.de/2024/cfc.html>
┌────
│ ================================================================================
│ BOB Conference 2024
│ "What happens when we use what's best for a change?"
│ https://bobkonf.de/2024/cfc.html
│ Berlin, Mar 17
│ Call for Contributions
│ Deadline: November 17, 2023
│ ================================================================================
│
│ You are actively engaged in advanced software engineering methods,
│ solve ambitious problem with software and are open to cutting-edge
│ innovation? Attend this conference, meet people that share your goals,
│ and get to know the best software tools and technologies available
│ today. We strive to offer a day full of new experiences and
│ impressions that you can use to immediately improve your daily life as
│ a software developer.
│
│ If you share our vision and want to contribute, submit a proposal for
│ a talk or tutorial!
│
│ NOTE: The conference fee will be waived for presenters. Travel
│ expenses will not be covered (for exceptions see "Speaker Grants").
│
│ Shepherding
│ -----------
│
│ The program committee offers shepherding to all speakers. Shepherding
│ provides speakers assistance with preparing their
│ sessions. Specifically:
│
│ - advice on structure and presentation
│ - review of talk slides
│ - assistance with recording
│ - review of recording, if applicable
│
│ Speaker Grants
│ --------------
│
│ BOB has Speaker Grants available to support speakers from groups
│ under-represented in technology. We specifically seek women speakers,
│ speakers of color, and speakers who are not able to attend the
│ conference for financial reasons.
│
│ Topics
│ ------
│
│ We are looking for talks about best-of-breed software technology, e.g.:
│
│ - functional programming
│ - persistent data structures and databases
│ - event-based modelling and architecture
│ - "fancy types" (dependent types, gradual typing, linear types, ...)
│ - formal methods for correctness and robustness
│ - abstractions for concurrency and parallelism
│ - metaprogramming
│ - probabilistic programming
│ - math and programming
│ - controlled side effects
│ - program synthesis
│ - next-generation IDEs
│ - effective abstractions for data analytics
│ - … everything really that isn’t mainstream, but you think should be
│ - … includeing rough ideas worth discussing.
│
│ Presenters should provide the audience with information that is
│ practically useful for software developers.
│
│ Challenges
│ ----------
│
│ Furthermore, we seek contributions on successful approaches for
│ solving hard problems, for example:
│
│ - bias in machine-learning systems
│ - digital transformation in difficult settings
│ - accessibiltity
│ - systems with critical reliability requirements
│ - ecologically sustainable software development
│
│ We're especially interested in experience reports.
│ Other topics are also relevant, e.g.:
│
│ - introductory talks on technical background
│ - overviews of a given field
│ - demos and how-tos
│
│ Requirements
│ ------------
│
│ We accept proposals for presentations of 45 minutes (40 minutes talk +
│ 5 minutes questions), as well as 90 minute tutorials for
│ beginners. The language of presentation should be either English or
│ German.
│
│ Your proposal should include (in your presentation language of choice):
│
│ - An abstract of max. 1500 characters.
│ - A short bio/cv
│ - Contact information (including at least email address)
│ - A list of 3-5 concrete ideas of how your work can be applied in a developer's daily life
│ - additional material (websites, blogs, slides, videos of past presentations, …)
│
│ Organisation
│ ------------
│
│ - Direct questions to konferenz at bobkonf dot de
│ - Proposal deadline: November 17, 2023
│ - Notification: December 5, 2023
│ - Program: December 12, 2023
│
│ Submit here:
│
│ https://pretalx.com/bob-2024/submit/
│
│ Program Committee
│ -----------------
│
│ (more information here: https://bobkonf.de/2024/programmkomitee.html)
│
│ - Matthias Fischmann, Wire
│ - Matthias Neubauer, SICK AG
│ - Nicole Rauch, Softwareentwicklung und Entwicklungscoaching
│ - Michael Sperber, Active Group
│ - Stefan Wehr, Hochschule Offenburg
│
│ Scientific Advisory Board
│
│ - Annette Bieniusa, TU Kaiserslautern
│ - Torsten Grust, Uni Tübingen
│ - Peter Thiemann, Uni Freiburg
└────
A little article about Miou
═══════════════════════════
Archive: <https://mastodon.social/@dinosaure/111204856028822299>
Dinosaure said
──────────────
I just published a little article about Miou, a scheduler for #OCaml 5
in my blog: <https://blog.osau.re/articles/miou.html>. You can also
check my last experimentation about it, an HTTP client which is able
to run things in parallel: <https://github.com/robur-coop/httpcats>
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
to the [caml-list].
[Alan Schmitt]
[send me a message] <mailto:alan.schmitt@polytechnique.org>
[the archive] <https://alan.petitepomme.net/cwn/>
[RSS feed of the archives] <https://alan.petitepomme.net/cwn/cwn.rss>
[caml-list] <https://sympa.inria.fr/sympa/info/caml-list>
[Alan Schmitt] <https://alan.petitepomme.net/>