4 ms·
Scala transcends the static vs dynamic typing debate via it's duck typing. Because of it's implementation of implicits, you get static type checking along with
by jaxytee 13y ago
Scala transcends the static vs dynamic typing debate via it's duck typing. Because of it's implementation of implicits, you get static type checking along with the flexibility of a language like JavaScript or Python. IMO This puts Scala head and shoulders above the rest of the programming world in terms of language design.
- anonymoushn 13y agoScala lets you spend lots of time typing incomprehensible type signatures and gives you less type safety than ML-family languages in exchange. Truly it is the pinnacle of PL design!
- mcv 13y agoYeah, I hate those incomprehensible type signatures. Just give me an Object and I'll match with the type I need.
- _random_ 13y agoI have a better idea! Let's just use strings for everything!
- virtualwhys 13y agothanks for the chuckle
- anonymoushn 13y agoI certainly hope you don't give me an Object. That would mean I still haven't escaped the JVM! Just give me HM and I can write type safe code without typing types.
- laureny 13y ago> Scala transcends the static vs dynamic typing debate via it's duck typing. Hardly anyone uses duck typing in Scala (you probably mean structural typing, by the way). There are plenty of articles explaining why structural typing is a bad idea, here is one: http://goo.gl/0wcNFO http://goo.gl/0wcNFO
- mcv 13y agoThat article explains duck typing badly. In duck typing, you actually test if it quacks like a duck. His example doesn't, and just blindly assumes it can quack.
- anonymoushn 13y agoIs this really a worthwhile distinction? Using the first example from the Wikipedia article on duck typing, I have a choice between exploding when given invalid values: def calculate(a,b,c): return (a+b)*c or failing silently when given invalid values, which will often cause some other piece of code to explode, or at the worst cause some misbehavior that is difficult to detect: def calculate(a,b,c): try: a=a+b except: pass try: a=a*c except: pass return a or def calculate(a,b,c): try: return (a+b)*c except: return None I would prefer to just not be in the situation of choosing what to do with invalid values in the first place.