Download presentation
Presentation is loading. Please wait.
Published byElla Watson Modified over 9 years ago
1
F RANZ I NC. Making Environments Accessible in Common Lisp By Duane Rettig June, 2005
2
F RANZ I NC. What is An Environment? A set of bindings of names to values A context within which to work Parameterizations of behaviors
3
F RANZ I NC. Need for Lexical Environments (defun foo (x y z) (flet ((bar (x) (1+ x)) (bas (y) (+ x y))) (+ x (bar y) (baz z))))
4
F RANZ I NC. Need for Lexical Environments (let ((x (foo)))... (let ((x (bar)))... )... )
5
F RANZ I NC. Need for Dynamic Environments ;; In lisp: (defmacro foo (x) `(car,x)) ;; In a file: (defmacro foo (y) `(1+,y)) (defun bar (x) (isqrt (foo x)))
6
F RANZ I NC. Typical Implementation of Environments (let ((x 10))... (symbol-macrolet ((x 'foo))... (let ((x 20))... ;; here: ))) %venv% <= (... (x. 20)... (x #.*sm-marker*. foo)... (x. 10)...)
7
F RANZ I NC. Problems with list-style Environments Environment has no identity –Multiple lists are necessary –Objects not distinguishable as environments Accesses can be long for deep contour nesting Persistence and contour structure not automatic
8
F RANZ I NC. Desired Representation of Lexical Environment Elements Hash: x Contours: (lexical 20) (lexical 10) (symbol-macro foo) Old: New: xxx Search direction Search direction
9
F RANZ I NC. Environments Access Design Goals (part 1) Compatible with Common Lisp Spec where possible Open Source Start with CLtL2 definition, moving away only when necessary Move the Language forward –Allow the compiler to be more transparent –Allow portability of optimizations
10
F RANZ I NC. Environments Access Design Goals (part 2) Fast (building, access) Portable (on several levels) Controllable Persistence describes the contour forms easy to conceptualize the program structure allow multiple entry and annotation for multiple compiler passes and for debuggers Consistent for compilation and interpretation
11
F RANZ I NC. Major Departures from Environments in CLtL2 Entries are bindings, not just names Environments have “kinds” Dynamic environment component is added Augment-environment can reuse object Declarations are done differently –Define-declaration has different syntax –Declarations sometimes added after variable bindings
12
F RANZ I NC. Pictorial View of Environment Objects lexical namespaces base Dynamic namespaces e1 e5 e7 e4 e3 e2 e6 e8 nil 1 2 1 1 1 1 3 2 1 1 3
13
F RANZ I NC. Environment Kinds Interpreter (for lisps with interpreter) Compilation (compilation-walking in 7.0) Evaluation Compiler (compilation in 7.0) Macros-only
14
F RANZ I NC. Variables Associated with Environments *interpreter-environment* *compilation-unit-environment* [*compile-file-environment* in Allegro CL 7.0] *evaluation-environment*
15
F RANZ I NC. *interpreter-environment* Usage Only available when an interpreter exists Hard to capture - REPL continuously binds
16
F RANZ I NC. *compilation-unit-environment* Usage Created when new compile-file or with- compilation-unit established Can be built with either –sys:make-compilation-unit-environment or –sys:make-compile-file-environment (deprecated)
17
F RANZ I NC. *evaluation-environment* Usage Read-only feel - definitions taken from environment but stored globally
18
F RANZ I NC. Extensions Beyond the Spec Compiler environments Extra arg to macroexpand/macroexpand-1 for special operators Environments extend to compilation-unit
19
F RANZ I NC. To Do: “Split” define-declaration to allow redefinitions and development Add expression-information and :expression argument to augment-environment Encourage CL vendors to make use of this module Accept suggestions
20
F RANZ I NC. Levels of Portability/Porting Level 0: Level 1: Level 2: Level 3: Level 4:
21
F RANZ I NC. Levels of Portability/Porting Level 0: –Implementation has its own proprietary (open or not) representation Level 1: Level 2: Level 3: Level 4:
22
F RANZ I NC. Levels of Portability/Porting Level 0: Proprietary Level 1: –Compilation and operation of the basic functionality Level 2: Level 3: Level 4:
23
F RANZ I NC. Levels of Portability/Porting Level 0: Proprietary Level 1: Basic Level 2: –Current environment emulated at the Environments Access interface level Level 3: Level 4:
24
F RANZ I NC. Levels of Portability/Porting Level 0: Proprietary Level 1: Basic Level 2: Emulation Level 3: –Environments Access holds the information, Proprietary interface queries it Level 4:
25
F RANZ I NC. Levels of Portability/Porting Level 0: Proprietary Level 1: Basic Level 2: Emulation Level 3: Transitional Level 4: –Environments Access fully integrated into compiler, optionally interpreter proprietary representation unused or deprecated
26
F RANZ I NC. Levels of Portability/Porting Level 0: Proprietary Level 1: Basic Level 2: Emulation Level 3: Transitional Level 4: Full
27
F RANZ I NC. Current Levels of Support
28
F RANZ I NC. Current Links http://franz.com/support/documentation/7.0/doc/ environments.htm (http://www.lispwire.com/entry-proganal- envaccess-des)
29
F RANZ I NC. Look at the Implementation (switch to Linux) Bring up lisps and demonstrate Environment building/access Look at source code for major functions
30
F RANZ I NC. Thank You.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.