News for hackers. Stuff that matters.
Re:MSBuild is going cross-platform with .NET Core by tomjen3 on Thursday September 03, 2015 @01:08PM (#10166102)
1 year ago, yes. C# is awesome as a language but I don't see a reason to switch to .net when the JVM has Kotlin, which is nicer than C#, but still super lightweight and thoroughly pragmatic.
Re:MSBuild is going cross-platform with .NET Core by V-2 on Thursday September 03, 2015 @04:34PM (#10167380)
Nicer in what sense? I do like both, I'd take either of them over Java on any day, but whereas Kotlin is maybe better suited for functional style programming (immutability out of the box, data classes etc. - however .NET people always have F# for this stuff), it's hardly on the same level as C#.

For instance Kotlin doesn't have reified generics (if I recall correctly they actually attempted it, but it's too hard to get it done on JVM), Kotlin doesn't have yield-return semantics, Kotlin's equivalent of LINQ doesn't use deferred evaluation. Kotlin doesn't have async/await like C#, which is a real gamechanger when it comes to asynchronous programming. It's very nice and promising, but it's not in the same league.

As far as JVM universe goes, Scala could give C# a better run for its money.

Of course it's not fair comparing Kotlin to C# - for numerous reasons - but if we do it anyway, it's got to be honest

Re:MSBuild is going cross-platform with .NET Core by rjbwork on Thursday September 03, 2015 @06:36PM (#10167905)
>Kotlin's equivalent of LINQ doesn't use deferred evaluation.

Wow, I'm pretty surprised at that. Any kind of list comprehension/functional sub-language over collections seems like it ought to be deferred/lazy from the ground up. I'm doubly surprised at that from JetBrains.

Re:MSBuild is going cross-platform with .NET Core by V-2 on Friday September 04, 2015 @02:29AM (#10169055)
Unfortunately it is so, so I wouldn't recommend it for large collections, or wherever performance considerations come into equation.

Let's peek at Kotlin's sources (_Filtering.kt):

    public inline fun <T> Iterable<T>.filter(predicate: (T) -> Boolean): List<T> {
        // note how it's allocating a new ArrayList<T> - 
        // Kotlin doesn't have a "new" keyword, but it's initializing it here
        return filterTo(ArrayList<T>(), predicate)
    }
And it redirects to filterTo:

    public inline fun <T, C : MutableCollection<in T>> Iterable<T>.filterTo(destination: C, predicate: (T) -> Boolean): C {
        for (element in this) if (predicate(element)) destination.add(element)
        return destination
    }
With this approach, if you're chaining several of these operations, you will end up allocating quite a few arraylists, one by one.

Note that without something like yield-return in place, writing your own collection-transforming extension functions with lazy evaluation won't be so clean and easy either

Since it has 100% interop with Java, you could work around this problem by using something like Guava - Iterables and FluentIterable are based on iterators as they should.

They use static helper methods, all you need to do is to snap out some extension functions in Kotlin to serve as bindings to Guava. The only problem, especially on Android, is that Guava's notoriously big.

Kotlin is good, I'm not hating on it, but mature? Not yet. Nicer than C#? Best of luck, but not with this type of shortcomings

Re:MSBuild is going cross-platform with .NET Core by weavie on Friday September 04, 2015 @03:47AM (#10169220)
I don't know much (anything..) about Kotlin, but surely that is a library issue and not a language issue - which could be quite easily rectified?
Re:MSBuild is going cross-platform with .NET Core by V-2 on Friday September 04, 2015 @04:12AM (#10169281)
Yes and no... This is part of their standard library, so from a practical point of view, it is a language issue.

Easily? Proper implementation isn't so trivial, look what it takes for Guava:

https://code.google.com/p/guava-libraries/source/browse/guav...

https://code.google.com/p/google-collections/source/browse/t...

https://code.google.com/p/guava-libraries/source/browse/guav...

Plus:

* new (lazy) extension functions would be getting in the way of standard ones, you would need a paralel naming convention (perhaps one borrowed from LINQ, where map = select, filter = where, fold = aggregate and so on) and developers would still confuse one with another.

* unless we agree on one canonical implementation, yours would be different than mine, easy to see how it could become a mess.

If there is a better approach which removes these obstacles, someone let me know

Re:MSBuild is going cross-platform with .NET Core by edgyswingset on Thursday September 03, 2015 @02:14PM (#10166613)
I'd argue that just because a language runs on a platform with a potentially large number of third-party support (JVM) doesn't mean it's going to be nice to use.

For example, I ended up having to write Java code when dealing with large XML data sets in a Clojure system, because the current offerings simply didn't let me do what I needed in fluent Clojure code. I suspect Kotlin has those same kinds of issues, just amplified because it's a lot less widespread than Clojure.

Re:MSBuild is going cross-platform with .NET Core by tomjen3 on Thursday September 03, 2015 @04:15PM (#10167265)
Kotlin is basically a nicer Java and will seemlessly integrate. You can even mix Java and Kotlin in the same project.
Re:MSBuild is going cross-platform with .NET Core by edgyswingset on Thursday September 03, 2015 @04:51PM (#10167461)
The fact that it integrates with Java isn't what I'm getting at. Developing in Clojure eventually forced me to write some Java, which I didn't want to do. I just don't see Kotlin as somehow solving that problem.
Re:MSBuild is going cross-platform with .NET Core by tychuz on Thursday September 03, 2015 @01:56PM (#10166498)
My reason would be: I can choose from a ton of C# positions, meanwhile Kotlin would have what? In my and neigbour countries I can find exactly zero Kotlin job offers.
Re:MSBuild is going cross-platform with .NET Core by tomjen3 on Thursday September 03, 2015 @04:18PM (#10167287)
That is true. I assumed I would eventually go into business for myself and see no reason to use C# - besides Kotlin is very young, there is still plenty of time to get in on the ground floor so to speak.
Re:MSBuild is going cross-platform with .NET Core by CmonDev on Thursday September 03, 2015 @02:12PM (#10166592)
Cool! How would you build an app for iOS and WinPhone using Kotlin?
Re:MSBuild is going cross-platform with .NET Core by wtetzner on Thursday September 03, 2015 @03:29PM (#10167020)
Don't know about Windows Phone, but for iOS you could use RoboVM.

http://robovm.com/

Re:MSBuild is going cross-platform with .NET Core by yareally on Thursday September 03, 2015 @08:16PM (#10168210)
For Windows at least, there's IKVM: http://www.ikvm.net/
Re:MSBuild is going cross-platform with .NET Core by cptnbob on Thursday September 03, 2015 @06:39PM (#10167915)
HTML! And you get to do it once for both...
Re:MSBuild is going cross-platform with .NET Core by tomjen3 on Thursday September 03, 2015 @04:13PM (#10167253)
The same way I do in any other language: I don't.