Engr 691-06: Special Topics in Engineering Science
(Software Language Engineering)
Spring 2009
Syllabus


Locations

The spring semester 2009 class meets in 106 Weir Hall at 11:00 a.m. to 12:15 p.m. on Tuesdays and Thursdays.

The class is taught by Prof. Conrad Cunningham, whose office is in 203 Weir Hall. The official office hours for this class are 1:00 p.m. to 2:30 p.m. on Tuesdays and Thursdays and by appointment at other times.

Prof. Cunningham's voice telephone number is (662) 915-5358 and fax number is (662) 915-5623. His WWW home page is http://www.cs.olemiss.edu/~hcc/ and his email address is cunningham AT cs DOT olemiss DOT edu.

The WWW home page for this class is http://www.cs.olemiss.edu/~hcc/langEngr/ .

The final examination for this class is scheduled for Monday, 4 May, 12:00 noon.

Student Disabilities Services Statement

"It is the responsibility of any student with a disability who requests a reasonable accommodation to contact the Office of Disability Services (915-7128). Contact will then be made by that office through the student to the instructor of this class. The instructor will then be happy to work with the student so that a reasonable accommodation of any disability can be made."

Course Description

The catalog has no description beyond that implied by the official course title Special Topics in Engineering Science.

The following is a draft catalog description for a possible new 600-level course on Software Language Engineering: Study of topics on the design, implementation, use, and evolution of artificial languages for the engineering of software. Languages of interest include general-purpose programming languages, domain-specific languages, modeling languages, data models, and ontologies as well as application programming interfaces and collections of design patterns that implicitly define languages programming using the new programming language Scala.

The Spring 2009 prototype offering of the course focuses on design and implementation of domain-specific languages (DSLs). This is a focus that will allow the concepts and techniques of the broader software language engineering topic to be explored.

Prerequisites

The catalog states no official prerequisites for Engr 691 other than graduate standing.

Anyone who does not have a mature understanding of programming in an object-oriented language (e.g., Java, C++, or Scala) and of the fundamental characteristics of programming language implementation should contact the instructor before enrolling in the course. Successful completion of CSci 311 and 450 or their equivalents should give sufficient background. However, working knowledge of the programming language Scala would also be a plus.

Course Outcomes/Objectives

Upon successful completion of this course, students:

  1. know and understand the fundamental concepts and techniques of domain-specific languages (DSLs),
  2. can analyze a problem and apply the DSL concepts to design a DSL solution, if appropriate to the problem and environment,
  3. can implement an external DSL using appropriate language-processing tools,
  4. can implement an internal DSL using an appropriate host language,
  5. can evaluate alternative DSL designs and implementations to determine which are more appropriate according to the selected criteria.

Source Materials

Readings:
Journal and conference papers and book chapters related to domain-specific language design and implementation.

Web-hosted materials such as Martin Fowler's evolving book on Domain Specific Languages at http://martinfowler.com/dslwip/.

Textbook(s):
Martin Odersky, Lex Spoon, and Bill Venners. Programming in Scala: A Comprehensive Step-By-Step Guide, Artima, Inc., 2009. In addition to the bookstore, this book can be acquired from the bookstore or directly from http://www.artima.com.

(Tentative) Reference on the language Groovy, including its metaprogramming facilities: Venkat Subramaniam. Programming Groovy: Dynamic Productivity for the Java Developer, Pragmatic Bookshelf, 2008.

Software:
Scala 2.7.3 (or later) distribution, available from http://www.scala-lang.org. This has been installed in the Adler Lab and can be installed on Turing.

Eclipse IDE users may want to use the Scala plugin for Eclipse.

Other tools (e.g., Groovy language, Eclipse Modeling Framework) as determined during the semester.

Course Topics

The prototype course offering covers issues related to the design, implementation, and use of both external and internal (or embedded) domain-specific languages (DSLs). A DSL is a simple language normally with a syntax and semantics focused on a specific application area, perhaps meant to be used by experts on that application area who are not necessarily expert programmers. An external DSL consists of a language separate from the DSL processor's host language. An internal DSL consists of the restricted usage of the host language itself to create the specialized language syntax and semantics

Domain-specific languages and language-oriented programming have been topics of considerable interest in recent years, both in industrial applications and in academic research. For example, the popular Ruby on Rails web framework consists of several "internal" DSLs in the language Ruby, and Microsoft supports DSL development and use as a part of its Visual Studio toolset. On the Java platform, JMock is an example of an internal DSL to support unit testing.

Most software engineers will use DSLs in the future as a part of their work. Many will be called upon to design them. This course seeks to address both needs, with an emphasis on the latter.

This is an experimental course offering, so the content will be elaborated as the semester progresses.

Professional Conduct

As a student in Engr 691-06, you are expected to conduct yourself in a professional manner according to the Honor Code of the School of Engineering, the Information Technology Appropriate Use Policy, the M Book, and any other relevant policies.

Limited Collaboration Policy. Unless otherwise indicated, any homework assignment or programming exercise given in this class will be an individual assignment. The work you submit is to reflect the knowledge, understanding, and skill that you have attained as an individual. However, the instructor does want to encourage the development of a community of scholars who are actively engaged in discussion of the ideas related to this course. With this in mind, you are allowed to discuss solutions of the homework and programming problems with other students if done so according to the following guidelines:

Grading

The grading scale for this class is A [90..100], B [80..90), C [70..80), D [60..70), and F [0..60).

Sixty percent of the semester grade will come from the exam average and forty percent from the homework assignment/project average.

Assignments and Projects

Examinations


UP to Engr 691, Software Language Engineering, root document?


Copyright © 2009, H. Conrad Cunningham
Last modified: Thur, 22 Jan 2009