unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* (declare (type (function...
@ 2024-05-07 11:55 Marco Antoniotti
  2024-05-07 16:55 ` Tomas Hlavaty
  2024-05-07 20:32 ` Andrea Corallo
  0 siblings, 2 replies; 23+ messages in thread
From: Marco Antoniotti @ 2024-05-07 11:55 UTC (permalink / raw)
  To: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1220 bytes --]

Hi

I am at ELS 2024 in Vienna and I saw Andrea Corallo's presentation about
the introduction of the

(defun foo (x)
    *(declare (type (function (integer) float))*
    (+ x 42.0))

declaration.

IMHO (and, I am not afraid to say, of many common lispers) this is
shortsighted and a rather gratuitous departure from what CL does.  With
some potential unintended consequences down the road.

The declaration proposed is for the *signature* of the function as a
whole.  Using type may prevent ELisp from introducing the usual CL idiom,
as the following one

(let ((x 42) (y -1))
    *(declare (type integer x y))* ; The type declaration refers to names x
and y.
...)

... unless you special case the type declaration with no name(s) following
the type spec.

My suggestion: keep type (and ftype) for doing things the CL way (which was
the PL/I way :) ) and introduce a signature spec to be meaningful only at
the function toplevel.

(defun foo (x)
    *(declare (signature (function (integer) float))*
    (+ x 42.0))

All the best
-- 
Marco Antoniotti, Professor                   tel. +39 - 02 64 48 79 01
DISCo, University of Milan-Bicocca U14 2043   http://dcb.disco.unimib.it
Viale Sarca 336
I-20126 Milan (MI) ITALY

[-- Attachment #2: Type: text/html, Size: 2413 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-07 11:55 (declare (type (function Marco Antoniotti
@ 2024-05-07 16:55 ` Tomas Hlavaty
  2024-05-07 17:10   ` Marco Antoniotti
  2024-05-07 20:32 ` Andrea Corallo
  1 sibling, 1 reply; 23+ messages in thread
From: Tomas Hlavaty @ 2024-05-07 16:55 UTC (permalink / raw)
  To: Marco Antoniotti, emacs-devel

On Tue 07 May 2024 at 13:55, Marco Antoniotti <marco.antoniotti@unimib.it> wrote:
> IMHO (and, I am not afraid to say, of many common lispers) this is
> shortsighted and a rather gratuitous departure from what CL does.  With
> some potential unintended consequences down the road.

There was a discussion about this.

id:yp15xyf88yb.fsf@fencepost.gnu.org
Andrea Corallo <acorallo@gnu.org> (February 23) ()
Subject: Declaring Lisp function types
To: emacs-devel@gnu.org
Date: Fri, 23 Feb 2024 11:02:52 -0500

also

id:jwv4jdne65n.fsf-monnier+emacs@gnu.org
Stefan Monnier <monnier@iro.umontreal.ca> (March 03) ()
Subject: Re: Declaring Lisp function types
To: Andrea Corallo <acorallo@gnu.org>
Cc: "Stefan Monnier via Emacs development discussions." <emacs-devel@gnu.org>
Date: Sun, 03 Mar 2024 09:52:23 -0500
[...]
Then I'd go with
(declare (type (function ..)))
[...]

> (defun foo (x)
>     *(declare (signature (function (integer) float))*
>     (+ x 42.0))

grep signature ~/mr/emacs would yield lots of false positives

function-signature or something like that would be better name.
but this was also discussed already.



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-07 16:55 ` Tomas Hlavaty
@ 2024-05-07 17:10   ` Marco Antoniotti
  2024-05-07 17:38     ` Tomas Hlavaty
  0 siblings, 1 reply; 23+ messages in thread
From: Marco Antoniotti @ 2024-05-07 17:10 UTC (permalink / raw)
  To: Tomas Hlavaty; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 2385 bytes --]

Hi

pardon me, but

      grep type....

would yield many more hits, and I do not understand why this is relevant to
the issue.

The points are two: (1) gratuitous difference from Common Lisp (*) and (2)
potential issues with down the road useful and rather obvious uses of
declare forms (cfr., the let example).

Granted (1) can be "documented away", by saying that type declarations at
the top level are "special", but (2) should be taken into consideration.

Having said that, I think that signature or funsig or something other than
type, conveying the actual meaning of that specific declaration would be
better.  Or this could be dealt with as in

(defun *foo* (x)
    (declare (*ftype* (function (integer) float) *foo*))
    (+ x 42.0))

IMHO, it makes more sense to the Common Lisper.  After all, ELisp is a
2-Lisp.

All the best

MA





On Tue, May 7, 2024 at 6:55 PM Tomas Hlavaty <tom@logand.com> wrote:

> On Tue 07 May 2024 at 13:55, Marco Antoniotti <marco.antoniotti@unimib.it>
> wrote:
> > IMHO (and, I am not afraid to say, of many common lispers) this is
> > shortsighted and a rather gratuitous departure from what CL does.  With
> > some potential unintended consequences down the road.
>
> There was a discussion about this.
>
> id:yp15xyf88yb.fsf@fencepost.gnu.org
> Andrea Corallo <acorallo@gnu.org> (February 23) ()
> Subject: Declaring Lisp function types
> To: emacs-devel@gnu.org
> Date: Fri, 23 Feb 2024 11:02:52 -0500
>
> also
>
> id:jwv4jdne65n.fsf-monnier+emacs@gnu.org
> Stefan Monnier <monnier@iro.umontreal.ca> (March 03) ()
> Subject: Re: Declaring Lisp function types
> To: Andrea Corallo <acorallo@gnu.org>
> Cc: "Stefan Monnier via Emacs development discussions." <
> emacs-devel@gnu.org>
> Date: Sun, 03 Mar 2024 09:52:23 -0500
> [...]
> Then I'd go with
> (declare (type (function ..)))
> [...]
>
> > (defun foo (x)
> >     *(declare (signature (function (integer) float))*
> >     (+ x 42.0))
>
> grep signature ~/mr/emacs would yield lots of false positives
>
> function-signature or something like that would be better name.
> but this was also discussed already.
>


-- 
Marco Antoniotti, Professor                   tel. +39 - 02 64 48 79 01
DISCo, University of Milan-Bicocca U14 2043   http://dcb.disco.unimib.it
Viale Sarca 336
I-20126 Milan (MI) ITALY

[-- Attachment #2: Type: text/html, Size: 4146 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-07 17:10   ` Marco Antoniotti
@ 2024-05-07 17:38     ` Tomas Hlavaty
  2024-05-07 17:52       ` Marco Antoniotti
  0 siblings, 1 reply; 23+ messages in thread
From: Tomas Hlavaty @ 2024-05-07 17:38 UTC (permalink / raw)
  To: Marco Antoniotti; +Cc: emacs-devel

On Tue 07 May 2024 at 19:10, Marco Antoniotti <marco.antoniotti@unimib.it> wrote:
> pardon me, but
>
>       grep type....
>
> would yield many more hits

yes, it is always possible to find even worse name to grep

> , and I do not understand why this is relevant to the issue.

don't you search source code?

I just pointed out that your suggested name could be even better.

> The points are two:

I understand that and agree with you.

I just sent to you links to the discussion.



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-07 17:38     ` Tomas Hlavaty
@ 2024-05-07 17:52       ` Marco Antoniotti
  0 siblings, 0 replies; 23+ messages in thread
From: Marco Antoniotti @ 2024-05-07 17:52 UTC (permalink / raw)
  To: Tomas Hlavaty; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 639 bytes --]

Sorry if I misread your message.

All the best

MA


On Tue, May 7, 2024, 19:38 Tomas Hlavaty <tom@logand.com> wrote:

> On Tue 07 May 2024 at 19:10, Marco Antoniotti <marco.antoniotti@unimib.it>
> wrote:
> > pardon me, but
> >
> >       grep type....
> >
> > would yield many more hits
>
> yes, it is always possible to find even worse name to grep
>
> > , and I do not understand why this is relevant to the issue.
>
> don't you search source code?
>
> I just pointed out that your suggested name could be even better.
>
> > The points are two:
>
> I understand that and agree with you.
>
> I just sent to you links to the discussion.
>

[-- Attachment #2: Type: text/html, Size: 1193 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-07 11:55 (declare (type (function Marco Antoniotti
  2024-05-07 16:55 ` Tomas Hlavaty
@ 2024-05-07 20:32 ` Andrea Corallo
  2024-05-08  2:36   ` Emanuel Berg
                     ` (2 more replies)
  1 sibling, 3 replies; 23+ messages in thread
From: Andrea Corallo @ 2024-05-07 20:32 UTC (permalink / raw)
  To: Marco Antoniotti; +Cc: emacs-devel

Marco Antoniotti <marco.antoniotti@unimib.it> writes:

> Hi
>
> I am at ELS 2024 in Vienna and I saw Andrea Corallo's presentation about the introduction of the
>
> (defun foo (x)
>     (declare (type (function (integer) float))
>     (+ x 42.0))
>
> declaration.
>
> IMHO (and, I am not afraid to say, of many common lispers) this is shortsighted and a rather gratuitous departure from
> what CL does.  With some potential unintended consequences down the road.
>
> The declaration proposed is for the signature of the function as a whole.  Using type may prevent ELisp from introducing
> the usual CL idiom, as the following one
>
> (let ((x 42) (y -1))
>     (declare (type integer x y)) ; The type declaration refers to names x and y.
> ...)
>
> ... unless you special case the type declaration with no name(s) following the type spec.
>
> My suggestion: keep type (and ftype) for doing things the CL way (which was the PL/I way :) ) and introduce a signature
> spec to be meaningful only at the function toplevel.
>
> (defun foo (x)
>     (declare (signature (function (integer) float))
>     (+ x 42.0))
>
> All the best

Ciao Marco,

I've no problem changing 'type' for something different if there's
agreement, I don't especially like 'signature' as it's a bit verbose for
my taste (but I could leave with it).

Thanks

 Andrea

PS the presentation you attended must have been really terribile :)



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-07 20:32 ` Andrea Corallo
@ 2024-05-08  2:36   ` Emanuel Berg
  2024-05-09  3:21     ` Tomas Hlavaty
  2024-05-08  2:44   ` Emanuel Berg
  2024-05-08 11:36   ` Marco Antoniotti
  2 siblings, 1 reply; 23+ messages in thread
From: Emanuel Berg @ 2024-05-08  2:36 UTC (permalink / raw)
  To: emacs-devel

Andrea Corallo wrote:

> I've no problem changing 'type' for something different if
> there's agreement, I don't especially like 'signature' as
> it's a bit verbose for my taste (but I could leave with it).

I think "signature" is extremely old school, by now completely
unintuitive terminology to everyone but a precious few.

But gpt4 sticks with it, so maybe?

Q: What is the difference between function declaration,
   prototype, and signature?
            
A: Function declaration defines the function, prototype
   declares its existence, and signature specifies its inputs
   and outputs.

As for greping source, searching code in buffers for unique
strings etc - and just in general - when something new and
fancy is introduced, it is always a good idea to give it a new
and fancy and, optimally, unique name. But if there isn't such
a name that makes sense in terms of technology it is also
never wrong to just call it whatever it is.

Maybe one can combine two words, declare type, type signature
... You can use apropos to see if you get any hits. It'll be
more cryptic but also unique and more cool in a way B)
`tsig' :)

BTW, in Python, there is a function signature concept that
isn't equal to this type signature concept.

-- 
underground experts united
https://dataswamp.org/~incal




^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-07 20:32 ` Andrea Corallo
  2024-05-08  2:36   ` Emanuel Berg
@ 2024-05-08  2:44   ` Emanuel Berg
  2024-05-08 11:36   ` Marco Antoniotti
  2 siblings, 0 replies; 23+ messages in thread
From: Emanuel Berg @ 2024-05-08  2:44 UTC (permalink / raw)
  To: emacs-devel

Andrea Corallo wrote:

> I've no problem changing 'type' for something different if
> there's agreement, I don't especially like 'signature' as
> it's a bit verbose for my taste (but I could leave with it).

I think signature is also misleading as it does not uniquely
identify a function.

Anymore I was about to say?

Maybe at some point in computing history functions didn't have
names, they where just identified by their mappings from
a combination of types to a return type.

-- 
underground experts united
https://dataswamp.org/~incal




^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-07 20:32 ` Andrea Corallo
  2024-05-08  2:36   ` Emanuel Berg
  2024-05-08  2:44   ` Emanuel Berg
@ 2024-05-08 11:36   ` Marco Antoniotti
  2024-05-09  3:33     ` Tomas Hlavaty
                       ` (2 more replies)
  2 siblings, 3 replies; 23+ messages in thread
From: Marco Antoniotti @ 2024-05-08 11:36 UTC (permalink / raw)
  To: Andrea Corallo; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 2169 bytes --]

Ciao Andrea

The presentation I attended gave me the idea of "ranting talks" at the next
ELS :)

Having said so, I now think that, to save goat and cabbage, what you want is

(defun foo (x y)
   (declare (*ftype* (function (integer number) number) *foo*))
   (+ x y))

Common lispers can live with that.

All the best

MA

On Tue, May 7, 2024 at 10:32 PM Andrea Corallo <acorallo@gnu.org> wrote:

> Marco Antoniotti <marco.antoniotti@unimib.it> writes:
>
> > Hi
> >
> > I am at ELS 2024 in Vienna and I saw Andrea Corallo's presentation about
> the introduction of the
> >
> > (defun foo (x)
> >     (declare (type (function (integer) float))
> >     (+ x 42.0))
> >
> > declaration.
> >
> > IMHO (and, I am not afraid to say, of many common lispers) this is
> shortsighted and a rather gratuitous departure from
> > what CL does.  With some potential unintended consequences down the road.
> >
> > The declaration proposed is for the signature of the function as a
> whole.  Using type may prevent ELisp from introducing
> > the usual CL idiom, as the following one
> >
> > (let ((x 42) (y -1))
> >     (declare (type integer x y)) ; The type declaration refers to names
> x and y.
> > ...)
> >
> > ... unless you special case the type declaration with no name(s)
> following the type spec.
> >
> > My suggestion: keep type (and ftype) for doing things the CL way (which
> was the PL/I way :) ) and introduce a signature
> > spec to be meaningful only at the function toplevel.
> >
> > (defun foo (x)
> >     (declare (signature (function (integer) float))
> >     (+ x 42.0))
> >
> > All the best
>
> Ciao Marco,
>
> I've no problem changing 'type' for something different if there's
> agreement, I don't especially like 'signature' as it's a bit verbose for
> my taste (but I could leave with it).
>
> Thanks
>
>  Andrea
>
> PS the presentation you attended must have been really terribile :)
>


-- 
Marco Antoniotti, Professor                   tel. +39 - 02 64 48 79 01
DISCo, University of Milan-Bicocca U14 2043   http://dcb.disco.unimib.it
Viale Sarca 336
I-20126 Milan (MI) ITALY

[-- Attachment #2: Type: text/html, Size: 3284 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-08  2:36   ` Emanuel Berg
@ 2024-05-09  3:21     ` Tomas Hlavaty
  0 siblings, 0 replies; 23+ messages in thread
From: Tomas Hlavaty @ 2024-05-09  3:21 UTC (permalink / raw)
  To: Emanuel Berg, emacs-devel

On Wed 08 May 2024 at 04:36, Emanuel Berg <incal@dataswamp.org> wrote:
> Andrea Corallo wrote:
>> I've no problem changing 'type' for something different if
>> there's agreement, I don't especially like 'signature' as
>> it's a bit verbose for my taste (but I could leave with it).
>
> I think "signature" is extremely old school, by now completely
> unintuitive terminology to everyone but a precious few.

function-signature is already an established concept in emacs:

find -H . -type d \( -path \*/SCCS -o -path \*/RCS -o -path \*/CVS -o -path \*/MCVS -o -path \*/.src -o -path \*/.svn -o -path \*/.git -o -path \*/.hg -o -path \*/.bzr -o -path \*/_MTN -o -path \*/_darcs -o -path \*/\{arch\} \) -prune -o \! -type d \( -name .\#\* -o -name \*.o -o -name \*\~ -o -name \*.bin -o -name \*.lbin -o -name \*.so -o -name \*.a -o -name \*.ln -o -name \*.blg -o -name \*.bbl -o -name \*.elc -o -name \*.lof -o -name \*.glo -o -name \*.idx -o -name \*.lot -o -name \*.fmt -o -name \*.tfm -o -name \*.class -o -name \*.fas -o -name \*.lib -o -name \*.mem -o -name \*.x86f -o -name \*.sparcf -o -name \*.dfsl -o -name \*.pfsl -o -name \*.d64fsl -o -name \*.p64fsl -o -name \*.lx64fsl -o -name \*.lx32fsl -o -name \*.dx64fsl -o -name \*.dx32fsl -o -name \*.fx64fsl -o -name \*.fx32fsl -o -name \*.sx64fsl -o -name \*.sx32fsl -o -name \*.wx64fsl -o -name \*.wx32fsl -o -name \*.fasl -o -name \*.ufsl -o -name \*.fsl -o -name \*.dxl -o -name \*.lo -o -name \*.la -o -name \*.gmo -o -name \*.mo -o -name \*.toc -o -name \*.aux -o -name \*.cp -o -name \*.fn -o -name \*.ky -o -name \*.pg -o -name \*.tp -o -name \*.vr -o -name \*.cps -o -name \*.fns -o -name \*.kys -o -name \*.pgs -o -name \*.tps -o -name \*.vrs -o -name \*.pyc -o -name \*.pyo \) -prune -o  -type f \( -name \*.\* \) -exec grep --color=auto -i -nH --null -e function-signature \{\} +
./lisp/emacs-lisp/bytecomp.el1486:(defun byte-compile--function-signature (f)
./lisp/emacs-lisp/bytecomp.el1571:         (sig (cond (def (byte-compile--function-signature def))
./lisp/emacs-lisp/bytecomp.el1708:      (let ((sig1 (byte-compile--function-signature old))
./lisp/progmodes/octave.el1593:(defun octave-eldoc-function-signatures (fn)
./lisp/progmodes/octave.el1641:           (sigs (and fn (octave-eldoc-function-signatures fn)))
./lisp/ChangeLog.1722998:	(octave-eldoc-function-signatures, octave-help)
./lisp/ChangeLog.1724611:	(octave-eldoc-function-signatures, octave-eldoc-function):
./test/lisp/emacs-lisp/bytecomp-tests.el1156: "warn-wide-docstring-ignore-function-signature.el"
./ChangeLog.350951:	* lisp/progmodes/octave.el (octave-eldoc-function-signatures): Use
./ChangeLog.3170940:	* lisp/progmodes/octave.el (octave-eldoc-function-signatures): Fix the
./ChangeLog.3171565:	byte-compile--function-signature, it fails to compile code which
./ChangeLog.3194592:	* lisp/emacs-lisp/bytecomp.el (byte-compile--function-signature): New fun.
./ChangeLog.3194596:	since bytecode functions are now handled in byte-compile--function-signature.



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-08 11:36   ` Marco Antoniotti
@ 2024-05-09  3:33     ` Tomas Hlavaty
  2024-05-09 13:19     ` Simon Leinen
  2024-05-10  6:47     ` Andrea Corallo
  2 siblings, 0 replies; 23+ messages in thread
From: Tomas Hlavaty @ 2024-05-09  3:33 UTC (permalink / raw)
  To: Marco Antoniotti, Andrea Corallo; +Cc: emacs-devel

On Wed 08 May 2024 at 13:36, Marco Antoniotti <marco.antoniotti@unimib.it> wrote:
> Having said so, I now think that, to save goat and cabbage, what you want is
>
> (defun foo (x y)
>    (declare (*ftype* (function (integer number) number) *foo*))
>    (+ x y))
>
> Common lispers can live with that.

also

type:
(rg "~/mr/emacs" "\\(type" "-i")
Grep finished with 2912 matches found
not good

ftype
(rg "~/mr/emacs" "\\(ftype" "-i")
Grep finished with 27 matches found
much better



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-08 11:36   ` Marco Antoniotti
  2024-05-09  3:33     ` Tomas Hlavaty
@ 2024-05-09 13:19     ` Simon Leinen
  2024-05-09 13:43       ` Emanuel Berg
  2024-05-10  6:47     ` Andrea Corallo
  2 siblings, 1 reply; 23+ messages in thread
From: Simon Leinen @ 2024-05-09 13:19 UTC (permalink / raw)
  To: Marco Antoniotti; +Cc: Emacs developers

On Wed, May 8, 2024 at 1:41 PM Marco Antoniotti
<marco.antoniotti@unimib.it> wrote:
> Having said so, I now think that, to save goat and cabbage, what you want is
>
> (defun foo (x y)
>    (declare (ftype (function (integer number) number) foo))
>    (+ x y))
>
> Common lispers can live with that.

Yes, please :-)

(When I programmed in Common Lisp, I used (declaim (ftype ...) ...)
all the time.)

Cheers,
-- 
Simon.



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-09 13:19     ` Simon Leinen
@ 2024-05-09 13:43       ` Emanuel Berg
  0 siblings, 0 replies; 23+ messages in thread
From: Emanuel Berg @ 2024-05-09 13:43 UTC (permalink / raw)
  To: emacs-devel

Simon Leinen wrote:

>> (defun foo (x y)
>>    (declare (ftype (function (integer number) number) foo))
>>    (+ x y))
>>
>> Common lispers can live with that.
>
> Yes, please :-)

Maybe it is time for a new language called Exceptional Lisp.

-- 
underground experts united
https://dataswamp.org/~incal




^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-08 11:36   ` Marco Antoniotti
  2024-05-09  3:33     ` Tomas Hlavaty
  2024-05-09 13:19     ` Simon Leinen
@ 2024-05-10  6:47     ` Andrea Corallo
  2024-05-10  9:50       ` Marco Antoniotti
  2 siblings, 1 reply; 23+ messages in thread
From: Andrea Corallo @ 2024-05-10  6:47 UTC (permalink / raw)
  To: Marco Antoniotti; +Cc: emacs-devel

Marco Antoniotti <marco.antoniotti@unimib.it> writes:

> Ciao Andrea
>
> The presentation I attended gave me the idea of "ranting talks" at the next ELS :)
>
> Having said so, I now think that, to save goat and cabbage, what you want is
>
> (defun foo (x y)
>    (declare (ftype (function (integer number) number) foo))
>    (+ x y))
>
> Common lispers can live with that.
>
> All the best
>
> MA

Ciao Mario,

not sure what maintainers think about it, I'm not in love with this
solution because one has to repeat 'foo' two times and we don't support
anyway unsing declare inside a function to declare another one.

Mmmhh

   Andrea



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-10  6:47     ` Andrea Corallo
@ 2024-05-10  9:50       ` Marco Antoniotti
  2024-05-10 10:21         ` Andrea Corallo
  0 siblings, 1 reply; 23+ messages in thread
From: Marco Antoniotti @ 2024-05-10  9:50 UTC (permalink / raw)
  To: Andrea Corallo; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1542 bytes --]

Dear Andrea

The point is NOT to diverge from Common Lisp.  Such divergence is - IMHO -
unwarranted.  Plus, the proposal for the ftype declaration also carries
over to type declarations, which, again, are useful per se, even if the
compiler is "smart enough" (ok; this one is for old-timers :) )

