150 research outputs found
The C Object System: Using C as a High-Level Object-Oriented Language
The C Object System (Cos) is a small C library which implements high-level
concepts available in Clos, Objc and other object-oriented programming
languages: uniform object model (class, meta-class and property-metaclass),
generic functions, multi-methods, delegation, properties, exceptions, contracts
and closures. Cos relies on the programmable capabilities of the C programming
language to extend its syntax and to implement the aforementioned concepts as
first-class objects. Cos aims at satisfying several general principles like
simplicity, extensibility, reusability, efficiency and portability which are
rarely met in a single programming language. Its design is tuned to provide
efficient and portable implementation of message multi-dispatch and message
multi-forwarding which are the heart of code extensibility and reusability.
With COS features in hand, software should become as flexible and extensible as
with scripting languages and as efficient and portable as expected with C
programming. Likewise, Cos concepts should significantly simplify adaptive and
aspect-oriented programming as well as distributed and service-oriented
computingComment: 18
Run-time type information and incremental loading in C++
"September 1993."Includes bibliographical references (p. 15).Supported by the Productivity From Information Technology (PROFIT) Research Initiative at MIT.Murali Vemulapati, Sriram Duvvuru, Amar Gupta
Model-Driven Development of Aspect-Oriented Software Architectures
The work presented in this thesis of master is an approach that takes advantage of the Model-Driven Development approach for developing aspect-oriented software architectures. A complete MDD support for the PRISMA approach is defined by providing code generation, verification and reusability properties.PĂ©rez BenedĂ, J. (2007). Model-Driven Development of Aspect-Oriented Software Architectures. http://hdl.handle.net/10251/12451Archivo delegad
Dynamically typed languages
Dynamically typed languages such as Python and Ruby have experienced a rapid grown in popularity in recent times. However, there is much confusion as to what makes these languages interesting relative to statically typed languages, and little knowledge of their rich history. In this chapter I explore the general topic of dynamically typed languages, how they differ from statically typed languages, their history, and their defining features
Can Programming be Liberated from the Two-Level Style? Multi-Level Programming with DeepJava
Since the introduction of object-oriented programming few programming languages have attempted to provide programmers with more than objects and classes, i.e., more than two levels. Those that did, almost exclusively aimed at describing language propertiesâi.e., their metaclasses exert linguistic control on language concepts and mechanismsâ often in order to make the language extensible. In terms of supporting logical domain classification levels, however, they are still limited to two levels. In this paper we conservatively extend the object-oriented programming paradigm to feature an unbounded number of domain classification levels. We can therefore avoid the introduction of accidental complexity into programs caused by accommodating multiple domain levels within only two programming levels. We present a corresponding language design featuring âdeep instantiation â and demonstrate its features with a running example. Finally, we outline the implementation of our compiler prototype and discuss the potentials of further developing our language design
A new modular implementation for Stateful Traits
International audienceThe term traits is overloaded in the literature. In this work we refer to traits as the stateless model and implementation described in Schaerli et al. articles. Traits provide a flexible way to support multiple inheritance code reuse in the context of a single inheritance language. The Pharo programming language includes the second implementation of stateless traits based on the original version of Schaerli's one. Even if it is the second iteration of such an implementation, it presents several limitations. First, it does not support state in traits. Second, its implementation is monolithic i.e., it is deeply coupled with the rest of the language kernel: it cannot be loaded nor unloaded. Furthermore, trait support impacts all classes, even classes not using traits. In addition, while the development tools include full support to work with classes, trait support is more limited because classes and traits do not present the same Metaobject Protocol (MOP). Finally, being monolithic and integrated in the language kernel, it is difficult to extend this current implementation. This article describes a new modular and extensible implementation of traits: it is easily loadable and unloadable as any other package. In addition, classes not using traits are not impacted. Finally, this new implementation includes a new and carefully designed Metaobject Protocol (MOP) that is compatible with both classes and traits. This allows one to reuse existing tools as they do not require special support for traits. Then, following the semantics proposed for stateful traits in [BDNW07], we present a new implementation of stateful traits. This implementation is an extension of our new modular implementation. We implemented modular traits using specialized metaclasses as our main language extension mechanism. By replacing the implementation we reduced the Pharo Language Kernel size by 15%. This model and implementation are used in production since Pharo7.0 (January 2019)
Creating and Maintaining Consistent Documents with Elucidative Development
Software systems usually consist of multiple artefacts, such as requirements, class diagrams, or source code. Documents, such as specifications and documentation, can also be viewed as artefacts. In practice, however, writing and updating documents is often neglected because it is expensive and brings no immediate benefit. Consequently, documents are often outdated and communicate wrong information about the software. The price is paid later when a software system must be maintained and much implicit knowledge that existed at the time of the original development has been lost.
A simple way to keep documents up to date is generation. However, not all documents can be fully generated. Usually, at least some content must be written by a human author. This handwritten content is lost if the documents must be regenerated.
In this thesis, Elucidative Development is introduced. It is an approach to create documents by partial generation. Partial generation means that some parts of the document are generated whereas others are handwritten. Elucidative Development retains manually written content when the document is regenerated. An integral part of Elucidative Development is a guidance system, which informs the author about changes in the generated content and helps him update the handwritten content.:1 Introduction
1.1 Contributions
1.2 Scope of the Thesis
1.3 Organisation
2 Problem Analysis and Solution Outline
2.1 Redundancy and Inconsistency
2.2 Improving Consistency with Partial Generation
2.3 Conclusion
3 Background
3.1 Grammar-Based Modularisation
3.2 Model-Driven Software Development
3.3 Round-Trip Engineering
3.4 Conclusion
4 Elucidative Development
4.1 General Idea and Running Example
4.2 Requirements of Elucidative Development
4.3 Structure and Basic Concepts of Elucidative Documents
4.4 Presentation Layer
4.5 Guidance
4.6 Conclusion
5 Model-Driven Elucidative Development
5.1 General Idea and Running Example
5.2 Requirements of Model-Driven Elucidative Development
5.3 Structure and Basic Concepts of Elucidative Documents in Model-Driven Elucidative Development
5.4 Guidance
5.5 Conclusion
6 Extensions of Elucidative Development
6.1 Validating XML-based Elucidative Documents
6.2 Backpropagation-Based Round-Trip Engineering for Computed Text Document Fragments
6.3 Conclusion
7 Tool Support for an Elucidative Development Environment
7.1 Managing Active References
7.2 Inserting Computed Document Fragments
7.3 Caching the Computed Document Fragments
7.4 Elucidative Document Validation with Schemas
7.5 Conclusion
8 Related Work
8.1 Related Documentation Approaches
8.2 Consistency Approaches
8.3 Compound Documents
8.4 Conclusion
9 Evaluation
9.1 Creating and Maintaining the Cool Component Specification
9.2 Creating and Maintaining the UML Specification
9.3 Feasibility Studies
9.4 Conclusion
10 ConclusionSoftwaresysteme setzen sich ĂŒblicherweise aus vielen verschiedenen Artefakten zusammen, zum Beispiel Anforderungen, Klassendiagrammen oder Quellcode. Dokumente, wie zum Beispiel Spezifikationen oder Dokumentation, können auch als Artefakte betrachtet werden. In der Praxis wird aber das Schreiben und Aktualisieren von Dokumenten oft vernachlĂ€ssigt, weil es zum einen teuer ist und zum anderen keinen unmittelbaren Vorteil bringt. Dokumente sind darum hĂ€ufig veraltet und vermitteln falsche Informationen ĂŒber die Software. Den Preis muss man spĂ€ter zahlen, wenn die Software gepflegt wird, weil viel von dem impliziten Wissen, das zur Zeit der Entwicklung existierte, verloren ist.
Eine einfache Möglichkeit, Dokumente aktuell zu halten, ist Generierung. Allerdings können nicht alle Dokumente generiert werden. Meist muss wenigstens ein Teil von einem Menschen geschrieben werden. Dieser handgeschriebene Inhalt geht verloren, wenn das Dokument neu generiert werden muss.
In dieser Arbeit wird das Elucidative Development vorgestellt. Dabei handelt es sich um einen Ansatz zur Dokumenterzeugung mittels partieller Generierung. Das bedeutet, dass Teile eines Dokuments generiert werden und der Rest von Hand ergĂ€nzt wird. Beim Elucidative Development bleibt der handgeschriebene Inhalt bestehen, wenn das restliche Dokument neu generiert wird. Ein integraler Bestandteil von Elucidative Development ist darĂŒber hinaus ein Hilfesystem, das den Autor ĂŒber Ănderungen an generiertem Inhalt informiert und ihm hilft, den handgeschriebenen Inhalt zu aktualisieren.:1 Introduction
1.1 Contributions
1.2 Scope of the Thesis
1.3 Organisation
2 Problem Analysis and Solution Outline
2.1 Redundancy and Inconsistency
2.2 Improving Consistency with Partial Generation
2.3 Conclusion
3 Background
3.1 Grammar-Based Modularisation
3.2 Model-Driven Software Development
3.3 Round-Trip Engineering
3.4 Conclusion
4 Elucidative Development
4.1 General Idea and Running Example
4.2 Requirements of Elucidative Development
4.3 Structure and Basic Concepts of Elucidative Documents
4.4 Presentation Layer
4.5 Guidance
4.6 Conclusion
5 Model-Driven Elucidative Development
5.1 General Idea and Running Example
5.2 Requirements of Model-Driven Elucidative Development
5.3 Structure and Basic Concepts of Elucidative Documents in Model-Driven Elucidative Development
5.4 Guidance
5.5 Conclusion
6 Extensions of Elucidative Development
6.1 Validating XML-based Elucidative Documents
6.2 Backpropagation-Based Round-Trip Engineering for Computed Text Document Fragments
6.3 Conclusion
7 Tool Support for an Elucidative Development Environment
7.1 Managing Active References
7.2 Inserting Computed Document Fragments
7.3 Caching the Computed Document Fragments
7.4 Elucidative Document Validation with Schemas
7.5 Conclusion
8 Related Work
8.1 Related Documentation Approaches
8.2 Consistency Approaches
8.3 Compound Documents
8.4 Conclusion
9 Evaluation
9.1 Creating and Maintaining the Cool Component Specification
9.2 Creating and Maintaining the UML Specification
9.3 Feasibility Studies
9.4 Conclusion
10 Conclusio
Squeak by Example
Squeak by Example, intended for both students and developers, will guide you gently through the Squeak language and environment by means of a series of examples and exercises. This book is made available under the Creative Commons Attribution-ShareAlike 3.0 license
- âŠ