903 karma · joined January 17, 2008
https://groups.google.com/d/msg/golang-nuts/0za-R3wVaeQ/M8_B...
Why do crypto people only want there to be a single C implementation of everything?
Not being able to get out of your car in an emergency would be a bigger problem.
I hate to say it because I like JetBrains and have given them lots of money over the years but I prefer Ceylon to Kotlin. They are very similar languages but I just like the Ceylon syntax more.
Also, in my totally non-objective opinion, the font used on that page feels really shouty to me.
You don't need to share state data between your goroutines if you don't want to either just like you don't have to use mnesia to share state between erlang processes if you don't want to.
I don't think you can really accuse go of being a cargo cult language either, Rob Pike has implemented CSP multiple times (http://swtch.com/~rsc/thread/).
The compilation speed is super fast which makes it feel like you are developing with a scripting language as opposed to a statically typed language. I typically edit code, run the tests and correct my errors without any noticeable time lost waiting.
The Go parser and pretty printer are exposed as a libraries in the Go distribution which allows for interesting meta-programming.
Scala compilation is complex, partly due to its extremely sophisticated type system, it is also quite resource intensive - I have got the type checker to run out of memory on multiple occasions I have never seen a Java compilation fail due to lack of memory. fsc and incremental compilation do speed things up but it is still slower than compiling an equivalent amount of Java.
From reading the language specs it seems much more pragmatic than Scala (as does ceylon http://www.ceylon-lang.org/ or fantom http://fantom.org/).
I think if JetBrains thought that Scala was a better Java they would be using it instead of creating their own language.
Eclipse has always seemed to me to be baroque and over complicated, for example why do I need to change to a specific perspective to perform a specific task?
However, as you point out, if you are presenting a Java API to your known and unknown clients you had better think carefully about which abstractions you are going to expose and interfaces are probably going to be very helpful.
I think that all Java IDEs make it trivial to introduce an interface when it is required, so unless you are producing an API for consumption by a third party you should only introduce an interface when you have multiple implementations, or a third party can legitimately produce their own implementation, and not because you think you may have multiple implementations at sometime in the future.
Also if you have a single implementation naming it InterfaceImpl is just lazy, you almost always have more information that you can use to name it, it might be a InterfaceUsingJdbc or an InterfaceFileBased for example.
Also you don't have to name property accessors getX() and setX() if you don't want to.