Generating Efficient Portable Code for a Strict Applicative Language

  • Wolfram Schulte
  • Wolfgang Grieskamp
Conference paper
Part of the Workshops in Computing book series (WORKSHOPS COMP.)


We discuss the overall style of code generation for the strict applicative language OPAL. It differs in two respects from the usual declarative language implementations. Firstly, instead of compiling to an abstract machine, we use C as the target language, inheriting many of the machine-dependent low-level optimizations nowadays performed by C compilers. Secondly, instead of using a copying or scanning garbage collector, we use an optimized variant of the classical reference counting scheme, resulting in a residual garbage collector and the capability to perform run-time-detected selective update on recursive data structures.


Garbage Collection Abstract Machine Garbage Collector Reference Counting Table Pointer 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. [1]
    Field, A.J., Harrison, P.G.: Functional Programming. Addison—Wesley (1988).Google Scholar
  2. [2]
    Peyton Jones, S.L.: The Implementation of Functional Programming Languages. Prentice—Hall (1987).Google Scholar
  3. [3]
    Cohen, J.: Garbage Collection of Linked Data Structures. Computing Surveys 13, 341–367 (1981).CrossRefMathSciNetGoogle Scholar
  4. [4]
    Appel, A.W.: Garbage collection can be faster than stack allocation. Inform. Proc. Letters 25, 275–279 (1978).CrossRefGoogle Scholar
  5. [5]
    Kernighan, B., Ritchie D.M.: The C Programming Language. 2nd. Ed. Prentice Hall (1988).Google Scholar
  6. [6]
    Pepper, P. (ed.): The Programming Language OPAL-1. Technical Report May-91, TU-Berlin (1991).Google Scholar
  7. [7]
    Milner, R., Tofte, M., Harper, R.: The Definition of Standard ML. MIT Press (1990).Google Scholar
  8. [8]
    Perry, N.: Hope+. Dept. of Computing, Imperial College London Internal Report IC/FPR/LANG /2. 5. 1 /7 (1988).MathSciNetGoogle Scholar
  9. [9]
    Bauer, F.L., Wössner, H.: Algorithmic Language and Program Development. Springer (1981).Google Scholar
  10. [10]
    Appel, A.W., MacQueen, D.B.: A Standard ML Compiler. In: Functional Programming Languages and Computer Architecture, (ed.) Kahn G, LNCS 274, 301324 (1987).Google Scholar
  11. [11]
    Aho, A.V., Hoperaft, J.E., Ullman, J D: Data Structures and Algorithms. Addison—Wesley (1983).Google Scholar
  12. [12]
    Hecht, M.S.: Flow Analysis of Computer Programs. Elsevier North-Holland (1981).Google Scholar
  13. [13]
    Weinstock, C.B., Wulf, W.A.: Quick Fit: An Efficient Algorithm for Heap Storage Allocation. SIGPLAN Notices 23, 141–148, (1988).CrossRefGoogle Scholar
  14. [14]
    Weizenbaum, J.: Symmetric List Processor. Communications of the ACM 6, 524544 (1963).Google Scholar
  15. [15]
    Clark, D.W., Green, C.C.: A Note on Shared List Structure in Lisp. Inform. Proc. Letters 7, 312–314 (1978).CrossRefGoogle Scholar
  16. [16]
    Stansifer, R.: Imperative versus Functional. SIGPLAN Notices 25, 69–72 (1990).CrossRefGoogle Scholar
  17. [17]
    Aasa, A., Holmström, S., Nilsson, C.: An Efficiency Comparison of Purely Functional Arrays. BIT 28, 490–503 (1988).MATHMathSciNetGoogle Scholar
  18. [18]
    Leroy, X.: The ZINC Experiment: An Economical Implementation of the ML Language. INRIA, Rapports Techniques No. 117 (1990).Google Scholar

Copyright information

© Springer-Verlag London 1992

Authors and Affiliations

  • Wolfram Schulte
    • 1
  • Wolfgang Grieskamp
    • 1
  1. 1.Institut für Angewandte InformatikTechnische Universität BerlinGermany

Personalised recommendations