language and ontology
DESCRIPTION
Language and Ontology. Shriram Krishnamurthi Yan-David Erlich Matthias Felleisen Rice University. Language and Perception. Different programming styles influence the way we think about the world Therefore, programmers want to extend their languages to suit their problem domains - PowerPoint PPT PresentationTRANSCRIPT
Language and Ontology
Shriram KrishnamurthiYan-David Erlich
Matthias FelleisenRice University
Language and PerceptionDifferent programming styles
influence the way we think about the world
Therefore, programmers want to extend their languages to suit their problem domains
Consequence: programmers define new languages all the time!
Adaptive Programming:Overview
B u s
B u s L is t
P erson
P erson L is t
B u sS top
B u s S top L is t
B u sR ou te
Lieberherr, et al
Adaptive Programming:Traversals
Traversal:
from BusRouteto Personthrough BusStop
B u s
B u sL is t
P erson
P erson L is t
B u sS top
B u sS top L is t
B u sR ou te
Software Patterns:Overview
Concrete versions of design patternsAllow high-level descriptions of
creational, behavioral and structural properties
Map pattern instances to code
(Definition and mapping should respect the inductive structure of patterns)
Gamma, Helm, Johnson,Vlissides, and others
Software Patterns:Example
Adapter Pattern
+ =Adapter
Software Patterns +Adaptive Programming
Behaviors are described by the Visitor Pattern, but it has lots of syntactic overheadVisitor BusWaiterVisitor { BusRoute -> … BusStop -> … Person -> …}
Scientific Computation:Matrices Overview
Implementation uses C++ templatesTwo languages are involved:configuration (extensional)
element type (float, complex, …) shape (upper triangular, symmetric, …)
implementation specification (intensional) bounds checked (yes, no) optimize for (speed, size)
Czarnecki, Eisenecker, et al
Summary
Examples of the growing influence of domain-specific languages (DSLs)
DLSs are a way to institutionalize knowledge and make it common to all the programmers in an organization/domain
Some DSLs are created afresh; many leverage existing languages
Are DSLs APIs?
begin_scope ();………end_scope ();
create_scoped_variable (“x”);…access_scoped_variable (“x”);
(This is a terrible language!)Similar examples in COM, etc
Typical NeedsNew binding formsDifferent orders of evaluation
(applicative vs normal, right-to-left, etc)Domain-specific notations, conventions
Programmers use libraries because that’s all they have available!
RoadmapNeeds a combination of support from the programming language and environment
Easy and powerful definitions Tight integration of language extensionsPreservation of language abstractionsPowerful implementation model
Adaptive Programming:Recap
Visitor BusWaiterVisitor {
BusRoute -> … BusStop -> … Person -> …}
B u s
B u sL is t
P erson
P erson L is t
B u sS top
B u sS top L is t
B u sR ou te
Tool Support forAdaptive Programming
Combining these specifications:
The adaptive programming tool does not know about our pattern extensions
Result: users must choose between DSLsSometimes, there is no ordering of DSLs
Requirement:Tight Integration
External tools cannot be composedExternal tools may provide poor
debugging supportIntegrated tools may require the
environment to be re-built for every addition or change
Important consideration:Easy prototyping
The Middle Ground
Start with macro systems a la Scheme
A macro system is a rewriting engine that works on a term structured syntax
The macro language is embedded into a host language
Multiple extensions can co-exist
Definition Facility
(define-macro Adapter (rewrite (_ <aN> adapts <aT> to <dI> as <aV> (fields <fd> …) (methods <md> …)) (as (class <aN> implements <dI> (fields (<aT> <aV>) <fd> …) (methods <md> …))))
Macros as Transformers
aN
aT
d I
aV
m d
m eth od s
fd
fie ld s
A d ap te r
aN
d I
aT aV
fd
fie ld sm d
m eth od s
c lass
Requirement:Preserve Abstractions
Embedding languages would not be effective if the programmer did not get information in terms of what they wrote
(Information = type errors, programslices, value flow graphs, etc)
Why This MattersMultiplicationExpression<class LazyBinaryExpression<class AdditionExpression<class MatrixICCL::Matrix<class
MatrixICCL::BoundsChecker<class MatrixICCL::ArrFormat<class MatrixICCL::StatExt<struct MatrixDSL::int_number<int,7>,struct MatrixDSL::int_number<int,7>>,class MatrixICCL::Rect<class MatrixICCL::StatExt<struct MatrixDSL::int_number<int,7>,struct MatrixDSL::int_number<int,7>>>,class MatrixICCL::Dyn2DCContainer<class MATRIX_ASSEMBLE_COMPONENTS<class MATRIX_DSL_ASSIGN_DEFAULTS<class MATRIX_DSL_PARSER<struct MatrixDSL::matrix<int,struct MatrixDSL::structure<struct MatrixDSL::rect<struct MatrixDSL::stat_val<struct MatrixDSL::int_number<int,7>>,struct MatrixDSL::stat_val<struct MatrixDSL::int_number<int,7>>,struct MatrixDSL::unspecified_DSL_feature>,struct MatrixDSL::dense<struct MatrixDSL::unspecified_DSL_feature>,struct MatrixDSL::dyn<struct MatrixDSL::unspecified_DSL_feature>>,struct MatrixDSL::speed<struct MatrixDSL::unspecified_DSL_feature>,struct MatrixDSL::unspecified_DSL_feature,struct MatrixDSL::unspecified_DSL_feature,struct MatrixDSL::unspecified_DSL_feature,struct MatrixDSL::unspecified_DSL_feature>>::DSLConfig>::DSLConfig>>>>>,class MatrixICCL::Matrix<class MatrixICCL::BoundsChecker<class MatrixICCL::ArrFormat<class MatrixICCL::StatExt<struct MatrixDSL::int_number<int,7>,struct MatrixDSL::int_number<int,7>>,class MatrixICCL::Rect<class MatrixICCL::StatExt<struct MatrixDSL::int_number<int,7>,struct MatrixDSL::int_number<int,7>>>,class MatrixICCL::Dyn2DCContainer<class MATRIX_ASSEMBLE_COMPONENTS<class MATRIX_DSL_ASSIGN_DEFAULTS<class MATRIX_DSL_PARSER<struct MatrixDSL::matrix<int,struct MatrixDSL::structure<struct MatrixDSL::rect<struct MatrixDSL::stat_val<struct MatrixDSL::int_number<int,7>>,struct MatrixDSL::stat_val<struct MatrixDSL::int_number<int,7>>,struct MatrixDSL::unspecified_DSL_feature>,struct MatrixDSL::dense<struct MatrixDSL::unspecified_DSL_feature>,struct Ma…
Generated from (A + B) * C
Alternative
Maintaining Abstractions
Source correlation
Ability to track source information through expansions
Helps programmers understand feedback in terms of original source
Interacting Abstractions
Elaboration tracking
Keeps track of history of transformations on terms
Helps designers (and programmers) debug in the presence of complex interactions
Requirement:Generalize Domain
Even common languages have lots of “little” languages in them
Macros are often limited to the expression and definition language(define (factorial (int n) : int) …)
Expansion uses a protocol to determine “latest version” of each language
Requirement:Generalize Expansion
Macros are traditionally source-to-source; generalize by
giving control over expansion of sub-expressions
allowing intermediate stages to produce non-source output
enriching with attribute specifications (both threaded and unthreaded)
RecapWhat we have described is a generalization
of macros to extend to full compilation: Macros Compilers
We provide both mechanism and policy:several incremental stagescommon framework, so designers can
combine these in a single specification
Requirement:Modularize Languages
Languages are defined as “vocabularies”
These have abstract parent languagesDesigners can compose them to create
complete languages(analogous to “mixins” for classes)
This makes specifications much more coherent and reusable
Languages as Layers
Base Language 1
Base Language 2
L1
L2L3
Base Language 1
L1
L3
Summary
Experience shows our system ispractical and efficient
Key features:definition conveniences (…, hygiene)source correlationmacros-to-compilers continuumlanguage mixins
Conclusion
We havemade a case for extensible languagesdescribed several “challenge”
features to demand of programming environments
mentioned how we implement these features