guile-user
[Top][All Lists]
Advanced

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

Re: Transient environment with standard functions


From: Basa Centro
Subject: Re: Transient environment with standard functions
Date: Sat, 11 Jun 2016 15:15:42 +0000

It seems in essence you are building up a Scheme expression using the
graph and the code snippets and evaluating that expression.  If this
is the case, do you even need to use a module system and/or to
explicitly create environments?  Prima facie, it looks like you are
trying to reinvent the wheel.  Is your graph really just equivalent to
an S-exp?

Scheme is lexically scoped, and creates a "transient environment" for
you through the use of lambdas.

Your use of thunks suggests that you are doing caching or lazy-eval.

I'm not sure this helps, but I hope so.  When thinking about this
topic, I had this mental image of a GUI for building Scheme
expressions--like "Visual Scheme". :)

(Basa)

On 6/10/16, Matthew Keeter <address@hidden> wrote:
> The specific use case is for dataflow graphs, where you’re evaluating a
> bunch of small
> snippets of code that can refer to each other by name.
>
> I’d like to make an environment in which the variables in the same subgraph
> are
> exposed as no-argument thunks.
>
> For example, let’s say I have one subgraph that contains
>     a = “12” => evaluates to 12
>     b = “(+ 1 (a))” => evaluates to 13, since the (a) thunk evaluates to 12
>
> and another subgraph which contains
>     x = “1” => evaluates to 1
>     y = “(* (x) 2)” => evaluates to 2
>
> If I insert the thunks into (scheme-report-environment 5), they leak from
> one graph
> to another – and to be fair, the docs to say that assigning into this
> environment is
> undefined behavior.
>
> However, if I make an empty environment with (null-environment), it doesn’t
> have
> useful functions like + and *; looks like (make-module) has the same issue.
>
> I'm sure that this is possible in Guile, but I got tired of reading through
> the source
> files to hunt down undocumented function that do what I need [1].
>
> -Matt
>
> [1] Another recent incident: How do you programmatically list all of the
> variables in a module?
> You search the web, find http://www.draketo.de/proj/guile-basics/#sec-3-2,
> see a a reference to
> module-map, which doesn’t exist in the documentation, dig it up in the
> source to see its
> arguments, etc…
>
> On Jun 10, 2016, at 6:11 PM, Basa Centro <address@hidden> wrote:
>
>>> First of all: is the "sandboxing" aspect of these environment important?
>>
>> Taylan,
>>
>> Thanks, that's exactly what I meant by "motivation" in my first reply.
>> (There was a recent, 6 months ago or so, thread on sandboxing in
>> guile-user by the way.)
>>
>> Was Matt trying to prevent _access_ (inaccessible vs. read-only vs.
>> read/write) to data?  Or was he trying to prevent only _visibility_
>> (e.g. for hygeine)?
>>
>> I think we need to know more about "what" and "why" to answer his
>> question, rather than just "how"--if that makes any sense.  Does
>> Racket [1] even _really_ achieve what he needs to do (_prevent_ access
>> for example)?  We don't even know if we don't understand the
>> higher-level purpose.
>>
>> (Basa)
>>
>> [1] Disclaimer: I like Racket too--it is a great project.  I just hate
>> to see someone leave Guile because of a minor technicality.
>
>



reply via email to

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