4 ms·
If you asked me 6 months ago I would say the features that confused me the most: - Covariance / Contravariance - Implicit Parameters - Implicit Conversions - a
by weak 13y ago
If you asked me 6 months ago I would say the features that confused me the most:
- Covariance / Contravariance
- Implicit Parameters
- Implicit Conversions
- and also mentioned here, Structural typing.
However now that i've spent time with the language, seen these in action and used them myself I see the reason why they exist and embrace them. I can see why this would be a common complaint against Scala and can be a barrier for a lot, but I think the language is worth investing time in learning, at least for me.
- pkolaczk 13y agoCovariance / Contravariance - Noooooooo! I admit - this might be hard to grasp at first, but in reality it is very simple concept that simplifies a lot of code. It is enough to get variance right once for a class, instead of fighting with ? in Java everywhere. BTW: Kotlin has copied it and noone complains it is too complex :D As of implicit parameters / implicit objects - ok, but what do you suggest as a replacement so that map/filter/reduce preserve types correctly? Or how do you do type-classes then?
- CmonDev 13y agoAgreed, Covariance / Contravariance was a fantastic feature to borrow from C#! It just should have been implemented to be friendlier to people new to language.
- firepoet 13y agoIs that where he borrowed it from? I've seen mention of the language feature showing up in Eiffel, Sather, and so on. http://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science) http://en.wikipedia.org/wiki/Covariance_and_contravariance_(...
- pkolaczk 13y agoEhm... No. If any, C# borrowed it from Scala. C# got them in version 4.0, which was first half of 2010. Scala had them since I remember (from day 1?) - for sure they were in Scala 2.6, which was released in 2006.
- tikhonj 13y agoVariance has been well understood in PL theory in basically forever. None of the languages had to borrow it from each other because they could all just get the inspiration from type theory.
- CmonDev 13y agoSorry guys, I stand corrected :).
- MichaelGG 13y agoAnd C# could only add it because the now-F# folks had originally designed it into the CLR Generics system. It's highly unlikely C# would ever go far out of the straightforward IL generation it does to implement such a feature otherwise.
- Locke1689 13y agoNope. The CLR has supported it back to v2, and C# delegates used the feature before language support was added in C# 4
- MichaelGG 13y agoRight, variance was part of the original MSR proposal for CLR Generics. How did delegates use variance? I've never been terribly clear on the whole delegates concept - they're like first class functions, except nominally typed and weird.
- jerf 13y ago"As of implicit parameters / implicit objects - ok, but what do you suggest as a replacement so that map/filter/reduce preserve types correctly? Or how do you do type-classes then?" I don't have a specific answer to this question, but I do want to warn you that this is a dangerous line of reasoning. Given a complicated object like Scala or C++, you can easily have a situation where each individual element is necessary to support two or three other elements of the overall structure, yet, the overall structure can still be too complicated. And to be clear, I'm not even saying you're wrong. Maybe there isn't a better choice. Scala's choice to be compatible with Java creates a very strange design situation. I'm just saying, this isn't a safe line of reasoning. I think it makes it very easy to become very short-sighted about your options by encouraging you to always be very locally focused.