From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Andrea Corallo via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#42147: 28.0.50; pure vs side-effect-free, missing optimizations? Date: Sat, 4 Jul 2020 16:13:48 +0000 (UTC) Message-ID: <1690361185.4397117.1593879228865@mail.yahoo.com> References: <3A9CC2A3-8307-47B2-8D80-795C0AF020E1@acm.org> <0433A879-C98D-4B1A-B85C-A15DA9289099@acm.org> <1621669100.2102667.1593639091621@mail.yahoo.com> <775819003.2516724.1593687594435@mail.yahoo.com> <5F2B4684-34D1-4474-8909-9F435369FE54@acm.org> <705260433.2731607.1593698199171@mail.yahoo.com> <6CF8EE58-9A49-40E7-AA86-48AB39BF94BA@acm.org> <28B19D86-343C-4126-B95F-1F38735F73F2@acm.org> <1288c6a5-545b-f68c-ff6b-7683db3e54c1@cs.ucla.edu> Reply-To: Andrea Corallo Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_4397116_2096925800.1593879228865" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="30633"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Paul Eggert , 42147@debbugs.gnu.org To: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= , Stefan Monnier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sat Jul 04 18:16:21 2020 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jrkpw-0007oI-OL for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 04 Jul 2020 18:16:20 +0200 Original-Received: from localhost ([::1]:58292 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jrkpq-0007dv-SC for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 04 Jul 2020 12:16:14 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:48080) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jrkog-0006y0-HS for bug-gnu-emacs@gnu.org; Sat, 04 Jul 2020 12:15:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:47901) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jrkog-0007Ld-8B for bug-gnu-emacs@gnu.org; Sat, 04 Jul 2020 12:15:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jrkog-0007UX-1r for bug-gnu-emacs@gnu.org; Sat, 04 Jul 2020 12:15:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Andrea Corallo Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 04 Jul 2020 16:15:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 42147 X-GNU-PR-Package: emacs Original-Received: via spool by 42147-submit@debbugs.gnu.org id=B42147.159387924228711 (code B ref 42147); Sat, 04 Jul 2020 16:15:02 +0000 Original-Received: (at 42147) by debbugs.gnu.org; 4 Jul 2020 16:14:02 +0000 Original-Received: from localhost ([127.0.0.1]:59447 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jrkni-0007T1-7x for submit@debbugs.gnu.org; Sat, 04 Jul 2020 12:14:02 -0400 Original-Received: from sonic302-20.consmr.mail.ir2.yahoo.com ([87.248.110.83]:34488) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jrkng-0007SO-0Q for 42147@debbugs.gnu.org; Sat, 04 Jul 2020 12:14:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.it; s=s2048; t=1593879231; bh=3oovBEUHVoKSWVxZAY2srMtfT3JjdyYs6s/TWdDFle4=; h=Date:From:To:Cc:In-Reply-To:References:Subject:From:Subject; b=uT5HDCF/SChZL4xrlvSKKK0xa2nqn+Me06Enw+Tzpf2RD8DBT8aNH5oLSoEvDwB8j247vQ5GiUrUHuTCif87AM0QkwZK4/Z2NvQDr+HIga7aeqHSpY8R3dYcwUiAlJWKqWqwMcbIq8RJzD8qEJoQaX1nWg+dtmH1DXvp+I6AMWJF95vIu+NGgMJaFEpaFPNEZ7NbNEFUGe+NbAIoKH0C+KMgl/aq+3K0mDTeKFehdzh2ZeJ0Cumwvg+f7nt/zfeClHuvKE4BZM1cGaR54m3Yn7cVC5iZLB+pCI5+9LM3ySXq6hjoa5Y4/su//sg7EUbZW9e/CkM0cVBiJlmYl/smiw== X-YMail-OSG: 4LeyuTsVM1mU5_LuYkH_NjZwLdGFC68BfT4Az5PdEkjE7jC_t2r9Nenn_tmg9vn Yq9sQqh2WQltT3lgRrNeey7hNJMraEkZWTXGsXtxrBpeyaB94pYLACf3ofL5mFdO_jKCRHiMFN1D sQsi7tr_JS.gx4s0p.zr9Tz1iyaBlfNnRljLO0pHj1N0tsxqlqTYfTXlGMiS4W2y6zvb1cVpxHYB H3mvdAogn9AdlamUR0Od0MY.dw5cEdLSiXRtplWeCyX1ipviiqqtqz6_c6FFujiXc9RiXwsWmH2. cs8L_e7_8kvnkHgzJQQs.G2l6asO3s1B7pI9Ds8VbXY6q3i5azkm4mM6Mm_eERJzXVTvq_G_woHK nUGf2VO5n9TQ7czGvvbJZ6xdRLpkd3DY.c0hOQd4E4pJZus6swxuzAV6qKf72fMLcfC0MnU_8VoM 37G2OdNBk2BvYRLMQW3LIDfKKNtHYRBA69tPB049ChYpfqm1..oQ4JhRe82jtJbQnnzFPSZAe8Qo XZoO1dYpM18aT8qbs3H8DVcwh0h5fr3wxfvO9ex5aGXXod9fs_OkeFEcH2D4afLucDWZgjMfHmpc NRaqpARrN95bdJgEmao97fbOQFrRTdMiufHV6A.2G9Lc7S_slV8ve75IaBNOR_SMq8xjY63edVsl UAdjdrxU27k.wJjJM8YyKvT.8iCH23px4mxPKdzUE40ZmEfWpErq1bPgW6XirkpN5vkxhEBkUCuJ GWdfVqzHLqbOflSbKxeZadME_RetC0tQrt9nC9vWgJ019tQ8FAVdo8UYNN2InT2.rIevGYxLvNeE K673I.ElnTJYsQJ6NNtcsEMqtLT4mTTyGRQV9o9ilZ Original-Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.ir2.yahoo.com with HTTP; Sat, 4 Jul 2020 16:13:51 +0000 In-Reply-To: X-Mailer: WebService/1.1.16197 YMailNorrin Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:182698 Archived-At: ------=_Part_4397116_2096925800.1593879228865 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Mattias Engdeg=C3=A5rd writes: > 3 juli 2020 kl. 21.05 skrev Andrea Corallo : > >> attached the updated version of the patch updating the pure function >> classification. > > Thanks Andrea! Philipp Stephani raised the interesting question of (essen= tially) whether 'car' is pure. For the purposes of the current constant fol= ding in the byte compiler the answer is yes, but perhaps you have wider amb= itions in your work? > > Clearly, (car X) cannot be moved past some operations with side-effects i= f X is aliased: > > (let* ((x (list 'a)) >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (y (car x))) >=C2=A0=C2=A0 (f x) >=C2=A0=C2=A0 y) > > Here, (car x) cannot be sunk past the call to f despite x remaining uncha= nged (assuming lexical binding). > It would be useful to know more exactly what notion of purity you require= . Thanks for the observation, today I was studying the situation. I think the notion of purity has to be the same one we use in the byte compiler.=C2=A0 The trickiness is in if the considered object is immutable = or not.=C2=A0 The optimizer must stay in the boundary of what is allowed in th= is regard. To put in elisp what I think ATM: (defun aaa () =C2=A0 (let ((x (list 1 2))) =C2=A0=C2=A0=C2=A0 (1+ (car x)) ; <=3D legally optimizable =C2=A0=C2=A0=C2=A0 )) (defun bbb () =C2=A0 (let ((x (list 1 2))) =C2=A0=C2=A0=C2=A0 (f x)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ; f is n= ot pure =C2=A0=C2=A0=C2=A0 (1+ (car x)) ; <=3D cannot optimize =C2=A0=C2=A0=C2=A0 )) (defun ccc () =C2=A0 (let ((x '(1 2))) =C2=A0=C2=A0=C2=A0 (f x)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ; f is n= ot pure =C2=A0=C2=A0=C2=A0 (1+ (car x)) ; <=3D legally optimizable because immutabl= e =C2=A0=C2=A0=C2=A0 )) (defun ddd () =C2=A0 (let ((x (list 1 2))) =C2=A0=C2=A0=C2=A0 (f x)=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ; f is p= ure =C2=A0=C2=A0=C2=A0 (1+ (car x)) ; <=3D legally optimizable =C2=A0=C2=A0=C2=A0 )) Now given we are not constant folding `cons' we are not materializing conses, as a consequence of these three example we would optimize only `ccc' if we include `car' as pure.=C2=A0 AFAIU this is correct given modifying an immutable object in `f' would be undefined. So yes for me `car' is pure and I think we should add it to the list. BTW reading the code of the native compiler I realized I am already extrapolating for use a very similar list of optimizable functions to the o= ne proposed.=C2=A0 I still think would quite cleaner to classify these in byte-opt.el. Attached the updated patch where I'm adding car, car-safe, cdr, cdr-safe, max, min. Feedback welcome Thanks =C2=A0 Andrea ------=_Part_4397116_2096925800.1593879228865 Content-Type: text/x-patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-Add-a-number-of-functions-to-pure-fns-bug-42147.patch" Content-ID: <227aaa37-7b0f-c793-8ef4-92bce9e1b6fc@yahoo.com> RnJvbSAxNWE3ZGM5MWEzZWYyNzhlMWJlYWE4MzRmZGY5NjE4NDRmN2I4MGM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZWEgQ29yYWxsbyA8YWtybEBzZGYub3JnPgpEYXRlOiBX ZWQsIDEgSnVsIDIwMjAgMTA6MDc6NTcgKzAyMDAKU3ViamVjdDogW1BBVENIXSAqIEFkZCBhIG51 bWJlciBvZiBmdW5jdGlvbnMgdG8gcHVyZS1mbnMgKGJ1ZyM0MjE0NykKCgkqIGxpc3AvZW1hY3Mt bGlzcC9ieXRlLW9wdC5lbCAocHVyZS1mbnMpOiBBZGQ6IC89LCA8LCA8PSwgPSwKCT4sID49LCBh YnMsIGFycmF5cCwgYXNoLCBhc3NvYywgYXNzcSwgYm9vbC12ZWN0b3ItcCBjYXIsCgljYXItc2Fm ZSwgY2RyLCBjZHItc2FmZSwgY2hhci1vci1zdHJpbmctcCwgY2hhcmFjdGVycCwgY29uc3AsCgll cSwgZXFsLCBlcXVhbCwgZXhwdCwgZmxvYXRwLCBoYXNoLXRhYmxlLXAsIGlkZW50aXR5LAoJaW50 ZWdlci1vci1tYXJrZXItcCwgaW50ZWdlcnAsIGtleXdvcmRwLCBsZW5ndGgsIGxpc3RwLCBtYXgs CgltZW1iZXIsIG1lbXEsIG1lbXFsLCBtaW4sIG1vZCwgbmF0bnVtcCwgbmxpc3RwLCBub3QsIG51 bGwsCgludW1iZXItb3ItbWFya2VyLXAsIG51bWJlcnAsIHByb3Blci1saXN0LXAsIHJhc3NxLAoJ c2FmZS1sZW5ndGgsIHNlcXVlbmNlcCwgc3RyaW5nLWVxdWFsLCBzdHJpbmctbGVzc3AsIHN0cmlu ZzwsCglzdHJpbmc9LCBzdHJpbmdwLCBzeW1ib2xwLCB2ZWN0b3JwLgotLS0KIGxpc3AvZW1hY3Mt bGlzcC9ieXRlLW9wdC5lbCB8IDExICsrKysrKysrLS0tCiAxIGZpbGUgY2hhbmdlZCwgOCBpbnNl cnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpc3AvZW1hY3MtbGlzcC9i eXRlLW9wdC5lbCBiL2xpc3AvZW1hY3MtbGlzcC9ieXRlLW9wdC5lbAppbmRleCAxMmJkZThmYWYz Li42YWQ4ZjExY2Q3IDEwMDY0NAotLS0gYS9saXNwL2VtYWNzLWxpc3AvYnl0ZS1vcHQuZWwKKysr IGIvbGlzcC9lbWFjcy1saXNwL2J5dGUtb3B0LmVsCkBAIC0xMzA3LDkgKzEzMDcsMTQgQEAgYnl0 ZS1vcHRpbWl6ZS1zZXQKIDs7IHZhbHVlcyBpZiBhIG1hcmtlciBpcyBtb3ZlZC4KIAogKGxldCAo KHB1cmUtZm5zCi0gICAgICAgJyglIGNvbmNhdCBsb2dhbmQgbG9nY291bnQgbG9naW9yIGxvZ25v dCBsb2d4b3IKLQkgcmVnZXhwLW9wdCByZWdleHAtcXVvdGUKLQkgc3RyaW5nLXRvLWNoYXIgc3Ry aW5nLXRvLXN5bnRheCBzeW1ib2wtbmFtZSkpKQorICAgICAgICcoJSAvPSA8IDw9ID0gPiA+PSBh YnMgYXJyYXlwIGFzaCBhc3NvYyBhc3NxIGJvb2wtdmVjdG9yLXAgY2FyIGNhci1zYWZlCisgICAg ICAgICBjZHIgY2RyLXNhZmUgY2hhci1vci1zdHJpbmctcCBjaGFyYWN0ZXJwIGNvbmNhdCBjb25z cCBlcSBlcWwgZXF1YWwKKyAgICAgICAgIGV4cHQgZmxvYXRwIGhhc2gtdGFibGUtcCBpZGVudGl0 eSBpbnRlZ2VyLW9yLW1hcmtlci1wIGludGVnZXJwCisgICAgICAgICBrZXl3b3JkcCBsZW5ndGgg bGlzdHAgbG9nYW5kIGxvZ2NvdW50IGxvZ2lvciBsb2dub3QgbG9neG9yIG1heCBtZW1iZXIKKyAg ICAgICAgIG1lbXEgbWVtcWwgbWluIG1vZCBuYXRudW1wIG5saXN0cCBub3QgbnVsbCBudW1iZXIt b3ItbWFya2VyLXAsIG51bWJlcnAKKyAgICAgICAgIHByb3Blci1saXN0LXAgcmFzc3EgcmVnZXhw LW9wdCByZWdleHAtcXVvdGUgc2FmZS1sZW5ndGggc2VxdWVuY2VwCisgICAgICAgICBzdHJpbmct ZXF1YWwgc3RyaW5nLWxlc3NwIHN0cmluZy10by1jaGFyIHN0cmluZy10by1zeW50YXggc3RyaW5n PAorICAgICAgICAgc3RyaW5nPSBzdHJpbmdwIHN5bWJvbC1uYW1lIHN5bWJvbHAgdmVjdG9ycCkp KQogICAod2hpbGUgcHVyZS1mbnMKICAgICAocHV0IChjYXIgcHVyZS1mbnMpICdwdXJlIHQpCiAg ICAgKHNldHEgcHVyZS1mbnMgKGNkciBwdXJlLWZucykpKQotLSAKMi4xNy4xCgo= ------=_Part_4397116_2096925800.1593879228865--