* guile and emacs: unexec
@ 2009-06-12 5:02 Ken Raeburn
2009-06-13 13:06 ` Andy Wingo
2009-06-18 20:44 ` Ludovic Courtès
0 siblings, 2 replies; 6+ messages in thread
From: Ken Raeburn @ 2009-06-12 5:02 UTC (permalink / raw)
To: guile-devel
I'm glad to see the emacs-lisp work is progressing. As it happens, a
month or so ago I blew some of the dust off my old guile-emacs project
and started working on it again too. This flavor of emacs+guile work
aimed to replace Lisp objects in Emacs with Guile objects at the
lowest level (numbers, cons cells; symbols and such become smobs) and
then work upwards from there.
I've updated to recent Emacs sources and Guile 1.8.6. I've gotten it
to a point where it seems to start up fine in tty mode, reads in (and
does color highlighting of) C files and directories, does some other
basic stuff. I'm tweaking it now to see if I can get more stuff
working (like Cocoa support and "make bootstrap") and do more
extensive testing.
One really big hiccup I've run into, which I've sort of sidestepped
for the moment: Guile is not unexec-friendly.
There is a way to build Emacs so it doesn't use unexec, but it then
has to load a lot of Lisp code at run time, really killing the startup
performance, and I don't think it's tested all that much (e.g., "make
bootstrap" doesn't work even without the Guile hacks). To really make
this project work, I need to be able to link against Guile (static is
fine, and probably necessary), do a bunch of Lisp/Scheme processing,
write out a memory image into a new executable, and later be able to
run that executable.
Any record of current threads needs to go away, and be replaced with
info on the new one-and-only thread in the new process; I'm building
without thread support for now to get around it. Any record of stack
regions to be scanned for SCM objects likewise needs resetting.
Allocated objects must *not* go away, and must continue to be
processed by the garbage collector, so I can't just reinitialize
everything. Assigned smob types must remain in effect, and for now
I'm ignoring the possibility that some smobs may need some kind of
reinitialization. Mutexes... well, I don't know if they need
reinitializing; POSIX is kind of unclear on interactions with
unexec. :-) I expect reinitializing them is probably safe, even if
not required in some implementations.
So... I could use some advice here. Is anyone familiar enough with
these bits of the guts of Guile to be able to point out easily what I
should do to reset the relevant parts of Guile's internal state
without trashing other stuff by mistake? Is this something that could
be useful to anyone outside of Emacs?
Ken
P.S. If anyone wants to take a look at my current work, http://www.mit.edu/~raeburn/guilemacs/guile-emacs.tar.bz2
has a snapshot from tonight.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: guile and emacs: unexec
2009-06-12 5:02 guile and emacs: unexec Ken Raeburn
@ 2009-06-13 13:06 ` Andy Wingo
2009-06-14 5:21 ` Ken Raeburn
2009-06-18 20:44 ` Ludovic Courtès
1 sibling, 1 reply; 6+ messages in thread
From: Andy Wingo @ 2009-06-13 13:06 UTC (permalink / raw)
To: Ken Raeburn; +Cc: guile-devel
Hi Ken,
On Fri 12 Jun 2009 07:02, Ken Raeburn <raeburn@raeburn.org> writes:
> I'm glad to see the emacs-lisp work is progressing. As it happens, a
> month or so ago I blew some of the dust off my old guile-emacs project
> and started working on it again too. This flavor of emacs+guile work
> aimed to replace Lisp objects in Emacs with Guile objects at the lowest
> level (numbers, cons cells; symbols and such become smobs) and then
> work upwards from there.
Very interesting! To be clear -- the goal would be to represent as much
of Emacs using cheap Guile structures as possible: numbers and cons
cells and such, and represent specific Emacs objects as smobs? That's
probably a good idea.
Symbols however should probably be represented as Guile symbols, not
smobs. I think that you will find that with a more compilation-centric
approach, we will be able to keep more simple datatypes, as we compile
the procedures that operate on those data types to appropriate code.
> I've updated to recent Emacs sources and Guile 1.8.6. I've gotten it
> to a point where it seems to start up fine in tty mode, reads in (and
> does color highlighting of) C files and directories, does some other
> basic stuff. I'm tweaking it now to see if I can get more stuff
> working (like Cocoa support and "make bootstrap") and do more
> extensive testing.
Very neat! That's fantastic that you were able to get it this far, I
didn't know that was possible.
If this is an effort that you want to pay off in the future, though, I
would strongly suggest updating to the 1.9/2.0 series of Guile. The
expressive range of Guile's multilingual facilities is much higher
there, and significantly different from 1.8.
OTOH, the emacs lisp support is not yet up to the level that it is at in
1.8, so perhaps now is not yet the time.
> One really big hiccup I've run into, which I've sort of sidestepped for
> the moment: Guile is not unexec-friendly.
>
> There is a way to build Emacs so it doesn't use unexec, but it then has
> to load a lot of Lisp code at run time, really killing the startup
> performance, and I don't think it's tested all that much (e.g., "make
> bootstrap" doesn't work even without the Guile hacks). To really make
> this project work, I need to be able to link against Guile (static is
> fine, and probably necessary), do a bunch of Lisp/Scheme processing,
> write out a memory image into a new executable, and later be able to
> run that executable.
It's true that Guile doesn't do unexec currently. It might in the
future -- obviously it will if you implement it of course ;)
But I would ask that you reconsider your approach to making Guile-Emacs
load quickly. There is no a priori reason that loading Lisp code should
be slow. With Guile-compiled elisp, loading a file is just mapping it
into memory -- the same as you have with an image. The loaded code needs
to be run to establish definitions, but that is a very quick operation.
I agree that heap saving could be slightly faster. But I think that
Emacs should be able to load from bytecode within 100 ms or so /with the
current Guile-VM code/ -- and even faster if we do native ahead-of-time
compilation at some point.
> Any record of current threads needs to go away, and be replaced with
> info on the new one-and-only thread in the new process; I'm building
> without thread support for now to get around it. Any record of stack
> regions to be scanned for SCM objects likewise needs resetting.
> Allocated objects must *not* go away, and must continue to be processed
> by the garbage collector, so I can't just reinitialize everything.
> Assigned smob types must remain in effect, and for now I'm ignoring the
> possibility that some smobs may need some kind of reinitialization.
> Mutexes... well, I don't know if they need reinitializing; POSIX is
> kind of unclear on interactions with unexec. :-) I expect
> reinitializing them is probably safe, even if not required in some
> implementations.
This could be complicated if we merge in the BDW-GC branch, to use
libgc. Note that SCM does have unexec, IIRC, we could steal parts of
their implementation
> Is this something that could be useful to anyone outside of Emacs?
Unexec certainly could, to deliver self-contained binaries. But TBH I
think the booting-from-compiled-files option is more maintainable. In
any case this would be a neat hack. Have fun! :)
> P.S. If anyone wants to take a look at my current work,
> http://www.mit.edu/~raeburn/guilemacs/guile-emacs.tar.bz2
> has a snapshot from tonight.
Cool! Have you considered using git, and branching from Emacs' git
mirror? That way it is trivial to set up something other people can
comment on, in easily-digestible patch chunks.
Happy hacking,
Andy
--
http://wingolog.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: guile and emacs: unexec
2009-06-13 13:06 ` Andy Wingo
@ 2009-06-14 5:21 ` Ken Raeburn
2009-06-20 9:33 ` Andy Wingo
0 siblings, 1 reply; 6+ messages in thread
From: Ken Raeburn @ 2009-06-14 5:21 UTC (permalink / raw)
To: Andy Wingo; +Cc: guile-devel
On Jun 13, 2009, at 09:06, Andy Wingo wrote:
> Hi Ken,
>
> On Fri 12 Jun 2009 07:02, Ken Raeburn <raeburn@raeburn.org> writes:
>
>> I'm glad to see the emacs-lisp work is progressing. As it happens, a
>> month or so ago I blew some of the dust off my old guile-emacs
>> project
>> and started working on it again too. This flavor of emacs+guile work
>> aimed to replace Lisp objects in Emacs with Guile objects at the
>> lowest
>> level (numbers, cons cells; symbols and such become smobs) and then
>> work upwards from there.
>
> Very interesting! To be clear -- the goal would be to represent as
> much
> of Emacs using cheap Guile structures as possible: numbers and cons
> cells and such, and represent specific Emacs objects as smobs? That's
> probably a good idea.
Yes -- for now, that includes anything I haven't converted, including
strings, symbols, vectors of objects, hash tables, etc. Many of what
are currently smobs should eventually be converted to using Guile's
versions, either directly or with some simple wrapping. They need to
stay identifiable in Lisp as the correct object types, so I can't
implement a Lisp string with, say, a Guile list containing a string
plus text-property data. In the long term perhaps some of them could
be implemented partly or fully in Scheme, but I don't want to diverge
radically while I still need to track the main Emacs code base.
(Please let me keep the illusion that replacing the fundamental object
representation, allocator and garbage collector, and compensating for
initialization problems throughout the code, isn't all that radical a
change. :-)
But I'm not worrying about that much right now -- if the
representation abstraction is complete and correct, the existing Emacs
code should be able to pull out all the right data from the smobs, and
results should be indistinguishable. Well, except that integer and
floating ranges may be different, hash table ordering changes --
simple, reasonable, and well-understood differences. It's not quite
there yet.
I figure, once I've got this set of changes working correctly (i.e.,
nearly indistinguishable, no random unexplained errors or differences
in behavior), then I can tackle the next steps with more confidence
that differences observed there are due to the new changes in
progress, not semantic differences previously introduced with further-
reaching effects than I expected.
It's also kind of appealing to have something at intermediate stages
that I might be able to show off, and say "hey, this works well enough
that you can try it out; want to help me on the next steps?" (And
since I'm getting into all this now, I *would* like some help. I was
just intending to fix a few more problems before making the plea. :-)
I'm specifically *not* trying to do some of the other things that have
been discussed but aren't about running Emacs -- make buffers
independent objects that can be used outside of Emacs, stuff like
that. That can come later (or not), and I'd be glad to see it happen,
but getting Emacs running at all is a big enough project for me on my
own.
> Symbols however should probably be represented as Guile symbols, not
> smobs. I think that you will find that with a more compilation-centric
> approach, we will be able to keep more simple datatypes, as we compile
> the procedures that operate on those data types to appropriate code.
Eventually, yes, I think so. They should probably be one of the next
things to change, though some like vectors and strings might be
simpler. I'm also concerned about the performance impact of making
such a switch; another reason for getting something working soon is so
it's practical to look at performance questions.
>> I've updated to recent Emacs sources and Guile 1.8.6. I've gotten it
>> to a point where it seems to start up fine in tty mode, reads in (and
>> does color highlighting of) C files and directories, does some other
>> basic stuff. I'm tweaking it now to see if I can get more stuff
>> working (like Cocoa support and "make bootstrap") and do more
>> extensive testing.
>
> Very neat! That's fantastic that you were able to get it this far, I
> didn't know that was possible.
I actually had it pretty far along once or twice before (I seem to
keep reviving this every few years, and spend a lot of time updating
to newer code bases), but I think I've managed to push it a bit
further than I had it earlier. With just me working on it, depending
on the demands of my job, there tend to be large periods when no
progress gets made, and it doesn't keep up with the upstream sources;
the prospect of having to do a bunch of catch-up work just makes it
that much less appealing to get back into it. It's been moving
forward in spurts for over a decade now, very slowly. :-(
> If this is an effort that you want to pay off in the future, though, I
> would strongly suggest updating to the 1.9/2.0 series of Guile. The
> expressive range of Guile's multilingual facilities is much higher
> there, and significantly different from 1.8.
I was looking at updating, but ran into the -I ordering problem I
reported. Since that's fixed, I'll try again sometime.
The multilingual facilities aren't very important to me right now --
like I said above, I'm mostly just switching some object
representations now, and I'm still using the Emacs code for any
multilingual stuff. Eventually that should change, but what I want of
Guile right now is a nice, simple byte array I can stick string data
into. :-) Emacs 23 is going to go out with the Emacs version of the
support, and yanking out anything made available to Lisp programmers
isn't going to go over very well. Of course, it wouldn't be very good
to wind up with duplicated work, or redundant or conflicting
interfaces, either.
> OTOH, the emacs lisp support is not yet up to the level that it is
> at in
> 1.8, so perhaps now is not yet the time.
And, I haven't started using any of that code yet, either... that's
another big change to try at some point when everything else is
looking solid. And, I assume it expects the use of Guile symbols and
Guile strings at least? In order to make this switch, too, the
semantics really have to match Emacs Lisp -- stuff like indirect
symbols, buffer- or frame-local bindings, etc. And all the Emacs C
code needs to know how to look up values (or function values, or
property lists, or whatever) when given Guile symbols. And then
there's the lexical binding branch work, which I haven't even looked
at yet.
>> One really big hiccup I've run into, which I've sort of sidestepped
>> for
>> the moment: Guile is not unexec-friendly.
>>
>> There is a way to build Emacs so it doesn't use unexec, but it then
>> has
>> to load a lot of Lisp code at run time, really killing the startup
>> performance, and I don't think it's tested all that much (e.g., "make
>> bootstrap" doesn't work even without the Guile hacks). To really
>> make
>> this project work, I need to be able to link against Guile (static is
>> fine, and probably necessary), do a bunch of Lisp/Scheme processing,
>> write out a memory image into a new executable, and later be able to
>> run that executable.
>
> It's true that Guile doesn't do unexec currently. It might in the
> future -- obviously it will if you implement it of course ;)
>
> But I would ask that you reconsider your approach to making Guile-
> Emacs
> load quickly. There is no a priori reason that loading Lisp code
> should
> be slow. With Guile-compiled elisp, loading a file is just mapping it
> into memory -- the same as you have with an image. The loaded code
> needs
> to be run to establish definitions, but that is a very quick
> operation.
I don't think the current Lisp reader is all that slow, but it has to
load and run quite a bit of stuff, especially with the
internationalization support. Especially during a "bootstrap"
operation, when most of the stuff it loads is uncompiled Lisp source
code.
It seems to me that switching to Guile-compiled elisp for startup
would require, well, basically most of the remaining work of my
project, including switching to the Guile-based Lisp reader and
evaluator, wouldn't it? So we're looking at some non-trivial changes
here. They're desirable changes, in the long run, but taking this
route would mean no efficient startup of guile-emacs any time soon,
which in turn slows down the development cycle. The unexec support
may be useless once we get there, but right now it's a much shorter
path to something useable I can show off.
(Fixing up the "interactive scheme mode" that talks to Guile directly
would be nice to show off, too. My current one is kind of a lame hack.)
> I agree that heap saving could be slightly faster. But I think that
> Emacs should be able to load from bytecode within 100 ms or so /with
> the
> current Guile-VM code/ -- and even faster if we do native ahead-of-
> time
> compilation at some point.
I'd certainly like to get there eventually.
Really, it comes down to wanting something I can make work now,
instead of a project with minimal, uninteresting intermediate results
that may or may not pay off in another decade or so, and doesn't get
anyone else interested in helping out. With the current state of
Emacs, that means unexec is kind of needed. It can sort of work
without it, but not well -- and that's true of the upstream Emacs code
base too, but no one on that side cares very much because unexec works
for them everywhere.
I've got some political concerns here too. There has also been some
resistance, when this project has come up on the Emacs lists, to
switching away from the current Lisp evaluator for any reason, even if
Guile support is added (it's not broken, major changes involve
significant risk, don't see the benefit, etc); there's also been
support, but it's contentious. So my rather vague plan has involved
putting off even addressing that possible switch until I can show
clear advantages and no blatant drawbacks (like performance, or
correctness, or handling of out-of-memory conditions) to using Guile.
I'd rather not discuss it from a position of weakness and uncertainty;
better to have working code we can experiment with and numbers we can
point to. (But first, let's experiment and generate numbers
ourselves, and see if we need to fix bugs.) Then we can discuss our
options.
I don't know how much chance there would be for getting it ready in
time for Emacs 24, but with enough help, I think Emacs 25 should be
doable; possibly even 24, who knows?
>> Any record of current threads needs to go away, and be replaced with
>> info on the new one-and-only thread in the new process; I'm building
>> without thread support for now to get around it. Any record of stack
>> regions to be scanned for SCM objects likewise needs resetting.
>> Allocated objects must *not* go away, and must continue to be
>> processed
>> by the garbage collector, so I can't just reinitialize everything.
>> Assigned smob types must remain in effect, and for now I'm
>> ignoring the
>> possibility that some smobs may need some kind of reinitialization.
>> Mutexes... well, I don't know if they need reinitializing; POSIX is
>> kind of unclear on interactions with unexec. :-) I expect
>> reinitializing them is probably safe, even if not required in some
>> implementations.
>
> This could be complicated if we merge in the BDW-GC branch, to use
> libgc. Note that SCM does have unexec, IIRC, we could steal parts of
> their implementation
That might work, yes... or if not, it sounds like I'd be stuck with
using an old Guile, or getting the CANNOT_DUMP option working and
suffering with the slow startup.
(And, this reminds me -- there are still some likely GC-related bugs
with scm_leave_guile/scm_enter_guile that should be fixed up. I got
them removed from the API years ago, but they're still used internally
in threads.c, down below the comment with my old email explaining the
doom they may bring upon us. Does BDW-GC scrap that code finally?
Please?)
>> Is this something that could be useful to anyone outside of Emacs?
>
> Unexec certainly could, to deliver self-contained binaries. But TBH I
> think the booting-from-compiled-files option is more maintainable. In
> any case this would be a neat hack. Have fun! :)
I agree, compiled files would work better, but I doubt we can push the
Emacs folks to move in that direction first. They're happy with
unexec for now.
>> P.S. If anyone wants to take a look at my current work,
>> http://www.mit.edu/~raeburn/guilemacs/guile-emacs.tar.bz2
>> has a snapshot from tonight.
>
> Cool! Have you considered using git, and branching from Emacs' git
> mirror? That way it is trivial to set up something other people can
> comment on, in easily-digestible patch chunks.
Yep, but I need to get proficient with it first, and haven't put in
the time yet; until then I'm using subversion in a rather clumsy
fashion (often just checkpointing untested merges, and my Emacs
sources have the CVS admin files checked in so I can update easily).
If it's something other people want to actually work on, on the other
hand, we could set up something via sourceforge or savannah or
whatever. But only if there's actually going to be additional help
coming....
Ken
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: guile and emacs: unexec
2009-06-12 5:02 guile and emacs: unexec Ken Raeburn
2009-06-13 13:06 ` Andy Wingo
@ 2009-06-18 20:44 ` Ludovic Courtès
1 sibling, 0 replies; 6+ messages in thread
From: Ludovic Courtès @ 2009-06-18 20:44 UTC (permalink / raw)
To: guile-devel
Hello!
Ken Raeburn <raeburn@raeburn.org> writes:
> I've updated to recent Emacs sources and Guile 1.8.6. I've gotten it
> to a point where it seems to start up fine in tty mode, reads in (and
> does color highlighting of) C files and directories, does some other
> basic stuff.
Woowww, impressive! Looking forward to looking into closer...
Thanks,
Ludo'.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: guile and emacs: unexec
2009-06-14 5:21 ` Ken Raeburn
@ 2009-06-20 9:33 ` Andy Wingo
2009-06-20 23:58 ` Ken Raeburn
0 siblings, 1 reply; 6+ messages in thread
From: Andy Wingo @ 2009-06-20 9:33 UTC (permalink / raw)
To: Ken Raeburn; +Cc: guile-devel
Howdy Ken!
On Sun 14 Jun 2009 07:21, Ken Raeburn <raeburn@raeburn.org> writes:
> On Jun 13, 2009, at 09:06, Andy Wingo wrote:
>
> Yes -- for now, that includes anything I haven't converted, including
> strings, symbols, vectors of objects, hash tables, etc. Many of what
> are currently smobs should eventually be converted to using Guile's
> versions, either directly or with some simple wrapping. They need to
> stay identifiable in Lisp as the correct object types, so I can't
> implement a Lisp string with, say, a Guile list containing a string
> plus text-property data. In the long term perhaps some of them could
> be implemented partly or fully in Scheme, but I don't want to diverge
> radically while I still need to track the main Emacs code base.
> (Please let me keep the illusion that replacing the fundamental object
> representation, allocator and garbage collector, and compensating for
> initialization problems throughout the code, isn't all that radical a
> change. :-)
:-)) Sounds like a good path to me, though I know you've thought much
more about it :)
> I figure, once I've got this set of changes working correctly (i.e.,
> nearly indistinguishable, no random unexplained errors or differences
> in behavior), then I can tackle the next steps with more confidence
> that differences observed there are due to the new changes in progress,
> not semantic differences previously introduced with further-
> reaching effects than I expected.
Sounds like a plan.
> It's also kind of appealing to have something at intermediate stages
> that I might be able to show off, and say "hey, this works well enough
> that you can try it out; want to help me on the next steps?" (And
> since I'm getting into all this now, I *would* like some help. I was
> just intending to fix a few more problems before making the plea. :-)
I'm happy to help in making Guile a better implementation of Elisp than
the one Emacs has.
> I'm specifically *not* trying to do some of the other things that have
> been discussed but aren't about running Emacs -- make buffers
> independent objects that can be used outside of Emacs, stuff like that.
> That can come later (or not), and I'd be glad to see it happen, but
> getting Emacs running at all is a big enough project for me on my
> own.
Yes this sounds like a good plan.
>> Symbols however should probably be represented as Guile symbols, not
>> smobs. I think that you will find that with a more compilation-centric
>> approach, we will be able to keep more simple datatypes, as we compile
>> the procedures that operate on those data types to appropriate code.
>
> Eventually, yes, I think so. They should probably be one of the next
> things to change, though some like vectors and strings might be
> simpler. I'm also concerned about the performance impact of making
> such a switch; another reason for getting something working soon is so
> it's practical to look at performance questions.
Daniel's work looks promising in this regard -- his idea was to make
function values and symbol values resolve the same Guile symbol in
different modules. The bindings would be Guile's fluids. Compilation
would take care of the translation. Hopefully by the time you're ready,
we'll be ready with that too.
> I actually had it pretty far along once or twice before (I seem to keep
> reviving this every few years, and spend a lot of time updating to
> newer code bases), but I think I've managed to push it a bit further
> than I had it earlier. With just me working on it, depending on the
> demands of my job, there tend to be large periods when no progress gets
> made, and it doesn't keep up with the upstream sources; the prospect of
> having to do a bunch of catch-up work just makes it that much less
> appealing to get back into it. It's been moving forward in spurts for
> over a decade now, very slowly. :-(
You know though, this whole free software thing is actually OK in this
respect. There are some technologies that just don't change very
quickly. Keisuke had a VM working in 2001, but only now in the middle of
2009 have we merged it into Guile. We'll make it :)
>> If this is an effort that you want to pay off in the future, though, I
>> would strongly suggest updating to the 1.9/2.0 series of Guile. The
>> expressive range of Guile's multilingual facilities is much higher
>> there, and significantly different from 1.8.
>
> I was looking at updating, but ran into the -I ordering problem I
> reported. Since that's fixed, I'll try again sometime.
>
> The multilingual facilities aren't very important to me right now --
Ah, I was referring to programming languages ;) Human language is
another kettle of fish. Doesn't emacs support a superset of unicode?
But in general I am very sympathetic to the goal of making minimal,
correct changes.
>> OTOH, the emacs lisp support is not yet up to the level that it is at
>> in
>> 1.8, so perhaps now is not yet the time.
>
> And, I haven't started using any of that code yet, either... that's
> another big change to try at some point when everything else is looking
> solid. And, I assume it expects the use of Guile symbols and Guile
> strings at least? In order to make this switch, too, the semantics
> really have to match Emacs Lisp -- stuff like indirect symbols, buffer-
> or frame-local bindings, etc. And all the Emacs C code needs to know
> how to look up values (or function values, or property lists, or
> whatever) when given Guile symbols. And then there's the lexical
> binding branch work, which I haven't even looked at yet.
Yes we want to make that work *correctly*, exactly as Emacs does. I
think we can do it. I bet frames and buffers should also have modules,
modules that use the global function or variable modules, as
appropriate -- would provide for quite fast lookup and switching.
>>> P.S. If anyone wants to take a look at my current work,
>>> http://www.mit.edu/~raeburn/guilemacs/guile-emacs.tar.bz2
>>> has a snapshot from tonight.
>>
>> Cool! Have you considered using git, and branching from Emacs' git
>> mirror? That way it is trivial to set up something other people can
>> comment on, in easily-digestible patch chunks.
>
> Yep, but I need to get proficient with it first, and haven't put in the
> time yet; until then I'm using subversion in a rather clumsy fashion
> (often just checkpointing untested merges, and my Emacs sources have
> the CVS admin files checked in so I can update easily). If it's
> something other people want to actually work on, on the other hand, we
> could set up something via sourceforge or savannah or whatever. But
> only if there's actually going to be additional help coming....
I would suggest setting up a Git repository on savannah, branching from
the Emacs git mirror. Then I would suggest distilling your patches into
correct, standalone patches, and committing those one-by-one. This will
help Emacs developers in addition to Guile developers. It would probably
be fine to use guile-devel as your mailing list for now -- if it ever
becomes a problem (unlikely, as we all want Guile in Emacs :) we can
split out another ML.
That way people can casually contribute, and potentially become sucked
into the Emacs vortex :)
Cheers,
Andy
--
http://wingolog.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: guile and emacs: unexec
2009-06-20 9:33 ` Andy Wingo
@ 2009-06-20 23:58 ` Ken Raeburn
0 siblings, 0 replies; 6+ messages in thread
From: Ken Raeburn @ 2009-06-20 23:58 UTC (permalink / raw)
To: Andy Wingo; +Cc: guile-devel
On Jun 20, 2009, at 05:33, Andy Wingo wrote:
>> It's also kind of appealing to have something at intermediate stages
>> that I might be able to show off, and say "hey, this works well
>> enough
>> that you can try it out; want to help me on the next steps?" (And
>> since I'm getting into all this now, I *would* like some help. I was
>> just intending to fix a few more problems before making the plea. :-)
>
> I'm happy to help in making Guile a better implementation of Elisp
> than
> the one Emacs has.
It's great to hear that.
> Daniel's work looks promising in this regard -- his idea was to make
> function values and symbol values resolve the same Guile symbol in
> different modules. The bindings would be Guile's fluids. Compilation
> would take care of the translation. Hopefully by the time you're
> ready,
> we'll be ready with that too.
At some point soon, I am going to have to go look much more closely at
this... I hope I can steer my project in a direction where I can take
advantage of some of this sooner rather than later.
>> I actually had it pretty far along once or twice before (I seem to
>> keep
>> reviving this every few years, and spend a lot of time updating to
>> newer code bases), but I think I've managed to push it a bit further
>> than I had it earlier. With just me working on it, depending on the
>> demands of my job, there tend to be large periods when no progress
>> gets
>> made, and it doesn't keep up with the upstream sources; the
>> prospect of
>> having to do a bunch of catch-up work just makes it that much less
>> appealing to get back into it. It's been moving forward in spurts
>> for
>> over a decade now, very slowly. :-(
>
> You know though, this whole free software thing is actually OK in this
> respect. There are some technologies that just don't change very
> quickly. Keisuke had a VM working in 2001, but only now in the
> middle of
> 2009 have we merged it into Guile. We'll make it :)
True. It's just a bit discouraging to have such a big project in the
works, but making relatively little progress; I want it to get
*done*! :-) Especially since, as some folks on the Emacs side remain
unconvinced, it won't be until it's nearly at the "done" stage that
I'll find out whether it's just been a huge waste of time.
> Ah, I was referring to programming languages ;) Human language is
> another kettle of fish. Doesn't emacs support a superset of unicode?
Oh, I misunderstood. That's more interesting to me at the moment,
especially if it means that as a by-product it'd someday be possible
to write code for guile-emacs in perl or python too...
> Yes we want to make that work *correctly*, exactly as Emacs does. I
> think we can do it. I bet frames and buffers should also have modules,
> modules that use the global function or variable modules, as
> appropriate -- would provide for quite fast lookup and switching.
I'll be delighted if the performance is comparable to or better than
Emacs has now, given that the Lisp system is targeted for Emacs
specifically, without needing to worry about thread support or any of
that stuff. When I get to the higher-level stuff, modules are another
thing I'll need to learn more about. :-)
>> [...use of git...]
>> Yep, but I need to get proficient with it first, and haven't put in
>> the
>> time yet; until then I'm using subversion in a rather clumsy fashion
>> (often just checkpointing untested merges, and my Emacs sources have
>> the CVS admin files checked in so I can update easily). If it's
>> something other people want to actually work on, on the other
>> hand, we
>> could set up something via sourceforge or savannah or whatever. But
>> only if there's actually going to be additional help coming....
>
> I would suggest setting up a Git repository on savannah, branching
> from
> the Emacs git mirror. Then I would suggest distilling your patches
> into
> correct, standalone patches, and committing those one-by-one. This
> will
> help Emacs developers in addition to Guile developers.
Heh... um, well, it's not that clean or even "correct", right now.
The hacks I've had to use relating to the "all-bits-zero is a valid
lisp object" assumption are scattered through a lot of the code, and I
keep finding myself adding more at random times as I chase down
crashes or other odd behavior. I've got ideas on how to fix it more
properly, but at least temporarily it will involve additional
divergence from the upstream Emacs sources (like, probably adding
static initialization to all the static-storage lisp object
variables). Hmm... come to think of it, that's probably the worst
piece by far, so maybe *that* should be my next sub-project, rather
than changing object type reps. But upstream Emacs looks like it's
going to be frozen for new features and major changes for some time to
come, so this would make merges annoying for quite a while, unless I
can convince people that it wouldn't actually destabilize anything.
Hmm...
And, as I say, I've got to learn the ins and outs of git better first,
though, before I can set up this repository.
> It would probably
> be fine to use guile-devel as your mailing list for now -- if it ever
> becomes a problem (unlikely, as we all want Guile in Emacs :) we can
> split out another ML.
I actually got a mailing list or two created years ago, back when
Cygnus existed and had its sourceware site, now at sourceware.org I
think, called guile-emacs or some such; it's been pretty dead for the
last few years. I could make new lists at savannah, but really, with
the level of traffic involved, guile-devel would probably work fine too.
Ken
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2009-06-20 23:58 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-06-12 5:02 guile and emacs: unexec Ken Raeburn
2009-06-13 13:06 ` Andy Wingo
2009-06-14 5:21 ` Ken Raeburn
2009-06-20 9:33 ` Andy Wingo
2009-06-20 23:58 ` Ken Raeburn
2009-06-18 20:44 ` Ludovic Courtès
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).