language and ontology shriram krishnamurthi yan-david erlich matthias felleisen rice university

30
Language and Ontology Shriram Krishnamurthi Yan-David Erlich Matthias Felleisen Rice University

Post on 19-Dec-2015

217 views

Category:

Documents


0 download

TRANSCRIPT

Language and Ontology

Shriram KrishnamurthiYan-David Erlich

Matthias FelleisenRice 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

Consequence: programmers define new languages all the time!

Adaptive Programming:Overview

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

Lieberherr, et al

Adaptive Programming:Traversals

Traversal:

from BusRoute

to Person

through BusStopB 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 overhead

Visitor 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 Needs

New 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!

Roadmap

Needs 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 Matters

MultiplicationExpression<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)

Recap

What 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