Re: Fixing MSVC's inability to detect elog(ERROR) does not return

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: David Rowley <dgrowleyml(at)gmail(dot)com>
Cc: Peter Eisentraut <peter(at)eisentraut(dot)org>, PostgreSQL Developers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: Fixing MSVC's inability to detect elog(ERROR) does not return
Date: 2025-09-17 04:02:56
Message-ID: 1438905.1758081776@sss.pgh.pa.us
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

David Rowley <dgrowleyml(at)gmail(dot)com> writes:
> On Wed, 3 Sept 2025 at 23:32, Peter Eisentraut <peter(at)eisentraut(dot)org> wrote:
>> Btw., I think we should stick to the *_p() naming (for "predicate", I
>> think) for compiler-intrinsic-affiliated functions/macros that report
>> boolean results.

> I didn't know what the _p suffix was meant to indicate. Do you have a
> link which states that it's for "predicate"?

It absolutely stands for "predicate". That's an ancient Lisp-ism.
Here's the first link I found with some quick googling:

https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node69.html

A predicate is a function that tests for some condition involving
its arguments and returns nil if the condition is false, or some
non-nil value if the condition is true. One may think of a
predicate as producing a Boolean value, where nil stands for false
and anything else stands for true. Conditional control structures
such as cond, if, when, and unless test such Boolean values. We
say that a predicate is true when it returns a non-nil value, and
is false when it returns nil; that is, it is true or false
according to whether the condition being tested is true or false.

By convention, the names of predicates usually end in the letter p
(which stands for ``predicate''). Common Lisp uses a uniform
convention in hyphenating names of predicates. If the name of the
predicate is formed by adding a p to an existing name, such as the
name of a data type, a hyphen is placed before the final p if and
only if there is a hyphen in the existing name. For example,
number begets numberp but standard-char begets standard-char-p. On
the other hand, if the name of a predicate is formed by adding a
prefixing qualifier to the front of an existing predicate name,
the two names are joined with a hyphen and the presence or absence
of a hyphen before the final p is not changed. For example, the
predicate string-lessp has no hyphen before the p because it is
the string version of lessp (a MacLisp function that has been
renamed < in Common Lisp). The name string-less-p would
incorrectly imply that it is a predicate that tests for a kind of
object called a string-less, and the name stringlessp would
connote a predicate that tests whether something has no strings
(is ``stringless'')!

Okay, that last part is pretty far down in the weeds. But a "p"
suffix meaning "predicate" has decades of history behind it.

regards, tom lane

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message David Rowley 2025-09-17 04:25:36 Re: Fixing MSVC's inability to detect elog(ERROR) does not return
Previous Message Peter Smith 2025-09-17 03:57:58 Re: CREATE/ALTER PUBLICATION improvements for syntax synopsis