> It seems we have different definitions of what type
> inference, higher order functions and Turing
> completeness means. :-)
I don't think so. The definitions are pretty much standard and those are the ones I'm using.I think we can agree that the way Java supports those features ranges between unusable and pretty terrible in practice, but that's not what your claims were about. Your notion of Scala having more features than a "standard" mainstream language might even be correct, it is just that the points you have given don't support your point here. > Regarding coroutines in Java: I don't know if libraries
> using native continuation mechanisms or bytecode
> manipulations prove that Java (the language) has
> continuation support. :-)
Then Scala doesn't have continuation support either. Whatever definition is applied, it needs to be applied consistently. > I don't have anything against Scala.
I never suggested that and even if you had something against Scala, it would be perfectly fine – for me and probably for everyone else.It's just that you have claimed a few things which I think are incorrect, either factually or in the way they were worded, and I'm offering some data points against it. This all happens in good faith and in the hope that we both will have gained some knowledge at the end of this discussion. > As you noticed with Java 8 Java is already borrowing a lot
> of useful things from Scala. I am sure conservative
> corporate decision makers will see less and less reasons
> to switch to Scala as time passes by.
I think most Scala users would agree that Java 8 copying Scala is a good thing, because it strongly validates what the designers and users of Scala have been doing for the last 10 years.
With Java moving closer to Scala, adopting Scala becomes a lot easier from a management POV which in turn removes a lot of the concerns corporate decision makers have. > If I have a function: def upcase(s: String): String [...]
> A unit test can check if the returned string is really
> the upcase version of the input parameter.
def upcase(s: String): UppercasedString
Now the compiler can check it, too. |
Ok, then let's just ignore continuations as they are somehow available in both languages although the Scala one feels a bit more officially endorsed to me.
> def upcase(s: String): UppercasedString
Even with that type signature of course the compiler can not check that for input "a" the output will be "A". Your code could have a bug and upcase "a" to "B" (Off-by-one errors are quite common) and your compiler would be perfectly happy. That is the whole point why unit test are more valuable than compiler type checks: checking specific code behavior and not only static types.