From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@sympa.inria.fr Delivered-To: caml-list@sympa.inria.fr 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 BE2007FA5E for ; Fri, 28 Apr 2017 16:51:02 +0200 (CEST) Authentication-Results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=yminsky@janestreet.com; spf=Pass smtp.mailfrom=yminsky@janestreet.com; spf=None smtp.helo=postmaster@mxout3.mail.janestreet.com Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of yminsky@janestreet.com) identity=pra; client-ip=38.105.200.229; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="yminsky@janestreet.com"; x-sender="yminsky@janestreet.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail3-smtp-sop.national.inria.fr: domain of yminsky@janestreet.com designates 38.105.200.229 as permitted sender) identity=mailfrom; client-ip=38.105.200.229; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="yminsky@janestreet.com"; x-sender="yminsky@janestreet.com"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of postmaster@mxout3.mail.janestreet.com) identity=helo; client-ip=38.105.200.229; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="yminsky@janestreet.com"; x-sender="postmaster@mxout3.mail.janestreet.com"; x-conformance=sidf_compatible IronPort-PHdr: =?us-ascii?q?9a23=3Aqhyq1REOq5DZv3sFwXfLHZ1GYnF86YWxBRYc798d?= =?us-ascii?q?s5kLTJ7yp8iwAkXT6L1XgUPTWs2DsrQf2raQ6/iocFdDyK7JiGoFfp1IWk1Nou?= =?us-ascii?q?QttCtkPvS4D1bmJuXhdS0wEZcKflZk+3amLRodQ56mNBXdrXKo8DEdBAj0OxZr?= =?us-ascii?q?KeTpAI7SiNm82/yv95HJbQhFgDWwbaluIBmqsA7cqtQYjYx+J6gr1xDHuGFIe+?= =?us-ascii?q?NYxWNpIVKcgRPx7dqu8ZBg7ipdpesv+9ZPXqvmcas4S6dYDCk9PGAu+MLrrxjD?= =?us-ascii?q?QhCR6XYaT24bjwBHAwnB7BH9Q5fxri73vfdz1SWGIcH7S60/VC+85Kl3VhDnlC?= =?us-ascii?q?YHNyY48G7JjMxwkLlbqw+lqxBm3oLYfJ2ZOP94c6jAf90VWHBBU95TWCxPAo2y?= =?us-ascii?q?YYgBAfcfM+lEtITyvUcCoAGkCAWwGO/iyDlFjWL2060g1OQhFBnL0w46ENIUt3?= =?us-ascii?q?TUqsj+OqATUeCz16nIzjXCZO5R1Db97YjIcxYhoeqPXbNwasfRy1MgFwXbgVWL?= =?us-ascii?q?tYzlJS2a2foRs2SB8+VgUuevhnchpgpsrDavwcIshZPIhoIT0l3E8CV4wIEpKt?= =?us-ascii?q?KiTU57ZcWrEIZRtyGeKoR6WMYiQ2VwtCkmzb0Gv5C7fCkFyJQ63R7QdeaLfJKU?= =?us-ascii?q?7R77VuaeOzF4i2x+eLKjnRa971avyvHmWsao11ZKqyxImcTPuHAVzxHe5MuKRu?= =?us-ascii?q?Fg8ku92TuDzR7f5v1YLUwui6bXNZoszqYumpYPtUnPBCz7lUXsgKOIa0kp9PKk?= =?us-ascii?q?5uXjb7jgu5SSLZV7ihvkPaQrgsG/Afo3MgwJX2WD/OS927rj/VDlQLhElPE2l7?= =?us-ascii?q?PWsJHeJcgBpK62GQlV3Zg46xajFTepzsoXnWUdIF1ZfxKHipDlO1DIIP/mEfey?= =?us-ascii?q?m1qhnTRxy/zbIrHsAo/BImbfnLv9Z7px9VBQxQ4rwdBa/Z1UC7UBIPzpWk/2sd?= =?us-ascii?q?zVFh84Mwm1w+bhE9V91YMfVHmNAqCDNqPdr0SI5v41I+aSeoAVpCzxJOQi5/7r?= =?us-ascii?q?lXM5g0MSfbG13ZsLb3C1BuhpLF+cYXrom9sBFWYKvhEiTOHxk12DUTtTZ26oUK?= =?us-ascii?q?4m5zE7DpimDYbZSYy3jryBxnTzIpoDT2ZHDhipGHvofpuNQ/oAZDPadsZnkzgs?= =?us-ascii?q?T7WqTI4lkxa0u1mp5aBgK7/l8zcfs9rG1d5u5PybwQA39DpvDNW10WiLQnpohG?= =?us-ascii?q?4FW3k926Up8h818UuKzaUt268QLtdU/f4cF15ibZM=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0ATAgCFVgNZfeXIaSZeHAEBBAEBCgEBF?= =?us-ascii?q?gEBAQMBAQEJAQEBhAuBDAeDYZtngmiNTodGLIJCgzYChCkHQhUBAQEBAQEBAQE?= =?us-ascii?q?BARIBAQkWCFeCMyIBgj8BAQEBAgEOFR0BASMUAQQLCwsNKgICIhIBBQEcBhMUi?= =?us-ascii?q?gMIAwuiXj+LHWuCJoMJAQEFh3kBAQEBAQEBAQIBAQEBAQEBAQEBFggShk2EeIU?= =?us-ascii?q?MglmCX51WhxuLc4JXiCSGY5JhFB+BFTWBLC4gCBkVRBkGhEOCKlmHbAEBAQ?= X-IPAS-Result: =?us-ascii?q?A0ATAgCFVgNZfeXIaSZeHAEBBAEBCgEBFgEBAQMBAQEJAQE?= =?us-ascii?q?BhAuBDAeDYZtngmiNTodGLIJCgzYChCkHQhUBAQEBAQEBAQEBARIBAQkWCFeCM?= =?us-ascii?q?yIBgj8BAQEBAgEOFR0BASMUAQQLCwsNKgICIhIBBQEcBhMUigMIAwuiXj+LHWu?= =?us-ascii?q?CJoMJAQEFh3kBAQEBAQEBAQIBAQEBAQEBAQEBFggShk2EeIUMglmCX51WhxuLc?= =?us-ascii?q?4JXiCSGY5JhFB+BFTWBLC4gCBkVRBkGhEOCKlmHbAEBAQ?= X-IronPort-AV: E=Sophos;i="5.37,388,1488841200"; d="scan'208,217";a="221874375" Received: from mxout3.mail.janestreet.com ([38.105.200.229]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 28 Apr 2017 16:51:01 +0200 Received: from [172.27.56.68] (helo=tot-qpr-mailcore1) by mxout3.mail.janestreet.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.89) (envelope-from ) id 1d47Ea-0008Vd-Mn for caml-list@inria.fr; Fri, 28 Apr 2017 10:51:00 -0400 X-JS-Flow: external X-JS-Scanner-attachment: (ok) No attachments Received: by tot-qpr-mailcore1 with ocaml/mailcore/mailcore 1.0+90 (160ed8e8fef2) (envelope-from ) id BZA1bU-A7sXvL-Vw; 2017-04-28 10:51:00.698767-04:00 Received: from mail-vk0-f69.google.com ([209.85.213.69]) by mxgoog1.mail.janestreet.com with esmtps (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.89) (envelope-from ) id 1d47Ea-0007Lv-Kh for caml-list@inria.fr; Fri, 28 Apr 2017 10:51:00 -0400 Received: by mail-vk0-f69.google.com with SMTP id e15so9553998vkd.4 for ; Fri, 28 Apr 2017 07:51:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=janestreet.com; s=google; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=rDTYQg+0xAZ9aw9kxn2xB1DIWKMeTcNyXvrpds3c5OI=; b=LcKqBbX2gBroRpdY+rUjYWopOtW+SHVVaDsT5izH/QokVbpTPUt2W+gQCeT9m0OZWj JUj2lfHy4DbooXBXK8xvHLpowsbfDX58x/12heZUA9i2cZfIsZtNC710SDWbKeY2xwGW FkVJmm0Q7MmNzmiFmTaVcA4WTAYWI/aO+ml2Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=rDTYQg+0xAZ9aw9kxn2xB1DIWKMeTcNyXvrpds3c5OI=; b=CWX1vpGLQI54peKQeYJUxuM3j0rvfMW23pf4HaMn2vqQT31veFVMWsoamea3fy2Rkc nDs0OxdbraClF2gVxL6wz/FwFL0ljXmIsA2kem8MmF/KdWPxxl3SS2ZjUONAJQ3rYajX TZQGzkg1oXmbpoac1DtSH4+T0n5LvWSHEcEBb5yOnkvNIDdz4bIq2OQb12X+eDgsJOiT m3tlL3cLQHRzCZ3jlGzizY2R9crfl56/DYsd6GKdZ5Axp/Z0d/xPCcIEaX3zPup5TopC pks7tF7wFN6C3OsC26XQVESLchCs0tF54+dlgPKFR7bcic89fM9IMB/5kmGTdF+5ZbyA 7A9g== X-Gm-Message-State: AN3rC/49MhQHhGf0/X1kAwJPrsut51wRQ1vujhJip/dtZsDO6VYifIK3 VW69FCDRLxQayaIMFV2FzeSDInf5w0Fp+2zW8wWNAdc/OhecA/OhWyBLTjcJzV4YH6XR3ONnEpr yEi8NoN8Jrh11tn7e X-Received: by 10.176.90.129 with SMTP id w1mr6584756uae.53.1493391060283; Fri, 28 Apr 2017 07:51:00 -0700 (PDT) X-Received: by 10.176.90.129 with SMTP id w1mr6584748uae.53.1493391060097; Fri, 28 Apr 2017 07:51:00 -0700 (PDT) MIME-Version: 1.0 Received: by 10.31.206.197 with HTTP; Fri, 28 Apr 2017 07:50:39 -0700 (PDT) In-Reply-To: <05BE6A9C-9AFB-4AD2-B577-23F4B88B86B3@recoil.org> References: <58FA5C34006504E200390857_0_88872@msllnjpmsgsv06> <20170428110718.GB13305@aepfle.de> <05BE6A9C-9AFB-4AD2-B577-23F4B88B86B3@recoil.org> From:Yaron Minsky Date: Fri, 28 Apr 2017 10:50:39 -0400 Message-ID: To:Anil Madhavapeddy Cc:Olaf Hering , Fabrice Le Fessant , Hongbo Zhang , "caml-list@inria.fr" Content-Type: multipart/alternative; boundary=f403045f88daa60826054e3b3379 X-JS-Exim-Data-Received: 2017-04-28 10:51:00-0400 X-JS-Processed-by: mailcore Subject: Re: [Caml-list] PPX is harmful to our community in the long term --f403045f88daa60826054e3b3379 Content-Type: text/plain; charset=UTF-8 We're very similar, except that we now do use a monadic syntax pretty pervasively. I wrote about this here: https://blogs.janestreet.com/let-syntax-and-why-you-should-use-it/ and am if anything more convinced that it's a worthwhile idiom. Monads and Applicatives are useful in so many places (beyond Async and Lwt) that having syntactic support for them is really nice, especially for the let .. and constructs. y On Fri, Apr 28, 2017 at 9:04 AM, Anil Madhavapeddy wrote: > On 28 Apr 2017, at 12:07, Olaf Hering wrote: > > > > On Fri, Apr 21, Fabrice Le Fessant wrote: > > > >> A lot of people use `autoconf` to generate `./configure` scripts, and > the > >> standard practice is to keep the `./configure` script so that people > don't need > >> to run `autoconf` to just compile and install the software. Maybe > projects > > > > This is and was a huge mistake to promote 'configure&&make' instead of > > autogen.sh&&configure&&make. Having a set of uptodate autotools > > installed is easy and cheap, they are not runtime dependencies. The > > result of that wrongdoing is a huge pile of broken and/or incomplete > configure.ac. > > Indeed -- we spent years in OpenBSD dealing with patching broken versions > of libtool scripts that embedded incorrect behaviour on our particular > platforms, > and were stubbornly included in upstream distributions without being > regenerated. > > > Do not repeat that mistake, whatever it means in the OCaml world. > > A similar analogue in the OCaml world may be the inclusion of autogenerated > files from _oasis. The inclusion of the autogenerated files like > myocamlbuild.ml > was a holdover from a pre-opam world when it was painful to install all the > build dependencies of OASIS. > > Nowadays, it's quite easy to install oasis and run `oasis setup` in a > project > to get the latest build rules, and the checked in autogenerated files only > get in the way and/or are increasingly complex due to having to deal with > multiple OCaml versions (e.g. for String.lowercase vs > String.lowercase_ascii). > > Bundling pre-evaluated ppx output in a release tarball runs the same > risk... > > Our experience in Mirage with PPX has been to find a balance -- we do not > let > it proliferate beyond type_conv usage or ppx_cstruct for binary formats. > Some > libraries (such as the TLS stack) do not use it all. One of the heaviest > uses > of camlp4 in the past for us was the pa_lwt syntax extension, and most > libraries > have gone towards explicit Lwt.bind() calls instead of using the ppx > alternative. > > I'm hopeful that ocaml-migrate-parsetree will make it easier for us to test > common libraries on dev versions of OCaml. In practise with 4.05, it has > been > non-ppx changes that have been blocking testing -- for instance the > close-on-exec > flag addition to the Unix module caused rippling breakage through Lwt and > other > platform libraries. That's not to say that PPX isn't a problem, but it has > gotten significantly easier to deal with since Fred's work on > migrate-parsetree. > > regards, > Anil > > --f403045f88daa60826054e3b3379 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
We're very similar, except that we now do use a monadi= c syntax pretty pervasively. I wrote about this here:

