skip to main content
research-article

Implementing statically typed object-oriented programming languages

Published:29 April 2011Publication History
Skip Abstract Section

Abstract

Object-oriented programming represents an original implementation issue due to its philosophy of making the program behavior depend on the dynamic type of objects. This is expressed by the late binding mechanism, aka message sending. The underlying principle is that the address of the actually called procedure is not statically determined at compile-time, but depends on the dynamic type of a distinguished parameter known as the receiver. A similar issue arises with attributes, because their position in the object layout may also depend on the object's dynamic type. Furthermore, subtyping introduces another original feature (i.e., runtime subtype checks). All three mechanisms need specific implementations and data structures. In static typing, late binding is generally implemented with so-called virtual function tables. These tables reduce method calls to pointers to functions via a small fixed number of extra indirections. It follows that object-oriented programming yields some overhead, as compared to the usual procedural languages.

The different techniques and their resulting overhead depend on several parameters. First, inheritance and subtyping may be single or multiple, and even a mixing is possible, as in Java and ˙NET which present single inheritance for classes and multiple subtyping for interfaces. Multiple inheritance is a well-known complication. Second, the production of executable programs may involve various schemes, from global compilation, which implies the closed-world assumption (CWA), as the whole program is known at compile time, to separate compilation and dynamic loading, where each program unit is compiled and loaded independently of any usage, hence under the open-world assumption (OWA). Global compilation is well-known to facilitate optimization.

This article reviews the various implementation techniques available in static typing and in the three cases of single inheritance, multiple inheritance, and multiple subtyping. This language-independent survey focuses on separate compilation and dynamic loading, as they represent the most commonly used and the most demanding framework. However, many works have been undertaken in the global compilation framework, mostly for dynamically typed languages, but also applied to the EIFFEL language. Hence, we also examine global techniques and how they can improve implementation efficiency. Finally, mixed frameworks that combine open and closed world assumptions are considered. For instance, just-in-time (JIT) compilers work under provisional CWA, at the expense of possible recompilations. In contrast, we present an experimental compiler-linker, where separate compilation implies the OWA, whereas the whole program is finally linked under the CWA.

Skip Supplemental Material Section

Supplemental Material

