| 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, 05 Mar 2024 15:50:41 +0100 |
| Message-ID: |
| <m2r0gozq9q.fsf@mac-03220211.irisa.fr> |
Hello
Here is the latest OCaml Weekly News, for the week of February 27 to
March 05, 2024.
Table of Contents
─────────────────
mirage-crypto 0.11.3 (with more speed for elliptic curves) – and the future roadmap of
mirage-crypto
Ocsigen: summary of recent releases
OCaml Platform Newsletter: January 2024
Discussions on the future of the opam repository
ocaml-protoc-plugin 5.0.0
ppx_minidebug 1.3.0: toward a logging framework
iostream 0.2
Bogue, the OCaml GUI
Owl project restructured
20+ ways to build an executable with foreign libs
opam build and opam test: the opam plugins that simplifies your dev setup
Seeking feedback on repackaged libraries for Base
Outreachy internship demo session
dream-html 3.0.0
Add your OCaml Events to the Community Page on OCaml.org
Other OCaml News
Old CWN
mirage-crypto 0.11.3 (with more speed for elliptic curves) – and the future roadmap of
mirage-crypto
════════════════════════════════════════════════════════════════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/ann-mirage-crypto-0-11-3-with...>
Hannes Mehnert announced
────────────────────────
we’re happy to announce mirage-crypto 0.11.3 (which just got merged to
opam-repository), which includes huge performance improvements for
elliptic curves. The API didn’t change at all :)
The background story is that we finally merged the [“use bytes instead
of Cstruct.t” PR] which was opened ~2.5 years ago by @dinosaure. We
reviewed that, and did some benchmarks. And even went a bit further
and are now using `string' (instead of `bytes'). See
<https://blog.robur.coop/articles/speeding-ec-string.html> for further
details.
Another PR worth mentioning is [use windowed algorithm for base scalar
multiplication] from Virgile Robles – now some precomputed tables are
shipped (same approach was done for 25519 already).
[See] [this] [PR] (and the [release notes]) for some detailed
performance numbers on different CPUs – the P256 sign operation is
around 10x faster than older releases. This is still 5 times slower
than OpenSSL - but then we use [fiat-crypto] instead of handcrafted
assembly code. We’re keen to improve the performance even further –
ideas, observations, experiments and PRs are very welcome. We
investigated benchmarking of e.g. [digest algorithms across the OCaml
ecosystem and OpenSSL as baseline] and welcome improvements and
further work on that (especially AES-GCM and Poly1305-ChaCha20 are
painfully slow compared to OpenSSL).
Other improvements and fixes include support for Loongarch, NetBSD,
use rdtime instead of rdcycle on RISC-V when in user mode, initial
support for CL.EXE. Thanks to everyone involved in this released:
@jbeckford @reynir @dinosaure @palainp @edwin
The [full changelog] may be worth to read.
[“use bytes instead of Cstruct.t” PR]
<https://github.com/mirage/mirage-crypto/pull/146>
[use windowed algorithm for base scalar multiplication]
<https://github.com/mirage/mirage-crypto/pull/191>
[See] <https://github.com/mirage/mirage-crypto/pull/191>
[this]
<https://github.com/mirage/mirage-crypto/pull/191#issuecom...>
[PR]
<https://github.com/mirage/mirage-crypto/pull/191#issuecom...>
[release notes]
<https://github.com/mirage/mirage-crypto/releases/tag/v0.11.3>
[fiat-crypto] <https://github.com/mit-plv/fiat-crypto/>
[digest algorithms across the OCaml ecosystem and OpenSSL as baseline]
<https://github.com/mirage/mirage-crypto/pull/202>
[full changelog]
<https://github.com/mirage/mirage-crypto/releases/tag/v0.11.3>
Future roadmap (breaking changes)
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
Also, please note if you’re using mirage-crypto that we’ll revise the
API and no longer use Cstruct.t / bigarrays, but instead bytes/string.
0.11.3 will be the last release using Cstruct.t. The hash
functionality (`Mirage_crypto.Hash') will also be removed (since
[digestif] implements them nicely). Please voice your concerns / ideas
at <https://github.com/mirage/mirage-crypto/issues/205>
[digestif] <https://github.com/mirage/digestif>
Ocsigen: summary of recent releases
═══════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/ocsigen-summary-of-recent-rel...>
Vincent Balat announced
───────────────────────
Eliom 10.3.1 released:
• Fixing Problem with browser navigation
<https://github.com/ocsigen/eliom/issues/781>
• Adding raw events handlers in Eliom_content.Html.F.Raw for
server-side only programming
OCaml Platform Newsletter: January 2024
═══════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/ocaml-platform-newsletter-jan...>
Thibaut Mattio announced
────────────────────────
Welcome to the ninth edition of the OCaml Platform newsletter!
In this January 2024 edition, we are excited to bring you the latest
on the OCaml Platform, continuing our tradition of highlighting recent
developments as seen in [previous editions]. To understand the
direction we’re headed, especially regarding development workflows and
user experience improvements, check out our [roadmap].
*Highlights:*
• A preview version of the long-awaited Merlin project-wide references
is available. Read more on [the announcement].
• A first beta of opam 2.2 is [available]! Try it, and let the opam
team know if you encounter any issues using opam on Windows.
• The `odoc' team started an effort to unify the OCaml.org package
documentation with the local workflow provided by Dune. This is very
exciting, as the result should be a much improved local
documentation with Dune and faster releases of `odoc' features on
OCaml.org. They are at the very beginning of the project, but stay
tuned for exciting news in the coming months!
*Releases:*
• [Dune 3.13.0]
• [Dune 3.12.2]
• [opam 2.2.0~beta1]
• [`odoc' 2.4.1]
[previous editions] <https://discuss.ocaml.org/tag/platform-newsletter>
[roadmap] <https://ocaml.org/docs/platform-roadmap>
[the announcement]
<https://discuss.ocaml.org/t/ann-preview-play-with-project...>
[available] <https://ocaml.org/changelog/2024-01-18-opam-2-2-0-beta1>
[Dune 3.13.0] <https://ocaml.org/changelog/2024-01-16-dune-3.13.0>
[Dune 3.12.2] <https://ocaml.org/changelog/2024-01-05-dune-3.12.2>
[opam 2.2.0~beta1]
<https://ocaml.org/changelog/2024-01-18-opam-2-2-0-beta1>
[`odoc' 2.4.1] <https://ocaml.org/changelog/2024-01-24-odoc-2.4.1>
*[Dune]* Exploring Package Management in Dune ([W4])
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
*Contributed by:* @rgrinberg (Tarides), @Leonidas-from-XIV (Tarides),
@gridbugs (Tarides), @kit-ty-kate (Tarides), @Alizter
*Why:* Unify OCaml tooling under a single command line for all
development workflows. This addresses one of the most important pain
points [reported by the community].
*What:* Prototyping the integration of package management into Dune
using opam as a library. We’re introducing a `dune pkg lock' command
to generate a lock file and enhancing `dune build' to handle
dependencies in the lock file. More details in the [Dune RFC].
*Activities:*
• Support opam’s pin-depends field –
<https://github.com/ocaml/dune/pull/9685>
• Set %{pkg:dev} correctly for packages that use dev sources –
<https://github.com/ocaml/dune/pull/9605>
• Remove Repository_id refactor, which instead now uses Git URLs to
specify revisions – <https://github.com/ocaml/dune/pull/9614>
• Remove `--skip-update' and automatically infer offline mode when
possible – <https://github.com/ocaml/dune/pull/9683>
• Support submodules in repos –
<https://github.com/ocaml/dune/pull/9798>
• Don’t download the same package source archive multiple times during
a build. Many OCaml packages are in Git repos (and source archives)
with several other related packages, and it’s common for a project
to depend on several packages from the same repo. Without this
change, the source archive for a repo would be downloaded once for
each package from that repo appearing in a project’s dependencies –
<https://github.com/ocaml/dune/pull/9771>
• Add a cond statement for choosing lockdirs. This allows the lockdir
to be chosen based on properties of the current system (e.g., OS,
architecture) which will simplify working on projects with
system-specific dependencies. –
<https://github.com/ocaml/dune/pull/9750>
[W4] <https://ocaml.org/docs/platform-roadmap#w4-build-a-project>
[reported by the community]
<https://www.dropbox.com/s/omba1d8vhljnrcn/OCaml-user-surv...>
[Dune RFC] <https://github.com/ocaml/dune/issues/7680>
*[opam]* Native Support for Windows in opam 2.2 ([W5])
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
*Contributed by:* @rjbou (OCamlPro), @kit-ty-kate (Tarides), @dra27
(Tarides), @AltGr (OCamlPro)
*Why:* Enhance OCaml’s viability on Windows by integrating native opam
and `opam-repository' support, fostering a larger community and more
Windows-friendly packages.
*What:* Releasing opam 2.2 with native Windows support, making the
official `opam-repository' usable on Windows platforms.
*Activities:*
• Add `rsync' package to internal Cygwin packages list (enables local
pinning and is used by the VCS backends – [ocaml/opam#5808]
• Check and advertise to use Git for Windows – [ocaml/opam#5718]
• Released [opam 2.2~beta1]
[W5] <https://ocaml.org/docs/platform-roadmap#w5-manage-depende...>
[ocaml/opam#5808] <https://github.com/ocaml/opam/pull/5808>
[ocaml/opam#5718] <https://github.com/ocaml/opam/pull/5718>
[opam 2.2~beta1]
<https://ocaml.org/changelog/2024-01-18-opam-2-2-0-beta1>
*[`odoc']* Unify OCaml.org and Local Package Documentation
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
([W25])
*Contributed by:* @jonludlam (Tarides), @julow (Tarides), @panglesd
(Tarides)
*Why:* Improving local documentation generation workflow will help
package authors write better documentation for their packages, and
consolidating the different `odoc' documentation generators will help
make continuous improvements to `odoc' available to a larger audience.
*What:* We will write conventions that drivers must follow to ensure
that their output will be functional. Once established, we will update
the dune rules to follow these rules, access new `odoc' features
(e.g., source rendering) and provide similar functionalities to
docs.ocaml.org (a navigational sidebar for instance). This will
effectively make Dune usable to generate OCaml.org package
documentation.
*Activities:*
• We started by comparing the various drivers, their needs and
constraints, and to flesh out what the conventions could look like.
We will publish an RFC before starting the implementation work to
ensure that we indeed understood the needs of everyone.
[W25]
<https://ocaml.org/docs/platform-roadmap#w25-generate-docu...>
*[`odoc']* Add Search Capabilities to `odoc' ([W25])
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
*Contributed by:* @panglesd (Tarides), @EmileTrotignon (Tarides),
@julow (Tarides), @jonludlam (Tarides)
*Why:* Improve usability and navigability in OCaml packages
documentation, both locally and on OCaml.org, by offering advanced
search options like type-based queries.
*What:* Implementing a search engine interface in `odoc', complete
with a UI and a search index. Additionally, we’re developing a default
client-side search engine based on Sherlodoc.
*Activities:*
• We kept working on Sherlodoc in Januray, and a [new version was
released] a few weeks ago, which can now be embedded on `odoc'-built
doc sites.
• We also finished updating the Dune rules which drive `odoc', to
enable the new search feature on locally built docs. These changes
were released as part of Dune 3.14.0. – [ocaml/dune#9772]
[W25]
<https://ocaml.org/docs/platform-roadmap#w25-generate-docu...>
[new version was released]
<https://discuss.ocaml.org/t/ann-sherlodoc-a-search-engine...>
[ocaml/dune#9772] <https://github.com/ocaml/dune/pull/9772>
*[`odoc']* Syntax for Images and Assets in `odoc' ([W25])
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
*Contributed by:* @panglesd (Tarides), @jonludlam (Tarides),
@dbuenzli, @gpetiot (Tarides)
*Why:* Empower package authors to create rich, engaging documentation
by enabling the integration of multimedia elements directly into OCaml
package documentation.
*What:* We’re introducing new syntax and support for embedding media
(images, audio, videos) and handling assets within the `odoc'
environment.
*Activities:*
• The PR is still under active review and we’re addressing the last
minor concerns. – [ocaml/odoc#1002]
[W25]
<https://ocaml.org/docs/platform-roadmap#w25-generate-docu...>
[ocaml/odoc#1002] <https://github.com/ocaml/odoc/pull/1002>
*[`odoc']* Improving `odoc' Performance ([W25])
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
*Contributed by:* @jonludlam (Tarides), @julow (Tarides), @gpetiot
(Tarides)
*Why:* Address performance issues in `odoc', particularly for
large-scale documentation, to enhance efficiency and user experience
and unlock local documentation generation in large code bases.
*What:* Profiling `odoc' to identify the main performance bottlenecks
and optimising `odoc' with the findings.
*Activities:*
• We investigated a couple of issues brought forth by the `module type
of' fix that was mentioned last month. This eventually resulted in a
series of PRs: [ocaml/odoc#1078], [ocaml/odoc#1079] and
[ocaml/odoc#1081]
• We also noticed that `odoc'’s handling of the load path was
quadratic, so we changed that in [ocaml/odoc#1075].
[W25]
<https://ocaml.org/docs/platform-roadmap#w25-generate-docu...>
[ocaml/odoc#1078] <https://github.com/ocaml/odoc/pull/1078>
[ocaml/odoc#1079] <https://github.com/ocaml/odoc/pull/1079>
[ocaml/odoc#1081] <https://github.com/ocaml/odoc/pull/1081>
[ocaml/odoc#1075] <https://github.com/ocaml/odoc/pull/1075>
*[Merlin]* Support for Project-Wide References in Merlin ([W19])
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
*Contributed by:* @voodoos (Tarides), @trefis (Tarides), @Ekdohibs
(OCamlPro), @gasche (INRIA), @Octachron (INRIA)
*Why:* Enhance code navigation and refactoring for developers by
providing project-wide reference editor features, aligning OCaml with
the editor experience found in other languages.
*What:* Introducing `merlin single occurrences' and LSP
`textDocument/references' support, extending compiler’s Shapes for
global occurrences and integrating these features in Dune, Merlin, and
OCaml LSP.
*Activities:*
• Released a preview version of project-wide references and announced
it on Discuss, asking for feedback - [Play with project-wide
occurrences for OCaml!]
• Merged the compiler PR - [ocaml/ocaml#12506]
• As a teaser for future work that will build on project-wide
references, we started prototyping the project-wide `rename' feature
- [voodoos/ocaml-lsp#index-preview]
[W19] <https://ocaml.org/docs/platform-roadmap#w19-navigate-code>
[Play with project-wide occurrences for OCaml!]
<https://discuss.ocaml.org/t/ann-preview-play-with-project...>
[ocaml/ocaml#12506] <https://github.com/ocaml/ocaml/pull/12508>
[voodoos/ocaml-lsp#index-preview]
<https://github.com/voodoos/ocaml-lsp/tree/index-preview>
*[Merlin]* Improving Merlin’s Performance ([W19])
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
*Contributed by:* @pitag (Tarides), @Engil (Tarides)
*Why:* Some Merlin queries have been shown to scale poorly in large
codebases, making the editor experience subpar. Users report that they
sometimes must wait a few seconds to get the answer. This is obviously
a major issue that hurts developer experience, so we’re working on
improving Merlin performance when it falls short.
*What:* Developing benchmarking tools and optimising Merlin’s
performance through targeted improvements based on profiling and
analysis of benchmark results.
*Activities:*
• We merged the Fuzzy testing CI. As a reminder, this CI tests Merlin
PRs for behaviour regressions. This will help us make sure that we
don’t inadvertently break Merlin queries by testing them on a broad
range of use cases - [ocaml/merlin#1716]
• In `merlin-lib', we started writing a prototype to process the
buffer in parallel with the query computation. Parallelism refers to
OCaml 5 parallelism (domains).
[W19] <https://ocaml.org/docs/platform-roadmap#w19-navigate-code>
[ocaml/merlin#1716] <https://github.com/ocaml/merlin/pull/1716>
Discussions on the future of the opam repository
════════════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/discussions-on-the-future-of-...>
Kate announced
──────────────
The notes for last week’s meeting are available [here]
/For everyone who wants to come to the next meeting, please fill [the
framadate] as soon as you know when you are available, so that we can
plan when the meeting is going to be./
[here]
<https://github.com/ocaml/opam-repository/issues/23789#iss...>
[the framadate] <https://framadate.org/qD2Pb57B7h6xJ8U4>
ocaml-protoc-plugin 5.0.0
═════════════════════════
Archive:
<https://discuss.ocaml.org/t/ann-ocaml-protoc-plugin-5-0-0...>
Anders Fugmann announced
────────────────────────
It’s my pleasure to announce release 5.0.0 of [ocaml-protoc-plugin].
ocaml-protoc-plugin is a plugin for the google protobuf compiler,
`protoc', to generate type mappings and functions for serialization
and de-serialization of google protocol buffers. The plugin aims to be
fully compliant with the protobuf specification and recommendations
and to generate an intuitive mapping between google protobuf message
definitions and Ocaml types. Ocaml-protoc-plugin is written in pure
ocaml.
Version 5.0.0 includes option to merge messages to be fully compliant
with the protobuf specification and fixes bugs related to name mapping
to avoid name collisions and fix code generation error in some corner
cases.
Serialization and deserialization has also been hugely optimized for
speed and is now on par with other ocaml protobuf implementations
(benched against ocaml-protoc)
ocaml-protobuf-plugin 5.0.0 is available though opam and from the
[project page] on github.
Full changelog is available [here]
[ocaml-protoc-plugin]
<https://github.com/andersfugmann/ocaml-protoc-plugin>
[project page] <https://github.com/andersfugmann/ocaml-protoc-plugin>
[here] <https://github.com/andersfugmann/ocaml-protoc-plugin/rele...>
ppx_minidebug 1.3.0: toward a logging framework
═══════════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/ann-ppx-minidebug-1-3-0-towar...>
Lukasz Stafiniak announced
──────────────────────────
Hi! I’m happy to invite you to take a look at [ppx_minidebug 1.3.0].
It’s now available in the opam repository. Some new features since
version 1.0:
• Extension point variants that support debug runtime passing, they
simplify having e.g. dedicated log files for threads or domains.
• Unregistered extension points `%log', `%log_result', `%log_printbox'
to explicitly log values.
• Log levels at runtime to restrict how much is logged, and at compile
time to restrict how much logging code is generated.
• Log levels can be both set globally and adjusted for local scopes.
• Compile time log levels can be read off an environment variable.
• Extension point prefix `%diagn_' (joining prefixes `%debug_' and
`%track_') that restricts the log level to explicit logs.
• Does not crash for logs that escaped all log entries – prints the
entry id of the entry the orphaned log lexically belongs to.
• Optionally prints log entry ids for all entries.
• Optionally snapshots unclosed log trees:
• outputs the current log tree if sufficient time passed since the
previous tree was printed or the previous snapshot, erases the
previous snapshot when snapshotting or printing the same log tree.
• A few more changes that improve usability.
P.S. If you face problems with missing line breaks in the HTML output,
re-install [printbox from source] or version > 0.10.
[ppx_minidebug 1.3.0] <https://github.com/lukstafi/ppx_minidebug>
[printbox from source] <https://github.com/c-cube/printbox>
iostream 0.2
════════════
Archive: <https://discuss.ocaml.org/t/ann-iostream-0-2/14214/1>
Simon Cruanes announced
───────────────────────
Iostream 0.2 was recently released on opam. Here’s the [release
itself].
Iostream is a library providing a small set of abstractions for I/O
streams (!) over `bytes'. With release 0.2, there are now 4 main
types, all of them based on objects:
• [`Iostream.In.t'] for unbuffered inputs;
• [`Iostream.In_buf.t'] for buffered inputs;
• [`Iostream.Out.t'] for unbuffered outputs;
• [`Iostream.Out_buf.t'] for buffered outputs.
I found out that having all these explicit types is better than
picking only some of them. A `In_buf.t' can act as a proper byte
stream, exposing its internal slice of bytes so that it’s possible to
implement line parsing and such. Thanks to the object types,
`In_buf.t' is a subtype of `In.t', and same goes for `Out_buf.t' and
`Out.t'.
There is also a [`iostream-camlzip'] library that implements stream
encoding and decoding over these types.
[release itself]
<https://github.com/c-cube/ocaml-iostream/releases/tag/v0.2>
[`Iostream.In.t']
<https://c-cube.github.io/ocaml-iostream/iostream/Iostream/In/index.html>
[`Iostream.In_buf.t']
<https://c-cube.github.io/ocaml-iostream/iostream/Iostream/In_buf/index.html>
[`Iostream.Out.t']
<https://c-cube.github.io/ocaml-iostream/iostream/Iostream/Out/index.html>
[`Iostream.Out_buf.t']
<https://c-cube.github.io/ocaml-iostream/iostream/Iostream/Out_buf/index.html>
[`iostream-camlzip']
<https://c-cube.github.io/ocaml-iostream/iostream-camlzip/Iostream_camlzip/index.html>
Bogue, the OCaml GUI
════════════════════
Archive: <https://discuss.ocaml.org/t/ann-bogue-the-ocaml-gui/9099/57>
sanette announced
─────────────────
I’m happy to announce a new version of [Bogue] (20240225). I would
like to mention here two main changes:
• This is the *last version that supports SDL 2.0.9* (default in
Debian 10) Next version will use `tsdl 1.0.0' which requires SDL
2.0.10 or later
• Thanks to @edwin , this version (if using SDL >= 2.0.16) is much
more **power-friendly** (when idle). You may now leave a Bogue app
open (if idle) without worrying for your laptop battery (and the
environment): energy consumption is now very close to zero.
(`powertop' indicates instantaneous power of 0mW, which I think
means less than 0.1mW on my laptop)
[Bogue] <https://github.com/sanette/bogue>
Owl project restructured
════════════════════════
Archive:
<https://discuss.ocaml.org/t/owl-project-restructured/14226/1>
jrzhao42 announced
──────────────────
Dear OCaml Community, following our previous decision to conclude the
Owl project, we have been touched by the supportive and encouraging
feedback from all of you. After a thorough discussion, Liang
@ryanrhymes and I think it might still be for the best interest of the
OCaml community to continue maintaining a solid numerical computing
library. Consequently, I, Jianxin, will assume the role of project
leader to ensure Owl remains maintained. Our goal is to keep Owl
stable and updated, given the very limited resource we have, as
explained in our previous declaration. At least we aim to keep Owl
compatible with the latest stable version of OCaml.
As mentioned previously, our availability to dedicate time to Owl is
limited. Achieving our objectives will require collective effort.
Thus, I am looking to assemble a team of contributors eager to support
both development and maintenance tasks. For details on our plans and
how you can contribute, please refer to the project’s [README] file.
If you’re interested in joining the Owl team, taking on a specific
part of the codebase, or if you have any questions, do not hesitate to
contact me here or via [email].
[README] <https://github.com/owlbarn/owl>
[email] <mailto:jianxin.zhao@kit.edu>
20+ ways to build an executable with foreign libs
═════════════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/20-ways-to-build-an-executabl...>
Gregg Reynolds announced
────────────────────────
Foreign libs can be linked into OCaml executables in a variety of
ways. The pertinent info is distributed across several topics in the
manual. So I put together a suite of 20-some MWEs demonstrating the
options:
• emitting native or bytecode executables
• vm executables: freestanding or dependent on ocamlrun
• using a static or dynamic stublib
• linking the stublib against static or shared foreign libs
• putting lib deps directly on the cmd line v. using -cclib or -dllib
All demos use a very simple foreign lib (in C) and stublib, and the
builds are expressed in a few relatively simple makefiles.
<https://github.com/obazl/demos_obazl/tree/main/makefiles/ffi>
This could be used as the basis of a proper tutorial, but I’m not sure
I’ll get around to that.
(Oh crap, I forgot to update the docs. The make target names a little
different. Read the makefiles. ;)
opam build and opam test: the opam plugins that simplifies your dev setup
═════════════════════════════════════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/ann-opam-build-opam-test-the-...>
Kate announced
──────────────
Hi everyone,
I’m pleased to announce the release of opam-build & opam-test 0.2.0
(soon 0.2.4 with all the latest improvements)
These two opam plugins now require your current client to be opam 2.2
(e.g. the latest 2.2.0~beta1). If you use opam 2.2 you can install
them using:
┌────
│ opam update && opam install 'opam-build>=0.2.0' 'opam-test>=0.2.0'
└────
After that you can use them from any switches using:
┌────
│ opam build --help
│ opam test --help
└────
The highlights of this version cycle are:
• Vastly improved performance and UI
• Added a new `--global' and `--local' command line argument to
signify whether to use a local switch or a global switch
• Add a new config file storing the user preference and which kind of
switch to use by default
• Lots of fixes and improvements
On a personal note, my main incentive with these changes was to
finally use these plugins personally and in particular, while working
on some packages for my work on the “OCaml 5.2 release readiness” (see
a more general description of this work [here]), i encountered a
couple of packages where the only way to compile them was using opam
as they were using custom variables passed to their arguments. `opam
install' was not what i wanted (i don’t want to install it, i just
need to see if the local version compiles) but `opam build' fits the
bill perfectly here (I don’t know what build-system it uses, i just
want to compile it).
A demo of the new version (here 0.2.4) can be seen here:
<https://global.discourse-cdn.com/business7/uploads/ocaml/...>
*Disclaimer*: As with version 0.1.0, these plugins are still
*experimental*, however they should be a lot more polished and usable,
hopefully if enough people report issues (big thanks to @gridbugs for
the reports on the previous versions) next version should be deemed
stable.
[here]
<https://discuss.ocaml.org/t/ocaml-software-foundation-jan...>
Seeking feedback on repackaged libraries for Base
═════════════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/seeking-feedback-on-repackage...>
Mathieu Barbin announced
────────────────────────
Dear OCaml community,
Lately I’ve been working on reducing dependency footprints in some of
my projects, which led me to repackage some of Jane Street’s libraries
that I frequently use. The goal was to make these libraries depend
solely on `Base', thereby making them more accessible and lightweight.
Here are the libraries I’ve repackaged so far:
• [Appendable List]
• [Doubly Linked List]
• [Nonempty List]
• [Reversed List]
• [Union Find]
These libraries required minimal modifications to remove the original
dependencies from `Core', `Core_kernel', or `Core_extended', depending
on the case.
For instance, the `Nonempty List' library is a repackaged version of
`Core_kernel'’s `Nonempty_list'. The original code can be found
[here]. I’ve modified the code slightly to remove dependencies on
`Core' and `Core_kernel', making it solely dependent on `Base'. This
allows the library to be used in more contexts without the need to add
a dependency on `Core' and `Core_kernel'.
I’m reaching out to gauge interest in these repackaged libraries.
While the use case might be niche, I believe there could be `Base'
users who are motivated enough to limit their dependencies on `core',
etc.
If there’s interest in the community for these libraries, I’m
considering reaching out to Jane Street to discuss options. If Jane
Street isn’t interested but the community is, I’m open to moving these
libraries into a community space. I’m also willing to volunteer as a
maintainer in this case. Of course, I want to respect the community’s
established practices and wouldn’t want to step on anyone’s toes.
If there’s no interest, I’m happy to continue as is. I’m simply
offering this in case it might be beneficial to others.
I appreciate your time and look forward to your feedback!
[Appendable List] <https://github.com/mbarbin/appendable-list>
[Doubly Linked List] <https://github.com/mbarbin/doubly-linked>
[Nonempty List] <https://github.com/mbarbin/nonempty-list>
[Reversed List] <https://github.com/mbarbin/reversed-list>
[Union Find] <https://github.com/mbarbin/union-find>
[here]
<https://github.com/janestreet/core_kernel/tree/master/non...>
Outreachy internship demo session
═════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/outreachy-internship-demo-ses...>
Fay Carsons announced
─────────────────────
Hi all! Myself and the other Outreachy interns from this batch are
going to be publicly demoing our projects [date=2024-03-06
time=12:00:00 timezone=“America/New_York”] !
Im going to be talking about /Joy/, the creative coding library I
developed, going over some features and hopefully doing some
live-coded generative art! The other interns will be presenting their
work with /Bogue/ and refactoring the UI of Ocaml.org
Stop by if you’d like! [link]
[link] <https://meet.google.com/rym-eqax-uwb?hs=122&authuser=0>
dream-html 3.0.0
════════════════
Archive: <https://discuss.ocaml.org/t/ann-dream-html-3-0-0/14013/5>
Yawar Amin announced
────────────────────
[ANN] dream-html 3.1.0
Thanks to the efforts of Kento Okura, I am happy to announce the
release of [3.1.0], which brings complete support for all standard
[MathML] attributes and elements.
Eg:
┌────
│ open Dream_html
│ open MathML
│
│ let op sym = mo [] [txt "%s" sym]
│
│ let pow i n = msup [] [
│ mi [] [txt "%s" i];
│ mn [] [txt "%s" n];
│ ]
│
│ (* a^2+b^2=c^2 *)
│ let pythagoras_theorem = mtable [] [
│ mtr [] [
│ mtd [] [pow "a" "2"; op "+"; pow "b" "2"];
│ mtd [] [op "="];
│ mtd [] [pow "c" "2"];
│ ];
│ ]
└────
As you can see, we can write helpers that greatly reduce duplication.
This addition completes dream-html’s support for all standard
XML-based markups that are rendered by browsers.
This release also deprecates a couple of non-standard HTML attributes
that I had mistakenly added before.
[3.1.0] <https://ocaml.org/p/dream-html/3.1.0>
[MathML] <https://developer.mozilla.org/en-US/docs/Web/MathML>
Add your OCaml Events to the Community Page on OCaml.org
════════════════════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/add-your-ocaml-events-to-the-...>
Sabine Schmaltz announced
─────────────────────────
Hey folks!
This is a call for anyone who is running or knows about upcoming
OCaml-related events to add those events to the Events directory on
OCaml.org.
Here’s how to do it:
Open a pull request similar to this one:
<https://github.com/ocaml/ocaml.org/pull/2134>
If it’s a recurring event, create a listing in `recurring.yml'. If
it’s a one-time event, you should omit this.
If there’s start or end times, they need to be given in UTC - so that
we can, in a later improvement to the Events directory, convert them
to the viewer’s local timezone more easily. Here’s an example of an
event with a start time:
┌────
│ ---
│ title: "OCaml Users in Paris (OUPS)"
│ textual_location: Paris, France
│ location:
│ lat: 48.8566
│ long: 2.3522
│ url: https://www.meetup.com/ocaml-paris/events/299014082/
│ recurring_event_slug: ocaml-users-paris-oups
│ starts:
│ yyyy_mm_dd: "7024-02-29"
│ utc_hh_mm: "18:00"
│ ---
└────
Other OCaml News
════════════════
From the ocaml.org blog
───────────────────────
Here are links from many OCaml blogs aggregated at [the ocaml.org
blog].
• [Release of Frama-C 28.1 (Nickel)]
• [Two Major Improvements in odoc: Introducing Search Engine
Integration]
[the ocaml.org blog] <https://ocaml.org/blog/>
[Release of Frama-C 28.1 (Nickel)]
<https://frama-c.com/fc-versions/nickel.html>
[Two Major Improvements in odoc: Introducing Search Engine Integration]
<https://tarides.com/blog/2024-02-28-two-major-improvement...>
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/>