unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Nic Ferrier <nferrier@ferrier.me.uk>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: emacs-devel@gnu.org
Subject: Re: adding namespaces to emacs-lisp (better elisp?)
Date: Fri, 26 Jul 2013 17:56:50 +0100	[thread overview]
Message-ID: <871u6l2ral.fsf@ferrier.me.uk> (raw)
In-Reply-To: <jwvy58tl52t.fsf-monnier+emacs@gnu.org> (Stefan Monnier's message of "Fri, 26 Jul 2013 11:43:40 -0400")

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>> We had a lot of discussion recently about making EmacsLisp
>
> I'm not sure I understand: do you mean Emacs does not Lisp enough yet?

Heh. Yeah. I dropped a word. I am going to work on blaming someone or
something for that and get back to you.

What I meant to say was:

  We had a lot of discussion recently about making EmacsLisp better.


> Comments:
> - "Interning a symbol with "::" in it should no longer be possible.
>   It should raise an error."  Why not simply intern it in the
>   corresponding namespace?  It's probably a bad practice, but Emacs is
>   usually not in the business of preventing bad practice.

That is a good idea. I will update the document with that. I agree emacs
is better off with it's laissez faire attitude.


> - I'm not sure how well it will cope with shadowing and non-namespaced
>   symbols (e.g. symbols like `face' that aren't used as variables).
>   The rule "global obarray is inspected first and if a symbol is found
>   there that's what is used" means that we have to be vary careful about
>   interning things in the global obarray since it can affect the way
>   other code is handled.

Give an example of a potential problem?

I *think* you mean that adding new global symbols could affect
namespaced code. But I don't think that's any different than right now.


>   Currently, we're very liberal about interning in the global obarray.
>   Basically I think this shadowing rule makes things a bit too
>   automatic for something where we need more control.

I disagree that's a reason not to try it. Yes, it could be a
problem... but the presumption has to be that new code would use this
way to namespace itself and that global pollution would therefore slow
down.

*Eventually* I'd expect things like the face use-case to be dealt with
in some sort of namespace system.


> - I'm not sure exactly how you expect importing namespaces
>   should/will work.

I'll try and add some examples I guess. It's quite simple though, if I
have a package "nic" with 2 functions:

  foo
  bar

and you have a package "stefan", then you should be able to make aliases
to nic::foo and nic::bar in "stefan" namespace.

Ideally that should work with some simple statement:

 ;; Package: stefan

 (import 'nic)
 (foo)

in this example nic::foo and nic::bar would both be imported directly
into "stefan" and after that was done the following would be true:

  (eq (symbol-function 'nic::foo)
      (symbol-function 'stefan::foo))

or:

 (import 'nic :as 'blah)
 (blah::foo)

in this example nic::foo and nic::bar would be imported under the
namespace 'blah in the package "stefan".

I guess this could then be a use case for trees of namespaces, so that:

 (stefan::blah::foo)

was possible.

I'm not sure about that last bit.


Nic



  reply	other threads:[~2013-07-26 16:56 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-26 14:08 adding namespaces to emacs-lisp (better elisp?) Nic Ferrier
2013-07-26 14:34 ` Drew Adams
2013-07-26 17:01   ` Pascal J. Bourguignon
2013-07-26 17:01   ` CommonLisp namespace system (was Re: adding namespaces to emacs-lisp (better elisp?)) Nic Ferrier
2013-07-26 17:19     ` Drew Adams
2013-07-26 18:26       ` Sebastian Wiesner
2013-07-26 18:53         ` Drew Adams
2013-07-26 21:08         ` Pascal J. Bourguignon
2013-07-26 18:23     ` Stefan Monnier
2013-07-26 18:32       ` Nic Ferrier
2013-07-26 18:45     ` Tom Tromey
2013-07-26 18:58       ` Drew Adams
2013-07-26 19:06         ` Nic Ferrier
2013-07-26 20:46           ` CommonLisp namespace system Lars Brinkhoff
2013-07-26 20:57             ` Drew Adams
2013-07-26 21:47               ` Nic Ferrier
2013-07-29 17:31                 ` Lars Brinkhoff
2013-07-26 20:57           ` CommonLisp namespace system (was Re: adding namespaces to emacs-lisp (better elisp?)) Drew Adams
2013-07-27  7:17           ` Richard Stallman
2013-07-27  8:13             ` Nic Ferrier
2013-07-27 11:43               ` Bastien
2013-07-27 12:00                 ` David Engster
2013-07-27 16:56                   ` Nic Ferrier
2013-07-27 23:52               ` Richard Stallman
2013-07-28  7:22                 ` Nic Ferrier
2013-07-28  8:18                   ` Jambunathan K
2013-07-28 12:10                   ` Richard Stallman
2013-07-28 13:48                     ` Nic Ferrier
2013-07-29 10:12                       ` Richard Stallman
2013-07-29 10:45                         ` Nic Ferrier
2013-07-30  0:31                           ` Richard Stallman
2013-07-27  9:37             ` CommonLisp namespace system Lars Brinkhoff
2013-07-26 19:42         ` CommonLisp namespace system (was Re: adding namespaces to emacs-lisp (better elisp?)) Drew Adams
2013-07-26 21:26       ` Juanma Barranquero
2013-07-26 21:06     ` Pascal J. Bourguignon
2013-07-26 21:44       ` Nic Ferrier
2013-07-27  7:16   ` adding namespaces to emacs-lisp (better elisp?) Richard Stallman
2013-07-26 15:43 ` Stefan Monnier
2013-07-26 16:56   ` Nic Ferrier [this message]
2013-07-26 18:18     ` Stefan Monnier
2013-07-26 19:00       ` Nic Ferrier
2013-07-26 20:59         ` Stefan Monnier
2013-07-26 21:43           ` Nic Ferrier
2013-07-26 21:59             ` Drew Adams
2013-07-26 22:21             ` Stefan Monnier
2013-07-26 22:33               ` Nic Ferrier
2013-07-27  0:51                 ` Stefan Monnier
2013-07-27  8:27                   ` Nic Ferrier
2013-07-27 14:12                     ` Stefan Monnier
2013-07-27 16:17                       ` Nic Ferrier
2013-07-27 17:28                         ` Stefan Monnier
2013-07-27 10:35                   ` Pascal J. Bourguignon
2013-07-26 22:00           ` Drew Adams
2013-07-27  0:49             ` Stefan Monnier
2013-07-27  1:13               ` Drew Adams
2013-07-27  7:02               ` Lars Brinkhoff
2013-07-27 10:33                 ` Pascal J. Bourguignon
2013-07-31  6:48                   ` Lars Brinkhoff
2013-07-27 10:31               ` Pascal J. Bourguignon
2013-07-27 14:14                 ` Stefan Monnier
2013-07-27 16:43                   ` Drew Adams
2013-07-26 17:21   ` Davis Herring

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=871u6l2ral.fsf@ferrier.me.uk \
    --to=nferrier@ferrier.me.uk \
    --cc=emacs-devel@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).