From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.devel Subject: Re: How to canonicalize a time object Date: Sun, 14 Aug 2022 14:17:29 -0700 Organization: UCLA Computer Science Department Message-ID: <42f39968-e861-f25b-ece3-91fd02d491f6@cs.ucla.edu> References: <877d3ahlxi.fsf@gnus.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------cKxRZVLcWC04ivG0E09XO7T0" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="27330"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Cc: emacs-devel@gnu.org To: Stefan Monnier , Lars Ingebrigtsen Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sun Aug 14 23:18:39 2022 Return-path: Envelope-to: ged-emacs-devel@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 1oNL0J-0006y1-0k for ged-emacs-devel@m.gmane-mx.org; Sun, 14 Aug 2022 23:18:39 +0200 Original-Received: from localhost ([::1]:41194 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oNL0H-0008NV-87 for ged-emacs-devel@m.gmane-mx.org; Sun, 14 Aug 2022 17:18:37 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:39362) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oNKzJ-0007g0-Fj for emacs-devel@gnu.org; Sun, 14 Aug 2022 17:17:37 -0400 Original-Received: from zimbra.cs.ucla.edu ([131.179.128.68]:59986) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oNKzG-00010D-Ht for emacs-devel@gnu.org; Sun, 14 Aug 2022 17:17:36 -0400 Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 067C516010A; Sun, 14 Aug 2022 14:17:31 -0700 (PDT) Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id mL4L-A7kZsAb; Sun, 14 Aug 2022 14:17:29 -0700 (PDT) Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id E1F9716010B; Sun, 14 Aug 2022 14:17:29 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id zNZTcbjdWUZG; Sun, 14 Aug 2022 14:17:29 -0700 (PDT) Original-Received: from [192.168.1.9] (cpe-172-91-119-151.socal.res.rr.com [172.91.119.151]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id B0B8916010A; Sun, 14 Aug 2022 14:17:29 -0700 (PDT) Content-Language: en-US In-Reply-To: Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, NICE_REPLY_A=-0.001, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:293467 Archived-At: This is a multi-part message in MIME format. --------------cKxRZVLcWC04ivG0E09XO7T0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 8/14/22 10:15, Stefan Monnier wrote: > E.g. if we do (time-convert FLOAT t) > the returned value will be of the form (TICKS . 2^51) and for > (time-convert (HI LOW US) t) it'll be (TICKS . 10^6), but > `lisp_to_timespec` doesn't seem to have a fast path for 2^51 and I'm not > sure it has one for 10^6 (nor 10^12 used for (HI LOW US PS)). I hadn't written fast paths for those, no. The idea is that (time-convert X t) should be best if you want full precision. If you want only one-second precision, (time-convert X 'integer) should yield timestamps that are a bit faster, because there's no need for consing. I just now looked at the code and found a couple of places where integer timestamps were significantly slower, and wrote and installed the attached performance tweaks to fix that. > - There doesn't seem to be an easy way to get `timespec_hz` from ELisp. Why would code need timespec_hz, if (time-convert X t) suffices for conversion to full precision? Code that needs timespec_hz can get it with (cdr (time-convert nil t)). If that's too cumbersome we could add a builtin integer for it, though there's a caveat here: some timestamps can use a different hz value than others, so the builtin integer would be only for the timestamps retrieved from (time-convert ... t) and not necessarily for other (TICKS . HZ) timestamps retrieved from the system via file-attributes etc. To avoid this confusion it might be better not to have that builtin integer. > - It's cumbersome to find out if a time value is a whole number > of seconds. If (time-equal-p X (time-convert X 'integer)) is too cumbersome, we could add a function to do that. > Of course, maybe we shouldn't care, and just presume that the slow path > which does a GMP mul+div is plenty fast anyway. Yes, the goal is that this stuff "just works" without people having to worry overmuch about speed. --------------cKxRZVLcWC04ivG0E09XO7T0 Content-Type: text/x-patch; charset=UTF-8; name="0001-Decode-time-conses-before-floats.patch" Content-Disposition: attachment; filename="0001-Decode-time-conses-before-floats.patch" Content-Transfer-Encoding: base64 RnJvbSAxNWFiYTVlNjQ0OTY0MTRlYzQ2NTkxMThmOTEwNTE2ZDJkYzVlOGI0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBTdW4sIDE0IEF1ZyAyMDIyIDEzOjQ4OjExIC0wNzAwClN1YmplY3Q6IFtQQVRD SCAxLzJdIERlY29kZSB0aW1lIGNvbnNlcyBiZWZvcmUgZmxvYXRzCgoqIHNyYy90aW1lZm5z LmMgKGRlY29kZV9saXNwX3RpbWUpOiBUZXN0IGZvciBjb25zZXMgYmVmb3JlIGZsb2F0cywK YXMgY29uc2VzIGFyZSBtb3JlIGNvbW1vbi4KLS0tCiBzcmMvdGltZWZucy5jIHwgMjIgKysr KysrKysrKystLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyks IDExIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy90aW1lZm5zLmMgYi9zcmMvdGlt ZWZucy5jCmluZGV4IGVkZmQ3M2U5YjguLmI5ZDlhNGVkOTcgMTAwNjQ0Ci0tLSBhL3NyYy90 aW1lZm5zLmMKKysrIGIvc3JjL3RpbWVmbnMuYwpAQCAtODIyLDE3ICs4MjIsNiBAQCBkZWNv ZGVfbGlzcF90aW1lIChMaXNwX09iamVjdCBzcGVjaWZpZWRfdGltZSwgYm9vbCBkZWNvZGVf c2Vjc19vbmx5LAogCiAgIGlmIChOSUxQIChzcGVjaWZpZWRfdGltZSkpCiAgICAgZm9ybSA9 IFRJTUVGT1JNX05JTDsKLSAgZWxzZSBpZiAoRkxPQVRQIChzcGVjaWZpZWRfdGltZSkpCi0g ICAgewotICAgICAgZG91YmxlIGQgPSBYRkxPQVRfREFUQSAoc3BlY2lmaWVkX3RpbWUpOwot ICAgICAgaWYgKCFpc2Zpbml0ZSAoZCkpCi0JdGltZV9lcnJvciAoaXNuYW4gKGQpID8gRURP TSA6IEVPVkVSRkxPVyk7Ci0gICAgICBpZiAocmVzdWx0KQotCWRlY29kZV9mbG9hdF90aW1l IChkLCByZXN1bHQpOwotICAgICAgZWxzZQotCSpkcmVzdWx0ID0gZDsKLSAgICAgIHJldHVy biBUSU1FRk9STV9GTE9BVDsKLSAgICB9CiAgIGVsc2UgaWYgKENPTlNQIChzcGVjaWZpZWRf dGltZSkpCiAgICAgewogICAgICAgaGlnaCA9IFhDQVIgKHNwZWNpZmllZF90aW1lKTsKQEAg LTg3Miw2ICs4NjEsMTcgQEAgZGVjb2RlX2xpc3BfdGltZSAoTGlzcF9PYmplY3Qgc3BlY2lm aWVkX3RpbWUsIGJvb2wgZGVjb2RlX3NlY3Nfb25seSwKICAgICAgIGlmICghIElOVEVHRVJQ IChsb3cpKQogCWZvcm0gPSBUSU1FRk9STV9JTlZBTElEOwogICAgIH0KKyAgZWxzZSBpZiAo RkxPQVRQIChzcGVjaWZpZWRfdGltZSkpCisgICAgeworICAgICAgZG91YmxlIGQgPSBYRkxP QVRfREFUQSAoc3BlY2lmaWVkX3RpbWUpOworICAgICAgaWYgKCFpc2Zpbml0ZSAoZCkpCisJ dGltZV9lcnJvciAoaXNuYW4gKGQpID8gRURPTSA6IEVPVkVSRkxPVyk7CisgICAgICBpZiAo cmVzdWx0KQorCWRlY29kZV9mbG9hdF90aW1lIChkLCByZXN1bHQpOworICAgICAgZWxzZQor CSpkcmVzdWx0ID0gZDsKKyAgICAgIHJldHVybiBUSU1FRk9STV9GTE9BVDsKKyAgICB9CiAK ICAgaW50IGVyciA9IGRlY29kZV90aW1lX2NvbXBvbmVudHMgKGZvcm0sIGhpZ2gsIGxvdywg dXNlYywgcHNlYywKIAkJCQkgICAgcmVzdWx0LCBkcmVzdWx0KTsKLS0gCjIuMzQuMQoK --------------cKxRZVLcWC04ivG0E09XO7T0 Content-Type: text/x-patch; charset=UTF-8; name="0002-Improve-timefns-speed-on-integers.patch" Content-Disposition: attachment; filename="0002-Improve-timefns-speed-on-integers.patch" Content-Transfer-Encoding: base64 RnJvbSBhNjRmZTZmMzE5ODdjYTRhMmM4YWM2Yjk2Yjk3YzZhNDQwYWViMmEyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBTdW4sIDE0IEF1ZyAyMDIyIDEzOjQ4OjExIC0wNzAwClN1YmplY3Q6IFtQQVRD SCAyLzJdIEltcHJvdmUgdGltZWZucyBzcGVlZCBvbiBpbnRlZ2VycwoKKiBzcmMvdGltZWZu cy5jIChkZWNvZGVfbGlzcF90aW1lKSBbRkFTVEVSX1RJTUVGTlNdOgpTcGVlZCB1cCB3aGVu IFNQRUNJRklFRF9USU1FIGlzIGFuIGludGVnZXIuCih0aW1lX2NtcCkgW0ZBU1RFUl9USU1F Rk5TXTogU3BlZWQgdXAgd2hlbiBjb21wYXJpbmcgaW50ZWdlcnMuCi0tLQogc3JjL3RpbWVm bnMuYyB8IDE5ICsrKysrKysrKysrKysrKy0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxNSBpbnNl cnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy90aW1lZm5zLmMg Yi9zcmMvdGltZWZucy5jCmluZGV4IGI5ZDlhNGVkOTcuLmVlZDJlZGYxY2MgMTAwNjQ0Ci0t LSBhL3NyYy90aW1lZm5zLmMKKysrIGIvc3JjL3RpbWVmbnMuYwpAQCAtODYxLDYgKzg2MSwx MSBAQCBkZWNvZGVfbGlzcF90aW1lIChMaXNwX09iamVjdCBzcGVjaWZpZWRfdGltZSwgYm9v bCBkZWNvZGVfc2Vjc19vbmx5LAogICAgICAgaWYgKCEgSU5URUdFUlAgKGxvdykpCiAJZm9y bSA9IFRJTUVGT1JNX0lOVkFMSUQ7CiAgICAgfQorICBlbHNlIGlmIChGQVNURVJfVElNRUZO UyAmJiBJTlRFR0VSUCAoc3BlY2lmaWVkX3RpbWUpKQorICAgIHsKKyAgICAgIGRlY29kZV90 aWNrc19oeiAoc3BlY2lmaWVkX3RpbWUsIG1ha2VfZml4bnVtICgxKSwgcmVzdWx0LCBkcmVz dWx0KTsKKyAgICAgIHJldHVybiBmb3JtOworICAgIH0KICAgZWxzZSBpZiAoRkxPQVRQIChz cGVjaWZpZWRfdGltZSkpCiAgICAgewogICAgICAgZG91YmxlIGQgPSBYRkxPQVRfREFUQSAo c3BlY2lmaWVkX3RpbWUpOwpAQCAtMTIwNiwxMCArMTIxMSwxNiBAQCB0aW1lX2NtcCAoTGlz cF9PYmplY3QgYSwgTGlzcF9PYmplY3QgYikKICAgICByZXR1cm4gMDsKIAogICAvKiBDb21w YXJlIChYIC4gWikgdG8gKFkgLiBaKSBxdWlja2x5IGlmIFggYW5kIFkgYXJlIGZpeG51bXMu Ci0gICAgIERvIG5vdCBpbnNwZWN0IFosIGFzIGl0IGlzIE9LIHRvIG5vdCBzaWduYWwgaWYg QSBhbmQgQiBhcmUgaW52YWxpZC4gICovCi0gIGlmIChGQVNURVJfVElNRUZOUyAmJiBDT05T UCAoYSkgJiYgQ09OU1AgKGIpICYmIEJBU0VfRVEgKFhDRFIgKGEpLCBYQ0RSIChiKSkKLSAg ICAgICYmIEZJWE5VTVAgKFhDQVIgKGEpKSAmJiBGSVhOVU1QIChYQ0FSIChiKSkpCi0gICAg cmV0dXJuIFhGSVhOVU0gKFhDQVIgKGEpKSAtIFhGSVhOVU0gKFhDQVIgKGIpKTsKKyAgICAg RG8gbm90IGluc3BlY3QgWiwgYXMgaXQgaXMgT0sgdG8gbm90IHNpZ25hbCBpZiBBIGFuZCBC IGFyZSBpbnZhbGlkLgorICAgICBBbHNvLCBjb21wYXJlIFggdG8gWSBxdWlja2x5IGlmIFgg YW5kIFkgYXJlIGZpeG51bXMuICAqLworICBpZiAoRkFTVEVSX1RJTUVGTlMpCisgICAgewor ICAgICAgTGlzcF9PYmplY3QgeCA9IGEsIHkgPSBiOworICAgICAgaWYgKENPTlNQIChhKSAm JiBDT05TUCAoYikgJiYgQkFTRV9FUSAoWENEUiAoYSksIFhDRFIgKGIpKSkKKwl4ID0gWENB UiAoYSksIHkgPSBYQ0FSIChiKTsKKyAgICAgIGlmIChGSVhOVU1QICh4KSAmJiBGSVhOVU1Q ICh5KSkKKwlyZXR1cm4gWEZJWE5VTSAoeCkgLSBYRklYTlVNICh5KTsKKyAgICB9CiAKICAg LyogQ29tcGFyZSAoQVRJQ0tTIC4gQVopIHRvIChCVElDS1MgLiBCSFopIGJ5IGNvbXBhcmlu ZwogICAgICBBVElDS1MgKiBCSFogdG8gQlRJQ0tTICogQUhaLiAgKi8KLS0gCjIuMzQuMQoK --------------cKxRZVLcWC04ivG0E09XO7T0--