Engr 691-06: Special Topics in Engineering Science
(Software Language Engineering)
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
The WWW home page for this class is
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."
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
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.
The catalog states no official prerequisites for Engr 691 other than
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.
Upon successful completion of this course, students:
- know and understand the fundamental concepts and techniques of
domain-specific languages (DSLs),
- can analyze a problem and apply the DSL concepts to design a DSL
solution, if appropriate to the problem and environment,
- can implement an external DSL using appropriate
- can implement an internal DSL using an appropriate host language,
- can evaluate alternative DSL designs and implementations to
determine which are more appropriate according to the selected
- 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
- 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,
- 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
- 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.
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.
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
Appropriate Use Policy, the M Book, and any other
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
- You may discuss ideas for homework and
programming assignments with your classmates. However, you
cannot collaborate on writing the solution or the
program code. That is, you can talk about the problems and
ideas for solving them, but you cannot write things down with anyone
else. You are, of course, prohibited from copying or seeing another
student's written solution, and you are not allowed to show your work
to anyone else. Similarly, you are not allowed to copy text or
program code from a book or a page on the Web unless explicitly
authorized to do so by the instructor.
- You should accept help with care. If you work
too closely with another student, you might mislead yourself into
believing that you understand the concepts and techniques better than
you actually do. Don't forget that the instructor has office hours
and can probably give you hints or suggestions to get you started.
- You should give help with care. Do not help
anyone too much. When you have solved a problem, it is tempting to
just tell other students how you solved it. Instead, try to allow
them to come to the solution on their own. Maybe give them a hint to
help them get "over a hump." Remember that helping someone too much
will hurt them in the long term if they can't work through problems on
the exams by themselves. So avoid the temptation to do so. If you
can't help other students without giving away the whole solution,
direct them to see the instructor (who may or may not have a way to
"edge" them toward the solution).
- You are not obligated to help anyone. If you
feel uncomfortable helping another student for any reason, please
direct them to see the instructor.
- Except as described above, all work in this class is
covered by the School of Engineering's Honor Code statement on
plagiarism. It is plagiarism "to knowingly deceive, copy,
paraphrase, or otherwise misrepresent your work in a manner
inconsistent with professional conduct".
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
- All students are expected to study the relevant portions of the
textbook and handouts in conjunction with our class discussions (i.e.,
before coming to class). Explicit reading assignments will
not always be given. Ask if it is not clear what you should be doing.
- Several homework assignments are planned for the semester. Some
of the assignments may be called "projects" and have more credit than
the "regular" assignments.
- Unless otherwise stated in the assignment description, an
assignment is to be carried out by each individual student without
inappropriate collaboration with others. See the section on
- In preparing and submitting homework assignments make sure that:
- your name, the course number or name, the assignment identifier,
and individual exercises are clearly indicated in the content of the
file or on the paper. (If it is a group assignment, give the group
identifier and the names of all members.)
- for any handwritten portions, you write legibly on only one side
of the paper in a black or blue pen or dark pencil. Do NOT use red or
green ink! Some of the assignments may require that materials be
generated with a word processor and/or other tools.
- your pages are stapled together in the upper left corner when
viewed from the front.
- Several programs will be assigned during the semester. We will
most likely use the multiparadigm programming language Scala, unless
For these exercises, you will need to submit appropriate design
documentation, a listing of your program code, and appropriate printed
output from your program testing. Make sure that you clearly label
the assignment as described above. You will also be asked to submit
your program source code in electronic form using Blackboard.
- As appropriate, there may be a few in-class assignments or quizzes
that count toward the assignment/project portion of the grade.
- All students are expected to complete their homework assignments
and projects by their due dates. If an assignment is submitted late,
a penalty of 10 percent of that assignment's grade
will be assessed for each day it is late. A homework
paper will not be accepted after graded papers have been returned,
after a solution has been distributed, or after the final examination.
- There will be three examinations, including the final. The final
examination is optional and can replace one of the other examinations.
- The examination portion of the semester grade will be calculated
by averaging the two best examination grades.
- The two mid-term exams will be spaced more or less evenly
through the semester.
- The final examination will be given during the final
examination period. Please do not ask to take the final examination
earlier than the time set for the entire class.
- Each exam will cover all topics studied to that point.
- Each exam may consist of a combination of in-class and take-home
- If you cannot take an examination at the scheduled time because
of an illness or other special circumstances, please notify
Prof. Cunningham in advance. Without advance notification, it may not
be possible to give a make-up examination.
UP to Engr 691, Software Language Engineering, root document?
Copyright © 2009, H. Conrad Cunningham
Last modified: Thur, 22 Jan 2009