Hi, there. Please find attached the addition of outer-scope access to DynamicVariable. Any thoughts on performance and programming interface? I would like to add it to trunk in the next week. :-) Best, Marcel |
Just one: DynamicVariable is incompatible with stack operations (*). Delimited dynamic variables are what you want, and they're in a package on SqueakMap - http://map.squeak.org/package/00e786be-3742-4976-be5b-ddfb6b51aeda. (*)
http://okmij.org/ftp/Computation/dynamic-binding.html#DDBinding digs into why that is - the tl;dr is "because there are multiple incompatible possible sensible ways of combining dynamic binding and dynamic control (stack operations), there are no sensible ways of combining the two". frank On Thu, 18 Apr 2019 at 05:41, Marcel Taeumel <[hidden email]> wrote:
|
In reply to this post by marcel.taeumel
Hi, I'm curious about the requirement for this. Is it for debugging/inspection purposes? Because I think regular application code should not try to access outer scope values of a dynamic variable. Much like it should not access any arguments of method contexts further up the call stack. Kind regards, Jakob Am Do., 18. Apr. 2019 um 14:42 Uhr schrieb Marcel Taeumel <[hidden email]>:
|
Hi Jakob, I want to implement a dynamic lookup mechanism using dictionaries that are bound via a dynamic variable. Due to subclassing DynamicVariable using a proper name, such outer-scope access will be modular and maintainable in this scenario. I think that one would not consider this as "regular application code" but rather "meta-stuff in a framework". :-) Hi Frank, would it make sense to add those delimited dynamic variables to trunk? Best, Marcel
|
I'd prefer to prevent any such 'outer scope variable' stuff. We have this mechanism for handling getting information from places - message sends.
tim -- tim Rowledge; [hidden email]; http://www.rowledge.org/tim Strange OpCodes: HSJ: Hop, Skip and Jump |
Tim's reply kind've broke the thread but anyhoo: it is of course all message sends; the problem is finding the right thing to which to send a message. If the target of your message is meant to be something dynamically scoped then delimited dynamic variables are the tool for the job. I only didn't push Control into trunk because I was also pushing for kernel minification. Seemed a bit hypocritical. Levante I'm sure will point out that delimited dynamic variables are expensive - they're implemented using reasonable exceptions after all. Yes they are. They also actually work, unlike the current DynamicVariable which, like Scala's implementation, doesn't behave sensibly after a stack splice. frank On Tue., Apr. 23, 2019, 17:58 tim Rowledge, <[hidden email]> wrote: I'd prefer to prevent any such 'outer scope variable' stuff. We have this mechanism for handling getting information from places - message sends. |
Free forum by Nabble | Edit this page |