
Type Inference vs. Static/Dynamic Typing - closure
http://herbsutter.com/2008/06/20/type-inference-vs-staticdynamic-typing/
======
kingkilr
Good post, one small issue though, "type inference, which you can do in any
language", is not really true. Once you get dynamic enough type inference
becomes nearly impossible (Cannon, 2005:
[http://www.google.com/url?sa=t&source=web&cd=4&v...](http://www.google.com/url?sa=t&source=web&cd=4&ved=0CDIQFjAD&url=http%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fdownload%3Fdoi%3D10.1.1.90.3231%26rep%3Drep1%26type%3Dpdf&ei=0EUdTantA8OWnAeVyYHQDg&usg=AFQjCNGZn2EWRt1-H4FdECqTuqwlMx2zUQ&sig2=5p97iYte4hH4aXyI5KoC_w))

~~~
stcredzero
Yes, but for many languages which are that dynamic, we now have JIT VMs which
gather tracing data and can empirically tell us what the types actually are.
This is especially true for server apps, which can provide us with large
datasets. Also, as noted in a recent article posted to HN, after a certain
span of time, most apps in dynamic langs behave as if statically typed. Why
don't we use this information? It happens to be move available when it is most
valuable. (When a codebase has "matured" and things are moving more towards a
"maintenance" mode.)

~~~
kingkilr
Eh? I'm not disputing that at all, I'm a contributor to PyPy, probably the
leading python JIT. None of that has anything to do with whether it's
semantically possible to do a full type inference on a language like Python.

~~~
illumen
Full type inference has not been done in python... however partial type
inference on python has been done.

The article is talking about partial type inference, and most implementations
of type inference I've seen do partial type inference.

------
joshhart
Please keep in mind the type inference systems in Haskell, Ocaml, Scala, etc
are much more advanced and useful than C++ 0X or C#

~~~
closure
Definitely. I really like Haskell's type inference, but have always been
concerned about issues like those raised in:
[http://www.codecommit.com/blog/scala/universal-type-
inferenc...](http://www.codecommit.com/blog/scala/universal-type-inference-is-
a-bad-thing)

~~~
Dn_Ab
Scala does that because ad hoc polymorphism doesnt resolve well with hindley
milner type inference. F# also has this limitation and they get some of the
way around this with a strict vertical projects file layout. The scope of its
type inference is a middle ground between Scala and Ocaml which I think is a
nice optimum, you leave most things untyped except the overloads which can't
be determined so that the eager generalization you encounter in ocaml is less
of a problem there too. The price in project layout is quite steep though but
like in all things you train your self around it.

Plus with an IDE in Scala (or F#) you can just hover for the types.

------
blasdel
If you want to understand the fundamentals, read the classic:
[http://web.archive.org/web/20080822101209/http://www.pphsg.o...](http://web.archive.org/web/20080822101209/http://www.pphsg.org/cdsmith/types.html)

