Refine
Document Type
- Monograph/Edited Volume (7)
- Article (5)
- Doctoral Thesis (1)
Is part of the Bibliography
- yes (13)
Keywords
- JavaScript (2)
- Smalltalk (2)
- collection types (2)
- memory optimization (2)
- virtual machines (2)
- virtuelle Maschinen (2)
- Abhängigkeiten (1)
- Algorithmen (1)
- Beschränkungen und Abhängigkeiten (1)
- Blockheizkraftwerke (1)
- CoExist (1)
- Constraints (1)
- ContextErlang (1)
- Debugging (1)
- Distributed debugging (1)
- Dynamic analysis (1)
- Effizienz (1)
- Energiesparen (1)
- Implementation (1)
- Interpreter (1)
- Lively Kernel (1)
- Mehrfamilienhäuser (1)
- Newspeak (1)
- Object Constraint Programming (1)
- Object Versioning (1)
- Objekt-Constraint Programmierung (1)
- Objekt-orientiertes Programmieren mit Constraints (1)
- Optimierungen (1)
- Prognosen (1)
- Programmiererlebnis (1)
- Programming Environments (1)
- Python (1)
- Record and refinement (1)
- Record and replay (1)
- Ruby (1)
- Sammlungsdatentypen (1)
- Softwarearchitektur (1)
- Softwaretests (1)
- Speicheroptimierungen (1)
- Sprachspezifikation (1)
- Squeak (1)
- Travis CI (1)
- Visualisierung (1)
- Web browsers (1)
- Zugriffskontrolle (1)
- access control (1)
- active layers (1)
- algorithms (1)
- ausführbare Semantiken (1)
- cogeneration units (1)
- context groups (1)
- contextual-variability modeling (1)
- continuous integration (1)
- continuous testing (1)
- debugging (1)
- dependencies (1)
- dynamic typing (1)
- dynamic programming languages (1)
- dynamic typing (1)
- dynamische Programmiersprachen (1)
- dynamische Sprachen (1)
- efficiency (1)
- energy savings (1)
- entity-component-system (1)
- executable semantics (1)
- forecasts (1)
- group-based behavior adaptation (1)
- implied methods (1)
- integrated development environments (1)
- integrierte Entwicklungsumgebungen (1)
- interpreters (1)
- kontinuierliche Integration (1)
- kontinuierliches Testen (1)
- language specification (1)
- lively groups (1)
- mehrsprachige Ausführungsumgebungen (1)
- multi-family residential buildings (1)
- object-constraint programming (1)
- object-oriented languages (1)
- optimizations (1)
- periodic tasks (1)
- periodische Aufgaben (1)
- polyglot execution environments (1)
- predicated generic functions (1)
- programming experience (1)
- reactive object queries (1)
- small talk (1)
- software architecture (1)
- software development (1)
- software engineering (1)
- software tests (1)
- visualization (1)
Squimera
(2017)
Software development tools that work and behave consistently across different programming languages are helpful for developers, because they do not have to familiarize themselves with new tooling whenever they decide to use a new language. Also, being able to combine multiple programming languages in a program increases reusability, as developers do not have to recreate software frameworks and libraries in the language they develop in and can reuse existing software instead.
However, developers often have a broad choice with regard to tools, some of which are designed for only one specific programming language. Various Integrated Development Environments have support for multiple languages, but are usually unable to provide a consistent programming experience due to different features of language runtimes. Furthermore, common mechanisms that allow reuse of software written in other languages usually use the operating system or a network connection as the abstract layer. Tools, however, often cannot support such indirections well and are therefore less useful in debugging scenarios for example.
In this report, we present a novel approach that aims to improve the programming experience with regard to working with multiple high-level programming languages. As part of this approach, we reuse the tools of a Smalltalk programming environment for other languages and build a multi-language virtual execution environment which is able to provide the same runtime capabilities for all languages.
The prototype system Squimera is an implementation of our approach and demonstrates that it is possible to reuse development tools, so that they behave in the same way across all supported programming languages. In addition, it provides convenient means to reuse and even mix software libraries and frameworks written in different languages without breaking the debugging experience.
When realizing a programming language as VM, implementing behavior as part of the VM, as primitive, usually results in reduced execution times. But supporting and developing primitive functions requires more effort than maintaining and using code in the hosted language since debugging is harder, and the turn-around times for VM parts are higher. Furthermore, source artifacts of primitive functions are seldom reused in new implementations of the same language. And if they are reused, the existing API usually is emulated, reducing the performance gains. Because of recent results in tracing dynamic compilation, the trade-off between performance and ease of implementation, reuse, and changeability might now be decided adversely.
In this work, we investigate the trade-offs when creating primitives, and in particular how large a difference remains between primitive and hosted function run times in VMs with tracing just-in-time compiler. To that end, we implemented the algorithmic primitive BitBlt three times for RSqueak/VM. RSqueak/VM is a Smalltalk VM utilizing the PyPy RPython toolchain. We compare primitive implementations in C, RPython, and Smalltalk, showing that due to the tracing just-in-time compiler, the performance gap has lessened by one magnitude to one magnitude.