From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Andy Moreton Newsgroups: gmane.emacs.devel Subject: Re: Replace trivial pcase occurrences in the Emacs sources Date: Thu, 01 Nov 2018 14:44:07 +0000 Message-ID: References: <86mur137n8.fsf@gmail.com> <20181029130132.GB4195@ACM> <20181029134722.GC4195@ACM> <83r2g8klf9.fsf@gnu.org> <9bfd9d19-3b6b-57cd-50a0-24660707768b@gmail.com> <20181030181434.GB5705@ACM> <87231bd6-d4a3-e117-06b9-774ec482d62f@gmail.com> <867ehzx9j8.fsf@gmail.com> <3806f024-c562-150a-99b7-53c9d36824ba@gmail.com> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: blaine.gmane.org 1541084585 30465 195.159.176.226 (1 Nov 2018 15:03:05 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Thu, 1 Nov 2018 15:03:05 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (windows-nt) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Nov 01 16:03:01 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 1gIEUv-0007oQ-47 for ged-emacs-devel@m.gmane.org; Thu, 01 Nov 2018 16:03:01 +0100 Original-Received: from localhost ([::1]:42474 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gIEX1-0007fO-ID for ged-emacs-devel@m.gmane.org; Thu, 01 Nov 2018 11:05:11 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:50296) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gIETe-0003tY-Nq for emacs-devel@gnu.org; Thu, 01 Nov 2018 11:01:46 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gIECr-0004A5-1K for emacs-devel@gnu.org; Thu, 01 Nov 2018 10:44:24 -0400 Original-Received: from [195.159.176.226] (port=58276 helo=blaine.gmane.org) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gIECp-00048B-EP for emacs-devel@gnu.org; Thu, 01 Nov 2018 10:44:20 -0400 Original-Received: from list by blaine.gmane.org with local (Exim 4.84_2) (envelope-from ) id 1gIEAc-0000ap-OA for emacs-devel@gnu.org; Thu, 01 Nov 2018 15:42:02 +0100 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 45 Original-X-Complaints-To: usenet@blaine.gmane.org Cancel-Lock: sha1:JsuzgF4T9huNh2UK5zFJzfnCZHE= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 195.159.176.226 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:230952 Archived-At: On Wed 31 Oct 2018, Clément Pit-Claudel wrote: > On 30/10/2018 20.08, Andy Moreton wrote: >> On Tue 30 Oct 2018, Clément Pit-Claudel wrote: >> >>> On 30/10/2018 14.14, Alan Mackenzie wrote: >>>> Hello, Clément. >>> >>> Hey Alan :) >>> >>>> On Tue, Oct 30, 2018 at 11:05:55 -0400, Clément Pit-Claudel wrote: >>>>> On 30/10/2018 10.16, Andy Moreton wrote: >>>>>> How are users meant to write reliable code using such constructs ? >>>> >>>>> Ensure that the pattern actually matches :) >>>> >>>> You mean, unless you can be 100% sure that the pattern will match, you >>>> mustn't use pcase-... constructs. That sounds equivalent to saying you >>>> shouldn't use these constructs at all. >>> >>> That's an odd conclusion. >> >> It is a perfectly reasonable conclusion. > > Why? A large number of ELisp functions don't say what they do if their > argument isn't of the expected type, or doesn't have the expected structure. > If you're not 100% sure that the argument has the right type, you shouldn't > use them (instead, you should do an appropriate check first). This is not > equivalent to saying that they shouldn't be used at all. > > I don't understand what's so special about pcase-*. Functions like lookup-key > or define-key don't tell you what happens if you pass something else that a > keymap; does that mean you should never use them? Same for a function like > `c-common-init' in cc-mode (the doc doesn't tell you what happens if you pass > a symbol that isn't a mode; AFAICT, if you do, you get an error but the > current buffer is left in a broken state. The difference is that the non-pcase constructs can document exactly which types are acceptable as arguments. For the pcase macros, the acceptable argument types are not fixed by the pcase macro, but depend on the patterns used. That is harder to explain clearly, and harder for the user to reason about correctness of the code that they write. AndyM