Google, it's time – We want Scala for Android

  • Um, people have already been able to use Scala to make Android applications. Just about anything that doesn't require dynamically generated JVM bytecode can manage, difficult and error-prone as it is.

    If we're talking about official support, then I'd rather Java 8 instead. And beefing up ART even more.

  • Who's "we"? How about we ask Google to focus on things the vast majority of Android developers actually want? Java 7/8 comes to mind. Even if we're looking for just an alternative Android dev language Scala probably wouldn't even be in the top 10.

  • I agree that Google should add more languages to android. And while Scala is a great language, it's very complex - so it won't benefit many of the less skilled users.

    A better language would be something with the simplicity and power of python, but with good performance.Groovy could be one such language.

  • Why not Kotlin? It's more like a modernized Java. It's closer to what Android developers are used to and it already supports Android. It interoperates well with existing Java code in your Android app.

    Also, it has excellent IDE support, since JetBrains is behind it.

    http://kotlinlang.org/

  • I'm not sure the author understands why Java is the language in the first place - there is an army of developers who knows how to use Java. Yeah, it might not be the best language ever, but neither is C++ and neither is Scala.

    For what Google is doing their choices were basically C++ or Java, there is no other embedded, performant option that hits mass quantities of developers worldwide. Every other language is either too niche, or not performant enough, or doesn't have the features you would want. Sure, I guess they could have done C#, but I'm pretty sure Google hates Microsoft, so that's not going to happen.

    iOS only has Objective-C because of NextStep and OS X. Otherwise, it could very easily have had C++ or Java. Blackberry ended up with C++ for their native toolkit.

    Has there been a significant mobile platform that wasn't C++ or Java that doesn't have some historical reason like Obj-C has behind it?

  • Please not scala! I prefer to have clojure for android. Scala is too complex, to ugly, and tries todo too much. Its also to heavy for android (it needs tons of libs to run).

  • Over the last few months I've been writing Scala full time, and have even written some (demo grade) Android apps in it. My opinion is: Android should not adopt Scala as one of its primary languages.

    I think a platform's primary language should be accessible. It is an unfortunate fact that the stuff that most people only know about programming using some object oriented imperative language. People find it harder to hobby with unfamiliar styles, and it is hard to find leverage within your organization to go into unknown territory. If it isn't a popular widely known language (Java) it should at least resemble popular widely known languages (Swift). Give people a piece of Java or Swift code, and they can read it. Give people a piece of Scala code, and they usually cannot.

    Scala can be an accessible language; its imperative syntax is really nice. But Scala is not an accessible language in that idiomatic real-world Scala and most of its libraries are written in a wholly unfamiliar style. Powerful, yes. People should learn it, yes. But if Scala comes to Android it will only serve to make the platform seem less accessible. And that's a much bigger downside than whatever expressivity Android Java currently lacks.

    Scala can't even properly be a primary language in parallel to Java at the moment. Swift is just a better syntax for expressing idiomatic Objective C programs. Good Swift programs should look mostly like good Objective C programs with a different syntax - Swift has been made for this purpose [1]. Scala is not a better syntax for expressing idiomatic Java programs. Despite backwards compatibility, good Scala programs look very different to good Java programs. This means that Google cannot present them as equivalents. The Android platform APIs heavily promotes mutability which makes writing idiomatic Scala code for Android a pain in the ass. Should Google ask people to write non-idiomatic code for their new primary language, or should Google provide new APIs for their new primary language?

    I dislike Java very much. But I think it's a great language for Android, because everyone can do it and that makes the platform accessible. There's only one other language I can even remotely imagine in its place, and that's Dart. And that's not happening either.

    In the meantime, making Scala run on Android is perfectly doable. That is good enough for me.

    [1]: I'm aware that this comparison doesn't do Swift as much justice as it should.

  • I want Python for Android.

    Ideally, it would compile to Dalvik/ART or ARM. It would use something like PySonar to infer types or use annotations to be able to use native types when possible (for speed & correctness). When the type isn't given or can't be deduced, it would fallback to boxed objects (like Nuitka does, in the way the offically C-Python keeps its objects in memory).

    But that is not neccessary, all that is needed is a decent wrapper to the Android API for Python, and some packaging support. It is now already possible to compile Python for Android to include it in your app. What I'd like to be able to do is to write the whole thing in Python (+ a GUI design tool maybe).

    I already see some people saying, that's not possible, because an interpreted language uses too much resources (CPU, memory, esp. battery) for mobile. Well, 90% of the apps I use are not computationally expensive. The consume battery mainly via network access, and via the screen, both of which is independent of the language or runtime used. And when they are doing something computationally intensive, it is usually the layout and drawing of the GUI - most of which is done by the native framework anyway. Most apps are literally just fancy listboxes and details pages, with a database and a web backend. (The great exception are games, of course.) For these apps, a rapid development language like Python (or Javascript, or heck, a new VB) would be great, ideally augmented by good tooling. And if you have something CPU intensive (map routing, image processing, complex translation etc.), you'll just write it in a C library anyway.

  • It is not going to happen.

    Google IO 2014, Android development fireside:

    https://www.google.com/events/io/schedule/session/85311b0e-7...

    The answer to this request is "Java is the official Android development language".

  • I would be happy with Java 7/8.

  • Why do people think that Swift has a managed runtime with garbage collection? It has reference counting, it's compiled into native code. It has a small runtime lib. linked into the executable (but hey, even C executables have it).

  • If they're not even giving us Dart or Go for Android (their own languages), what is the probability they will give us official support for Scala? Yes, Scala runs on the JVM, and the former two don't. And yes, Go is not really designed as an end-user GUI application building language. But Dart has a nice VM of its own and is designed for client-side apps. I would like to see Dart on Android and the original author is definitely confused when he calls Dart and Go "niche" languages (as a way of dismissing them) and somehow doesn't feel the same way about Scala. Scala might be marginally more popular than Go/Dart but it's not an order of magnitude. In fact, according to the latest Tiobe index (a terrible metric in my opinion, but one indicator) Go is more popular than Scala by one place.

  • The problem is that Scala generates very big jar files, which is why the only couple of Scala Android applications I've ever seen are toy apps. There is no doubt that any more sizeable project will blow up Dalvik's various restrictions like is already happening with Scala apps without ProGuard.

    There's also the fact that Typesafe doesn't care about Android so even if your current app works on Android, a future version of the compiler might make it blow up on the phone after you recompile it.

    Unfortunately, the Ceylon team doesn't seem to be interested in supporting Android either.

    Which leaves Kotlin, as a reasonable option for non-Java development on Android.

    At any rate, don't expect any help from Google about Scala, they're not even supporting their own non-Java languages there (Go, Dart).

  • The article reeks of ignorance. Swift doesn't really have GC (but ARC) - https://www.google.com/webhp?sourceid=chrome-instant&rlz=1C5.... It also takes an unnecessary dig at nodejs. Has the author ever written node.js production code? What bugs has the author found and filed?

    I am sure most android devs rather have a major ramp up of the Android APIs rather than switching the programming language. The real problem with Android is the ungainly APIs and how very cumbersome it is to develop anything reasonable.

  • Can we have a good Lisp for Android already?

  • You can use Scala for Android right now, as people are pointing out. However, it feels like a "second-class citizen" because the Android JVM has been optimized for enterprisey, Java-style coding with fewer, longer-lived objects than functional programming usually demands.

    At a guess, I'd say that with Java 8+ they'd have to fix that. Probably why they said "no comment" as pjmlp pointed out (https://news.ycombinator.com/item?id=8192614).

  • Theres a different between "supports writing your own code in that language" and "the platform APIs are in a language".

    In theory, it should be possible to write code on the Android platform using any JVM language. Groovy, Scala, Clojure, Kotlin, etc. There are hiccups to that right now but you can hack your way to it generally.

    But Android's APIs are going to stay in Java. That is a lot different than Apple's move to Swift, where the platform itself is moving to the new language.

  • This has a lot more to do with refactoring the build system than anything else. The more the build system adheres to the Java Gradle plugin, the easier it is to use Scala or other JVM compatible languages. There is an open ticket for it, and supposedly Gradle 2.0 will make this possible.

    https://code.google.com/p/android/issues/detail?id=56232

  • Swift doesn't have a GC from what I know it has automatic reference counting. It's not really the same thing.

    It's on compile time and not at run time. It injects release/retain calls between acquiring ownership and relinquishing ownership.

    I could be wrong but I don't think they added GC to Swift, as Objective-C (at least not on Mac OS) doesn't have it.

    EDIT: They got rid of the GC on Mac OS as well. They use ARC there as well just like iOS.

  • 1. Most of the threads like this are going to turn into I like this language so let's rewrite Android in that.

    2. Even if Google changes the primary development languages of Android where do you go to ask developers to port their Java libraries, technical bloggers to update their blogs with Scala code or change thousands of questions on SO.

    Documentation/Q&A created around Java/Android is equally important.

  • according to apple, swift uses ARC, not GC. https://developer.apple.com/library/prerelease/mac/documenta...

    How does Scala solve any of the problems with Java?

  • No. Google its time, we want Go for Android.

  • undefined

  • Knowing that Google and JetBrains have a good cooperation (Android Studio will replace Eclipse plugin as a preferred way to develop apps for Android), I kinda-sorta expected Kotlin to be backed from Google as an official Android language on the latest I/O.

  • "As phones are getting faster memory is not an issue anymore." No, its not true. Memory is an issue. Android does not only run on premium devices but also economical devices.

  • Um... why .. on .. earth.. scala. Make it stop.

  • I think there are better selections than groovy to be the next language supported on Android.

  • Make golang for Android and I'm yours.

  • My bet is for golang.

  • No

  • Scala doesn't have very good type inference, dude...