The C++ programming language
The C programming language
Garbage collection in an uncooperative environment
Software—Practice & Experience
Space efficient conservative garbage collection
PLDI '93 Proceedings of the ACM SIGPLAN 1993 conference on Programming language design and implementation
HOPL-II The second ACM SIGPLAN conference on History of programming languages
The development of the C language
HOPL-II The second ACM SIGPLAN conference on History of programming languages
Extensibility safety and performance in the SPIN operating system
SOSP '95 Proceedings of the fifteenth ACM symposium on Operating systems principles
Proceedings of the 14th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Clock rate versus IPC: the end of the road for conventional microarchitectures
Proceedings of the 27th annual international symposium on Computer architecture
BLISS: a language for systems programming
Communications of the ACM
Program analysis for safety guarantees in a Java virtual machine written in Java
PASTE '01 Proceedings of the 2001 ACM SIGPLAN-SIGSOFT workshop on Program analysis for software tools and engineering
SPIN: an extensible microkernel for application-specific operating system services
EW 6 Proceedings of the 6th workshop on ACM SIGOPS European workshop: Matching operating systems to application needs
Java Native Interface: Programmer's Guide and Reference
Java Native Interface: Programmer's Guide and Reference
The Java Language Specification
The Java Language Specification
Shared Source Cli Essentials
Type-safe multithreading in cyclone
Proceedings of the 2003 ACM SIGPLAN international workshop on Types in languages design and implementation
IEEE Micro
ATEC '02 Proceedings of the General Track of the annual conference on USENIX Annual Technical Conference
Should high level languages be used to write systems software?
ACM '75 Proceedings of the 1975 annual conference
Yes! high level languages should be used to write systems software
ACM '75 Proceedings of the 1975 annual conference
No! high level languages should not be used to write systems software
ACM '75 Proceedings of the 1975 annual conference
Joeq: a virtual machine and compiler infrastructure
Proceedings of the 2003 workshop on Interpreters, virtual machines and emulators
The New Compiler
On the appropriate language for system programming
ACM SIGPLAN Notices
Oil and Water? High Performance Garbage Collection in Java with MMTk
Proceedings of the 26th International Conference on Software Engineering
IBM Systems Journal
Concurrency and Computation: Practice & Experience - 2002 ACM Java Grande—ISCOPE Conference Part I
Inlining java native calls at runtime
Proceedings of the 1st ACM/USENIX international conference on Virtual execution environments
Threads cannot be implemented as a library
Proceedings of the 2005 ACM SIGPLAN conference on Programming language design and implementation
A principled approach to operating system construction in Haskell
Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
X10: an object-oriented approach to non-uniform cluster computing
OOPSLA '05 Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Constructing a metacircular Virtual machine in an exploratory programming environment
OOPSLA '05 Companion to the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
64-bit versus 32-bit Virtual Machines for Java: Research Articles
Software—Practice & Experience
Java™ on the bare metal of wireless sensor devices: the squawk Java virtual machine
Proceedings of the 2nd international conference on Virtual execution environments
CISL: a class-based machine description language for co-generation of compilers and simulators
International Journal of Parallel Programming - Special issue: The next generation software program
PyPy's approach to virtual machine construction
Companion to the 21st ACM SIGPLAN symposium on Object-oriented programming systems, languages, and applications
Deconstructing process isolation
Proceedings of the 2006 workshop on Memory system performance and correctness
Writing Solaris device drivers in Java
Proceedings of the 3rd workshop on Programming languages and operating systems: linguistic support for modern operating systems
Proceedings of the 3rd workshop on Programming languages and operating systems: linguistic support for modern operating systems
Language support for fast and reliable message-based communication in singularity OS
Proceedings of the 1st ACM SIGOPS/EuroSys European Conference on Computer Systems 2006
Singularity: rethinking the software stack
ACM SIGOPS Operating Systems Review - Systems work at Microsoft Research
Valgrind: a framework for heavyweight dynamic binary instrumentation
Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation
LIL: an architecture-neutral language for virtual-machine stubs
VM'04 Proceedings of the 3rd conference on Virtual Machine Research And Technology Symposium - Volume 3
Parallel Programmability and the Chapel Language
International Journal of High Performance Computing Applications
Proceedings of the 6th international symposium on Memory management
Effective prefetch for mark-sweep garbage collection
Proceedings of the 6th international symposium on Memory management
Jeannie: granting java native interface developers their wishes
Proceedings of the 22nd annual ACM SIGPLAN conference on Object-oriented programming systems and applications
Proceedings of the 23rd ACM SIGPLAN conference on Object-oriented programming systems languages and applications
BCPL: a tool for compiler writing and system programming
AFIPS '69 (Spring) Proceedings of the May 14-16, 1969, spring joint computer conference
Improving compiler-runtime separation with XIR
Proceedings of the 6th ACM SIGPLAN/SIGOPS international conference on Virtual execution environments
VMKit: a substrate for managed runtime environments
Proceedings of the 6th ACM SIGPLAN/SIGOPS international conference on Virtual execution environments
Z-rays: divide arrays and conquer speed and flexibility
PLDI '10 Proceedings of the 2010 ACM SIGPLAN conference on Programming language design and implementation
Magic for the masses: safer high-level low-level programming through customizable static analyses
Proceedings of the 1st workshop on Modularity in systems software
Jazz2: a flexible and extensible framework for structural testing in a Java VM
Proceedings of the 9th International Conference on Principles and Practice of Programming in Java
Summary of PLOS 2011: the sixth workshop on programming languages and operating systems
ACM SIGOPS Operating Systems Review
ALIA4J's [(just-in-time) compile-time] MOP for advanced dispatching
Proceedings of the compilation of the co-located workshops on DSM'11, TMC'11, AGERE!'11, AOOPES'11, NEAT'11, & VMIL'11
Unpicking the knot: teasing apart VM/application interdependencies
VEE '12 Proceedings of the 8th ACM SIGPLAN/SIGOPS conference on Virtual Execution Environments
Maxine: An approachable virtual machine for, and in, java
ACM Transactions on Architecture and Code Optimization (TACO) - Special Issue on High-Performance Embedded Architectures and Compilers
Bypassing portability pitfalls of high-level low-level programming
Proceedings of the sixth ACM workshop on Virtual machines and intermediate languages
Harmonizing classes, functions, tuples, and type parameters in virgil iii
Proceedings of the 34th ACM SIGPLAN conference on Programming language design and implementation
Proceedings of the 2013 ACM international symposium on New ideas, new paradigms, and reflections on programming & software
Hi-index | 0.00 |
The power of high-level languages lies in their abstraction over hardware and software complexity, leading to greater security, better reliability, and lower development costs. However, opaque abstractions are often show-stoppers for systems programmers, forcing them to either break the abstraction, or more often, simply give up and use a different language. This paper addresses the challenge of opening up a high-level language to allow practical low-level programming without forsaking integrity or performance. The contribution of this paper is three-fold: 1) we draw together common threads in a diverse literature, 2) we identify a framework for extending high-level languages for low-level programming, and 3) we show the power of this approach through concrete case studies. Our framework leverages just three core ideas: extending semantics via intrinsic methods, extending types via unboxing and architectural-width primitives, and controlling semantics via scoped semantic regimes. We develop these ideas through the context of a rich literature and substantial practical experience. We show that they provide the power necessary to implement substantial artifacts such as a high-performance virtual machine, while preserving the software engineering benefits of the host language. The time has come for high-level low-level programming to be taken more seriously: 1) more projects now use high-level languages for systems programming, 2) increasing architectural heterogeneity and parallelism heighten the need for abstraction, and 3) a new generation of high-level languages are under development and ripe to be influenced.