"interesting" doesn't convey much information. Does it mean positive interesting, as in you'd be interested in trying it? Or does it mean negative interesting, as in your interested in why I would want such a crazy feature in the first place? :)
> Does it mean positive interesting, as in you'd be interested in trying it?
This one. If it were the negative interesting, I'd ask you directly "what for?" ^^
Hmm. Although it might be difficult to do with a copying GC.
As an aside, I'm thinking of exposing the "sharedvar" objects into arc, basically they would be called the "container" type. An arc-on-mzscheme implementation would be:
Basically assigning to it would be equivalent to setting the pointer, and (foo) would be equivalent to (* foo) in C.
I thought it might be useful in a C FFI (when I get there in, say, T=inf). If a C function accepts a int*, for example, where it would put an int, you would pass in a container, which would automagically get the int.
Sounds like a reasonable syntax. Would the value in a container in a container be accessed with ((foo))? It fits, but it might get old after a while.
Also, how similar would these "containers" be to pointers? It doesn't seem like it would be as useful, because I doubt you can increment/decrement a container.
So, what are the problems we might encounter if we actually use this?
The value pointed to by the container would be accessed with (foo), just a single layer of parens. The container's pointer would be mutated as (= (foo) ...) though. Oh well.
Edit: Oh, you said "container in a container". Yes, ((foo)) it is.
> It doesn't seem like it would be as useful, because I doubt you can increment/decrement a container
This functionality would be in a scanner, although a scanner, technically, would be just an iterator.
For instance, I fully intend to implement string scanners and input file scanners on the C++-side in SNAP; they would be somewhat "safe" wrappers around C++ iterators, which are just a generalization on the pointer. so (car foo) would be *foo and (cdr foo) would be (foo + 1).
> what are the problems we might encounter if we actually use this?
None at all, if you're talking about just containers and scanners. A container is just a reference to an Arc object. A scanner would just be an Arc-safe wrapper around an iterator.