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=PIhTtvnX; 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=Ng1u4EhJ; 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 B4CF4B80123 for ; Tue, 23 Jul 2024 14:31:06 +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=J7mCVvJGY+bHOZBJM4eLX4Xt68aVQ8Qdj8umphRGFXQ=; b=PIhTtvnX5bODY3Y8UkAkBoviKP6dPJuhyoYEKlbk2WMlMhhayeBl7gtf r9zWDFB1AXLf8dmHV2SsshgqoMgGe5q4cx7eYH1KZIJzekB4HOPn9CBqL /CY1S+z35zh9nuHDOT3mvkylb+YcClqIqXgmopgmqZtp4IzTlaD7wgL/T U=; 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 (signature did not verify [final]) header.i=@polytechnique.org X-IronPort-AV: E=Sophos;i="6.09,230,1716242400"; d="scan'208,217";a="176668786" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 23 Jul 2024 15:31:06 +0200 Received: by sympa.inria.fr (Postfix, from userid 20132) id 7D12FE0D1B; Tue, 23 Jul 2024 15:31:05 +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 4652BE0131 for ; Tue, 23 Jul 2024 15:31:01 +0200 (CEST) IronPort-SDR: 669fb092_MhCXOuDLqF6dt7H+JaC862IF+T4MIvYHK/Re39lRtS20Sn4 A/xyaa4m8s4jT6qSTeyKbld58H+nvZ3gxAI9ReQ== X-IPAS-Result: =?us-ascii?q?A0FIAQAesJ9mlyIeaIFahBlbKBkBYlozBwhIhFaDT44dg?= =?us-ascii?q?RaQMYp0gWqBEQMYFiMUAQMBDS4BBQ0BAgQBAQMBAgGEOUYCFokgAh8GAQQ0E?= =?us-ascii?q?wECBAEBAQEDAgMBAQEBAQEIAQEFAQEBAgEBAgQGAQIQAQEBAQEBAQE3BUmFd?= =?us-ascii?q?Q2CSi4jPzBjAgYDBgEBAQEBAQEBAScBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA?= =?us-ascii?q?QEBAQEBAQEBAQEBAQEBAQEBAQEBAgwBBxIaTxwJChMBATgYIwMJCwEGAwIED?= =?us-ascii?q?QE1FwESGgGCDVgBgmQDBQwGkgmbPHqBMoEBggwBAQaBCD4DCwICAwEOCSUB2?= =?us-ascii?q?gSBYwmBMBiIIRoBJ0hpAoQvhEICJw+BVUSBFTWCPQdvgX5BCxcBAQEBGEQ7J?= =?us-ascii?q?QEBTQkJgxyCaYUYgnIBhUZXChmCWCJBgRM6LgFagR1FX4IiD4EoBXECBgoMc?= =?us-ascii?q?ChWDEsPV3I/EkIOE4JzfSQCC4EbEIMMR4hfgUlLMyETAVUTFws+HQIWAxsUB?= =?us-ascii?q?DAPCQsmKQY5AhIMBgYGWTIJBCMDCAQDQgMgcREDBBoECwd3gTyBaQQTRAOBN?= =?us-ascii?q?4cOgk+DMYIYhBuFMIFrDGGHdoFxgT6BYEqCfkuFUB1AAwttPTUUG6ohBDgCg?= =?us-ascii?q?w8mDjgHTBUCJgUBEwgOAiACLggODh0HAxkdCQUFBARFAQkCCx4RA4x+hW8sn?= =?us-ascii?q?S2UVTQHhBeBXQYMiH+BJI4lh0uEBYFWiyqGfJI7IphKIIlTgSUJX4EsTJUWL?= =?us-ascii?q?AcMhUCBfiM8bx4MBzMaMEOCMwEBATEJCjwcD44tFoEMAQSCR4E+gSaBdTuCb?= =?us-ascii?q?cM9MkE1AgEBBzACBwEKAQEDCYViAQGDPmlhAQE?= IronPort-PHdr: A9a23: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 z1+AnxLpcf2f4mHwToJj/z63ufK0BCKf8Z7WCE= IronPort-Data: A9a23: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 wQ= IronPort-HdrOrdr: A9a23:zcy7aam8WHrunBgvVRQ8Gc9Mdz/pDfLc3DAbv31ZSRFFG/Fw9/ rEoB1p73HJYVEqKQkdcLG7Scy9qBznmKKdjbNxAV7AZmXbUQmTRr2KPbGD/9SIIUSXygc379 YDT0ERMqySMbE3t6nHyTj9KMw4yN2LtIijmOfZyB5WPHhXQpAl1B1hAgKXVnVrSBVLQbo1fa DsgfZvln6aY20easn+PHUfQOTZzue78K7OUFo9HhYi5U20gSm17aOSKWn/4isj X-Talos-CUID: 9a23:uEROFW3csd9EDXGwE24+5rxfSswvf03XznnpHmCEBFxoTaasR3KewfYx X-Talos-MUID: 9a23:7TWn8AvDMnUfT7+gqM2nqixhBoRs546VKW8sr6oZndeZKwhQNGLI X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="6.09,230,1716242400"; d="scan'208,217";a="92782984" X-MGA-submission: =?us-ascii?q?MDGCgT7itNkG5gHyaRJlawh+093DK4PT206iOe?= =?us-ascii?q?eJjremsFDTZYov8jkA6T+bK/74UmvGjxNtsP1asCDN2Sq/C6thhnkgz5?= =?us-ascii?q?iHiSHHHTVTKLIaJLtNx/Euv+yIkixsbxwfRowDJ5zFuqESU6GgYZbRyl?= =?us-ascii?q?sbznmDHwGTYPCLOB6Rc6VfxA=3D=3D?= Received: from mx1.polytechnique.org ([129.104.30.34]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jul 2024 15:30:59 +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 65C125647D0; Tue, 23 Jul 2024 15:30:57 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=polytechnique.org; s=svoboda; t=1721741457; bh=DdEZV4fTzoK7ct6bE/gkYH1kIudAQCME2R9Sgr+vN7I=; h=From:To:Subject:Date:Message-ID; b=Ng1u4EhJjLYEQf0GPYqgUSz4wtNdvc8iQ4jWhT6DaTL3sD3WD5YUFzemtP/jvH5jt zsSK4XF92k+IuO5sDgr4/Lo7g07SfG6rQroJmss1EM++ePcQ1N46UZ3Vg/SEkWYarZ eRSMIUahBIPuLTGNfXOVLd0vZLViGFlqyTyv40CU= From: Alan Schmitt To: "lwn" , caml-list@inria.fr Date: Tue, 23 Jul 2024 15:30:57 +0200 Message-ID: MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Jul 23 15:30:57 2024 +0200 (CEST)) X-Spam-Flag: Unsure, tests=bogofilter, spamicity=0.499995, queueID=AE59B5647E2 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: 19162 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: base64 SGVsbG8NCg0KSGVyZSBpcyB0aGUgbGF0ZXN0IE9DYW1sIFdlZWtseSBOZXdzLCBmb3IgdGhlIHdl ZWsgb2YgSnVseSAxNiB0byAyMywNCjIwMjQuDQoNClRhYmxlIG9mIENvbnRlbnRzDQrilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KQSBUb3VyIG9m IHRoZSBMaXZpbmcgTGlicmFyeSDigJMgQSBTYWZlciBGRkkNCmZpcnN0IHJlbGVhc2Ugb2YgcnBt ZmlsZQ0KRHVuZSBkZXYgbWVldGluZw0KRmlnaHRpbmcgTXV0YXRpb24gd2l0aCBNdXRhdGlvbiBp biBMaXZpbmcNCkEgc21hbGwgZXh0ZW5zaW9uIG9mIEJpZ2FycmF5LkdlbmFycmF5IGFkZGluZyBp dGVyYXRpb24sIG1hcHBpbmcgYW5kIGZvbGRpbmcNCmN1ZGFqaXQ6IEJpbmRpbmdzIHRvIHRoZSBg Y3VkYScgYW5kIGBudnJ0YycgbGlicmFyaWVzDQpScG1maWxlIDAuMi4wIC0gY2hhbmdlbG9nDQpF eHBsb3JpbmcgdGhlIERvY3VzYXVydXMrT2RvYyBjb21ibw0KTW9wc2EgMS4wIOKAkyBNb2R1bGFy IE9wZW4gUGxhdGZvcm0gZm9yIFN0YXRpYyBBbmFseXNpcw0KT0NhbWwgNSBwZXJmb3JtYW5jZQ0K T3RoZXIgT0NhbWwgTmV3cw0KT2xkIENXTg0KDQoNCkEgVG91ciBvZiB0aGUgTGl2aW5nIExpYnJh cnkg4oCTIEEgU2FmZXIgRkZJDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6 Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Jsb2ctYS10b3VyLW9mLXRoZS1saXZpbmctbGlicmFyeS1h LXNhZmVyLWZmaS8xNDk4MS8xPg0KDQoNCk1hdHQgV2Fsa2VyIGFubm91bmNlZA0K4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoN CiAgSSd2ZSB3cml0dGVuIGEgbmV3IGJsb2cgcG9zdCBvbiB0aGUgYGxpdmluZycgbGlicmFyeSBJ IGFubm91bmNlZCBhIGZldw0KICBkYXlzIGFnby4gIFBsZWFzZSBnaXZlIGl0IGEgcmVhZCBpZiB5 b3UncmUgaW50ZXJlc3RlZCBpbiBzYWZlIHVzZSBvZg0KICBDdHlwZXMsIG9yIG90aGVyd2lzZSBu ZWVkIGxpZmV0aW1lIG1hbmFnZW1lbnQgaW4gT0NhbWwuDQoNCiAgV291bGQgbG92ZSB0byBoZWFy IHlvdXIgdmlld3MgaW4gdGhpcyB0aHJlYWQhDQoNCiAgPGh0dHBzOi8vZml6eml4bmVyZC5jb20v YmxvZy8yMDI0LTA3LTE3LXRvdXJpbmctdGhlLWxpdmluZy1saWJyYXJ5Lz4NCg0KDQpmaXJzdCBy ZWxlYXNlIG9mIHJwbWZpbGUNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRw czovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLWZpcnN0LXJlbGVhc2Utb2YtcnBtZmlsZS8xNDk4 NS8xPg0KDQoNCk1pa2hhaWwgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIANCg0KICBJJ20gaGFwcHkgdG8gYW5ub3VuY2UgdGhlIGZp cnN0IHJlbGVhc2Ugb2YgW3JwbWZpbGVdLCBhIHNtYWxsIGxpYnJhcnkNCiAgZm9yIHJlYWRpbmcg bWV0YSBpbmZvcm1hdGlvbiBmcm9tIFJQTSBwYWNrYWdlcyAodmVyc2lvbiAzLjApLiBJdCB1c2Vz DQogIHRoZSBBbmdzdHJvbSBjb21iaW5hdG9yIHBhcnNlciBsaWJyYXJ5LCB3aGljaCBhbGxvd3Mg aXQgdG8gcGVyZm9ybQ0KICBzdHJlYW1pbmcgcGFyc2luZyB1c2luZyBMd3Qgb3IgQXN5bmMuDQoN CiAgSG93IHRvIGdldCBhIHBhY2thZ2Ugc3VtbWFyeToNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKU giBtb2R1bGUgUnBtX3JlYWRlciA9IFJwbWZpbGUuUmVhZGVyIChScG1maWxlLlNlbGVjdG9yLkFs bCkNCiAg4pSCIA0KICDilIIgbGV0IG1ldGFkYXRhID0gUnBtX3JlYWRlci5vZl9maWxlX2V4biAi aGVsbG8tMi4xMi4xLTEuNy54ODZfNjQucnBtIg0KICDilIIgDQogIOKUgiBScG1maWxlLnN1bW1h cnkgbWV0YWRhdGENCiAg4pSCICgqIC0gOiBzdHJpbmcgPSAiQSBGcmllbmRseSBHcmVldGluZyBQ cm9ncmFtIiAqKQ0KICDilJTilIDilIDilIDilIANCg0KICBUaGUgZGVmYXVsdCByZWFkZXIgbW9k dWxlIGNhbiByZWFkIGZyb20gYSBzdHJpbmcgb3IgZmlsZSwgYnV0IGhhcyBwb29yDQogIHBlcmZv cm1hbmNlLiBJdCBuZWVkcyBhIHNlbGVjdG9yIG1vZHVsZSB0byBzZWxlY3QgdGhlIHRhZ3MgdG8N CiAgcGFyc2UuIFRoZSBleGFtcGxlIHVzZXMgYFNlbGVjdG9yLkFsbCcgdG8gcGFyc2UgYWxsIHRh Z3MuDQoNCiAgSSBhbSBkZXZlbG9waW5nIHRoaXMgbGlicmFyeSBmb3IgbXkgcGV0IHByb2plY3Qg dG8gY3JlYXRlIGENCiAgc2VsZi1ob3N0ZWQgUlBNIHJlcG9zaXRvcnkgbWFuYWdlbWVudCBzb2x1 dGlvbi4NCg0KICBUaGFuayB5b3UgZm9yIHlvdXIgYXR0ZW50aW9uIQ0KDQoNCltycG1maWxlXSA8 aHR0cHM6Ly9naXRodWIuY29tL2R4M21vZC9ycG1maWxlPg0KDQoNCkR1bmUgZGV2IG1lZXRpbmcN CuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFy Y2hpdmU6IDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLWR1bmUtZGV2LW1lZXRpbmcv MTQ5OTQvMT4NCg0KDQptYWlzdGUgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIANCg0KICBXZSBhcmUgb3JnYW5pemluZyBhIG5ldyBwdWJs aWMgRHVuZSBkZXYgbWVldGluZyBvbiAqV2VkbmVzZGF5LCBKdWx5LA0KICAyNHRoIGF0IDEwYW0g Q0VUKi4gSXQgd2lsbCBiZSBvbmUgaG91ciBsb25nLg0KDQogIFdoZXRoZXIgeW91IGFyZSBhIG1h aW50YWluZXIsIGEgcmVndWxhciBjb250cmlidXRvciwgYSBuZXcgam9pbmVyIG9yDQogIGp1c3Qg Y3VyaW91cywgZmVlbCBmcmVlIHRvIGpvaW4hIFRoZSBnb2FsIG9mIHRoZXNlIG1lZXRpbmdzIGlz IHRvDQogIHByb3ZpZGUgYSBwbGFjZSB0byBkaXNjdXNzIHRoZSBvbmdvaW5nIHdvcmsgdG9nZXRo ZXIgOnNtaWxlOiBCZWxvdywNCiAgeW91IGNhbiBmaW5kIHRoZSBhZ2VuZGEgZm9yIHRoaXMgbWVl dGluZzoNCg0KDQo6c2Nyb2xsOiBBZ2VuZGENCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjA0KDQogIOKAoiBRdWljayBwcmVzZW50YXRpb24gYWJvdXQgdGhlIGF0 dGVuZGVlcy4NCiAg4oCiIFByZXNlbnRhdGlvbiBhYm91dCB0aGUgb25nb2luZyB3b3JrIGluIER1 bmUuDQogIOKAoiBRdWVzdGlvbnMgYW5kIEFuc3dlcnMuDQogIOKAoiBJbmZvcm1hdGlvbiBkaXNj dXNzaW9ucw0KDQoNCjpjaGFpbnM6IExpbmtzDQrilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYwNCg0KICDigKIgTWVldGluZyBsaW5rOiBbem9vbV0NCiAg4oCiIENhbGVu ZGFyIGV2ZW50OiBbZ29vZ2xlIGNhbGVuZGFyXQ0KICDigKIgV2lraSB3aXRoIGluZm9ybWF0aW9u IGFuZCBwcmV2aW91cyBub3RlczogW0dpdEh1YiBXaWtpXQ0KDQoNClt6b29tXQ0KPGh0dHBzOi8v dXMwNndlYi56b29tLnVzL2ovODUwOTY4Nzc3NzY/cHdkPWNXTmhVMWRIUTFaTlNqWnVPVVpDUTBo MmJ5OVVkejA5Pg0KDQpbZ29vZ2xlIGNhbGVuZGFyXQ0KPGh0dHBzOi8vY2FsZW5kYXIuZ29vZ2xl LmNvbS9jYWxlbmRhci9lbWJlZD9zcmM9Y181Y2Q2OThkZjY3ODRlMzg1YjFjZGNkYzFkYmNhMThj MDYxZmFhOTY5NTlhMDQ3ODE1NjZkMzA0ZGM5ZWM3MzE5JTQwZ3JvdXAuY2FsZW5kYXIuZ29vZ2xl LmNvbT4NCg0KW0dpdEh1YiBXaWtpXSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL2R1bmUvd2lr aSNkZXYtbWVldGluZ3M+DQoNCg0KRmlnaHRpbmcgTXV0YXRpb24gd2l0aCBNdXRhdGlvbiBpbiBM aXZpbmcNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwu b3JnL3QvYmxvZy1maWdodGluZy1tdXRhdGlvbi13aXRoLW11dGF0aW9uLWluLWxpdmluZy8xNTAw My8xPg0KDQoNCk1hdHQgV2Fsa2VyIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgTmV3IGJsb2cgcG9z dCBhYm91dCBmaXhpbmcgdGhlIG1pc3Rha2VzIGluIHRoZSBgbGl2aW5nJyBsaWJyYXJ5Lg0KICBQ bGVhc2UgdGFrZSBhIGxvb2sgaWYgeW91J3JlIGludGVyZXN0ZWQgaW4gaW50ZXJmYWNpbmcgb2Nh bWwgd2l0aA0KICBleHRlcm5hbCByZXNvdXJjZXMuDQoNCiAgPGh0dHBzOi8vZml6eml4bmVyZC5j b20vYmxvZy8yMDI0LTA3LTIxLWZpeGluZy1saXZpbmcvPg0KDQogIEluIHBhcnRpY3VsYXIsIEkg dGhpbmsgdGhlIGxpYnJhcnkgY29tZXMgZ29vZCB3aXRoIGl0cyBndWFyYW50ZWVzIG5vdw0KICB0 aGF0DQogIDEuIGlmIGV2ZXJ5IGZ1bmN0aW9uIGlzIHByb3Blcmx5IGRlcGVuZGVudCwgYW5kDQog IDIuIHlvdSBvbmx5IGB1bnNhZmVfZnJlZScgdmFsdWVzIHRoYXQgYXJlIGRpc2pvaW50IGZyb20g dGhlaXINCiAgICAgZGVwZW5kZW5jaWVzLCB0aGVuDQogIHlvdSB3aWxsIG9idGFpbiBhIHNvdW5k IHByb2dyYW0gd2hlbiB1c2luZyB0aGUgQ3R5cGVzIGZmaSwgaW4gdGVybXMgb2YNCiAgdGhlcmUg YmVpbmcgbm8gdXNlLWFmdGVyLWZyZWUgZXJyb3JzLg0KDQogIFBsZWFzZSBsZXQgbWUga25vdyBp ZiB5b3UgZGlzYWdyZWUhDQoNCg0KQSBzbWFsbCBleHRlbnNpb24gb2YgQmlnYXJyYXkuR2VuYXJy YXkgYWRkaW5nIGl0ZXJhdGlvbiwgbWFwcGluZyBhbmQgZm9sZGluZw0K4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToN CiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4tYS1zbWFsbC1leHRlbnNpb24tb2Yt YmlnYXJyYXktZ2VuYXJyYXktYWRkaW5nLWl0ZXJhdGlvbi1tYXBwaW5nLWFuZC1mb2xkaW5nLzE1 MDA1LzE+DQoNCg0KTkFsZWMgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIANCg0KICBJIG5lZWRlZCBhIGZldyBmdW5jdGlvbnMgd2hpY2ggd2Vy ZSBtaXNzaW5nIGluIHRoZSBbT0NhbWwgbGlicmFyeSA6DQogIEJpZ2FycmF5LkdlbmFycmF5XSwg YW5kIGRlY2lkZWQgdG8gd3JpdGUgdGhlbSBmb3IgbXkgb3duIHB1cnBvc2UgOg0KICDigKIgSXRl cmF0aW9uIG9uIGdlbmFycmF5cw0KICDigKIgbWFwcGluZyBvbiBnZW5hcnJheXMNCiAg4oCiIGZv bGRpbmcgb24gZ2VuYXJyYXlzDQoNCiAgVG9kYXkgSSBiZWxpZXZlIHRoaXMgY2FuIGJlIHVzZWZ1 bGwgZm9yIG90aGVycywgYW5kIG1heSBzdWZmZXIgYSBjb2RlDQogIGluc3BlY3Rpb24gYXMgSSBh bSBub3QgdGhhdCBleHBlcmllbmNlZCBpbiBPQ2FtbC4gSSBhbSByZWFkeSB0byBoYXZlDQogIHRo aXMgcGllY2Ugb2YgY29kZSBldm9sdmUgaWYgaXQgaXMgdXNlZnVsbCBzbyBldmVuIChhbmQgbWF5 YmUgZmlyc3QpIGENCiAgZmVlZGJhY2sgb24gdGhlIHVzZWZ1bGxuZXNzIG9mIHN1Y2ggY29kZSBp cyB3ZWxjb21lLg0KDQogIFRoZSBvbmx5IGFsdGVybmF0aXZlIEkgd2FzIGdpdmVuIHdhcyB0aGUg ZmFtb3VzIE93bCBsaWJyYXJ5LCB3aGljaCB3YXMNCiAgd2F5IHRvIGhlYXZ5IGZvciBteSBuZWVk cywgYW5kIG5vdCBlYXNpbHkgdXNhYmxlIChpZiBub3QNCiAgdW5kZXJzdGFuZGFibGUpLiBUaGlz IGV4dGVuc2lvbiBpcyB2ZXJ5IHNpbXBsZSwgaXQgaXMgaXRzDQogIHN0cmVuZ2h0LiBVbHRpbWF0 ZWx5LCBpdCBjb3VsZCBiZSBtZXJnZWQgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkg4oCmDQogIG1h eWJlIGFmdGVyIHNvbWUgd29yayBpbmRlZWQgOiB5b3UgdGVsbCBtZS4NCg0KICBUaGVyZSBpcyBh IGNsZWFuIGRvY3VtZW50YXRpb24gSSBndWVzcywgaG9wZSB0aGlzIGNhbiBoZWxwIDoNCiAgW0dl bkFycmF5SXRlcl0NCg0KICBMb29raW5nIGZvcndhcmQgdG8gaGVhcmluZyBmcm9tIHlvdSBhbGwu DQoNCg0KW09DYW1sIGxpYnJhcnkgOiBCaWdhcnJheS5HZW5hcnJheV0NCjxodHRwczovL29jYW1s Lm9yZy9tYW51YWwvNS4yL2FwaS9CaWdhcnJheS5HZW5hcnJheS5odG1sPg0KDQpbR2VuQXJyYXlJ dGVyXSA8aHR0cHM6Ly9naXRodWIuY29tL0hleWppMi9HZW5BcnJheUl0ZXI+DQoNCg0KY3VkYWpp dDogQmluZGluZ3MgdG8gdGhlIGBjdWRhJyBhbmQgYG52cnRjJyBsaWJyYXJpZXMNCuKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxo dHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLWN1ZGFqaXQtYmluZGluZ3MtdG8tdGhlLWN1 ZGEtYW5kLW52cnRjLWxpYnJhcmllcy8xNTAxMC8xPg0KDQoNCkx1a2FzeiBTdGFmaW5pYWsgYW5u b3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBIaSEgSSdtIGhhcHB5IHRvIHNoYXJl IGN1ZGFqaXQgMC40LjA6IG1hbnVhbGx5LXNlbGVjdGVkIGJpbmRpbmdzIGZvcg0KICBOdmlkaWEg R1BVIHByb2dyYW1taW5nLiBjdWRhaml0IHNob3VsZCBzb29uIHByb3BhZ2F0ZSB0byB0aGUgb3Bh bQ0KICByZXBvc2l0b3J5LiAgW0JpbmRpbmdzIHRvIHRoZSBgY3VkYScgYW5kIGBudnJ0YycgbGli cmFyaWVzIHdpdGggYQ0KICB1bmlmaWVkIGludGVyZmFjZV0gW0FQSSBkb2N1bWVudGF0aW9uXSBD dXJyZW50bHkgc3VwcG9ydGVkOg0KDQogIOKAoiBDb21waWxpbmcgYSBrZXJuZWwgd2l0aCBjb252 ZXJzaW9uIHRvIFBUWCwgbGF1bmNoaW5nIGEga2VybmVsLg0KICDigKIgU3luY2hyb25vdXMgYW5k IGFzeW5jaHJvbm91cyBtZW1vcnkgY29weWluZy4NCiAg4oCiIENvbnRleHRzIGFuZCBzdHJlYW1z Lg0KICDigKIgKEdQVSkgZGV2aWNlIGF0dHJpYnV0ZXMuDQoNCiAgQ3VycmVudGx5IG5vdCBzdXBw b3J0ZWQ6DQoNCiAg4oCiIEV2ZW50cy4NCiAg4oCiIENVREEgZ3JhcGggZmVhdHVyZXMuDQogIOKA oiBDb29wZXJhdGl2ZSBrZXJuZWwgbGF1bmNoLg0KDQogIExldCBtZSBrbm93IHlvdXIgbmVlZHMg c28gSSBjYW4gcHJpb3JpdGl6ZS4gUFJzIGFyZSBhbHNvIHdlbGNvbWUhDQoNCg0KW0JpbmRpbmdz IHRvIHRoZSBgY3VkYScgYW5kIGBudnJ0YycgbGlicmFyaWVzIHdpdGggYSB1bmlmaWVkIGludGVy ZmFjZV0NCjxodHRwczovL2dpdGh1Yi5jb20vbHVrc3RhZmkvb2NhbWwtY3VkYWppdD4NCg0KW0FQ SSBkb2N1bWVudGF0aW9uXQ0KPGh0dHBzOi8vbHVrc3RhZmkuZ2l0aHViLmlvL29jYW1sLWN1ZGFq aXQvY3VkYWppdC9DdWRhaml0L2luZGV4Lmh0bWw+DQoNCg0KUnBtZmlsZSAwLjIuMCAtIGNoYW5n ZWxvZw0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vz cy5vY2FtbC5vcmcvdC9hbm4tZmlyc3QtcmVsZWFzZS1vZi1ycG1maWxlLzE0OTg1Pg0KDQoNCk1p a2hhaWwgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIANCg0KICBIZWxsbyBhZ2FpbiwgZXZlcnlvbmUuIDp3YXZlOiBUb2RheSBJIHdh bnQgdG8gdGVsbCB5b3UgYWJvdXQgd2hhdCBoYXMNCiAgY2hhbmdlZCBpbiBhIG5ldyB2ZXJzaW9u IG9mIG15IFtycG1maWxlXSBsaWJyYXJ5IChbcHJldmlvdXMgdG9waWNdKQ0KICBmb3IgcmVhZGlu ZyBtZXRhLWluZm9ybWF0aW9uIGZyb20gUlBNIHBhY2thZ2VzLlNob3VsZCBJIHBvc3QgdGhpcyBp bg0KICB0aGUgZm9ydW0/IEknbSBzb3JyeS4NCg0KDQpbcnBtZmlsZV0gPGh0dHBzOi8vZ2l0aHVi LmNvbS9keDNtb2QvcnBtZmlsZT4NCg0KW3ByZXZpb3VzIHRvcGljXQ0KPGh0dHBzOi8vZGlzY3Vz cy5vY2FtbC5vcmcvdC9hbm4tZmlyc3QtcmVsZWFzZS1vZi1ycG1maWxlLzE0OTg1Pg0KDQpDaGFu Z2VzDQrilYzilYzilYzilYzilYzilYzilYwNCg0KICDigKIgRml4ZWQgaW5jb3JyZWN0IHN0cmlu ZyBwYXJzaW5nLiBJIGp1c3QgZm9yZ290IHRvIG1ha2UgYGFkdmFuY2UnDQogICAgYWZ0ZXIgYHRh a2VfdGlsbCcgKFtjb21taXRdKTsNCiAg4oCiIGBhbmdzdHJvbS11bml4JyBpcyB1c2VkIGJ5IGRl ZmF1bHQgdG8gcmVhZCBmaWxlcyBpbiB0aGUgYFJlYWRlcicNCiAgICBtb2R1bGUgZnVuY3Rpb25z LiBQcmV2aW91c2x5LCBhIFJQTSBwYWNrYWdlIHdhcyByZWFkIGVudGlyZWx5IGludG8NCiAgICBt ZW1vcnk7DQogIOKAoiBPcHRpbWl6ZWQgcGFydGlhbCBwYXJzaW5nIG9mIFtoZWFkZXIgc2VjdGlv bnNdLiBSZWR1Y2VkIHVubmVjZXNzYXJ5DQogICAgbWVtb3J5IGFsbG9jYXRpb25zIChbY29tbWl0 XSk7DQogIOKAoiBEZWNvZGluZyBpbnRlZ2VycyAoaW50OC9pbnQxNi9pbnQzMi9pbnQ2NCkgdG8g Km5hdGl2ZSBpbnQqIGluIGFjY2Vzcw0KICAgIGZ1bmN0aW9uc1teMV0gKGxpa2UgYFJwbWZpbGUu cGF5bG9hZF9zaXplJykuIFlvdSBjYW4gYWxzbyB1c2UgYGdldCcNCiAgICB0byBnZXQgInJhdyIg dmFsdWVzOw0KICDigKIgSW1wcm92ZWQgY29tcGF0aWJpbGl0eSB3aXRoIDQuMCB2ZXJzaW9uIG9m IFJQTSBmb3JtYXQgYnkgdXNpbmcNCiAgICAqbmF0aXZlIGludCo7DQogIOKAoiBBZGRlZCBhIG1v ZHVsZSBgU2VsZWN0b3IuQmFzZScgdG8gc2VsZWN0IG9ubHkgYmFzaWMgcGFja2FnZSBpbmZvDQog ICAgKFtjb21taXRdKTsNCiAg4oCiIFNvbWUgbmV3IGFjY2VzcyBmdW5jdGlvbnMgYW5kIG91dHB1 dCBmaWVsZHMgb2YgdGhlIENMSSB1dGlsaXR5Lg0KDQoNCltjb21taXRdDQo8aHR0cHM6Ly9naXRo dWIuY29tL2R4M21vZC9ycG1maWxlL2NvbW1pdC8zYjAxYTM0MzZhMTVkNDk3ZWEyZTRiOTQ2MTEx MDg1NTUxODlmZjNiPg0KDQpbaGVhZGVyIHNlY3Rpb25zXQ0KPGh0dHBzOi8vcmVmc3BlY3MubGlu dXhiYXNlLm9yZy9MU0JfMy4xLjEvTFNCLUNvcmUtZ2VuZXJpYy9MU0ItQ29yZS1nZW5lcmljL3Br Z2Zvcm1hdC5odG1sI0FFTjI2NTgxPg0KDQpbY29tbWl0XQ0KPGh0dHBzOi8vZ2l0aHViLmNvbS9k eDNtb2QvcnBtZmlsZS9jb21taXQvMjEyMTE5MGY1OWZjODBjZmVkZWE5MDQzYWQxM2I0NDBhYTYw ZjBkMD4NCg0KW2NvbW1pdF0NCjxodHRwczovL2dpdGh1Yi5jb20vZHgzbW9kL3JwbWZpbGUvY29t bWl0L2M0YmFmMmZjYzcyOTY1OTM2YmYyZGVhMTNhYmQxYTA5NjgyNmI2N2Q+DQoNCg0KcnBtZmls ZSB2cyBycG0gLXFpDQrilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYwNCg0KICBOb3QgYSByZWFsICJiZW5jaG1hcmsiIGZvciBwYXJzaW5nIDEuNSBH QiBwYWNrYWdlcy4NCg0KICDilIzilIDilIDilIDilIANCiAg4pSCICQgdGltZSBycG0gLXFpIHJl cG8vKi5ycG0NCiAg4pSCIEV4ZWN1dGVkIGluICAyMjYuODIgbWlsbGlzICAgIGZpc2ggICAgICAg ICAgIGV4dGVybmFsDQogIOKUgiAgICB1c3IgdGltZSAgMjEyLjc0IG1pbGxpcyAgICAxLjA2IG1p bGxpcyAgMjExLjY4IG1pbGxpcw0KICDilIIgICAgc3lzIHRpbWUgICAxMy4yMyBtaWxsaXMgICAg MC4wMCBtaWxsaXMgICAxMy4yMyBtaWxsaXMNCiAg4pSCIA0KICDilIIgJCB0aW1lIHJwbWZpbGUg cmVwby8qLnJwbQ0KICDilIIgRXhlY3V0ZWQgaW4gIDE1My45NyBtaWxsaXMgICAgZmlzaCAgICAg ICAgICAgZXh0ZXJuYWwNCiAg4pSCICAgIHVzciB0aW1lICAxMTYuNzQgbWlsbGlzICAgIDAuMDAg bWlsbGlzICAxMTYuNzQgbWlsbGlzDQogIOKUgiAgICBzeXMgdGltZSAgIDMwLjY1IG1pbGxpcyAg ICAxLjQ3IG1pbGxpcyAgIDI5LjE4IG1pbGxpcw0KICDilJTilIDilIDilIDilIANCg0KICBScG1m aWxlIGRvZXNuJ3QgdmVyaWZ5IHNpZ25hdHVyZXMsIHdoaWNoIGlzIHdoeSBpdCBpcyAiZmFzdGVy Ii4NCg0KDQpXaGF0J3MgbmV4dD8NCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jA0KDQogIFRoaXMgaXMgZW5vdWdoIGZvciBteSB0YXNrcywgc28gdGhlcmUgcHJvYmFibHkgd29u J3QgYmUgYSBuZXh0IHJlbGVhc2UNCiAgOmNvbGRfZmFjZToNCg0KICBUby1EbzogZnVuY3Rpb25h bGl0eSB0byB3b3JrIHdpdGggc2lnbmF0dXJlcywgcmVhZCBwYXlsb2FkLCBpbXBsZW1lbnQNCiAg d3JpdGVyIG1vZHVsZSBmb3IgY3JlYXRlIHBhY2thZ2VzLg0KDQogIFRoYW5rIHlvdSBmb3IgeW91 ciBhdHRlbnRpb24hDQoNCiAgUC5TLiBJIGFsc28gd2FudCB0byBhcG9sb2dpemUgZm9yIG15IHRl cnJpYmxlIEVuZ2xpc2guDQoNCiAgW14xXTogVGhlIGFjY2VzcyBmdW5jdGlvbiBnZXRzIGFuZCBk ZWNvZGVzIHZhbHVlcyBmcm9tIGEgYG1ldGFkYXRhJw0KICByZWNvcmQuDQoNCg0KRXhwbG9yaW5n IHRoZSBEb2N1c2F1cnVzK09kb2MgY29tYm8NCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2Nh bWwub3JnL3QvZXhwbG9yaW5nLXRoZS1kb2N1c2F1cnVzLW9kb2MtY29tYm8vMTUwMTIvMT4NCg0K DQpNYXRoaWV1IEJhcmJpbiBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIFRvIE9DYW1s ICYgRG9jdXNhdXJ1cyBlbnRodXNpYXN0cyBvdXQgdGhlcmUgOmNhbWVsOisgOnNhdXJvcG9kOg0K DQogIFNvbWUgdGltZSBhZ28sIEkgc2hhcmVkIG15IGV4cGVyaWVuY2UgdXNpbmcgRG9jdXNhdXJ1 cyB0byBkb2N1bWVudCBhbg0KICBPQ2FtbCBwcm9qZWN0LCBoaWdobGlnaHRpbmcgdGhlIGludGVn cmF0aW9uIGJldHdlZW4gRG9jdXNhdXJ1cywNCiAgb2NhbWwtbWR4LCBhbmQgdGhlIGR1bmUgd29y a2Zsb3cgKHByZXZpb3VzIHBvc3QgW2hlcmVdKS4NCg0KICBUb2RheSBJIHdhbnRlZCB0byBzaGFy ZSB0aGF0IEkndmUgcmVzdW1lZCB0aGlzIGV4cGxvcmF0aW9uIGluDQogIGRvY3VtZW50YXRpb24g dG9vbHMgdG8gdHJ5IGFuZCBpbnRlZ3JhdGUgb2RvYy1nZW5lcmF0ZWQgcGFnZXMgaW50bw0KICBE b2N1c2F1cnVzLCB3aXRoIHRoZSBhaW0gb2YgY3JlYXRpbmcgYSBzb21ld2hhdCBtaW5pbWFsDQog IHRlbXBsYXRlL2V4YW1wbGUgZm9yIHRoaXMuDQoNCiAgSSd2ZSBwdWJsaXNoZWQgbXkgZXhwZXJp bWVudCBoZXJlOg0KICBbaHR0cHM6Ly9tYmFyYmluLmdpdGh1Yi5pby9kb2MtZXhwZXJpbWVudC1k b2N1c2F1cnVzL10uDQoNCiAgSW50ZWdyYXRpbmcgb2RvYyBwb3NlZCBjaGFsbGVuZ2VzIC0gSSd2 ZSB3cml0dGVuIGFib3V0IHRoZSAocHJhZ21hdGljKQ0KICBhcHByb2FjaCBJIHRvb2sgW2hlcmVd LiBJJ20gbGlua2luZyB0aGlzIFtvZG9jIGlzc3VlXSB0b28sIGZvcg0KICByZWZlcmVuY2UgYWJv dXQgZXhwbG9yaW5nIG1vcmUgbmF0aXZlIHNvbHV0aW9ucyBmb3IgdGhpcyBpbnRlcm9wLg0KDQog IEhhdmUgeW91IHRvbyB0cmllZCB0aGlzICJtYWdpYyBjb21ibyIgb2YgRG9jdXNhdXJ1cywgT2Rv YywgYW5kIE9DYW1sDQogIHRvb2xzPyBBbmQgaWYgc28sIGhvdyBkaWQgeW91IGFwcHJvYWNoIGl0 PyBEbyB5b3UgaGF2ZSBpbnNpZ2h0cyBvcg0KICBzdWdnZXN0aW9ucz8gSWYgdGhpcyBzcGFya3Mg eW91ciBjdXJpb3NpdHksIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0bw0KICBlbmdhZ2Ugd2l0aCB0 aGUgcmVwb3NpdG9yeS4NCg0KDQpbaGVyZV0NCjxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3Qv dXNpbmctZG9jdXNhdXJ1cy10by1kb2N1bWVudC1hbi1vY2FtbC1wcm9qZWN0LzEzMzU5Pg0KDQpb aHR0cHM6Ly9tYmFyYmluLmdpdGh1Yi5pby9kb2MtZXhwZXJpbWVudC1kb2N1c2F1cnVzL10NCjxo dHRwczovL21iYXJiaW4uZ2l0aHViLmlvL2RvYy1leHBlcmltZW50LWRvY3VzYXVydXMvPg0KDQpb aGVyZV0gPGh0dHBzOi8vbWJhcmJpbi5naXRodWIuaW8vZG9jLWV4cGVyaW1lbnQtZG9jdXNhdXJ1 cy9kb2NzL29kb2MvPg0KDQpbb2RvYyBpc3N1ZV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9v ZG9jL2lzc3Vlcy8xMjE+DQoNCg0KTW9wc2EgMS4wIOKAkyBNb2R1bGFyIE9wZW4gUGxhdGZvcm0g Zm9yIFN0YXRpYyBBbmFseXNpcw0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9h bm4tbW9wc2EtMS0wLW1vZHVsYXItb3Blbi1wbGF0Zm9ybS1mb3Itc3RhdGljLWFuYWx5c2lzLzE1 MDEzLzE+DQoNCg0KUmFwaGHDq2wgTW9uYXQgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBP biBiZWhhbGYgb2YgYWxsIGl0cyBkZXZlbG9wZXJzLCBJIGFtIGdsYWQgdG8gYW5ub3VuY2UgdGhl IHJlbGVhc2Ugb2YNCiAgW01vcHNhIDEuMF0hIFlvdSBjYW4ganVzdCBgb3BhbSBpbnN0YWxsIG1v cHNhJy4NCg0KICBNb3BzYSBzdGFuZHMgZm9yIE1vZHVsYXIgYW5kIE9wZW4gUGxhdGZvcm0gZm9y IFN0YXRpYyBBbmFseXNpcy4gSXQNCiAgYWltcyBhdCBlYXNpbmcgdGhlIGRldmVsb3BtZW50IGFu ZCB1c2Ugb2Ygc3RhdGljIGFuYWx5emVycy4gTW9yZQ0KICBzcGVjaWZpY2FsbHksIE1vcHNhIGlz IGEgZ2VuZXJpYyBmcmFtZXdvcmsgZm9yIGJ1aWxkaW5nIHNvdW5kIHN0YXRpYw0KICBhbmFseXpl ciBiYXNlZCBvbiB0aGUgdGhlb3J5IG9mIGFic3RyYWN0IGludGVycHJldGF0aW9uLiBNb3BzYSBp cw0KICBpbmRlcGVuZGVudCBvZiBsYW5ndWFnZSBhbmQgYWJzdHJhY3Rpb24gY2hvaWNlcy4gRGV2 ZWxvcGVycyBhcmUgZnJlZQ0KICB0byBhZGQgYXJiaXRyYXJ5IGFic3RyYWN0aW9ucyAobnVtZXJp YywgcG9pbnRlciwgbWVtb3J5LCBldGMuKSBhbmQNCiAgc3ludGF4IGl0ZXJhdG9ycyBmb3IgbmV3 IGxhbmd1YWdlcy4gTW9wc2EgZW5jb3VyYWdlcyB0aGUgZGV2ZWxvcG1lbnQNCiAgb2YgaW5kZXBl bmRlbnQgYWJzdHJhY3Rpb25zIHdoaWNoIGNhbiBjb29wZXJhdGUgb3IgYmUgY29tYmluZWQgdG8N CiAgaW1wcm92ZSBwcmVjaXNpb24uDQoNCiAgTW9wc2EgY3VycmVudGx5IHN1cHBvcnQgdGhlIGFu YWx5c2lzIG9mIFB5dGhvbiwgQyBhbmQgUHl0aG9uK0MNCiAgcHJvZ3JhbXMuIEl0IHJlcG9ydHMg cnVuLXRpbWUgZXJyb3JzIG9uIEMgcHJvZ3JhbXMgYW5kIHVuY2F1Z2h0DQogIGV4Y2VwdGlvbnMg b24gUHl0aG9uIHByb2dyYW1zLiBPdXIgYmVuY2htYXJrcyBwcm92aWRlIGFuIGlsbHVzdHJhdGl2 ZQ0KICBvdmVydmlldyBvZiB3aGF0IE1vcHNhIGNhbiBjdXJyZW50bHkgYW5hbHl6ZS4gQWxsIGFu YWx5c2VzIGN1cnJlbnRseQ0KICBwcm92aWRlZCBhcmUgZmxvdyBhbmQgY29udGV4dC1zZW5zaXRp dmUgKGkuZSwgY29udHJvbC1mbG93IG9wZXJhdG9ycw0KICBhcmUgdGFrZW4gaW50byBhY2NvdW50 IGJ5IHRoZSBhbmFseXNpcywgYW5kIGZ1bmN0aW9ucyBhcmUgYW5hbHl6ZWQgYnkNCiAgdmlydHVh bCBpbmxpbmluZykuIFRoZSBDIGFuYWx5c2lzIGlzIGFjdGl2ZWx5IGRldmVsb3BlZCBhbmQNCiAg bWFpbnRhaW5lZC4gVGhlIFB5dGhvbiBhbmQgUHl0aG9uK0MgYW5hbHlzZXMgd29yayBvbiByZWFs LXdvcmxkDQogIGV4YW1wbGVzLCBidXQgYXJlIG5vdCBhY3RpdmVseSBkZXZlbG9wZWQuDQoNCiAg UGxlYXNlIG5vdGUgdGhhdCBNb3BzYSBpcyBhbiBhY2FkZW1pYyB0b29sIHVuZGVyIGRldmVsb3Bt ZW50LiBGZWVsDQogIGZyZWUgdG8gc3VibWl0IFtpc3N1ZXNdIGlmIHlvdSBlbmNvdW50ZXIgYW55 IGJ1ZyENCg0KICBBZGRpdGlvbmFsIHJlc291cmNlczoNCiAg4oCiIFt1c2VyIG1hbnVhbF0NCiAg 4oCiIFtkZW1vIG9mIG91ciBhYnN0cmFjdCBkZWJ1Z2dlcl0NCiAg4oCiIFthY2FkZW1pYyBvdmVy dmlldyBvZiBNb3BzYV0sIGFuZCBbaW4gYSBQaEQgdGhlc2lzXQ0KICDigKIgW2NvcmV1dGlscyBi ZW5jaG1hcmtzIG9uIHdoaWNoIE1vcHNhIGNhbiBydW5dDQoNCg0KW01vcHNhIDEuMF0gPGh0dHBz Oi8vZ2l0bGFiLmNvbS9tb3BzYS9tb3BzYS1hbmFseXplci8+DQoNCltpc3N1ZXNdDQo8aHR0cHM6 Ly9naXRsYWIuY29tL21vcHNhL21vcHNhLWFuYWx5emVyLy0vaXNzdWVzLz9zb3J0PWNyZWF0ZWRf ZGF0ZSZzdGF0ZT1vcGVuZWQmZmlyc3RfcGFnZV9zaXplPTUwPg0KDQpbdXNlciBtYW51YWxdIDxo dHRwczovL21vcHNhLmdpdGxhYi5pby9tb3BzYS1hbmFseXplci91c2VyLW1hbnVhbC8+DQoNCltk ZW1vIG9mIG91ciBhYnN0cmFjdCBkZWJ1Z2dlcl0NCjxodHRwczovL3Jtb25hdC5mci90YWxrLzI0 MDYwNl9jc3YvI2ludGVyYWN0aXZlLWVuZ2luZS1kZW1vPg0KDQpbYWNhZGVtaWMgb3ZlcnZpZXcg b2YgTW9wc2FdDQo8aHR0cHM6Ly9oYWwuc29yYm9ubmUtdW5pdmVyc2l0ZS5mci9oYWwtMDI4OTA1 MDB2MS9kb2N1bWVudD4NCg0KW2luIGEgUGhEIHRoZXNpc10NCjxodHRwczovL3Jtb25hdC5mci9k YXRhL3B1YnMvMjAyMS90aGVzaXNfbW9uYXQucGRmI3BhZ2U9NjE+DQoNCltjb3JldXRpbHMgYmVu Y2htYXJrcyBvbiB3aGljaCBNb3BzYSBjYW4gcnVuXQ0KPGh0dHBzOi8vZ2l0bGFiLmNvbS9tb3Bz YS9iZW5jaG1hcmtzL2NvcmV1dGlscy1iZW5jaG1hcmtzPg0KDQoNCk9DYW1sIDUgcGVyZm9ybWFu Y2UNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkA0KDQogIEFyY2hpdmU6IDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3Qvb2NhbWwtNS1w ZXJmb3JtYW5jZS8xNTAxNC8xPg0KDQoNClRob21hcyBMZW9uYXJkIGFubm91bmNlZA0K4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSADQoNCiAgSSd2ZSBiZWVuIHRyeWluZyBvdXQgc29tZSB0b29scyB0byBpbnZlc3Rp Z2F0ZSBwZXJmb3JtYW5jZSBwcm9ibGVtcyBpbg0KICBteSBPQ2FtbCBwcm9ncmFtcyBhbmQgSSd2 ZSB3cml0dGVuIHVwIG15IGV4cGVyaWVuY2VzIGhlcmUgaW4gY2FzZQ0KICBvdGhlciBwZW9wbGUg ZmluZCBpdCB1c2VmdWw6DQoNCiAg4oCiIDxodHRwczovL3Jvc2NpZHVzLmNvbS9ibG9nL2Jsb2cv MjAyNC8wNy8yMi9wZXJmb3JtYW5jZS8+DQogIOKAoiA8aHR0cHM6Ly9yb3NjaWR1cy5jb20vYmxv Zy9ibG9nLzIwMjQvMDcvMjIvcGVyZm9ybWFuY2UtMi8+DQoNCiAgVGhlIGZpcnN0IHBvc3QgZXhh bWluZXMgYSBjYXNlIG9mIHNsb3cgSU8gaW4gYSBjb25jdXJyZW50IEVpbyBwcm9ncmFtLA0KICBh bmQgdGhlIHNlY29uZCBsb29rcyBhdCBwb29yIEdDIHBlcmZvcm1hbmNlIGluIGEgbXVsdGljb3Jl IGFwcC4NCg0KICBJbiBwYXJ0aWN1bGFyLCBpdCBzZWVtcyB0aGF0IG1pbm9yIEdDIHBlcmZvcm1h bmNlIGlzIHZlcnkgc2Vuc2l0aXZlIHRvDQogIG90aGVyIHdvcmsgcnVubmluZyBvbiB0aGUgbWFj aGluZSwgc2luY2UgYW55IGRvbWFpbiBiZWluZyBsYXRlIHdpbGwNCiAgdHJpZ2dlciB0aGUgb3Ro ZXJzIHRvIHNsZWVwLCBlLmcuDQoNCiAgPGh0dHBzOi8vZ2xvYmFsLmRpc2NvdXJzZS1jZG4uY29t L2J1c2luZXNzNy91cGxvYWRzL29jYW1sL29yaWdpbmFsLzJYL2UvZTgyMTg5NWI5MzRmOTUxOWY4 NGQwZTUyZjI4MDU3YmIzMDI3NDA5Mi5wbmc+DQoNCiAgSSdkIGJlIGludGVyZXN0ZWQgdG8ga25v dyBpZiBvdGhlcnMgY2FuIHNoZWQgbW9yZSBsaWdodCBvbiB0aGlzLCBvcg0KICBoYXZlIG90aGVy IHByb2ZpbGluZyB0b29scyB0aGV5J3ZlIGZvdW5kIHVzZWZ1bC4NCg0KDQpPdGhlciBPQ2FtbCBO ZXdzDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0K RnJvbSB0aGUgb2NhbWwub3JnIGJsb2cNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEhlcmUgYXJlIGxpbmtz IGZyb20gbWFueSBPQ2FtbCBibG9ncyBhZ2dyZWdhdGVkIGF0IFt0aGUgb2NhbWwub3JnDQogIGJs b2ddLg0KDQogIOKAoiBbT0NhbWwgNSBwZXJmb3JtYW5jZSBwYXJ0IDJdDQogIOKAoiBbT0NhbWwg NSBwZXJmb3JtYW5jZSBwcm9ibGVtc10NCiAg4oCiIFtPQ2FtbCBDb21waWxlciBNYW51YWwgSFRN TCBHZW5lcmF0aW9uXQ0KDQoNClt0aGUgb2NhbWwub3JnIGJsb2ddIDxodHRwczovL29jYW1sLm9y Zy9ibG9nLz4NCg0KW09DYW1sIDUgcGVyZm9ybWFuY2UgcGFydCAyXQ0KPGh0dHBzOi8vcm9zY2lk dXMuY29tL2Jsb2cvYmxvZy8yMDI0LzA3LzIyL3BlcmZvcm1hbmNlLTIvPg0KDQpbT0NhbWwgNSBw ZXJmb3JtYW5jZSBwcm9ibGVtc10NCjxodHRwczovL3Jvc2NpZHVzLmNvbS9ibG9nL2Jsb2cvMjAy NC8wNy8yMi9wZXJmb3JtYW5jZS8+DQoNCltPQ2FtbCBDb21waWxlciBNYW51YWwgSFRNTCBHZW5l cmF0aW9uXQ0KPGh0dHBzOi8vdGFyaWRlcy5jb20vYmxvZy8yMDI0LTA3LTE3LW9jYW1sLWNvbXBp bGVyLW1hbnVhbC1odG1sLWdlbmVyYXRpb24+DQoNCg0KT2xkIENXTg0K4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQDQoNCiAgSWYgeW91IGhhcHBlbiB0byBtaXNzIGEgQ1dOLCB5b3UgY2FuIFtzZW5kIG1l IGEgbWVzc2FnZV0gYW5kIEknbGwgbWFpbA0KICBpdCB0byB5b3UsIG9yIGdvIHRha2UgYSBsb29r IGF0IFt0aGUgYXJjaGl2ZV0gb3IgdGhlIFtSU1MgZmVlZCBvZiB0aGUNCiAgYXJjaGl2ZXNdLg0K DQogIElmIHlvdSBhbHNvIHdpc2ggdG8gcmVjZWl2ZSBpdCBldmVyeSB3ZWVrIGJ5IG1haWwsIHlv dSBtYXkgc3Vic2NyaWJlDQogIHRvIHRoZSBbY2FtbC1saXN0XS4NCg0KICBbQWxhbiBTY2htaXR0 XQ0KDQoNCltzZW5kIG1lIGEgbWVzc2FnZV0gPG1haWx0bzphbGFuLnNjaG1pdHRAcG9seXRlY2hu aXF1ZS5vcmc+DQoNClt0aGUgYXJjaGl2ZV0gPGh0dHBzOi8vYWxhbi5wZXRpdGVwb21tZS5uZXQv Y3duLz4NCg0KW1JTUyBmZWVkIG9mIHRoZSBhcmNoaXZlc10gPGh0dHBzOi8vYWxhbi5wZXRpdGVw b21tZS5uZXQvY3duL2N3bi5yc3M+DQoNCltjYW1sLWxpc3RdIDxodHRwczovL3N5bXBhLmlucmlh LmZyL3N5bXBhL2luZm8vY2FtbC1saXN0Pg0KDQpbQWxhbiBTY2htaXR0XSA8aHR0cHM6Ly9hbGFu LnBldGl0ZXBvbW1lLm5ldC8+DQoNCg== --=-=-= 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 16 to 23, 2024.

