Date |
Lecture Topics |
Readings |
Assignment Due |
Week 1 |
Tu 4/3 |
- Course introduction
- Why variety in programming languages matters
- Categorizing programming languages
- Understanding one's goals and finding languages that meet them
- The case for mixing programming languages in a single project
|
|
|
Th 4/5 |
- Separation of concerns
- Crosscutting concerns
- The case for aspect-oriented programming (AOP)
- Aspect-oriented programming using AspectJ
- Join points
- Pointcuts
- Before and after advice
|
The AspectJ Programming Guide |
Assignment #0 due 5:00pm |
Week 2 |
Tu 4/10 |
- Aspect-oriented programming using AspectJ (continued)
- Aspects that affect only one class (or a few classes)
- Inter-type declarations
- Around advice
- Altering existing inheritance hierarchies
|
|
|
Th 4/12 |
- Dynamic pointcuts and control flow
- The need for metadata in programs
- Java annotations
- Pointcuts that match against annotations
- Using declare error and declare warning to extend compile-time error checking
|
|
|
Week 3 |
Tu 4/17 |
- Annotations that carry additional information with them
- Generalizing aspects using annotations and generics
- Binding, revisited
- The tradeoff between early and late binding
- Early and late binding in Java
|
|
Assignment #1 due 11:59pm |
Th 4/19 |
- Java reflection
- Using annotations with reflection in Java
- A more thorough example of using reflection: QuickUnit
|
|
|
Week 4 |
Tu 4/24 |
- How to choose a programming language for a "real" project
- Applying requirements to the choice of programming language
|
|
|
Th 4/26 |
- Why you should learn "weird" programming languages (briefly)
- Why Erlang?
- Sequential functional programming in Erlang
|
|
|
Week 5 |
Tu 5/1 |
- Sequential functional programming in Erlang (continued)
- Message passing concurrency in Erlang
|
|
|
W 5/2 |
|
|
Assignment #2 due 11:59pm |
Th 5/3 |
- Message passing concurrency in Erlang (continued)
|
|
|
Week 6 |
Tu 5/8 |
- What is the MapReduce algorithm?
- The MapReduce algorithm in Erlang
- Distributed programming using Erlang (briefly)
|
|
|
Th 5/10 |
- The case for mixed-language programming
- Ways that programs in different languages can communicate with each other
|
|
|
Week 7 |
Tu 5/15 |
- Combining Erlang and Java in a single project using Erlang ports
- The importance of communication protocols when connecting separate programs
|
|
|
W 5/16 |
|
|
Assignment #3 due 11:59pm |
Th 5/17 |
- Language design as a response to a set of requirements
- How Erlang's design requirements led directly to its feature set
- Domain-specific languages (DSLs)
- When you need a domain-specific language
- An example of a DSL: Google's Protocol Buffers
- Combining Protocol Buffers with Java
|
|
|
Week 8 |
Tu 5/22 |
- Using Protocol Buffers to streamline communication between Erlang and Java
- A brief overview of domain-specific language design issues
- The parsing problem
- How grammars and regular expressions are related to language design and parsing
- Algorithms for parsing (briefly)
- Recursive-descent parsing using Java
- Recognizing that a grammar can be parsed using recursive descent
|
|
|
Th 5/24 |
- The value of separating scanning from parsing
- Writing a custom scanner
- Designing a scanner that accommodates the needs of typical parsers
|
|
|
Week 9 |
M 5/28 |
University Holiday: Memorial Day |
|
|
Tu 5/29 |
- Designing a simple domain-specific language
- Syntax considerations: designing a parsable, readable syntax (briefly)
- Finding the appropriate boundary between run-time libraries and generated code
- Compiling our domain-specific language to Java
|
|
|
W 5/30 |
|
|
Assignment #4 due 11:59pm |
Th 5/31 |
- Compiling our domain-specific language to Java (continued)
|
|
|
Week 10 |
Tu 6/5 |
|
|
|
Th 6/7 |
- Where we've been and where we can go from here
- Conclusion
|
|
|
Su 6/10 |
|
|
Assignment #5 due 11:59pm |
Finals Week |
Th 6/14 |
- FINAL EXAM: 4:00pm-6:00pm, DBH 1200
|
|
|