- Parallel Computing and Optimization Techniques
- Logic, programming, and type systems
- Security and Verification in Computing
- Distributed systems and fault tolerance
- Software Engineering Research
- Software Testing and Debugging Techniques
- Radiation Effects in Electronics
- Advanced Data Storage Technologies
- Cloud Computing and Resource Management
- Manufacturing Process and Optimization
- Embedded Systems Design Techniques
- Formal Methods in Verification
Johannes Kepler University of Linz
2013-2016
Most high-performance dynamic language virtual machines duplicate semantics in the interpreter, compiler, and runtime system. This violates principle to not repeat yourself. In contrast, we define languages solely by writing an interpreter. The interpreter performs specializations, e.g., augments interpreted program with type information profiling information. Compiled code is derived automatically using partial evaluation while incorporating these specializations. makes practical context of...
Programmers combine different programming languages because it allows them to use the most suitable language for a given problem, gradually migrate existing projects from one another, or reuse source code. However, cross-language mechanisms suffer complex interfaces, insufficient flexibility, poor performance. We present TruffleVM, multi-language runtime that composing implementations in seamless way. It reduces amount of required boiler-plate code minimum by allowing programmers access...
Although the Java platform has been used as a multi-language platform, most of low-level languages (such C, Fortran, and C++) cannot be executed efficiently on JVM. We propose Sulong, system that can execute LLVM-based By targeting LLVM IR, Sulong is able to other compiled IR. combines LLVM's static optimizations with dynamic compilation reach peak performance near achievable compilers. For C benchmarks, Sulong's runtime average 1.39× slower (0.79× 2.45×) compared executables by Clang O3....
Many dynamic languages such as Ruby, Python and Perl offer some kind of functionality for writing parts applications in a lower-level language C. These C extension modules are usually written against the API an interpreter, which provides access to higher-level language's internal data structures. Alternative implementations high-level often do not support extensions because implementing same original is complicated limits performance. In this paper we describe novel approach modular...
In large-scale software applications, programmers often combine different programming languages because this allows them to use the most suitable language for a given problem, gradually migrate existing projects from one another, or reuse source code. However, have fundamentally implementations, which are hard combine. The composition of implementations results in complex interfaces between languages, insufficient flexibility, poor performance. We propose TruffleVM, virtual machine (VM) that...
Most high-performance dynamic language virtual machines duplicate semantics in the interpreter, compiler, and runtime system. This violates principle to not repeat yourself. In contrast, we define languages solely by writing an interpreter. The interpreter performs specializations, e.g., augments interpreted program with type information profiling information. Compiled code is derived automatically using partial evaluation while incorporating these specializations. makes practical context of...
This paper presents TruffleC, a C interpreter that allows the dynamic execution of code on top Java Virtual Machine (JVM). Rather than producing static build application, TruffleC is self-optimizing abstract syntax tree (AST) combined with just-in-time (JIT) compiler. Our specializes AST based run-time feedback. specialization relies optimistic assumptions and us to inline caches for polymorphic function pointer calls, profile runtime values potentially replace them constants, or...
In low-level languages such as C, spatial and temporal safety errors (e.g. buffer overflows or dangling pointer dereferences) are hard to find can cause security vulnerabilities. Modern high-level Java avoid these problems by running programs on a virtual machine that provides automated memory management.
In C, memory errors, such as buffer overflows, are among the most dangerous software errors; we show, they still on rise. Current dynamic bug-finding tools that try to detect errors based low-level execution model of underlying machine. They insert additional checks in an ad-hoc fashion, which makes them prone omitting for corner cases. To address this, devised a novel approach finding bugs during program. At core this is interpreter written high-level language performs automatic (such...
We present an efficient and dynamic approach for calling native functions from within Java. Traditionally, programmers use the Java Native Interface (JNI) to call such functions. This paper introduces a new mechanism which we tailored specifically towards it Graal Function (GNFI). It is faster than JNI in all relevant cases more flexible because avoids boiler-plate code.
Programmers combine different programming languages because it allows them to use the most suitable language for a given problem, gradually migrate existing projects from one another, or reuse source code. However, cross-language mechanisms suffer complex interfaces, insufficient flexibility, poor performance. We present TruffleVM, multi-language runtime that composing implementations in seamless way. It reduces amount of required boiler-plate code minimum by allowing programmers access...
Context: In C, low-level errors, such as buffer overflow and use-after-free, are a major problem, they cause security vulnerabilities hard-to-find bugs.C lacks automatic checks, programmers cannot apply defensive programming techniques because objects (e.g., arrays or structs) lack run-time information about bounds, lifetime, types.Inquiry: Current approaches to tackling errors include dynamic tools, bounds type checkers, that check for certain actions during program execution.If detect an...
State-of-the-art dynamic compilers often use global approaches, like Linear Scan or Graph Coloring, for register allocation. These algorithms consider the complete compilation unit allocation, which increases complexity of implementation (e.g., support lifetime holes in Scan) and potentially also affects time. We propose a novel non-global algorithm, splits into traces based on profiling feedback subsequently performs allocation within each trace individually. Traces reduce problem size to...
Programs often consist of parts that are written in different languages because sub-problems lend themselves to being implemented a particular language. However, multi-language programs suffer from poor performance, complex cross-language interfaces, or insufficient flexibility.
Most C programs do not conform strictly to the standard, and often show undefined behaviors, for instance, in case of signed integer overflow. When compiled by non-optimizing compilers, such behave as programmer intended. However, optimizing compilers may exploit semantics achieve more aggressive optimizations, possibly breaking code process. Analysis tools can help find fix issues. Alternatively, a dialect could be defined which clear are specified frequently occurring program patterns with...
We present a novel approach for allowing JavaScript applications to access C data structures without performance overhead or additional boiler plate code.
For the last decade, Java Virtual Machine (JVM) has been a popular platform to host languages other than Java. Language implementation frameworks like Truffle allow of dynamic such as JavaScript or Ruby with competitive performance and completeness. However, statically typed are still rare under Truffle. We present Sulong, an LLVM IR interpreter that brings all LLVM-based including C, C++, Fortran in one stroke JVM. Executing these on JVM enables wide area future research, high-performance...
This paper introduces smart arrays, an abstraction for providing adaptive and efficient language-independent data storage. Their functionalities include NUMA-aware placement across sockets bit compression. We show how our single C++ implementation can be used efficiently from both native compiled Java code. experimentally evaluate arrays on a diverse set of analytics workloads. Further, we their affect performance lead to differences in hardware resource demands multicore machines,...
While Java is a statically-typed language, some of its features make it behave like dynamically-typed language at run time. This includes Java's boxing primitive values as well generics, which rely on type erasure.
In C, memory errors, such as buffer overflows, are among the most dangerous software errors; we show, they still on rise. Current dynamic bug-finding tools that try to detect errors based low-level execution model of underlying machine. They insert additional checks in an ad-hoc fashion, which makes them prone omitting for corner cases. To address this, devised a novel approach finding bugs during program. At core this is interpreter written high-level language performs automatic (such...