unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Lynn Winebarger <owinebar@gmail.com>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: Eli Zaretskii <eliz@gnu.org>, Po Lu <luangruo@yahoo.com>,
	emacs-devel <emacs-devel@gnu.org>
Subject: Re: Docstring hack
Date: Sun, 31 Jul 2022 08:43:09 -0400	[thread overview]
Message-ID: <CAM=F=bCKGozhWDmFGQ0U7X69vJhR7+4Fmzf=3C45giW_RfNDpg@mail.gmail.com> (raw)
In-Reply-To: <jwv5yjdu3a8.fsf-monnier+emacs@gnu.org>

[-- Attachment #1: Type: text/plain, Size: 3496 bytes --]

On Sun, Jul 31, 2022, 4:03 AM Stefan Monnier <monnier@iro.umontreal.ca>
wrote:

> > OK, but I still lack some glue to understand the issue.  Specifically:
> >
> >   . the OP said "strings that are erroneously treated as docstrings in
> >     dump mode" -- where's the code which makes that mistake, and how
> >     is read_literal_string related to that mistake?
> >   . why isn't there an alternative to fix read_literal_string not to
> >     generate zero instead of the format template? the other

>     alternatives all look like partial kludges to me

The first 4 yes, but the fifth one was to remove that and just modify the
evaluator to not set those properties during dump mode.
But if the only need for this feature is in loading loaddefs.el in dump
mode, then that is overkill.  I don't understand why the docstrings are
even being extracted for the byte compiled files at all, since they would
be lazy loaded anyway.  Then you could remove the files from lisp.mk from
the dependencies of DOC in the Makefile and just leave loaddefs and the
docstrings from C source files.

In `read_literal_string` there is a hack that dates back to Emacs's
> early life where we drop the string we just read and return the
> 0 literal instead.  We do that for those strings we think are docstrings
> that will be found in etc/DOC and will be re-provided later when we call
> `Snarf-documentation` (which should then replace those 0 literals with
> appropriate integers pointing into etc/DOC).
>
> The reason for this hack is to avoid allocating the string in the heap
> (or worse, the purespace) since it's to be found lazily in
> etc/DOC instead.
>
> But we don't have a sure-fire way to recognize those strings, so we use
> a convention that they start with "double-quote backslash newline" (this
> same convention is then used in `make-docfile` in order to find those
> strings).  But some non-preloaded files also use "double-quote backslash
> newline" for other reasons, such as in `eieio-defclass-autoload`.
>

They are everywhere in fact, not just as arguments to format.


> Not sure why it's a problem for Lynn, tho: he should not try to preload
> `eieio-core.el` but only `eieio-core.elc` where the problem should not
> appear any more.


This is the conundrum of trying to do anything significant in site-load
without Makefile support.  If you're bootstrapping, then none of those
files are compiled.  So I put in a check to only load after the bootstrap
during the dump. But nothing is byte compiled at this point other than the
files in loadup.  Trying to do the byte compile from within site-load after
the bootstrap but during the dump requires pre loading the source of all
dependencies, because require and autoload hit the panic button in dump
mode.

I finally just wrote a shell script yesterday that I could invoke from
site-load to add the compiled versions of the libraries loaded in site-load
to lisp.mk (so they will get added to the list of preloaded libraries in
the final dump), then invoke make on them.  This can cause some issues
since a significant number of them require loaddefs to be loaded.  I might
be better off just adding the extra libraries directly to the environment
variable the compiler references (to determine preloaded libraries).  I
don't know if that will make a difference in determining coherence for
dumping during native-compilation.  In any case, when the shell script
calls make, it needs to arrange for the byte compiler to load loaddefs.

Lynn

[-- Attachment #2: Type: text/html, Size: 4803 bytes --]

  reply	other threads:[~2022-07-31 12:43 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-30 12:14 Docstring hack Lynn Winebarger
2022-07-30 12:25 ` Po Lu
2022-07-30 12:50   ` Lynn Winebarger
2022-07-30 13:04     ` Lynn Winebarger
2022-07-30 13:32     ` Po Lu
2022-07-30 13:28 ` Eli Zaretskii
2022-07-30 13:36   ` Po Lu
2022-07-30 15:11     ` Eli Zaretskii
2022-07-30 15:38       ` Lynn Winebarger
2022-07-30 15:44         ` Eli Zaretskii
2022-07-30 16:32           ` Lynn Winebarger
2022-07-30 16:43             ` Eli Zaretskii
2022-07-31  2:17               ` Po Lu
2022-07-31  6:27                 ` Eli Zaretskii
2022-07-31  7:24                   ` Po Lu
2022-07-31  7:56                     ` Eli Zaretskii
2022-07-31  8:48                       ` Po Lu
2022-07-31  9:14                         ` Lars Ingebrigtsen
2022-07-31 22:31                           ` Stefan Monnier
2022-08-01 10:38                             ` Lars Ingebrigtsen
2022-08-04  4:12                         ` Lynn Winebarger
2022-07-31 12:53                       ` Lynn Winebarger
2022-07-31 13:05                         ` Eli Zaretskii
2022-07-31 20:29                           ` Lynn Winebarger
2022-08-01  1:05                             ` Po Lu
2022-08-01 11:07                             ` Eli Zaretskii
2022-07-31  8:03                   ` Stefan Monnier
2022-07-31 12:43                     ` Lynn Winebarger [this message]
2022-07-31 21:32                       ` Stefan Monnier
2022-08-02 16:55                         ` Lynn Winebarger
2022-07-31 11:57               ` Lynn Winebarger
2022-07-31  0:52       ` Po Lu
2022-07-31  7:52     ` Stefan Monnier

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='CAM=F=bCKGozhWDmFGQ0U7X69vJhR7+4Fmzf=3C45giW_RfNDpg@mail.gmail.com' \
    --to=owinebar@gmail.com \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=luangruo@yahoo.com \
    --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).