_D_Y_P_L_
DYnamic Programming Languages

Short Description

Dynamic languages have been called the 'unsung hero of the world-wide web'. Many well-known systems, like the Amazon shopping-site or Google are built on top of dynamic languages. Dynamic languages have also found widespread use as a tool for intergrating different systems and components. Dynamic languages are also used to script larger systems or as a high-level interface to a lower-level language. The nature of dynamic languages also facilitate metaprogramming, where the language is used to manipulate the language itself. This is superb for the implementation of domain-specific languages. Domain-specific languages raise the level of abstraction even further than objects and allows the programmer to express the program in terms of the domain. An excellent example of the use of metaprogramming is in the implementation of Ruby on Rails, an MVC framework for building internet applications. Rails allows automatic generation of interfaces straight from the code and provides high-level variable declarations such as belongs_to and has_many, all coded in Ruby, and accessible from within the programming language itself.

The popularity of dynamic languages is increasing. The old maxim that static compile-time checks are necessary to build secure software is questioned time and time again by acknowledged people, programmers and academics alike and the dynamic philosophy maps very well with the popular agile methods like XP and test-first development.

In this course, we will examine the philosophy behind dynamic languages. We do so in the context of Python and Ruby, two proven dynamic languages with different strengths and weaknesses. As well as using dynamic languages as the full-blown programming languages they are, we will examine the use of dynamic languages for integration and as tools for metaprogramming, especially for implementation of domain-specific languages. We will also look briefly at Groovy and IO, the first being a full-blown dynamic language useful for scripting Java applications running on the Java 2 platform and the other being a small prototype-based language with support for actor-style programming suitable for embedded systems.

Aim

Having successfully completed the course, a student:

Syllabus

The contents of dynamic programming languages, Ruby and Python, reflection and metaprogramming facilities, dynamic typing, unit-testing, patterns for dynamic programming, etc.

Several smaller projects of different character to highlight different aspects of the languages.

Prerequsites

At least moderate programming skills. Be able to learn a programming language without excessive help.

Follow-up

AGILE, MOOG, TEME, IOOR, CISS.

Requirements

Programming assignments (3x1 credit), take-home exam (2 credits)

Required Reading

Programming languages books of your own choice (many good books are free). Articles and a compendium.

Contact information: tobias@dsv.su.se