From: Vladimir Sedach <vas@oneofus.la>
To: Daniel Colascione <dancol@dancol.org>
Cc: "Tom Tromey" <tom@tromey.com>,
emacs-devel@gnu.org, "Stefan Monnier" <monnier@iro.umontreal.ca>,
"João Távora" <joaotavora@gmail.com>
Subject: Re: Proper namespaces in Elisp
Date: Fri, 08 May 2020 11:59:28 -0700 [thread overview]
Message-ID: <875zd62qy7.fsf@t510.orion.oneofus.la> (raw)
In-Reply-To: <1225997b-648a-068d-7f6b-e1575477a0d0@dancol.org>
Daniel Colascione <dancol@dancol.org> writes:
> Common Lisp does deal with this problem in some cases, e.g., in LOOP.
> We should be moving forwards keywords anyway.
LOOP would not even have to deal with that if namespaces were over
bindings, like Andrea suggested, and what Scheme module systems do.
> FWIW, I think elisp should just literally copy Common Lisp's
> approach.
Please see this other sub-thread where I explain why this is a really
bad idea:
https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg00623.html
> It's tried and tested, and the pitfalls are well-understood.
Well-understood enough where people want to throw away most of how it
does namespace imports, and have a backward-compatible replacement
ready this year:
https://gist.github.com/phoe/2b63f33a2a4727a437403eceb7a6b4a3
There is no need to repeat the same mistakes. Andrea's proposal for
namespacing over bindings/Scheme's approach avoids mangling the
reader, does not cause problems for the printer, and does not make
code resort to symbol-name hacks like LOOP does. Scheme's approach to
namespacing has a lot of advantages over Common Lisp's.
We can also avoid the "namespace multiple inheritance" problems of
unintended re-definition and import conflicts if we combine João's
approach of declaring prefixes with the ideas of package-local
nicknames and namespaces over bindings.
Here is how that might look:
--8<---------------cut here---------------start------------->8---
(declare-namespace jennys-awesome-string-library
(use elisp29)
(export foo))
(declare-namespace jonnys-amazing-syntax-library
(use elisp29)
(export foo))
(declare-namespace some-new-library
(use elisp30)
(import jennys-awesome-string-library st-)
(import jonnys-amazing-syntax-library sy-))
--8<---------------cut here---------------end--------------->8---
In some-new-library, st-foo refers unambiguously to the binding of
foo in jennys-awesome-string-library, and sy-foo to the binding of
foo in jonnys-amazing-syntax-library. If a package wants a literal
quoted symbol like 'string as input somewhere, or as a literal in a
macro (LOOP), that is no problem (it would be in Common Lisp!).
No modifications to the reader or printer needed.
You can even specify the prefix to end in a semicolon, and it looks
like Common Lisp. I think a visually distinct separator like a
semicolon has a lot of legibility advantages, and this scheme lets
you choose whatever you prefer.
--
Vladimir Sedach
Software engineering services in Los Angeles https://oneofus.la
next prev parent reply other threads:[~2020-05-08 18:59 UTC|newest]
Thread overview: 101+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-04 10:52 Proper namespaces in Elisp João Távora
2020-05-04 15:11 ` Adam Porter
2020-05-04 15:38 ` Clément Pit-Claudel
2020-05-04 15:49 ` João Távora
2020-05-04 16:39 ` Adam Porter
2020-05-04 16:49 ` João Távora
2020-05-04 18:00 ` Clément Pit-Claudel
2020-05-04 20:19 ` Vladimir Sedach
2020-05-05 2:51 ` Richard Stallman
2020-05-04 15:29 ` Clément Pit-Claudel
2020-05-04 16:04 ` João Távora
2020-05-04 18:29 ` Helmut Eller
2020-05-04 18:39 ` Stefan Monnier
2020-05-04 19:02 ` João Távora
2020-05-04 19:20 ` Stefan Monnier
2020-05-04 19:49 ` João Távora
2020-05-04 21:59 ` Andrea Corallo
2020-05-04 22:34 ` João Távora
2020-05-05 10:33 ` Andrea Corallo
2020-05-05 10:54 ` Andrea Corallo
2020-05-05 12:50 ` João Távora
2020-05-05 13:34 ` Andrea Corallo
2020-05-05 14:03 ` João Távora
2020-05-05 14:26 ` Andrea Corallo
2020-05-05 21:20 ` João Távora
2020-05-05 23:37 ` Andrea Corallo
2020-05-06 0:15 ` João Távora
2020-05-06 7:07 ` Andrea Corallo
2020-05-06 19:48 ` João Távora
2020-05-07 6:13 ` Andrea Corallo
2020-05-05 13:45 ` Stefan Monnier
2020-05-05 14:07 ` João Távora
2020-05-05 4:55 ` Helmut Eller
2020-05-04 21:40 ` Vladimir Sedach
2020-05-04 22:09 ` João Távora
2020-05-05 1:09 ` Vladimir Sedach
2020-05-05 9:38 ` João Távora
2020-05-05 16:41 ` Vladimir Sedach
2020-05-05 21:29 ` João Távora
2020-05-06 3:25 ` Vladimir Sedach
2020-05-06 19:38 ` João Távora
2020-05-06 22:47 ` Vladimir Sedach
2020-05-07 10:00 ` João Távora
2020-05-07 18:30 ` Vladimir Sedach
2020-05-07 19:32 ` João Távora
2020-05-04 22:40 ` João Távora
2020-05-05 1:24 ` Vladimir Sedach
2020-05-04 15:43 ` Stefan Monnier
2020-05-05 15:10 ` Tom Tromey
2020-05-05 21:30 ` João Távora
2020-05-07 2:23 ` Tom Tromey
2020-05-07 3:12 ` Stefan Monnier
2020-05-07 13:02 ` Tom Tromey
2020-05-07 13:48 ` João Távora
2020-05-07 18:17 ` Stefan Monnier
2020-05-07 18:48 ` Vladimir Sedach
2020-05-07 20:33 ` João Távora
2020-05-08 2:56 ` Vladimir Sedach
2020-05-08 15:56 ` João Távora
2020-05-08 17:59 ` Vladimir Sedach
2020-05-08 18:38 ` João Távora
2020-05-07 19:37 ` Daniel Colascione
2020-05-07 20:28 ` Stefan Monnier
2020-05-07 20:42 ` Daniel Colascione
2020-05-07 21:06 ` Stefan Monnier
2020-05-07 21:10 ` Daniel Colascione
2020-05-07 21:46 ` João Távora
2020-05-07 21:56 ` Daniel Colascione
2020-05-07 22:12 ` João Távora
2020-05-08 18:59 ` Vladimir Sedach [this message]
2020-05-08 19:34 ` Daniel Colascione
2020-05-09 0:00 ` Vladimir Sedach
2020-05-09 0:32 ` Daniel Colascione
2020-05-09 8:37 ` Andrea Corallo
2020-05-09 16:11 ` Daniel Colascione
2020-05-09 17:25 ` Andrea Corallo
2020-05-09 17:45 ` Daniel Colascione
2020-05-09 18:23 ` João Távora
2020-05-09 18:32 ` Daniel Colascione
2020-05-09 18:35 ` João Távora
2020-05-09 18:39 ` Daniel Colascione
2020-05-09 19:11 ` João Távora
2020-05-09 18:30 ` Andrea Corallo
2020-05-09 18:33 ` Daniel Colascione
2020-05-09 18:48 ` Andrea Corallo
2020-05-09 20:34 ` Why :USE sucks in the Common Lisp package system Michał "phoe" Herda
2020-05-09 21:47 ` João Távora
2020-05-09 21:55 ` Michał "phoe" Herda
2020-05-09 22:01 ` Daniel Colascione
2020-05-09 22:07 ` Michał "phoe" Herda
2020-05-09 22:12 ` João Távora
2020-05-10 10:10 ` Michał "phoe" Herda
2020-05-09 23:23 ` Andrea Corallo
2020-05-10 6:46 ` Andreas Schwab
2020-05-10 8:53 ` Helmut Eller
2020-05-10 9:59 ` Michał "phoe" Herda
2020-05-10 1:19 ` Proper namespaces in Elisp Vladimir Sedach
2020-05-08 23:07 ` Andrea Corallo
2020-05-08 23:23 ` Stefan Monnier
2020-05-09 8:12 ` Andrea Corallo
2020-05-09 12:06 ` Tuấn-Anh Nguyễn
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=875zd62qy7.fsf@t510.orion.oneofus.la \
--to=vas@oneofus.la \
--cc=dancol@dancol.org \
--cc=emacs-devel@gnu.org \
--cc=joaotavora@gmail.com \
--cc=monnier@iro.umontreal.ca \
--cc=tom@tromey.com \
/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).