Python 1.6 The balanced language
Suchandra Thapa
ssthapa at harper.uchicago.edu
Mon Sep 4 01:47:11 EDT 2000
More information about the Python-list mailing list
Mon Sep 4 01:47:11 EDT 2000
- Previous message (by thread): Python 1.6 The balanced language
- Next message (by thread): Python 1.6 The balanced language
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Neel Krishnaswami <neelk at brick.cswv.com> wrote: >Suchandra Thapa <ssthapa at harper.uchicago.edu> wrote: >> Neel Krishnaswami <neelk at brick.cswv.com> wrote: >> >Suchandra Thapa <ssthapa at harper.uchicago.edu> wrote: >> >> >> >> Actually I think clean is a pure functional oo language. It's just >> >> that being oo seems to imply that you have some state to your >> >> objects. Not sure anyone would get around this paradox. >> > >> >No, the distinguishing features of OO are that a) subtyping exists, >> >and b) the types of objects are used to do dynamic dispatch. Mutable >> >state is not necessary -- in both Dylan and Ocaml, it's common to >> >write code in an "object-functional" style, with lots of objects but >> >no mutation. >> >> I forgot about the existence of OCaml when I was writing the post >> but ML has imperative features and so is not a pure functional language. > >I usually think of any of the ML/Scheme clan as functional languages, >and specify "pure" when I want to limit myself to Clean or Haskell. > >> The example you gave just illustrated dispatch on types. > >Specifically it illustrated dispatch on based on *subtypes*; that is >it looked at the /runtime/ type of the object to decide which method >body to call. So in a typed Python, take the function > >def squarelen(lst: List) -> Integer: > return len(lst) * len(lst) > >If you pass squarelen() a SizedList, then it will call the >SizedList.__len__ method, not the List.__len__ method. Alright I think I understand your point here. But the same thing seems to be possible using type classes ala Haskell. E.g. define a type class that supports a len and declare List and SizedList as instances of this type class. >> Incidentally, what do you mean by dynamic dispatch? ML and its >> dialect OCaml are statically typed and the compiler chooses which >> function to call at compile time. Would you consider OCaml to be OO >> then? > >The OO extension to Ocaml makes sure that a method exists for every >message send, but it doesn't determine which method to call at compile >time. So no "message not understood" errors can happen, but the >specific method body is chosen based on the runtime type. This is what >I mean by dynamic dispatch. It's a form of overloading constrained by >the type. Alright, I was under the impression that OCaml was like ML and had only static type checking. Therefore I was slightly confused on whether dynamic dispatch was used in a different sense then the one I expected. >> But getting back to OO, I'm not sure how the essentials of OO that >> you put forward mesh with a pure functional approach. In other >> words suppose I had a method bar belonging to class foo. How would >> I distinguish using foo.bar from using another function baz that >> took the same parameters and returned the same results? > >I'm don't I understand this question. Essentially, I'm asking what does objects and classes add to a pure functional language. Since methods for a class are equivalent to functions that take objects of a class and return another object of the same class, what do you gain by introducing OOP to a pure functional language? >Objects with different internal values would behave differently. It's >just that instead of modifying an object we create new ones. Eg, >imagine that every Python object were immutable, like integers and >strings. But there wouldn't be any link between class objects and their methods in a pure functional language aside from a logical one in the programmer's mind. Methods in a class would have to explicitly be passed class objects. In effect you're essentially working with structs and functions on them.
- Previous message (by thread): Python 1.6 The balanced language
- Next message (by thread): Python 1.6 The balanced language
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list