Hacker News new | ask | show | jobs
by higherpurpose 4437 days ago
Android...I'm still hoping Google will soon focus on Go and deprecate the usage of Java language for Android.
3 comments

Why would they deprecate Java? Especially why would they replace it with a relatively immature language and implementation? I'm not knocking Go--it is simply a fact that the language is immature still, just like every language that is relatively new.
Is there a specific reason on why? Just curious?
The usual argument "You have to use the newest shiniest tech or you suck"
I'm not an Android programmer, but I hear that the Dalvik-based Java is Java 6ish, and will likely stay that way, while Java (from Oracle) moves forward. Much bad has been said about Java 6. So from that perspective, one might hope for a change.
Any reason why Go is better than Java on Android? Concurrency is the reason? I personally think Go is good for System Programming, e.g. Docker, GoRouter (Cloud Foundry), etc.
I have a personal preference for Go over Java, but I'd say Go's big focus on concurrency is a big win for mobile , where you don't need to compute many things but need to react to many exterior stimuli.
Should get faster binaries, thus better on the batteries. I think better compile times would help with the edit-compile-run cycle.
Another reason would be that JNI is horrible and if you need to mix your app with native code you are out of luck.
So Go solve the problem, right? How is Go's OpenGL/OpenGL ES?
Is the Go FFI any better? How does it interact with the garbage collector? What aspects of the JNI are horrible in your mind (I have a few in mind as well) and how does the Go FFI differ?
The most common solution in go is to use cgo[0] when wanting to bind with another language. From C you can then do whatever you'd like. That's how people are interacting with OpenGL[1] or QT[2] for example. Though, it seems like most common use cases of Go are to stay within the libraries supported by the shipping library or 3rd party libraries written in pure Go.

[0] http://golang.org/cmd/cgo/

[1] https://github.com/go-gl/gl

[2] https://code.google.com/p/goqt/

Right, but how is that different than JNI?

For instance one of the major complaints about the JNI is that adds a pretty high performance penalty to any native calls (and typically you want native calls when performance is important). Does Go's FFI not have this performance penalty? If not, why not?

Like with the JNI, Go's garbage collector needs to understand life cycle semantics of objects coming in/out of the native binding, how is this accomplished and does it do a good job? Does it complicate the garbage collection of other unrelated parts of the system?

Basically, if you are going to claim that the JNI is awful (and I think that is a valid claim) and then imply that Go's isn't, I'd like to know why that is.

The go runtime will manage memory of thins allocated in Go land but you must manage memory in C land.

If you allocate memory using C.malloc you must use C.free otherwise you will leak memory.