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

Re: [Scheme-reports] REPL



On Wed, Nov 14 2012, Per Bothner wrote:

> On 11/14/2012 01:01 PM, Marc Feeley wrote:
>> Let me say that I find it contrary to the spririt of Scheme to
>> prevent redefinition and assignment of exported variables.
>
> Let me say that regardless of the "spirit of Scheme", I think disallowing
> redefinition / re-assignment is a Good Thing.  At least as a default:
> It might be reasonable to allow re-assignment for variable that have been
> explicitly declared to allow that, though I don't see a major use case 
> for it.

Erlang, a language that has otherwise no assignments, supports "code
replacement":
http://www.erlang.org/doc/reference_manual/code_loading.html#id83993

That's a valuable feature not just for debugging but also for
maintaining long running servers.

> Also, an implementation might allow a "debug mode" that can allow
> exported variables to be re-assigned, but I don't think it should be
> alloweded in normal use.
>
> Two alternative to consider (perhaps for WC2):
>
> * Kawa has a define-variable form which is used to explicitly mark dynamic
> variables.  I.e. these force dynamic run-time lookup, without inlining.
> This is also a convenient way to turn off compile-time undefined-variable
> warnings/errors, for compilers that offer that.
>
> * A mechanism to define "properties": Associate a variable with a pair
> of a getter and a setter function.  This allows generate read or write hooks
> (useful for debugging and many other purposes).  One might allow exporting
> of a getter/setter pair, which can be used as a variable.
> (This is just an idea - I haven't actually tried to see how this might
> work for Scheme libraries.)

Easier to use might be a library declaration like (mutable #t) that
tells the system that all bindings in this library should be mutable
(and not inlinable) with set!.

Helmut

_______________________________________________
Scheme-reports mailing list
Scheme-reports@x
http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports