Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I think I've figured Scala out. It's a statically typed JVM language meant to be more powerful and at the same time easier to use than Java. It's a functional language. Though, it's also imperative. And object-oriented. It favors immutability, except that mutability is just as easy (or hard). It has adopted the actor model. But it has also adopted all of Java's concurrency constructs. It was designed as a very practical language. And it's also a research language with some experimental features. Oh, I almost forgot: it is meant to be a high-performance language. But it's also designed to build DSLs. It's a very opinionated language in the sense that it's opinion is that all opinions are valid.

So I must say that any difficulty you may have understanding what Scala is trying to be is due to no fault of Scala itself. It's very simple, really (well, to be precise, there are different tiers of simplicity in Scala, but I can assure you that each tier is quite simple once you've mastered all the design decisions, and category theory, that fully, consistently and self-sufficiently define the simplicity of the respective tier).



I explain why I think Scala will be giant to people by saying it is Java's C++. It's as painful or nice as you want it, one company's use looks nothing like another's and it is building on years of pain points to solve problems in a different way while still using the current ecosystem(s).


I explain why I think Scala will be giant to people by saying it is Java's C++.

You know, back when Java was getting huge and I was still in grad school, Java was supposed to cure everything that was wrong with C++.

In the same grad school -- an old timer professor (so old, he actually wrote the very first commercial implementation of Merge Sort -- on paper punch tape, no less) looked at some C++ that used templates and commented, "C++ must be the new Cobol."

The C++ code I like is minimalist. The languages I like the best are minimalist. It's just my personal taste, but I don't see the point of making things more complicated than they have to be.


Java's C++

I would sell it that way to non-technical executives but not to anyone else.

I worked with someone who's a personal friend of Odersky and he's confident that Scala won't turn into C++. He described him as "way more scrupulous than Stroustrup".


It is too late for that.


I have this sneaking suspicion that Scala has blown past C++ and is taking aim on Perl.


I agree, but use that as a sell for why I think it's reasonable to use for business. It usually follows a technical discussion of it's benefits.


I'm noting with some relief that the Scala hype is over. Definitely.


The Scala hype, if there ever was one, started because for a long while Scala was the only high-performance alternative to Java on the JVM. Groovy was too slow, and many people prefer static typing. But then a large gap started to emerge between what most Scala users needed (and the reasons they turned to Scala in the first place) and what the language designers decided to give them. There were all sorts of funny operators and then implicits, meant to support DSLs. Then came all sorts of nifty tricks like type constructors, whose purpose, I think, was to simply prove that it's possible to build a statically typed language that has inheritence, yet does not require casting, ever. That is, if you're willing to put in the time to learn the intricacies of the type system. Well, they've proven it's possible alright. It is truly a great achievement in PL research, only it came at the price of making the language more annoying with each release. Who cares if you need to cast now and then if it makes the type system simpler and compilation times shorter? Now there are other alternatives. For those wishing to see the light of a new, better, way to program modern machines there's Clojure. For the more timid of heart, Kotlin has been/is being released. It is everything Scala's original users wanted from the language.


I think your warnings about complexity in the type system are prudent, but your comment about casting is off. Casting (with the exception of primitive types) is a very blunt hammer to bash your way out of a type system. The MLs have a simple type system, yet you almost never need to cast. It's worthwhile from a language design perspective to try to eliminate the need to cast entirely, and I believe you don't have to complicate your type system to do so.

Also, you note that "many people prefer static typing", but then you suggest Clojure...


Well, avoiding casts AND supporting inheritance AND having a simple type system is pretty hard. You can usually just pick two of the three.

Many prefer static typing, and many don't. BTW, Clojure is indeed dynamically typed, but it has a "type philosophy" that keeps things nice and orderly, namely no encapsulation and uniform data access.


Java avoids casts in most cases with generics, it supports inheritance, and it has a simple type system. Ditto with C#. (I also haven't heard people complain about the complexity of F#'s type system, so I'd point to it, but I don't know F# enough to be able to say whether it's a good point or bad point in the space here.) OCaml also supports inheritance, although its object system is kinda weird (in that it doesn't really fit with the rest of the language; I wouldn't say it's overly complex though).

Basically I don't think that Scala's complexity should burn us on type safety in general. I think Go and Dart, for example, are an overreaction to the complexities of type systems like those of Scala (no generics and null pointers in the former, and unsound covariant generics and null pointers in the latter). There is room for a statically typed language that brings the benefits of type safety that make programming easier without the complexities that make programming harder; the fact that we haven't found that sweet spot yet doesn't mean that we should just throw up our hands. I'm not convinced that the sweet spot is either unsound or requires casts.


This comment is a masterpiece.


It's a statically typed JVM language meant to be more powerful and at the same time easier to use than Java.

Yes, I would agree with this.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: