The term "strongly typed" is ambiguos and this thread is the living proof of that.
In the introduction of http://lucacardelli.name/Papers/OnUnderstanding.A4.pdf Luca Cardelli talks about untyped universes and later about Smalltalk. For me Smalltalk is a dynamically typed language with implicit type definitions and dynamic type checking. As Esteban said in the industry is really common to hear strongly typed = static type checking, in the academia the term it's used for more than one thing (http://en.m.wikipedia.org/wiki/Strong_and_weak_typing), so in order to avoid miscommunications I prefer the concepts "type declaration" (implicit vs explicit) and "type-checking" (dynamic, static or no type checking at all). Cheers, On Saturday, August 3, 2013, Juan Vuletich (mail lists) wrote: > BTW, I especially like the idea that Smalltalk is Multityped, as an object > can respond to several protocols/interfaces/type specs. So true! > > Quoting "Carla F. Griggio" <[email protected] <javascript:_e({}, > 'cvml', '[email protected]');>>: > > Well, I've always defined a type as the a set of values and the operations > you can do with them. For example, the set of values { 1, 2, 3, 4, ... } > and the operations { + , - , * , ... } would be the type Integer. With that > in mind, *Smalltalk has types: a set of objects and the messages they > understand*. And thanks to polymorphism a type *is not* a synonym of a > class, as instances of different objects can understand messages in common. > So yes, "everything is an object" beacuse all objects are instances of a > class that inherits from Object, but from my point of view it's not true > that all objects are of one same type. > > Everytime an object doesn't understand a message is telling you that > you're doing an operation on the wrong type of object. > > As some others have already said, I don't like the terms "strongly typed" > or "weakly typed" because sometimes is ambiguous, and I rather say this: > *Smalltalk > has dynamic type-checking in runtime* (instead of compilation time), > because it checks if an object can perform the operation you want (the > message) in the moment of executing that operation (when you send the > message). > > Now, talking not-so-siriously, and maybe I'm getting a little > code-philosofical here... If we take into account what I've just defined as > a type, and knowing that all objects are instances of a class that inherits > from Object, I think the term "unityped" should actually be replaced for > "multityped", as the same object could respond to many different types > depending on the interface its client wants it to understand. But that > happens maybe in any object-oriented program, the thing is that in > Smalltalk it's very natural and you don't even have to think about it (in > Java you would have to explicitly use 'interfaces'). > > > > > > On Sat, Aug 3, 2013 at 4:02 AM, Hernán Morales Durand < > [email protected] <javascript:_e({}, 'cvml', > '[email protected]');>> wrote: > >> That is correct, there are no types in Smalltalk. >> Cheers, >> >> Hernán >> >> El 02/08/2013 15:55, Igor Stasenko escribió: >> >> I wonder if 'types' can be applied to smalltalk at all. >>> Saying it is 'unityped' language (since everything is an object) is >>> same as saying it has no types. >>> >>> Because where you need types? When you want to manipulate with data, >>> but in smalltalk all >>> data manipulation semantics is provided and implemented at primitive >>> level, but not by the language itself. >>> At language level the only semantics which is defined is message >>> passing, closures, >>> return and assignment. >>> >>> There is no any rule(s), in smalltalk at language level, saying that >>> result of expression: >>> >>> 1 + 2 >>> >>> should be of integer type. Because this is provided by implementation >>> but not defined by language itself e.g.: >>> it is just a method in corresponding class, which implemented in such >>> a way that result of expression will be instance of Integer (or >>> SmallInteger to be precise). >>> Now, if you change implementation so result will be float (or anything >>> else), will such change allow you to say, that it is no longer >>> smalltalk, or that now it is weakly typed or "anything-else typed"? >>> >>> Because smalltalk code do not operates directly with data, but only >>> with references to it (which is objects). >>> >>> Take an assignment, for example. >>> In staticly-typed language assignment copies the value of expression >>> to variable, e.g.: >>> >>> a = 10 >>> >>> "now variable a has value = 10" >>> >>> in smalltalk, assignment is not copying value, but changing the >>> reference: >>> >>> a := 10 >>> >>> "now variable a points (or refers) to object '10'" >>> >>> and thus, whatever 'type' used to represent the integer value 10 is >>> completely irrelevant >>> for assignment operation. >>> >>> >> >> > Cheers, > Juan Vuletich > -- Germán Leiva [email protected]
