From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=192.134.164.83; helo=mail2-relais-roc.national.inria.fr; envelope-from=caml-list-owner@inria.fr; receiver= Authentication-Results: plum; dmarc=fail (p=none dis=none) header.from=polytechnique.org Authentication-Results: plum.tunbury.org; dkim=pass (1024-bit key; unprotected) header.d=inria.fr header.i=@inria.fr header.a=rsa-sha256 header.s=dc header.b=oWls1kR1; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=polytechnique.org header.i=@polytechnique.org header.a=rsa-sha256 header.s=svoboda header.b=pkm056/b; dkim-atps=neutral Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by plum.tunbury.org (Postfix) with ESMTPS id 9A5CCB80123 for ; Tue, 9 Apr 2024 10:16:07 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inria.fr; s=dc; h=from:to:date:message-id:mime-version:subject:reply-to: sender:list-id:list-help:list-subscribe:list-unsubscribe: list-post:list-owner:list-archive; bh=rOnfB/ZVJ0pFevzEpBeYN3wDEoYEcmZkghOW3SUngaQ=; b=oWls1kR176ThsiGlnMYULTzypjdEHdLf1bOWAGlGZ4beYdnQPrYE64eI tH+LxFVgSwZubM76Y+AtE9XvKPx69IFs5JAaRYYwEclTghBuZs2xqGoCq 4NGhq7arhvhTOri59sX9sjg4l3SHVMZh6wQTK5cVqQc8E7qxqFACcQGPm Q=; Received-SPF: Pass (mail2-relais-roc.national.inria.fr: domain of caml-list-owner@inria.fr designates 128.93.162.160 as permitted sender) identity=mailfrom; client-ip=128.93.162.160; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="caml-list-owner@inria.fr"; x-conformance=spf_only; x-record-type="v=spf1"; x-record-text="v=spf1 include:mailout.safebrands.com a:basic-mail.safebrands.com a:basic-mail01.safebrands.com a:basic-mail02.safebrands.com ip4:128.93.142.0/24 ip4:192.134.164.0/24 ip4:128.93.162.160 ip4:89.107.174.7 mx ~all" Received-SPF: None (mail2-relais-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@sympa.inria.fr) identity=helo; client-ip=128.93.162.160; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="postmaster@sympa.inria.fr"; x-conformance=spf_only Authentication-Results: mail2-relais-roc.national.inria.fr; spf=Pass smtp.mailfrom=caml-list-owner@inria.fr; spf=None smtp.helo=postmaster@sympa.inria.fr; dkim=hardfail (body hash did not verify [final]) header.i=@polytechnique.org X-IronPort-AV: E=Sophos;i="6.07,189,1708383600"; d="scan'208,217";a="160635266" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 09 Apr 2024 11:16:06 +0200 Received: by sympa.inria.fr (Postfix, from userid 20132) id BAAE1E0AF6; Tue, 9 Apr 2024 11:16:06 +0200 (CEST) Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id EDEC7E0BE9 for ; Tue, 9 Apr 2024 11:16:01 +0200 (CEST) IronPort-SDR: 66150750_2DgnjPyOo/QclM9fRSptdgivWoZO1Uvb5QyavzUC6LNZ48b 4C3N+DzCMpbu6LxDskqvNYaUvenqJOlehsoPRKQ== X-IPAS-Result: =?us-ascii?q?A0F3BABIBhVmlyIeaIFahBlbKBkBYlYyBwhIAwGEUoNPj?= =?us-ascii?q?hiBN4U1iBqCP4g/gTF/gWqBEQMYFiMUAQMBDS4BDgQBAgQBAQMBA4ILgi5GA?= =?us-ascii?q?ogVAh8GAQQ0EwECBAEBAQEDAgMBAQEBAQEIAQEFAQEBAgEBAgQGAQIQAQEBA?= =?us-ascii?q?QEBAQE3BRA1hTsGLA2CSi4jURpeAwICAwMDBgEBAQEBAQEBAQIBAQEiAQEBA?= =?us-ascii?q?QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBwIIBAEjEAQJXAEIB?= =?us-ascii?q?AYTAQElBgIEBxgjAwkLAQYDAhEBNRcBEhQGAYINWAGCXwMFDAaTYkuab3p/M?= =?us-ascii?q?4EBggoBAQaBCD4CAQEBCQIFAQ4JJtoDgUcaCYFIiA0aAWpoAoQjCYQ0Jw+BV?= =?us-ascii?q?USBFTWBc1FvgVBvCxcBAQEBGH8SARECAQgCEA8kCQmDHIJogVsCcIQPfiaBc?= =?us-ascii?q?QGFWwRPCBUPgl4lQYEPSTFeAQEHDoEOSwMMA1oIAgiBHoUzgUtLMxQPEwFVF?= =?us-ascii?q?Q4wCToPDBoCGxQNJCMCLD4DCQoQAhYDHRQEMBEJCyYDKgY2AhIMBgYGWyAWC?= =?us-ascii?q?QQjAwgEA1ADIHARAwQaBAsHdYFIgXUEE0QDEIEyh0GCWIM/giCENE2EVANEH?= =?us-ascii?q?UADC209NRQbKJ0PAToCAYF9LQ4LLQYBBhBKAQIcCgUBCgkIDQEBASACDRcIA?= =?us-ascii?q?ggFBA8LCgUCBQcDAgMQBBEIAw4BBQQVBgEBDgwBAREJAgsCFBkDkjkHAhAYH?= =?us-ascii?q?AkFAgFyjiaOBJNHHGw0B4QWgVsGDIgUaYEkiFaFSYdLhAVMgQqFN4VxhnqSN?= =?us-ascii?q?iKYQCCCNIcdCoEbCYFsaYhpjBw5AxMDEoUogXsjPDA/HgwHMxowQw0QgkoJC?= =?us-ascii?q?jwcD1eLHYIKKwMWgQwBB4I+BhCBLoEmCoEyOTuCQZQJQTUCAQEOKQIHAQoBA?= =?us-ascii?q?QMJhWIBAWmCIQEDJAyBSAEB?= IronPort-PHdr: A9a23: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 IronPort-Data: A9a23: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 gSR3g== IronPort-HdrOrdr: A9a23:xeCYI6BdcH/NXG/lHel155DYdb4zR+YMi2TDtnoBNCC9F/byqy nAppUmPGDP+VAssR0b9exoe5PwOE80jKQFmrX5ZI3SJjUO21HYUL2Kj7GD/9SIIUSXnNK1s5 0OT0EUMrDN5DZB4/oTnWGDYq4dKQ28gcKVbZu39QYLcegTUdAC0+6PMHf+LqTefngiOaYE X-Talos-CUID: =?us-ascii?q?9a23=3ATZ2wtGk74kwYGW7KGPPB3KlsmbnXOX78yHjbBVK?= =?us-ascii?q?3Mz10Te3NTnTB37loj8U7zg=3D=3D?= X-Talos-MUID: 9a23:ed+BBAUnpz4hO8/q/BPloDNcL+Va34e/LwM3yb4PuufbFDMlbg== X-IronPort-Anti-Spam-Filtered: true X-URL-LookUp-ScanningError: 1 X-IronPort-AV: E=Sophos;i="6.07,189,1708383600"; d="scan'208,217";a="160635183" X-URL-ContentFilter: X-MGA-submission: =?us-ascii?q?MDHKw0GUJZwfydjdTBxGBpASxR1VIdB0WgSEmK?= =?us-ascii?q?zwywuRYWXIkFazsV0TFAsdWhZR7/+vEXdY8QzTPanp9Pqi0WJQVMfIpW?= =?us-ascii?q?WBOV2ZPmE4kObo/MjWJHPgSYZdTms1KQeLmRXA5LBZGJRIFASoyqIRSQ?= =?us-ascii?q?p582LMMEAVW03nnozwB7Qsqw=3D=3D?= Received: from mx1.polytechnique.org ([129.104.30.34]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Apr 2024 11:16:00 +0200 Received: from mac-03220211.irisa.fr (mac-03220211.irisa.fr [131.254.21.249]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ssl.polytechnique.org (Postfix) with ESMTPSA id 009B3561200; Tue, 9 Apr 2024 11:15:58 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=polytechnique.org; s=svoboda; t=1712654159; bh=r/vvdpsO2UhqVQ37f0ecmOjq89ouBu9A01xxLnxFvec=; h=From:To:Subject:Date:Message-ID; b=pkm056/bfyjX4asPPk2N3P9hBTval7bXyHMi3V5TUgwuuavXrbIGptCVce4LGQ4Hx fCGdFVkCHpuZ3qK+0uRzIwI6oPU4CFOIqxDPITGQAMECYmoc0t7IoPU3QG+g9cP9// 9ky6BiUipD7pbjn3oaYVjbQLZlzdJeM0/Eu4jut8= From: Alan Schmitt To: "lwn" , caml-list@inria.fr Date: Tue, 09 Apr 2024 11:15:58 +0200 Message-ID: MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Apr 9 11:15:59 2024 +0200 (CEST)) X-Spam-Flag: Unsure, tests=bogofilter, spamicity=0.499816, queueID=3F18056124E X-Org-Mail: alan.schmitt.1995@polytechnique.org Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News Reply-To: Alan Schmitt X-Loop: caml-list@inria.fr X-Sequence: 19108 Errors-To: caml-list-owner@inria.fr Precedence: list Precedence: bulk Sender: caml-list-request@inria.fr X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: Archived-At: --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hello Here is the latest OCaml Weekly News, for the week of April 02 to 09, 2024. Table of Contents =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80 moonpool 0.6 sqids 0.1.0 OCaml Retreat at Auroville, India (March 10th - March 15th) Miou, a simple scheduler for OCaml 5 OCaml.org Newsletter: March 2024 Opam 102: Pinning Packages, by OCamlPro dune 3.15 Ocsigen: summary of recent releases Js_of_ocaml 5.7 Eio Developer Meetings Ocaml developer at Routine, Paris dream-html 3.0.0 Other OCaml News Old CWN moonpool 0.6 =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90 Archive: Simon Cruanes announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Dearest friends of the dual hump, I'm happy to announce the release of [moonpool 0.6]. Moonpool is a library of schedulers and concurrency primitives for OCaml 4.xx and 5.xx, based on threads (possibly spread on multiple domains). Previous release announcements ([0.5], [0.4], [0.3], [0.2], [0.1]) contain more details. This release is fairly large and contains some new libraries. The biggest improvement is the addition of `moonpool.fib' (OCaml 5 only): it defines lightweight _fibers_ with structured concurrency, where the fibers can run on a thread pool chosen by the user. Fibers also come with fiber-local storage and a notion of cancellation that is propagated to children fibers. Overall, fibers are a nicer abstraction than bare futures (especially with monadic combinators). There are currently no cooperative IO primitives provided by the scheduler but I have plans. Another new, more experimental library is `moonpool-lwt' (OCaml 5 only) which allows for interoperability between Lwt and moonpool: a moonpool future (or fiber) can be turned into a Lwt promise; and it becomes possible to `await' a Lwt promise from moonpool, in a thread-safe way. Docs: =E2=80=A2 [moonpool] =E2=80=A2 [moonpool-lwt] [moonpool 0.6] [0.5] [0.4] [0.3] [0.2] [0.1] [moonpool] [moonpool-lwt] sqids 0.1.0 =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90 Archive: Leo Soares announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80 I'm happy to announce the first release (0.1.0) of the [official OCaml port of Sqids]. Sqids (pronounced "squids") is an open-source library that lets you generate short unique identifiers from numbers. These IDs are URL-safe, can encode several numbers, and do not contain common profanity words. [official OCaml port of Sqids] OCaml Retreat at Auroville, India (March 10th - March 15th) =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90 Archive: Sudha Parimala announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 I'm happy to share the experience report from the first OCaml Retreat: . Thanks to all the participants for contributing to the magic of the event. We hope to run more such retreats in the future! Miou, a simple scheduler for OCaml 5 =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90 Archive: Calascibetta Romain announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80 I am delighted to announce the release of `miou.0.1.0'. This release is undoubtedly the culmination and synthesis of the work of several individuals to offer a library that best fits our needs. We're quite convinced by the API we're proposing and quite happy with the implementation. As such, we're coming out of beta to offer version 0.1.0. Above all, this means that the API will change very little, and the library is now ready for use. However, we are not yet in 1.0.0 because we would like to give you time to use Miou, to observe possible bugs, and to give us time to correct these possible bugs in order to prepare version 1.0.0 with peace of mind. You can install the package via OPAM (it will be available soon): =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80 =E2=94=82 $ opam install miou =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80 We would sincerely like to thank all individuals who have contributed, whether directly or indirectly, to the project. Furthermore, this new version of Miou builds upon the excellent work of @polytypic and his [picos] project. We have incorporated certain elements that are suitable for implementing a scheduler, and we hope that our efforts will lead to a certain standardization of the effects used by different schedulers in OCaml. This rewrite has been carried out while trying to maintain the same semantics and API as what we offered in version `0.0.1~beta2' (however, it is the nature of a beta to potentially break versions). This rewrite culminated in the reimplementation of an [HTTP client and server] (supporting http/1.1 or h2 with TLS which can handle [200k req/sec]) as well as our good old [happy-eyeballs] example. Moreover, the outcome of these implementations is more satisfying to us than their previous versions. At least for now, considering the various changes our cooperative has embarked on=C2=B9, we will not yet release them. We also took the time to integrate a version of the priority queue verified using [Why3]. We would like to thank @Armael and @backtracking (as well as the individuals who contributed to and maintained the [Vocal] project) for their assistance. Finally, I would like to personally thank the [Robur] cooperative for providing me with the necessary time to evolve this project. This release further confirms what we aim to offer to users, and in this regard, we have taken the time to write a small book explaining the use of Miou. This can also be seen as an introduction to asynchronous programming and effects. It is available [here] and is part of the Miou distribution. For any questions or assistance, we are available via email, this forum, or Discord. Happy hacking! *=C2=B9*: As explained in [this article], we try to replace `Cstruct.t' by `string' and it requires obviously a deep change across severals packages. [picos] [HTTP client and server] [200k req/sec] [happy-eyeballs] [Why3] [Vocal] [Robur] [here] [this article] OCaml.org Newsletter: March 2024 =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 Archive: Sabine Schmaltz announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Welcome to the March 2024 edition of the OCaml.org newsletter! This update has been compiled by the OCaml.org team. You can find [previous updates] on Discuss. Our goal is to make OCaml.org the best resource for anyone who wants to get started and be productive in OCaml. The OCaml.org newsletter provides an update on our progress towards that goal and an overview of the changes we are working on. We couldn't do it without all the amazing OCaml community members who help us review, revise, and create better OCaml documentation. Your feedback enables us to better prioritise our work. Thank you! This newsletter covers: =E2=80=A2 *OCaml Cookbook:* A prototype of an OCaml cookbook that provides short code examples that solve practical problems using packages from the OCaml ecosystem is on staging.ocaml.org/cookbook. =E2=80=A2 *Dark Mode:* We enabled the dark mode on all pages of OCaml.org, based on your operating system / browser settings. =E2=80=A2 *Community & Marketing Pages Rework:* We are seeking feedback on wireframes for the community section and for the marketing-related pages. =E2=80=A2 *General Improvements:* As usual, we also worked on general maintenance and improvements based on user feedback, so we're highlighting some of our work below. [previous updates] Open Issues for Contributors =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C= =E2=95=8C=E2=95=8C=E2=95=8C You can find [open issues for contributors here]! [open issues for contributors here] Upcoming OCaml Cookbook =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C We're in the process of adding a community-driven section to the Learn area: the OCaml Cookbook. This cookbook is designed as a collection of recipes, offering code samples for tackling real-world tasks using packages from the OCaml ecosystem. It's a practical effort to enrich our learning resources, making them more applicable and useful for our community. This month, our focus shifted towards finalizing the cookbook for release. This includes =E2=80=A2 restructuring the directory structure and placement of recipe f= iles, and =E2=80=A2 adding tasks to the cookbook, so that you can contribute recipe= s for these tasks (we took inspiration from the excellent [Rust Cookbook]). It will always be possible to propose more tasks for the OCaml Cookbook. The main criteria here are: 1. task must require more than just a single Standard Library function call to solve, 2. task must be focused on common problems that occur when trying to build products, 3. if in doubt, make the task more specific, instead of more generic. A good place to give feedback on the cookbook is [this discuss thread]. *Relevant PRs and Activities:* =E2=80=A2 [(WIP) Cookbook compression / decompression] by @F-Loyer =E2=80=A2 [Cookbook : fix in Lwt (type mismatch with iter_s/iter_p functi= ons)] by @F-Loyer =E2=80=A2 [Update 00-caqti-ppx-rapper.ml - fix caqti-driver-sqlite -> caqti-driver-sqlite3] by @F-Loyer [Rust Cookbook] [this discuss thread] [(WIP) Cookbook compression / decompression] [Cookbook : fix in Lwt (type mismatch with iter_s/iter_p functions)] [Update 00-caqti-ppx-rapper.ml - fix caqti-driver-sqlite -> caqti-driver-sqlite3] Dark Mode Released =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C We're happy to anounce that we shipped the Dark Mode for OCaml.org. Dark mode is activated based on your operating system / browser settings. If you see anything wrong, please open an issue and include the URL on which you're seeing a problem. *Relevant PRs and Activities:* =E2=80=A2 [Announce Dark Mode on Discuss] =E2=80=A2 [Add Preliminary Dark Mode for Package Documentation] by @sabine =E2=80=A2 [Fix: dark text color on blue background] by @amarachigoodness74 =E2=80=A2 [(dark mode) adjust breadcrumbs text color] by @sabine =E2=80=A2 [(ui) Activate Dark Mode] by @sabine =E2=80=A2 [Correctly invert text on "Is OCaml Web" page] by @SquidDev =E2=80=A2 [fix: add missing darkmode styles for in-package search results= ] by @sabine =E2=80=A2 [Remove legacy tailwind colors and styles, tidy up darkmode col= ors] by @sabine [Announce Dark Mode on Discuss] [Add Preliminary Dark Mode for Package Documentation] [Fix: dark text color on blue background] [(dark mode) adjust breadcrumbs text color] [(ui) Activate Dark Mode] [Correctly invert text on "Is OCaml Web" page] [fix: add missing darkmode styles for in-package search results] [Remove legacy tailwind colors and styles, tidy up darkmode colors] Homepage & Marketing Pages Rework =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C= =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C The Home page project kicked off with an analysis of user surveys and interviews, and the development of an initial wireframe for the homepage and the "Industrial Users" and "Academic Users" pages. We've been [reaching out to the community on Discuss] and Twitter to find what people say about OCaml, so we can give a bit more context through testimonials on the "Academic Users" page. Besides this, we've been [asking on Twitter for ideas for the main tagline of the homepage] You can comment on the wireframes in Figma [here]. If you have opinions on the homepage, feel free to share them in [this discuss thread]! [reaching out to the community on Discuss] [asking on Twitter for ideas for the main tagline of the homepage] [here] [this discuss thread] Community Section Rework =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C This week, we focused on creating wireframes for the Event, Job, Internship, and Workshop pages, followed by soliciting feedback from the community via Discuss. Concurrently, work commenced on the UI design for the Community Landing page, as well as the Event and Job pages. We also made some improvements to the Events section on the Community page. This involves better treatment of start/end times of events, as well as listing more upcoming events. If you have opinions on the community section, feel free to share them in [this discuss thread]! *Relevant PRs and Activities:* =E2=80=A2 Invite people to add events to events directory: =E2=80=A2 [Improve Events Directory] by @sabine =E2=80=A2 [Fix template bug on upcoming events list] by @sabine =E2=80=A2 [Make clear upcoming event time is UTC] by @sabine =E2=80=A2 Data contributed to events: =E2=80=A2 [(data) Add S-REPLS event] by @sabine =E2=80=A2 [(data) fix wrong date on event] by @sabine =E2=80=A2 [(data) Add OCaml Retreat Auroville] by @D8kTwoXfSUWLdpXruFrQ= iw =E2=80=A2 [(data) add OCaml Manila Meetup] by @sabine [this discuss thread] [Improve Events Directory] [Fix template bug on upcoming events list] [Make clear upcoming event time is UTC] [(data) Add S-REPLS event] [(data) fix wrong date on event] [(data) Add OCaml Retreat Auroville] [(data) add OCaml Manila Meetup] Outreachy Application Period & Internship =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C= =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C In March, OCaml.org hosted the application period for one [Outreachy internship] on creating an interactive experience for solving OCaml exercises. The process of selecting an Outreachy intern involved creating and managing 15 issues, reviewing 61 pull requests from 8 applicants. The tasks were similar in nature and dealt with restructuring the exercises to enable an interactive experience, adding test cases and solutions (where missing). *Relevant PRs and Activities:* =E2=80=A2 [Create practice folder] by @cuihtlauac =E2=80=A2 [Sort exercises by slug before emitting template] by @csaltachin =E2=80=A2 Turning exercises into practice @Ozyugoo, @mnaibei, @divyankachaudhari, @Kxrishx03, @maha-sachin, @MissJae, @jahielkomu, @Appleeyes [Outreachy internship] [Create practice folder] [Sort exercises by slug before emitting template] General Improvements and Data Additions =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C= =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C *Relevant PRs and Activities:* =E2=80=A2 (WIP) we're moving the OCaml Language Manual from v2.ocaml.org = to ocaml.org =E2=80=A2 set up dlvr.it to automatically post RSS feed items from OCaml Planet and OCaml Changelog to new ocaml_org Twitter account =E2=80=A2 [Link to recently added videos on watch.ocaml.org] by @sabine =E2=80=A2 [Change twitter account from OCamlLang to ocaml_org] by @sabine =E2=80=A2 [fix: small improvements on news.eml] by @sabine =E2=80=A2 [is yet category slug] by @cuihtlauac =E2=80=A2 [Add a badge from the green web foundation to the carbon footpr= int page] by @0xrotense =E2=80=A2 Deployment of odoc 2.4.1 to package documentation pipeline: =E2=80=A2 [Compatibility with odoc.2.4.1] by @gpetiot =E2=80=A2 [Patch for voodoo / odoc 2.4.1 upgrade] by @sabine =E2=80=A2 [chore: set doc url to live, after voodoo upgrade] by @sabine =E2=80=A2 Data: =E2=80=A2 [(data) add ocaml.org newsletter February] by @sabine =E2=80=A2 [Changelog entry for OCaml 4.14.2~rc1] by @Octachron =E2=80=A2 [Add dune.3.14.2 announcement] by @Leonidas-from-XIV =E2=80=A2 [OCaml 4.14.2 release and changelog pages] by @Octachron =E2=80=A2 [OCaml 4.14.2: fix release year] by @edwintorok =E2=80=A2 [Add Platform changelogs for February 2024] by @tmattio =E2=80=A2 [Changelog entry for OCaml 5.2.0~beta1] by @Octachron =E2=80=A2 [Add Outreachy winter 2023 round] by @patricoferris =E2=80=A2 Documentation: =E2=80=A2 [DOC: note about windows ppx_show] by @heathhenley =E2=80=A2 [(docs) Fix small typos] by @kenranunderscore =E2=80=A2 [(docs) Add link for instances of Array] by @rmeis06 =E2=80=A2 [Linking exercise to tutorials] by @rmeis06 =E2=80=A2 [Explain why t-first works with labels ] by @mikhailazaryan =E2=80=A2 [Document that begin =E2=80=A6 end use] by @rmeis06 =E2=80=A2 [Use uniform syntax for eval steps] by @cuihtlauac =E2=80=A2 [Linking mentions of atomic module to doc] by @rmeis06 =E2=80=A2 [Linking Bigarray references] by @rmeis06 =E2=80=A2 [(docs) fix example in 'Libraries With Dune'] by @0xRamsi =E2=80=A2 [Fix typo in 4ad_01_operators.md] by @vog =E2=80=A2 [(docs) Use DkML 2.1.0] by @jonahbeckford [Link to recently added videos on watch.ocaml.org] [Change twitter account from OCamlLang to ocaml_org] [fix: small improvements on news.eml] [is yet category slug] [Add a badge from the green web foundation to the carbon footprint page] [Compatibility with odoc.2.4.1] [Patch for voodoo / odoc 2.4.1 upgrade] [chore: set doc url to live, after voodoo upgrade] [(data) add ocaml.org newsletter February] [Changelog entry for OCaml 4.14.2~rc1] [Add dune.3.14.2 announcement] [OCaml 4.14.2 release and changelog pages] [OCaml 4.14.2: fix release year] [Add Platform changelogs for February 2024] [Changelog entry for OCaml 5.2.0~beta1] [Add Outreachy winter 2023 round] [DOC: note about windows ppx_show] [(docs) Fix small typos] [(docs) Add link for instances of Array] [Linking exercise to tutorials] [Explain why t-first works with labels ] [Document that begin =E2=80=A6 end use] [Use uniform syntax for eval steps] [Linking mentions of atomic module to doc] [Linking Bigarray references] [(docs) fix example in 'Libraries With Dune'] [Fix typo in 4ad_01_operators.md] [(docs) Use DkML 2.1.0] Opam 102: Pinning Packages, by OCamlPro =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 Archive: OCamlPro announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80 Greetings Cameleers, Here=E2=80=99s another heads up for all opam users: [Opam 102: Pinning Packages], our latest blog post breaking down opam for the community; as a keen eye would have already guessed, today's subject is package pinning! We hope that this may be useful to anybody curious about getting acquainted with opam's pins. This article is made for whom wonders how they work and when they are useful to be aware of. Hoping that it may serve as a reference for all newcomers to the ecosystem. We appreciate and are thankful for every reader, we welcome all your feedback, right here, in this thread. :smile: Kind regards, The OCamlPro Team [Opam 102: Pinning Packages] dune 3.15 =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90 Archive: Marek Kubica announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 We're happy to announce that Dune 3.15.0 is now available. This feature has many fixes and new features that you can find in the changelog. There are a few new features that we would like to specially highlight. Removal of previous limitations in many forms =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C= =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C Prior to Dune 3.15 there were a number of limitations where percent forms like `%{env:...}' could be used to expand to useful values. In this release, @rgrinberg put some effort to relax a lot of these restrictions where possible. In the new version some of these limitations have been lifted, so for example `{env:...}' can be used in `install' stanzas ([#10160]). Likewise there was no consistency where `%{cma:...}' or `%{cmo:...}' could be used. With [#10169], these forms should work consistently everywhere. Similarly the variables allowed in `enabled_if' fields have been expanded in [#10250], from just allowing variables that can be computed from the context to now allowing all variables as long as expanding these variables does not introduce dependency cycles. These relaxed rules can also be combined to enable a library depending on environment variables, e.g. `(enabled_if %{env:ENABLE_LIBFOO=3Dfalse}))'. [#10160] [#10169] [#10250] Overlapping names in different contexts =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C= =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C Continuing the theme of conditionally enabling or disabling code to be built, @jchavarri and @rgrinberg's work on [#10220] makes it possible to have overlapping names between `executable' and `melange.emit' targets. This can be useful when a name is to be shared in different contexts (e.g. one context with native compilation and one emitting code for the browser). [#10220] Properly output UTF-8 encoded text when formatting =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C= =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C Dune does not assume an encoding of dune files, however when files were formatted the formatter would err on the safe side and escape bytes outside the ASCII range. This means that UTF-8 characters outside of ASCII would get escaped into decimal escape sequences. This was especially annoying in places where the user would write natural language texts, which is common when defining Opam packages in `dune-project' files. For example a discussion of a paper by Paul Erd=C5=91s, Peter Frankl, Vojt=C4=9Bch R=C3=B6dl would upon reformatting = be turned into Paul Erd\\197\\145s, Peter Frankl, Vojt\\196\\155 R\\195\\182, which does a disservice to these scientists and is hard to read. Thanks to the work of @moyodiallo in [#9728] starting with Dune 3.15 the original encoding will be preserved, so your package descriptions will be more readable. [#9728] Changelog =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C =E2=97=8A Added =E2=80=A2 Add link flags to to `ocamlmklib' for ctypes stubs (#8784, @frejsoya) =E2=80=A2 Remove some unnecessary limitations in the expansions of percent forms in install stanza. For example, the `%{env:..}' form can be used to select files to be installed. (#10160, @rgrinberg) =E2=80=A2 Allow artifact expansion percent forms (`%{cma:..}', `%{cmo:..}= ', etc.) in more contexts. Previously, they would be randomly forbidden in some fields. (#10169, @rgrinberg) =E2=80=A2 Allow `%{inline_tests}' in more contexts (#10191, @rgrinberg) =E2=80=A2 Remove limitations on percent forms in the `(enabled_if ..)' fi= eld of libraries (#10250, @rgrinberg) =E2=80=A2 Support dialects in `dune describe pp' (#10283, @emillon) =E2=80=A2 Allow defining executables or melange emit stanzas with the same name in the same folder under different contexts. (#10220, @rgrinberg, @jchavarri) =E2=97=8A Fixed =E2=80=A2 coq: Delay Coq rule setup checks so OCaml-only packages can bui= ld in hybrid Coq/OCaml projects when `coqc' is not present. Thanks to @vzaliva for the test case and report (#9845, fixes #9818, @rgrinberg, @ejgallego) =E2=80=A2 Fix conditional source selection with `select' on `bigarray' in OCaml 5 (#10011, @moyodiallo) =E2=80=A2 melange: fix inconsistency in virtual library implementation. Concrete modules within a virtual library can now refer to its virtual modules too (#10051, fixes #7104, @anmonteiro) =E2=80=A2 melange: fix a bug that would cause stale `import' paths to be emitted when moving source files within `(include_subdirs ..)' (#10286, fixes #9190, @anmonteiro) =E2=80=A2 Dune file formatting: output utf8 if input is correctly encoded (#10113, fixes #9728, @moyodiallo) =E2=80=A2 Fix expanding dependencies and locks specified in the cram stanza. Previously, they would be installed in the context of the cram test, rather than the cram stanza itself (#10165, @rgrinberg) =E2=80=A2 Fix bug with `dune exec --watch' where the working directory wo= uld always be set to the project root rather than the directory where the command was run (#10262, @gridbugs) =E2=80=A2 Regression fix: sign executables that are promoted into the sou= rce tree (#10263, fixes #9272, @emillon) =E2=80=A2 Fix crash when decoding dune-package for libraries with `(include_subdirs qualified)' (#10269, fixes #10264, @emillon) Changed =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C =E2=80=A2 Remove the `--react-to-insignificant-changes' option. (#10083, @rgrinberg) Ocsigen: summary of recent releases =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90 Archive: Vincent Balat announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Eliom 10.4: =E2=80=A2 Basic client-server distillery template: sqlite is now the defa= ult backend =E2=80=A2 Basic template now has license unlicense =E2=80=A2 Basic template fixes =E2=80=A2 Compatibility with Tyxml >=3D 4.6.0 (by Vincent Laporte) Ocsigen Start 6.3 =E2=80=A2 Adding license Unlicense to the template =E2=80=A2 Dependecy to Tyxml >=3D 4.6 Js_of_ocaml 5.7 =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 Archive: Hhugo announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Js_of_ocaml 5.7.2 was released recently. It adds missing primitives required by OCaml 5.2.0~beta Eio Developer Meetings =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 Archive: Sudha Parimala announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Following the release of Eio 1.0 (), Eio goes into maintenance mode for a bit. We've decided to pause the Eio developer meetings until further notice. Meanwhile, we remain active on the [issue tracker] and the [matrix channel]. I encourage folks to try out Eio and report their findings. [issue tracker] [matrix channel] Ocaml developer at Routine, Paris =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 Archive: mefyl announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Routine ([https://routine.co ]) is once more looking for OCaml developers. Routine is a personal productivity assistant and knowledge manager. The technological stack revolves heavily around OCaml which represents 80% of the codebase, both client and server side. The remaining 20% are the UIs in various frontend framework: =E2=80=A2 Browser and desktop (Linux/Macos/Windows) through electron, usi= ng Js_of_ocaml (eyeing on WASM). =E2=80=A2 iOS via Swift bindings. =E2=80=A2 Android via JVM bindings (upcoming). Our technological and academic background leads us to use designs that, I think, can pique the interest of seasoned Ocaml developer. Amongst other things : =E2=80=A2 Type-driven programming based on ppx derivers that produces typescript declaration for frontend bindings, JSON schema to expose and consume external REST APIs (Google, Notion, =E2=80=A6), automatic S= QL bindings, etc. =E2=80=A2 Automatic API and foreign binding generation for the different = front end technology, cross compilation. =E2=80=A2 [Incremental ] based state updates to refresh minimal subsets o= f the app. =E2=80=A2 Integrated graph query language to query and manipulate all the= app data, including defining custom data types and workflows. =E2=80=A2 Highly concurrent implementation through Lwt and Eio - migratin= g to the later as we go. Exception-free design. OCaml 5 with all the goodies. =E2=80=A2 Angstrom based parsing for the interactive console with highlig= hting and completion. =E2=80=A2 Everything is very much library-oriented, with loads of reusabl= e and scaffolded packages. Most of the work is intended to be open sources, or already has been published. =E2=80=A2 An obsession for compile-time checks and type safety. We use state of the art CI/CD and development processes. Salary is up to market standard depending on the profile, plus usual options package, to be discussed. We have a preference for presential work in our Paris 11th office (Charonne, 3 days a week) to help foster team spirit but we won't pass on talented remote individuals. We're looking to extend the team with talented and passionate engineers who see the global picture and will work through all layers of the project to see it succeed and create something we're proud of. While we expect great OCaml and general computer science proficiency, we=E2=80=99re open to most levels of experience. Thoroughnes= s and a love for well rounded, robust and beautiful software design is a must have - but that comes bundled with OCaml love, right ? Do not hesitate to reach out for any question here, at [quentin.hocquet@routine.co]() or refer this to someone who may be interested. Thanks for your time and happy hacking ! [https://routine.co ] [Incremental ] dream-html 3.0.0 =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 Archive: Yawar Amin announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80 [ANN] dream-html 3.3.1 Add `to_xml' and `pp_xml' functions to render in XML style Normally, dream-html defaults to rendering nodes in HTML style, meaning that void elements are rendered just like opening tags. Eg `
'. With the new `to_xml' and `pp_xml' functions, we can now render nodes in XML style, meaning `
'. This allows XML parsers to successfully parse the output. So eg you can use dream-html to author an ePub book. Escape URI attributes like `href' with normal attribute escaping rules in addition to percent-encoding. Most significantly, ampersands are encoded now, eg `/foo?a=3D1&b=3D2' is rendered as `/foo?a=3D1&b=3D2'. Change where line breaks are inserted into the output markup, so that there is no chance of injecting spurious whitespace into the rendered page. This gives complete control over whitespace to the user. Other OCaml News =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 >>From the ocaml.org blog =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Here are links from many OCaml blogs aggregated at [the ocaml.org blog]. =E2=80=A2 [Updates to OCaml.org's Learn Section: Enhancing UI and UX] [the ocaml.org blog] [Updates to OCaml.org's Learn Section: Enhancing UI and UX] Old CWN =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 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] [the archive] [RSS feed of the archives] [caml-list] [Alan Schmitt] --=-=-= Content-Type: text/html; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable OCaml Weekly News

OCaml Weekly News

Previous Week<= /a> Up Next Week

Hello

Here is the latest OCaml Weekly News, for the week of April 02 to 09, 2024.

moonpool 0.6

Simon Cruanes announced

Dearest friends of the dual hump,

I'm happy to announce the release of moonpool 0.6. Moonpool is a library of schedulers and concurrency primitives for OCaml 4.xx and 5.xx, based on thr= eads (possibly spread on multiple domains). Previous release announcements (0.5, 0.4, 0.3, 0.2, 0.1) contai= n more details.

This release is fairly large and contains some new libraries. The biggest i= mprovement is the addition of moonpool.fib (OCaml 5 only): it defines lightweight fibers with = structured concurrency, where the fibers can run on a thread pool chosen by= the user. Fibers also come with fiber-local storage and a notion of cancellation that= is propagated to children fibers. Overall, fibers are a nicer abstraction than bare futures (especially with monadic combinators). = There are currently no cooperative IO primitives provided by the scheduler but I have plans.

Another new, more experimental library is moonpool-lwt (OCaml = 5 only) which allows for interoperability between Lwt and moonpool: a moonpool future (or fiber) can be turned into a Lwt promise; and it becomes= possible to await a Lwt promise from moonpool, in a thread-safe way.

Docs:

sqids 0.1.0

Leo Soares announced

I'm happy to announce the first release (0.1.0) of the official OCaml port of Sqids.

Sqids (pronounced "squids") is an open-source library that lets you generat= e short unique identifiers from numbers. These IDs are URL-safe, can encode several numbers, and do not contain common profanity w= ords.

https://opam.ocaml.org/pa= ckages/sqids

OCaml Retreat at Auroville, India (March 10th - March 15th)

Sudha Parimala announced

I'm happy to share the experience report from the first OCaml Retreat: https:/= /ocamlretreat.org/2024/03/24/retreat-experience.html. Thanks to all the participants for contributing to the magic of the event. = We hope to run more such retreats in the future!

Miou, a simple scheduler for OCaml 5

Calascibetta Romain announced

I am delighted to announce the release of miou.0.1.0. This rel= ease is undoubtedly the culmination and synthesis of the work of several individuals to offer a library that best fits our needs. We're quit= e convinced by the API we're proposing and quite happy with the implementation. As such, we're coming out of beta to offer version= 0.1.0. Above all, this means that the API will change very little, and the library is now ready for use. However, we are not yet = in 1.0.0 because we would like to give you time to use Miou, to observe possible bugs, and to give us time to correct these possib= le bugs in order to prepare version 1.0.0 with peace of mind. You can install the package via OPAM (it will be available soon):

$ opam install miou

We would sincerely like to thank all individuals who have contributed, whet= her directly or indirectly, to the project.

Furthermore, this new version of Miou builds upon the excellent work of @po= lytypic and his picos<= /a> project. We have incorporated certain elements that are suitable for implementing a schedule= r, and we hope that our efforts will lead to a certain standardization of the effects used by different schedulers in OCaml.

This rewrite has been carried out while trying to maintain the same semanti= cs and API as what we offered in version 0.0.1~beta2 (however, it is the nature of a beta to potentially break versions). This r= ewrite culminated in the reimplementation of an HTTP client and server (supporting http/1.1 or h2 with TLS which can handle 200k req/sec) as well as our good old happy-eyeballs= example. Moreover, the outcome of these implementations is more satisfying to us than their previous versi= ons. At least for now, considering the various changes our cooperative has embarked on=C2=B9, we will not yet release them.

We also took the time to integrate a version of the priority queue verified= using Why3. We would like to thank @= Armael and @backtracking (as well as the individuals who contributed to and maintained= the Vocal project) f= or their assistance.

Finally, I would like to personally thank the Robur cooperative for providing me with the necessary time to evolve= this project.

This release further confirms what we aim to offer to users, and in this re= gard, we have taken the time to write a small book explaining the use of Miou. This can also be seen as an introduction to asy= nchronous programming and effects. It is available here and is part of the = Miou distribution.

For any questions or assistance, we are available via email, this forum, or= Discord.

Happy hacking!

=C2=B9: As explained in this article, we try to replace Cstruct.= t by string and it requires obviously a deep change across severals packages.

OCaml.org Newsletter: March 2024

Sabine Schmaltz announced

Welcome to the March 2024 edition of the OCaml.org newsletter! This update = has been compiled by the OCaml.org team. You can find previous upda= tes on Discuss.

Our goal is to make OCaml.org the best resource for anyone who wants to get= started and be productive in OCaml. The OCaml.org newsletter provides an update on our progress towards that goal and an over= view of the changes we are working on.

We couldn't do it without all the amazing OCaml community members who help = us review, revise, and create better OCaml documentation. Your feedback enables us to better prioritise our work. Thank you!

This newsletter covers:

  • OCaml Cookbook: A prototype of an OCaml cookbook that provides s= hort code examples that solve practical problems using packages from the OC= aml ecosystem is on staging.ocaml.org/cookbook.
  • Dark Mode: We enabled the dark mode on all pages of OCaml.org, b= ased on your operating system / browser settings.
  • Community & Marketing Pages Rework: We are seeking feedback = on wireframes for the community section and for the marketing-related pages= .
  • General Improvements: As usual, we also worked on general mainte= nance and improvements based on user feedback, so we're highlighting some o= f our work below.

Open Issues for Contributors

Upcoming OCaml Cookbook

We're in the process of adding a community-driven section to the Learn area= : the OCaml Cookbook. This cookbook is designed as a collection of recipes, offering code samples for tackling real-world tasks = using packages from the OCaml ecosystem. It's a practical effort to enrich our learning resources, making them more applicable and us= eful for our community.

This month, our focus shifted towards finalizing the cookbook for release. = This includes

  • restructuring the directory structure and placement of recipe files, an= d
  • adding tasks to the cookbook, so that you can contribute recipes for th= ese tasks (we took inspiration from the excellent Rust Cookbook).

It will always be possible to propose more tasks for the OCaml Cookbook. Th= e main criteria here are:

  1. task must require more than just a single Standard Library function cal= l to solve,
  2. task must be focused on common problems that occur when trying to build= products,
  3. if in doubt, make the task more specific, instead of more generic.

A good place to give feedback on the cookbook is this discuss thread.

Relevant PRs and Activities:

Dark Mode Released

We're happy to anounce that we shipped the Dark Mode for OCaml.org. Dark mo= de is activated based on your operating system / browser settings. If you see anything wrong, please open an issue and include the U= RL on which you're seeing a problem.

Relevant PRs and Activities:

Homepage & Marketing Pages Rework

The Home page project kicked off with an analysis of user surveys and inter= views, and the development of an initial wireframe for the homepage and the "Industrial Users" and "Academic Users" pages.

We've been reaching out to the community on Discuss and Twitter to find what people say about OCaml, so we can give a bit more cont= ext through testimonials on the "Academic Users" page.

Besides this, we've been asking on Twitter for ideas for the main tagline of the homepage

You can comment on the wireframes in Figma here.

If you have opinions on the homepage, feel free to share them in this discuss thread!

Community Section Rework

This week, we focused on creating wireframes for the Event, Job, Internship= , and Workshop pages, followed by soliciting feedback from the community via Discuss. Concurrently, work commenced on the UI design fo= r the Community Landing page, as well as the Event and Job pages.

We also made some improvements to the Events section on the Community page.= This involves better treatment of start/end times of events, as well as listing more upcoming events.

If you have opinions on the community section, feel free to share them in <= a href=3D"https://discuss.ocaml.org/t/looking-for-ideas-for-the-community-p= age-at-ocaml-org/14032/9">this discuss thread!

Relevant PRs and Activities:

Outreachy Application Period & Internship

In March, OCaml.org hosted the application period for one Outreachy internship on creating an interactive experience for solving OCaml exercises.

The process of selecting an Outreachy intern involved creating and managing= 15 issues, reviewing 61 pull requests from 8 applicants. The tasks were similar in nature and dealt with restructuring the exercises= to enable an interactive experience, adding test cases and solutions (where missing).

Relevant PRs and Activities:

General Improvements and Data Additions

Relevant PRs and Activities:

Opam 102: Pinning Packages, by OCamlPro

OCamlPro announced

Greetings Cameleers,

Here=E2=80=99s another heads up for all opam users: Opam 102: Pinning Packages, our latest blog post breaking down opam for the community; as a keen eye would have already guessed, today's subject is pac= kage pinning!

We hope that this may be useful to anybody curious about getting acquainted= with opam's pins. This article is made for whom wonders how they work and when they are useful to be aware of.

Hoping that it may serve as a reference for all newcomers to the ecosystem.

We appreciate and are thankful for every reader, we welcome all your feedba= ck, right here, in this thread. :smile:=20

Kind regards, The OCamlPro Team

dune 3.15

Marek Kubica announced

We're happy to announce that Dune 3.15.0 is now available. This feature has= many fixes and new features that you can find in the changelog.

There are a few new features that we would like to specially highlight.

Removal of previous limitations in many forms

Prior to Dune 3.15 there were a number of limitations where percent forms l= ike %{env:...} could be used to expand to useful values. In this release, @rgrinberg put some effort to relax a lot of these restric= tions where possible.

In the new version some of these limitations have been lifted, so for examp= le {env:...} can be used in install stanzas (#10160).

Likewise there was no consistency where %{cma:...} or %{= cmo:...} could be used. With #10169, these form= s should work consistently everywhere.

Similarly the variables allowed in enabled_if fields have been= expanded in #10250, from just allowing variables that can be computed from the context to now allowi= ng all variables as long as expanding these variables does not introduce dependency cycles.

These relaxed rules can also be combined to enable a library depending on e= nvironment variables, e.g. (enabled_if %{env:ENABLE_LIBFOO=3Dfalse})).

Overlapping names in different contexts

Continuing the theme of conditionally enabling or disabling code to be buil= t, @jchavarri and @rgrinberg's work on #10220 makes it possible to have overlapping names between executable and melange.emit targets. This= can be useful when a name is to be shared in different contexts (e.g. one context with native compilation and one emitting code for the browser).

Properly output UTF-8 encoded text when formatting

Dune does not assume an encoding of dune files, however when files were for= matted the formatter would err on the safe side and escape bytes outside the ASCII range. This means that UTF-8 characters outside of = ASCII would get escaped into decimal escape sequences.

This was especially annoying in places where the user would write natural l= anguage texts, which is common when defining Opam packages in dune-project files. For example a discussion of a paper by = Paul Erd=C5=91s, Peter Frankl, Vojt=C4=9Bch R=C3=B6dl would upon reformatti= ng be turned into Paul Erd\\197\\145s, Peter Frankl, Vojt\\196\\155 R\\195\\182, = which does a disservice to these scientists and is hard to read.

Thanks to the work of @moyodiallo in #9728 starting with Dune 3.15 the original encoding will be preserved, so your package descriptions will be more readable.

Changelog

  • Added
    • Add link flags to to ocamlmklib for ctypes stubs (#8784, @= frejsoya)
    • Remove some unnecessary limitations in the expansions of percent forms = in install stanza. For example, the %{env:..} form can be used= to select files to be installed. (#10160, @rgrinberg)
    • Allow artifact expansion percent forms (%{cma:..}, %= {cmo:..}, etc.) in more contexts. Previously, they would be randomly= forbidden in some fields. (#10169, @rgrinberg)
    • Allow %{inline_tests} in more contexts (#10191, @rgrinberg= )
    • Remove limitations on percent forms in the (enabled_if ..)= field of libraries (#10250, @rgrinberg)
    • Support dialects in dune describe pp (#10283, @emillon)
    • Allow defining executables or melange emit stanzas with the same name i= n the same folder under different contexts. (#10220, @rgrinberg, @jchavarri= )
  • Fixed
    • coq: Delay Coq rule setup checks so OCaml-only packages can build in hy= brid Coq/OCaml projects when coqc is not present. Thanks to @v= zaliva for the test case and report (#9845, fixes #9818, @rgrinberg, @ejgal= lego)
    • Fix conditional source selection with select on biga= rray in OCaml 5 (#10011, @moyodiallo)
    • melange: fix inconsistency in virtual library implementation. Concrete = modules within a virtual library can now refer to its virtual modules too (= #10051, fixes #7104, @anmonteiro)
    • melange: fix a bug that would cause stale import paths to = be emitted when moving source files within (include_subdirs ..) (#10286, fixes #9190, @anmonteiro)
    • Dune file formatting: output utf8 if input is correctly encoded (#10113= , fixes #9728, @moyodiallo)
    • Fix expanding dependencies and locks specified in the cram stanza. Prev= iously, they would be installed in the context of the cram test, rather tha= n the cram stanza itself (#10165, @rgrinberg)
    • Fix bug with dune exec --watch where the working directory= would always be set to the project root rather than the directory where th= e command was run (#10262, @gridbugs)
    • Regression fix: sign executables that are promoted into the source tree= (#10263, fixes #9272, @emillon)
    • Fix crash when decoding dune-package for libraries with (include_= subdirs qualified) (#10269, fixes #10264, @emillon)

Changed

  • Remove the --react-to-insignificant-changes option. (#1008= 3, @rgrinberg)

Ocsigen: summary of recent releases

Vincent Balat announced

Eliom 10.4:

  • Basic client-server distillery template: sqlite is now the default back= end
  • Basic template now has license unlicense
  • Basic template fixes
  • Compatibility with Tyxml >=3D 4.6.0 (by Vincent Laporte)

Ocsigen Start 6.3

  • Adding license Unlicense to the template
  • Dependecy to Tyxml >=3D 4.6

Js_of_ocaml 5.7

Hhugo announced

Js_of_ocaml 5.7.2 was released recently. It adds missing primitives require= d by OCaml 5.2.0~beta

Eio Developer Meetings

Sudha Parimala announced

Following the release of Eio 1.0 (https://discuss.ocaml.org/t/ann-eio-1-= 0-first-major-release/14334), Eio goes into maintenance mode for a bit. We've decided to pause the Eio developer meetings until further = notice. Meanwhile, we remain active on the issue tracker and the mat= rix channel. I encourage folks to try out Eio and report their findings.

Ocaml developer at Routine, Paris

mefyl announced

Routine (https://routine.co ) is once mo= re looking for OCaml developers.

Routine is a personal productivity assistant and knowledge manager. The tec= hnological stack revolves heavily around OCaml which represents 80% of the codebase, both client and server side. The remaining = 20% are the UIs in various frontend framework:

  • Browser and desktop (Linux/Macos/Windows) through electron, using Js_of= _ocaml (eyeing on WASM).
  • iOS via Swift bindings.
  • Android via JVM bindings (upcoming).

Our technological and academic background leads us to use designs that, I t= hink, can pique the interest of seasoned Ocaml developer. Amongst other things :

  • Type-driven programming based on ppx derivers that produces typescript = declaration for frontend bindings, JSON schema to expose and consume extern= al REST APIs (Google, Notion, =E2=80=A6), automatic SQL bindings, etc.
  • Automatic API and foreign binding generation for the different front en= d technology, cross compilation.
  • Incremental = based state updates to refresh minimal subsets of the app.
  • Integrated graph query language to query and manipulate all the app dat= a, including defining custom data types and workflows.
  • Highly concurrent implementation through Lwt and Eio - migrating to the= later as we go. Exception-free design. OCaml 5 with all the goodies.
  • Angstrom based parsing for the interactive console with highlighting an= d completion.
  • Everything is very much library-oriented, with loads of reusable and sc= affolded packages. Most of the work is intended to be open sources, or alre= ady has been published.
  • An obsession for compile-time checks and type safety.

We use state of the art CI/CD and development processes. Salary is up to ma= rket standard depending on the profile, plus usual options package, to be discussed. We have a preference for presential work in our P= aris 11th office (Charonne, 3 days a week) to help foster team spirit but we won't pass on talented remote individuals.

We're looking to extend the team with talented and passionate engineers who= see the global picture and will work through all layers of the project to see it succeed and create something we're proud of. While= we expect great OCaml and general computer science proficiency, we=E2=80=99re open to most levels of experience. Thoroughness = and a love for well rounded, robust and beautiful software design is a must have - but that comes bundled with OCaml love, right ?

Do not hesitate to reach out for any question here, at [quentin.hocquet@rou= tine.co](mailto:quentin.hocqu= et@routine.co) or refer this to someone who may be interested.

Thanks for your time and happy hacking !

dream-html 3.0.0

Yawar Amin announced

[ANN] dream-html 3.3.1

Add to_xml and pp_xml functions to render in XML = style

Normally, dream-html defaults to rendering nodes in HTML style, meaning tha= t void elements are rendered just like opening tags. Eg <br>. With the new to_xml and pp_xml<= /code> functions, we can now render nodes in XML style, meaning <b= r />. This allows XML parsers to successfully parse the output. So eg you can use dream-html to author an= ePub book.

Escape URI attributes like href with normal attribute escaping= rules in addition to percent-encoding. Most significantly, ampersands are encoded now, eg /foo?a=3D1&b=3D2 is rendere= d as /foo?a=3D1&amp;b=3D2.

Change where line breaks are inserted into the output markup, so that there= is no chance of injecting spurious whitespace into the rendered page. This gives complete control over whitespace to the user.

Other OCaml News

From the ocaml.org blog

Here are links from many OCaml blogs aggregated at the ocaml.org blog.

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 loo= k at the archive or the <= a href=3D"https://alan.petitepomme.net/cwn/cwn.rss">RSS feed of the archive= s.

If you also wish to receive it every week by mail, you may subscribe to the= caml-list.

--=-=-=--