<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://mw.hh.se/wg211/index.php?action=history&amp;feed=atom&amp;title=WG211%2FTeachingProgramGeneration</id>
	<title>WG211/TeachingProgramGeneration - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://mw.hh.se/wg211/index.php?action=history&amp;feed=atom&amp;title=WG211%2FTeachingProgramGeneration"/>
	<link rel="alternate" type="text/html" href="http://mw.hh.se/wg211/index.php?title=WG211/TeachingProgramGeneration&amp;action=history"/>
	<updated>2026-04-05T20:50:14Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>http://mw.hh.se/wg211/index.php?title=WG211/TeachingProgramGeneration&amp;diff=347&amp;oldid=prev</id>
		<title>Admin: 1 revision</title>
		<link rel="alternate" type="text/html" href="http://mw.hh.se/wg211/index.php?title=WG211/TeachingProgramGeneration&amp;diff=347&amp;oldid=prev"/>
		<updated>2011-12-12T10:06:30Z</updated>

		<summary type="html">&lt;p&gt;1 revision&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:WG211]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=&lt;br /&gt;
----&lt;br /&gt;
+ Teaching Program Generation=&lt;br /&gt;
&lt;br /&gt;
Getting program generation accepted and used starts with teaching our students.&lt;br /&gt;
&lt;br /&gt;
* How should we incorporate program generation in the computer science curriculum?&lt;br /&gt;
&lt;br /&gt;
This session gives room for expressing views and reflecting on experience.&lt;br /&gt;
&lt;br /&gt;
Issues include:&lt;br /&gt;
&lt;br /&gt;
* experience with teaching courses on/involving program generation&lt;br /&gt;
* place in the curriculum (wrt other material)&lt;br /&gt;
* theoretical and conceptual framework&lt;br /&gt;
* tools&lt;br /&gt;
* course organization&lt;br /&gt;
* topics and their relative priority (what is important)&lt;br /&gt;
* suitable example domains&lt;br /&gt;
* books&lt;br /&gt;
* meta languages&lt;br /&gt;
** typing&lt;br /&gt;
** other guarantees&lt;br /&gt;
&lt;br /&gt;
==&lt;br /&gt;
----&lt;br /&gt;
-++ Existing Courses==&lt;br /&gt;
&lt;br /&gt;
* Martin Erwig&lt;br /&gt;
* Program Synthesis - Berkeley&lt;br /&gt;
* Julia Lawall - DSLs&lt;br /&gt;
* Walid Taha - MSP&lt;br /&gt;
&lt;br /&gt;
* Crista Lopes - Irvine&lt;br /&gt;
** Programming Languages 2 (PL2)&lt;br /&gt;
** http://www.ics.uci.edu/~lopes/teaching/inf102W06/index.html&lt;br /&gt;
** Reflection&lt;br /&gt;
** Ruby&lt;br /&gt;
&lt;br /&gt;
* Peter Sestoft&lt;br /&gt;
** run-time code generation&lt;br /&gt;
** ML as meta-language (difficult to learn)&lt;br /&gt;
** future: scheme as meta-language&lt;br /&gt;
&lt;br /&gt;
* Paul Kelly&lt;br /&gt;
** Compiler Construction&lt;br /&gt;
** Advanced Computer Architecture&lt;br /&gt;
&lt;br /&gt;
* Eelco Visser&lt;br /&gt;
** Program transformation&lt;br /&gt;
*** http://swerl.tudelft.nl/bin/view/Pt&lt;br /&gt;
** Software generation and configuration&lt;br /&gt;
*** http://www.cs.uu.nl/wiki/Sgc/WebHome&lt;br /&gt;
&lt;br /&gt;
* Tim Sheard&lt;br /&gt;
** staged programming&lt;br /&gt;
** http://web.cecs.pdx.edu/~sheard/course/stagedcomp/index.html&lt;br /&gt;
&lt;br /&gt;
==&lt;br /&gt;
----&lt;br /&gt;
-++ Domains==&lt;br /&gt;
&lt;br /&gt;
* Compilers&lt;br /&gt;
* J2EE&lt;br /&gt;
* Linear Transforms (FFTW, Spiral)&lt;br /&gt;
* Web programming&lt;br /&gt;
* Language processing&lt;br /&gt;
** regular expressions&lt;br /&gt;
** grammars&lt;br /&gt;
* Databases&lt;br /&gt;
** SQL&lt;br /&gt;
** database binding&lt;br /&gt;
* Functional reactive programming&lt;br /&gt;
** Pan (Conal Elliot)&lt;br /&gt;
** Haskore&lt;br /&gt;
* User interface generators&lt;br /&gt;
* Hardware synthesis&lt;br /&gt;
** Lava&lt;br /&gt;
&lt;br /&gt;
==&lt;br /&gt;
----&lt;br /&gt;
--++ Issues==&lt;br /&gt;
&lt;br /&gt;
* Binding&lt;br /&gt;
* Variable capture&lt;br /&gt;
* Hygienic macros&lt;br /&gt;
* Concrete syntax&lt;br /&gt;
* Staged computation&lt;br /&gt;
* Partial evaluation&lt;br /&gt;
* Binding time&lt;br /&gt;
** binding time analysis&lt;br /&gt;
&lt;br /&gt;
==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
++ Techniques==&lt;br /&gt;
&lt;br /&gt;
* Reflection&lt;br /&gt;
* Introspection&lt;br /&gt;
* Parsing&lt;br /&gt;
* Template languages&lt;br /&gt;
** String Template&lt;br /&gt;
* Wizards&lt;br /&gt;
&lt;br /&gt;
==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
++ Technologies==&lt;br /&gt;
&lt;br /&gt;
* Dynamic (scripting) languages&lt;br /&gt;
** Ruby&lt;br /&gt;
** Scheme&lt;br /&gt;
* Staged languages&lt;br /&gt;
** Template Haskell&lt;br /&gt;
&lt;br /&gt;
* Google web toolkit&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
--+ Course Outlines=&lt;br /&gt;
&lt;br /&gt;
Here are some actual, proposed, or imagined outlines for courses involving elements of program generation.&lt;br /&gt;
&lt;br /&gt;
==&lt;br /&gt;
----&lt;br /&gt;
--++ Eelco Visser - Software Engineering 2==&lt;br /&gt;
&lt;br /&gt;
Goal: learn students how to abstract programming patterns into domain-specific languages.&lt;br /&gt;
&lt;br /&gt;
* Part I : Using DSLs&lt;br /&gt;
** Discuss examples of DSLs in real life&lt;br /&gt;
*** regular expressions&lt;br /&gt;
*** context-free grammars&lt;br /&gt;
*** rewrite rules&lt;br /&gt;
*** web DSLs&lt;br /&gt;
*** database DSLs (SQL)&lt;br /&gt;
*** workflow&lt;br /&gt;
** Considerations&lt;br /&gt;
*** explanation of domains should not take over the course&lt;br /&gt;
** Lab&lt;br /&gt;
*** Experiment with some of these in practical exercises&lt;br /&gt;
&lt;br /&gt;
* Part II : Developing DSLs (DSL Engineering)&lt;br /&gt;
** Syntax and semantics&lt;br /&gt;
*** an intro into language definition&lt;br /&gt;
** DSL design&lt;br /&gt;
*** domain engineering&lt;br /&gt;
*** what goes into the DSL?&lt;br /&gt;
*** language design issues&lt;br /&gt;
** Implementation techniques&lt;br /&gt;
*** term rewriting&lt;br /&gt;
*** graph rewriting&lt;br /&gt;
*** model transformation&lt;br /&gt;
*** attribute grammars&lt;br /&gt;
*** XML, XSLT&lt;br /&gt;
*** syntax embedding&lt;br /&gt;
*** reflection (Ruby, Python)&lt;br /&gt;
*** DSL definitions as modules&lt;br /&gt;
** Lab&lt;br /&gt;
*** Implement a (couple of) (simple) DSL(s)&lt;br /&gt;
&lt;br /&gt;
* Part III : Limitations of DSLs&lt;br /&gt;
** flexibility / adaptability of generated code&lt;br /&gt;
** hygienic code generation / variable capture&lt;br /&gt;
** modularity / separate compilation&lt;br /&gt;
** retargetability of generators&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==&lt;br /&gt;
----&lt;br /&gt;
--++ Sam Kamin - Program Generation==&lt;br /&gt;
&lt;br /&gt;
Proposed (and extremely tentative) course on program generation,&lt;br /&gt;
upper-level undergrad level&lt;br /&gt;
&lt;br /&gt;
* I. Uses of program generation and transformation&lt;br /&gt;
** A. Textual abstraction as a kind of program abstraction&lt;br /&gt;
*** 1. Programs as collections of fragments&lt;br /&gt;
*** 2. Product-line architectures; components&lt;br /&gt;
*** 3. Synthesis of programs from specifications&lt;br /&gt;
** B. The cost of abstraction&lt;br /&gt;
*** 1. The cost of generality in libraries&lt;br /&gt;
** C. Overcoming the cost of abstraction&lt;br /&gt;
*** 1. Gaining efficiency through program generation/transformation&lt;br /&gt;
*** 2. The importance of domain knowledge&lt;br /&gt;
** D. Domain-specific languages&lt;br /&gt;
&lt;br /&gt;
* II. Example domains (need to be accompanied by concrete examples)&lt;br /&gt;
** A. Generating ADT code (catamorphism-type stuff)&lt;br /&gt;
** B. Building database programs (generating classes for db schemas)&lt;br /&gt;
** C. Scientific computing - FFT, matrix operations, simulation&lt;br /&gt;
** D. Language-based examples - lexical analysis, parsing, interpreters, compilers&lt;br /&gt;
** E. Building DSL&amp;#039;s&lt;br /&gt;
&lt;br /&gt;
* III. Tools (need to be accompanied by programming exercises)&lt;br /&gt;
** A. Static, &amp;quot;ad hoc&amp;quot; program generation (e.g. using Ruby)&lt;br /&gt;
*** i. Static reflection&lt;br /&gt;
** B. Dynamic program generation (e.g. using Jumbo)&lt;br /&gt;
** C. Program transformation tools (e.g. Stratego)&lt;br /&gt;
** D. Safe program generators (e.g. MetaOCaml)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
==&lt;br /&gt;
----&lt;br /&gt;
++ Crista Lopes - Programming Language 2==&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m redesigning the course to have less stuff, but more of the things that stay in. It will be something like this:&lt;br /&gt;
&lt;br /&gt;
* Meta-circular interpreter (in Scheme)&lt;br /&gt;
* Declarative programming&lt;br /&gt;
** SQL&lt;br /&gt;
** logic programming (in Scheme)&lt;br /&gt;
* AOP (maybe?) (in Scheme)&lt;br /&gt;
* OOP inside (Ruby)&lt;br /&gt;
* Reflection (Ruby) -- this is the part that is more related to program generation&lt;br /&gt;
* Markup languages&lt;br /&gt;
&lt;br /&gt;
This is a programming languages course, hence the focus on PLs.&lt;br /&gt;
For a software engineering, enabler tools kind of course, I would do something different. I would have to think a lot more...&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
==&lt;br /&gt;
----&lt;br /&gt;
++ Paul Kelly==&lt;br /&gt;
&lt;br /&gt;
Proposal: Course in&lt;br /&gt;
&lt;br /&gt;
* Software Synthesis and Metaprogramming&lt;br /&gt;
* Students: Master&amp;#039;s level, with some industrial experience&lt;br /&gt;
* Objectives: Students should gain an understanding of key principles in the application and design of software that generates and manipulates programs.&lt;br /&gt;
&lt;br /&gt;
This outline presents a large picture; the challenge is to identify from these topics the taxonomy, central theoretical ideas, and software engineering principles.&lt;br /&gt;
&lt;br /&gt;
* Introduction:&lt;br /&gt;
** Motivation via a small variety of compelling examples.&lt;br /&gt;
** Some large &amp;quot;industrial scale&amp;quot;, others open-source and available for hands-on experience and understanding.&lt;br /&gt;
* Analysis:&lt;br /&gt;
** Reflection (eg in Java, Ruby),&lt;br /&gt;
** Code query languages (Codequest etc).&lt;br /&gt;
* Aspects and aspect weavers:&lt;br /&gt;
** Pointcuts (as reflection, as queries),&lt;br /&gt;
** advice (as generation),&lt;br /&gt;
** safety; safety holes in AspectJ.&lt;br /&gt;
** Aspects as features.&lt;br /&gt;
** Aspect composition.&lt;br /&gt;
* Generators:&lt;br /&gt;
** Macros,&lt;br /&gt;
** name capture.&lt;br /&gt;
** Static, dynamic: quoting and binding times&lt;br /&gt;
** Runtime generation.&lt;br /&gt;
** Type-safe program generation.&lt;br /&gt;
** Partial evaluation; on-line versus offline.&lt;br /&gt;
** Binding time analysis, binding-time improvement.&lt;br /&gt;
** Jones optimality?&lt;br /&gt;
* Domain-specific generators, domain-specific languages:&lt;br /&gt;
** Language embedding;&lt;br /&gt;
** syntactic issues, types and binding issues.&lt;br /&gt;
** Single source, multiple interpretation.&lt;br /&gt;
* Features, product lines, architectures and components:&lt;br /&gt;
** Feature mapping and refactoring.&lt;br /&gt;
** Feature interaction.&lt;br /&gt;
** Architecture description languages.&lt;br /&gt;
** Adaptive component architectures, reflective middleware.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
==&lt;br /&gt;
----&lt;br /&gt;
++ Peter Sestoft==&lt;br /&gt;
&lt;br /&gt;
Outline of a course fragment on program generation&lt;br /&gt;
Peter Sestoft 2006-10-27&lt;br /&gt;
&lt;br /&gt;
Course prerequisites: Prior to the course, students are assumed to&lt;br /&gt;
know Java (or C#) and reflection.&lt;br /&gt;
&lt;br /&gt;
Some prerequisites filled by earlier modules of the course itself:&lt;br /&gt;
&lt;br /&gt;
* Abstract machines, including the JVM and/or .NET bytecode&lt;br /&gt;
* Introductory Scheme&lt;br /&gt;
&lt;br /&gt;
Plan&lt;br /&gt;
&lt;br /&gt;
* Explain that program generation is used a lot (J2EE interfaces, Java Server Pages, PHP, object-relational mappers, ...).&lt;br /&gt;
* Explain the main purposes:&lt;br /&gt;
** Avoid writing boilerplate code, and obtain performance (space, time) by generating specialized code.&lt;br /&gt;
* Using small two-parameter examples (see below),&lt;br /&gt;
** introduce the concept of binding time (static and dynamic),&lt;br /&gt;
** where static computations can be performed early, in a generator,&lt;br /&gt;
** and dynamic operations are to be performed late, in the generated code.&lt;br /&gt;
** Mention the concept of a partial evaluator and generating extension,&lt;br /&gt;
** and that the generating extension of an interpreter is a compiler.&lt;br /&gt;
** Etc.&lt;br /&gt;
* Show textual source code generation using print-statements, to demystify the concept.&lt;br /&gt;
** Explain that this is impractical.&lt;br /&gt;
* Show code generation in Scheme using backquote and comma.&lt;br /&gt;
** Point out the challenges of always generating syntactically well-formed code and using only variables that are in scope.&lt;br /&gt;
** (Correct static typing of the generated code does not enter the picture in Scheme, only when generating bytecode below).&lt;br /&gt;
* Show runtime code generation in Scheme using the above and eval.&lt;br /&gt;
* Show runtime code generation in Java (or C#) using BCEL or .NET&amp;#039;s System.Reflection.Emit.&lt;br /&gt;
** Point out that this is exactly analogous to runtime code generation in Scheme,&lt;br /&gt;
** only it looks far more complicated and is more difficult to debug.&lt;br /&gt;
* Point out that there is a general idea in the above: Staged computation or two-level languages, and that there are many research prototypes of such languages: MetaOCaml, Jumbo, DynJava, Metaphor, ...&lt;br /&gt;
&lt;br /&gt;
Some simple motivating examples&lt;br /&gt;
&lt;br /&gt;
Polynomial evaluation c_0 + c_1 x + c_2 x^2 + ...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  double PolyEval(double[] cs, double x)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The power function x^n&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  double Power(int n, double x)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generating terms of the Taylor series for exp(x)&lt;br /&gt;
&lt;br /&gt;
AES (Rijndael) encryption algorithm&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  byte[] Encrypt(Key key, byte[] block)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sparse matrix multiplication&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
==&lt;br /&gt;
----&lt;br /&gt;
++ Martin Bravenboer==&lt;br /&gt;
&lt;br /&gt;
Program Generation&lt;br /&gt;
&lt;br /&gt;
I like the idea of modules provided by different people in the&lt;br /&gt;
community. It probably won&amp;#039;t happen, but it would be a good thing.&lt;br /&gt;
&lt;br /&gt;
* Introducing: motivating examples&lt;br /&gt;
** Lack of abstraction (Enterprise, boilerplate stuff)&lt;br /&gt;
** Lack of performance (creepy numerical stuff etc)&lt;br /&gt;
** Cross-cutting concerns&lt;br /&gt;
** Variability (Conditional code)&lt;br /&gt;
* Design issues&lt;br /&gt;
** Patterns, when and how to develop DSLs&lt;br /&gt;
** Domain knowledge&lt;br /&gt;
* Concepts and principles&lt;br /&gt;
** Static and dynamic reflection&lt;br /&gt;
** Code as input of program generation&lt;br /&gt;
** Attribute-oriented techniques&lt;br /&gt;
** Probably illustrated by Ruby&lt;br /&gt;
** Mirrors&lt;br /&gt;
* Programming language concepts:&lt;br /&gt;
** Binding time&lt;br /&gt;
** Hygiene, scope, shadowing, etc&lt;br /&gt;
** Partial evaluation and multi-staging techniques&lt;br /&gt;
* Syntax for abstractions: what&amp;#039;s the input of a code generator?&lt;br /&gt;
** Domain-specific languages&lt;br /&gt;
** Models, meta-models&lt;br /&gt;
** Text, grammars&lt;br /&gt;
** Code: reflection&lt;br /&gt;
* Solutions&lt;br /&gt;
** Unfortunately, there are far too many solutions, Ideally, the various angles of attack should be illustrated in a single language/environment to make comparision and comprehension easier. However, that will be difficult to realize.&lt;br /&gt;
** Macros, templates, C++, Scheme etc.&lt;br /&gt;
** Software transformation systems: rewriting rules&lt;br /&gt;
** Extensible compilers, Silver, Forwarding&lt;br /&gt;
** Template systems&lt;br /&gt;
** Embedded DSLs: Converge, Haskell, MetaBorg, etc&lt;br /&gt;
** Writing interpreters, compilers&lt;br /&gt;
** Run-time code generators, such as Jumbo, .NET compiler API, Java stuff etc.&lt;br /&gt;
** From Ruby to Jumbo to type-safe code generators&lt;br /&gt;
** Reflective systems, such as Ruby, Smalltalk, Reflex&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
=&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
-+ Notes from the Meeting=&lt;br /&gt;
&lt;br /&gt;
==================================================&lt;br /&gt;
Crista Lopes&lt;br /&gt;
&lt;br /&gt;
* Teaches course on Reflection&lt;br /&gt;
** Scheme for interpreters&lt;br /&gt;
** Ruby is highly recommended&lt;br /&gt;
*** very cute&lt;br /&gt;
*** meta-object architecture&lt;br /&gt;
*** no environment&lt;br /&gt;
*** untyped programming language&lt;br /&gt;
* based on Ruby for reflection&lt;br /&gt;
* assignment based on Ruby on Rails&lt;br /&gt;
* Reflection versus AST&lt;br /&gt;
** Easier to teach then reflection&lt;br /&gt;
** Dynamic reflection (beyond static reflection)&lt;br /&gt;
** Mirrors paper based on OOPSLA based on Smalltalk (Bracha)&lt;br /&gt;
* Using search engines for finding code&lt;br /&gt;
** Lopes: teach how to use other components/tools/libraries rather than learning all the details of how to do it yourself&lt;br /&gt;
* Fit together&lt;br /&gt;
* Paul: Let them play&lt;br /&gt;
&lt;br /&gt;
==================================================&lt;br /&gt;
Peter Sestoft&lt;br /&gt;
&lt;br /&gt;
* Teaches course on Programming Language Concepts&lt;br /&gt;
** Standard ML&lt;br /&gt;
** Scheme&lt;br /&gt;
*** easier for students&lt;br /&gt;
*** more versatile&lt;br /&gt;
* Interpreters&lt;br /&gt;
* Compilers&lt;br /&gt;
* Code generation&lt;br /&gt;
** printf&lt;br /&gt;
** Scheme&lt;br /&gt;
* Run-time code generation&lt;br /&gt;
** .NET&lt;br /&gt;
** JVM&lt;br /&gt;
* Principles:&lt;br /&gt;
** Binding time&lt;br /&gt;
* show in generator example&lt;br /&gt;
&lt;br /&gt;
==================================================&lt;br /&gt;
Paul Kelly&lt;br /&gt;
&lt;br /&gt;
* Teaches course on Compilers&lt;br /&gt;
** Compulsary with some motivation issues&lt;br /&gt;
** Based on Haskell&lt;br /&gt;
** Simple imperative language&lt;br /&gt;
** Optimization, back-end&lt;br /&gt;
* Teaches course on Advanced Computer Architecture&lt;br /&gt;
** Numerical algorithms&lt;br /&gt;
** Optimization based on computer architure&lt;br /&gt;
* Opinions:&lt;br /&gt;
** Program generation not necessarily difficult&lt;br /&gt;
** It&amp;#039;s a means of learning students about programming languages&lt;br /&gt;
* Principles:&lt;br /&gt;
** Variable capture, hygienic mcacros&lt;br /&gt;
** How are object-oriented languages implemented?&lt;br /&gt;
&lt;br /&gt;
==================================================&lt;br /&gt;
Sam Kamin&lt;br /&gt;
&lt;br /&gt;
* Teaches course on Programming Languages: Concepts and Implementation&lt;br /&gt;
** ML as meta-language&lt;br /&gt;
** Programming paradigms&lt;br /&gt;
* Ideas for a course&lt;br /&gt;
** General concepts and motivation&lt;br /&gt;
** Examples from different domains&lt;br /&gt;
* Tools: from Ruby, to Jumbo, to type-safe code generators&lt;br /&gt;
** Teach students about abstractions&lt;br /&gt;
** Programming patterns motivate DSLs&lt;br /&gt;
** ADTs&lt;br /&gt;
** Templates&lt;br /&gt;
** DSLs&lt;br /&gt;
* Principles:&lt;br /&gt;
** Partial evaluation&lt;br /&gt;
* Let students crash first, then: how to do it right.&lt;br /&gt;
&lt;br /&gt;
==================================================&lt;br /&gt;
Visser&lt;br /&gt;
&lt;br /&gt;
* Teaches course on Program Transformation&lt;br /&gt;
** Stratego&lt;br /&gt;
** Study various transformations&lt;br /&gt;
** Problem: not enough time for the concepts&lt;br /&gt;
* Present examples of existing DSLs&lt;br /&gt;
** Sam: presenting polished DSLs does not illustrate the problems&lt;br /&gt;
&lt;br /&gt;
==================================================&lt;br /&gt;
Martin Bravenboer&lt;br /&gt;
&lt;br /&gt;
* Opinions&lt;br /&gt;
** Where do we actually produce code from?&lt;br /&gt;
* Front-end:&lt;br /&gt;
** reflection&lt;br /&gt;
** modelling&lt;br /&gt;
** text, parsing, grammars&lt;br /&gt;
&lt;br /&gt;
==================================================&lt;br /&gt;
Czarnecki&lt;br /&gt;
&lt;br /&gt;
* When to develop a DSL?&lt;br /&gt;
* Design issues is more important&lt;br /&gt;
* Doing the actual program generation is a small task&lt;br /&gt;
* Techniques and tools less important&lt;br /&gt;
* Design patterns for DSLs&lt;br /&gt;
* &amp;quot;this could use some DSL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==================================================&lt;br /&gt;
Walid&lt;br /&gt;
&lt;br /&gt;
* Suggestion&lt;br /&gt;
** Reuse modules created by experts&lt;br /&gt;
* Should we teach crazy wacky ideas?&lt;br /&gt;
** Don&amp;#039;t know if it is a good thing or bad thing&lt;br /&gt;
** Might be good&lt;br /&gt;
* Courses on Program generation&lt;br /&gt;
** Martin Erwik (?)&lt;br /&gt;
** Program synthesis at Berkley&lt;br /&gt;
* Julia Lawall&lt;br /&gt;
** Domain-specific languages&lt;br /&gt;
* MSP course:&lt;br /&gt;
** Walid could contribute a module&lt;br /&gt;
** Don Batory&lt;br /&gt;
** Tim Sheard - staged computation&lt;br /&gt;
* Courses Aspect-Oriented Programming:&lt;br /&gt;
** Probably too many&lt;br /&gt;
** Personal statement by Lopes: AspectJ sucks, so I don&amp;#039;t want to give a course about it ;)&lt;br /&gt;
* Principles:&lt;br /&gt;
** Kolmorov Complexity&lt;br /&gt;
** Binding time is an important concept to teach&lt;br /&gt;
&lt;br /&gt;
==============================================&lt;br /&gt;
Example domains&lt;br /&gt;
&lt;br /&gt;
* Spiral&lt;br /&gt;
*  Web programming (Ruby)&lt;br /&gt;
* Performance things like loop unrolling, matrix multiplication, sorting&lt;br /&gt;
* Enterprise, database, EJB&lt;br /&gt;
** e.g. Ruby on Rails&lt;br /&gt;
* Interpreters and parsers&lt;br /&gt;
** regular expressions?&lt;br /&gt;
* Funtional reatice programming: hascore / Pan / Fran / Lava, hardware synthesis&lt;br /&gt;
* Javascript stuff: Google Web Toolkit / JSAN&lt;br /&gt;
* ASP .NET, JSP, PHP&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>