From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Daniel Mendler via "Emacs development discussions." Newsgroups: gmane.emacs.devel Subject: Re: Distinguishing `consp` and `functionp` Date: Sat, 27 Jan 2024 01:22:22 +0100 Message-ID: <87h6iz39s1.fsf@daniel-mendler.de> References: <86msssble8.fsf@gnu.org> Reply-To: Daniel Mendler Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="19791"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Cc: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= , Eli Zaretskii , emacs-devel To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sat Jan 27 01:23:13 2024 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 1rTWTY-0004nA-JA for ged-emacs-devel@m.gmane-mx.org; Sat, 27 Jan 2024 01:23:12 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rTWSv-0002av-VD; Fri, 26 Jan 2024 19:22:33 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rTWSq-0002ah-Su for emacs-devel@gnu.org; Fri, 26 Jan 2024 19:22:29 -0500 Original-Received: from server.qxqx.de ([2a01:4f8:c012:9177::1] helo=mail.qxqx.de) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rTWSo-0003DZ-RS; Fri, 26 Jan 2024 19:22:28 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=daniel-mendler.de; s=key; h=Content-Type:MIME-Version:Message-ID:Date: References:In-Reply-To:Subject:Cc:To:From:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=VM4JhhyPas2kmQ6nnZZlzWq++ldJD1Pvn/KvRyecmL4=; b=JtXOEKYF32SgzWANLmYWUkRQUu fRIzdGDXfe0sDGtv7dWJcNt2HaeiFil/lgRIsf1Iy6j2fnDMiKFlWw3TNAWgHBlDKuMnPK6SJofQr xbwOjeJdPW4CBILFS0gxQV32w2qEuYGK6oFjzatO3Vrl67OL8K/xAXBddy3deLQYfN9k=; In-Reply-To: (Stefan Monnier's message of "Fri, 26 Jan 2024 18:55:46 -0500") Received-SPF: pass client-ip=2a01:4f8:c012:9177::1; envelope-from=mail@daniel-mendler.de; helo=mail.qxqx.de X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-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-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:315446 Archived-At: Stefan Monnier writes: >>> Rather I'm annoyed at the corner cases where >>> >>> (functionp (mapcar ...)) >>> >>> can occasionally return t, simply because the returned list happens to >>> start with the symbol `closure` or `lambda`. >> >> So you want this to return nil, but still allow 'funcall' of >> said returned lists? > > That's right: for compatibility reasons, I think we have to support the > `funcall` case for the foreseeable future (and really, it costs very > little to do so), but I think the `functionp` case doesn't need that > level of backward compatibility. What about only dropping the list-based closure representation as a first step, switching it over to a vector-based one? (functionp '(closure (t) nil t)) => nil (currently t) (funcall '(closure (t) nil t)) => error (currently t) Unfortunately quoted lambdas are still common in packages which have not been updated for longer. Don't you intent to preserve the following coherent behavior of functionp and funcall? (functionp '(lambda () t)) => t (funcall '(lambda () t)) => t Would it make sense to introduce a byte compiler warning, triggered if a quoted lambda is detected? There will be occasional false positives however. > Stefan