From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Emanuel Berg Newsgroups: gmane.emacs.devel Subject: Re: [External] : optional argument defaults in `cl-defun' vs old way - warning, discrepancy! Date: Sat, 07 Oct 2023 15:12:22 +0200 Message-ID: <87r0m61sqx.fsf@dataswamp.org> References: <871qe832jl.fsf@dataswamp.org> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="33145"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) To: emacs-devel@gnu.org Cancel-Lock: sha1:r+Qtx54l8d1YM6uz5Otj+EHRPyU= Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sat Oct 07 15:52:23 2023 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 1qp7jC-0008Pv-No for ged-emacs-devel@m.gmane-mx.org; Sat, 07 Oct 2023 15:52:22 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qp7iL-0007Ug-Vl; Sat, 07 Oct 2023 09:51:30 -0400 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 1qp76h-0004e0-9X for emacs-devel@gnu.org; Sat, 07 Oct 2023 09:12:35 -0400 Original-Received: from ciao.gmane.io ([116.202.254.214]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qp76f-0003sm-77 for emacs-devel@gnu.org; Sat, 07 Oct 2023 09:12:34 -0400 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1qp76c-0006P1-Nm for emacs-devel@gnu.org; Sat, 07 Oct 2023 15:12:30 +0200 X-Injected-Via-Gmane: http://gmane.org/ Mail-Followup-To: emacs-devel@gnu.org Mail-Copies-To: never Received-SPF: pass client-ip=116.202.254.214; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -15 X-Spam_score: -1.6 X-Spam_bar: - X-Spam_report: (-1.6 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.25, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Sat, 07 Oct 2023 09:51:28 -0400 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:311345 Archived-At: Drew Adams wrote: > I think what you really mean to say is that `&optional foo' > can convey something a bit different to human readers, in > terms of intent than does `&optional (foo nil)`. > > That's true. > > But I wouldn't call the latter "the CL way" and the former > "the Elisp way". The real CL way is to let you use > either/both. Call it the `defun' way vs the `cl-defun' way then. I used to perceive the situation like this: - with defun you have to always check the optional args for nil and, if so, set them to a default value - with cl-defun, you don't have to do that because you can use the syntax to do that However now it turns out that syntax isn't equivalent to the defun way, so sometimes you have to check for SVAR. So the advantages with cl-defun in this case - i.e. optional args - which was a more compact syntax - is dubious since it is not exhaustive, and sometimes (when?) you have to check for SVAR. So defun is more clear (nil always means use the default) and you also always have to check and set this, compared to cl-defun when you sometimes has to do something and you have to actively figure out when. -- underground experts united https://dataswamp.org/~incal