Hostname: page-component-8448b6f56d-gtxcr Total loading time: 0 Render date: 2024-04-16T17:30:38.068Z Has data issue: false hasContentIssue false

Retrieving reusable software components by polymorphic type

Published online by Cambridge University Press:  10 August 2016

Colin Runciman
Affiliation:
Department of Computer Science, University of York, UK
Ian Toyn
Affiliation:
Department of Computer Science, University of York, UK
Rights & Permissions [Opens in a new window]

Abstract

Core share and HTML view are not available for this content. However, as you have access to this content, a full PDF is available via the ‘Save PDF’ action button.

Polymorphic types are labels classifying both (a) defined components in a library and (b) contexts of free variables in partially written programs. It is proposed to help programmers make better use of software libraries by providing a system that, given (b), identifies candidates from (a) with matching types. Assuming at first that matching means unifying (i.e. having a common instance), efficient ways of implementing such a retrieval system are discussed and its likely effectiveness based on a quantitative study of currently available libraries is indicated. The applicative instance relation between types, which captures some intuitions about generalization/specialization is then introduced, and its use as the basis of a more flexible system is discussed.

Type
Research Article
Copyright
Copyright © Cambridge University Press 1991

References

Augustsson, L. and Johnsson, T. 1987. LML users' manual. PMG Report, Department of Computer Science, Chalmers University of Technology, Goteborg, Sweden.Google Scholar
Burstall, R., MacQueen, D. and Sannella, D. 1980. HOPE: an experimental applicative language. In Record of the LISP Conference, pp. 136143. Association of Computing Machinery.Google Scholar
Cardelli, L. 1985. Basic polymorphic typechecking. Polymorphism, 2 (1) (January).Google Scholar
Conklin, J. 1987. Hypertext: an introduction and survey. IEEE Computer, 20 (9): pp. 1741.Google Scholar
Darlington, J. 1978. A synthesis of several sorting algorithms. Acta Informatica, 11: 130.Google Scholar
Dijkstra, E. W. 1976. A Discipline of Programming. Prentice-Hall.Google Scholar
Fairbairn, J. 1986. A new type-checker for a functional language. Sci. Comput. Program., 6 (3): 273290.Google Scholar
Jategaonkar, L. A. and Mitchell, J. C. 1988. ML with extended pattern matching and subtypes. In A CM Conference on LISP and Functional Programming, pp. 198211, Snowbird, Utah (Jul.).Google Scholar
Knuth, D. E. 1984. Literate programming. BCS Comput. J. 27 (2): 97111 (May).Google Scholar
Komorowski, H. T. 1982. QLOG-the programming environment for Prolog in LISP. In Clark, K. L. and Tarnlund, S.-A. (editors), Logic Programming, pp. 315322. Academic Press.Google Scholar
Martelli, A. and Montanari, U. 1982. An efficient unification algorithm. ACM Trans. Prog. Lang, and Syst., 4 (2): 258282. (Apr.).Google Scholar
Milner, R. 1984. A proposal for Standard ML. In Proc. 1984 ACM Symposium on LISP and Functional Programming, pp. 184197, Austin, Tex.CrossRefGoogle Scholar
Milner, R. 1978. A theory of type polymorphism in programming. J. Comput. and Syst. Sci., 17 (3): pp. 348375.Google Scholar
Peyton Jones, S. L. 1987. The Implementation of Functional Programming Languages. Prentice-Hall.Google Scholar
Reynolds, J. C. 1969. Transformation systems and the algebraic structure of atomic formulas. In Meitzer, B. and Michie, D. (editors), Machine Intelligence 5, pp. 135151. Edinburgh University Press.Google Scholar
Rittri, M. 1989. Using types as search keys in function libraries. In Proc. 1989 ACM Conf. Functional Programming Languages and Computer Architecture, London. (Sept.).Google Scholar
Runciman, C. and Toyn, I. 1989. Notes for Glide Users (4th edn.). Department of Computer Science, University of York, U.K. (Jan.).Google Scholar
Toyn, I. 1987. Exploratory environments for functional programming. D Phil Thesis YCST 87/02, Department of Computer Science, University of York, U.K. (Apr.).Google Scholar
Toyn, I., Dix, A. and Runciman, C. 1987. Performance polymorphism. In Functional Programming Languages and Computer Architecture, Lecture Notes in Computer Science, 274, pp. 325346. Springer-Verlag.Google Scholar
Turner, D. A. 1985. Miranda: A non-strict functional language with polymorphic types. In Jouannaud, Jean-Pierre (editor), Functional Programming Languages and Computer Architecture, Lecture Notes in Computer Science, 201, pp. 116. Springer-Verlag.Google Scholar
Wadler, P., Miller, Q. and Raskovsky, M. 1986. The OL Manual. Oxford University Computing Laboratory.Google Scholar
Warren, D. H. D. 1977. Implementing Prolog – compiling predicate logic programs. Research Reports 39 and 40, Department of Artificial Intelligence, University of Edinburgh, UK.Google Scholar
Wirth, N. 1983. Program development by stepwise refinement (reprint). Commun. ACM 26 (1): pp. 7074 (Jan.).CrossRefGoogle Scholar
Submit a response

Discussions

No Discussions have been published for this article.