emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Can the byte-compiler check whether functions passed by name are def


From: Stefan Monnier
Subject: Re: Can the byte-compiler check whether functions passed by name are defined?
Date: Mon, 05 Aug 2013 10:35:22 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux)

>> As mentioned, the best option is to start by adding warnings for the
>> #'symbol form (should be easy: handle it in the same way we handle
>> warnings for function calls).
>> 
>> Then make the higher-order functions turn 'symbol into #'symbol.
>> That's important for things like
>> 
>> (if foo #'a #'b)

> I am not sure I understand what you have in mind.

That's because my fingers fumbled.  The "That's important for things
like" refers to the "warnings for #'" in the previous paragraph.
The "Then make the higher..." line should have come afterwards.

>     (mapcar (if flag 'f1 'f2) list)
>     => (mapcar (if flag #'f1 #'f2) list)

No, I definitely don't want to get into such fanciness.
But I do want compiler warnings if the coder writes

     (mapcar (if flag #'f1 #'f2) list)

and `f1' or `f2' are unknown.
     
>     (defun select-function (flag f)
>       (if flag f 'default-f))
>     ...
>     (mapcar (select-function flag 'f1) alist)

100% agreement.

> Shouldn't the markup for user-written functions be a bit easier?

I'm not too worried about it, no.  We should instead aim to teach people
to write #'foo instead of 'foo.

Given that we can't get warnings for (if a 'foo 'bar), it's OK if you
won't get warnings for all cases of (higher-order-func arg1 'foo).

> Anyway, I find the behaviour confusing. Having code preloaded into
> the binary is okay, but having code in installation directory that is
> ignored even when it has been changed seems a bit awkward.

Yes, it's a bit confusing.  But the source is still very useful (Emacs
(and the ideals of Free Software) wants you to have very easy access to
the source), so we could arguably get rid of the preloaded .elc files,
but we'd still have to keep the .el file, so in most cases you'd still
be just as confused.

> Or IS it loaded when changed

No, it's not re-loaded (we do have such a "re-load" hack in
byte-compile-refresh-preloaded but it's only used when rebuilding Emacs
to try and minimize the need to bootstrap).

> and just didn't change `defun-declaration-alist', because it is bound
> already before loading the changed byte-code?

Indeed, that's one of the shortcomings of byte-compile-refresh-preloaded.


        Stefan



reply via email to

[Prev in Thread] Current Thread [Next in Thread]