Having said that, a provision can be made that a nameless ftype declaration
at a function top level refers to the "definenda" function.  Again, having
to use ftype instead of type is a consequence of ELisp being a 2-lisp.

Cheers

MA

On Fri, May 10, 2024 at 8:47 AM Andrea Corallo <acorallo@gnu.org> wrote:

> Marco Antoniotti <marco.antoniotti@unimib.it> writes:
>
> > Ciao Andrea
> >
> > The presentation I attended gave me the idea of "ranting talks" at the
> next ELS :)
> >
> > Having said so, I now think that, to save goat and cabbage, what you
> want is
> >
> > (defun foo (x y)
> >    (declare (ftype (function (integer number) number) foo))
> >    (+ x y))
> >
> > Common lispers can live with that.
> >
> > All the best
> >
> > MA
>
> Ciao Mario,
>
> not sure what maintainers think about it, I'm not in love with this
> solution because one has to repeat 'foo' two times and we don't support
> anyway unsing declare inside a function to declare another one.
>
> Mmmhh
>
>    Andrea
>


-- 
Marco Antoniotti, Professor                   tel. +39 - 02 64 48 79 01
DISCo, University of Milan-Bicocca U14 2043   http://dcb.disco.unimib.it
Viale Sarca 336
I-20126 Milan (MI) ITALY

