Subject: Re: bug#63288: [PATCH] Mark cl-proclaim, cl-declaim, and cl-declare as obsolete

From: Pip Cet <[email-masked]>
Date: Wed, 19 Feb 2025 11:55:08 +0000

"Stefan Kangas" <[email-masked]> writes:

> Stefan Monnier via "Bug reports for GNU Emacs, the Swiss army knife of
> text editors" <[email-masked]> writes:
>
>>> I really don't understand this code, I'm afraid.
>>
>> Don't worry: I don't think anybody does (I sure don't).
>>
>> It's code inherited from *many* years ago, where it approximated the
>> desired semantics via approximate hacks (like delaying assignments
>> until some package is loaded).
>>
>> We could try and go back to the CLHS doc to figure out what it "should"
>> do, and then implement it better.  But seeing how little it's used,
>> I doubt it's worth the trouble (my impression is that its intended
>> semantics doesn't align very well with our implementation(s), so it
>> would take work and/or ugly hacks to make it work "right").
>>
>>> So I'll commit the minimal change above, and hope that the rest of the
>>> problem goes away when you have the time to look at it next :-)
>>
>> Looking at it doesn't make me very happy, so I don't have any plan to
>> look at it.
>>
>> If you want to do me a favor you could try and mark it (both `proclaim`
>> and `declaim`) as deprecated.
>
> (This is a spin-off from Bug#63288.)
>
> The code for the cl-lib declarations, i.e. (info "(cl) Declarations"),
> is hacky, hard to maintain, and not well-understood by anyone.  It
> doesn't seem to provide any benefits over using standard Emacs Lisp
> facilities such as `declare`, `defvar`, and setting byte-compiler
> variables.
>
> The attached patch marks cl-proclaim, cl-declaim, and cl-declare as
> obsolete.

Hooray!

(I'm not sure about cl-declare, but I'm pretty sure the way cl-proclaim
and cl-declaim are implemented would lead to further bugs if they were
used more.)

> diff --git a/doc/misc/cl.texi b/doc/misc/cl.texi
> index da73aeb6387..e1e67e2c0e7 100644
> --- a/doc/misc/cl.texi
> +++ b/doc/misc/cl.texi
> @@ -60,7 +60,7 @@ Top
>  * Predicates::           Type predicates and equality predicates.
>  * Control Structure::    Assignment, conditionals, blocks, looping.
>  * Macros::               Destructuring, compiler macros.
> -* Declarations::         @code{cl-proclaim}, @code{cl-declare}, etc.
> +* Declarations::         @code{cl-the}.
>  * Symbols::              Property lists, creating symbols.
>  * Numbers::              Predicates, functions, random numbers.
>  * Sequences::            Mapping, functions, searching, sorting.
> @@ -2745,46 +2745,12 @@ Declarations
>  mechanism that allows you to give the compiler special hints
>  about the types of data that will be stored in particular variables,
>  and about the ways those variables and functions will be used.  This
> -package defines versions of all the Common Lisp declaration forms:
> -@code{declare}, @code{locally}, @code{proclaim}, @code{declaim},
> -and @code{the}.
> +package defines a versions of only one Common Lisp declaration forms:
> +@code{the}.

"version", and "form".

Pip