unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
From: Panicz Maciej Godek <godek.maciek@gmail.com>
To: Daniel Hartwig <mandyke@gmail.com>
Cc: guile-user@gnu.org
Subject: Re: procedure-source availability
Date: Wed, 3 Oct 2012 18:27:19 +0200	[thread overview]
Message-ID: <CAMFYt2aSAtyfBhVgDhX2iaJ2-q-=EMfN8N-XKxYocpAu+UG20g@mail.gmail.com> (raw)
In-Reply-To: <CAN3veRcz+xqxorR2rYLATVzsuWcBdx0Pi50ansBHFvwME+PxfA@mail.gmail.com>

> On 3 October 2012 03:29, Panicz Maciej Godek <godek.maciek@gmail.com> wrote:
>> Well, the idea for now is that the associated .spec file containing
>> the state of GUI is loaded on startup, and the state of the
>> interpreter is dumped to that file on exit (or at GUI's request).
>> Viewing the file will obviously be an option (for the curious user),
>> but any modifications would probably be overwritten eventually (unless
>> the file is write-protected).
>
> You may be interested to see how Smalltalk handles this kind of thing.
>  IIRC it dumps the complete VM state to disk and reloads.  Even
> pre-packaged programs are simply VM dumps.

I recall someone having the idea of adding smalltalk-like images to guile.
I'd love to see such feature one day, but if guile is supposed to be
an extension language, I think the C interface would need to be
redesigned, because there would be a need to somehow dump the smobs
from the heap to re-load them later.
I don't know much about the implementation of the GOOPS objects, but I
suspect that they would also require some means of serialization

>  To deconstruct and then
> reconstruct the running state of a system is quite a complex task.

I would use the word 'interesting' instead :)
And if it works, the advantage is that the result can be modified by humans.

> Keep your own record of source information, etc. when your objects are
> instantiated.  Associate this with each using object properties (or
> similar construct).  This way you have any required environment and
> precisely the source which generated the object, the user can inspect
> this if interested and it can be used to create new instances.

Well, this is more or less the way I do it. There is a well-defined
hierarchy of objects which can be dumped. But I want the system to
remain flexible, so that the user will be able to create his or her
own methods and functions (especially that anonymous functions are so
common in scheme), and therefore obtaining procedure names is not
enough.

> As someone mentioned earlier, the way macros are expanded there is no
> single point to define (internal to guile) what is the “source” of a
> procedure.  However, your system can define this as it has a clear
> point of object instantiation.

As I said, I don't want to loose flexibility. If I could rename lambda, like
(define primitive-lambda lambda)

then I could easily implement this functionality myself (making 'self'
a reserved keyword)

(define-syntax lambda
  (syntax-rules ()
    ((_ args body ...)
     (let ((self (primitive-lambda args body ...)))
       (set-procedure-property! self 'source (quote (primitive-lambda
args body ...)))
       self))))

> I have not worked on such a system myself, so am poking around in the
> dark here.  Good luck :-)

:) thanks



  reply	other threads:[~2012-10-03 16:27 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-23 19:05 procedure-source availability Panicz Maciej Godek
2012-09-30 20:11 ` Panicz Maciej Godek
2012-10-01  3:40   ` Mark H Weaver
2012-10-01 16:31     ` Panicz Maciej Godek
2012-10-02 14:06       ` Ludovic Courtès
2012-10-02 19:29         ` Panicz Maciej Godek
2012-10-03  1:03           ` Daniel Hartwig
2012-10-03 16:27             ` Panicz Maciej Godek [this message]
2012-10-04 19:40               ` Ludovic Courtès
2012-10-07  0:07                 ` Panicz Maciej Godek
2012-10-07 20:36                   ` Ludovic Courtès
2012-10-08 20:11                     ` Panicz Maciej Godek
2012-10-08 17:57                   ` Mark H Weaver
2012-10-04 16:16           ` Ludovic Courtès

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='CAMFYt2aSAtyfBhVgDhX2iaJ2-q-=EMfN8N-XKxYocpAu+UG20g@mail.gmail.com' \
    --to=godek.maciek@gmail.com \
    --cc=guile-user@gnu.org \
    --cc=mandyke@gmail.com \
    /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).