Affiliation:
1. Nimble Computer Corporation, 16231 Meadow Ridge Way, Encino, CA
Abstract
Programming languages should have 'use-once' variables in addition to the usual 'multiple-use' variables. 'Use-once' variables are bound to
linear
(
unshared, unaliased, or singly-referenced
) objects. Linear objects are cheap to access and manage, because they require no synchronization or tracing garbage collection. Linear objects can elegantly and efficiently solve otherwise difficult problems of functional/mostly-functional systems---e.g., in-place updating and the efficient initialization of functional objects. Use-once variables are ideal for directly manipulating
resources
which are inherently linear such as freelists and 'engine ticks' in reflective languages.A 'use-once' variable must be dynamically referenced
exactly once
within its scope. Unreferenced use-once variables must be explicitly killed, and multiply-referenced use-once variables must be explicitly copied; this duplication and deletion is subject to the constraint that some linear datatypes do not support duplication and deletion methods. Use-once variables are bound only to linear objects, which may reference other linear or non-linear objects. Non-linear objects can reference other non-linear objects, but can reference a linear object only in a way that ensures mutual exclusion.Although implementations have long had
implicit
use-once variables and linear objects, most languages do not provide the programmer any help for their utilization. For example, use-once variables allow for the safe/controlled use of reified language implementation objects like single-use continuations.Linear objects and use-once variables map elegantly into dataflow models of concurrent computation, and the graphical representations of dataflow models make an appealing
visual linear programming language
.
Publisher
Association for Computing Machinery (ACM)
Subject
Computer Graphics and Computer-Aided Design,Software
Reference68 articles.
1. Encapsulation constructs in systems programming languages
2. The incremental garbage collection of processes
3. Baker H.G. "Unify and Conquer (Garbage Updating Aliasing ..) in Functional Languages". ACM LFP. (1990). 10.1145/91556.91652 Baker H.G. "Unify and Conquer (Garbage Updating Aliasing ..) in Functional Languages". ACM LFP. (1990). 10.1145/91556.91652
Cited by
34 articles.
订阅此论文施引文献
订阅此论文施引文献,注册后可以免费订阅5篇论文的施引文献,订阅后可以查看论文全部施引文献
1. Predictable accelerator design with time-sensitive affine types;Proceedings of the 41st ACM SIGPLAN Conference on Programming Language Design and Implementation;2020-06-06
2. Verification of Programs with Pointers in SPARK;Formal Methods and Software Engineering;2020
3. Uniqueness Types for Efficient and Verifiable Aliasing-Free Embedded Systems Programming;Lecture Notes in Computer Science;2019
4. Developing a monadic type checker for an object-oriented language: an experience report;Proceedings of the 12th ACM SIGPLAN International Conference on Software Language Engineering - SLE 2019;2019
5. Project snowflake: non-blocking safe manual memory management in .NET;Proceedings of the ACM on Programming Languages;2017-10-12