https://blogs.janestreet.com/let-syntax-and-why-you-should-use-it/

and am if anything more convinced that it's = a worthwhile idiom. Monads and Applicatives are useful in so many places (b= eyond Async and Lwt) that having syntactic support for them is really nice,= especially for the let .. and constructs.

y
=

On Fri, Apr= 28, 2017 at 9:04 AM, Anil Madhavapeddy <anil@recoil.org> wrot= e:
On 28 Apr 2017, at 12= :07, Olaf Hering <olaf@aepfle.de&g= t; wrote:
>
> On Fri, Apr 21, Fabrice Le Fessant wrote:
>
>> A lot of people use `autoconf` to generate `./configure` scripts, = and the
>> standard practice is to keep the `./configure` script so that peop= le don't need
>> to run `autoconf` to just compile and install the software. Maybe = projects
>
> This is and was a huge mistake to promote 'configure&&make= ' instead of
> autogen.sh&&configure&&make. Having a set of uptodate = autotools
> installed is easy and cheap, they are not runtime dependencies. The
> result of that wrongdoing is a huge pile of broken and/or incomplete <= a href=3D"http://configure.ac" rel=3D"noreferrer" target=3D"_blank">configu= re.ac.

Indeed -- we spent years in OpenBSD dealing with patching broken ver= sions
of libtool scripts that embedded incorrect behaviour on our particular plat= forms,
and were stubbornly included in upstream distributions without being regene= rated.

