Graduation date: 2007
Software maintenance accounts for a large portion of the software development cost, particularly the process of updating programs either to adapt for requirement change or to enhance design or efficiency. Currently, program updates are generally performed manually by programmers using text editors. This is an unreliable
method because syntax and type errors are easily introduced, not to mention logic and semantic errors. The problem with this method is viewing programs on a low level, namely, as streams of characters. Rather than the textual representation, we propose to view the programs as abstract data types and to update programs through programming updates in update languages. In this dissertation, we first study a specific program update problem, monadification, which is the process of automatic introduction of monads into functional programs. Later we investigate a more general problem of program updates and present an update language. We design a core calculus for the update language as well as its semantics and type system. Moreover, we study the
problem of generic traversals, which itself is a means of
reducing the effort for software maintenance, but also serves as a basis for implementing program updates and other metaprogramming tasks.