Suppose I am defining a function that operates on any two real numbers. Which of the following ways of specifying types is preferred (in terms of idomatic Julia and performance considerations) and why?
```julia function foo1(x::Real, y::Real) = ... function foo2{ T<: Real}(x::T, y::T) = ... function foo3{T <: Real, S <: Real}(x::T, y::S) = ... ```