From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by c5ff346549e7 (Postfix) with ESMTPS id 8B83E2E03 for ; Tue, 12 Jul 2022 07:59:35 +0000 (UTC) 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=7V46mkVynwabEuvUnqwt+eg/c1BZuYN+N8H9cfOZ+as=; b=iqLI4FGvEtHUfqLszbFGjVC/lEtgkO4jWw4jejbeMrP9Bjv/yGS8QTZY Xj3Nn+kyXCJjEk+P6PTTwIfnVdj6/g5bhVJSZaGzz9AXyaDpn4papIWjE YlqaRiDfwP7MdWYSCBPQKRllYh208GPAOBabipKHEMVxVa1tWInK4t6Qu M=; Received-SPF: SoftFail (mail2-relais-roc.national.inria.fr: domain of caml-list-owner@inria.fr is inclined to not designate 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 ip4:192.134.164.0/24 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=SoftFail 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="5.92,265,1650924000"; d="scan'208,217";a="45240523" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 12 Jul 2022 09:59:34 +0200 Received: by sympa.inria.fr (Postfix, from userid 20132) id 4DFE9E0356; Tue, 12 Jul 2022 09:59:34 +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 6E54BE034D for ; Tue, 12 Jul 2022 09:59:30 +0200 (CEST) IronPort-SDR: nbDwD+qG/O9uY/rwhlvmv1t5n5VnpgzdZv/w6CA6E3ChzSM2PjBJbDEvvZBSTJSDBd5OkyzEo0 6tMMMcHUV2K8rLXUhh02JVB+A7Bv3wq6liZikjHy4rAQv46/yGFyziRFXzQKK0DvZwzs0Xinvp cN9VuOnjsklkMCqMABQwixrHrM9zfzkvnbTvrnyIegizMUY1J24MwI4C63Mxpi20Bq8b2dtCNc ZN6MSzpkz7jUBvTRuAkOqF843EA2T6OVg+dKQrPdTJHPdWcEog/0e1k2tatHCOuqbRaF1GW7w8 BaHtB4DbOpriRhhfhHCAjGkY X-IPAS-Result: =?us-ascii?q?A0AYAQCnKM1imCIeaIFaEwEBgkOBIYEDGQFnVhYYBwhFh?= =?us-ascii?q?E6JAIgNgRaIQoZ/jCEUgREDTxABAwENLAEOBAECBAEBhQSFDwIeBgEFMQcOA?= =?us-ascii?q?QIEAQEBAQMCAwEBAQEBAQMBAQUBAQECAQECBAQBEwEBAQEBAQEBCQsJBwYMB?= =?us-ascii?q?RAOBTxkZASBSwSBdAs0DYI1DAwDA4N3ARgJChMBAS8JGCMDFAEGAwIRARcBH?= =?us-ascii?q?hcBEhkBgmMBgxgDBQuSE5saeoExgQGCCAEBBoE/AQMCAQIJAgIDGCUBg3SBX?= =?us-ascii?q?AkkgRmGIGBMAYMRCYQTAicQgVVEgRWCKUoHboJACxcBAQEBAYEoARECAQYCA?= =?us-ascii?q?kODKYJlkleIOgc4A0cvEoEfbAEIBgYHCgUwBgIMGBQEAhMSTQYWAhIMCgYTD?= =?us-ascii?q?kEQFwwPAxIDDwEHAgkQCBIlCAMCAwgDAgMmAgMWCQ4DHQgKGBIQEgIEERoLC?= =?us-ascii?q?AMWPwkCBA4DQAgOAxEEAw8YCRIIEAQGAzIMJQsDBQ8NAQYDBgIFBQEDIAMUA?= =?us-ascii?q?wUkBwMhDyYNDQQiHQMDBSUDAgIbBwICAwIGFQYCAhhUOQgECAQrJA8FAgcvB?= =?us-ascii?q?QQvAh4EBQYRCAIWAgYEBQIEBBYCEAgCCCcXBxMzGQEFWRAJIRYGJxAFBhUDI?= =?us-ascii?q?UcmBUUPKDQ2PCwfGwqBFSwJIhYDBAQDAgYaAwMiAhApBjEDFQYpFRQaEwkqg?= =?us-ascii?q?QMJAgMZBiKYOoQjCQQiDj5NFAMBERkcDgEBIAI2KgMHBAEKBToOFSITAQoLA?= =?us-ascii?q?pIbNScCjW+KaIJhkV19NAeDUYE+BgyIMIEijQOIJIVFjD2WYyGWViCJLIETC?= =?us-ascii?q?YJKlFoEBAuFKYFOGgR3I3AzGjBDgmgJRQEDAg0BAgIDAQIBAgkBAQKOJINrg?= =?us-ascii?q?mSBdTuFTD80AgEBNwIGAQoBAQMJhWMBAQUTCwGGNYFtWgEB?= IronPort-PHdr: A9a23:9hajHhGezArMMgPmyLgwjp1GfzxDhN3EVzX9CrIZgr5DOp6u447ld BSGo6k31xmQAtmQsqgbw8Pt8InYEVQa5piAtH1QOLdtbDQizfssogo7HcSeAlf6JvO5JwYzH cBFSUM3tyrjaRsdF8nxfUDdrWOv5jAOBBr/KRB1JuPoEYLOksi7ze+/94PdbglSmTawY7x/I BqroQnPtMQdnJdvJLs2xhbVuHVDZv5YxXlvJVKdnhb84tm/8Zt++ClOuPwv6tBNX7zic6s3U bJXAjImM3so5MLwrhnMURGP5noHXWoIlBdDHhXI4wv7Xpf1tSv6q/Z91SyHNsD4Ubw4RTKv5 LpsRxH1lScHLCY5/3/LhcxsgqxbpxehqAZ+w47SfYqZMPVzc6fYcd4cRWZPXcBRVzJAAoOnb osAFO4BMvhFpIjzoFsOtwaxBRKxD+/rxDJEmnr60Ksn2OojDA7GxhQtEdIQvnrJotv7N6gdX vyuwabS0TnOdelb1Svh5IXKdB0qvPGCXah3ccrU0UQiCwfFgU+WqYf4Ij2ayuQNs22a7+p8S eKklmkqpBt1oje1wMcgkJLJiZ4VylDB9CV53Jo1KMagSE58Zd6lEIdQuD+GOIt2RMMiQnhou DskxbEcvp67ZicKxY0hyhXCZPOJb5KG7Qj/VOaNPzh4nnRldaqiixqu8Uatye3yWMaq3VpXo CRJj8fBu20R2xLd9sSKROdx8lq/1DqR2A3d5f1JLVw0mKbFN5Mt3r4+mocTvEndGCL9hUv4j KiTdko+++io7fzqYq34qZ+ANo90lh/xMrwpmsy6BOQ3LBICX26F9uSgzLHj+lH2T69Pjv0yi KXZt4raJcsDqq62Ag9VzoYj6wukADu8zNsYmnwHIEpKeBKGk4jpO0zOL+viAfe+hFSgiDBry OzcMb3kBpXBNGLPkLD7fbZy80Jc1BA8zcpe551JFL4BO+j/VVP2tNzdFhM5MhG7wubjCNV5z I8eXniPAqCfPajPslGI/voiL/SSaIIRojrxNuQp6vH0gXI3hVMRZ6ek0JQPZHylEPlqPl+Vb WTsj9oOC2sGoxYyQPb3hFCATTJeYWu5Ubgm6TEhEo2mCJ/ORoCzj7yF2ye2BphWZ29bBlyWC XfocIGEWvcQaC2MPsBhkjoEVbm4S488yx6irgj6y6BoLubM+y0Ys4zs1MRt6uHOix0/8SZ4A 9mB32yCVW15kH8ESyU40a1wuUB9z02M0al8g/xWD9xT4PZJXx8nO5DA0uJ2F8j/WhjCc9ePV FarWtSpDy0pQ9IpxN8OZ0Z8G8m8gR/f3yqqBb4Vl6WWBJMq6K7c2GLxJ8llxnnc0KkulV8mT tFUNWK6hq5/8gnTB5LVk0iCjKmqcrkc3CjR+2id1mqCpkRYXQF/UKnfWnAffETWocz/5kzZV 7CuE6goMhNdyc6eLatHcsDlgU1cRPj/INTef36xm2CoCBmU3LyMaY7qd3wZ3CXcE0gEjxse/ W2GNAg7HieuuXjSDD1oFVL1YkPj6/NyqH2hThx88wbfJUl+0fD9rhoKg9SYVPVV2L8Y7mNp4 T5rGhz1l4bdFNyoowt6YL4aYN8s5FMB0njW4Ug1NZWlK+Vmh0UCWwVxpULnkRttWatals1/h XcjykJJIqKd0U9dP2eR2Zn2fKbcKmzz4AyHc6nSy03T29aQ+74S5bI/sVq171LhLVYr73gyi 4od6HCb/JifU1t6ufPZV08280I/vLTGemwn4IiS03RwMK6yuzuE2tQzBeJjxAzzN8xHPva8H RTpW9YfG9DoMPYjzlGtZxRCJ+tS8a8oI+u+cP+XxKOgPOBhhS+ry2Nd79M1yVqCohJ1UfWAx JMZ27ed1wqDWS37iQKaiPuvzJoUYy1HLlDq0S/gFZJcba10fJ8WBCGpOcLiz9F3gdj2UH5d9 UK/L1kBxcmidAHUagDtmwpK2hdfumSpzBOx1Cc8iDQ1tuyf0SjJlvzlbwYCM3VXSXNKiEe1Z 5Czi8EGUUOoaQkwiRbj4lz1r0RCjJx2NHKbAUJBfiysanpnTrP1rL2JJchG9JIvtyxTFuW6e 1GTDLDn8VMW1CbqHm0Wwz5eFXnis5HwmVphg2KYLWpvhGLefdBsyBzf4t3FWPMX2SAJDCV1k jjYAFGgMsLhpI/F0c6b7qblDyT6CtVaakyJhcuYuTG+5HF2DBH3hP21ltD9UEA73SL9y9h2R HDQth+vKoLv1qm8LadmZhwxXg66spImXNom1NBs1/RykTAAi56Y/GQKizL2ONRfg+flaWYVA CQMyJjT6RTk30tqKjSIwZj4XzOT2JgEBZHyb2UI1yY6980PBr2T6ekOphFO+g+i/QTNNMhHy y8azeoy5XUaheAQpQdryT+SV7kWFE8eJifskhWU8/i0q7hRb2u0N73sxAx5h9/rX9Tg6klMH W30fJsvB3o658F2NhTX23326534UMHXacMPuxaUlRbZkuUTL4g+3Klv52IvKSf2unsrzPQ+h Bpl0MShvYSJHG5q+bqwHh9SMjCmL9NW4DzmirxS29qHx436VI55FG9NBNG7KJDgWCJXr/nsM ByCVSExumvOU6HHE1XZsAB+tXuLFp6xMHTfZ3BLyMU7AgGaIF1DjQsUWjQjg5N/ERqloa6pO ARwtDUBvBjgrR9d1u9jNx/+S3rS4gCyZX93QcqaPEEQ9gZG9lvYOsyY7/tuEmdf5JLEzkTFa W2DOVYSVTlQCBDdCwixZ+v/udXNobrHXbSyfaSSPu3G7OVaU73gKYuH6oJ95H7MM8yOOiMnF Pgnwg9ZWns/Hc3FmjIJQihRliTXbsfdqg3usiFwq8m+9rzsVmeNrcO0MYAKZM8//QzjsZ3WL +mUlTp0IjZe14oRyDnP0rdK1VobjWd1fDmoEKgcnSTKUaTbl7QRCkILLSRpO64qp+ow0xJMN sjSlt7unuci37hsUwsDDgSnwZ3hbNdCO2ynMVLbGEuHfK+LIzHG2YCSA+v0SLFdivlVqwzlv D+aF0H5OTHQ3zLtVh2pLaRNlHTCZk0Y4dnhNE01TzO/H7eEIlWhPdR6jCM72+gxj3LObysHN CRkNllKpfuW5D9ZhfN2HypA6GBkJK+KgXX8jaGQJ5AIvP9sGikxmfhd5SFw8IFutHReFPppz Rvo+8Zpp0C6n+KPzDt+TRcIrSxE0YuPtEMkIq7Z85hcRV7O+w8L5miLTRFWt51iENKl6MUyg pDf0bn+LjtP6YeexvEnX53OeMSbZUobZALuHC/IAQAFSz+yKGyZgFZSxfiW/3vTtZM6r5nwh LIETaJdX1EuUPZGGgJiBtNIc/IVFns01LWcisAP/3+3qhLcEd5bsp7wXfWXGfzzKTydgOoMd 14SzLj/N4hWKpzj1hkocUF0xsKSURm1P5gFsmh7YwQzukkI7HVuUjh5wFrrMEX1p2cJHLqxk AQxj0M9aLYo5G6q+1AzN0bHrys2kVAslJPimz/0Ena5b67iWJEMTTLzs1ktP5j7RQdscAD0m lZrfHTNFbdB1P14cmR6lALXuZ1OAONRC6peb3pyjbnUZu12gw4E8nz1mRZLvbmcW8o+mAZ4I 8H38X4ShF48NJZwLKjUbsKl13Boj7mV9m+t3+E1mkoFIloVtXmVc2gOsVAJMb8vI2yp+PZt4 EqMgWkLdG8JXvss6vVkkyF1c/yH1D7l2qVfJ1qZMvzGabuev3ncmMWIRFIpy05OkFNKtbR7y sYsdUOIWltnleHAUU1RaYyZcUcOM4Jb7x2xNW6WvP/IwI5pMon1De3uQeKU9e4Vjk+iAAc1D tEM48AGTdGn1EDVK9uiLaZQkE98ol2zeBPeVLISJEHu8n9Pucy0wZ5p0JMIIzgcBT84KiCr/ vPNoQRshvOfXdAwa3NcX40eN3twVtfp/kwR93lGEjSz1foUjQaY6Dqp7B/qN2GpdYpleKKkX 0Z0D9Wn5Tg08663kEPatJLEKDTzMd1k/MTE6eYbu4qvAfRJS7JwqAHZx5keQGalGT2qc5b9N 93rZo8gYMahQG69SUC6gikpQt3ZOcb0aLCPhRD0SI1UtoiCwT1lMtWyXGJ7eV84t6QI46RyY hcGapwwbEvztggwAKe4JR+RztSkR2v+YSsTVfRUyv+2IqBG1yd5JPHv02MuF9tpqov/uV5IX pwBiQvSgOqud5ULGzamAWRTIk3G7W8wk2wrXg7d6u043RXDvEJaNmybMutzZz4d1znZLUuVJ WRqB2E4QV6FkIeF5RSjjel6F8p1msYNl/VCtGnis5TfZjO1RaHtro/a4XNIUA== IronPort-Data: A9a23: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 IronPort-HdrOrdr: A9a23:dtKghql5y2Wk32AdJ8AjHy1xQ8HpDfP9imdD5ihNYBxZY6Wkvu i0lvUayhP4zB4NMUtQw+xoS5PwNE80lKQFkLX5Uo3SIDUO0lHFEGhd1/qt/9SNIVyHygcZ79 YcT0CRYOeAVmSTo67BkU2F+vwbsZy6GDjCv5aH859VJTsaMp2JBW9Ce0Gm+zRNNU977PkCZe ShD6h81kWdkC8sH4XLRkXtNtKrz7ag+/yHEH12ZW9DmW3+60LQ1Fe5KWnj4v55aUID/V4Myx mHr+WT3NTojxjP8G6v64al1eUhpDKO8Ko5OCSz4PJlZgkE8jzYFPUTZ1Tuhl0IidDq01osmM TBuFMYIsp+r0nJdmWeqQf212DboX0Twk6n8lOeiWbuuojBWTw3T/BZjYZieB3D5yMbzZlB+Z MO5G6fv4daFlf4gSrwo+LQXxVRi0KorRMZ4KcuZ3c0a/pQVFaPl+1vm399IdMyDQb944AjHK 1FCsXZ7PFaGGnqG0zxjy1d0firVXQ3ElO4TlMZusqTugIm60xR/g8ewogWhX0A9I0wIqM0pd j5Dg== X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="5.92,265,1650924000"; d="scan'208,217";a="45240500" X-MGA-submission: =?us-ascii?q?MDEoE0KweqqaG2q6Gpevq4sik8cAwftqkhOcx1?= =?us-ascii?q?zXL3I8qKH48CiEnjwFyF1Ofdl3fYTzXzf2BoNzCBMnHV6iyHIccMESGm?= =?us-ascii?q?wbbdPw8n9427jVpkLE7HqjxhER/auyAlnbwtiSYlXju6/1CONKuExK3B?= =?us-ascii?q?71mTWGI81pcSkpj5drqos9EQ=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; 12 Jul 2022 09:59:29 +0200 Received: from set (set.irisa.fr [131.254.10.170]) (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 D94375647D6; Tue, 12 Jul 2022 09:59:28 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=polytechnique.org; s=svoboda; t=1657612768; bh=Hpo8eCtgTd2jFJpGYdhTRQID9DkL0bLWlLR721wHY3Y=; h=From:To:Subject:Date:Message-ID; b=o+YZ9EWwwB3kkdhxj6rF0XmDCXDxowbGskAgkZi6t+DoVbkyjqEnFP1e7Ohpfn/us jIZ8NeB/dxQ34W09qQ8r3xDqzYPam+w6Qos+dip167Mgb/gS1u8GUUBO1TrqN6z2y5 iD4suvTuKuCqHArgDyUGSMfkia4CStv2nFqgGn8U= From: Alan Schmitt To: "lwn" , "cwn" , caml-list@inria.fr Date: Tue, 12 Jul 2022 09:59:28 +0200 Message-ID: <87h73mn4m7.fsf@m4x.org> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Jul 12 09:59:29 2022 +0200 (CEST)) X-Spam-Flag: No, tests=bogofilter, spamicity=0.448229, queueID=262EE5647DA 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: 18816 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 July 05 to 12, 2022. 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 Dune how to define custom build task Timedesc 0.8.0 - modern date time handling containers 3.9 OBazl 2.0.0-alpha-1 (Building OCaml SW with Bazel) QCheck 0.19 Opam-cross-windows now supports OCaml 4.14.0! Other OCaml News Old CWN Dune how to define custom build task =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=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: cnmade explained =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 dune has very powerful extensions, but the documentation doesn't tell you directly. Today I'll share a specific example of how we can make dune do many things with a dune configuration. For example =E2=80=A2 Publish compiled documents to our documentation server =E2=80=A2 Sending email notifications to email groups =E2=80=A2 Sending SMS notifications to administrators =E2=80=A2 Build a document and open a browser to preview the document page Let's start with an example, we create a dune file in the root directory of our project, which you may not have originally, you have to create a new one, we enter the following =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80 =E2=94=82 ; now we tell you how to define a custom rule =E2=94=82 ; rule start with (rule ) =E2=94=82 (rule =E2=94=82 ; (alias is point the command name , so you can run this rule = by call dune build @docopen =E2=94=82 (alias docopen) =E2=94=82 ; following line is very important, it tell dune do not cache = this build command, so it will running every call =E2=94=82 without any cache =E2=94=82 (deps (universe)) =E2=94=82 ; action (system to told system run command by `sh` in your = Linux/MacOS, windows user may running cmd.exe =E2=94=82 ; cd ../.. is change the base directory of the running command= ,or the default directory will be _build/default =E2=94=82 (action (system "cd ../.. && pwd && dune build @doc && open _= build/default/_doc/_html/index.html" )) =E2=94=82 ) =E2=94=82 ; end of one piece of rule =E2=94=82=20 =E2=94=82 ; and we define more and more rule as we want =E2=94=82 (rule =E2=94=82 (alias whoami) =E2=94=82 (deps (universe)) =E2=94=82 (action (system "uname -a;whoami")) =E2=94=82 ) =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80 In this example, we define two rules, the rules are the tasks that dune can recognize, in dune, it is called rules Because it is a custom build command, we use alias to take a unique and non-repeating alias. The first build command is to build the document and open the browser preview. Our alias is docopen Then deps we add universe to tell dune that you don't want to cache and give me a new build every time. If you don't add this line, dune will only give you one build, and then because of the cache, you won't be able to execute it later. action following by system here, action is the command to start, system means to use the system shell (windows is cmd, linux macos is sh) to give you the execution of the code you specify. You can see the first we are first change the directory to the project root directory [because the default directory is _build/default], and then we perform the build document generation, and then open open the generated html page. The first build command is this, if you want to perform the first build task, you can type `dune build @docopen' Then our second build command, relatively simple, with reference to the first, we can add a lot of build commands we want to add inside this dune configuration file. We just need to specify different alias aliases for them, no duplication. The official documentation also specifies some other available commands, I won't go into them one by one. Since I prefer to use shell scripts, I really only need the system to execute my shell scripts for me. Timedesc 0.8.0 - modern date time handling =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=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: Darren 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 I'm pleased to announce the release of Timedesc 0.8.0. Timedesc is a very comprehensive date time handling library with good support of time zone. [Homepage] [Homepage] Features =E2=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 Timestamp and date time handling with platform independent time= zone support =E2=80=A2 Subset of the IANA time zone database is built into this libr= ary =E2=80=A2 Supports Gregorian calendar date, ISO week date, and ISO ordinal date =E2=80=A2 Supports nanosecond precision =E2=80=A2 ISO8601 parsing and RFC3339 printing Main changes since 0.6.0 =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=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 Significantly reduced size of time zone database by using a cus= tom compression scheme =E2=80=A2 Many thanks to @glennsl for the proposed scheme at issue [#46] =E2=80=A2 This yields reduction of roughly 82% for same date period. The exact range of years included has been tuned slightly as well and I've lost track of the exact size after compilation. =E2=80=A2 Significantly reduced the number of dependencies, and moved JS,= JSON code into separate packages =E2=80=A2 Removed dependencies: `fmt', `containers', `oseq' =E2=80=A2 Introduced `sexplib' dependency for sexp handling consequen= tly as previously containers `CCSexp' was used =E2=80=A2 Moved JSON code into `timedesc-json' package along with Yojson dependency =E2=80=A2 Moved `tzlocal' and `tzdb' stuff into their own separate pack= ages (`timedesc-tzlocal' and `timedesc-tzdb' respectively) =E2=80=A2 Moved JS tzlocal backend into `timedesc-tzlocal-js' (along wi= th JS specific dependencies) [#46] Quality of life changes =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=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 Updated string conversion functions based on pretty printers wh= ich raise `Date_time_cannot_deduce_offset_from_utc' to raise the exception instead of returning `None' =E2=80=A2 This simplifies the handling as return type is now simply just `string' =E2=80=A2 And for serious stuff users are expected to use only unambigu= ous date times anyway, which would not trigger this exception =E2=80=A2 Added ISO8601 printing facilities to `Timestamp' module for consistency =E2=80=A2 They are just aliases to the RFC3339 printers containers 3.9 =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=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 I'm happy to announce that containers 3.9 has just been released. Containers is a lightweight, modular extension of the stdlib that tries to remains compatible with it. Containers is starting to sprout some serialization primitives: it now has codecs for Bencode and CBOR. This release also contains a revamp of the testlib system (bye qtest) and the use of ocamlformat, for potential contributors who enjoy that. Containers should also be compatible with OCaml 5.0. OBazl 2.0.0-alpha-1 (Building OCaml SW with Bazel) =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=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: Gregg Reynolds 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've tagged alpha versions of OBazl [rules_ocaml] and [tools_opam]. The best way to start exploring is via [demos_obazl], which contains over 100 mostly simple demo/test programs, many of which are commented. Three simple commands get you configured and then `bazel test test' runs all the tests. Tested on MacOS 12.4 and Ubuntu 20. Documentation is still in progress but there is useful info at [The OBazl Book]. Lot's of things to say about this version but I'll stick to one point of interest. The four basic OCaml compilers are modeled by Bazel's platforms and toolchains mechanisms. Two of the compilers are actually cross-compilers (e.g. `ocamlc.opt' runs on the system arch but targets the OCaml vm), so to pick a compiler you tell OBazl which buildhost and targethost platforms you want. I've predefined configurations in [.bazelrc]; for example: =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80 =E2=94=82 build:bcnc --host_platform=3D@opam//tc/host/build:bc =E2=94=82 build:bcnc --platforms=3D@opam//tc/host/target:nc =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80 which means to select the `ocamlopt.byte' (cross-)compiler, pass `--config=3Dbcnc'. Kinda cool IMHO. Maybe overkill for the basic compilers, but the mechanism is essential to support remote builds, custom compiler implementations and genuine cross-compilers. Feedback welcome. [rules_ocaml] [tools_opam] [demos_obazl] [The OBazl Book] [.bazelrc] QCheck 0.19 =E2=95=90=E2=95=90=E2=95=90=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: Jan Midtgaard 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 I'm happy to share the release of QCheck 0.19 - a library for property-based testing in OCaml in the style of Haskell's QuickCheck. =E2=80=A2 GitHub repo: =E2=80=A2 Documentation: The 0.19 release brings a range of new features and improvements detailed below and combines the effort of several individual contributors. It is now available on opam. Release notes: =E2=80=A2 new features and feature extensions =E2=80=A2 add optional `debug_shrink' parameters in alcotest interface = and expose default `debug_shrinking_choices' in test runners =E2=80=A2 add missing `?handler' parameter to `Test.check_cell_exn' =E2=80=A2 add an option `retries' parameter to `Test.make' et al. for checking a property repeatedly while shrinking. This can be useful when testing non-deterministic code. =E2=80=A2 add `tup2' to `tup9' for generators =E2=80=A2 add `Test.make_neg' for negative property-based tests, that a= re expected not to satisfy the tested property. =E2=80=A2 add environment variable `QCHECK_LONG_FACTOR' similar to `QCHECK_COUNT' =E2=80=A2 rename `Gen.opt' to `Gen.option' but keep the old binding for compatibility. =E2=80=A2 shrinker changes =E2=80=A2 recursive `list' shrinker with better complexity =E2=80=A2 `string' shrinker reuses improved `list' shrinker and adds `char' shrinking =E2=80=A2 function shrinker now shrinks default entry first and benef= its from `list' shrinker improvements =E2=80=A2 replacing the linear-time `char' shrinker with a faster one reusing the bisecting `int' shrinker algorithm =E2=80=A2 add `Shrink.char_numeral' and `Shrink.char_printable' =E2=80=A2 add shrinking for `char arbitrary~s ~char', `printable_char= ', and `numeral_char' =E2=80=A2 bug fixes =E2=80=A2 fix function generation affecting reproducability =E2=80=A2 fix distribution of `QCheck2.printable' which would omit cert= ain characters =E2=80=A2 use `Float.equal' for comparing `float~s in the ~Observable' module underlying function generators. =E2=80=A2 documentation updates: =E2=80=A2 clarify upper bound inclusion in `Gen.int_bound' and `Gen.int_range' =E2=80=A2 clarify `printable_char' and `Gen.printable' distributions =E2=80=A2 add missing `string_gen_of_size' and `small_printable_string' documentation =E2=80=A2 document `QCheck_alcotest.to_alcotest' =E2=80=A2 fix documented size distribution for `arbitrary' generators `string_gen', `string', `printable_string', `numeral_string', `list', and `array' =E2=80=A2 fix exception documentation for `check_result', `check_cell_e= xn', and `check_exn' =E2=80=A2 fix documentation for the distribution of `Gen.printable' and `printable_char' =E2=80=A2 fix documentation for the shrinking behaviour of `QCheck2.printable' =E2=80=A2 internal and test suite changes =E2=80=A2 add additional expect and unit tests and refactor expect test suite =E2=80=A2 add a shrinker performance benchmark =E2=80=A2 remove `--no-buffer' option on `dune runtest' to avoid garbli= ng the test output =E2=80=A2 make test suite run on 32-bit architectures Opam-cross-windows now supports OCaml 4.14.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=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=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: Romain Beauxis 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 Bit of a late announcement but the `opam-cross-windows' project now supports the OCaml compiler version `4.14.0': The `opam-cross-windows' project is part of an initiative started by @whitequark to provide cross-compilation support to existing `opam' packages. This allows users to compile binaries for windows but also android and ios on a linux or macos host. Support for packages is a on best-effort basis and is always looking for more contributors. Adding a package can be a little tricky at times but, if your package uses `dune', the cross-compilation support there is pretty wonderful and makes it pretty easy to add cross-compiled packages. 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 [The Magic of Merlin] =E2=80=A2 [Thales Cyber@Station F Selection] =E2=80=A2 [Team Tarides Visits a 17th Century Chateau] =E2=80=A2 [Functional Conf 2022] =E2=80=A2 [OCaml 5 Alpha Release] =E2=80=A2 [Adding Merkle Proofs to Tezos] =E2=80=A2 [OCaml Matrix: A Virtual World] =E2=80=A2 [Tarides Sponsors 12th Annual Journ=C3=A9es Franciliennes] =E2=80=A2 [OCaml.org Reboot: User-Centric Design & Content] =E2=80=A2 [Lightning Fast with Irmin: Tezos Storage is 6x faster with 100= 0 TPS surpassed] =E2=80=A2 [Tarides Partners with 50inTech!] =E2=80=A2 [What's New in MirageOS 4!] [the ocaml.org blog] [The Magic of Merlin] [Thales Cyber@Station F Selection] [Team Tarides Visits a 17th Century Chateau] [Functional Conf 2022] [OCaml 5 Alpha Release] [Adding Merkle Proofs to Tezos] [OCaml Matrix: A Virtual World] [Tarides Sponsors 12th Annual Journ=C3=A9es Franciliennes] [OCaml.org Reboot: User-Centric Design & Content] [Lightning Fast with Irmin: Tezos Storage is 6x faster with 1000 TPS surpassed] [Tarides Partners with 50inTech!] [What's New in MirageOS 4!] 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 [online]. [Alan Schmitt] [send me a message] [the archive] [RSS feed of the archives] [online] [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 July 05 to 12, 2022.

Dune how to define custom build task

cnmade explained

dune has very powerful extensions, but the documentation doesn't tell you d= irectly. Today I'll share a specific example of how we can make dune do many things with a dune configuration.

For example

  • Publish compiled documents to our documentation server
  • Sending email notifications to email groups
  • Sending SMS notifications to administrators
  • Build a document and open a browser to preview the document page

Let's start with an example, we create a dune file in the root directory of= our project, which you may not have originally, you have to create a new one, we enter the following

; now we tell you how to define a custom rule
; rule start with (rule )
(rule
; (alias is point  the command name , so you can run this rule by call  dun=
e build @docopen
 (alias docopen)
 ; following line is very important, it tell dune do not cache this build c=
ommand, so it will running every call
without any cache
 (deps (universe))
 ; action  (system  to told system run command by `sh` in your Linux/MacOS,=
 windows user may running cmd.exe
 ; cd ../.. is change the base directory of the running command ,or the def=
ault directory will be _build/default
 (action (system "cd ../.. && pwd &&  dune build @doc &=
& open _build/default/_doc/_html/index.html" ))
)
; end of one piece of rule

; and we define more and more rule as we want
(rule
  (alias whoami)
  (deps (universe))
  (action (system "uname -a;whoami"))
)

In this example, we define two rules, the rules are the tasks that dune can= recognize, in dune, it is called rules

Because it is a custom build command, we use alias to take a unique and non= -repeating alias.

The first build command is to build the document and open the browser previ= ew.

Our alias is docopen

Then deps we add universe to tell dune that you don't want to cache and giv= e me a new build every time. If you don't add this line, dune will only give you one build, and then because of the c= ache, you won't be able to execute it later.

action following by system here, action is the command to start, system m= eans to use the system shell (windows is cmd, linux macos is sh) to give you the execution of the code you specify.

You can see the first we are first change the directory to the project root= directory [because the default directory is _build/default], and then we perform the build document generation, and = then open open the generated html page.

The first build command is this, if you want to perform the first build tas= k, you can type

dune build @docopen

Then our second build command, relatively simple, with reference to the fir= st, we can add a lot of build commands we want to add inside this dune configuration file.

We just need to specify different alias aliases for them, no duplication.

The official documentation also specifies some other available commands, = I won't go into them one by one. Since I prefer to use shell scripts, I really only need the system to execute my sh= ell scripts for me.

Timedesc 0.8.0 - modern date time handling

Darren announced

I'm pleased to announce the release of Timedesc 0.8.0.

Timedesc is a very comprehensive date time handling library with good suppo= rt of time zone.

Homepage

Features

  • Timestamp and date time handling with platform independent time zone su= pport
    • Subset of the IANA time zone database is built into this library
  • Supports Gregorian calendar date, ISO week date, and ISO ordinal date
  • Supports nanosecond precision
  • ISO8601 parsing and RFC3339 printing

Main changes since 0.6.0

  • Significantly reduced size of time zone database by using a custom comp= ression scheme
    • Many thanks to @glennsl for the proposed scheme at issue #46
    • This yields reduction of roughly 82% for same date period. The exact ra= nge of years included has been tuned slightly as well and I've lost track o= f the exact size after compilation.
  • Significantly reduced the number of dependencies, and moved JS, JSON co= de into separate packages
    • Removed dependencies: fmt, containers, = oseq
      • Introduced sexplib dependency for sexp handling consequent= ly as previously containers CCSexp was used
    • Moved JSON code into timedesc-json package along with Yojs= on dependency
    • Moved tzlocal and tzdb stuff into their own s= eparate packages (timedesc-tzlocal and timedesc-tzdb respectively)
    • Moved JS tzlocal backend into timedesc-tzlocal-js (along w= ith JS specific dependencies)

Quality of life changes

  • Updated string conversion functions based on pretty printers which rais= e Date_time_cannot_deduce_offset_from_utc to raise the excepti= on instead of returning None
    • This simplifies the handling as return type is now simply just st= ring
    • And for serious stuff users are expected to use only unambiguous date t= imes anyway, which would not trigger this exception
  • Added ISO8601 printing facilities to Timestamp module for = consistency
    • They are just aliases to the RFC3339 printers

containers 3.9

Simon Cruanes announced

I'm happy to announce that containers 3.9 has just been released. Container= s is a lightweight, modular extension of the stdlib that tries to remains compatible with it.

Containers is starting to sprout some serialization primitives: it now has = codecs for Bencode and CBOR. This release also contains a revamp of the testlib system (bye qtest) and the use of oca= mlformat, for potential contributors who enjoy that. Containers should also be compatible with OCaml 5.0.

OBazl 2.0.0-alpha-1 (Building OCaml SW with Bazel)

Gregg Reynolds announced

I've tagged alpha versions of OBazl rules_ocaml and tools_opam. The best w= ay to start exploring is via demos_obazl, which contains over 100 mostly simple demo/test programs, many of which are commented. Three simple comma= nds get you configured and then bazel test test runs all the tests.

Tested on MacOS 12.4 and Ubuntu 20.

Documentation is still in progress but there is useful info at The OBazl Book.

Lot's of things to say about this version but I'll stick to one point of in= terest. The four basic OCaml compilers are modeled by Bazel's platforms and toolchains mechanisms. Two of the com= pilers are actually cross-compilers (e.g. ocamlc.opt runs on the system arch but targets the OCaml vm), = so to pick a compiler you tell OBazl which buildhost and targethost platforms you want. I've predefined configurations in .bazelrc; for example:

build:bcnc --host_platform=3D@opam//tc/host/build:bc
build:bcnc --platforms=3D@opam//tc/host/target:nc

which means to select the ocamlopt.byte (cross-)compiler, pass= --config=3Dbcnc.

Kinda cool IMHO. Maybe overkill for the basic compilers, but the mechanism = is essential to support remote builds, custom compiler implementations and genuine cross-compilers.

Feedback welcome.

QCheck 0.19

Jan Midtgaard announced

I'm happy to share the release of QCheck 0.19 - a library for property-base= d testing in OCaml in the style of Haskell's QuickCheck.

The 0.19 release brings a range of new features and improvements detailed b= elow and combines the effort of several individual contributors.

It is now available on opam.

Release notes:

  • new features and feature extensions
    • add optional debug_shrink parameters in alcotest interface= and expose default debug_shrinking_choices in test runners
    • add missing ?handler parameter to Test.check_cell_ex= n
    • add an option retries parameter to Test.make = et al. for checking a property repeatedly while shrinking. This can be useful when testing non-deterministic code.
    • add tup2 to tup9 for generators
    • add Test.make_neg for negative property-based tests, that = are expected not to satisfy the tested property.
    • add environment variable QCHECK_LONG_FACTOR similar to QCHECK_COUNT
    • rename Gen.opt to Gen.option but keep the old= binding for compatibility.
    • shrinker changes
      • recursive list shrinker with better complexity
      • string shrinker reuses improved list shrinker= and adds char shrinking
      • function shrinker now shrinks default entry first and benefits from list shrinker improvements
      • replacing the linear-time char shrinker with a faster one = reusing the bisecting int shrinker algorithm
      • add Shrink.char_numeral and Shrink.char_printable
      • add shrinking for char arbitrary~s ~char, printable_= char, and numeral_char
  • bug fixes
    • fix function generation affecting reproducability
    • fix distribution of QCheck2.printable which would omit cer= tain characters
    • use Float.equal for comparing float~s in the ~Observ= able module underlying function generators.
  • documentation updates:
    • clarify upper bound inclusion in Gen.int_bound and G= en.int_range
    • clarify printable_char and Gen.printable dist= ributions
    • add missing string_gen_of_size and small_printable_s= tring documentation
    • document QCheck_alcotest.to_alcotest
    • fix documented size distribution for arbitrary generators = string_gen, string, printable_string= , numeral_string, list, and array
    • fix exception documentation for check_result, check_= cell_exn, and check_exn
    • fix documentation for the distribution of Gen.printable an= d printable_char
    • fix documentation for the shrinking behaviour of QCheck2.printabl= e
  • internal and test suite changes
    • add additional expect and unit tests and refactor expect test suite
    • add a shrinker performance benchmark
    • remove --no-buffer option on dune runtest to = avoid garbling the test output
    • make test suite run on 32-bit architectures

Opam-cross-windows now supports OCaml 4.14.0!

Romain Beauxis announced

Bit of a late announcement but the opam-cross-windows project = now supports the OCaml compiler version 4.14.0: https://githu= b.com/ocaml-cross/opam-cross-windows

The opam-cross-windows project is part of an initiative starte= d by @whitequark to provide cross-compilation support to existing opam packages. This allows users to compile binari= es for windows but also android and ios on a linux or macos host.

Support for packages is a on best-effort basis and is always looking for mo= re contributors. Adding a package can be a little tricky at times but, if your package uses dune, the cro= ss-compilation support there is pretty wonderful and makes it pretty easy to add cross-compiled packages.

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

--=-=-=--