From: Drew Adams <drew.adams@oracle.com>
To: Eli Zaretskii <eliz@gnu.org>, Dmitry Gutov <dgutov@yandex.ru>
Cc: emacs-devel@gnu.org
Subject: RE: Opaque objects and Emacs documentation
Date: Fri, 17 Jul 2020 08:41:34 -0700 (PDT) [thread overview]
Message-ID: <c8dccd05-55f1-4bcf-ab2e-e6e9d8cb6142@default> (raw)
In-Reply-To: <<83a6zyk4tt.fsf@gnu.org>>
FWIW, since the question was asked -
I'm in favor of documenting pretty much all
Emacs-Lisp functions and variables _all the way
down_.
(Even lambda expressions sometimes deserve a doc
string. And yes, a comment can also serve, but
a doc string is generally better for describing
what something is or does. A comment is generally
good for describing design decisions or unobvious
code considerations.)
And this is so whether or not someone considers
this or that particular thing to be "internal",
whether just for now or for all time.
If you write code for yourself, any designation
of "internal" is just a note to yourself that
either (a) the code in question is asking to be
revisited and possibly changed later, perhaps
including its interfaces with other code, or (b)
the code in question is tricky or fragile, so
fiddling with it can be asking for trouble.
With free software, all code we write is code
for ourselves, because ourselves includes
everyone, now or later. This means that all
labeling of "internal" is only a comment saying
(a) or (b), above.
Such labeling is _never_ a reason, with free
software, _not_ to describe something. We're
not (should not be) trying to hide anything
from anyone, including ourselves.
There's too much labeling of stuff in Emacs as
"internal", IMO, and this has increased over
time. For the most part it's not necessary or
useful.
Too often, I think, such branding as "internal"
is really a cop-out from someone who isn't
interested in the doc/help, or doesn't want to
take the time to describe things (e.g. in
English), or has trouble doing so, or just has
a mental "block" about doing so (similar to
math phobia), or even is unsure of the thing
to be described and wants to save the possible
embarrassment of offering an off-the-mark
description. Such "feeling" motivations do
happen sometimes.
Such feelings can be understandable, but they
are never a reason why the things in question
_shouldn't_ be described. They can be reasons
why the person having such feelings shouldn't
need to be the one to document those things.
They're just not a reason why things shouldn't
be documented at all.
The case of generated functions and variables
is a special one. Generic functions are one
example of creating things programmatically.
`cl-defstruct' is another example. Even things
like `define-minor-mode' are examples.
In these cases we need to (should, IMO) find
ways to:
1. Programmatically add _some_ useful doc, when
feasible. We've done that for things like
`define-minor-mode', but there's still room
for improvement.
2. Provide ways for the programmatically added
doc to be manually tweaked (supplemented,
replaced).
3. Actually _do_ such manual tweaking. And
to the extent that we haven't provided
good solutions for #1 and #2, just provide
the doc manually, whenever possible.
Lisp is not your average language. And free
software doesn't have the same constraints
and purposes as proprietary software. _Some_
of the typical encapsulation and rendering of
things as opaque/internal is motivated by a
spirit of protection of property/control that
doesn't apply to free software.
The point is not to not have abstractions or
use macros or higher-order functions. It's
not to _force_ someone to dive deep for
understanding. The point is to provide help
all the way up and down. There's no good
reason _not_ to do that, IMO.
"Don't look! - INTERNAL" is, in particular,
not a good reason. It's not a reason at all,
except perhaps in the context of protecting
private property, which we're not in the
business of doing, here. Opaqueness should
be anathema to free software.
Just one opinion. And thanks for posing the
question, Eli.
next parent reply other threads:[~2020-07-17 15:41 UTC|newest]
Thread overview: 99+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <<20200712184908.13140.5739@vcs0.savannah.gnu.org>
[not found] ` <<20200712184909.BBC61209B1@vcs0.savannah.gnu.org>
[not found] ` <<7bf4d6ef-c0ec-43dc-ad5d-f6e81422ad90@yandex.ru>
[not found] ` <<83zh84m5ws.fsf@gnu.org>
[not found] ` <<3dd1c224-69b2-40af-5b2e-43a310253632@yandex.ru>
[not found] ` <<83tuybmtxs.fsf@gnu.org>
[not found] ` <<859f594b-1343-6d26-e1ac-7157c44eb56c@yandex.ru>
[not found] ` <<83a6zyk4tt.fsf@gnu.org>
2020-07-17 15:41 ` Drew Adams [this message]
2020-07-17 15:49 ` Opaque objects and Emacs documentation Dmitry Gutov
2020-07-17 15:59 ` Drew Adams
[not found] <20200712184908.13140.5739@vcs0.savannah.gnu.org>
[not found] ` <20200712184909.BBC61209B1@vcs0.savannah.gnu.org>
2020-07-12 20:07 ` master 0339325: ; * lisp/progmodes/project.el (project-current): Doc fix Dmitry Gutov
2020-07-13 3:48 ` Eli Zaretskii
2020-07-13 11:09 ` Dmitry Gutov
2020-07-13 13:21 ` Eli Zaretskii
2020-07-16 22:40 ` Dmitry Gutov
2020-07-17 6:56 ` Opaque objects and Emacs documentation Eli Zaretskii
2020-07-17 8:13 ` tomas
2020-07-17 10:40 ` Dmitry Gutov
2020-07-17 15:38 ` tomas
2020-07-17 10:37 ` Basil L. Contovounesios
2020-07-17 10:46 ` Dmitry Gutov
2020-07-17 10:53 ` Basil L. Contovounesios
2020-07-17 10:53 ` Dmitry Gutov
2020-07-17 11:14 ` Eli Zaretskii
2020-07-17 12:02 ` Noam Postavsky
2020-07-17 12:52 ` Eli Zaretskii
2020-07-17 13:09 ` Dmitry Gutov
2020-07-17 13:56 ` Eli Zaretskii
2020-07-17 14:35 ` Dmitry Gutov
2020-07-17 14:59 ` Eli Zaretskii
2020-07-17 15:03 ` Dmitry Gutov
2020-07-18 1:54 ` Richard Stallman
2020-07-18 19:17 ` Dmitry Gutov
2020-07-19 2:27 ` Richard Stallman
2020-07-19 14:48 ` Eli Zaretskii
2020-07-21 19:00 ` Dmitry Gutov
2020-07-21 19:36 ` Eli Zaretskii
2020-07-21 20:56 ` Dmitry Gutov
2020-07-21 21:06 ` Tomas Hlavaty
2020-07-21 20:49 ` Tomas Hlavaty
2020-07-21 20:59 ` Dmitry Gutov
2020-07-21 21:20 ` Tomas Hlavaty
2020-07-21 21:25 ` Dmitry Gutov
2020-07-21 19:08 ` Dmitry Gutov
2020-07-21 19:38 ` Eli Zaretskii
2020-07-21 21:02 ` Dmitry Gutov
2020-07-21 20:29 ` John Yates
2020-07-22 0:45 ` Dmitry Gutov
2020-07-22 14:08 ` Eli Zaretskii
2020-07-19 22:02 ` Dmitry Gutov
2020-07-20 2:44 ` Richard Stallman
2020-07-21 1:09 ` Dmitry Gutov
2020-07-21 8:57 ` tomas
2020-07-21 10:14 ` Dmitry Gutov
2020-07-21 10:29 ` tomas
2020-07-21 14:34 ` Eli Zaretskii
2020-07-21 18:56 ` Dmitry Gutov
2020-07-21 19:33 ` Eli Zaretskii
2020-07-21 21:31 ` Dmitry Gutov
2020-07-22 14:28 ` Eli Zaretskii
2020-07-22 15:44 ` Dmitry Gutov
2020-07-22 16:30 ` Eli Zaretskii
2020-07-22 16:37 ` Dmitry Gutov
2020-07-21 19:36 ` Alan Mackenzie
2020-07-21 21:17 ` Dmitry Gutov
2020-07-22 14:31 ` Eli Zaretskii
2020-07-22 15:33 ` Dmitry Gutov
2020-07-22 16:22 ` Eli Zaretskii
2020-07-22 16:26 ` Dmitry Gutov
2020-07-23 4:04 ` Richard Stallman
2020-07-23 13:42 ` Dmitry Gutov
2020-07-22 11:43 ` João Távora
2020-07-17 13:08 ` Dmitry Gutov
2020-07-17 13:42 ` Dmitry Gutov
2020-07-17 14:22 ` Eli Zaretskii
2020-07-17 14:56 ` Dmitry Gutov
2020-07-17 16:56 ` John Yates
2020-07-17 17:13 ` Drew Adams
2020-07-17 19:04 ` Eli Zaretskii
2020-07-17 19:26 ` Dmitry Gutov
2020-07-17 19:25 ` Dmitry Gutov
2020-07-17 11:53 ` Gregory Heytings via Emacs development discussions.
2020-07-17 13:13 ` Dmitry Gutov
2020-07-17 14:26 ` Gregory Heytings via Emacs development discussions.
2020-07-17 16:58 ` Drew Adams
2020-07-17 19:22 ` Dmitry Gutov
2020-07-17 22:30 ` Gregory Heytings via Emacs development discussions.
2020-07-18 0:00 ` Yuan Fu
2020-07-18 1:01 ` Drew Adams
2020-07-18 1:55 ` Richard Stallman
2020-07-17 16:48 ` Stefan Monnier
2020-07-23 23:24 ` Andy Moreton
2020-07-23 23:40 ` Andy Moreton
2020-07-24 5:32 ` Eli Zaretskii
2020-07-24 11:23 ` Andy Moreton
2020-07-24 11:43 ` Eli Zaretskii
2020-07-24 0:43 ` Dmitry Gutov
2020-07-24 1:22 ` Andy Moreton
2020-07-24 5:47 ` Eli Zaretskii
2020-07-25 16:33 ` Andy Moreton
2020-07-25 16:51 ` Eli Zaretskii
2020-07-25 20:18 ` Andy Moreton
2020-07-26 2:27 ` Eli Zaretskii
2020-07-26 9:16 ` Andy Moreton
2020-07-26 14:02 ` Eli Zaretskii
2020-07-24 20:49 ` Dmitry Gutov
2020-07-25 16:38 ` Andy Moreton
2020-07-24 5:45 ` Eli Zaretskii
2020-07-24 14:56 ` Dmitry Gutov
2020-07-24 17:21 ` Drew Adams
2020-07-24 17:42 ` Eli Zaretskii
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=c8dccd05-55f1-4bcf-ab2e-e6e9d8cb6142@default \
--to=drew.adams@oracle.com \
--cc=dgutov@yandex.ru \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
/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).