TY - BOOK A1 - Schreiber, Robin A1 - Krahn, Robert A1 - Ingalls, Daniel H. H. A1 - Hirschfeld, Robert T1 - Transmorphic T1 - Transmorphic BT - mapping direct manipulation to source code transformations BT - Abbilden von direkter Manipulation zu Transformationen im Programmtext N2 - Defining Graphical User Interfaces (GUIs) through functional abstractions can reduce the complexity that arises from mutable abstractions. Recent examples, such as Facebook's React GUI framework have shown, how modelling the view as a functional projection from the application state to a visual representation can reduce the number of interacting objects and thus help to improve the reliabiliy of the system. This however comes at the price of a more rigid, functional framework where programmers are forced to express visual entities with functional abstractions, detached from the way one intuitively thinks about the physical world. In contrast to that, the GUI Framework Morphic allows interactions in the graphical domain, such as grabbing, dragging or resizing of elements to evolve an application at runtime, providing liveness and directness in the development workflow. Modelling each visual entity through mutable abstractions however makes it difficult to ensure correctness when GUIs start to grow more complex. Furthermore, by evolving morphs at runtime through direct manipulation we diverge more and more from the symbolic description that corresponds to the morph. Given that both of these approaches have their merits and problems, is there a way to combine them in a meaningful way that preserves their respective benefits? As a solution for this problem, we propose to lift Morphic's concept of direct manipulation from the mutation of state to the transformation of source code. In particular, we will explore the design, implementation and integration of a bidirectional mapping between the graphical representation and a functional and declarative symbolic description of a graphical user interface within a self hosted development environment. We will present Transmorphic, a functional take on the Morphic GUI Framework, where the visual and structural properties of morphs are defined in a purely functional, declarative fashion. In Transmorphic, the developer is able to assemble different morphs at runtime through direct manipulation which is automatically translated into changes in the code of the application. In this way, the comprehensiveness and predictability of direct manipulation can be used in the context of a purely functional GUI, while the effects of the manipulation are reflected in a medium that is always in reach for the programmer and can even be used to incorporate the source transformations into the source files of the application. N2 - Das Definieren von graphischen Benutzeroberflächen mittels funktionaler Abstraktionen, kann die Komplexität der Verwaltung des Zustandes der Anwendung erheblich reduzieren. Aktuelle Beispiele, wie Facebook's Framework *React*, zeigen auf, wie das modellieren der visuellen Schnittstelle als eine funktionale Projektion vom Zustand der Anwendung zur graphischen Repräsentation, die Anzahl der agierenden Objekte erheblich reduzieren und so die Verlässlichkeit des Systems erhöhen kann. Der Preis für die so erreichte Stabilität, ist eine relativ statische graphische Repräsentation, die sich zur Laufzeit nicht dynamisch anpassen lässt und in der jede visuelle Entität nur mittles funktionaler Abstraktionen beschrieben werden kann, was nicht unserem intuitiven Verständnis der Welt entspricht. Im Gegensatz dazu, erlaubt das Rahmenwerk Morphic mittles Interaktionen wie Ziehen, Greifen oder Skalieren von visuellen Elementen, die grahische Darstellung der Anwendung zur Laufzeit in einer unmittelbaren ("live") und direkten Art und Weise weiter zu entwickeln. Um diese Flexibilität zu erreichen, modelliert Morphic allerdings jedes graphische Objekt mittels veränderlichem Zustand, was das Garantieren der Fehlerfreiheit von graphischen Oberfläche, insbesondere bei sehr komplexen Schnittstellen, deutlich erschwehrt. Hinzu kommt, dass die dynamischen Anpassungen zur Laufzeit dazu führen, dass sich die Oberfläche mehr und mehr von ihrer ursprünglichen symbolischen Definition entfernt, da Morphic von selbst die Änderungen in der Laufzeit nicht im Quellcode reflektieren kann. Die Frage ist also ob es eine Kombination beider Ansätze gibt, welche es vermag die Vorteile zu erhalten und Nachteile wenn möglich auszugleichen. Als Lösung für dieses Problem schlagen wir vor das Konzept der direkten Manipulation aus Morphic auf Transformationen im Quellcode zu übertragen. Hierfür werden wir das Design, die Implementierung und Integration einer bidirektionalen Abbildung zwischen graphischer Darstellung und einer funktionalen, deklarativen symbolischen Beschreibung in einer selbsterhaltenden Entwicklungsumgebung erörtern. Wir werden Transmorphic vorstellen, eine funktionale Variante des Morphic Frameworks, in der visuelle und strukturelle Eigenschaften in einer strikt funktionalen und daher deklarativen Art und Weise definiert werden. Innerhalb von Transmorphic hat der Entwickler die Möglichkeit verschieden Morphs zur Laufzeit mittels direkter Manipulation zusammenzusetzen, was direkt zu Änderungen im Quellcode der Anwendung übersetzt wird. Auf diese Weise kann die verständliche und nachvollziehbare direkte Interaktion aus Morphic, im Kontext einer vollständig funktional beschriebenen graphischen Benutzeroberfläche verwendet werden. T3 - Technische Berichte des Hasso-Plattner-Instituts für Digital Engineering an der Universität Potsdam - 110 KW - functional programming KW - morphic KW - functional lenses KW - direct manipulation KW - synchronization KW - FRP KW - reactive KW - immutable values KW - live programming KW - funktionale Programmierung KW - Morphic KW - Functional Lenses KW - direkte Manipulation KW - Synchronisation KW - FRP KW - reaktive Programmierung KW - Unveränderlichkeit KW - Live-Programmierung Y1 - 2016 U6 - http://nbn-resolving.de/urn/resolver.pl?urn:nbn:de:kobv:517-opus4-98300 SN - 978-3-86956-387-9 SN - 1613-5652 SN - 2191-1665 IS - 110 PB - Universitätsverlag Potsdam CY - Potsdam ER - TY - JOUR A1 - Rein, Patrick A1 - Ramson, Stefan A1 - Lincke, Jens A1 - Felgentreff, Tim A1 - Hirschfeld, Robert T1 - Group-Based Behavior Adaptation Mechanisms in Object-Oriented Systems JF - IEEE software N2 - Dynamic and distributed systems require behavior adaptations for groups of objects. Group-based behavior adaptation mechanisms scope adaptations to objects matching conditions beyond class membership. The specification of groups can be explicit or implicit. KW - group-based behavior adaptation KW - lively groups KW - ContextErlang KW - entity-component-system KW - predicated generic functions KW - active layers KW - reactive object queries KW - context groups KW - implied methods KW - object-oriented languages KW - software engineering KW - software development KW - contextual-variability modeling Y1 - 2017 U6 - https://doi.org/10.1109/MS.2017.4121224 SN - 0740-7459 SN - 1937-4194 VL - 34 IS - 6 SP - 78 EP - 82 PB - Inst. of Electr. and Electronics Engineers CY - Los Alamitos ER - TY - JOUR A1 - Hirschfeld, Robert A1 - Kawarnura, Katsuya T1 - Dynamic service adaptation JF - Software : practice & experience N2 - Change can be observed in our environment and in the technology we build. While changes in the environment happen continuously and implicitly, our technology has to be kept in sync with the changing world around it. Although we can prepare for some of the changes for most of them we cannot. This is especially true for next-generation mobile communication systems that are expected to support the creation of a ubiquitous society where virtually everything is connected and made available within an organic information network. Resources will frequently join or leave the network, new types of media or new combinations of existing types will be used to interact and cooperate, and services will be tailored to preferences and needs of individual customers to better meet their needs. This paper outlines our research in the area of dynamic service adaptation to provide concepts and technologies allowing for such environments. Copyright (C) 2006 John Wiley & Sons, Ltd. KW - dynamic service adaptation KW - DSA KW - aspect-oriented programming KW - dynamic AOP Y1 - 2006 U6 - https://doi.org/10.1002/spe.766 SN - 0038-0644 SN - 1097-024X VL - 36 IS - 11-12 SP - 1115 EP - 1131 PB - Wiley CY - Chichester ER - TY - JOUR A1 - Mattis, Toni A1 - Beckmann, Tom A1 - Rein, Patrick A1 - Hirschfeld, Robert T1 - First-class concepts BT - Reified architectural knowledge beyond dominant decompositions JF - Journal of object technology : JOT / ETH Zürich, Department of Computer Science N2 - Ideally, programs are partitioned into independently maintainable and understandable modules. As a system grows, its architecture gradually loses the capability to accommodate new concepts in a modular way. While refactoring is expensive and not always possible, and the programming language might lack dedicated primary language constructs to express certain cross-cutting concerns, programmers are still able to explain and delineate convoluted concepts through secondary means: code comments, use of whitespace and arrangement of code, documentation, or communicating tacit knowledge.
Secondary constructs are easy to change and provide high flexibility in communicating cross-cutting concerns and other concepts among programmers. However, such secondary constructs usually have no reified representation that can be explored and manipulated as first-class entities through the programming environment.
In this exploratory work, we discuss novel ways to express a wide range of concepts, including cross-cutting concerns, patterns, and lifecycle artifacts independently of the dominant decomposition imposed by an existing architecture. We propose the representation of concepts as first-class objects inside the programming environment that retain the capability to change as easily as code comments. We explore new tools that allow programmers to view, navigate, and change programs based on conceptual perspectives. In a small case study, we demonstrate how such views can be created and how the programming experience changes from draining programmers' attention by stretching it across multiple modules toward focusing it on cohesively presented concepts. Our designs are geared toward facilitating multiple secondary perspectives on a system to co-exist in symbiosis with the original architecture, hence making it easier to explore, understand, and explain complex contexts and narratives that are hard or impossible to express using primary modularity constructs. KW - software engineering KW - modularity KW - exploratory programming KW - program KW - comprehension KW - remodularization KW - architecture recovery Y1 - 2022 U6 - https://doi.org/10.5381/jot.2022.21.2.a6 SN - 1660-1769 VL - 21 IS - 2 SP - 1 EP - 15 PB - ETH Zürich, Department of Computer Science CY - Zürich ER - TY - BOOK A1 - Haupt, Michael A1 - Marr, Stefan A1 - Hirschfeld, Robert T1 - CSOM/PL : a virtual machine product line N2 - CSOM/PL is a software product line (SPL) derived from applying multi-dimensional separation of concerns (MDSOC) techniques to the domain of high-level language virtual machine (VM) implementations. For CSOM/PL, we modularised CSOM, a Smalltalk VM implemented in C, using VMADL (virtual machine architecture description language). Several features of the original CSOM were encapsulated in VMADL modules and composed in various combinations. In an evaluation of our approach, we show that applying MDSOC and SPL principles to a domain as complex as that of VMs is not only feasible but beneficial, as it improves understandability, maintainability, and configurability of VM implementations without harming performance. N2 - CSOM/PL ist eine Softwareproduktfamilie (software product line, SPL), die erstellt wurde, indem Techniken der mehrdimensionalen Belangtrennung (multi-dimensional separation of concerns, MDSOC) auf die Domäne der virtuellen Maschinen (VM) für höhere Programmiersprachen angewendet wurden. Dazu wurde CSOM, eine in C implementierte Smalltalk-VM, mittels VMADL (virtual machine architecture description language) in Module zerlegt. Etliche Eigenschaften von CSOM wurden in VMADL-Module gekapselt und auf unterschiedliche Weisen komponiert. Die Auswertung des Ansatzes zeigt, dass die Anwendung von MDSOC- und SPL-Prinzipien auf die komplexe VM-Domäne nicht nur machbar ist, sondern darüber hinaus auch Vorteile mit sich bringt, da die Verständlichkeit, Wartbarkeit und Konfigurierbarkeit von VM-Implementierungen ohne Beeinträchtigung der Ausführungsgeschwindigkeit verbessert werden. T3 - Technische Berichte des Hasso-Plattner-Instituts für Digital Engineering an der Universität Potsdam - 48 KW - Virtuelle Maschinen KW - Architektur KW - Softwareproduktlinien KW - mehrdimensionale Belangtrennung KW - Virtual machines KW - architecture KW - software product lines KW - multi-dimensional separation of concerns Y1 - 2011 U6 - http://nbn-resolving.de/urn/resolver.pl?urn:nbn:de:kobv:517-opus-52332 SN - 978-3-86956-134-9 PB - Universitätsverlag Potsdam CY - Potsdam ER - TY - BOOK A1 - Calmez, Conrad A1 - Hesse, Hubert A1 - Siegmund, Benjamin A1 - Stamm, Sebastian A1 - Thomschke, Astrid A1 - Hirschfeld, Robert A1 - Ingalls, Dan A1 - Lincke, Jens T1 - Explorative authoring of Active Web content in a mobile environment N2 - Developing rich Web applications can be a complex job - especially when it comes to mobile device support. Web-based environments such as Lively Webwerkstatt can help developers implement such applications by making the development process more direct and interactive. Further the process of developing software is collaborative which creates the need that the development environment offers collaboration facilities. This report describes extensions of the webbased development environment Lively Webwerkstatt such that it can be used in a mobile environment. The extensions are collaboration mechanisms, user interface adaptations but as well event processing and performance measuring on mobile devices. N2 - Vielseitige Webanwendungen zu entwickeln kann eine komplexe Aufgabe sein - besonders wenn es die Unterstützung mobiler Geräte betrifft. Webbasierte Umgebungen wie Lively Kernel können Entwicklern helfen Webanwendungen zu entwickeln, indem sie den Entwicklungsprozess direkter und interaktiver gestalten. Zudem sind Entwicklungsprozesse von Software kollaborativ, d.h. Enwicklungsumgebungen müssen so gestaltet sein, dass sie mit kollaborativen Elementen zu unterstützen. Diese Arbeit beschreibt die Erweiterungen der webbasierten Entwicklungsumgebung Lively Webwerkstatt, so dass diese in einer mobilen Umgebung genutzt werden kann. Die Reichweite dieser Erweiterungen erstreckt sich von Kollaborationsmechanismen und Benutzerschnittstellen bis hin zu Eventbehandlung und Performanzmessungen auf mobilen Geräten. T3 - Technische Berichte des Hasso-Plattner-Instituts für Digital Engineering an der Universität Potsdam - 72 KW - Web applications KW - Mobile Application Development KW - CSCW KW - Lively Kernel Y1 - 2013 U6 - http://nbn-resolving.de/urn/resolver.pl?urn:nbn:de:kobv:517-opus-64054 SN - 978-3-86956-232-2 PB - Universitätsverlag Potsdam CY - Potsdam ER - TY - BOOK A1 - Geller, Felix A1 - Hirschfeld, Robert A1 - Bracha, Gilad T1 - Pattern Matching for an object-oriented and dynamically typed programming language N2 - Pattern matching is a well-established concept in the functional programming community. It provides the means for concisely identifying and destructuring values of interest. This enables a clean separation of data structures and respective functionality, as well as dispatching functionality based on more than a single value. Unfortunately, expressive pattern matching facilities are seldomly incorporated in present object-oriented programming languages. We present a seamless integration of pattern matching facilities in an object-oriented and dynamically typed programming language: Newspeak. We describe language extensions to improve the practicability and integrate our additions with the existing programming environment for Newspeak. This report is based on the first author’s master’s thesis. T3 - Technische Berichte des Hasso-Plattner-Instituts für Digital Engineering an der Universität Potsdam - 36 KW - Pattern Matching KW - Musterabgleich KW - Muster KW - Objekt-Orientiertes Programmieren KW - Dynamische Typ Systeme KW - Pattern Matching KW - Patterns KW - Object-Oriented Programming KW - Dynamic Type System Y1 - 2010 U6 - http://nbn-resolving.de/urn/resolver.pl?urn:nbn:de:kobv:517-opus-43035 SN - 978-3-86956-065-6 PB - Universitätsverlag Potsdam CY - Potsdam ER - TY - JOUR A1 - Perscheid, Michael A1 - Siegmund, Benjamin A1 - Taeumel, Marcel A1 - Hirschfeld, Robert T1 - Studying the advancement in debugging practice of professional software developers JF - Software Quality Journal N2 - In 1997, Henry Lieberman stated that debugging is the dirty little secret of computer science. Since then, several promising debugging technologies have been developed such as back-in-time debuggers and automatic fault localization methods. However, the last study about the state-of-the-art in debugging is still more than 15 years old and so it is not clear whether these new approaches have been applied in practice or not. For that reason, we investigate the current state of debugging in a comprehensive study. First, we review the available literature and learn about current approaches and study results. Second, we observe several professional developers while debugging and interview them about their experiences. Third, we create a questionnaire that serves as the basis for a larger online debugging survey. Based on these results, we present new insights into debugging practice that help to suggest new directions for future research. KW - Debugging KW - Literature review KW - Field study KW - Online survey Y1 - 2016 U6 - https://doi.org/10.1007/s11219-015-9294-2 SN - 0963-9314 SN - 1573-1367 VL - 25 SP - 83 EP - 110 PB - Springer CY - Dordrecht ER - TY - JOUR A1 - Felgentreff, Tim A1 - Perscheid, Michael A1 - Hirschfeld, Robert T1 - Implementing record and refinement for debugging timing-dependent communication JF - Science of computer programming N2 - Distributed applications are hard to debug because timing-dependent network communication is a source of non-deterministic behavior. Current approaches to debug non deterministic failures include post-mortem debugging as well as record and replay. However, the first impairs system performance to gather data, whereas the latter requires developers to understand the timing-dependent communication at a lower level of abstraction than they develop at. Furthermore, both approaches require intrusive core library modifications to gather data from live systems. In this paper, we present the Peek-At-Talk debugger for investigating non-deterministic failures with low overhead in a systematic, top-down method, with a particular focus on tool-building issues in the following areas: First, we show how our debugging framework Path Tools guides developers from failures to their root causes and gathers run-time data with low overhead. Second, we present Peek-At-Talk, an extension to our Path Tools framework to record non-deterministic communication and refine behavioral data that connects source code with network events. Finally, we scope changes to the core library to record network communication without impacting other network applications. KW - Distributed debugging KW - Record and replay KW - Dynamic analysis KW - Record and refinement Y1 - 2016 U6 - https://doi.org/10.1016/j.scico.2015.11.006 SN - 0167-6423 SN - 1872-7964 VL - 134 SP - 4 EP - 18 PB - Elsevier CY - Amsterdam ER - TY - JOUR A1 - Rein, Patrick A1 - Taeumel, Marcel A1 - Hirschfeld, Robert T1 - Making the domain tangible BT - implicit object lookup for source code readability JF - Design Thinking Research N2 - Programmers collaborate continuously with domain experts to explore the problem space and to shape a solution that fits the users’ needs. In doing so, all parties develop a shared vocabulary, which is above all a list of named concepts and their relationships to each other. Nowadays, many programmers favor object-oriented programming because it allows them to directly represent real-world concepts and interactions from the vocabulary as code. However, when existing domain data is not yet represented as objects, it becomes a challenge to initially bring existing domain data into object-oriented systems and to keep the source code readable. While source code might be comprehensible to programmers, domain experts can struggle, given their non-programming background. We present a new approach to provide a mapping of existing data sources into the object-oriented programming environment. We support keeping the code of the domain model compact and readable while adding implicit means to access external information as internal domain objects. This should encourage programmers to explore different ways to build the software system quickly. Eventually, our approach fosters communication with the domain experts, especially at the beginning of a project. When the details in the problem space are not yet clear, the source code provides a valuable, tangible communication artifact. KW - Source Code Readability KW - Domain Objects KW - StackOverflow KW - Squeak KW - Custom Writable Class Y1 - 2017 SN - 978-3-319-60967-6 SN - 978-3-319-60966-9 U6 - https://doi.org/10.1007/978-3-319-60967-6_9 SP - 171 EP - 194 PB - Springer CY - New York ER - TY - JOUR A1 - Steinert, Bastian A1 - Cassou, Damien A1 - Hirschfeld, Robert T1 - CoExist overcoming aversion to change preserving immediate access to source code and run-time information of previous development states JF - ACM SIGPLAN notices N2 - Programmers make many changes to the program to eventually find a good solution for a given task. In this course of change, every intermediate development state can of value, when, for example, a promising ideas suddenly turn out inappropriate or the interplay of objects turns out more complex than initially expected before making changes. Programmers would benefit from tool support that provides immediate access to source code and run-time of previous development states of interest. We present IDE extensions, implemented for Squeak/Smalltalk, to preserve, retrieve, and work with this information. With such tool support, programmers can work without worries because they can rely on tools that help them with whatever their explorations will reveal. They no longer have to follow certain best practices only to avoid undesired consequences of changing code. KW - Design KW - Experimentation KW - Human Factors KW - Continuous Testing KW - Continuous Versioning KW - Debugging KW - Evolution KW - Explore-first Programming KW - Fault Localization KW - Prototyping Y1 - 2013 U6 - https://doi.org/10.1145/2480360.2384591 SN - 0362-1340 VL - 48 IS - 2 SP - 107 EP - 117 PB - Association for Computing Machinery CY - New York ER - TY - JOUR A1 - Haupt, Michael A1 - Adams, Bram A1 - Timbermont, Stijn A1 - Gibbs, Celina A1 - Coady, Yvonne A1 - Hirschfeld, Robert T1 - Disentangling virtual machine architecture N2 - Virtual machine (VM) implementations are made of intricately intertwined subsystems, interacting largely through implicit dependencies. As the degree of crosscutting present in VMs is very high, VM implementations exhibit significant internal complexity. This study proposes an architecture approach for VMs that regards a VM as a composite of service modules coordinated through explicit bidirectional interfaces. Aspect-oriented programming techniques are used to establish these interfaces, to coordinate module interaction, and to declaratively express concrete VM architectures. A VM architecture description language is presented in a case study, illustrating the application of the proposed architectural principles. Y1 - 2009 UR - http://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=4124007 U6 - https://doi.org/10.1049/iet-sen.2007.0121 SN - 1751-8806 ER - TY - JOUR A1 - Steinert, Bastian A1 - Hirschfeld, Robert T1 - Applying design knowledge to programming Y1 - 2012 ER - TY - JOUR A1 - Hirschfeld, Robert A1 - Steinert, Bastian A1 - Lincke, Jens T1 - Agile software development in virtual collaboration environments Y1 - 2011 SN - 978-3-642-13756-3 ER - TY - JOUR A1 - Hirschfeld, Robert A1 - Perscheid, Michael A1 - Haupt, Michael T1 - Explicit use-case representation in object-oriented programming languages JF - ACM SIGPLAN notices N2 - Use-cases are considered an integral part of most contemporary development processes since they describe a software system's expected behavior from the perspective of its prospective users. However, the presence of and traceability to use-cases is increasingly lost in later more code-centric development activities. Use-cases, being well-encapsulated at the level of requirements descriptions, eventually lead to crosscutting concerns in system design and source code. Tracing which parts of the system contribute to which use-cases is therefore hard and so limits understandability. In this paper, we propose an approach to making use-cases first-class entities in both the programming language and the runtime environment. Having use-cases present in the code and the running system will allow developers, maintainers, and operators to easily associate their units of work with what matters to the users. We suggest the combination of use-cases, acceptance tests, and dynamic analysis to automatically associate source code with use-cases. We present UseCasePy, an implementation of our approach to use-case-centered development in Python, and its application to the Django Web framework. KW - design KW - languages KW - use-cases KW - separation of concerns KW - traceability Y1 - 2012 U6 - https://doi.org/10.1145/2168696.2047856 SN - 0362-1340 VL - 47 IS - 2 SP - 51 EP - 60 PB - Association for Computing Machinery CY - New York ER - TY - JOUR A1 - Lincke, Jens A1 - Appeltauer, Malte A1 - Steinert, Bastian A1 - Hirschfeld, Robert T1 - An open implementation for context-oriented layer composition in ContextJS JF - Science of computer programming N2 - Context-oriented programming (COP) provides dedicated support for defining and composing variations to a basic program behavior. A variation, which is defined within a layer, can be de-/activated for the dynamic extent of a code block. While this mechanism allows for control flow-specific scoping, expressing behavior adaptations can demand alternative scopes. For instance, adaptations can depend on dynamic object structure rather than control flow. We present scenarios for behavior adaptation and identify the need for new scoping mechanisms. The increasing number of scoping mechanisms calls for new language abstractions representing them. We suggest to open the implementation of scoping mechanisms so that developers can extend the COP language core according to their specific needs. Our open implementation moves layer composition into objects to be affected and with that closer to the method dispatch to be changed. We discuss the implementation of established COP scoping mechanisms using our approach and present new scoping mechanisms developed for our enhancements to Lively Kernel. KW - ContextJS KW - Context-oriented programming KW - Open implementations KW - Dynamic adaptation KW - Scope Y1 - 2011 U6 - https://doi.org/10.1016/j.scico.2010.11.013 SN - 0167-6423 VL - 76 IS - 12 SP - 1194 EP - 1209 PB - Elsevier CY - Amsterdam ER - TY - JOUR A1 - Weiher, Marcel A1 - Hirschfeld, Robert T1 - Polymorphic identifiers: uniform resource access in objective-smalltalk JF - ACM SIGPLAN notices N2 - In object-oriented programming, polymorphic dispatch of operations decouples clients from specific providers of services and allows implementations to be modified or substituted without affecting clients. The Uniform Access Principle (UAP) tries to extend these qualities to resource access by demanding that access to state be indistinguishable from access to operations. Despite language features supporting the UAP, the overall goal of substitutability has not been achieved for either alternative resources such as keyed storage, files or web pages, or for alternate access mechanisms: specific kinds of resources are bound to specific access mechanisms and vice versa. Changing storage or access patterns either requires changes to both clients and service providers and trying to maintain the UAP imposes significant penalties in terms of code-duplication and/or performance overhead. We propose introducing first class identifiers as polymorphic names for storage locations to solve these problems. With these Polymorphic Identifiers, we show that we can provide uniform access to a wide variety of resource types as well as storage and access mechanisms, whether parametrized or direct, without affecting client code, without causing code duplication or significant performance penalties. KW - Identifiers KW - REST KW - Uniform Access Principle KW - Extensibility Y1 - 2014 U6 - https://doi.org/10.1145/2508168.2508169 SN - 0362-1340 SN - 1558-1160 VL - 49 IS - 2 SP - 61 EP - 71 PB - Association for Computing Machinery CY - New York ER - TY - JOUR A1 - Bauman, Spenser A1 - Bolz, Carl Friedrich A1 - Hirschfeld, Robert A1 - Kirilichev, Vasily A1 - Pape, Tobias A1 - Siek, Jeremy G. A1 - Tobin-Hochstadt, Sam T1 - Pycket: A Tracing JIT for a Functional Language JF - ACM SIGPLAN notices N2 - We present Pycket, a high-performance tracing JIT compiler for Racket. Pycket supports a wide variety of the sophisticated features in Racket such as contracts, continuations, classes, structures, dynamic binding, and more. On average, over a standard suite of benchmarks, Pycket outperforms existing compilers, both Racket's JIT and other highly-optimizing Scheme compilers. Further, Pycket provides much better performance for Racket proxies than existing systems, dramatically reducing the overhead of contracts and gradual typing. We validate this claim with performance evaluation on multiple existing benchmark suites. The Pycket implementation is of independent interest as an application of the RPython meta-tracing framework (originally created for PyPy), which automatically generates tracing JIT compilers from interpreters. Prior work on meta-tracing focuses on bytecode interpreters, whereas Pycket is a high-level interpreter based on the CEK abstract machine and operates directly on abstract syntax trees. Pycket supports proper tail calls and first-class continuations. In the setting of a functional language, where recursion and higher-order functions are more prevalent than explicit loops, the most significant performance challenge for a tracing JIT is identifying which control flows constitute a loop-we discuss two strategies for identifying loops and measure their impact. KW - Experimentation KW - Languages KW - Measurement KW - Performance KW - JIT compilers KW - contracts KW - tracing KW - functional languages KW - Racket Y1 - 2015 U6 - https://doi.org/10.1145/2784731.2784740 SN - 0362-1340 SN - 1558-1160 VL - 50 IS - 9 SP - 22 EP - 34 PB - Association for Computing Machinery CY - New York ER - TY - BOOK A1 - Appeltauer, Malte A1 - Hirschfeld, Robert T1 - The JCop language specification : Version 1.0, April 2012 N2 - Program behavior that relies on contextual information, such as physical location or network accessibility, is common in today's applications, yet its representation is not sufficiently supported by programming languages. With context-oriented programming (COP), such context-dependent behavioral variations can be explicitly modularized and dynamically activated. In general, COP could be used to manage any context-specific behavior. However, its contemporary realizations limit the control of dynamic adaptation. This, in turn, limits the interaction of COP's adaptation mechanisms with widely used architectures, such as event-based, mobile, and distributed programming. The JCop programming language extends Java with language constructs for context-oriented programming and additionally provides a domain-specific aspect language for declarative control over runtime adaptations. As a result, these redesigned implementations are more concise and better modularized than their counterparts using plain COP. JCop's main features have been described in our previous publications. However, a complete language specification has not been presented so far. This report presents the entire JCop language including the syntax and semantics of its new language constructs. N2 - Das Verhalten von modernen Software-Anwendungen benötigt häufig Informationen über den Kontext ihrer Ausführung, z.B. die geografische Position, die Tageszeit oder die aktuelle Netzwerkbandbreite. Dennoch bieten heutige Programmiersprachen nur wenig Unterstützung für die Repräsentation kontextspezifischen Verhaltens. Kontextorientiertes Programmieren ist ein Ansatz, der die explizite Modularisierung und Laufzeitaktivierung von kontextspezifischem Verhalten auf der Ebene von Programmiersprachkonstrukten ermöglicht. Die bisherigen Umsetzungen von kontextorientiertem Programmieren schränken jedoch die Kontrolle der Laufzeitaktivierungen solches kontextspezifischen Verhaltens ein. Daraus folgt eine Einschränkung der Anwendungsbereiche für kontextorientiertes Programmieren, unter anderem für solche Domänen, in denen Programme sehr häufig kontextabhängiges Verhalten bereitstellen, z.B. ereignisbasierte, mobile und dienstorientierte Systeme. Die Programmiersprache JCop erweitert Java um Sprachkonstrukte für kontextorientieres Programmieren und bietet zusätzlich eine domänenspezifische Aspektsprach an, mit deren Hilfe Laufzeitadaptionen deklarativ spezifiziert werden können. Die Kernkonzepte von JCop wurden bereits in mehrern Publikationen vorgestellt, dieser Bericht enthält nun eine umfassende Sprachspezifikation von JCop. T3 - Technische Berichte des Hasso-Plattner-Instituts für Digital Engineering an der Universität Potsdam - 59 KW - Programming Languages KW - Context-oriented Programming KW - Aspect-oriented Programming KW - Java KW - JCop KW - runtime adaptations Y1 - 2012 U6 - http://nbn-resolving.de/urn/resolver.pl?urn:nbn:de:kobv:517-opus-60208 SN - 978-3-86956-193-6 PB - Universitätsverlag Potsdam CY - Potsdam ER - TY - BOOK A1 - Kleine, Matthias A1 - Hirschfeld, Robert A1 - Bracha, Gilad T1 - An abstraction for version control systems T3 - Technische Berichte des Hasso-Plattner-Instituts für Softwaresystemtechnik an der Universität Potsdam N2 - Versionsverwaltungssysteme (VCS) ermöglichen es Entwicklern, Änderungen an Softwareartifakten zu verwalten. VCS werden mit Hilfe einer Vielzahl verschiedener Werkzeuge bedient, wie z.\,B. graphische Front-ends oder Kommandozeilenwerkzeuge. Es ist wünschenswert mit einzelnen solcher Werkzeuge unterschiedliche VCS bedienen zu können. Bislang hat sich jedoch keine Abstraktion für Versionsverwaltungssysteme durchgesetzt, mit deren Hilfe solche Werkzeuge erstellt werden können. Stattdessen implementieren Werkzeuge zur Interaktion mit mehreren VCS ad-hoc Lösungen. Diese Masterarbeit stellt Pur vor, eine Abstraktion über Versionsverwaltungskonzepte. Mit Hilfe von Pur können Anwendungsprogramme entwickelt werden, die mit mehreren Versionsverwaltungssystemen interagieren können. Im Rahmen dieser Arbeit wird eine Implementierung dieser Abstraktion bereitgestellt und mit Hilfe eines Anwendungsprogramms validiert. N2 - Version Control Systems (VCS) allow developers to manage changes to software artifacts. Developers interact with VCSs through a variety of client programs, such as graphical front-ends or command line tools. It is desirable to use the same version control client program against different VCSs. Unfortunately, no established abstraction over VCS concepts exists. Instead, VCS client programs implement ad-hoc solutions to support interaction with multiple VCSs. This thesis presents Pur, an abstraction over version control concepts that allows building rich client programs that can interact with multiple VCSs. We provide an implementation of this abstraction and validate it by implementing a client application. T3 - Technische Berichte des Hasso-Plattner-Instituts für Digital Engineering an der Universität Potsdam - 54 Y1 - 2011 U6 - http://nbn-resolving.de/urn/resolver.pl?urn:nbn:de:kobv:517-opus-55629 SN - 978-3-86956-158-5 SN - 1613-5652 SN - 2191-1665 IS - 54 PB - Universitätsverlag Potsdam CY - Potsdam ER -