Question: I am definitely more than thrilled with the Scala type inference engine, but in a real world environment:

1. How much of a performance draw back is it?
2. When is the type inferred, at compile time or runtime?

Answer: 
Scala’s elaborate and powerful types exist only(\*) during compilation time: they are parsed from source (where you give them), inferred, checked and then, finally, discarded. The last may sound nonsensical, but it is the modus operandi of the JVM (see [type erasure](http://en.wikipedia.org/wiki/Type_erasure)) and quite useful from a language designer’s viewpoint.

So, to answer your question: at runtime it makes no difference whether the type was explicitly given or inferred, the only difference is in how long it takes to compile the program.

(\*) The 2.10 release will come with a reflection library which allows the program to access its type information also at runtime; this gives added freedom—which if used will of course burn CPU cycles at runtime—but does not change any of the aforementioned points.
> 
> How much of a performance draw back is it?
> 
> 
> 

The run time performance is generally said to be comparable with Java. Compilation times are typically longer compared to Java [due to the complexity of the compiler](https://stackoverflow.com/a/3490538/390708).

> 
> When is the type inferred, at compile time or runtime?
> 
> 
> 

At compile time.

In this [video](http://www.youtube.com/watch?feature=player_detailpage&v=hiurd7KaSEI#t=546s) from about 8:50 to 12:50 Martin touches on usage in "real world" environments and performance. He notes there are many companies using Scala from small startups to large enterprises.