A Machine-Oriented Logic Based on the Resolution Principle
Journal of the ACM (JACM)
Data Flow Analysis for Procedural Languages
Journal of the ACM (JACM)
A Scheme for the Automatic Inference of Variable Types
Journal of the ACM (JACM)
SIMULA: an ALGOL-based simulation language
Communications of the ACM
The Smalltalk-76 programming system design and implementation
POPL '78 Proceedings of the 5th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
A unified approach to global program optimization
POPL '73 Proceedings of the 1st annual ACM SIGACT-SIGPLAN symposium on Principles of programming languages
POPL '80 Proceedings of the 7th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
STOC '76 Proceedings of the eighth annual ACM symposium on Theory of computing
POPL '76 Proceedings of the 3rd ACM SIGACT-SIGPLAN symposium on Principles on programming languages
The design and construction of flexible and efficient interactive programming systems
The design and construction of flexible and efficient interactive programming systems
Towards monolingual programming environments
ACM Transactions on Programming Languages and Systems (TOPLAS) - Lecture notes in computer science Vol. 174
QUICKTALK: a Smalltalk-80 dialect for defining primitive methods
OOPLSA '86 Conference proceedings on Object-oriented programming systems, languages and applications
Hurricane: an optimizing compiler for Smalltalk
OOPLSA '86 Conference proceedings on Object-oriented programming systems, languages and applications
OOPLSA '86 Conference proceedings on Object-oriented programming systems, languages and applications
PLDI '89 Proceedings of the ACM SIGPLAN 1989 Conference on Programming language design and implementation
An efficient implementation of SELF a dynamically-typed object-oriented language based on prototypes
OOPSLA '89 Conference proceedings on Object-oriented programming systems, languages and applications
LFP '90 Proceedings of the 1990 ACM conference on LISP and functional programming
Toward a typed foundation for method specialization and inheritance
POPL '90 Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
POPL '90 Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
POPL '90 Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Object-oriented type inference
OOPSLA '91 Conference proceedings on Object-oriented programming systems, languages, and applications
CLOStrophobia: its etiology and treatment
ACM SIGPLAN OOPS Messenger
Interfaces and specifications for the Smalltalk-80 collection classes
OOPSLA '92 conference proceedings on Object-oriented programming systems, languages, and applications
Strongtalk: typechecking Smalltalk in a production environment
OOPSLA '93 Proceedings of the eighth annual conference on Object-oriented programming systems, languages, and applications
Precise concrete type inference for object-oriented languages
OOPSLA '94 Proceedings of the ninth annual conference on Object-oriented programming systems, language, and applications
Proceedings of the tenth annual conference on Object-oriented programming systems, languages, and applications
Benefits of type inference for an object-oriented real-time language
ACM SIGPLAN OOPS Messenger - Special issue: object-oriented real-time systems
Efficient dynamic dispatch without virtual function tables: the SmallEiffel compiler
Proceedings of the 12th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Proceedings of the 26th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Reifying configuration management for object-oriented software
Proceedings of the 20th international conference on Software engineering
Complexity of Points-To Analysis of Java in the Presence of Exceptions
IEEE Transactions on Software Engineering
Type checking, separate compilation and reusability
SIGPLAN '84 Proceedings of the 1984 SIGPLAN symposium on Compiler construction
Incremental polymorphic type checking in B
POPL '83 Proceedings of the 10th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
A type declaration and inference system for smalltalk
POPL '82 Proceedings of the 9th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
SPiCE: A System for Translating Smalltalk Programs Into a C Environment
IEEE Transactions on Software Engineering
The Cartesian Product Algorithm: Simple and Precise Type Inference Of Parametric Polymorphism
ECOOP '95 Proceedings of the 9th European Conference on Object-Oriented Programming
Creating efficient systems for object-oriented languages
POPL '84 Proceedings of the 11th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
LFP '84 Proceedings of the 1984 ACM Symposium on LISP and functional programming
The influence of an object-oriented language on the programming environment
CSC-83 Proceedings of the 1983 computer science conference
SOLAT - A Simple Object-Oriented Language Analyzing Tool
TOOLS '97 Proceedings of the Tools-23: Technology of Object-Oriented Languages and Systems
ACM SIGPLAN Notices - Best of PLDI 1979-1999
Static type determination for C++
CTEC'94 Proceedings of the 6th conference on USENIX Sixth C++ Technical Conference - Volume 6
ICDL '07 Proceedings of the 2007 international conference on Dynamic languages: in conjunction with the 15th International Smalltalk Joint Conference 2007
Practical, pluggable types for a dynamic language
Computer Languages, Systems and Structures
Efficient local type inference
Proceedings of the 23rd ACM SIGPLAN conference on Object-oriented programming systems languages and applications
Proceedings of the 2011 ACM Symposium on Applied Computing
Proceedings of the ACM international symposium on New ideas, new paradigms, and reflections on programming and software
TeJaS: retrofitting type systems for JavaScript
Proceedings of the 9th symposium on Dynamic languages
Hi-index | 0.02 |
Smalltalk is an object-oriented language designed andimplemented by the Learning Research (Group of the Xerox Palo AltoResearch Center [2, 5, 14]. Some features of this language are:abstract data classes, information inheritance by asuperclass-subclass mechanism, message passing semantics, extremelylate binding no type declarations, and automatic storagemanagement. Experience has shown that large complex systems can bewritten in Smalltalk in quite a short period of time; it is alsoused to teach programming to children quite effectively.Object-oriented languages like Smalltalk have begun to be acceptedas friendly languages for novice programmers on personalcomputers.However, Smalltalk has some drawbacks, too. Smalltalk programsare inefficient compared with Lisp or Pascal Late binding is amajor reason of this inefficiency; every time a procedure iscalled, its implementation in the current context has to befound.Because of late binding, whether there is an implementation of aprocedure call or not can only be found at run-time. This may beconvenient in the early stages of system development; one can run apartially completed system, and when he discovers a run-time errorcaused by an unimplemented procedure, he can write the procedurebody and proceed the computation from the point where the error wasdiscovered. However, there is no way to guarantee that there willbe no run-time errors. We found many "completed" systems whichstill had such run-time errors.Another problem is that it is hard for a novice to readSmalltalk programs written by other people. The fact that there areno type declarations and the fact that the bindings are late aremajor causes of unreadability. All the Smalltalk procedures are socalled generic procedures. Each procedure name is associated withseveral procedure bodies declared in different classes. Dependingon the classes of the arguments of a procedure call differentprocedure bodies are invoked. Since the classes of the argumentsmay differ according to the context, it is impossible to staticallypredict the behavior of the procedure calls.We observed that both inefficiency and unreadability areattributed to late binding; however, early binding can beeffectively accomplished if we can tell the classes of theprocedure arguments at compile time. In the long run probablySmalltalk needs to have "type" declarations---probably not rigiddeclarations of Pascal but rather in the form of hints to compilersand programmers. Even without changing the language it would benice to have a tool that supplies "type" declarations to currentSmalltalk or partially specified Smalltalk. This will also lead toefficient compilation.We thus concluded that we need to introduce "types" toSmalltalk. The introduction of types is more promising in Smalltalkthan in similarly declarationless language Lisp, since Smalltalkhas a rich user-defined abstract classes. Therefore, the moststraightforward approach to introduce types is to associate typesof variables to classes that variables denote and to associatetypes of procedures to mappings from classes to classes. Since avariable may denote objects of different classes, we define thetype of a variable to be a union of classes that the variable willever denote.The aim of this research is not to implement compilers forSmalltalk with type declarations. We intend to design tools tosupply type declarations to current Smalltalk programs. Completetype determination is neither possible nor desirable; people dowrite Smalltalk programs that take advantage of late bindings. Weare, therefore, interested in finding a relatively efficient methodthat can find types of expressions in a large number of cases.The problem of statically assigning types totype-declarationless programs is called type-inference problem. Wecan find a number of work on type inference [3, 4, 7, 9, 11, 15];these techniques are, however, either too restrictive or tooinefficient for our purpose. The only technique implemented, provento work for non-trivial cases, and used extensively was developedby Milner [7] to determine types for ML language of LCF. Eventhough ML language is much simpler than Smalltalk, the fact thatthere exists an efficient, versatile algorithm encouraged us toinvestigate whether we can extend the method.The LCF type checker produces a set of equations from proceduredeclarations and solves them by unification [12], to obtain thetypes of the procedures; it can run in linear time due to a fastunification algorithm invented recently [10]. We extended Milner'smethod so that we can treat unions of types; in our method,wecreate a set of equations and inequalities and solve them byunification and a transitive closure algorithm. This technique isgeneral and can be applied to other data-flow problems.The advantage of Milner's method and our method is that itreduces the problems to purely mathematical domain so that we canapply various formula manipulation algorithms, without consideringthe execution order or side-effects. Another advantage is thatthese methods can handle functions with polymorphic types.In section 2 we review earlier work on type inference. The briefintroduction of the syntax and the semantics of Smalltalk is donein section 3. Then we introduce the "types" into Smalltalk insection 4. We discuss the first part of our algorithm, how toextend LCF type checking algorithm for liberal unions of types, insection 5. Then in section 6 the whole algorithm is presented.Section 7 is concerned with the implementation and experience.Smalltalk has four major different versions of the language andimplementations. The version we used for our experiments isSmalltalk-76.