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=HYpH1KfF; 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 4F7F6B80123 for ; Tue, 25 Jun 2024 14:58:49 +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=2hh29c5P8WChdJnedPSwh8cmcQTy8QxU0OpmxVDCGBk=; b=HYpH1KfFRZykwoa3pE+MHNM2g0r928R2smF0uKS3ICIYgSp98r4k7kyS CpuAvE6O593r91HZMZrMJAATyxB4YlFvMVzBgmZlIgGCs+sWZ7C/B5gfe buGl45YoyI/QcUQKF/lsyaoHhngZNKUIMFCPZtoFjS5crZprsqiSHirzW k=; Authentication-Results: mail2-relais-roc.national.inria.fr; dkim=none (message not signed) header.i=none; spf=Pass smtp.mailfrom=caml-list-owner@inria.fr; spf=None smtp.helo=postmaster@sympa.inria.fr 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 X-IronPort-AV: E=Sophos;i="6.08,264,1712613600"; d="scan'208,217";a="172406672" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 25 Jun 2024 15:58:48 +0200 Received: by sympa.inria.fr (Postfix, from userid 20132) id 26856E01A8; Tue, 25 Jun 2024 15:58:48 +0200 (CEST) Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by sympa.inria.fr (Postfix) with ESMTPS id D9D38E00B6 for ; Tue, 25 Jun 2024 15:58:43 +0200 (CEST) X-IronPort-AV: E=Sophos;i="6.08,264,1712613600"; d="scan'208,217";a="90593030" Received: from mac-03220211.irisa.fr ([131.254.21.249]) by mail3-relais-sop.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jun 2024 15:58:44 +0200 From: Alan Schmitt To: "lwn" , caml-list@inria.fr Date: Tue, 25 Jun 2024 15:58:43 +0200 Message-ID: MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News Reply-To: Alan Schmitt X-Loop: caml-list@inria.fr X-Sequence: 19149 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 June 18 to 25, 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 First public editor tooling dev-meeting First release of oma Ppxlib dev meetings CAISAR release 2.0, a platform for characterizing AI safety and robustness First release of baby Preview of Stripe client and mock server - DkStdRestApis opam 2.2.0 rc1 release Project wide occurrences Other OCaml News Old CWN First public editor tooling dev-meeting =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: vds 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 We are organizing the first public dev-meeting about Merlin, OCaml-LSP and more generally editor support for OCaml. This meeting will take place on *Thursday, June 27th*, at 05:00 pm CEST. We plan to have these happen every last Thursday of the month. The goal of these meetings is to provide a place for all contributors of these projects to discuss their work together. Whether you are a long time maintainer, an occasional contributor, a new comer, or simply a curious passer-by, please feel free to join and participate! We also plan to have some short technical presentations to help contributors learn more about the projects involved. These won't be systematic, and if you are interested in a particular subject feel free to ask about it or to propose a presentation. The agenda for this first meeting, which will be focused on the burning topic of project-wide occurrences, is the following: =E2=80=A2 A tour-de-table to allow the participants that wish to do so to present themselves and mention issues / prs they are interested in. =E2=80=A2 A presentation of current on-going projects. =E2=80=A2 A focus on project-wide occurrences: how does it work, what are= the tools that need to interact together and what are its current limitations and possible future improvements. =E2=80=A2 Discuss issues and pull requests that were tagged in advance or mentioned during the tour-de-table. =E2=80=A2 Informal discussion We looking forward to meeting you! Meeting link: First release of oma =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: Fran=C3=A7ois Pottier 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 I have just published a new release of `oma' with the following fixes and changes: =E2=80=A2 New functions `invalidate_open_interval' and `invalidate_semi_open_interval'. =E2=80=A2 Fix a serious bug in `Unsafe.first' and `Unsafe.last', which wo= uld incorrectly return `None' when the region contains only one point. =E2=80=A2 Fix a serious bug in `Unsafe.iter', which would systematically = omit the last point of the region. Ppxlib dev 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 Archive: Nathan Rebours 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 Meeting notes are available here: . Thanks to everyone who attended! Our next meeting is scheduled for Tuesday July 16th, 6:00PM CET! CAISAR release 2.0, a platform for characterizing AI safety and robustness =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=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: Julien Girard 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 On the occasion of the 34th birthday of the [abolition of the apartheid laws], we are honoured to release CAISAR version 2.0. The release source is available at our [public forge]. As our last releases, CAISAR will soon be available on [opam] and on [Dockerhub]. A nix flake is available for building CAISAR directly in the repository. Try CAISAR with `nix build git+https://git.frama-c.com/pub/caisar'! Here are the prominent features for this 2.0 release: [abolition of the apartheid laws] [public forge] [opam] [Dockerhub] Specification and verification of several neural networks at once =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C= =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C= =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C CAISAR specification language already allowed to write specifications that involved several neural networks at once. However, translating such specifications to actual prover queries was not possible. We added automated graph editing techniques to allow such verification to take place. Within particular patterns, CAISAR will generate an ONNX file that preserve the semantic of the different neural networks while encapsulating parts of the specification directly in the control flow of the new neural network. This feature allow the verification of properties with multiple neural networks, including their composition. This is quite a step forward, as it enables machine-learning dedicated verifiers to tackle a much wider range of properties. SVM as first-class citizens for interpretation =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C= =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C CAISAR now fully integrate SVMs into the interpretation engine. Users can expect vector computations and applications on SVMs to be computed similarly as what exists already for neural networks. We also unified the theory of machine learning models. Now, SVMs and neural networks can be specified with only the `model' type. In the near future, SVMs will be parsed directly into CAISAR=E2=80=99s Neural Intermediate Representations, which will simplify the verification of systems with heterogeneous AI components. First release of baby =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: Fran=C3=A7ois Pottier 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 It is my pleasure to announce the first release of `baby'. `baby' is an OCaml library that offers several implementations of balanced binary search trees. At this time, `baby' offers a replacement for OCaml's `Set' module; it does not yet have a replacement for OCaml's `Map' module. Height-balanced and weight-balanced binary search trees are offered out of the box. Furthermore, to advanced users, the library offers a lightweight way of implementing other balancing strategies. The following points offer a comparison between `baby' and OCaml's `Set' library. Better Performance =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C At the time of writing, `baby' offers generally better performance than OCaml's `Set' library. Its operations are generally faster (sometimes much faster; sometimes slightly faster; sometimes slightly slower) than those of the `Set' library, and its memory allocation rate is slightly lower. Constant-Time Cardinal =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=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 contrast with the `Set' library, `baby''s weight-balanced trees offer a `cardinal' function whose time complexity is *O(1)*. They also offer a family of random access functions (`get', `index', etc.) whose time complexity is *O(log n)*. Furthermore, by exploiting cardinality information, the functions `subset' and `equal' are sometimes able to return `false' in constant time. Better Sharing =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C `baby''s binary operations (`union', `inter', `diff') take advantage of (and preserve) physical equality in a more aggressive way. This allows them to (sometimes) be faster and allocate less memory. Adaptive Conversions To Sets =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C= =E2=95=8C=E2=95=8C=E2=95=8C `baby''s conversion functions `of_list', `of_array', and `of_seq' have adaptive complexity. If the input data is sorted, their complexity is *O(n)*; otherwise, their complexity gracefully degrades down to *O(n.log n)*. More Operations =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C `baby' offers a few operations that do not exist in OCaml's `Set' library: =E2=81=83 The symmetric difference, `xor'; =E2=81=83 The conversion functions `of_array' and `to_array'; =E2=81=83 The extremum-removal functions `remove_min_elt' and `remove_max_elt'; =E2=81=83 The enumeration API in the submodule `Enum'. Enumerations shoul= d be slightly faster than standard sequences, and are able to efficiently seek ahead, via the function `from'. Documented Complexity =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=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 `baby', the time complexity of every operation is documented. Compatibility =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C `baby' is perfectly compatible with OCaml's Set library. In other words, using `Baby.W.Set' instead of `Set' is safe. As a word of warning, though, if the equivalence relation on elements is coarser than equality (that is, if `compare x y =3D 0' does not imply `x =3D y'), then `Baby.W.Set' and `Set' might behave differently when a choice must be made between two equivalent elements. This can occur in `union', `of_list', `of_array', `of_seq', `add_seq', `map'. Preview of Stripe client and mock server - DkStdRestApis =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: jbeckford 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 I am pleased to announce that Stripe is the first REST API available in the DkStdRestApis project: That README has a 10-minute quick start; you can do it with or without a Stripe account. The Stripe client and mock server have Apache 2.0 licensing and were generated using a new OpenAPI code generator. The code generator is not part of this preview announcement (wait until DkCoder 0.4 announcement) but since there have been a couple generators released in the past month perhaps it is best to say what is different: 1. Both client and server source code are generated. The client examples include direct web requests by cohttp-lwt-curl (`src/DkStdRestApis_NotStripe/Curl2.ml') and also indirectly by printing the `curl -d name=3Dvalue https://api.stripe.com/...' command (`src/DkStdRestApis_NotStripe/CurlCmd.ml'). The mock server example (`src/DkStdRestApis_NotStripe/ServerTiny.ml') uses @c-cube 's [excellent tiny_httpd daemon]. 2. Very small dependency cone that works on Windows/macOS/Linux (including the REST server). And the minimum OCaml version will be 4.14 for the foreseeable future. 3. My focus is not on the code generator but having working, maintainable REST clients for the major cloud/SaaS services that can be included in DkCoder's liberally licensed standard library. The server feature was a pleasant but very unplanned accident. If I do take time to develop fancier server features (ex. replaying mocks from a corpus, etc.) those additions will not be open source. 4. It is intended to have high coverage of OpenAPI features. Today that includes form URL encoding, sum types, server-side polymorphism and style/explode support. The only major feature that is intentionally unsupported is the `not' composition operator (have no idea how to express negation in OCaml's type system!). Now for the problems: 1. Stripe only compiles in bytecode mode. Why? The generated modules are huge (8+ MB in total) because Stripe's specification is 6MB. Native compilation [can't handle that today]. 2. I'm not releasing to opam until I'm sure that native compilation won't denial-of-service developer and opam machines. I'm also waiting for some Windows patches to dependencies to be released. Thanks to @vlaviron for helping solve some of the compilation scaling problems. And thanks to Nomadic Labs (and OCamlPro?) for developing [Json_encoding] and @anuragsoni for developing [Routes]; they are both bidirectional + lightweight + foundational. Report bugs / add stars [in the DkCoder project]. [excellent tiny_httpd daemon] [can't handle that today] [Json_encoding] [Routes] [in the DkCoder project] opam 2.2.0 rc1 release =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: R. Boujbel 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 We=E2=80=99re once again very excited to announce this first release cand= idate (and hopefully only) for opam 2.2.0. What=E2=80=99s new in this rc? =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C =E2=80=A2 Fix `opam upgrade' wanting to keep rebuilding the compiler (as = now it contains an `x-env-path-rewrite' field) =E2=80=A2 Provide defaults so `opam init -y' no longer asks questions on Windows =E2=80=A2 Fix `OpamConsole.menu' when there are more than 9 options (can happen on Windows) =E2=80=A2 A couple more fixes and general improvements :open_book: You can read our [blog post ] for more information about these changes and more, and for even more details you can take a look at the [release note ] or the [changelog]. [blog post ] [release note ] [changelog] Windows issues =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C Configuration of Windows is tricky, so please don=E2=80=99t be too disheartened if things don=E2=80=99t work instantly. If something doesn= =E2=80=99t work first time, [please do report it ], even if you manage to find a way to workaround it. If opam didn=E2=80=99t elegantly tell you what was wron= g, then it=E2=80=99s a bug and we=E2=80=99d love to hear about it, rather th= an ending up with a series of workarounds flying around. It=E2=80=99s no problem at al= l for us to receive a bug report which turns out to be user error - we=E2=80=99= d far rather that than not hear bugs which are opam=E2=80=99s error! :scream_ca= t: [please do report it ] How to upgrade =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C For Unix systems =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80 =E2=94=82 bash -c "sh <(curl -fsSL https://raw.githubusercontent.com/ocam= l/opam/master/shell/install.sh) --version 2.2.0~rc1" =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80 or from PowerShell for Windows systems =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80 =E2=94=82 Invoke-Expression "& { $(Invoke-RestMethod https://raw.githubus= ercontent.com/ocaml/opam/master/shell/install.ps1) }" =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80 We=E2=80=99re planning for a final opam 2.2.0 release next week, so pleas= e do report any issue you encounter on our [bug-tracker ]. [bug-tracker ] Project wide occurrences =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: vds 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 I am very excited to announce the first release of Merlin and Ocaml-LSP with support for project-wide occurrences =F0=9F=A5=B3. More precisely, it is now possible to query for every _usage_ of any value (and type, modules, etc.) anywhere in a project built with Dune. This is a very handy tool for code navigation ! Requirements =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C =E2=80=A2 OCaml 5.2 =E2=80=A2 Latest Dune (>=3D `3.16.0') =E2=80=A2 Latest Merlin (>=3D `5.1-502') =E2=80=A2 Latest OCaml-LSP preview (`1.18.0~5.2preview') Usage =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C =E2=80=A2 Build the new `@ocaml-index' alias. > We recommend running the indexation in watch mode along with your usual targets: `dune build @ocaml-index --watch' so that the index is always up to date. =E2=80=A2 Use the `Find/Peek all references' feature of LSP-based plugins =E2=80=A2 or `merlin-project-occurrences' in emacs =E2=80=A2 or `OccurrencesProjectWide' in vim. =E2=80=A2 Enjoy jumping around =F0=9F=A6=98 More information and bug reports =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C= =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C Bug reports and feature requests should be submitted to the Merlin [issue tracker]. There are already some known issues like the absence of declarations in the results and the impossibility to query from a declaration. Progress on occurrences can be tracked in a [pinned meta-issue]. If you are interested in contributing and learning more about the feature do not hesitate to join the [first public dev-meeting] on Thursday ! [issue tracker] [pinned meta-issue] [first public dev-meeting] 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 [Keeping Up With the Compiler: How we Help Maintain the OCaml Language] [the ocaml.org blog] [Keeping Up With the Compiler: How we Help Maintain the OCaml Language] 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 June 18 to 25, 2024.

First public editor tooling dev-meeting

vds announced

We are organizing the first public dev-meeting about Merlin, OCaml-LSP and = more generally editor support for OCaml. This meeting will take place on Thur= sday, June 27th, at 05:00 pm CEST. We plan to have these happen every last Thursday of the m= onth.

The goal of these meetings is to provide a place for all contributors of th= ese projects to discuss their work together. Whether you are a long time mainta= iner, an occasional contributor, a new comer, or simply a curious passer-by, plea= se feel free to join and participate!=20

We also plan to have some short technical presentations to help contributors learn more about the projects involved. These won't be systematic, and if you are interested in a particular subject feel free to ask about it or = to propose a presentation.

The agenda for this first meeting, which will be focused on the burning top= ic of project-wide occurrences, is the following:

  • A tour-de-table to allow the participants that wish to do so to present= themselves and mention issues / prs they are interested in.
  • A presentation of current on-going projects.
  • A focus on project-wide occurrences: how does it work, what are the too= ls that need to interact together and what are its current limitations and = possible future improvements.
  • Discuss issues and pull requests that were tagged in advance or mention= ed during the tour-de-table.
  • Informal discussion

We looking forward to meeting you!

Meeting link: https://meet= .google.com/imo-mkxi-hpt

First release of oma

Fran=C3=A7ois Pottier announced

I have just published a new release of oma with the following = fixes and changes:

  • New functions invalidate_open_interval and invalidat= e_semi_open_interval.
  • Fix a serious bug in Unsafe.first and Unsafe.last, which would incorrectly return None when the region cont= ains only one point.
  • Fix a serious bug in Unsafe.iter, which would systematical= ly omit the last point of the region.

Ppxlib dev meetings

Nathan Rebours announced

Meeting notes are available here: https://github.com/ocaml-ppx/ppxlib/wiki= /Dev-Meeting-2024-06-18.

Thanks to everyone who attended!

Our next meeting is scheduled for Tuesday July 16th, 6:00PM CET!

CAISAR release 2.0, a platform for characterizing AI safety an= d robustness

Julien Girard announced

On the occasion of the 34th birthday of the abolition of the apartheid= laws, we are honoured to release CAISAR version 2.0.

The release source is available at our public forge. As our last releases, CAISAR wi= ll soon be available on opam and on Dockerh= ub.

A nix flake is available for building CAISAR directly in the repository. Tr= y CAISAR with nix build git+https://git.frama-c.com/pub/caisar!

Here are the prominent features for this 2.0 release:

Specification and verification of several neural netw= orks at once

CAISAR specification language already allowed to write specifications that = involved several neural networks at once. However, translating such specifi= cations to actual prover queries was not possible. We added automated graph= editing techniques to allow such verification to take place. Within partic= ular patterns, CAISAR will generate an ONNX file that preserve the semantic= of the different neural networks while encapsulating parts of the specific= ation directly in the control flow of the new neural network. This feature = allow the verification of properties with multiple neural networks, includi= ng their composition.

This is quite a step forward, as it enables machine-learning dedicated veri= fiers to tackle a much wider range of properties.

SVM as first-class citizens for interpretation

CAISAR now fully integrate SVMs into the interpretation engine. Users can e= xpect vector computations and applications on SVMs to be computed similarly= as what exists already for neural networks.

We also unified the theory of machine learning models. Now, SVMs and neural= networks can be specified with only the model type. In the ne= ar future, SVMs will be parsed directly into CAISAR=E2=80=99s Neural Interm= ediate Representations, which will simplify the verification of systems wit= h heterogeneous AI components.

First release of baby

Fran=C3=A7ois Pottier announced

It is my pleasure to announce the first release of baby.

baby is an OCaml library that offers several implementations o= f balanced binary search trees. At this time, baby offers a re= placement for OCaml's Set module; it does not yet have a repla= cement for OCaml's Map module.

Height-balanced and weight-balanced binary search trees are offered out of = the box. Furthermore, to advanced users, the library offers a lightweight w= ay of implementing other balancing strategies.

The following points offer a comparison between baby and OCaml= 's Set library.

Better Performance

At the time of writing, baby offers generally better performan= ce than OCaml's Set library. Its operations are generally fast= er (sometimes much faster; sometimes slightly faster; sometimes slightly sl= ower) than those of the Set library, and its memory allocation= rate is slightly lower.

Constant-Time Cardinal

In contrast with the Set library, baby's weight-b= alanced trees offer a cardinal function whose time complexity = is O(1). They also offer a family of random access functions (= get, index, etc.) whose time complexity is O(log n)<= /b>. Furthermore, by exploiting cardinality information, the functions subset and equal are sometimes able to return f= alse in constant time.

Better Sharing

baby's binary operations (union, inter, diff) take advantage of (and preserve) physical equality i= n a more aggressive way. This allows them to (sometimes) be faster and allo= cate less memory.

Adaptive Conversions To Sets

baby's conversion functions of_list, of_arr= ay, and of_seq have adaptive complexity. If the input d= ata is sorted, their complexity is O(n); otherwise, their complexity= gracefully degrades down to O(n.log n).

More Operations

baby offers a few operations that do not exist in OCaml's Set library:

  • The symmetric difference, xor;
  • The conversion functions of_array and to_array;
  • The extremum-removal functions remove_min_elt and re= move_max_elt;
  • The enumeration API in the submodule Enum. Enumerations sh= ould be slightly faster than standard sequences, and are able to efficientl= y seek ahead, via the function from.

Documented Complexity

In baby, the time complexity of every operation is documented.

Compatibility

baby is perfectly compatible with OCaml's Set library. In othe= r words, using Baby.W.Set instead of Set is safe.

As a word of warning, though, if the equivalence relation on elements is co= arser than equality (that is, if compare x y =3D 0 does not im= ply x =3D y), then Baby.W.Set and Set might behave differently when a choice must be made between two equivalen= t elements. This can occur in union, of_list, of_array, of_seq, add_seq, map.

Preview of Stripe client and mock server - DkStdRestApis

jbeckford announced

I am pleased to announce that Stripe is the first REST API available in the= DkStdRestApis project:

ht= tps://github.com/diskuv/DkStdRestApis?tab=3Dreadme-ov-file

That README has a 10-minute quick start; you can do it with or without a St= ripe account.

The Stripe client and mock server have Apache 2.0 licensing and were genera= ted using a new OpenAPI code generator. The code generator is not part of t= his preview announcement (wait until DkCoder 0.4 announcement) but since th= ere have been a couple generators released in the past month perhaps it is = best to say what is different:

  1. Both client and server source code are generated. The client examples i= nclude direct web requests by cohttp-lwt-curl (src/DkStdRestApis_NotS= tripe/Curl2.ml) and also indirectly by printing the curl -d na= me=3Dvalue https://api.stripe.com/... command (src/DkStdRestAp= is_NotStripe/CurlCmd.ml). The mock server example (src/DkStdRe= stApis_NotStripe/ServerTiny.ml) uses @c-cube 's excellent tiny_httpd daemon.
  2. Very small dependency cone that works on Windows/macOS/Linux (including= the REST server). And the minimum OCaml version will be 4.14 for the fores= eeable future.
  3. My focus is not on the code generator but having working, maintainable = REST clients for the major cloud/SaaS services that can be included in DkCo= der's liberally licensed standard library. The server feature was a pleasan= t but very unplanned accident. If I do take time to develop fancier server = features (ex. replaying mocks from a corpus, etc.) those additions will not= be open source.
  4. It is intended to have high coverage of OpenAPI features. Today that in= cludes form URL encoding, sum types, server-side polymorphism and style/exp= lode support. The only major feature that is intentionally unsupported is t= he not composition operator (have no idea how to express negat= ion in OCaml's type system!).

Now for the problems:

  1. Stripe only compiles in bytecode mode. Why? The generated modules are h= uge (8+ MB in total) because Stripe's specification is 6MB. Native compilat= ion can't handle th= at today.
  2. I'm not releasing to opam until I'm sure that native compilation won't = denial-of-service developer and opam machines. I'm also waiting for some Wi= ndows patches to dependencies to be released.

Thanks to @vlaviron for helping solve some of the compilation scaling probl= ems. And thanks to Nomadic Labs (and OCamlPro?) for developing Json_encoding and @anu= ragsoni for developing Routes; they are both bidirectional + lightweight + foundat= ional.

Report bugs / add stars in th= e DkCoder project.

opam 2.2.0 rc1 release

R. Boujbel announced

We=E2=80=99re once again very excited to announce this first release candid= ate (and hopefully only) for opam 2.2.0.

What=E2=80=99s new in this rc?

  • Fix opam upgrade wanting to keep rebuilding the compiler (= as now it contains an x-env-path-rewrite field)
  • Provide defaults so opam init -y no longer asks questions = on Windows
  • Fix OpamConsole.menu when there are more than 9 options (c= an happen on Windows)
  • A couple more fixes and general improvements

:open_book: You can read our blog post for more information about these changes and more,= and for even more details you can take a look at the release note or the changelog.

Windows issues

Configuration of Windows is tricky, so please don=E2=80=99t be too disheart= ened if things don=E2=80=99t work instantly. If something doesn=E2=80=99t w= ork first time, please do = report it , even if you manage to find a way to workaround it. If opam = didn=E2=80=99t elegantly tell you what was wrong, then it=E2=80=99s a bug a= nd we=E2=80=99d love to hear about it, rather than ending up with a series = of workarounds flying around. It=E2=80=99s no problem at all for us to rece= ive a bug report which turns out to be user error - we=E2=80=99d far rather= that than not hear bugs which are opam=E2=80=99s error! :scream_cat:

How to upgrade

For Unix systems

bash -c "sh <(curl -fsSL https://raw.githubusercontent.com/ocaml/opam/ma=
ster/shell/install.sh) --version 2.2.0~rc1"

or from PowerShell for Windows systems

Invoke-Expression "& { $(Invoke-RestMethod https://raw.githubuserconten=
t.com/ocaml/opam/master/shell/install.ps1) }"

