|
|
Log in / Subscribe / Register

OCaml Weekly News March 5

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/>



to post comments


Copyright © 2024, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds