* (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).