A Tour of the Living Library – A Safer FFI

Matt Walker announced

I've written a new blog post on the living library I announced= a few days ago. Please give it a read if you're interested in safe use of= Ctypes, or otherwise need lifetime management in OCaml.

Would love to hear your views in this thread!

https://fizzixnerd.com/blog/2024-07-17-touring-the-living-library/

first release of rpmfile

Mikhail announced

I'm happy to announce the first release of rpmfile, a small library for reading meta information fro= m RPM packages (version 3.0). It uses the Angstrom combinator parser librar= y, which allows it to perform streaming parsing using Lwt or Async.

How to get a package summary:

module Rpm_reader =3D Rpmfile.Reader (Rpmfile.Selector.All)

let metadata =3D Rp=
m_reader.of_file_exn "hello-2.12.1-1=
.7.x86_64.rpm"

Rpmfile.summary metadata
(* - : string =3D "A Friendly Greetin=
g Program" *)

The default reader module can read from a string or file, but has poor perf= ormance. It needs a selector module to select the tags to parse. The exampl= e uses Selector.All to parse all tags.=20

I am developing this library for my pet project to create a self-hosted RPM= repository management solution.=20

Thank you for your attention!

Dune dev meeting

maiste announced

We are organizing a new public Dune dev meeting on Wednesday, July, 24th= at 10am CET. It will be one hour long.

Whether you are a maintainer, a regular contributor, a new joiner or just c= urious, feel free to join! The goal of these meetings is to provide a place= to discuss the ongoing work together :smile: Below, you can find the agenda for this meeting:

:scroll: Agenda

  • Quick presentation about the attendees.
  • Presentation about the ongoing work in Dune.
  • Questions and Answers.
  • Information discussions

:chains: Links

Fighting Mutation with Mutation in Living

Matt Walker announced

New blog post about fixing the mistakes in the living library.= Please take a look if you're interested in interfacing ocaml with externa= l resources.

https://f= izzixnerd.com/blog/2024-07-21-fixing-living/

In particular, I think the library comes good with its guarantees now that

  1. if every function is properly dependent, and
  2. you only unsafe_free values that are disjoint from their d= ependencies, then

you will obtain a sound program when using the Ctypes ffi, in terms of ther= e being no use-after-free errors.

Please let me know if you disagree!

A small extension of Bigarray.Genarray adding iteration, mappi= ng and folding

NAlec announced

I needed a few functions which were missing in the OCaml library : Bigarray.Genarr= ay, and decided to write them for my own purpose :=20

  • Iteration on genarrays
  • mapping on genarrays
  • folding on genarrays

Today I believe this can be usefull for others, and may suffer a code inspe= ction as I am not that experienced in OCaml. I am ready to have this piece = of code evolve if it is usefull so even (and maybe first) a feedback on the= usefullness of such code is welcome.

The only alternative I was given was the famous Owl library, which was way = to heavy for my needs, and not easily usable (if not understandable). This = extension is very simple, it is its strenght. Ultimately, it could be merge= d in the standard library … maybe after some work indeed : you tell = me.=20

There is a clean documentation I guess, hope this can help : GenArrayIter

Looking forward to hearing from you all.

cudajit: Bindings to the cuda and nvrtc libraries

Lukasz Stafiniak announced

Hi! I'm happy to share cudajit 0.4.0: manually-selected bindings for Nvidia= GPU programming. cudajit should soon propagate to the opam repository. Bindings to the cuda and nvrtc libraries with a unified interface API documentation Currently supported:

  • Compiling a kernel with conversion to PTX, launching a kernel.
  • Synchronous and asynchronous memory copying.
  • Contexts and streams.
  • (GPU) device attributes.

Currently not supported:

  • Events.
  • CUDA graph features.
  • Cooperative kernel launch.

Let me know your needs so I can prioritize. PRs are also welcome!

Rpmfile 0.2.0 - changelog

Mikhail announced

Hello again, everyone. :wave: Today I want to tell you about what has chang= ed in a new version of my rpm= file library (previous topic) for reading meta-information from RPM= packages.Should I post this in the forum? I'm sorry.

Changes

  • Fixed incorrect string parsing. I just forgot to make advance after take_till (commit);
  • angstrom-unix is used by default to read files in the Reader module functions. Previously, a RPM package was read entire= ly into memory;
  • Optimized partial parsing of header= sections. Reduced unnecessary memory allocations (c= ommit);
  • Decoding integers (int8/int16/int32/int64) to native int in acce= ss functions[^1] (like Rpmfile.payload_size). You can also use= get to get "raw" values;
  • Improved compatibility with 4.0 version of RPM format by using nativ= e int;
  • Added a module Selector.Base to select only basic package = info (commit);
  • Some new access functions and output fields of the CLI utility.

rpmfile vs rpm -qi

Not a real "benchmark" for parsing 1.5 GB packages.

$ time rpm -qi repo/*.rpm
Executed in  226.82 millis    fish           external
   usr time  212.74 millis    1.06 millis  211.68 millis
   sys time   13.23 millis    0.00 millis   13.23 millis

$ time rpmfile repo/*.rpm
Executed in  153.97 millis    fish           external
   usr time  116.74 millis    0.00 millis  116.74 millis
   sys time   30.65 millis    1.47 millis   29.18 millis

Rpmfile doesn't verify signatures, which is why it is "faster".

What's next?

This is enough for my tasks, so there probably won't be a next release :col= d_face:

To-Do: functionality to work with signatures, read payload, implement write= r module for create packages.

Thank you for your attention!

P.S. I also want to apologize for my terrible English.=20

[^1]: The access function gets and decodes values from a metadata record.

Exploring the Docusaurus+Odoc combo

Mathieu Barbin announced

To OCaml & Docusaurus enthusiasts out there :camel:+ :sauropod:

Some time ago, I shared my experience using Docusaurus to document an OCaml= project, highlighting the integration between Docusaurus, ocaml-mdx, and t= he dune workflow (previous post here).

Today I wanted to share that I've resumed this exploration in documentation= tools to try and integrate odoc-generated pages into Docusaurus, with the = aim of creating a somewhat minimal template/example for this.

I've published my experiment here: https://mbarbin.github.io/doc-experiment-docusauru= s/.

Integrating odoc posed challenges - I've written about the (pragmatic) appr= oach I took here. I'm linking this odoc issue too, for reference about exploring more nat= ive solutions for this interop.

Have you too tried this "magic combo" of Docusaurus, Odoc, and OCaml tools?= And if so, how did you approach it? Do you have insights or suggestions? I= f this sparks your curiosity, please don't hesitate to engage with the repo= sitory.

Mopsa 1.0 – Modular Open Platform for Static Analysis

Rapha=C3=ABl Monat announced

On behalf of all its developers, I am glad to announce the release of Mopsa 1.0! You can just= opam install mopsa.

Mopsa stands for Modular and Open Platform for Static Analysis. It aims at = easing the development and use of static analyzers. More specifically, Mops= a is a generic framework for building sound static analyzer based on the th= eory of abstract interpretation. Mopsa is independent of language and abstr= action choices. Developers are free to add arbitrary abstractions (numeric,= pointer, memory, etc.) and syntax iterators for new languages. Mopsa encou= rages the development of independent abstractions which can cooperate or be= combined to improve precision.

Mopsa currently support the analysis of Python, C and Python+C programs. It= reports run-time errors on C programs and uncaught exceptions on Python pr= ograms. Our benchmarks provide an illustrative overview of what Mopsa can c= urrently analyze. All analyses currently provided are flow and context-sens= itive (i.e, control-flow operators are taken into account by the analysis, = and functions are analyzed by virtual inlining). The C analysis is actively= developed and maintained. The Python and Python+C analyses work on real-wo= rld examples, but are not actively developed.

Please note that Mopsa is an academic tool under development. Feel free to = submit issues if you= encounter any bug!

Additional resources:=20

OCaml 5 performance

Thomas Leonard announced

I've been trying out some tools to investigate performance problems in my O= Caml programs and I've written up my experiences here in case other people = find it useful:

The first post examines a case of slow IO in a concurrent Eio program, and = the second looks at poor GC performance in a multicore app.

In particular, it seems that minor GC performance is very sensitive to othe= r work running on the machine, since any domain being late will trigger the= others to sleep, e.g.

3D"e821895b934=

I'd be interested to know if others can shed more light on this, or have ot= her profiling tools they've found useful.

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.

--=-=-=--