Re: Fixing MSVC's inability to detect elog(ERROR) does not return - Mailing list pgsql-hackers

From Tom Lane
Subject Re: Fixing MSVC's inability to detect elog(ERROR) does not return
Date
Msg-id 1438905.1758081776@sss.pgh.pa.us
Whole thread Raw
In response to Re: Fixing MSVC's inability to detect elog(ERROR) does not return  (David Rowley <dgrowleyml@gmail.com>)
Responses Re: Fixing MSVC's inability to detect elog(ERROR) does not return
List pgsql-hackers
David Rowley <dgrowleyml@gmail.com> writes:
> On Wed, 3 Sept 2025 at 23:32, Peter Eisentraut <peter@eisentraut.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



pgsql-hackers by date:

Previous
From: Peter Smith
Date:
Subject: Re: CREATE/ALTER PUBLICATION improvements for syntax synopsis
Next
From: David Rowley
Date:
Subject: Re: Fixing MSVC's inability to detect elog(ERROR) does not return