Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
Reflection and Context
Report
Marcus Denker
Follow
Research Scientist at INRIA
Sep. 18, 2011
•
0 likes
1 likes
×
Be the first to like this
Show More
•
1,918 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Check these out next
Reflection
Marcus Denker
Reflectivity Demo
Marcus Denker
Unanticipated Partial Behavioral Reflection
Marcus Denker
Unanticipated Partial Behavioral Reflection
ESUG
Beyond Text - Methods as Objects
Marcus Denker
Presentation about my Research
Marcus Denker
The meta of Meta-object Architectures
Marcus Denker
Refactoring
Marcus Denker
1
of
54
Top clipped slide
Reflection and Context
Sep. 18, 2011
•
0 likes
1 likes
×
Be the first to like this
Show More
•
1,918 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Technology
Lecture at Universite catholique de Louvain, 17.03.2011
Marcus Denker
Follow
Research Scientist at INRIA
Advertisement
Advertisement
Advertisement
Recommended
Lecture: Reflection
Marcus Denker
845 views
•
41 slides
Lecture: Reflection
Marcus Denker
2.2K views
•
47 slides
Sub-Method Reflection
Marcus Denker
394 views
•
22 slides
VeriFlow Presentation
Krystle Bates
69 views
•
32 slides
Zookeeper Architecture
Prasad Wali
240 views
•
12 slides
Stefano Giordano
GoWireless
459 views
•
50 slides
More Related Content
Similar to Reflection and Context
(20)
Reflection
Marcus Denker
•
663 views
Reflectivity Demo
Marcus Denker
•
751 views
Unanticipated Partial Behavioral Reflection
Marcus Denker
•
249 views
Unanticipated Partial Behavioral Reflection
ESUG
•
773 views
Beyond Text - Methods as Objects
Marcus Denker
•
474 views
Presentation about my Research
Marcus Denker
•
625 views
The meta of Meta-object Architectures
Marcus Denker
•
585 views
Refactoring
Marcus Denker
•
1K views
Sub-method Structural and Behavioral Reflection
Marcus Denker
•
603 views
The Reflectivity
ESUG
•
415 views
Demo: Reflectivity
Marcus Denker
•
724 views
Unstuck
Marcus Denker
•
611 views
Talk: Practical, Pluggable Types
Marcus Denker
•
514 views
Behavioral Reflection
Marcus Denker
•
1.9K views
Software Evolution from the Field: an Experience Report
Marcus Denker
•
408 views
DDD, CQRS and testing with ASP.Net MVC
Andy Butland
•
7.7K views
08 refactoring
The World of Smalltalk
•
1.7K views
Lecture. Advanced Reflection: MetaLinks
Marcus Denker
•
7 views
Cs 1023 lec 2 (week 1) edit 1
stanbridge
•
123 views
Cs 1023 lec 2 (week 1) edit 1
stanbridge
•
264 views
More from Marcus Denker
(20)
Variables in Pharo
Marcus Denker
•
49 views
Improving code completion for Pharo
Marcus Denker
•
291 views
VUB Brussels Lecture 2019: Advanced Reflection: MetaLinks
Marcus Denker
•
211 views
Slot Composition
Marcus Denker
•
289 views
Lecture: Advanced Reflection. MetaLinks
Marcus Denker
•
1.3K views
PHARO IOT
Marcus Denker
•
2.9K views
Open-Source: An Infinite Game
Marcus Denker
•
1.2K views
Lecture: MetaLinks
Marcus Denker
•
4.1K views
PharoTechTalk: Contributing to Pharo
Marcus Denker
•
683 views
Feedback Loops in Practice
Marcus Denker
•
859 views
Pharo6 - ESUG17
Marcus Denker
•
709 views
Pharo6
Marcus Denker
•
502 views
Reflection in Pharo: Beyond Smalltak
Marcus Denker
•
1.2K views
Reflection in Pharo: Beyond Smalltak
Marcus Denker
•
745 views
Perfection & Feedback Loops or: why worse is better
Marcus Denker
•
7.5K views
Dynamically Composing Collection Operations through Collection Promises
Marcus Denker
•
726 views
Variables in Pharo5
Marcus Denker
•
2.4K views
Reflection in Pharo5
Marcus Denker
•
3.2K views
How to Contribute to Pharo
Marcus Denker
•
1.3K views
Pharo Status (from PharoDays 2015)
Marcus Denker
•
1.3K views
Advertisement
Recently uploaded
(20)
National Pharmaceutical Pricing Authority-WPS Office.pptx
Sudipta Roy
•
0 views
What is Taxonomy and Ontology.pdf
ssuser09bd27
•
0 views
拉筹伯大学毕业证办理|La Trobe文凭购买
eunha17
•
0 views
Antenna_Design__Measurements_Laboratory_Lectures.pdf
Fredrick Isingo
•
0 views
ServeDocs - User Guide.pdf
VivekPatil607881
•
0 views
Role of MV Cable Accessories.pdf
Compaq International (P) Limited
•
0 views
plantilla-cv-animado (2).pptx
LeidyMungua
•
3 views
Good Regulatory Practices.pptx
Sudipta Roy
•
0 views
TRANSACTION CONCEPTppt.pptx
DummyTest9
•
0 views
Blockchain Technology
Aryan Chaudhary
•
0 views
Why should your startup outsource software development.pdf
MaryLogan11
•
0 views
DIMT 2023 SG - Hands-on Workshop_ Getting started with Confluent Cloud.pdf
confluent
•
4 views
ICCMIT_2018 SAHBI MARROUCHI - Copie.ppt
SAHBIMARROUCHI3
•
0 views
Medical Termination of Pregnancy Act.pptx
Sudipta Roy
•
0 views
NLEM.pptx
Sudipta Roy
•
0 views
Computer insights.pptx
AsadKhokhar14
•
2 views
EN-04 (1).pptx
TienTran779192
•
3 views
SOPHIA-The Robot.pptx
ManjariPorwal
•
0 views
MCQ.pptx
Sudipta Roy
•
0 views
DIGITAL-ELECTRONICS-DESIGN.pptx
SofiaArquero2
•
0 views
Reflection and Context
Reflection and Context
Marcus Denker marcus.denker@inria.fr http://rmod.lille.inria.fr © Marcus Denker
Roadmap > I. Sub-Method
Structural Reflection > II. Partial Behavioral Reflection > III. Meta Context © Marcus Denker
Smalltalk >
Smalltalk has support for reflection > Structural reflection — Classes / methods are objects — Can be changed at runtime > Behavioral reflection — Current execution reified (thisContext) — #doesNotUnderstand / MethodWrappers © Marcus Denker
Can we do
better? > Structural Reflection stops at method level — Bytecode in the CompiledMethod: Numbers — Text: Just a String, needs to be compiled > Behavior hard coded in the Virtual Machine — Message Sending — Variable Access > Both structural and behavioral reflection is limited — We should do better! © Marcus Denker
Structural Reflection >
Structure modeled as objects — e.g. Classes, methods — Causally connected > Uses: — Development environments — Language extensions and experiments © Marcus Denker
Methods and Reflection >
Method are Objects — e.g in Smalltalk > No high-level model for sub-method elements — Message sends — Assignments — Variable access > Structural reflection stops at the granularity of methods © Marcus Denker
Sub-Method Reflection >
Many tools work on sub method level — Profiler, Refactoring Tool, Debugger, Type Checker > Communication between tools needed — Example: Code coverage > All tools use different representations — Tools are harder to build — Communication not possible © Marcus Denker
Existing Method Representations >
Existing representations for Methods — Text — Bytecode — AST © Marcus Denker
Requirements >
Causal Connection > Abstraction Level > Extensibility > Persistency > Size and Performance © Marcus Denker
Text >
Low level abstraction — String of characters > Not causally connected — Need to call compiler © Marcus Denker
Bytecode >
Low level abstraction — Array of Integers > Missing extensibility — e.g. for tools > Mix of base- and meta-level code — Problems with synthesized code when changing code — Examples: AOP point-cut residues, reflection hooks © Marcus Denker
Abstract Syntax Tree >
Not causally connected — Need to call compiler > Not extensible — Fixed set of codes, no way to store meta data > Not persistent — Generated by compiler from text, never stored © Marcus Denker
Solution: Reflective Methods >
Annotated, persistent AST > Bytecode generated on demand and cached :ReflectiveMethod :CompiledMethod annotation compiledMethod #(12 13 45 38 98 128 annotation reflectiveMethod 84 72 42 77 22 28 59 32 7 49 51 87 64) Tools VM © Marcus Denker
Persephone >
Implementation of Reflective Methods for Squeak 3.9 > Smalltalk compiler generates Reflective Methods — Translated to bytecode on demand > Open Compiler: Plugins — Called before code generation — Transform a copy of the AST © Marcus Denker
Requirements revisited >
Abstraction Level OK > Causal Connection OK > Extensibility OK > Persistency OK > Size and Performance OK © Marcus Denker
Annotations >
Source visible annotations — extended Smalltalk syntax (9 raisedTo: 10000) <:evaluateAtCompiletime:> > Source invisible annotations — Reflective API — Can reference any object > Every node can be annotated > Semantics: Compiler Plugins © Marcus Denker
Example: Pluggable Type-System >
Example for textual annotations bitFromBoolean: aBoolean <:type: Boolean :> ^ (aBoolean ifTrue: [1] ifFalse: [0]) <:type: Integer :> > Optional, pluggable type-system > Types stored as annotations in the Reflective Methods © Marcus Denker
Memory
number of classes memory Squeak 3.9 2040 15.7 MB Persephone 2224 20 MB no reflective methods Persephone 2224 123 MB reflective methods © Marcus Denker
Roadmap > I. Sub-Method
Structural Reflection > II. Partial Behavioral Reflection > III. Meta Context © Marcus Denker
Behavioral Reflection >
Reflect on the execution — method execution — message sending, variable access > In Smalltalk — No model of execution below method body — message sending / variable access hard coded by VM — #doesNotUnderstand / MethodWrappers > Reflective capabilities of Smalltalk should be improved! © Marcus Denker
MetaclassTalk >
Extends the Smalltalk metaclass model — Similar to CLOS MOP > Metaclass defines — message lookup — access to instance variables > Problems: — Reflection only controllable at class boundaries — No fine-grained selection (e.g. single operations) — Protocol between base and meta level is fixed © Marcus Denker
Reflex: Partial Behavioral
Reflection > Hooksets: collection of operation occurrences > Links — Bind hooksets to meta-objects — Define protocol between base and meta metaobject > Goals — Highly selective reification links activation condition — Flexible meta-level engineering – Protocol specification hookset – Cross-cutting hooksets Tanter, OOPSLA03 © Marcus Denker
Example: Profiler >
Operation: — Method execution (around) > Hookset: — All execution operations in a package metaobject > Meta-object: — A profiling tool links activation condition hookset © Marcus Denker
Reflex for Squeak >
Partial Behavioral Reflection pioneered in Java — Code transformation at load time — Not unanticipated (it’s Java...) > Geppetto: Partial Behavioral Reflection for Smalltalk — For Squeak 3.9 with Bytecode transformation © Marcus Denker
Problems >
Annotation performance — Decompile bytecode > Execution performance — Preambles for stack manipulation > Low-level representation — ifTrue:ifFalse: — Blocks — Global variables © Marcus Denker
Links as Annotations >
Links can be annotations on the AST Method Meta Link © Marcus Denker
Behavioral Reflection: Flexible
meta-object links activation condition source code (AST) > Very Flexible © Marcus Denker
Behavioral Reflection: CLOS
meta-object links activation condition source code (AST) > Meta-class MOP (CLOS) © Marcus Denker
Behavioral Reflection: AOP
meta-object links activation condition source code (AST) > Aspects © Marcus Denker
Behavioral Reflection: Tracer
tracer metaobject link source code (AST) > Tracer © Marcus Denker
Properties >
Very fast annotations — No decompile! > On-the-fly code generation — Only code executed gets generated > Generated code is fast — Better then working on bytecode level © Marcus Denker
Demo >
Show Bounce Demo © Marcus Denker
Reflectivity >
Prototype implementation in Squeak — Sub-Method Structure — Partial Behavioral Reflection > Download: http:/scg.unibe.ch/Research/Reflectivity © Marcus Denker
Reflectivity: Pharo >
Not yet.... but soon. — Slowly revisiting all research stuff — Now we can do it for real! – Engineering vs. Research... © Marcus Denker
Roadmap > I. Sub-Method
Structural Reflection > II. Partial Behavioral Reflection > III. Meta Context © Marcus Denker
Behavioral Reflection: Flexible
meta-object links activation condition source code (AST) > Letʼs use it! © Marcus Denker
Problem: Recursion >
Behavioral reflection cannot be applied to the whole system — System classes — Meta-objects © Marcus Denker
Example: Beeper >
Call the Beeper from OrderedCollection>>#add beepLink := Link new metaObject: Beeper. beepLink selector: #beep. (OrderedCollection>>#add:) methodNode link: beepLink. © Marcus Denker
Meta-object Call Recursion
Base Level Meta Object Meta Object #add: send #beep send #add: send #beep send #add: send Infinite recursion © Marcus Denker
Ad-hoc Solutions >
Code duplication > Adding special tests © Marcus Denker
Tower of Interpreters >
Smith, 1982 © Marcus Denker
The Real Problem
Representing Meta-Level Execution © Marcus Denker
The Meta-Context
Base Level Meta Level MetaContext activation > Link enables MetaContext MetaContext deactivation © Marcus Denker
Context-aware Links
Base Level Meta Level Stop meta-level call > Disable call when already on the meta-level © Marcus Denker
MetaContext >
Recursion problem solved meta-object meta links level 0 operation base © Marcus Denker
MetaContext
metameta- object meta-2 link level 1 > Meta-level analysis: meta-object meta — Trace the tracer links level 0 operation base © Marcus Denker
MetaContext >
Recursion problem > Missing representation of meta-level execution > Meta-context — Solves the recursion problem — Enables meta-level analysis © Marcus Denker
transaction
set-slot insert-slot remove-slot define-method remove-method declare-delegation system set-slot insert-slot remove-slot define-method remove-method declare-delegation © Marcus Denker
non-destructive operations also
need to see the objects belonging to the current transaction (empty? inventory ) (empty? inventory’ ) alter-object (with-context @transaction (defmethod send (selector arguments) (let ((log (log (host-context)))) (do-slots (arguments argument index) (setf ($slot-value arguments index) (gethash argument log argument)))) (resend))) case study is not implemented purely on top of the object model - System must make sure that any method invoked in transaction context sees the © Marcus Denker transactional versions of modified objects, rather than the original versions.
Rethinking Reflection >
Meta change “shows through” — Introspection shows implementation — Recursion and confusion of meta levels > Reflective change is always global — Any change is visible to the whole system — No way to batch multiple changes into one atomic operation © Marcus Denker
Next steps >
Generalize context model: — Beyond context as control flow. > Virtual machine support... to make it practical > What is the next reflective language kernel? © Marcus Denker
A lot of
open questions... thats why it is Research... ????? © Marcus Denker
Questions
? © Marcus Denker
License >
http://creativecommons.org/licenses/by-sa/2.5/ Attribution-ShareAlike 2.5 You are free: • to copy, distribute, display, and perform the work • to make derivative works • to make commercial use of the work Under the following conditions: Attribution. You must attribute the work in the manner specified by the author or licensor. " Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one. • For any reuse or distribution, you must make clear to others the license terms of this work. • Any of these conditions can be waived if you get permission from the copyright holder. Your fair use and other rights are in no way affected by the above. © Marcus Denker
Advertisement