From: Andy Wingo <wingo@pobox.com>
To: guile-devel <guile-devel@gnu.org>
Subject: vm status update
Date: Sat, 14 Feb 2009 23:32:46 +0100 [thread overview]
Message-ID: <m3bpt4ps35.fsf@pobox.com> (raw)
Greets!
So, yes, it's Saturday night: but I do love Guile hacking so. (Also: my
partner is away.) So a VM status update it is!
* The parts of the instruction stream that are mapped directly to
"struct scm_objcode" are now aligned to 8-byte boundaries, and
written in native endianness.
* Much more source information propagates through the compiler and
into the metadata now. In short, whereas before it was "expressions
are only marked as coming from a source location if they are eq? to
an expression read in by guile", now it is "expressions are marked
with the source location of their containing expression, unless they
are eq? to an expression read by guile".
The upshot is that original source information is preserved to a
much broader extent than before, as macro-expanded or transformed
expressions all have some kind of anchor to the original source.
Another ramification of this is that procedures have source
information corresponding to where they were really defined, in
addition to locations of their subexpressions. (program-source foo
0) will give you that.
* The in-bytecode metadata representation has been compressed. Now we
associate bytecode offsets with line-column pairs, and only record
that information when it changes. The idea is, byte N in the
instruction stream corresponds to source info for byte M, where M <=
N. Also, we only record the filename when it changes.
This means that we can have more source information, as mentioned
above, but still have objcode files of similar size.
* The VM dispatches to signal handlers (asyncs) more often,
specifically: on return from a call, just before a call, and on a
tail call.
* Stack captures are much more reliable. Before there were some bugs.
This allows statprof to work properly, capturing the whole stack up
to a common root.
* I set out to optimize GOOPS, and ended up writing a new call tree
visualizer:
http://wingolog.org/archives/2009/02/09/visualizing-statistical-profiles-with-chartprof
It turns out that most of the time loading GOOPS is in the compiler,
which comes from those dynamic recompilation bits I mentioned in the
past. So I focused on optimizing the compiler -- it is much faster
now.
But still, for the uses that GOOPS has, a closure is better than a
compiler. I changed thing in GOOPS so that it doesn't compile at
runtime any more, and now on this machine GOOPS loads in something
like 40ms. That's pretty good! Though improvements are possible, of
course.
* The VM now has support for separate engines. Currently the engines
are just "regular" and "debug", defaulting to "debug". There are not
interfaces to change this at runtime, yet. But it turns out there's
not much difference. See vm-engine.c for more details. It seems that
native compilation would be much better than a "reckless" engine.
Well, that's about it as far as changes go. And as far as status? I'm
going to update the docs for changes in the last month, then talk
seriously about a merge to master. I think it's ready.
Happy hacking,
Andy
ps. Guile finally loads faster than Python now. It's about time...
--
http://wingolog.org/
next reply other threads:[~2009-02-14 22:32 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-14 22:32 Andy Wingo [this message]
2009-02-16 11:47 ` vm status update Marijn Schouten (hkBst)
2009-03-08 11:49 ` Neil Jerram
2009-03-10 21:36 ` Andy Wingo
2009-03-12 20:49 ` Neil Jerram
-- strict thread matches above, loose matches on Subject: below --
2009-03-06 19:52 Andy Wingo
2009-03-06 22:31 ` Ludovic Courtès
2009-03-08 22:40 ` Neil Jerram
2009-03-10 21:04 ` Andy Wingo
2009-01-11 17:35 Andy Wingo
2009-01-13 8:05 ` Ludovic Courtès
2008-12-26 17:24 Andy Wingo
2008-12-28 22:50 ` Neil Jerram
2009-01-05 16:06 ` Ludovic Courtès
2009-01-05 16:45 ` Neil Jerram
2009-01-05 19:53 ` Ludovic Courtès
2009-01-05 17:57 ` Andy Wingo
2009-01-05 21:03 ` Ludovic Courtès
2009-01-06 9:52 ` Andy Wingo
2009-01-06 14:54 ` Ludovic Courtès
2008-09-13 15:59 Andy Wingo
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/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m3bpt4ps35.fsf@pobox.com \
--to=wingo@pobox.com \
--cc=guile-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.
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).