From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: "Garreau\, Alexandre" Newsgroups: gmane.emacs.devel Subject: Re: Why is there no `until' in elisp? Date: Wed, 17 Oct 2018 11:14:38 +0200 Message-ID: <87pnw9gcjl.fsf@portable.galex-713.eu> References: <87murdu6to.fsf@portable.galex-713.eu> <87y3axjusi.fsf@portable.galex-713.eu> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Trace: blaine.gmane.org 1539767615 30799 195.159.176.226 (17 Oct 2018 09:13:35 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Wed, 17 Oct 2018 09:13:35 +0000 (UTC) User-Agent: Gnus (5.13), GNU Emacs 25.1.1 (i686-pc-linux-gnu) Cc: emacs-devel@gnu.org To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Oct 17 11:13:31 2018 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gChtR-0007ql-1E for ged-emacs-devel@m.gmane.org; Wed, 17 Oct 2018 11:13:29 +0200 Original-Received: from localhost ([::1]:34814 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gChvX-0006I1-8F for ged-emacs-devel@m.gmane.org; Wed, 17 Oct 2018 05:15:39 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:39010) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gChui-0006Gq-8B for emacs-devel@gnu.org; Wed, 17 Oct 2018 05:14:49 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gChuh-0002hC-2P for emacs-devel@gnu.org; Wed, 17 Oct 2018 05:14:48 -0400 Original-Received: from portable.galex-713.eu ([2a00:5884:8305::1]:41850) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gChug-0002dc-Ou for emacs-devel@gnu.org; Wed, 17 Oct 2018 05:14:46 -0400 Original-Received: from localhost ([::1] helo=portable.galex-713.eu) by portable.galex-713.eu with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1gChuZ-0003Io-3E; Wed, 17 Oct 2018 11:14:39 +0200 X-GPG-FINGERPRINT: E109 9988 4197 D7CB B0BC 5C23 8DEB 24BA 867D 3F7F X-Accept-Language: fr, en, it, eo In-Reply-To: (Stefan Monnier's message of "Tue, 16 Oct 2018 22:04:10 -0400") X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:5884:8305::1 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 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.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:230437 Archived-At: On 2018-10-16 at 22:04, Stefan Monnier wrote: >> I think `until' should refer to the version I gave because this is >> probably the one which is going to be implemented naively by most people, > > I completely reject this kind of argument. > > By that argument, we should avoid lexical scoping since dynamic scoping > is "the one which is going to be implemented naively by most people". I think you misunderstood me: that=E2=80=99d mean dynamic scoping is someth= ing to implement and keep aside and not remove when implementing lexical scoping, not that lexical scoping shouldn=E2=80=99t exist. I said it, I fi= nd your `until' very interesting, so it ought to exist even maybe with a not-longer name. It maybe could be an argument against default lexical scoping, while I=E2= =80=99m not against that (afaik it=E2=80=99s only for backward compatibility that e= macs keeps it as default right?), but then I think I should extend my statement to support what independant experience says, and apply what I said only to experiences about untested-enough things. >> also it can be useful to try to retrieve the last body return >> value, just as it is with `while': > > The body of those loops is made of side-effecting operations. > Usually side-effecting operations don't have useful return values. They might, but indeed less probably than the cond, so this is a point. Yet I might notice a cond might usually return a simple t/nil boolean (for instance when using comparison functions such as (< 1 2), which keep returning t instead of one of its arguments), which, in case of `until'/`while', will be known in advance. >> And then, of course, this introduce useless discrepancy toward >> symmetry within respect `while'. > > No discrepancy: it makes `until` return the value of its last test, just > like `while` already does (with `while` that value is always nil). No, `while' currently returns its last body, I just checked: (let ((x 0)) (while (< x 5) (setq x (+ 1 x))) 8)) Anyway for the non-`while1'/non-`until1' (let=E2=80=99s call them `whilen'/`untiln' for the sake of speaking) I was talking about a default `while' (and `until') that would return its cond when there=E2=80= =99s no body, if the working is similar as to `progn' as I stated.