References

  1. Agesen, O. 1996. Concrete type inference: Delivering object-oriented applications. Ph.D. dissertation, Stanford University, Stanford, CA. Google ScholarGoogle ScholarDigital LibraryDigital Library
  2. Agesen, O. and Holzle, U. 1995. Type feedback vs. concrete type inference: A comparison of optimization techniques for object-oriented languages. ACM SIGPLAN Not. 30, 10, 91--107. Google ScholarGoogle ScholarDigital LibraryDigital Library
  3. Alpern, B., Attanasio, C., Barton, J., Cocchi, A., Hummel, S., Lieber, D., Ngo, T., Mergen, M., Shepherd, J., and Smith, S. 1999. Implementing Jalapeno in Java. ACM SIGPLAN Not. 34,10, 314--324. Google ScholarGoogle ScholarDigital LibraryDigital Library
  4. Alpern, B., Cocchi, A., Fink, S., and Grove, D. 2001a. Efficient implementation of Java interfaces: Invoke interface considered harmless. ACM SIGPLAN Not. 36, 10, 108--124. Google ScholarGoogle ScholarDigital LibraryDigital Library
  5. Alpern, B., Cocchi, A., and Grove, D. 2001b. Dynamic type checking in Jalapeno In Proceedings of the 2001 Symposium of the Java#8482;Virtual Machine Research and Technology Symposium. Vol. 1, USENIX Association, Berkeley, CA. Google ScholarGoogle ScholarDigital LibraryDigital Library
  6. Ancona, D., Lagorio, G., and Zucca, E. 2003. Jam—Designing a Java extension with mixins. ACM Trans. Program. Lang. Syst. 25, 5, 641--712. Google ScholarGoogle ScholarDigital LibraryDigital Library
  7. André, P. and Royer, J.-C. 1992. Optimizing method search with lookup caches and incremental coloring. ACM SIGPLAN Not. 27, 10, 110--126. Google ScholarGoogle ScholarDigital LibraryDigital Library
  8. Arnold, M., Fink, S., Grove, D., Hind, M., and Sweeney, P. 2005. A survey of adaptive optimization in virtual machines. Proc. IEEE 93, 2, 449--466.Google ScholarGoogle ScholarCross RefCross Ref
  9. Bacon, D. and Sweeney, P. 1996. Fast static analysis of C++ virtual function calls. ACM SIGPLAN Not. 31, 10, 324--341. Google ScholarGoogle ScholarDigital LibraryDigital Library
  10. Blackburn, S. M., Garner, R., Hoffmann, C., Khang, A. M., McKinley, K. S., Bentzur, R., Diwan, A., Feinberg, D., Frampton, D., Guyer, S. Z., Hirzel, M., Hosking, A., Jump, M., Lee, H., Moss, J. E. B., Moss, B., Phansalkar, A., Stefanovic, D., VanDrunen, T., von Dincklage, D., and Wiedermann, B. 2006. The DaCapo benchmarks: Java benchmarking development and analysis. ACM SIGPLAN Not. 41, 10, 169--190. Google ScholarGoogle ScholarDigital LibraryDigital Library
  11. Boehm, H.-J. 1993. Space-efficient conservative garbage collection. ACM SIGPLAN Not. 28, 6, 197--206. Google ScholarGoogle ScholarDigital LibraryDigital Library
  12. Boucher, D. 2000. GOld: A link-time optimizer for Scheme. In Proceedings of the Workshop on Scheme and Functional Programming. (Rice Tech. rep. 00-368, 1--12.)Google ScholarGoogle Scholar
  13. Boyland, J. and Castagna, G. 1996. Type-safe compilation of covariant specialization: A practical case. In Proceedings of the European Conference on Object-Oriented Programming. Lecture Notes in Computer Science, vol. 1098. Springer, Berlin, 3--25. Google ScholarGoogle ScholarDigital LibraryDigital Library
  14. Bracha, G. and Cook, W. 1990. Mixin-based inheritance. ACM SIGPLAN Not. 25, 10, 303--311. Google ScholarGoogle ScholarDigital LibraryDigital Library
  15. Burton, K. R. 2002. NET Common Language Runtime Unleashed. SAMS Publishers. Google ScholarGoogle ScholarDigital LibraryDigital Library
  16. Calder, B. and Grunwald, D. 1994. Reducing indirect function call overhead in C++ programs. In Proceedings of the 21st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL'94). ACM, New York, 397--408. Google ScholarGoogle ScholarDigital LibraryDigital Library
  17. Cargill, T. A. 1991. Controversy: The case against multiple inheritance in C++. Comput. Syst. 4, 1, 69--82.Google ScholarGoogle Scholar
  18. Castagna, G. 1997. Object-Oriented Programming: A United Foundation. Birkhauser. Google ScholarGoogle ScholarDigital LibraryDigital Library
  19. Chambers, C. and Ungar, D. 1989. Customization: Optimizing compiler technology for SELF, a dynamically-typed object-oriented language. ACM SIGPLAN Not. 24, 10, 146--160. Google ScholarGoogle ScholarDigital LibraryDigital Library
  20. Chen, W., Turau, V., and Klas, W. 1994. Efficient dynamic look-up strategy for multi-methods. In Proceedings of the European Conference on Object-Oriented Programming. Lecture Notes in Computer Science, vol. 821, Springer, Berlin, 408--431. Google ScholarGoogle ScholarDigital LibraryDigital Library
  21. Chilimbi, T. M., Davidson, B., and Larus, J. R. 1999. Cache-conscious structure deffinition. ACM SIGPLAN Not. 34, 5, 1--12. Google ScholarGoogle ScholarDigital LibraryDigital Library
  22. Click, C. and Rose, J. 2002. Fast subtype checking in the Hotspot JVM. In Proceedings of the Joint ACM-ISCOPE Conference on Java Grande (JGI'02). ACM, New York, 96--107. Google ScholarGoogle ScholarDigital LibraryDigital Library
  23. Cohen, N. H. 1991. Type-extension type tests can be performed in constant time. ACM Trans. Program. Lang. Syst. 13, 4, 626--629. Google ScholarGoogle ScholarDigital LibraryDigital Library
  24. Collin, S., Colnet, D., and Zendra, O. 1997. Type inference for late binding. the SmallEiffel compiler. In Proceedings of the Joint Modular Languages Conference. Lecture Notes in Computer Science, vol. 1204. Springer, Berlin, 67--81. Google ScholarGoogle ScholarDigital LibraryDigital Library
  25. Cook, W. R. 1989. A proposal for making Eiffel type-safe. In Proceedings of the European Conference on Object-Oriented Programming. S. Cook, Ed., Cambridge University Press, 57--70.Google ScholarGoogle ScholarDigital LibraryDigital Library
  26. Czech, Z. J., Havas, G., and Majewski, B. S. 1997. Perfect hashing. Theor. Comput. Sci. 182, 1, 2, 1--143. Google ScholarGoogle ScholarDigital LibraryDigital Library
  27. Dean, J., Chambers, C., and Grove, D. 1995. Selective specialization for object-oriented languages. ACM SIGPLAN Not. 30, 6, 93--102. Google ScholarGoogle ScholarDigital LibraryDigital Library
  28. Dean, J., Grove, D., and Chambers, C. 1995. Optimization of object-oriented programs using static class hierarchy analysis. In Proceedings of the European Conference on Object-Oriented Programming. W. Olthoff Ed. Lecture Notes in Computer Science, vol. 952, Springer, Berlin, 77--101. Google ScholarGoogle ScholarDigital LibraryDigital Library
  29. Dijkstra, E. W. 1960. Recursive programming. Numer. Math. 2, 312--318.Google ScholarGoogle ScholarDigital LibraryDigital Library
  30. Dixon, R., McKee, T., Schweitzer, P., and Vaughan, M. 1989. A fast method dispatcher for compiled languages with multiple inheritance. ACM SIGPLAN Not. 24, 10, 211--214. Google ScholarGoogle ScholarDigital LibraryDigital Library
  31. Driesen, K. 2001. Efficient Polymorphic Calls. Kluwer, Amsterdam. Google ScholarGoogle ScholarDigital LibraryDigital Library
  32. Driesen, K. and Holzle, U. 1995. Minimizing row displacement dispatch tables. ACM SIGPLAN Not. 30, 10, 141--155. Google ScholarGoogle ScholarDigital LibraryDigital Library
  33. Driesen, K. and Holzle, U. 1996. The direct cost of virtual function calls in C++. ACM SIGPLAN Not. 31, 10, 306--323. Google ScholarGoogle ScholarDigital LibraryDigital Library
  34. Driesen, K., Holzle, U., and Vitek, J. 1995. Message dispatch on pipelined processors. In Proceedings of the European Conference on Object-Oriented Programming. W. Olthoff Ed. Lecture Notes in Computer Science, vol. 952, Springer, Berlin, 253--282. Google ScholarGoogle ScholarDigital LibraryDigital Library
  35. Driesen, K. and Zendra, O. 2002. Stress-testing control structures for dynamic dispatch in Java. In Proceedings of the Java Virtual Machine Research and Technology Symposium (JVM'02). USENIX Association, Berkeley, CA, 105--118. Google ScholarGoogle ScholarDigital LibraryDigital Library
  36. Ducournau, R. 1991. Yet Another Frame-based Object-Oriented Language: YAFOOL Reference Manual. Sema Group, Montrouge, France.Google ScholarGoogle Scholar
  37. Ducournau, R. 1997. La compilation de l'envoi de message dans les langages dynamiques. L'Objet 3, 3, 241--276.Google ScholarGoogle Scholar
  38. Ducournau, R. 2011. Coloring, a versatile technique for implementing object-oriented languages. Softw. Prac. Exper. 41, 6, 627--659. Google ScholarGoogle ScholarDigital LibraryDigital Library
  39. Ducournau, R. 2008. Perfect hashing as an almost perfect subtype test. ACM Trans. Program. Lang. Syst. 30, 6, 1--56. Google ScholarGoogle ScholarDigital LibraryDigital Library
  40. Ducournau, R., Habib, M., Huchard, M., and Mugnier, M.-L. 1994. Proposal for a monotonic multiple inheritance linearization. ACM SIGPLAN Not. 29, 10, 164--175. Google ScholarGoogle ScholarDigital LibraryDigital Library
  41. Ducournau, R. and Morandat, F. 2011. Perfect class hashing and numbering for object-oriented implementation. Softw. Prac. Exper. 41, 6, 661--694. Google ScholarGoogle ScholarDigital LibraryDigital Library
  42. Ducournau, R., Morandat, F., and Privat, J. 2009. Empirical assessment of object-oriented implementations with multiple inheritance and static typing. ACM SIGPLAN Not. 44, 10, 41--60. Google ScholarGoogle ScholarDigital LibraryDigital Library
  43. Ducournau, R. and Privat, J. 2011. Metamodeling semantics of multiple inheritance. Science Comput. Program. 76, 7, 555--586. Google ScholarGoogle ScholarDigital LibraryDigital Library
  44. Dujardin, E., Amiel, E., and Simon, E. 1998. Fast algorithms for compressed multimethod dispatch table generation. ACM Trans. Program. Lang. Syst. 20, 1, 116--165. Google ScholarGoogle ScholarDigital LibraryDigital Library
  45. Eckel, N. and Gil, J. 2000. Empirical study of object-layout and optimization techniques. In Proceedings of the European Conference on Object-Oriented Programming. E. Bertino Ed. Lecture Notes in Computer Science, vol. 1850, Springer, Berlin, 394--421. Google ScholarGoogle ScholarDigital LibraryDigital Library
  46. Ellis, M. and Stroustrup, B. 1990. The Annotated C++ Reference Manual. Addison-Wesley, Reading, MA. Google ScholarGoogle ScholarDigital LibraryDigital Library
  47. Ernst, E. 2002. Safe dynamic multiple inheritance. Nord. J. Comput 9, 1, 191--208. Google ScholarGoogle ScholarDigital LibraryDigital Library
  48. Fähndrich, M. and Leino, K. R. M. 2003. Declaring and checking non-null types in an object-oriented language. ACM SIGPLAN Not. 38, 11, 302--312. Google ScholarGoogle ScholarDigital LibraryDigital Library
  49. Gagnon, E. M. and Hendren, L. J. 2001. SableVM: A research framework for the efficient execution of Java bytecode. In Proceedings of the Symposium on Java#8482;Virtual Machine Research and Technology Symposium (JVM'01). Vol. 1, USENIX Association, Berkeley, CA, 27--40. Google ScholarGoogle ScholarDigital LibraryDigital Library
  50. Garey, M. R. and Johnson, D. S. 1979. Computers and Intractability. A Guide to the Theory of NP-Completeness. W. H. Freeman Co., San Francisco, CA. Google ScholarGoogle ScholarDigital LibraryDigital Library
  51. Gil, J. and Itai, A. 1998. The complexity of type analysis of object oriented programs. In Proceedings of the European Conference on Object-Oriented Programming. Lecture Notes in Computer Science, vol. 1445. Springer, Berlin, 601--634. Google ScholarGoogle ScholarDigital LibraryDigital Library
  52. Gil, J. and Sweeney, P. 1999. Space and time-efficient memory layout for multiple inheritance. ACM SIGPLAN Not. 34, 10, 256--275. Google ScholarGoogle ScholarDigital LibraryDigital Library
  53. Gil, J. and Zibin, Y. 2005. Efficient subtyping tests with PQ-encoding. ACM Trans. Program. Lang. Syst. 27, 5, 819--856. Google ScholarGoogle ScholarDigital LibraryDigital Library
  54. Gil, J. and Zibin, Y. 2007. Efficient dynamic dispatching with type slicing. ACM Trans. Program. Lang. Syst. 30, 1, 5, 1--53. Google ScholarGoogle ScholarDigital LibraryDigital Library
  55. Goldberg, A. and Robson, D. 1983. Smalltalk-80, the Language and its Implementation. Addison-Wesley, Reading, MA. Google ScholarGoogle ScholarDigital LibraryDigital Library
  56. Gosling, J., Joy, B., Steele, G., and Bracha, G. 2005. The JAVA Language Specification 3rd Ed. Addison-Wesley, Reading, MA. Google ScholarGoogle ScholarDigital LibraryDigital Library
  57. Grove, D. and Chambers, C. 2001. A framework for call graph construction algorithms. ACM Trans. Program. Lang. Syst. 23, 6, 685--746. Google ScholarGoogle ScholarDigital LibraryDigital Library
  58. Holst, W., Szafron, D., Leontiev, Y., and Pang, C. 1998. Multi-method dispatch using single-receiver projections. Tech. rep. TR-98-03, University of Alberta, Edmonton.Google ScholarGoogle Scholar
  59. Hölzle, U., Chambers, C., and Ungar, D. 1991. Optimizing dynamically-typed object-oriented languages with polymorphic inline caches. In Proceedings of the European Conference on Object-Oriented Programming, P. America Ed. Lecture Notes in Computer Science, vol. 512, Springer, Berlin, 21--38. Google ScholarGoogle ScholarDigital LibraryDigital Library
  60. Huchard, M. and Leblanc, H. 2000. Computing interfaces in Java. In Proceedings of the IEEE International Conference on Automated Software Engineering (ASE'00). IEEE. Los Alamitos, CA, 317--320. Google ScholarGoogle ScholarDigital LibraryDigital Library
  61. Hullot, J.-M. 1985. Ceyx version 15. Tech. rep. 44-46, INRIA.Google ScholarGoogle Scholar
  62. Ingalls, D., Kaehler, T., Maloney, J., Wallace, S., and Kay, A. 1997. Back to the future: The story of Squeak—A usable Smalltalk written in itself. ACM SIGPLAN Not. 32, 10. 318--326. Google ScholarGoogle ScholarDigital LibraryDigital Library
  63. Jones, R. and Lins, R. 1996. Garbage Collection. Wiley, New York.Google ScholarGoogle Scholar
  64. Jul, E. 2008. Precomputing method lookup. In Proceedings of the 22nd European Conference on Object-Oriented Programming (ECOOP'08).Google ScholarGoogle Scholar
  65. Kennedy, A. and Syme, D. 2001. Design and implementation of generics for the ˙NET common language runtime. ACM SIGPLAN Not. 36, 5, 1--12. Google ScholarGoogle ScholarDigital LibraryDigital Library
  66. Kiczales, G. and Rodriguez, L. 1990. Efficient method dispatch in PCL. In Proceedings of the ACM Conference on Lisp and Functional Programming. ACM, New York, 99--105. Google ScholarGoogle ScholarDigital LibraryDigital Library
  67. Knuth, D. E. 1973. The Art of Computer Programming, Sorting and Searching. Vol. 3. Addison- Wesley, Reading, MA.Google ScholarGoogle Scholar
  68. Koenig, A. 1998. Standard -- The C++ language. Tech. rep. ISO/IEC 14882:1998.Google ScholarGoogle Scholar
  69. Information Technology Council (NCTIS). http://www.nctis.org/cplusplus.htm.Google ScholarGoogle Scholar
  70. Krall, A. and Grafl, R. 1997. CACAO - A 64 bits JavaVM just-in-time compiler. Concurrency. Pract. Exper. 9, 11, 1017--1030.Google ScholarGoogle ScholarCross RefCross Ref
  71. Krogdahl, S. 1985. Multiple inheritance in Simula-like languages. BIT 25, 2, 318--326. Google ScholarGoogle ScholarDigital LibraryDigital Library
  72. Lippman, S. B. 1996. Inside the C++ Object Model. Addison-Wesley Professional. Google ScholarGoogle ScholarDigital LibraryDigital Library
  73. Liskov, B., Curtis, D., Day, M., Ghemawat, S., Gruber, R., Johnson, P., and Myers, A. C. 1995. THETA Reference Manual. Tech. rep. MIT, Cambridge, MA.Google ScholarGoogle Scholar
  74. Meyer, B. 1992. Eiffel:The Language. Prentice-Hall, Englewood Cliffs, NJ. Google ScholarGoogle ScholarDigital LibraryDigital Library
  75. Meyer, B. 1997. Object-Oriented Software Construction 2nd Ed. Prentice-Hall, Englewood Cliffs, NJ. Google ScholarGoogle ScholarDigital LibraryDigital Library
  76. Meyer, J. and Downing, T. 1997. JAVA Virtual Machine. O'Reilly. Google ScholarGoogle ScholarDigital LibraryDigital Library
  77. Microsoft. 2001. C# language specifications, v0.28. Tech. rep. Microsoft Corp.Google ScholarGoogle Scholar
  78. Mugridge, W. B., Hamer, J., and Hosking, J. G. 1991. Multi-methods in a statically-typed programming language. In Proceedings of the European Conference on Object-Oriented Programming. P. America Ed. Lecture Notes in Computer Science, vol. 512. Springer, Berlin, 307--324. Google ScholarGoogle ScholarDigital LibraryDigital Library
  79. Muthukrishnan, S. and Muller, M. 1996. Time and space efficient method lookup for object-oriented languages. In Proceedings of the ACM-SIAM Symposium on Discrete Algorithms, ACM/SIAM, 42--51. Google ScholarGoogle ScholarDigital LibraryDigital Library
  80. Myers, A. 1995. Bidirectional object layout for separate compilation. ACM SIGPLAN Not. 30, 10, 124--139. Google ScholarGoogle ScholarDigital LibraryDigital Library
  81. Odersky, M., Spoon, L., and Venners, B. 2008. Programming In Scala. A Comprehensive Step-By-Step Guide. Artima. Google ScholarGoogle ScholarDigital LibraryDigital Library
  82. Odersky, M. and Wadler, P. 1997. Pizza into Java: Translating theory into practice. In Proceedings of the 24th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages. ACM, New York, 146--159. Google ScholarGoogle ScholarDigital LibraryDigital Library
  83. Palacz, K. and Vitek, J. 2003. Java subtype tests in real-time. In Proceedings of the European Conference on Object-Oriented Programming. L. Cardelli Ed., Lecture Notes in Computer Science, vol. 2743. Springer, Berlin, 378--404.Google ScholarGoogle Scholar
  84. Privat, J. and Ducournau, R. 2005. Link-time static analysis for efficient separate compilation of object-oriented languages. In Proceedings of the 6th ACM SIGPLAN-SIGSOFT Workshop on Program Analysis for Software Tools and Engineering (PASTE'05). ACM, New York, 20--27. Google ScholarGoogle ScholarDigital LibraryDigital Library
  85. Pugh, W. and Weddell, G. 1990. Two-directional record layout for multiple inheritance. ACM SIGPLAN Not. 25, 6, 85--91. Google ScholarGoogle ScholarDigital LibraryDigital Library
  86. Pugh, W. and Weddell, G. E. 1993. On object layout for multiple inheritance. Tech. rep., CS-93-22, University of Waterloo.Google ScholarGoogle Scholar
  87. Queinnec, C. 1998. Fast and compact dispatching for dynamic object-oriented languages. Inf. Process. Lett. 64, 6, 315--321. Google ScholarGoogle ScholarDigital LibraryDigital Library
  88. Raynaud, O. and Thierry, E. 2001. A quasi-optimal bit-vector encoding of tree hierarchies. Application to Efficient type inclusion tests. In Proceedings of the European Conference on Object-Oriented Programming. J. L. Knudsen Ed. Lecture Notes in Computer Science, vol. 2072. Springer, Berlin, 165--180. Google ScholarGoogle ScholarDigital LibraryDigital Library
  89. Sakkinen, M. 1989. Disciplined inheritance. In Proceedings of the European Conference on Object-Oriented Programming. S. Cook Ed. Cambridge University Press, 39--58.Google ScholarGoogle Scholar
  90. Sakkinen, M. 1992. A critique of the inheritance principles of C++. Comput. Syst. 5, 1, 69--110.Google ScholarGoogle Scholar
  91. Schubert, L., Papalaskaris, M., and Taugher, J. 1983. Determining type, part, color and time relationship. Computer 16, 53--60. Google ScholarGoogle ScholarDigital LibraryDigital Library
  92. Shang, D. L. 1996. Are cows animals? http://www.visviva.com/transframe/papers/covar.htm.Google ScholarGoogle Scholar
  93. Shivers, O. 1991. Control-flow analysis of higher-order languages. Ph.D. dissertation, Carnegie Mellon University. Google ScholarGoogle ScholarDigital LibraryDigital Library
  94. Smaragdakis, Y. and Batory, D. 2002. Mixin layers: An object-oriented implementation technique for refinements and collaboration-based designs. ACM Trans. Soft. Eng. Meth. 11, 2, 215--255. Google ScholarGoogle ScholarDigital LibraryDigital Library
  95. Sprugnoli, R. 1977. Perfect hashing functions: A single probe retrieving method for static sets. Commun. ACM 20, 11, 841--850. Google ScholarGoogle ScholarDigital LibraryDigital Library
  96. Steele, G. L. 1990. Common Lisp, the Language. 2nd Ed. Digital Press. Google ScholarGoogle ScholarDigital LibraryDigital Library
  97. Stefik, M. and Bobrow, D. 1986. Object-oriented programming: Themes and variations. AI Magazine 6, 4, 40--62. Google ScholarGoogle ScholarDigital LibraryDigital Library
  98. Stroustrup, B. 1998. The C++ Programming Language 3rd Ed. Addison-Wesley, Reading, MA. Google ScholarGoogle ScholarDigital LibraryDigital Library
  99. Sweeney, P. F. and Burke, M. G. 2003. Quantifying and evaluating the space overhead for alternative C++ memory layouts. Softw. Pract. Exper. 33, 7, 595--636. Google ScholarGoogle ScholarDigital LibraryDigital Library
  100. Taft, S. T., Duff, R. A., Brukardt, R. L., Ploedereder, E., and Leroy, P. (eds.) 2006. Ada Reference Manual: Language and Standard Libraries. Lecture Notes in Computer Science, vol. 4348. Springer, Berlin. Google ScholarGoogle ScholarDigital LibraryDigital Library
  101. Tarjan, R. E. and Yao, A.C. C. 1979. Storing a sparse table. Comm. ACM 22, 11, 606--611. Google ScholarGoogle ScholarDigital LibraryDigital Library
  102. Tip, F. and Sweeney, P. F. 2000. Class hierarchy specialization. Acta Informatica 36, 12, 927--982. Google ScholarGoogle ScholarDigital LibraryDigital Library
  103. Torgersen, M. 1998. Virtual types are statically safe. In Proceedings of the 5th Workshop on Foundations of Object-Oriented Languages (FOOL 5).Google ScholarGoogle Scholar
  104. Ungar, D. and Smith, R. 1987. SELF: The power of simplicity. ACM SIGPLAN Not. 22,12, 227--242. Google ScholarGoogle ScholarDigital LibraryDigital Library
  105. VanHilst, M. and Notkin, D. 1996. Using role components to implement collaboration-based designs. ACM SIGPLAN Not. 31, 10, 359--369. Google ScholarGoogle ScholarDigital LibraryDigital Library
  106. Vitek, J. and Horspool, R. N. 1994. Taming message passing: Efficient method look-up for dynamically typed languages. In Proceedings of the European Conference on Object-Oriented Programming. M. Tokoro and R. Pareschi Eds. Lecture Notes in Computer Science, vol. 821. Springer, Berlin, 432--449. Google ScholarGoogle ScholarDigital LibraryDigital Library
  107. Vitek, J., Horspool, R. N., and Krall, A. 1997. Efficient type inclusion tests. ACM SIGPLAN Not. 32, 10, 142--157. Google ScholarGoogle ScholarDigital LibraryDigital Library
  108. Vitter, J. S. and Flajolet, P. 1990. Average-case analysis of algorithms and data structures. In Algorithms and Complexity. Handbook of Theoretical Computer Science. Vol. 1, J. Van Leeuwen Ed. Elsevier, Amsterdam, 431--524. Google ScholarGoogle ScholarDigital LibraryDigital Library
  109. Waldo, J. 1991. Controversy: The case for multiple inheritance in C++. Comput. Syst. 4, 2, 157--171.Google ScholarGoogle Scholar
  110. Wang, T. and Smith, S. 2001. Precise constraint-based type inference for Java. In Proceedings of the European Conference on Object-Oriented Programming. J. L. Knudsen Ed. Lecture Notes in Computer Science, vol. 2072. Springer, Berlin, 99--117. Google ScholarGoogle ScholarDigital LibraryDigital Library
  111. Weber, F. 1992. Getting class correctness and system correctness equivalent—How to get covariant right. In Proceedings of the Conference on Technology of Object-Oriented Languages and Systems (TOOLS 8). R. Ege et al. Eds. 192--213. Google ScholarGoogle ScholarDigital LibraryDigital Library
  112. Wilson, P. R. 1992. Uniprocessor garbage collection techniques. In Proceedings of the International Workshop on Memory Management (IWMM'92). Lecture Notes in Computer Science, vol. 637, Springer, Berlin, 1--42. Google ScholarGoogle ScholarDigital LibraryDigital Library
  113. Zendra, O., Colnet, D., and Collin, S. 1997. Efficient dynamic dispatch without virtual function tables: The SmallEiffel compiler. ACM SIGPLAN Not. 32, 10, 125--141. Google ScholarGoogle ScholarDigital LibraryDigital Library
  114. Zibin, Y. and Gil, J. 2002. Fast algorithm for creating space Efficient dispatching tables with application to multi-dispatching. ACM SIGPLAN Not. 37, 10, 142--160. Google ScholarGoogle ScholarDigital LibraryDigital Library
  115. Zibin, Y. and Gil, J. 2003a. Incremental algorithms for dispatching in dynamically typed languages. ACM SIGPLAN Not. 38, 1, 126--138. Google ScholarGoogle ScholarDigital LibraryDigital Library
  116. Zibin, Y. and Gil, J. 2003b. Two-dimensional bi-directional object layout. In Proceedings of the European Conference on Object-Oriented Programming. L. Cardelli Ed. Lecture Notes in Computer Science, vol. 2743, Springer, Berlin, 329--350.Google ScholarGoogle Scholar

Index Terms

  1. Implementing statically typed object-oriented programming languages

                Recommendations

                Comments

                Login options

                Check if you have access through your login credentials or your institution to get full access on this article.

                Sign in

                Full Access

                PDF Format

                View or Download as a PDF file.

                PDF

                eReader

                View online with eReader.

                eReader