> Do not repeat that mistake, whatever it means in the OCaml world.

A similar analogue in the OCaml world may be the inclusion of autoge= nerated
files from _oasis.=C2=A0 The inclusion of the autogenerated files like myocaml= build.ml
was a holdover from a pre-opam world when it was painful to install all the=
build dependencies of OASIS.

Nowadays, it's quite easy to install oasis and run `oasis setup` in a p= roject
to get the latest build rules, and the checked in autogenerated files only<= br> get in the way and/or are increasingly complex due to having to deal with multiple OCaml versions (e.g. for String.lowercase vs String.lowercase_asci= i).

Bundling pre-evaluated ppx output in a release tarball runs the same risk..= .

Our experience in Mirage with PPX has been to find a balance -- we do not l= et
it proliferate beyond type_conv usage or ppx_cstruct for binary formats.=C2= =A0 Some
libraries (such as the TLS stack) do not use it all. One of the heaviest us= es
of camlp4 in the past for us was the pa_lwt syntax extension, and most libr= aries
have gone towards explicit Lwt.bind() calls instead of using the ppx altern= ative.

I'm hopeful that ocaml-migrate-parsetree will make it easier for us to = test
common libraries on dev versions of OCaml.=C2=A0 In practise with 4.05, it = has been
non-ppx changes that have been blocking testing -- for instance the close-o= n-exec
flag addition to the Unix module caused rippling breakage through Lwt and o= ther
platform libraries.=C2=A0 That's not to say that PPX isn't a proble= m, but it has
gotten significantly easier to deal with since Fred's work on migrate-p= arsetree.

regards,
Anil


--f403045f88daa60826054e3b3379--