Smalltalk-80: bits of history, words of advice
Smalltalk-80: bits of history, words of advice
Smalltalk-80: the language and its implementation
Smalltalk-80: the language and its implementation
SMALLTALK-80: the interactive programming environment
SMALLTALK-80: the interactive programming environment
An efficient, incremental, automatic garbage collector
Communications of the ACM
Communications of the ACM
Levels of representation of programs and the architecture of universal host machines
MICRO 11 Proceedings of the 11th annual workshop on Microprogramming
Machine-independent PASCAL code optimization
SIGPLAN '79 Proceedings of the 1979 SIGPLAN symposium on Compiler construction
The design and construction of flexible and efficient interactive programming systems
The design and construction of flexible and efficient interactive programming systems
SIGPLAN '86 Proceedings of the 1986 SIGPLAN symposium on Compiler construction
Microprogrammable processor for object-oriented architecture
ISCA '86 Proceedings of the 13th annual international symposium on Computer architecture
Fast object-oriented procedure calls: lessons from the Intel 432
ISCA '86 Proceedings of the 13th annual international symposium on Computer architecture
SOAR: Smalltalk without bytecodes
OOPLSA '86 Conference proceedings on Object-oriented programming systems, languages and applications
A third generation Smalltalk-80 implementation
OOPLSA '86 Conference proceedings on Object-oriented programming systems, languages and applications
Swamp: a fast processor for Smalltalk-80
OOPLSA '86 Conference proceedings on Object-oriented programming systems, languages and applications
QUICKTALK: a Smalltalk-80 dialect for defining primitive methods
OOPLSA '86 Conference proceedings on Object-oriented programming systems, languages and applications
Hurricane: an optimizing compiler for Smalltalk
OOPLSA '86 Conference proceedings on Object-oriented programming systems, languages and applications
OOPLSA '86 Conference proceedings on Object-oriented programming systems, languages and applications
Mimic: a fast system/370 simulator
SIGPLAN '87 Papers of the Symposium on Interpreters and interpretive techniques
Managing stack frames in Smalltalk
SIGPLAN '87 Papers of the Symposium on Interpreters and interpretive techniques
Memory allocation and higher-order functions
SIGPLAN '87 Papers of the Symposium on Interpreters and interpretive techniques
Compiling Smalltalk-80 to a RISC
ASPLOS II Proceedings of the second international conference on Architectual support for programming languages and operating systems
The design and implementation of distributed Smalltalk
OOPSLA '87 Conference proceedings on Object-oriented programming systems, languages and applications
BrouHaHa- A portable Smalltalk interpreter
OOPSLA '87 Conference proceedings on Object-oriented programming systems, languages and applications
Experience and evolution of concurrent Smalltalk
OOPSLA '87 Conference proceedings on Object-oriented programming systems, languages and applications
Issues in the design of object-oriented database programming languages
OOPSLA '87 Conference proceedings on Object-oriented programming systems, languages and applications
Tenuring policies for generation-based storage reclamation
OOPSLA '88 Conference proceedings on Object-oriented programming systems, languages and applications
TS: an optimizing compiler for smalltalk
OOPSLA '88 Conference proceedings on Object-oriented programming systems, languages and applications
Workshop on compiling and optimizing
OOPSLA '87 Addendum to the proceedings on Object-oriented programming systems, languages and applications (Addendum)
Implementation strategies for continuations
LFP '88 Proceedings of the 1988 ACM conference on LISP and functional programming
PLDI '89 Proceedings of the ACM SIGPLAN 1989 Conference on Programming language design and implementation
Design of the opportunistic garbage collector
OOPSLA '89 Conference proceedings on Object-oriented programming systems, languages and applications
An efficient implementation of SELF a dynamically-typed object-oriented language based on prototypes
OOPSLA '89 Conference proceedings on Object-oriented programming systems, languages and applications
Reflective facilities in Smalltalk-80
OOPSLA '89 Conference proceedings on Object-oriented programming systems, languages and applications
PLDI '90 Proceedings of the ACM SIGPLAN 1990 conference on Programming language design and implementation
A portable interface for on-the-fly instruction space modification
ASPLOS IV Proceedings of the fourth international conference on Architectural support for programming languages and operating systems
An adaptive tenuring policy for generation scavengers
ACM Transactions on Programming Languages and Systems (TOPLAS)
Making pure object-oriented languages practical
OOPSLA '91 Conference proceedings on Object-oriented programming systems, languages, and applications
CLOStrophobia: its etiology and treatment
ACM SIGPLAN OOPS Messenger
Animating an actor programming model
ACM SIGPLAN OOPS Messenger
Optimizing method search with lookup caches and incremental coloring
OOPSLA '92 conference proceedings on Object-oriented programming systems, languages, and applications
Debugging optimized code with dynamic deoptimization
PLDI '92 Proceedings of the ACM SIGPLAN 1992 conference on Programming language design and implementation
The design and implementation of HoME
PLDI '92 Proceedings of the ACM SIGPLAN 1992 conference on Programming language design and implementation
Precise instruction scheduling without a precise machine model
ACM SIGARCH Computer Architecture News
Implementing Haskell overloading
FPCA '93 Proceedings of the conference on Functional programming languages and computer architecture
Selector table indexing & sparse arrays
OOPSLA '93 Proceedings of the eighth annual conference on Object-oriented programming systems, languages, and applications
Metalevel building blocks for modular systems
ACM Transactions on Programming Languages and Systems (TOPLAS)
Optimizing dynamically-dispatched calls with run-time type feedback
PLDI '94 Proceedings of the ACM SIGPLAN 1994 conference on Programming language design and implementation
Shade: a fast instruction-set simulator for execution profiling
SIGMETRICS '94 Proceedings of the 1994 ACM SIGMETRICS conference on Measurement and modeling of computer systems
A third-generation SELF implementation: reconciling responsiveness with performance
OOPSLA '94 Proceedings of the ninth annual conference on Object-oriented programming systems, language, and applications
Optimizing multi-method dispatch using compressed dispatch tables
OOPSLA '94 Proceedings of the ninth annual conference on Object-oriented programming systems, language, and applications
OOPSLA '94 Proceedings of the ninth annual conference on Object-oriented programming systems, language, and applications
DCG: an efficient, retargetable dynamic code generation system
ASPLOS VI Proceedings of the sixth international conference on Architectural support for programming languages and operating systems
Java intermediate bytecodes: ACM SIGPLAN workshop on intermediate representations (IR'95)
IR '95 Papers from the 1995 ACM SIGPLAN workshop on Intermediate representations
Clarity MCode: a retargetable intermediate representation for compilation
IR '95 Papers from the 1995 ACM SIGPLAN workshop on Intermediate representations
Proceedings of the tenth annual conference on Object-oriented programming systems, languages, and applications
Profile-guided receiver class prediction
Proceedings of the tenth annual conference on Object-oriented programming systems, languages, and applications
Minimizing row displacement dispatch tables
Proceedings of the tenth annual conference on Object-oriented programming systems, languages, and applications
Talisman: fast and accurate multicomputer simulation
Proceedings of the 1995 ACM SIGMETRICS joint international conference on Measurement and modeling of computer systems
Object and native code thread mobility among heterogeneous computers (includes sources)
SOSP '95 Proceedings of the fifteenth ACM symposium on Operating systems principles
Optimizing ML with run-time code generation
PLDI '96 Proceedings of the ACM SIGPLAN 1996 conference on Programming language design and implementation
Fast, effective dynamic compilation
PLDI '96 Proceedings of the ACM SIGPLAN 1996 conference on Programming language design and implementation
VCODE: a retargetable, extensible, very fast dynamic code generation system
PLDI '96 Proceedings of the ACM SIGPLAN 1996 conference on Programming language design and implementation
PLDI '96 Proceedings of the ACM SIGPLAN 1996 conference on Programming language design and implementation
Reconciling responsiveness with performance in pure object-oriented languages
ACM Transactions on Programming Languages and Systems (TOPLAS)
Vortex: an optimizing compiler for object-oriented languages
Proceedings of the 11th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
The direct cost of virtual function calls in C++
Proceedings of the 11th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
The structure and performance of interpreters
Proceedings of the seventh international conference on Architectural support for programming languages and operating systems
C: a language for high-level, efficient, and machine-independent dynamic code generation
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
ACM Computing Surveys (CSUR)
DPF: fast, flexible message demultiplexing using dynamic code generation
Conference proceedings on Applications, technologies, architectures, and protocols for computer communications
tcc: a system for fast, flexible, and high-level dynamic code generation
Proceedings of the ACM SIGPLAN 1997 conference on Programming language design and implementation
Research Demonstration of a Hardware Reference-Counting Heap
Lisp and Symbolic Computation
Efficient dynamic dispatch without virtual function tables: the SmallEiffel compiler
Proceedings of the 12th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Back to the future: the story of Squeak, a practical Smalltalk written in itself
Proceedings of the 12th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Call graph construction in object-oriented languages
Proceedings of the 12th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Communications of the ACM
Procedure based program compression
MICRO 30 Proceedings of the 30th annual ACM/IEEE international symposium on Microarchitecture
Fast interprocedural class analysis
POPL '98 Proceedings of the 25th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Fast algorithms for compressed multimethod dispatch table generation
ACM Transactions on Programming Languages and Systems (TOPLAS)
Optimizing direct threaded code by selective inlining
PLDI '98 Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation
An evaluation of staged run-time optimizations in DyC
Proceedings of the ACM SIGPLAN 1999 conference on Programming language design and implementation
The Jalapeño dynamic optimizing compiler for Java
JAVA '99 Proceedings of the ACM 1999 conference on Java Grande
Time and space efficient method-lookup for object-oriented programs
Proceedings of the seventh annual ACM-SIAM symposium on Discrete algorithms
C and tcc: a language and compiler for dynamic code generation
ACM Transactions on Programming Languages and Systems (TOPLAS)
High-level language facilities for low-level services
POPL '85 Proceedings of the 12th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
The implementation of PC Scheme
LFP '86 Proceedings of the 1986 ACM conference on LISP and functional programming
OOPWORK '86 Proceedings of the 1986 SIGPLAN workshop on Object-oriented programming
Object allocation and dynamic compilation in MultithreadSmalltalk
SAC '94 Proceedings of the 1994 ACM symposium on Applied computing
Procedure Based Program Compression
International Journal of Parallel Programming - Special issue on the 30th annual ACM/IEEE international symposium on microarchitecture, part II
Dynamo: a transparent dynamic optimization system
PLDI '00 Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation
Derive: a tool that automatically reverse-engineers instruction encodings
DYNAMO '00 Proceedings of the ACM SIGPLAN workshop on Dynamic and adaptive compilation and optimization
Adaptive optimization in the Jalapeño JVM
OOPSLA '00 Proceedings of the 15th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Practical virtual method call resolution for Java
OOPSLA '00 Proceedings of the 15th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Calpa: a tool for automating selective dynamic compilation
Proceedings of the 33rd annual ACM/IEEE international symposium on Microarchitecture
The benefits and costs of DyC's run-time optimizations
ACM Transactions on Programming Languages and Systems (TOPLAS)
A framework for reducing the cost of instrumented code
Proceedings of the ACM SIGPLAN 2001 conference on Programming language design and implementation
Continuous Program Optimization: Design and Evaluation
IEEE Transactions on Computers
Efficient implementation of Java interfaces: Invokeinterface considered harmless
OOPSLA '01 Proceedings of the 16th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
A framework for call graph construction algorithms
ACM Transactions on Programming Languages and Systems (TOPLAS)
Profile-guided code compression
PLDI '02 Proceedings of the ACM SIGPLAN 2002 Conference on Programming language design and implementation
MaJIC: compiling MATLAB for speed and responsiveness
PLDI '02 Proceedings of the ACM SIGPLAN 2002 Conference on Programming language design and implementation
Fast algorithm for creating space efficient dispatching tables with application to multi-dispatching
OOPSLA '02 Proceedings of the 17th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Run-time support for distributed sharing in safe languages
ACM Transactions on Computer Systems (TOCS)
Incremental algorithms for dispatching in dynamically typed languages
POPL '03 Proceedings of the 30th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Implementation Strategies for First-Class Continuations
Higher-Order and Symbolic Computation
IEEE Micro
FX!32: A Profile-Directed Binary Translator
IEEE Micro
SPiCE: A System for Translating Smalltalk Programs Into a C Environment
IEEE Transactions on Software Engineering
A Calculus for Compiling and Linking Classes
ESOP '00 Proceedings of the 9th European Symposium on Programming Languages and Systems
Efficient Dispatch of Java Interface Methods
HPCN Europe 2001 Proceedings of the 9th International Conference on High-Performance Computing and Networking
A Matlab Just-In-time Compiler
LCPC '00 Proceedings of the 13th International Workshop on Languages and Compilers for Parallel Computing-Revised Papers
An Empirical Study of Selective Optimization
LCPC '00 Proceedings of the 13th International Workshop on Languages and Compilers for Parallel Computing-Revised Papers
Concurrency Features for the Trellis/Owl Language
ECOOP '87 Proceedings of the European Conference on Object-Oriented Programming
Inheritance and Synchronization in Concurrent OOP
ECOOP '87 Proceedings of the European Conference on Object-Oriented Programming
Optimization of Object-Oriented Programs Using Static Class Hierarchy Analysis
ECOOP '95 Proceedings of the 9th European Conference on Object-Oriented Programming
Programming as an Experience: The Inspiration for Self
ECOOP '95 Proceedings of the 9th European Conference on Object-Oriented Programming
Message Dispatch on Pipelined Processors
ECOOP '95 Proceedings of the 9th European Conference on Object-Oriented Programming
ECOOP '99 Proceedings of the 13th European Conference on Object-Oriented Programming
Reverse-Engineering Instruction Encodings
Proceedings of the General Track: 2002 USENIX Annual Technical Conference
Secure Execution via Program Shepherding
Proceedings of the 11th USENIX Security Symposium
Stress-testing Control Structures for Dynamic Dispatch in Java
Proceedings of the 2nd Java Virtual Machine Research and Technology Symposium
A Just-in-Time Compiler for Memory-Constrained Low-Power Devices
Proceedings of the 2nd Java Virtual Machine Research and Technology Symposium
An infrastructure for adaptive dynamic optimization
Proceedings of the international symposium on Code generation and optimization: feedback-directed and runtime optimization
Continuous program optimization: A case study
ACM Transactions on Programming Languages and Systems (TOPLAS)
The impact of interprocedural class analysis on optimization
CASCON '95 Proceedings of the 1995 conference of the Centre for Advanced Studies on Collaborative research
A comparison of algorithms for interprocedural class analysis
CASCON '96 Proceedings of the 1996 conference of the Centre for Advanced Studies on Collaborative research
Architecture of SOAR: Smalltalk on a RISC
ISCA '84 Proceedings of the 11th annual international symposium on Computer architecture
Generation Scavenging: A non-disruptive high performance storage reclamation algorithm
SDE 1 Proceedings of the first ACM SIGSOFT/SIGPLAN software engineering symposium on Practical software development environments
Supporting High Level Programming with High Performance: The Illinois Concert System
HIPS '97 Proceedings of the 1997 Workshop on High-Level Programming Models and Supportive Environments (HIPS '97)
Incremental Table-Based Method Dispatch for Reflective Object-Oriented Languages
TOOLS '97 Proceedings of the Tools-23: Technology of Object-Oriented Languages and Systems
A brief history of just-in-time
ACM Computing Surveys (CSUR)
An integrated environment for HDL verification
IVC '95 Proceedings of the 4th IEEE International Verilog HDL Conference
Dynamic native optimization of interpreters
Proceedings of the 2003 workshop on Interpreters, virtual machines and emulators
Cold code decompression at runtime
Communications of the ACM - Program compaction
Meta-programming through typeful code representation
ICFP '03 Proceedings of the eighth ACM SIGPLAN international conference on Functional programming
OOPSLA '03 Proceedings of the 18th annual ACM SIGPLAN conference on Object-oriented programing, systems, languages, and applications
The dynamic compilation of lazy functional programs
Journal of Functional Programming
LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation
Proceedings of the international symposium on Code generation and optimization: feedback-directed and runtime optimization
Strength reduction for loop-invariant types
ACSC '04 Proceedings of the 27th Australasian conference on Computer science - Volume 26
ACM SIGPLAN Notices - Best of PLDI 1979-1999
Optimizing ML with run-time code generation
ACM SIGPLAN Notices - Best of PLDI 1979-1999
A retrospective on: "an evaluation of staged run-time optimizations in DyC"
ACM SIGPLAN Notices - Best of PLDI 1979-1999
IBM Systems Journal
Jazzing up JVMs with off-line profile data: does it pay?
ACM SIGPLAN Notices
Binary refactoring: improving code behind the scenes
Proceedings of the 27th international conference on Software engineering
An efficient and generic reversible debugger using the virtual machine based approach
Proceedings of the 1st ACM/USENIX international conference on Virtual execution environments
Meta-programming through typeful code representation
Journal of Functional Programming
Thread-Shared Software Code Caches
Proceedings of the International Symposium on Code Generation and Optimization
Online performance auditing: using hot optimizations without getting burned
Proceedings of the 2006 ACM SIGPLAN conference on Programming language design and implementation
HDTrans: an open source, low-level dynamic instrumentation system
Proceedings of the 2nd international conference on Virtual execution environments
A machine code model for efficient advice dispatch
Proceedings of the 1st workshop on Virtual machines and intermediate languages for emerging modularization mechanisms
Proceedings of the third ACM SIGPLAN conference on History of programming languages
VPC prediction: reducing the cost of indirect branches via hardware-based dynamic devirtualization
Proceedings of the 34th annual international symposium on Computer architecture
VXA: a virtual architecture for durable compressed archives
FAST'05 Proceedings of the 4th conference on USENIX Conference on File and Storage Technologies - Volume 4
DIGITAL FX!32 running 32-bit ×86 applications on alpha NT
NT'97 Proceedings of the USENIX Windows NT Workshop on The USENIX Windows NT Workshop 1997
SableVM: a research framework for the efficient execution of java bytecode
JVM'01 Proceedings of the 2001 Symposium on JavaTM Virtual Machine Research and Technology Symposium - Volume 1
JVM'01 Proceedings of the 2001 Symposium on JavaTM Virtual Machine Research and Technology Symposium - Volume 1
Deterministic execution of java's primitive bytecode operations
JVM'01 Proceedings of the 2001 Symposium on JavaTM Virtual Machine Research and Technology Symposium - Volume 1
Efficient dynamic dispatching with type slicing
ACM Transactions on Programming Languages and Systems (TOPLAS)
Process-shared and persistent code caches
Proceedings of the fourth ACM SIGPLAN/SIGOPS international conference on Virtual execution environments
Improving the performance of object-oriented languages with dynamic predication of indirect jumps
Proceedings of the 13th international conference on Architectural support for programming languages and operating systems
Graphic Rendering Considered as a Compilation Chain
Interactive Systems. Design, Specification, and Verification
Open, Extensible Object Models
Self-Sustaining Systems
Self-Sustaining Systems
Efficient virtual machine support of runtime structural reflection
Science of Computer Programming
Dynamic compilation for component-based high performance computing
Proceedings of the 2009 Workshop on Component-Based High Performance Computing
Introspection of a Java™ virtual machine under simulation
Introspection of a Java™ virtual machine under simulation
Walkabout: a retargetable dynamic binary translation framework
Walkabout: a retargetable dynamic binary translation framework
Bytecodes meet combinators: invokedynamic on the JVM
Proceedings of the Third Workshop on Virtual Machines and Intermediate Languages
A runtime optimization system for OpenMP
WOMPAT'03 Proceedings of the OpenMP applications and tools 2003 international conference on OpenMP shared memory parallel programming
Method call acceleration in embedded java virtual machines
ICCS'03 Proceedings of the 2003 international conference on Computational science: PartIII
Reflecting on aspect-oriented programming, metaprogramming, and adaptive distributed monitoring
FMCO'06 Proceedings of the 5th international conference on Formal methods for components and objects
Generating low-overhead dynamic binary translators
Proceedings of the 3rd Annual Haifa Experimental Systems Conference
Local redundant polymorphism query elimination
Proceedings of the 8th International Conference on the Principles and Practice of Programming in Java
Optimizing dynamic dispatch with fine-grained state tracking
Proceedings of the 6th symposium on Dynamic languages
Inline caching meets quickening
ECOOP'10 Proceedings of the 24th European conference on Object-oriented programming
Dynamo: a transparent dynamic optimization system
ACM SIGPLAN Notices
Adaptive optimization in the Jalapeno JVM
ACM SIGPLAN Notices
Language-independent sandboxing of just-in-time compilation and self-modifying code
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
JIT compilation policy for modern machines
Proceedings of the 2011 ACM international conference on Object oriented programming systems languages and applications
Application optimization when using gradual typing
Proceedings of the 6th Workshop on Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems
Runtime feedback in a meta-tracing JIT for efficient dynamic languages
Proceedings of the 6th Workshop on Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems
Efficient multimethods in a single dispatch language
ECOOP'05 Proceedings of the 19th European conference on Object-Oriented Programming
Execution migration in a heterogeneous-ISA chip multiprocessor
ASPLOS XVII Proceedings of the seventeenth international conference on Architectural Support for Programming Languages and Operating Systems
VEE '12 Proceedings of the 8th ACM SIGPLAN/SIGOPS conference on Virtual Execution Environments
Fine-grained modularity and reuse of virtual machine components
Proceedings of the 11th annual international conference on Aspect-oriented Software Development
RATA: rapid atomic type analysis by abstract interpretation – application to javascript optimization
CC'10/ETAPS'10 Proceedings of the 19th joint European conference on Theory and Practice of Software, international conference on Compiler Construction
Minemu: the world's fastest taint tracker
RAID'11 Proceedings of the 14th international conference on Recent Advances in Intrusion Detection
Efficient method lookup customization for smalltalk
TOOLS'12 Proceedings of the 50th international conference on Objects, Models, Components, Patterns
Fast simulation of systems embedding VLIW processors
Proceedings of the eighth IEEE/ACM/IFIP international conference on Hardware/software codesign and system synthesis
Open and efficient type switch for C++
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Maxine: An approachable virtual machine for, and in, java
ACM Transactions on Architecture and Code Optimization (TACO) - Special Issue on High-Performance Embedded Architectures and Compilers
The efficient handling of guards in the design of RPython's tracing JIT
Proceedings of the sixth ACM workshop on Virtual machines and intermediate languages
Optimizing MATLAB feval with dynamic techniques
Proceedings of the 9th symposium on Dynamic languages
Exploring single and multilevel JIT compilation policy for modern machines 1
ACM Transactions on Architecture and Code Optimization (TACO)
Proceedings of the 19th international conference on Architectural support for programming languages and operating systems
Information flow tracking meets just-in-time compilation
ACM Transactions on Architecture and Code Optimization (TACO)
A hybrid class- and prototype-based object model to support language-neutral structural intercession
Information and Software Technology
Hi-index | 0.02 |
The Smalltalk-80* programming language includes dynamic storage allocation, full upward funargs, and universally polymorphic procedures; the Smalltalk-80 programming system features interactive execution with incremental compilation, and implementation portability. These features of modern programming systems are among the most difficult to implement efficiently, even individually. A new implementation of the Smalltalk-80 system, hosted on a small microprocessor-based computer, achieves high performance while retaining complete (object code) compatibility with existing implementations. This paper discusses the most significant optimization techniques developed over the course of the project, many of which are applicable to other languages. The key idea is to represent certain runtime state (both code and data) in more than one form, and to convert between forms when needed.