|
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.
REFERENCES
Note: OCR errors may be found in this Reference List extracted from the full text article. ACM has opted to expose the complete List rather than only correct and linked references.
| |
1
|
|
 |
2
|
|
 |
3
|
|
 |
4
|
|
| |
5
|
Baker, H.G. "Cache-conscious copying collectors". OOPSLA'91 GC Workshop, Oct. 1991.
|
 |
6
|
|
 |
7
|
|
 |
8
|
|
 |
9
|
|
 |
10
|
|
 |
11
|
|
 |
12
|
|
 |
13
|
|
 |
14
|
|
 |
15
|
|
| |
16
|
Chikayama, T., and Kimura, Y. "Multiple reference management in flat GHC". In Lassez, J.-L., ed. Logic Programming, Proc. 4th Intl. Conf. MIT Press, Camb., MA, 1987, 276-293.
|
 |
17
|
|
| |
18
|
Clark, D.W., and Green, C.C. "A note on shared list structure in Lisp". Inf. Proc. Lett. 7, 6 (Oct. 1978), 312-315.
|
 |
19
|
|
 |
20
|
|
| |
21
|
Friedman, D.P., & Wise, D.S. "Aspects of applicative programming for parallel processing". IEEE Trans. Comput. C-27, 4 (Apr. 1978), 289-296.
|
 |
22
|
|
| |
23
|
|
| |
24
|
Gabriel, R.P. "The Why of Y". ACM Lisp Pointers 2, 2 (Oct.-Dec. 1988), 15-25.
|
| |
25
|
|
| |
26
|
|
| |
27
|
Goto, A., et al. "Lazy reference counting: An incremental garbage collection method for parallel inference machines". Proc. Intl. Conf. on Logic Programming, MIT Press, 1988, 1241-1256.
|
| |
28
|
Gudeman, D., et al. " jc: An Efficient and Portable Sequential implementation of Janus". Logic Programming, Proc. Jt. Intl. Conf. & Symp. MIT Press, 1992, 399-413.
|
| |
29
|
Guzmán, J.C., and Hudak, P. "Single-threaded polymorphic lambda calculus". 5th IEEE LICS, 1990, 333-343.
|
| |
30
|
|
| |
31
|
Harper, R., et al. "Standard ML". TR ECS-LFCS-86-2, Comp. Sci. Dept., Edinburgh, UK, Mar. 1986.
|
 |
32
|
|
 |
33
|
|
 |
34
|
|
 |
35
|
|
 |
36
|
|
 |
37
|
|
| |
38
|
|
| |
39
|
Inamura, Y., et al. "Optimization techniques using the MRB and their evaluation on the Multi-PSI/V2". In Lusk, E.L., and Overbeek, R.A., eds. Logic Programming, Proc. of North American Conf. MIT Press, 1989, 907-921.
|
| |
40
|
|
| |
41
|
|
| |
42
|
|
 |
43
|
|
| |
44
|
|
| |
45
|
Lincoln, P., and Mitchell, J.C. "Operational aspects of linear lambda calculus". Proc. 7th IEEE Logic in CS, 1992.
|
 |
46
|
|
| |
47
|
Lucassen, J.M. Types and Effects: Towards the Integration of Functional and Imperative Programming. PhD Thesis, MIT/LCS/TR-408, MIT, Aug. 1987.
|
 |
48
|
|
 |
49
|
|
| |
50
|
|
 |
51
|
|
 |
52
|
|
| |
53
|
|
| |
54
|
Steele, G.L. "Data Representations in PDP-10 Maclisp". AI Memo 420, MIT AI Lab., Camb., MA, Sept. 1977.
|
| |
55
|
|
| |
56
|
|
 |
57
|
W. R. Stoye , T. J. W. Clarke , A. C. Norman, Some practical methods for rapid combinator reduction, Proceedings of the 1984 ACM Symposium on LISP and functional programming, p.159-166, August 06-08, 1984, Austin, Texas, United States
[doi> 10.1145/800055.802032]
|
 |
58
|
|
| |
59
|
|
| |
60
|
Taft, S.T., et al. Ada9X Mapping Documents. DoD, Wash., DC, Feb. 1991.
|
| |
61
|
Taft, S.T., et al. Ada9X Reference Manual, v. 5.0. Intermetrics, Inc., Camb., MA, June, 1994.
|
 |
62
|
|
| |
63
|
|
 |
64
|
|
| |
65
|
Wise, D.S., and Friedman, D.P. "The one-bit reference count". BIT 17, 3 (Sept. 1977), 351-359.
|
| |
66
|
|
| |
67
|
|
| |
68
|
|
|