We=E2=80=99re planning for a final opam 2.2.0 release next week, so please = do report any issue you encounter on our bug-tracker .

Project wide occurrences

vds announced

I am very excited to announce the first release of Merlin and Ocaml-LSP wit= h support for project-wide occurrences =F0=9F=A5=B3. More precisely, it is = now possible to query for every usage of a= ny value (and type, modules, etc.) anywhere in a project built with Dune. T= his is a very handy tool for code navigation !

Requirements

  • OCaml 5.2
  • Latest Dune (>=3D 3.16.0)
  • Latest Merlin (>=3D 5.1-502)
  • Latest OCaml-LSP preview (1.18.0~5.2preview)

Usage

  • Build the new @ocaml-index alias.

> We recommend running the indexation in watch mode along with your usua= l targets: dune build @ocaml-index --watch so that the index i= s always up to date.

  • Use the Find/Peek all references feature of LSP-based plu= gins=20
    • or merlin-project-occurrences in emacs
    • or OccurrencesProjectWide in vim.
  • Enjoy jumping around =F0=9F=A6=98

3D"c282815986f=

More information and bug reports

Bug reports and feature requests should be submitted to the Merlin issue tracker. There are al= ready some known issues like the absence of declarations in the results and= the impossibility to query from a declaration. Progress on occurrences can= be tracked in a pi= nned meta-issue. If you are interested in contributing and learning mor= e about the feature do not hesitate to join the first pub= lic dev-meeting on Thursday !

Other OCaml News

From 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.

--=-=-=--