[-- Attachment #2: Type: text/html, Size: 2592 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-10  9:50       ` Marco Antoniotti
@ 2024-05-10 10:21         ` Andrea Corallo
  2024-05-10 11:53           ` Marco Antoniotti
                             ` (2 more replies)
  0 siblings, 3 replies; 23+ messages in thread
From: Andrea Corallo @ 2024-05-10 10:21 UTC (permalink / raw)
  To: Marco Antoniotti; +Cc: emacs-devel, Eli Zaretskii, Stefan Monnier

Marco Antoniotti <marco.antoniotti@unimib.it> writes:

> Dear Andrea
>
> The point is NOT to diverge from Common Lisp.  Such divergence is - IMHO - unwarranted.  Plus, the proposal for the ftype
> declaration also carries over to type declarations, which, again, are useful per se, even if the compiler is "smart
> enough" (ok; this one is for old-timers :) )
>
> Having said that, a provision can be made that a nameless ftype declaration at a function top level refers to the
> "definenda" function.  Again, having to use ftype instead of type is a consequence of ELisp being a 2-lisp.

Dear Marco,

I see your point and share the intent, given your provision 😃 for

(defun foo (x y)
   (declare (ftype (function (integer number) number)))
   (+ x y))

I'm personally okay with the change.

Eli Stefan WDYT?

Thanks

  Andrea



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-10 10:21         ` Andrea Corallo
@ 2024-05-10 11:53           ` Marco Antoniotti
  2024-05-10 14:04           ` Stefan Monnier
  2024-05-11 10:29           ` Eli Zaretskii
  2 siblings, 0 replies; 23+ messages in thread
From: Marco Antoniotti @ 2024-05-10 11:53 UTC (permalink / raw)
  To: Andrea Corallo; +Cc: emacs-devel, Eli Zaretskii, Stefan Monnier

[-- Attachment #1: Type: text/plain, Size: 1816 bytes --]

Hi

apologies for being such a PITA.

(defun foo (x y)
   (declare (*ftype* (function (integer number) number)))
   (+ x y))

Is fine with me, as long as the following is also valid.

(defun foo (x y)
   (declare (*ftype* (function (integer number) number) *foo*))
   (+ x y))

Of course, I can go even further (never said that ANSI CL is perfect).

(defun foo (x y)
   (declare (*type* integer x)
            (*type* number y)
            (*values* number))
  (+ x y))

This should tag the function in the same way (and note that *values*
declaration is a CL extension).

All the best

MA


On Fri, May 10, 2024 at 12:21 PM Andrea Corallo <acorallo@gnu.org> wrote:

> Marco Antoniotti <marco.antoniotti@unimib.it> writes:
>
> > Dear Andrea
> >
> > The point is NOT to diverge from Common Lisp.  Such divergence is - IMHO
> - unwarranted.  Plus, the proposal for the ftype
> > declaration also carries over to type declarations, which, again, are
> useful per se, even if the compiler is "smart
> > enough" (ok; this one is for old-timers :) )
> >
> > Having said that, a provision can be made that a nameless ftype
> declaration at a function top level refers to the
> > "definenda" function.  Again, having to use ftype instead of type is a
> consequence of ELisp being a 2-lisp.
>
> Dear Marco,
>
> I see your point and share the intent, given your provision 😃 for
>
> (defun foo (x y)
>    (declare (ftype (function (integer number) number)))
>    (+ x y))
>
> I'm personally okay with the change.
>
> Eli Stefan WDYT?
>
> Thanks
>
>   Andrea
>


-- 
Marco Antoniotti, Professor                   tel. +39 - 02 64 48 79 01
DISCo, University of Milan-Bicocca U14 2043   http://dcb.disco.unimib.it
Viale Sarca 336
I-20126 Milan (MI) ITALY

[-- Attachment #2: Type: text/html, Size: 3074 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-10 10:21         ` Andrea Corallo
  2024-05-10 11:53           ` Marco Antoniotti
@ 2024-05-10 14:04           ` Stefan Monnier
  2024-05-10 14:17             ` Marco Antoniotti
  2024-05-11 10:29           ` Eli Zaretskii
  2 siblings, 1 reply; 23+ messages in thread
From: Stefan Monnier @ 2024-05-10 14:04 UTC (permalink / raw)
  To: Andrea Corallo; +Cc: Marco Antoniotti, emacs-devel, Eli Zaretskii

>> The point is NOT to diverge from Common Lisp.  Such divergence is -
>> IMHO - unwarranted.

CL is a good inspiration in general, but ELisp is not and never will be
Common-Lisp, so it's not indispensable to adhere to its choices.
I think its provision of type annotation is not great, so there isn't
a strong need to follow it.

> I see your point and share the intent, given your provision 😃 for
>
> (defun foo (x y)
>    (declare (ftype (function (integer number) number)))
>    (+ x y))
>
> I'm personally okay with the change.

No objection here either.


        Stefan




^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-10 14:04           ` Stefan Monnier
@ 2024-05-10 14:17             ` Marco Antoniotti
  0 siblings, 0 replies; 23+ messages in thread
From: Marco Antoniotti @ 2024-05-10 14:17 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Andrea Corallo, emacs-devel, Eli Zaretskii

[-- Attachment #1: Type: text/plain, Size: 1294 bytes --]

Hi Stefan

let me just add one (I swear!) more comment.

That CL is not perfect is a well known fact.  Case wars anybody?  Missing
pieces?  Shall I even mention (insert Kurtz's "The Horror" quote here) ...
pathnames?

But, since (function) type annotations are being added, not causing other
divergences is, IMHO, a Good Thing (tm).

All the best

MA


On Fri, May 10, 2024 at 4:04 PM Stefan Monnier <monnier@iro.umontreal.ca>
wrote:

> >> The point is NOT to diverge from Common Lisp.  Such divergence is -
> >> IMHO - unwarranted.
>
> CL is a good inspiration in general, but ELisp is not and never will be
> Common-Lisp, so it's not indispensable to adhere to its choices.
> I think its provision of type annotation is not great, so there isn't
> a strong need to follow it.
>
> > I see your point and share the intent, given your provision 😃 for
> >
> > (defun foo (x y)
> >    (declare (ftype (function (integer number) number)))
> >    (+ x y))
> >
> > I'm personally okay with the change.
>
> No objection here either.
>
>
>         Stefan
>
>

-- 
Marco Antoniotti, Professor                   tel. +39 - 02 64 48 79 01
DISCo, University of Milan-Bicocca U14 2043   http://dcb.disco.unimib.it
Viale Sarca 336
I-20126 Milan (MI) ITALY

[-- Attachment #2: Type: text/html, Size: 2064 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-10 10:21         ` Andrea Corallo
  2024-05-10 11:53           ` Marco Antoniotti
  2024-05-10 14:04           ` Stefan Monnier
@ 2024-05-11 10:29           ` Eli Zaretskii
  2024-05-13 21:12             ` Andrea Corallo
  2 siblings, 1 reply; 23+ messages in thread
From: Eli Zaretskii @ 2024-05-11 10:29 UTC (permalink / raw)
  To: Andrea Corallo; +Cc: marco.antoniotti, emacs-devel, monnier

> From: Andrea Corallo <acorallo@gnu.org>
> Cc: emacs-devel@gnu.org, Eli Zaretskii <eliz@gnu.org>, Stefan Monnier
>  <monnier@iro.umontreal.ca>
> Date: Fri, 10 May 2024 06:21:21 -0400
> 
> Marco Antoniotti <marco.antoniotti@unimib.it> writes:
> 
> > Dear Andrea
> >
> > The point is NOT to diverge from Common Lisp.  Such divergence is - IMHO - unwarranted.  Plus, the proposal for the ftype
> > declaration also carries over to type declarations, which, again, are useful per se, even if the compiler is "smart
> > enough" (ok; this one is for old-timers :) )
> >
> > Having said that, a provision can be made that a nameless ftype declaration at a function top level refers to the
> > "definenda" function.  Again, having to use ftype instead of type is a consequence of ELisp being a 2-lisp.
> 
> Dear Marco,
> 
> I see your point and share the intent, given your provision 😃 for
> 
> (defun foo (x y)
>    (declare (ftype (function (integer number) number)))
>    (+ x y))
> 
> I'm personally okay with the change.
> 
> Eli Stefan WDYT?

Fine by me, thanks.



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-11 10:29           ` Eli Zaretskii
@ 2024-05-13 21:12             ` Andrea Corallo
  2024-05-14  9:26               ` Andrea Corallo
  0 siblings, 1 reply; 23+ messages in thread
From: Andrea Corallo @ 2024-05-13 21:12 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: marco.antoniotti, emacs-devel, monnier

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Andrea Corallo <acorallo@gnu.org>
>> Cc: emacs-devel@gnu.org, Eli Zaretskii <eliz@gnu.org>, Stefan Monnier
>>  <monnier@iro.umontreal.ca>
>> Date: Fri, 10 May 2024 06:21:21 -0400
>> 
>> Marco Antoniotti <marco.antoniotti@unimib.it> writes:
>> 
>> > Dear Andrea
>> >
>> > The point is NOT to diverge from Common Lisp.  Such divergence is - IMHO - unwarranted.  Plus, the proposal for the ftype
>> > declaration also carries over to type declarations, which, again, are useful per se, even if the compiler is "smart
>> > enough" (ok; this one is for old-timers :) )
>> >
>> > Having said that, a provision can be made that a nameless ftype declaration at a function top level refers to the
>> > "definenda" function.  Again, having to use ftype instead of type is a consequence of ELisp being a 2-lisp.
>> 
>> Dear Marco,
>> 
>> I see your point and share the intent, given your provision 😃 for
>> 
>> (defun foo (x y)
>>    (declare (ftype (function (integer number) number)))
>>    (+ x y))
>> 
>> I'm personally okay with the change.
>> 
>> Eli Stefan WDYT?
>
> Fine by me, thanks.

Ok, I'll try to take care of this tomorrow.

  Andrea



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-13 21:12             ` Andrea Corallo
@ 2024-05-14  9:26               ` Andrea Corallo
  2024-05-14 10:04                 ` Marco Antoniotti
  0 siblings, 1 reply; 23+ messages in thread
From: Andrea Corallo @ 2024-05-14  9:26 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: marco.antoniotti, emacs-devel, monnier

Andrea Corallo <acorallo@gnu.org> writes:

> Eli Zaretskii <eliz@gnu.org> writes:
>
>>> From: Andrea Corallo <acorallo@gnu.org>
>>> Cc: emacs-devel@gnu.org, Eli Zaretskii <eliz@gnu.org>, Stefan Monnier
>>>  <monnier@iro.umontreal.ca>
>>> Date: Fri, 10 May 2024 06:21:21 -0400
>>> 
>>> Marco Antoniotti <marco.antoniotti@unimib.it> writes:
>>> 
>>> > Dear Andrea
>>> >
>>> > The point is NOT to diverge from Common Lisp.  Such divergence is - IMHO - unwarranted.  Plus, the proposal for the ftype
>>> > declaration also carries over to type declarations, which, again, are useful per se, even if the compiler is "smart
>>> > enough" (ok; this one is for old-timers :) )
>>> >
>>> > Having said that, a provision can be made that a nameless ftype declaration at a function top level refers to the
>>> > "definenda" function.  Again, having to use ftype instead of type is a consequence of ELisp being a 2-lisp.
>>> 
>>> Dear Marco,
>>> 
>>> I see your point and share the intent, given your provision 😃 for
>>> 
>>> (defun foo (x y)
>>>    (declare (ftype (function (integer number) number)))
>>>    (+ x y))
>>> 
>>> I'm personally okay with the change.
>>> 
>>> Eli Stefan WDYT?
>>
>> Fine by me, thanks.
>
> Ok, I'll try to take care of this tomorrow.

Gut, should be in with a39a8060124.

Thanks

  Andrea

PS Marco you'll receive a customer satisfaction survey shortly, please
give us a good score 😀.



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: (declare (type (function...
  2024-05-14  9:26               ` Andrea Corallo
@ 2024-05-14 10:04                 ` Marco Antoniotti
  0 siblings, 0 replies; 23+ messages in thread
From: Marco Antoniotti @ 2024-05-14 10:04 UTC (permalink / raw)
  To: Andrea Corallo; +Cc: Eli Zaretskii, emacs-devel, Stefan Monnier

[-- Attachment #1: Type: text/plain, Size: 1640 bytes --]

It will be good. :)

On Tue, May 14, 2024, 11:26 Andrea Corallo <acorallo@gnu.org> wrote:

> Andrea Corallo <acorallo@gnu.org> writes:
>
> > Eli Zaretskii <eliz@gnu.org> writes:
> >
> >>> From: Andrea Corallo <acorallo@gnu.org>
> >>> Cc: emacs-devel@gnu.org, Eli Zaretskii <eliz@gnu.org>, Stefan Monnier
> >>>  <monnier@iro.umontreal.ca>
> >>> Date: Fri, 10 May 2024 06:21:21 -0400
> >>>
> >>> Marco Antoniotti <marco.antoniotti@unimib.it> writes:
> >>>
> >>> > Dear Andrea
> >>> >
> >>> > The point is NOT to diverge from Common Lisp.  Such divergence is -
> IMHO - unwarranted.  Plus, the proposal for the ftype
> >>> > declaration also carries over to type declarations, which, again,
> are useful per se, even if the compiler is "smart
> >>> > enough" (ok; this one is for old-timers :) )
> >>> >
> >>> > Having said that, a provision can be made that a nameless ftype
> declaration at a function top level refers to the
> >>> > "definenda" function.  Again, having to use ftype instead of type is
> a consequence of ELisp being a 2-lisp.
> >>>
> >>> Dear Marco,
> >>>
> >>> I see your point and share the intent, given your provision 😃 for
> >>>
> >>> (defun foo (x y)
> >>>    (declare (ftype (function (integer number) number)))
> >>>    (+ x y))
> >>>
> >>> I'm personally okay with the change.
> >>>
> >>> Eli Stefan WDYT?
> >>
> >> Fine by me, thanks.
> >
> > Ok, I'll try to take care of this tomorrow.
>
> Gut, should be in with a39a8060124.
>
> Thanks
>
>   Andrea
>
> PS Marco you'll receive a customer satisfaction survey shortly, please
> give us a good score 😀.
>

[-- Attachment #2: Type: text/html, Size: 2857 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2024-05-14 10:04 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-07 11:55 (declare (type (function Marco Antoniotti
2024-05-07 16:55 ` Tomas Hlavaty
2024-05-07 17:10   ` Marco Antoniotti
2024-05-07 17:38     ` Tomas Hlavaty
2024-05-07 17:52       ` Marco Antoniotti
2024-05-07 20:32 ` Andrea Corallo
2024-05-08  2:36   ` Emanuel Berg
2024-05-09  3:21     ` Tomas Hlavaty
2024-05-08  2:44   ` Emanuel Berg
2024-05-08 11:36   ` Marco Antoniotti
2024-05-09  3:33     ` Tomas Hlavaty
2024-05-09 13:19     ` Simon Leinen
2024-05-09 13:43       ` Emanuel Berg
2024-05-10  6:47     ` Andrea Corallo
2024-05-10  9:50       ` Marco Antoniotti
2024-05-10 10:21         ` Andrea Corallo
2024-05-10 11:53           ` Marco Antoniotti
2024-05-10 14:04           ` Stefan Monnier
2024-05-10 14:17             ` Marco Antoniotti
2024-05-11 10:29           ` Eli Zaretskii
2024-05-13 21:12             ` Andrea Corallo
2024-05-14  9:26               ` Andrea Corallo
2024-05-14 10:04                 ` Marco Antoniotti

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).