[Reflectivity] Progress with Reifications
Hi, in Pharo5 #120 we have lots of progress with Reflectivity regarding to âreificated valuesâ. 1) more reificated value are working. #arguments - an array of the arguments of a message send or method #receiver - receiver of a message (or method executed) #context for Methods #sender for method and message This means we have now all the info needed to e.g. pass all date needed to do a message send on the meta level. (receiver, args, selector), or a variable store (#name, #newValue). 2) Reifications as arguments to conditions. When the block used as a condition has arguments, the name is matched to the possible reifications and if valid this value is passed as an argument. Very useful e.g. for object specific links: link := MetaLink new condition: [: object | object == <the object I am intersted in>]; metaObject: <someObject>; selector: <some selector> This link would only be active for this one object. 3) Reifications as meta object ------------- Every valid reified value can be the metaobject of the link. e.g. you can now define a link where the meta is the node where the Link is installed: link := MetaLink new metaObject: #node; selector: #tagHasBeenExecuted. Or the #receiver: link := MetaLink new metaObject: #receiver; selector: #perform:withArguments:; arguments: #(selector arguments). TODO -> #slot, #global. #variable reifications -> #after needs to wrap in ensure: -> primitives -> more tests -> optimize link preambles: when reifying both #arguments and #receiver, merge the preamble into one for performance.
Hello Marcus, I wanted to modify some event creation in Epicea and I just used this mechanism. It's pretty cool! Cheers, On Thu, Jun 18, 2015 at 2:36 PM, Marcus Denker <marcus.denker@inria.fr> wrote:
Hi,
in Pharo5 #120 we have lots of progress with Reflectivity regarding to âreificated valuesâ.
1) more reificated value are working.
#arguments - an array of the arguments of a message send or method #receiver - receiver of a message (or method executed) #context for Methods #sender for method and message
This means we have now all the info needed to e.g. pass all date needed to do a message send on the meta level. (receiver, args, selector), or a variable store (#name, #newValue).
2) Reifications as arguments to conditions. When the block used as a condition has arguments, the name is matched to the possible reifications and if valid this value is passed as an argument. Very useful e.g. for object specific links:
link := MetaLink new condition: [: object | object == <the object I am intersted in>]; metaObject: <someObject>; selector: <some selector>
This link would only be active for this one object.
3) Reifications as meta object -------------
Every valid reified value can be the metaobject of the link. e.g. you can now define a link where the meta is the node where the Link is installed:
link := MetaLink new metaObject: #node; selector: #tagHasBeenExecuted.
Or the #receiver:
link := MetaLink new metaObject: #receiver; selector: #perform:withArguments:; arguments: #(selector arguments).
TODO
-> #slot, #global. #variable reifications -> #after needs to wrap in ensure: -> primitives -> more tests -> optimize link preambles: when reifying both #arguments and #receiver, merge the preamble into one for performance.
-- Gustavo Santos
"Reificated" is not a word. The word that means what you want is "reified". -C -- Craig Latta netjam.org +31 6 2757 7177 (SMS ok) + 1 415 287 3547 (no SMS)
On 11 Sep 2015, at 17:28, Gustavo Santos <gugajansen@gmail.com> wrote:
Hello Marcus,
I wanted to modify some event creation in Epicea and I just used this mechanism. It's pretty cool!
Very good that is was helpful! If you find any problems, let me know⦠there will be many cases where things are not yet working as they should. But it seems to get more stable with each that we fix. Marcus
participants (3)
-
Craig Latta -
Gustavo Santos -
Marcus Denker