[Top][All Lists]

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

Re: Opaque objects and Emacs documentation

From: Eli Zaretskii
Subject: Re: Opaque objects and Emacs documentation
Date: Fri, 17 Jul 2020 17:22:21 +0300

> Cc: emacs-devel@gnu.org
> From: Dmitry Gutov <dgutov@yandex.ru>
> Date: Fri, 17 Jul 2020 16:42:55 +0300
> >> It shouldn't come as a surprise that I think there is no better
> >> technological choice. Otherwise I would have used it.
> > 
> > ??? You are saying that the _only_ way to design project.el is to use
> > generics at that high level?  Just because sometimes a "project
> > instance" is a cons cell and sometimes some other Lisp structure?  I'm
> > surprised to hear that.
> This logic is backwards. The generics are here because we make good use 
> of them.

That wasn't the issue.  The issue is whether we should use these
techniques in a way that makes it hard or impossible to document our
functions and commands.  Even if technically this is the best design
(and I don't yet see why this should be so, nor see any arguments
presented to justify that), we may decide that the price is too heavy.

> The use of cons cells or some other structures, is a choice, basically 
> arbitrary, that can change at will. That is another reason why I don't 
> like to see the low-level description in the docstring of project-current.

As was already written several times, internal implementation details
can be documented without any real impediment of future development.
So this argument is invalid.

> > I tried to find one, but couldn't.  If someone wants to propose a way,
> > I'm all ears.  I wrote those comments which started this thread
> > because it surprised me how difficult it was to try to keep the
> > limitations you impose on what should and what shouldn't be divulged,
> > and yet produce useful documentation of what the various public
> > functions do.  In all my 40 years of experience with Emacs, I have
> > never bumped into such a brick wall, with no way around it.
> I'm saying it's nothing new: completion tables, for instance, have been 
> quite as abstract.

That one bad example exist doesn't mean we want others.

> But for some reason you are fine with docstrings that say "ARG is a 
> completion table", or "returns a completion table"?

Who said I was fine with them?  Rome wasn't built in a day.

> > Later it became apparent that you are doing this on purpose, because
> > you have decided that certain directions of developing the package
> > should be made as hard as possible,
> That is an unfair misstatement of my words.

I provided the URL for your words, so that everyone will be able to
make their own minds, in case I've indeed misstated them.

> >    https://lists.gnu.org/archive/html/emacs-devel/2020-07/msg00288.html
> > 
> > especially under "Here are things we want third-party code to be able
> > to do" and "Here are, on the other hand, things that people generally
> > shouldn't do".  Again, I'm interested to know how many of us here
> > share those views.
> Those are not examples of "developing the package". Those are examples 
> of using it.

Consuming the package's API and adding backends is development of
project.el.  (It is also "using" it, but not on the user level, so
saying that is "using" just muddies the waters, but doesn't affect the
main issue in any way.)

> >> The problem here is that even if you document a particular value, it's
> >> _not useful_. It doesn't show you what you can or should do with it.
> > 
> > It was very useful for me, and so I presume it could be useful for
> > others.
> It has been useful to you to find an answer to a minor question: "how 
> projects are compared, which projects are equal?". Which is not 
> something most people will even think about.

Why not?  Of course they will.

Besides, the question about what exactly is a "project instance" is
relevant in many places in the package, just look how many doc strings
mention that phrase.

> And even answering that question for the project-vc case doesn't give 
> you a general answer. I don't see how you are content with only having 
> that answer for a special case anyway.

That's the only case that we have for now, so it's highly relevant and

> > Even if you think it is not useful for you, the fact that
> > fellow developers tell you the contrary should be a reason to revisit
> > your views, and maybe allow for other views as well, even if you
> > disagree.
> Perhaps if someone else said "I wanted to do a (valid thing X), couldn't 
> understand how to do it, and this piece of information would have made 
> it easier"?
> No such declarations so far.

Since when we write documentation only when someone asks a question?
Documentation is supposed to be proactive, it should answer the
important questions before they are asked.

> > Documentation should strive to serve different ways of studying and
> > developing Emacs, not just a single way that you personally think is
> > The (only) Right Thing.
> I already said you can add code comments. Preferably somewhere which is 
> not the main entry point of the API.

I'm sure you understand how low is my motivation to do any work on
documenting project.el.  Look what happened last time: I improved
several doc strings, and suddenly I have a dispute that lasts for a
month, and ends up accusing me in all the sins on Earth, including
that I cause contributors to flee and don't understand the code I'm
reading.  I'm only human, and have a busy schedule; unpleasant jobs
get pushed back and delayed.

> > Once again: concealing information because someone could be silly
> > enough to misuse it punishes many valid uses on behalf of a few
> > invalid ones.
> Which valid uses, though?

Any and all of them.

> > We should treat our users as responsible adults, even
> > if some of them aren't.  Those who aren't will eventually be amply
> > punished, or will recognize their mistakes and get their act together.
> Our users are not all "responsible adults", or to put it differently, 
> are not all professional programmers. Even even those who are, are at 
> very different levels of skill.

That's exactly the crux of our disagreement, right there.  I don't
agree with such paternalistic views of our contributors and users.

> And even when writing documentation for professional programmers, it is 
> always considered a good taste to structure it so that it encourages 
> writing good code, and discourages writing bad one.

We encourage writing good code, but not through hiding important

reply via email to

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