| A. W. Appel. Runtime tags aren't necessary. Journal of Lisp and Symbolic Computation, 2:153--162, 1989. |
....in the corresponding function; a table contains the locations of all global variables of type address. This information allows the garbage collector to trace all valid pointers into the heap. It has been pointed out that normally this approach does not work well in the presence of polymorphism [2], since an object with static type can be either an address into the heap, or an unboxed integer. In our case, such an object is guaranteed to be in the wrapped state; and we have arranged for all wrapped representations to be valid pointers, by boxing wrapped integers. Hence we can assume that ....
A. W. Appel. Run-time tags aren't necessary. Lisp and Symbolic Computation, 2(2), 1989.
....it marks the objects reachable from the roots present in that activation record. The map information may be maintained dynamically in the activation record [Wen88] or it may be generated statically, with the program counter used to locate the map corresponding to each activation record [Gol91, App89] This solution permits sourcelevel compatibility with existing code; it requires recompilation of the libraries. Root registration: Collectors based on root registration record the addresses of the roots in auxiliary data structures, for example, the protection stack of [War87] and the root ....
....reference counts are root referenced. The root referenced objects serve as the root set for a standard mark and sweep garbage collection. Goldberg describes tag free garbage collection for polymorphic statically typed languages using compiletime information [Gol91] building on work by Appel [App89] Goldberg s compiler emits functions that know how to collect garbage at various points in the program. Upon a collection, the collector follows the chain of return addresses up the run time stack. As each stack frame is visited an associated garbage collection function is invoked. A function ....
Andrew W. Appel. Runtime tags aren't necessary. In Lisp and Symbolic Computation, volume 2, pages 153--162, 1989.
....this list for the appropriate address range, after which the information in the symbol table can be used to correctly identify all untagged objects in that procedure s environment. The scheme, which is similar in many ways to a proposal by Appel for strongly typed polymorphic languages like ML [2], is discussed in more detail in [5] 4.2. Dereferencing Reduction One of the commonest operations in Prolog implementations is that of dereferencing. Because of this, repeated dereferencing of a variable or register can lead to a reduction in execution speed, because apart from the execution of ....
A. Appel, Runtime Tags Aren't Necessary, Tech. Rep. CS-TR-142-88, Dept. of Computer Science, Princeton University, Princeton, NJ, Mar. 1988. 29
....it marks the objects reachable from the roots present in that activation record. The map information may be maintained dynamically in the activation record [Wen88] or it may be generated statically, with the program counter used to locate the map corresponding to each activation record [Gol92, App89] This solution permits sourcelevel compatibility with existing code; it requires recompilation of the libraries. Root registration: Collectors based on root registration record the addresses of the roots in auxiliary data structures, for example, the protection stack of [War87] and the root ....
....reference counts are root referenced. The root referenced objects serve as the root set for a standard mark and sweep garbage collection. Goldberg describes tag free garbage collection for polymorphic statically typed languages using compiletime information [Gol92] building on work by Appel [App89] Goldberg s compiler emits functions that know how to collect garbage at various points in the program. Upon a collection, the collector follows the chain of return addresses up the run time stack. As each stack frame is visited an associated garbage collection function is invoked. A function ....
Andrew W. Appel. Runtime tags aren't necessary. In Lisp and Symbolic Computation, volume 2, pages 153--162, 1989.
....polymorphically typed languages such as Standard ML [MLH90] In Standard ML, the same function may be applied to arguments of different types, and thus the types of the variables in different activation records for the same function may vary. The solution to this problem was initially suggested in [Appel89], in which it was noticed that the types of the variables in the activation record of a function f may depend on the types of the variables in f s caller, in f s caller s caller, and so on. Thus, the type of the variables in an activation record can be determined by examining the type ....
....record of a function f may depend on the types of the variables in f s caller, in f s caller s caller, and so on. Thus, the type of the variables in an activation record can be determined by examining the type information associated with the other activation Abstract Several papers ([Appel89], Goldberg91] have recently claimed that garbage collection can be performed on untagged data in the presence of ML style type polymorphism. They rely on the ability to reconstruct the type of any reachable object during garbage collection. The bad news is that this is false there can be ....
[Article contains additional citation context not shown here]
Appel, A.W. Runtime Tags Aren't Necessary. In Lisp and Symbolic Computation, 2, 153-162, 1989.
....to collect all non reachable data. The basic idea is to associate with the code for each procedure the types of all free variables in the closure (i.e. stack frame) of the procedure. From the types, the garbage collector is able to determine the size of objects and any pointers they hold. Appel [2] and Goldberg Gloger [9] have shown that, in theory, it is possible to do tagless garbage collection for parametrically polymorphic languages. The idea is to reconstruct the types that were substituted for polymorphic parameters by walking up the stack. Unfortunately, it is not possible to ....
....function that created a polymorphic value may not be reachable, so it may not be possible to reconstruct the value s type. The following example from Goldberg Gloger demonstrates the problem: let fun f (x : a list) fn z = if length x = 1 then z 1 else z 1 val g : int int = if . then f [1,2,3] else f [ 1,2] 3,4] in g (hd [1] end If garbage collection is initiated during the construction of the list [1] then the garbage collector will be unable to determine the type of the free variable x in g s closure. Fortunately, Goldberg Gloger have proven that if you cannot reconstruct an ....
[Article contains additional citation context not shown here]
A. W. Appel. Runtime tags aren't necessary. Journal of Lisp and Symbolic Computation, 2:153--162, 1989.
....pointers and integers so that they cannot have the same bit pattern. As a consequence, ML implementations usually use Lisp like tagging, just for the purpose of garbage collection; for instance, the tagging scheme described above is used in Standard ML of New Jersey [2] As pointed out by Appel [1], this can be avoided: the actual type of a polymorphic datum (such as the parameter of the identity function) can be determined at GC time by looking at the call graph, and propagating actual types down it, using compile time type information. But as in the monomorphic case, types must then be ....
Andrew Appel. Run-time tags aren't necessary. Lisp and Symbolic Computation, 2(2):153--162, June 1989.
....at the beginning of program execution. Non conservative garbage collectors also require some amount of type information at run time in order to distinguish pointers from non pointers in memory roots and heap blocks. The traditional approach is to use tags on run time values. Alternatively, Appel [4] suggested to attach source types to blocks of function 5 code, and reconstruct type information for all reachable objects at run time, using a variant of ML type reconstruction. The paper by Hosoya and Yonezawa in these proceedings is the first complete formalization of this approach. ....
Andrew W. Appel. Run-time tags aren't necessary. Lisp and Symbolic Computation, 2(2), 1989.
.... of Id that uses a technique that appears to be equivalent to type passing [1] Aditya, Flood, and Hicks extended this work to garbage collection for Id [2] Over the past few years, a number of papers on inference based, tag free collection in monomorphic [11, 43, 12] and polymorphic [3, 25, 26, 23] languages appeared in the literature. Appel [3] argued informally that tag free collection is possible for polymorphic languages, such as SML, by a combination of recording information statically and performing what amounts to type inference during the collection process, though the connections ....
....equivalent to type passing [1] Aditya, Flood, and Hicks extended this work to garbage collection for Id [2] Over the past few years, a number of papers on inference based, tag free collection in monomorphic [11, 43, 12] and polymorphic [3, 25, 26, 23] languages appeared in the literature. Appel [3] argued informally that tag free collection is possible for polymorphic languages, such as SML, by a combination of recording information statically and performing what amounts to type inference during the collection process, though the connections between inference and collection were not made ....
Andrew W. Appel. Run-time tags aren't necessary. LISP and Symbolic Computation, 2:153--162, 1989.
....is that it saves space and that overhead is placed on garbage collection rather than on normal execution. This method is easy to implement for Pascal like languages where every variable has a fixed type [6] Tag free garbage collection gets more complicated with polymorphically typed languages [2][11] A polymorphic function is usually implemented by a single code and the template associated with its activation record contains polymorphic types. Relying only on this information the GC would be unable to trace the structures associated with type variables. However, types in an activation ....
....which is not polymorphic) to the most recent, all type variables will be bound using unification. Example 1 Let us consider the following program and its evaluation using call by value. let rec append l 1 l 2 = case l 1 in nil : l 2 cons x xs : cons x (append xs l 2 ) in length (append [ 1] [2]] 3] 4] append : List a List a List a length : List a Int If the garbage collector is invoked at the beginning of the first call to cons the stack looks like Figure 1 The information associated with a return address includes the types of local variables and the actual types of the ....
[Article contains additional citation context not shown here]
A.W. Appel. Runtimes tags aren't necessary. Lisp and Symb. Comp., 2, pp. 153-162, 1989.
....Haskell and ML compilers (Appel 1992) where conceptually all type information is stripped from programs before evaluation. Although tags are useful for other purposes, for garbage collection and polymorphic equality, some work has been done on removing the need for run time tags for the former (Appel 1989; Tolmach 1994) while the need for tags for the latter has been a point of criticism for polymorphic equality (Appel 1992) An alternative has been proposed for incorporating dynamic typing into a statically typed language, based on an explicit type dynamic for dynamically typed values (Abadi, ....
Appel, A. (1989, July). Run-time tags aren't necessary. Lisp and Symbolic Computation 19(7), 703--705.
....have presented frameworks to remove useless tagging untagging operations. Heinglein uses type inference while Ayers uses an extended control flow analysis close to our sua. The intended goal is more than compile time type check reductions. Appel claims the use of tag bits leads to inefficiency [1], Steenkiste and Henessy evaluate, in [30] at 25 the cost of type checking and tagging operations for classical Lisp applications. We think this time figure is an upper bound of the real cost. Classical data flow optimization (such as copy propagation) removes most type checks and, for smart ....
A. Appel. Runtime Tags Aren't Necessary. Technical Report CS-TR-142-88, Princeton University, 1989.
....of syntactic constructs like blocks and abstractions, or syntactic program transformations like Tofte Talpin s, it is possible to determine statically (by abstract interpretation or otherwise) where dynamically allocated cells can be deallocated. This is known as compile time garbage collection [4, 8, 46, 52, 53]. The compiler can generate appropriate code that will call the garbage collector only at these particular program points. The intuition is that this should give better performance than in cases where the run time system has to call the garbage collector, periodically suspending program ....
Appel, A. W. Runtime tags aren't necessary. Journal of Lisp and Symbolic Computation 2 (1989), 153--162.
....spent in garbage collection. Type directed garbage collection Some garbage collectors abandon tags and header words altogether, and base their traversal of the memory graph on static type information, using either run time type parameters for polymorphic code [19] or GC time type reconstruction [2, 1]. Here, determining where pointers lie inside blocks is even more expensive than in the previous case, since instead of reading pre digested block descriptors, the garbage collector must interpret full type expressions. In addition, since type information is not attached to data, a Cheney style ....
....of reading pre digested block descriptors, the garbage collector must interpret full type expressions. In addition, since type information is not attached to data, a Cheney style breadth first traversal of the memory graph is no longer feasible and must be replaced by a depth first traversal [2, 19] or allocate extra heap memory for storing types. Tolmach [19] reports execution times ranging from 0.6 to 2.6 relative to a Gallium style garbage collector on small programs. Some of the extra cost of garbage collection is compensated by the fact that heap blocks are smaller no extra header ....
A. W. Appel. Run-time tags aren't necessary. Lisp and Symbolic Computation, 2(2), 1989.
....In general, operating on values in languages such as these may involve manipulating tags and or a level of indirection. It may be possible to avoid some of this extra work in clever implementations (e.g. tags can be elided in SML NJ by relying on compiler generated symbol table information [1]) or to encode the information in some clever way to reduce its cost (e.g. in common integer arithmetic operations in many Lisp systems (e.g. see [21] and dereference operations in some Prolog systems [34, 35] In general, however, it is not possible to avoid altogether a performance penalty ....
.... how parameters for a procedure should be passed in registers or in memory, and in tagged or untagged form must be 2 This is not true of statically typed languages, however, and several authors have proposed tagless garbage collection schemes for statically typed languages (see, for example, [1, 17]) 9 made before any call to the procedure is generated, because it is necessary, for code generation, to know where to place inputs and where to expect outputs. The identification of arguments to a procedure that are eligible to be passed in untagged form proceeds as follows. An input argument ....
[Article contains additional citation context not shown here]
A. W. Appel, "Runtime tags aren't necessary", Lisp and Symbolic Computation 2:153--162, 1989.
....it marks the objects reachable from the roots present in that activation record. The map information may be maintained dynamically in the activation record [Wen88] or it may be generated statically, with the program counter used to locate the map corresponding to each activation record [Gol92, App89a] This solution permits source level compatibility with existing code; it requires recompilation of the libraries. Root registration: Collectors based on root registration record the addresses of the roots in auxiliary data structures, for example, the protection stack of [War87] and the root ....
....of conservative garbage collection. A type accurate garbage collector can (by definition) unambiguously locate the pointers in a program. Goldberg describes tag free garbage collection for polymorphic statically typed languages using compile time information [Gol92] building on work by Appel [App89a] Goldberg s compiler emits functions that know how to locate the pointers in all possible (necessary) activation records of the program. For example, if some function F contains two pointers as local variables, then another function would be emitted to mark from those pointers during a ....
Andrew W. Appel. Runtime tags aren't necessary. In Lisp and Symbolic Computation, volume 2, pages 153--162, 1989.
.... v ( either v = hint; ni = oe(p) or v = hproc; closure u 1 )i and oe(p) hproc; closure up 1 )i and up p and oe j=U up u : 1 The benefits of tag elimination are less clear for languages that require garbage collection, though even in this case it may be possible to remove all tags [1, 6] by oe j=V p v ( either v = hint; ni and oe(p) n or v = hproc; closure u 1 )i and M j=P oe(p) 1 and oe(p) u p and oe j=U oe(p) u u : We can weaken the requirement on the implementation by saying that if the abstract machine proceeds without invoking an error, then the ....
Appel, A.W., "Runtime Tags Aren't Necessary," Lisp and Symbolic Computation 2 (1989), 153--162.
....a typecase mechanism that allows the abstract type to be examined and different code can be selected according to this type. This can be used, for example, to support calling conventions where the environment is unboxed (i.e. placed in registers) As another example, tag free garbage collection [5, 2, 37, 24] relies upon type information being associated with closures so that the shape of values in the environment can be reconstructed during garbage collection. In essence, garbage collection, like typecase, is a non parametric operation that is allowed to examine types and select code according to the ....
A. W. Appel. Runtime tags aren't necessary. Journal of Lisp and Symbolic Computation, 2:153--162, 1989.
....different areas of memory; by examining the address of the record the garbage collector may look up its format. 3. In languages with static type systems (like Pascal or ML) the compiler can provide the garbage collector with a map of the type system, which will explain the format of run time data[9, 10]. In this paper, the record tagging scheme will be used, as this simplifies the layout of records in memory. When there are variable sized records, it is slightly more complicated to allocate records. In particular, it may not be as easy to use the auto decrement mode in allocation (if the ....
Andrew W. Appel, "Runtime Tags Aren't Necessary," CS-TR-142-88, Princeton University, 1988.
....time to deduce types. This is done by finding the calling function s variables, determining their types (recursively applying this algorithm if necessary) and rerunning the compiler s typeunification algorithm. A similar scheme for a stackbased tag free run time environment was described in [Appel89a]. The only disadvantage of this algorithm is that it may require time proportional to the depth of function call nesting; we hope to improve this for some common cases by specialized code analysis. Finally, we can use our knowledge about the binding site for a variable to display not only its ....
. A.W. Appel, "Runtime tags aren't necessary," Lisp and Symbolic Computation, vol. 2, pp. 153-162, 1989.
No context found.
A. W. Appel. Runtime tags aren't necessary. Journal of Lisp and Symbolic Computation, 2:153--162, 1989.
No context found.
A. Appel, "Runtime tags aren't necessary," Lisp and Symbolic Computation, 1989.
No context found.
AW Appel [1988], "Runtime tags aren't necessary," CS-TR-142-88, Department of Computer Science, Princeton University.
Online articles have much greater impact More about CiteSeer.IST Add search form to your site Submit documents Feedback
CiteSeer.IST - Copyright Penn State and NEC