Wyvern: A Simple, Typed, and Pure Object-Oriented Language
|
|
|
- Owen Baker
- 10 years ago
- Views:
Transcription
1 Wyvern: A Simple, Typed, and Pure Object-Oriented Language Ligia Nistor, Darya Kurilova, Stephanie Balzer, Benjamin Chung, Alex Potanin 1, and Jonathan Aldrich Carnegie Mellon University {lnistor, darya, balzers, bwchung, aldrich}@cs.cmu.edu, [email protected] 1 Abstract The simplest and purest practical object-oriented language designs today are seen in dynamically-typed languages, such as Smalltalk and Self. Static types, however, have potential benefits for productivity, security, and reasoning about programs. In this paper, we describe the design of Wyvern, a statically typed, pure object-oriented language that attempts to retain much of the simplicity and expressiveness of these iconic designs. Our goals lead us to combine pure object-oriented and functional abstractions in a simple, typed setting. We present a foundational object-based language that we believe to be as close as one can get to simple typed lambda calculus while keeping objectorientation. We show how this foundational language can be translated to the typed lambda calculus via standard encodings. We then define a simple extension to this language that introduces classes and show that classes are no more than sugar for the foundational object-based language. Our future intention is to demonstrate that modules and other object-oriented features can be added to our language as not more than such syntactical extensions while keeping the object-oriented core as pure as possible. The design of Wyvern closely follows both historical and modern ideas about the essence of object-orientation, suggesting a new way to think about a minimal, practical, typed core language for objects. Categories and Subject Descriptors D.3.3 [Programming Languages]: Language Constructs and Features Classes and objects; D.3.1 [Programming Languages]: Formal Definitions and Theory General Terms Object-oriented, first-class classes, static type check- Keywords ing 1. Introduction Languages The language designs of Smalltalk [11] and Self [20] are iconic in their elegance, their simplicity, and the success with which they capture the essence of object-oriented programming. Although they are not among the most common languages used today, their design has been an inspiration for many modern languages. Self and Smalltalk are notable for the following characteristics, many of Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. To copy otherwise, to republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. MASPEGHI 13, July , Montpellier, France Copyright c 2013 ACM /13/07... $15.00 which are shared by more recent object-oriented languages, such as Python, Ruby, Lua, and JavaScript: A high-level, pure object-oriented model, in which clients can interact with objects only by sending them messages. This model of interaction enforces Meyer s uniform access principle [16], a principle stating that an object s services should only be available through a uniform notation (the object s methods in this case). An interactive, value-based language model, which means that everything significant in the language is a first-class value, either an object or a function. This contributes to a system that is directly manipulable in the sense of Smith and Ungar [20]. For example, classes in Smalltalk are not special declarations, but live objects that respond to messages. A high degree of simplicity, with a few constructs sufficing to provide great expressiveness. Good support for functional programming via blocks or lambda expressions and closures. Interestingly, both Smalltalk and Self, as well as many languages that share some of the characteristics above, are dynamically typed. Statically-typed object-oriented languages exist, but many are less pure (e.g., Java classes can expose fields), or less interactive (e.g., classes are typically not first-class), or may be considerably more complex (C++ and Scala, despite their many virtues, come to mind). Static types are a potentially interesting addition to the set of features above for a number of reasons. In object-oriented languages, types can eliminate message-not-understood errors [12, 24] and be used to optimize programs [10] and to create practical refactoring tools [22]. Preliminary evidence suggests that, in some circumstances, static types can enhance productivity as well [15]. Our interest in this question comes from Wyvern, a language we are designing for secure mobile and web programming. To compare with programming languages in this domain, Wyvern must be a simple, value-based, pure object-oriented language with good support for functional programming much like the languages mentioned above. However, we also want to provide strong reasoning about security properties. Reasoning is facilitated by a simple, high-level language, but, in addition, we want to use type-based approaches to ensure certain security properties (e.g., using inference rules developed for type checking to also check object ownership and state). Thus, combining static types with a language having the characteristics above is important to meeting this set of goals. This paper therefore explores the design of an object-oriented language that is pure, value-based, simple, statically type-safe, and supports functional programming. We explore variants with and without classes, our motivation being to show that, while classes are convenient, they are not fundamental to the object-oriented model.
2 1.1 What Makes an Object-Oriented Model Pure? Most of the criteria above are fairly clear. The exception involves the purity of the object model. What does it mean, especially in the context of types, for a language to be purely object-oriented? To answer the question, we consider both history and theory. With respect to history, Alan Kay, a pioneer of the object-oriented programming who developed Smalltalk, describes an objects as server metaphor in which each object would be a server offering services that clients can use by sending messages to the object [13]. In fact, Kay writes that, in his opinion, the big idea [of object-oriented programming] is messaging. 1 With respect to theory, in his essay on the nature of objects, William Cook defines objects as a value exporting a [sic] procedural interface to data or behavior [9]. The notion of a procedural interface reflects Kay s focus on messaging: the only way to interact with an object is to invoke its methods. This is also consistent with Meyer s uniform access principle. Cook argues that a key benefit of objects, arising from their procedural interface, is that different implementations of an interface can interoperate. For example, in a pure object-oriented model, we can take the union of a set implemented as a list with a set implemented as a hash table. Moreover, different implementations of an interface can be treated uniformly: for example, we can store instances of two different implementations of a set within the same data structure. These benefits are used in many object-oriented systems [5], and we consider them to be critical goals of our language design. These ideas can also be considered in a comparison between objects and module systems, particularly, with respect to encapsulating state. Concerning the development of object-oriented programming, Kay writes of his motivations, The large scale one was to find a better module scheme for complex systems involving hiding of details, and the small scale one was to find a more flexible version of assignment, and then to try to eliminate it altogether [13]. Hiding assignment behind a method interface via the uniform access principle provides a more flexible version of assignment, and one can go further in using that method interface more abstractly to replace bindings and assignment with goals [13]. The procedural interface of objects also makes them act like first-class modules. 2 From these sources, we extract three key requirements that we wish to satisfy in coming up with a typed, pure object-oriented model: Uniform access principle. Following Meyer, Cook, and Kay, it should be possible to access objects only by invoking their methods. Interoperability and uniform treatment. Different implementations of the same object-oriented interface should interoperate by default, and it should be easy to treat them uniformly at run time (e.g., by storing different implementations of the same interface within a single run-time data structure). State encapsulation. All mutable state should be encapsulated within objects Mechanisms for Code Reuse No discussion of a pure object-oriented programming model would be complete without discussion of code reuse mechanisms, such 1 Alan Kay, sent October 10, 1998 to [email protected]. 2 A module system for Wyvern is still under development, but a key principle will be that modules can be treated as any other object, following Newspeak [6]. 3 This should not be taken to imply that all objects have mutable state, which is a common misconception. See Cook s essay for details [9]. 1 type Lot = 2 meth value : int 3 meth compare(other : Lot) : int 4 meth sell : int 5 6 meth purchase(q : int, p : int) : Lot = 7 new 8 var qty : int = q 9 var price : int = p 10 meth value : int = 11 this.qty * this.price 12 meth compare(other : Lot) : int = 13 this.value - other.value 14 meth sell : int = 15 val qtysold = this.qty 16 this.qty = 0 17 qtysold val alot = purchase(100,100) 20 val d = alot.compare(purchase(50,90)) 21 val value = alot.value 22 val qtysold = alot.sell Figure 1. A Lot Object in the Object-Oriented Core of Wyvern (Featherweight Wyvern) as inheritance. We have not yet investigated adding inheritance or delegation to Wyvern. However, Wyvern does support specialization and generalization of types, along with a pure object-oriented model that supports reuse via composition mechanisms. Questions of interest to us as we continue the development of Wyvern are: How far can a pure object-oriented model without inheritance go in supporting code reuse? What reuse mechanisms would fit most naturally into a system with Wyvern s design goals? We are considering a reuse model for Wyvern based on delegation, possibly, with slightly simpler semantics compared to delegation in Self [20]. 1.3 Contributions This paper makes the following contributions: Section 2 presents the design of a simple, typed, value-based, pure object-oriented language. We closely follow the lambda calculus, a simple, foundational model of computation, while enforcing the uniform access principle, supporting object interoperability, and encapsulating state. Section 2 also provides the semantics of this language by translation into the typed lambda calculus. Section 3 describes a purely object-oriented first-class class construct and its definition in terms of pure objects by translation into the language described in the previous section. The design of Wyvern is ongoing. While we believe the design described here captures our initial goals well, the design is subject to change and needs to be extended in many ways. In the conclusion, we discuss areas for future work, including specific potential extensions of Wyvern. 2. The Object-Oriented Core of Wyvern In this section, we present the syntax and semantics of the objectoriented core of Wyvern, which we call Featherweight Wyvern (FW). We start with an example.
3 e ::= x λx:τ.e e(e) new {d} e.f e.f = e e.m τ ::= t τ τ d ::= var f : τ = e meth m : τ = e type t = {τ d } τ d ::= meth m : τ σ ::= τ {σ d } σ d ::= var f : τ type t = {τ} τ d Γ, σ d :: σ d σ = {σ d } τ d σ d Γ new {d} : {τ d } T-new Γ, this : σ e : τ Γ, σ meth m : τ = e :: meth m : τ DT-meth Figure 3. Featherweight Wyvern Semantic Rules for new and meth expression that binds the additional arguments. For example, in our formal core language the declaration of compare would be written: Figure 2. Featherweight Wyvern Syntax Figure 1 shows the definition of a Lot object in FW. The Lot type, which represents the object, is defined as a collection of methods. It s important to note that, in Wyvern, types are structural, and their names serve as abbreviations. Object types in Wyvern are implicitly recursive, allowing the compare method to take a Lot object as an argument to compare the value of this Lot to the value of the passed in Lot. We create lots using the purchase method, which acts as a factory. The body of this method is a new statement which creates an object. The object defines two mutable variables of type int. These variables can be accessed only from methods within the object, enforcing encapsulation of mutable state. Definitions are provided for each method. Method invocations or field access on the receiver object can be expressed using the this keyword. In the sell method, each line is a different statement, and the value of the expression on the last line of the method is returned from the method. Code below the purchase method shows how Lot objects can be used. From the Lot type alone we can already see how the design of Wyvern fulfills our criteria for a pure typed object-oriented model. As object types in Wyvern only contain methods, the uniform access principle is enforced. Although only one implementation of Lot is shown, the Lot type allows multiple implementations that can interoperate and may be treated uniformly. Finally, all state is encapsulated within the Lot object. 2.1 Syntax Figure 2 shows the syntax for Featherweight Wyvern. The language is expression-based and has the lambda calculus at its core, thus providing functional programming support. In our text examples, we write λx:τ.e as fn x:τ => e. To this functional core, we add a new construct for creating an object from a sequence of declarations and primitives for reading fields, writing fields, and invoking methods. Types τ may be either the name of an object type t or a function type τ τ. The declarations that can appear inside a new expression include variable declarations, method declarations, and type abbreviations. Variable declarations are visible only within the object and are assigned a type and an initialization expression, which is executed when the object is created. Method declarations are also typed and have a body expression, but unlike with variables, the body is evaluated each time the method is called, not when the surrouding object is created. The careful reader will note that we do not directly support method arguments. Each method has an implicit argument this. If more arguments are needed, the body of the method can be a lambda 1 meth compare : Lot -> int = 2 fn other : Lot => 3 this.value - other.value Type abbreviations are strictly local and cannot be seen from outside the object; we may add type members in a future extension. An object type is defined as a set of method declaration types τ d, which are just like method declarations except that the body is absent. Type abbreviations are recursive, so that t may appear in τ d. The typing and subtyping rules are mostly standard and are omitted here for space reasons; a companion technical report gives the complete rules [21]. The only exception is the way that new and this are typed (Figure 3). In order to type new, we type each declaration in it against a declaration type σ d. There is a declaration type form for each kind of declaration; thus, σ d generalizes τ d, which is restricted to method declarations only. A sequence of declaration types {σ d } forms an internal object type σ. We want to use this σ as the type for this, so that we can access not just methods, but also variables on it. Therefore, the σ computed in the new rule is passed as an input to the declaration typing judgment, to the left of the turnstile. In the method typing rule, the premise assumes that this has this internal object type σ. Note that this mechanism not only allows methods to access fields on the receiver, it is also the mechanism that prevents fields from being accessed elsewhere. σ is not part of the grammar of ordinary types (in fact, it is a superset of types, not a subset), and, thus, a lambda may not have an argument of σ type. Hence, our type system prevents passing a pointer to this outside the lexical scope of a function at an internal object type. this may still be passed to other functions, but only as an external object type, in which all but the method declarations have been forgotten. With the addition of integers and a few other small abbreviations, this syntax is expresive enough to write the Lot example from Figure 1. Our core language does not have top-level declarations, but we can easily wrap the Lot and purchase declarations in an object, put the rest of the code in an eval method of that object, and invoke eval on the top-level object. The example also uses a val abbreviation, which is Wyvern s version of let, can be encoded with functions, and is used just for visual brevity. For example, val x = e 1 ; e 2 can be written as (fn x : τ => e 2 )(e 1 ), where τ is the type of e 1 in the current scope. Figure 4 shows the code with no syntactic sugar, except for val. 2.2 Discussion and Related Calculi We believe that the design above fulfills the criteria we set out in the introduction. Featherweight Wyvern is a pure object-oriented language in that it enforces the uniform access principle, interoperability of different implementations of the same object interface, and state encapsulation. The language is statically typed, and all elements of the language, except types, are first-class values. The
4 1 val globalobject = new 2 type Lot = 3 meth value : int 4 meth compare : Lot -> int 5 meth sell : int 6 7 meth purchase : int -> int -> Lot = 8 fn q : int => fn p : int => 9 new 10 var qty : int = q 11 var price : int = p 12 meth value : int = 13 this.qty * this.price 14 meth compare : Lot -> int = 15 this.value - other.value 16 meth sell : int = 17 val qtysold = this.qty 18 this.qty = 0 19 qtysold meth eval : unit = 22 val alot = this.purchase(100,100) 23 val d = alot.compare(this.purchase(50,90)) 24 val value = alot.value 25 val qtysold = alot.sell globalobject.eval Figure 4. The Lot Object in Featherweight Wyvern Without Syntactic Sugar Except for val lambda calculus core provides good support for functional programming. Furthermore, since in pure object-oriented languages, an object s behavior is characterized by the messages it responds to and a structural type describes this directly, for the simple core of Wyvern, we use structural typing. Empirical studies also have shown structural typing to be useful in practice [14]. We intend to support nominal types as an addition when they are needed, for example, for abstract data types. We argue that the language is about as simple as it could possibly be while fulfilling these goals: beyond the lambda calculus, which is necessary for functional programming, we have exactly one construct each for object creation, field reads and writes, and method calls. The type language is also extremely simple, supporting recursive object types and function types, as well as the special internal σ type for this mentioned above. We briefly consider whether the language could be simpler while still achieving our goals. One obvious approach to simplifying the language would involve encoding one of the lambda calculus or methods in terms of the other. In fact, in the next subsection, we will give semantics to Featherweight Wyvern by translating objects into the lambda calculus with records. Alas, these encodings are quite awkward for a source-level language, and we wish for Featherweight Wyvern to provide source-level support for both objects and functions. A second possible simplification would be to unify methods and fields, as done in Abadi and Cardelli s calculi [4]. However, expressing methods using fields at the source level would not enforce the uniform access principle (since the fields could be accessed directly) and would leave Wyvern without a purely object-oriented core. Expressing fields as methods raises questions about how to effectively hide state and creates typing complexity, requiring that a distinction is made between updatable methods (i.e., fields) and non-updatable ones [4]. Therefore, this simplification is not appropriate for Featherweight Wyvern. trans(meth m : τ) m : unit τ trans(var f : τ) f : ref τ trans(meth m : τ = e; d) m : τ = λ : unit.trans(e); trans(d) trans(var f : τ = e; d) f : τ := alloc trans(e); trans(d) trans(e.m) (unfold trans(e)).m() trans(new {d}) letrec this : σ = {trans(d)} in fold this where Γ, σ {d} : σ trans(e.f = e 1) trans(e).f = trans(e 1) trans(e.f)!trans(e).f trans(type t = {τ d }; d) trans([µt.trans(τ d )/t]d) Figure 6. Translation from Featherweight Wyvern to the Extended Lambda Calculus Featherweight Wyvern does have strong similarities to object calculi proposed in the research literature. Our calculus is very similar in its modeling of objects, functions, and methods to Abadi and Cardelli s FOb 1 calculus. The main difference is that, as discussed above, Abadi and Cardelli use a method update operation instead of modeling state with fields. This keeps their calculus small but also prevents it from being a practical language. 2.3 Semantics We describe the semantics of FW by translation into the typed lambda calculus with extensions for records, the fix operator, references, iso-recursive types, and subtyping. The syntax of our target language is shown in Figure 5; its semantics are covered in our technical report [21] but are in many cases directly taken from Benjamin Pierce s textbook [18]. The trans function in Figure 6 is used to translate expressions and declarations from FW to typed lambda calculus. When translating meth m : τ, the keyword meth is removed and the method m becomes a field of type τ. A variable var f : τ becomes a reference f. The translation of meth m : τ = e assigns to the field m the translation of expression e, wrapping the expression in a lambda so that it is evaluated when the method is called rather than on object creation. The assignment to a variable var f : τ = e is translated by allocating a cell to hold the result of executing the translated expression e. The translation of e.m is more interesting since m becomes a field (or a record member) of e and we need to unfold e in order to be able to access m. After unfolding the translated expression, we select the method m and call the resulting function with a unit value to evaluate the method body. In the translation of new {d}, we use the first of the object encodings discussed by Bruce et al. [8]. We create a new object as a record, using the translation of the declarations d. The created object must be available within its own methods as the this variable, and so we recursively bind the record value to this using a letrec construct. Finally, we fold the result to a recursive type. Translation of field reads and writes is straightforward; the only interesting issue is that we must add an explicit dereference to field reads because of the way references are handled in our extended lambda calculus. Finally, we translate type bindings by substituting the equivalent recursive type for t in the declarations that follow. When we apply our translation rules shown in Figure 6, the code from Figure 1 is translated to the extended lambda calculus code shown in Figure 7. In this simpler version of the language, Lot is defined as a recursive type. The methods from Figure 1 are translated into corresponding fields value, compare, and sell.
5 τ ::= τ τ {f i:τ i 1..n ref τ t µt.τ Γ ::= {x:τ} Σ ::= {l:τ} i } v ::= λx:τ.e {f i = v i 1..n l fold[τ] v S ::= {l = v} i } e ::= x λx:τ.e e(e) {f i = e i 1..n e.f fix e alloc e!e e := e fold[τ] e unfold[τ] e l i } letrec x:τ 1 = e 1 in e 2 let x:τ 1 = e 1 in e 2 def = letx:τ 1 = fix(λx:τ 1.e 1) in e 2 def = (λx:τ 1.e 2)(e 1) Figure 5. Lambda Calculus with Extensions [18] 1 type Lot = rec t. { 2 value : unit -> int 3 compare : unit -> t -> int 4 sell : unit -> int 5 } 6 type LotT = rec t. { 7 qty : ref int 8 price : ref int 9 value : unit -> int 10 compare : unit -> Lot -> int 11 sell : unit -> int 12 } 13 fun purchase(q : int, p : int) : Lot = 14 letrec this : LotT = { 15 qty : ref int = alloc q 16 price : ref int = alloc p 17 value : unit -> int = fn _ : unit => 18!this.qty *!this.price 19 compare // not shown 20 sell : unit -> int = fn _ : unit => 21 val qtysold =!this.qty 22 this.qty = 0 23 qtysold 24 } in fold this val alot = purchase(100, 100) 27 val d = unfold(alot).compare()(purchase(50,90) 28 val value = unfold(alot).value() 29 val qtysold = unfold(alot).sell() Figure 7. The Lot Object Translated to the Lambda Calculus with Extensions We have given this type an abbreviation Lot for readability; type abbreviations are technically not in our target language, but they are a standard addition. We also need to define an internal type LotT that captures the implementation used in the purchase function; this type is like Lot but additionally includes the mutable state. Note that the type of compare in LotT uses type Lot rather than t for its argument type. This allows LotT to be a subtype of Lot, and also ensures that our interoperability design criterion is met: the LotT implementation can interoperate with any other implementation of Lot. The remainder of the translation follows the translation rules in a straightforward way. 3. Extending Wyvern with Classes In this section, we present an extension to Featherweight Wyvern (FW) called Featherweight Wyvern with Classes (FWC) that adds first-class classes. In fact, this language is a subset of the current, working implementation of Wyvern freely available online and briefly described in the next section. The extended syntax is shown in Figure 8. The basic forms of expressions and types are identical to those from the objectoriented core of Wyvern, presented in the previous section. To the declaration syntax, we add a class declaration. Class declarations can have declarations within them, which reflect the variables and methods of the objects created from that class. Wyvern also allows classes to declare class variables and class methods, which are members of the class itself. Class methods and variables are inspired by the corresponding constructs in Smalltalk. They are also similar to static methods and static fields in Java but fit more cleanly into a language where classes are first-class objects. As with the previous core language, we use σ to denote the internal type of a class or object, and we extend the internal declaration types σ d to add the appropriate class-related declarations. Figure 9 shows a variation on our earlier example, written in FWC and taking advantage of classes. The Option class represents a financial option. We introduce a class field totalquantityissued to keep track of how many options were issued during the class s lifetime and use a class method issue to create new options, i.e., new objects of this class. As with the earlier Lot example, there are two object fields, quantity and price, that store the corresponding information about Option instances, and an object method exercise that is called upon the end of the lifetime of an object of the Option class. Lines illustrate how the issue and exercise methods can be used. Here, for briefness, we used a shorthand to represent the statement sequence, which can be trivially encoded using a let expression. If the code snippet from Figure 9 is wrapped in a new statement, it becomes a runnable FWC program. We argue that we do not need to make classes explicit to have an object-oriented language, and, therefore, Figure 10 presents a translation function. It simplifies our representation by replacing every occurrence of a class declaration with a corresponding type and a variable that can be used to instantiate objects of the class.
6 e ::= x λx:τ.e e(e) new {d} e.f e.f = e e.m τ ::= t τ τ τ d ::= meth m : τ d ::= var f : τ = e meth m : τ = e type t {τ d } class c { cd; d } cd ::= class var f : τ = e class meth m : τ = e σ ::= τ {σ cd } σ cd ::= class var f : τ class meth m : τ σ d σ d ::= var f : τ type t {τ d } class c { σ cd, σ d } τ d Figure 8. Syntax of Featherweight Wyvern with Classes 1 class Option 2 var quantity : int = 0 3 var price : int = 0 4 meth exercise : int = 5 this.quantity * this.price 6 7 class var totalquantityissued : int = 0 8 class meth issue : int -> int -> Option = 9 fn q : int => 10 fn p : int => 11 totalquantityissued = 12 totalquantityissued + q 13 new 14 var quantity : int = q 15 var price : int = p var optn : Option = Option.issue(100, 50) 18 var ret : int = optn.exercise Figure 9. An Option Class in Featherweight Wyvern with Classes trans(class c {cd; d}) type c = τ i; var c : τ c = e where τ c = {meth m : τ} where meth m : τ τ c iff class meth m : τ = e cd τ i = {meth m : τ} where meth m : τ τ i iff meth m : τ = e d d cl = {meth m : τ = e} {var f : τ = e} where meth m : τ = e d cl iff class meth m : τ = e cd and var f : τ = e d cl iff class var f : τ = e cd d cl = [new {d d } / new {d }] d cl d cl = trans(d cl ) e = new{d cl } Figure 10. Translation of a Class from FWC to FW The translation relies on the fact that typing is structural and that multiple names for the same type do not affect the semantics. In Featherweight Wyvern, we represent a class as a type abbreviation and a set of methods originally included in the class. We start the translation by collecting all the class methods and converting them into regular methods. The resulting type τ c is an externally 1 type Option = 2 meth exercise : int 3 4 type OptionC = 5 meth issue : int -> int -> Option 6 7 var Option : OptionC = 8 new 9 var totalquantityissued : int = 0 10 meth issue : int -> int -> Option = 11 fn q : int => 12 fn p : int => 13 totalquantityissued = 14 totalquantityissued + q 15 new 16 var quantity : int = q 17 var price : int = p 18 meth exercise : int = 19 this.quantity * this.price var optn : Option = Option.issue(100, 50) 22 var ret : int = optn.exercise Figure 11. Option Class Translated to Featherweight Wyvern visible type for the class object. Next, we assemble a type that will represent the objects instantiated from the class, τ i, using the object methods declared in the class. After establishing the types we need for our translation, we proceed by translating the class s declaration statements. First, we collect all the class methods and class fields and rewrite them without the keyword class (d cl ). Then, each new statement inside the collection d cl is substituted with a new statement that carries a context and includes an overriding union of declarations {d d }, where d are the declaration that were in the new statement previously and d are the declarations defined in the class. Finally, we recursively translate the resulting set of declarations d cl and wrap it with a new statement. Hence, the class is translated to be a type abbreviation and a variable containing declarations from the class. Our translation thus reveals that a class is treated both as a type and as a value in Wyvern. This is natural given that classes are first-class in Wyvern and reflects existing usage of classes in prior languages: for example, classes are types in Java and most other typed object-oriented languages, and classes are values in Smalltalk. This duality does not cause semantic problems because values and types are in different namespaces in Wyvern, and the context always makes it clear whether a value or a type is required.
7 Figure 11 shows the result of applying the translation function to the Option class we saw earlier (Figure 9). The resulting code starts with the definitions of type abbreviations that directly correspond to the types created by the translation function. Specifically, type Option represents the type τ i for objects of the class, and type OptionC represents the type τ c for the class itself. Then comes the translation of the class itself, which, in FW, is a variable definition. Its type is the externally visible class type OptionC, and it is defined to be a new statement containing the class declarations from the original class. In particular, it contains a variable totalquantityissued, which is a class field in FWC, and a method issue, which is a class method in FWC and whose return type is Option, i.e., the type representing objects of the class. Inside the issue method we find the regular declarations that pertain to the FWC class: variables quantity and price and the exercise method. Our technical report [21] accompanying this paper provides the subtyping rules, both static and dynamic semantics, states the soundness theorems, and allows the reader to see how the resulting language can be proved safe by the appropriate translation to the simple typed lambda calculus with extensions. The next section briefly surveys our prototype implementation. 4. Implementation Wyvern 4 is implemented in Java, with the eventual goal of selfhosting, i.e., being written in Wyvern itself, and supports a superset of features presented here. A selection of tests with simple Wyvern programs is available as part of the source code. Wyvern uses a fixed whitespace-indented lexing approach similar to that used by languages, like Python. The current indentation convention is based on the number of whitespace characters. Wyvern was developed to support extensible parsing interface. This means that, as such, there are no keywords defined in the language: instead each keyword is mapped to a corresponding parser that can parse the relevant block of code. For example, core implementation includes a class parser that supports class declarations that may include other declarations, such as methods and variables, which are, in turn, parsed by the associated parsers. As a result, Wyvern front-end effectively combines the parsing and type checking stages that are usually separated in more traditional compilers, such as javac or gcc. Currently, Wyvern supports three targets: the Java interpreter and compilation to either JavaScript or Java, all of which enable us to test and run Wyvern programs. We are working on introducing full interoperability with both JavaScript and Java to enable simple Wyvern programs to join a web-oriented workflow and, hence, allow us to perform usability and security-oriented studies of our language. 5. Related Work A central inspiration in the design of Wyvern and its core language is Smalltalk [11]. Smalltalk was seminal in the development of object-oriented languages and is still in use today, e.g., in its Squeak [3] and GemStone/S [2] incarnations. While simple and elegant, it is dynamically typed, as opposed to Wyvern, which is statically typed. In both Smalltalk and FWC, classes are first-class objects. Smalltalk is more strongly class-based however, in that every object is an instance of a class; this is not true of FWC, and especially not of FW. Strongtalk [7] is a Smalltalk environment with optional static typing support. The type system is incremental and operates independently of the compiler. Wyvern s type system has some sim- 4 ilarities to Strongtalk s, e.g., both type systems are structural. Strongtalk s type system is more complex and powerful than Wyvern s, including features, such as parametric polymorphism and brands. We may add some of these features to Wyvern, but unlike Strongtalk, we deliberately do not brand class types to make them unique. This means that, when two classes implement the same interface, the types they define are identical, and, therefore, the classes can interoperate. We disagree with the choice made by Strongtalk but, also, by more recent languages, such as Java, to make branding the default for classes because this compromises the interoperability provided by the object-oriented paradigm. If we add brands to Wyvern, programmers will have to request their use explicitly. Gradualtalk [1] is another Smalltalk dialect offering gradual typing and is fully compatible with Smalltalk code. Although more recent and more expressive than Strongtalk, its relationship to Wyvern is similar. Self [20] is a prototype-based object-oriented language, providing an object model that is even simpler than Smalltalk s, although the surface syntax and environments of the two languages are similar. Wyvern shares Self s philosophy that classes are not required but provides them as syntactic sugar for convenience. Indeed, experience with Self suggests that many programmers create libraries of prototype objects that act similarly to classes. Scala [17] is an object-functional programming and scripting language for general software applications and is statically typed. Scala includes full support for functional and object-oriented programming. Many of its features are akin to those of Wyvern. For example, it is pure in the sense that every value is an object; a function or method foo() can also be called as just foo, thus enforcing the uniform access principle. While Scala is quite successful, it has been criticized for its complexity. Wyvern tries to provide a practical language design with some of the same goals as Scala but with a strong emphasis on simplicity at the expense of adding features. Emerald [19] is an object-based programming language designed for building distributed applications. Like Wyvern, it is purely object-oriented, supports the uniform access principle, and does not rely on the concept of a class. However, there are significant differences. The key difference is the ultimate goals of the languages: Emerald targets distributed application overall whereas Wyvern focuses specifically on the web and mobile applications and aims at ensuring applications security properties. In addition, Emerald is a mature language and, thus, is more feature-rich while Wyvern is still at an early stage of development and, therefore, might seem as a subset of Emerald. Nevertheless, considering the difference in the goals, as Wyvern design progresses, the divergences of the features is expected to be more pronounced. JavaScript is a scripting programming language with great opportunities of code re-use via mixins, but it is dynamically typed and lacks direct support for classes and inheritance. However, its counterpart TypeScript [16], which represents a superset of JavaScript, is enhanced with static typing and class-based objectoriented paradigms. Classes in TypeScript are implemented in accordance with the upcoming ECMAScript 6 [23] standard. Neither JavaScript nor TypeScript supports the uniform access principle. Instead, objects are modeled as records, and fields can be accessed directly from outside an object without indirection via methods. Although TypeScript supports pure object-oriented interfaces, types generated from classes are branded, and, when these types are used, they interfere with interoperability between different implementations of the same interface. 6. Conclusion In this paper, we presented Wyvern, a simple, pure, value-based, statically typed object-oriented language that supports functional
8 programming and is designed for building secure web and mobile applications. We show how its foundational object-oriented core allows the introduction of more complex program structures, such as classes, and reuse mechanisms in a clean and organized manner. There are a number of potential extensions of Wyvern that remain open questions, including the following: A reuse mechanism, such as inheritance or delegation, A first-class, typed module system, Support for tags, instanceof, and pattern matching, and Support for abstract type members. 7. Acknowledgements We are grateful to Du Li, Cyrus Omar, and the workshop reviewers for their valuable feedback on this paper. This research was supported in part by the Swiss National Science Foundation through grant PBEZP , by the U.S. National Science Foundation under grant #CCF , Foundations of Permission-Based Object-Oriented Languages, and by the U.S. Department of Defense. [19] R. K. Raj, E. Tempero, H. M. Levy, A. P. Black, N. C. Hutchinson, and E. Jul. Emerald: a general-purpose programming language. Softw. Pract. Exper., 21(1):91 118, December [20] Randall B. Smith and David Ungar. Programming as an experience: the inspiration for Self. In ECOOP, volume 952, pages Springer-Verlag, [21] The Plaid Group. The Core Wyvern Language. Technical report, Carnegie Mellon University, April Available at cs.cmu.edu/~aldrich/papers/temp/core-language.pdf. [22] F. Tip, R. M. Fuhrer, A. Kieżun, M. D. Ernst, I. Balaban, and B. D. Sutter. Refactoring using type constraints. ACM Trans. Program. Lang. Syst., 33(3):9:1 9:47, May [23] Allen Wirfs-Brock. ES6 Max-min class semantics. Mozilla, Presented at TC-39 meeting, San Francisco, CA, July [24] Andrew K. Wright and Matthias Felleisen. A syntactic approach to type soundness. Inf. Comput., 115(1):38 94, November References [1] A Practical Gradual Type System For Smalltalk. cl/research/software/gradualtalk. [2] GemStone/S. [3] Squeak Smalltalk. [4] Martín Abadi and Luca Cardelli. A Theory of Objects. Springer- Verlag, [5] Jonathan Aldrich. The Power of Interoperability: Why Objects Are Inevitable, Submitted for publication. Available at [6] G. Bracha, P. von der Ahé, V. Bykov, Y. Kashai, W. Maddox, and E. Miranda. Modules as objects in newspeak. In ECOOP, pages , Berlin, Heidelberg, Springer-Verlag. [7] Gilad Bracha. The strongtalk type system for smalltalk. In OOPSLA Workshop on Extending the Smalltalk Language, [8] K. B. Bruce, L. Cardelli, and B. C. Pierce. Comparing Object Encodings. Information and Computation, 155(1 2): , [9] William R. Cook. On understanding data abstraction, revisited. SIG- PLAN Not., 44(10): , October [10] A. Diwan, K. S. McKinley, and J. E. B. Moss. Using types to analyze and optimize object-oriented programs. ACM Trans. Program. Lang. Syst., 23(1):30 72, January [11] A. Goldberg and D. Robson. Smalltalk-80: The Language and its Implementation. Addison-Wesley, [12] Robert Harper. Practical Foundations for Programming Languages. Cambridge University Press, [13] Alan C. Kay. The early history of smalltalk. SIGPLAN Not., 28(3):69 95, March [14] Donna Malayeri and Jonathan Aldrich. Is Structural Subtyping Useful? An Empirical Study. In ESOP, pages , Berlin, Heidelberg, Springer-Verlag. [15] C. Mayer, S. Hanenberg, R. Robbes, É. Tanter, and A. Stefik. An empirical study of the influence of static type systems on the usability of undocumented software. In OOPSLA, pages , New York, NY, USA, ACM. [16] Microsoft. TypeScript. [17] Martin Odersky, Lex Spoon, and Bill Venners. Programming in Scala. Artima, [18] B. C. Pierce. Types and Programming Languages. MIT Press, 2002.
Object-Oriented Software Specification in Programming Language Design and Implementation
Object-Oriented Software Specification in Programming Language Design and Implementation Barrett R. Bryant and Viswanathan Vaidyanathan Department of Computer and Information Sciences University of Alabama
Checking Access to Protected Members in the Java Virtual Machine
Checking Access to Protected Members in the Java Virtual Machine Alessandro Coglio Kestrel Institute 3260 Hillview Avenue, Palo Alto, CA 94304, USA Ph. +1-650-493-6871 Fax +1-650-424-1807 http://www.kestrel.edu/
Comp 411 Principles of Programming Languages Lecture 34 Semantics of OO Languages. Corky Cartwright Swarat Chaudhuri November 30, 20111
Comp 411 Principles of Programming Languages Lecture 34 Semantics of OO Languages Corky Cartwright Swarat Chaudhuri November 30, 20111 Overview I In OO languages, data values (except for designated non-oo
Glossary of Object Oriented Terms
Appendix E Glossary of Object Oriented Terms abstract class: A class primarily intended to define an instance, but can not be instantiated without additional methods. abstract data type: An abstraction
Overview. Elements of Programming Languages. Advanced constructs. Motivating inner class example
Overview Elements of Programming Languages Lecture 12: Object-oriented functional programming James Cheney University of Edinburgh November 6, 2015 We ve now covered: basics of functional and imperative
Object-based vs. Class-based Languages
Abstract Object-based vs. Class-based Languages Luca Cardelli Digital Equipment Corporation Systems Research Center PLDIÕ96 Tutorial Class-based object-oriented programming languages take object generators
Chapter 1. Dr. Chris Irwin Davis Email: [email protected] Phone: (972) 883-3574 Office: ECSS 4.705. CS-4337 Organization of Programming Languages
Chapter 1 CS-4337 Organization of Programming Languages Dr. Chris Irwin Davis Email: [email protected] Phone: (972) 883-3574 Office: ECSS 4.705 Chapter 1 Topics Reasons for Studying Concepts of Programming
Chapter 7: Functional Programming Languages
Chapter 7: Functional Programming Languages Aarne Ranta Slides for the book Implementing Programming Languages. An Introduction to Compilers and Interpreters, College Publications, 2012. Fun: a language
THE IMPACT OF INHERITANCE ON SECURITY IN OBJECT-ORIENTED DATABASE SYSTEMS
THE IMPACT OF INHERITANCE ON SECURITY IN OBJECT-ORIENTED DATABASE SYSTEMS David L. Spooner Computer Science Department Rensselaer Polytechnic Institute Troy, New York 12180 The object-oriented programming
Language Evaluation Criteria. Evaluation Criteria: Readability. Evaluation Criteria: Writability. ICOM 4036 Programming Languages
ICOM 4036 Programming Languages Preliminaries Dr. Amirhossein Chinaei Dept. of Electrical & Computer Engineering UPRM Spring 2010 Language Evaluation Criteria Readability: the ease with which programs
Lecture 1: Introduction
Programming Languages Lecture 1: Introduction Benjamin J. Keller Department of Computer Science, Virginia Tech Programming Languages Lecture 1 Introduction 2 Lecture Outline Preview History of Programming
CSCI 3136 Principles of Programming Languages
CSCI 3136 Principles of Programming Languages Faculty of Computer Science Dalhousie University Winter 2013 CSCI 3136 Principles of Programming Languages Faculty of Computer Science Dalhousie University
Managing Variability in Software Architectures 1 Felix Bachmann*
Managing Variability in Software Architectures Felix Bachmann* Carnegie Bosch Institute Carnegie Mellon University Pittsburgh, Pa 523, USA [email protected] Len Bass Software Engineering Institute Carnegie
Integrating Formal Models into the Programming Languages Course
Integrating Formal Models into the Programming Languages Course Allen B. Tucker Robert E. Noonan Computer Science Department Computer Science Department Bowdoin College College of William and Mary Brunswick,
Functional Programming. Functional Programming Languages. Chapter 14. Introduction
Functional Programming Languages Chapter 14 Introduction Functional programming paradigm History Features and concepts Examples: Lisp ML 1 2 Functional Programming Functional Programming Languages The
Cedalion A Language Oriented Programming Language (Extended Abstract)
Cedalion A Language Oriented Programming Language (Extended Abstract) David H. Lorenz Boaz Rosenan The Open University of Israel Abstract Implementations of language oriented programming (LOP) are typically
1.1 WHAT IS A PROGRAMMING LANGUAGE?
1 INTRODUCTION 1.1 What is a Programming Language? 1.2 Abstractions in Programming Languages 1.3 Computational Paradigms 1.4 Language Definition 1.5 Language Translation 1.6 Language Design How we communicate
Evolution of the Major Programming Languages
142 Evolution of the Major Programming Languages Object Oriented Programming: Smalltalk Object-Oriented: It s fundamental characteristics are: Data abstraction, Inheritance and Dynamic Binding. The essence
Evaluating a new programming language
In G. Kadoda (Ed). Proc. PPIG 13 Pages 275-289 Evaluating a new programming language Steven Clarke Microsoft Corporation 1 Microsoft Way Redmond, WA 98052 USA +1 425 705 5978 [email protected] Keywords:
Programming Language Concepts for Software Developers
Programming Language Concepts for Software Developers Peter Sestoft IT University of Copenhagen, Denmark [email protected] Abstract This note describes and motivates our current plans for an undergraduate
Programming Languages
Programming Languages Qing Yi Course web site: www.cs.utsa.edu/~qingyi/cs3723 cs3723 1 A little about myself Qing Yi Ph.D. Rice University, USA. Assistant Professor, Department of Computer Science Office:
The Rules 1. One level of indentation per method 2. Don t use the ELSE keyword 3. Wrap all primitives and Strings
Object Calisthenics 9 steps to better software design today, by Jeff Bay http://www.xpteam.com/jeff/writings/objectcalisthenics.rtf http://www.pragprog.com/titles/twa/thoughtworks-anthology We ve all seen
The Learning Psychology of Visual Programming for Object-Orientation
125 The Learning Psychology of Visual Programming for Object-Orientation Mark Ireland, Roger Stone and Ray Dawson Department of Computer Studies Loughborough University of Technology Loughborough, Leicestershire,
Embedded Software Development with MPS
Embedded Software Development with MPS Markus Voelter independent/itemis The Limitations of C and Modeling Tools Embedded software is usually implemented in C. The language is relatively close to the hardware,
CSE 307: Principles of Programming Languages
Course Organization Introduction CSE 307: Principles of Programming Languages Spring 2015 R. Sekar Course Organization Introduction 1 / 34 Topics 1. Course Organization Info and Support Course Description
Chapter 5 Names, Bindings, Type Checking, and Scopes
Chapter 5 Names, Bindings, Type Checking, and Scopes Chapter 5 Topics Introduction Names Variables The Concept of Binding Type Checking Strong Typing Scope Scope and Lifetime Referencing Environments Named
Pluggable Type Systems. Gilad Bracha
Pluggable Type Systems Gilad Bracha The Paradox of Type Systems Type systems help reliability and security by mechanically proving program properties Type systems hurt reliability and security by making
The Smalltalk Programming Language. Beatrice Åkerblom [email protected]
The Smalltalk Programming Language Beatrice Åkerblom [email protected] 'The best way to predict the future is to invent it' - Alan Kay. History of Smalltalk Influenced by Lisp and Simula Object-oriented
New Generation of Software Development
New Generation of Software Development Terry Hon University of British Columbia 201-2366 Main Mall Vancouver B.C. V6T 1Z4 [email protected] ABSTRACT In this paper, I present a picture of what software development
Moving from CS 61A Scheme to CS 61B Java
Moving from CS 61A Scheme to CS 61B Java Introduction Java is an object-oriented language. This document describes some of the differences between object-oriented programming in Scheme (which we hope you
Integrating Typed and Untyped Code in a Scripting Language
Integrating Typed and Untyped Code in a Scripting Language Tobias Wrigstad Francesco Zappa Nardelli Sylvain Lebresne Johan Östlund Jan Vitek PURDUE UNIVERSITY INRIA Abstract Many large software systems
Data Abstraction and Hierarchy
Data Abstraction and Hierarchy * This research was supported by the NEC Professorship of Software Science and Engineering. Barbara Liskov Affiliation: MIT Laboratory for Computer Science Cambridge, MA,
1/20/2016 INTRODUCTION
INTRODUCTION 1 Programming languages have common concepts that are seen in all languages This course will discuss and illustrate these common concepts: Syntax Names Types Semantics Memory Management We
Language with a Pluggable Type System and Optional Runtime Monitoring of Type Errors
Language with a Pluggable Type System and Optional Runtime Monitoring of Type Errors Jukka Lehtosalo and David J. Greaves University of Cambridge Computer Laboratory [email protected] Abstract.
What is a programming language?
Overview Introduction Motivation Why study programming languages? Some key concepts What is a programming language? Artificial language" Computers" Programs" Syntax" Semantics" What is a programming language?...there
1 Introduction. 2 An Interpreter. 2.1 Handling Source Code
1 Introduction The purpose of this assignment is to write an interpreter for a small subset of the Lisp programming language. The interpreter should be able to perform simple arithmetic and comparisons
Organization of Programming Languages CS320/520N. Lecture 05. Razvan C. Bunescu School of Electrical Engineering and Computer Science bunescu@ohio.
Organization of Programming Languages CS320/520N Razvan C. Bunescu School of Electrical Engineering and Computer Science [email protected] Names, Bindings, and Scopes A name is a symbolic identifier used
Language Based Virtual Machines... or why speed matters. by Lars Bak, Google Inc
Language Based Virtual Machines... or why speed matters by Lars Bak, Google Inc Agenda Motivation for virtual machines HotSpot V8 Dart What I ve learned Background 25+ years optimizing implementations
Semester Review. CSC 301, Fall 2015
Semester Review CSC 301, Fall 2015 Programming Language Classes There are many different programming language classes, but four classes or paradigms stand out:! Imperative Languages! assignment and iteration!
Run-time Variability Issues in Software Product Lines
Run-time Variability Issues in Software Product Lines Alexandre Bragança 1 and Ricardo J. Machado 2 1 Dep. I&D, I2S Informática Sistemas e Serviços SA, Porto, Portugal, [email protected] 2 Dep.
Parametric Domain-theoretic models of Linear Abadi & Plotkin Logic
Parametric Domain-theoretic models of Linear Abadi & Plotkin Logic Lars Birkedal Rasmus Ejlers Møgelberg Rasmus Lerchedahl Petersen IT University Technical Report Series TR-00-7 ISSN 600 600 February 00
[Refer Slide Time: 05:10]
Principles of Programming Languages Prof: S. Arun Kumar Department of Computer Science and Engineering Indian Institute of Technology Delhi Lecture no 7 Lecture Title: Syntactic Classes Welcome to lecture
Tutorial on Writing Modular Programs in Scala
Tutorial on Writing Modular Programs in Scala Martin Odersky and Gilles Dubochet 13 September 2006 Tutorial on Writing Modular Programs in Scala Martin Odersky and Gilles Dubochet 1 of 45 Welcome to the
Configuration Management
83 Chapter 6 Configuration Management Published as: Configuration Management in Component Based Product Populations, Rob van Ommering, 10th International Workshop on Software Configuration Management,
Object Oriented Database Management System for Decision Support System.
International Refereed Journal of Engineering and Science (IRJES) ISSN (Online) 2319-183X, (Print) 2319-1821 Volume 3, Issue 6 (June 2014), PP.55-59 Object Oriented Database Management System for Decision
Compilers. Introduction to Compilers. Lecture 1. Spring term. Mick O Donnell: [email protected] Alfonso Ortega: alfonso.ortega@uam.
Compilers Spring term Mick O Donnell: [email protected] Alfonso Ortega: [email protected] Lecture 1 to Compilers 1 Topic 1: What is a Compiler? 3 What is a Compiler? A compiler is a computer
On the Design of an Object Oriented Programming Language
On the Design of an Object Oriented Programming Language Mokua Richard MSc, Dept. of Computing, ICSIT, JKUAT, Kenya ABSTRACT: This paper presents work done to address two issues of interest to both Programming
Advanced compiler construction. General course information. Teacher & assistant. Course goals. Evaluation. Grading scheme. Michel Schinz 2007 03 16
Advanced compiler construction Michel Schinz 2007 03 16 General course information Teacher & assistant Course goals Teacher: Michel Schinz [email protected] Assistant: Iulian Dragos INR 321, 368 64
CHAPTER 7 GENERAL PROOF SYSTEMS
CHAPTER 7 GENERAL PROOF SYSTEMS 1 Introduction Proof systems are built to prove statements. They can be thought as an inference machine with special statements, called provable statements, or sometimes
Generating Aspect Code from UML Models
Generating Aspect Code from UML Models Iris Groher Siemens AG, CT SE 2 Otto-Hahn-Ring 6 81739 Munich, Germany [email protected] Stefan Schulze Siemens AG, CT SE 2 Otto-Hahn-Ring 6 81739 Munich,
The gradual typing approach to mixing static and dynamic typing
1/38 The gradual typing approach to mixing static and dynamic typing Jeremy G. Siek University of Colorado =) Indiana University TFP 2013 at Provo, Utah, May 2013 The Goals of Gradual Typing I Enjoy the
Functional Programming
FP 2005 1.1 3 Functional Programming WOLFRAM KAHL [email protected] Department of Computing and Software McMaster University FP 2005 1.2 4 What Kinds of Programming Languages are There? Imperative telling
Principles of Programming Languages Topic: Introduction Professor Louis Steinberg
Principles of Programming Languages Topic: Introduction Professor Louis Steinberg CS 314, LS,LTM: L1: Introduction 1 Contacts Prof. Louis Steinberg lou @ cs.rutgers.edu x5-3581 401 Hill TA: to be announced
Programming Languages Featherweight Java David Walker
Programming Languages Featherweight Java David Walker Overview Featherweight Java (FJ), a minimal Javalike language. Models inheritance and subtyping. Immutable objects: no mutation of fields. Trivialized
CSE 373: Data Structure & Algorithms Lecture 25: Programming Languages. Nicki Dell Spring 2014
CSE 373: Data Structure & Algorithms Lecture 25: Programming Languages Nicki Dell Spring 2014 What is a Programming Language? A set of symbols and associated tools that translate (if necessary) collections
RUnit - A Unit Test Framework for R
RUnit - A Unit Test Framework for R Thomas König, Klaus Jünemann, and Matthias Burger Epigenomics AG November 5, 2015 Contents 1 Introduction 2 2 The RUnit package 4 2.1 Test case execution........................
Programming Language Pragmatics
Programming Language Pragmatics THIRD EDITION Michael L. Scott Department of Computer Science University of Rochester ^ШШШШШ AMSTERDAM BOSTON HEIDELBERG LONDON, '-*i» ЩЛ< ^ ' m H NEW YORK «OXFORD «PARIS»SAN
Component Based Software Engineering: A Broad Based Model is Needed
Component Based Software Engineering: A Broad Based Model is Needed Allen Parrish ([email protected]) Brandon Dixon ([email protected]) David Hale ([email protected]) Department of Computer Science
Software quality improvement via pattern matching
Software quality improvement via pattern matching Radu Kopetz and Pierre-Etienne Moreau INRIA & LORIA {Radu.Kopetz, [email protected] Abstract. Nested if-then-else statements is the most common
Patterns in. Lecture 2 GoF Design Patterns Creational. Sharif University of Technology. Department of Computer Engineering
Patterns in Software Engineering Lecturer: Raman Ramsin Lecture 2 GoF Design Patterns Creational 1 GoF Design Patterns Principles Emphasis on flexibility and reuse through decoupling of classes. The underlying
TypeScript. Language Specification. Version 1.4
TypeScript Language Specification Version 1.4 October, 2014 Microsoft is making this Specification available under the Open Web Foundation Final Specification Agreement Version 1.0 ("OWF 1.0") as of October
Keywords: Regression testing, database applications, and impact analysis. Abstract. 1 Introduction
Regression Testing of Database Applications Bassel Daou, Ramzi A. Haraty, Nash at Mansour Lebanese American University P.O. Box 13-5053 Beirut, Lebanon Email: rharaty, [email protected] Keywords: Regression
Parsing Technology and its role in Legacy Modernization. A Metaware White Paper
Parsing Technology and its role in Legacy Modernization A Metaware White Paper 1 INTRODUCTION In the two last decades there has been an explosion of interest in software tools that can automate key tasks
A Meeting Room Scheduling Problem
A Scheduling Problem Objective Engineering, Inc. 699 Windsong Trail Austin, Texas 78746 512-328-9658 FAX: 512-328-9661 [email protected] http://www.oeng.com Objective Engineering, Inc., 1999-2007. Photocopying,
Why Do Developers Neglect Exception Handling?
Why Do Developers Neglect Exception Handling? Hina Shah, Carsten Görg, Mary Jean Harrold College of Computing, Georgia Institute of Technology, Atlanta, Georgia, U.S.A. {hinashah,goerg,harrold}@cc.gatech.edu
A Unified Messaging-Based Architectural Pattern for Building Scalable Enterprise Service Bus
A Unified Messaging-Based Architectural Pattern for Building Scalable Enterprise Service Bus Karim M. Mahmoud 1,2 1 IBM, Egypt Branch Pyramids Heights Office Park, Giza, Egypt [email protected] 2 Computer
Enterprise Integration: operational models of business processes and workflow systems *
Enterprise Integration: operational models of business processes and workflow systems. 1 Enterprise Integration: operational models of business processes and workflow systems * G.Bruno 1, C.Reyneri 2 and
REST Client Pattern. [Draft] Bhim P. Upadhyaya ABSTRACT
REST Client Pattern [Draft] Bhim P. Upadhyaya EqualInformation Chicago, USA [email protected] ABSTRACT Service oriented architecture (SOA) is a common architectural practice in large enterprises. There
JavaScript Patterns. Stoyan Stefanov. O'REILLY' Beijing Cambridge Farnham Koln Sebastopol Tokyo
JavaScript Patterns Stoyan Stefanov O'REILLY' Beijing Cambridge Farnham Koln Sebastopol Tokyo Table of Contents Preface xi 1. Introduction 1 Patterns 1 JavaScript: Concepts 3 Object-Oriented 3 No Classes
Objects for lexical analysis
Rochester Institute of Technology RIT Scholar Works Articles 2002 Objects for lexical analysis Bernd Kuhl Axel-Tobias Schreiner Follow this and additional works at: http://scholarworks.rit.edu/article
Resurrecting Ada s Rendez-Vous in Java
Resurrecting Ada s Rendez-Vous in Java Luis Mateu, José M. Piquer and Juan León DCC - Universidad de Chile Casilla 2777, Santiago, Chile [email protected] Abstract Java is a programming language designed
Syntax Check of Embedded SQL in C++ with Proto
Proceedings of the 8 th International Conference on Applied Informatics Eger, Hungary, January 27 30, 2010. Vol. 2. pp. 383 390. Syntax Check of Embedded SQL in C++ with Proto Zalán Szűgyi, Zoltán Porkoláb
Integration of Application Business Logic and Business Rules with DSL and AOP
Integration of Application Business Logic and Business Rules with DSL and AOP Bogumiła Hnatkowska and Krzysztof Kasprzyk Wroclaw University of Technology, Wyb. Wyspianskiego 27 50-370 Wroclaw, Poland [email protected]
Lecture 9. Semantic Analysis Scoping and Symbol Table
Lecture 9. Semantic Analysis Scoping and Symbol Table Wei Le 2015.10 Outline Semantic analysis Scoping The Role of Symbol Table Implementing a Symbol Table Semantic Analysis Parser builds abstract syntax
Research Topics in Software Composition
Research Topics in Software Composition 1 Oscar Nierstrasz University of Berne 2 Abstract. Traditional software development approaches do not cope well with the evolving requirements of open systems. We
Ruby in the context of scientific computing
Ruby in the context of scientific computing 16 January 2014 1/24 Overview Introduction Characteristics and Features Closures Ruby and Scientific Computing SciRuby Bioruby Conclusion References 2/24 Introduction
Abstraction in Computer Science & Software Engineering: A Pedagogical Perspective
Orit Hazzan's Column Abstraction in Computer Science & Software Engineering: A Pedagogical Perspective This column is coauthored with Jeff Kramer, Department of Computing, Imperial College, London ABSTRACT
Functional Decomposition Top-Down Development
Functional Decomposition Top-Down Development The top-down approach builds a system by stepwise refinement, starting with a definition of its abstract function. You start the process by expressing a topmost
Dsc+Mock: A Test Case + Mock Class Generator in Support of Coding Against Interfaces
Dsc+Mock: A Test Case + Mock Class Generator in Support of Coding Against Interfaces Mainul Islam, Christoph Csallner Computer Science and Engineering Department University of Texas at Arlington Arlington,
A Framework for the Semantics of Behavioral Contracts
A Framework for the Semantics of Behavioral Contracts Ashley McNeile Metamaxim Ltd, 48 Brunswick Gardens, London W8 4AN, UK [email protected] Abstract. Contracts have proved a powerful concept
Complexities of Simulating a Hybrid Agent-Landscape Model Using Multi-Formalism
Complexities of Simulating a Hybrid Agent-Landscape Model Using Multi-Formalism Composability Gary R. Mayer [email protected] Hessam S. Sarjoughian [email protected] Arizona Center for Integrative Modeling
CSCE 314 Programming Languages
CSCE 314 Programming Languages Introduction and Course Administration Dr. Hyunyoung Lee [email protected] 410B HR Bright 979-845-2490 1 CSCE 314: Programming Languages Course Homepage http://faculty.cse.tamu.edu/hlee/csce314/
Design Patterns in Parsing
Abstract Axel T. Schreiner Department of Computer Science Rochester Institute of Technology 102 Lomb Memorial Drive Rochester NY 14623-5608 USA [email protected] Design Patterns in Parsing James E. Heliotis
Programming Languages CIS 443
Course Objectives Programming Languages CIS 443 0.1 Lexical analysis Syntax Semantics Functional programming Variable lifetime and scoping Parameter passing Object-oriented programming Continuations Exception
