Beyond AOP: Toward Naturalistic Programming
Cristina Lopes,
University of California, Irvine,
lopes@ics.uci.edu Paul Dourish,
University of California, Irvine,
jpd@ics.uci.edu David Lorenz,
Northeastern University,
lorenz@ccs.neu.edu Karl Lieberherr,
Northeastern University,
lieber@ccs.neu.edu
Software understanding (for documentation, maintenance or evolution) is one of the longest-standing problems in Computer Science.
The use of bct-oriented languages helps, but fundamentally remains far from solving the problem. Most programming languages
and systems have fallen prey to the assumption that they are supposed to capture idealized models of computation inspired
by deceptively simple metaphors such as objects and mathematical functions. Aspect-oriented programming languages have made
a significant breakthrough by noticing that, in many situations, humans think and describe in crosscutting terms. In this
paper we suggest that the next breakthrough would require looking even closer to the way humans have been thinking and describing
complex systems for thousand of years using natural languages. While natural languages themselves are not appropriate for
programming, they contain a number of elements that make descriptions concise, effective and understandable. In particular,
natural languages referentiality is a key factor in supporting powerful program organizations that can be more easily understood
by humans.
|
Routine Run-time Code Generation
Sam Kamin,
Univ. of Illinois at Urbana-Champaign,
kamin@cs.uiuc.edu
The decades-old paradigm of "object code = executable code: is outdated. The paradigm we
propose in this paper is "object code = executable program generator.: Similarly, "software
component" should be "program that, when appropriately invoked by a client, generates machine
language useful to the client." Traditional object files amount to constant functions in the domain
of code-producing functions; in the future, we will routinely employ the full domain of higher-order
code values. In this paper, we argue that such a change in viewpoint can lead to much
wider use of run-time code generation, by overcoming the bureaucratic barriers it usually
encounters. Run-time code generation has numerous applications; when it comes to be used
routinely, many more applications are likely to be discovered.
|