Hi there Aditya,
Thank you for raising this topic. I've been thinking of using Kotlin for
a VERY long time now.
I believe that Kotlin will provide is with many benefits other than just
`non-nullable` fields/parameters but also with immutability.
Conciseness of code is another benefit and the VERY strong functional
and much improved lambda support.
Imo, Kotlin is easy to pick up and learn and just as easy to read for a
non-Kotlin developer. It is definitely an huge step up from Scala from a
simplicity and "just pick up and code".
To address some of the points that were raised:
* /When is it appropriate to use Kotlin/? - There is no definitive
answer to this one... Always, never, only when you want to.. The
interop with Java is second to none and having Kotlin function
interweaved with Java code is simple and easy to do.
* /Are there sufficient number of commiters with Kotlin experience to
maintain the work/? - Kotlin has a strong growth in adoption. It all
started with Android and JS, but it has definitely gained more
traction in traditional Java applications as well. Imo, Kotlin is
easy to read, easy to learn and definitely easy to maintain, not
like Scala that requires some effort to learn and maintain.
* /How will the introduction of Kotlin affect development exp and
build times/? - There is little overhead to compile Kotlin code, add
a few milliseconds here and there. As for development exp, from all
developers I've interacted with, they've found Kotlin easy to deal
with. I don't believe this would be a problem, unless you are averse
to change and learning...
* /Does this increase the learning curve for new committers/? - I
don't believe this to be an issue. Given that we won't be
exclusively switching over to Kotlin and would still support Java.
Would it have an impact for committers to maintain existing Kotlin
code, possibly yes. If you've never written Kotlin code before, it
would be a learning moment, but not so steep that it cannot be
mastered. In addition, any code that is committed will be reviewed
and in true agile fashion, the code would be reviewed, commented on
and possibly have some pointers on how to do things better, so it's
a learning moment.
I believe that Kotlin can have a much larger impact. Kotlin Coroutines
<https://kotlinlang.org/docs/reference/coroutines-overview.html>, which
will help with writing async, concurrent code, without really have to
know and understand Java threading extensively.
Ktor <https://ktor.io/>, a simplified async communications framework
RSocket-Kotlin <https://github.com/rsocket/rsocket-kotlin>, a reactive
communication framework
Of course Spring provides Kotlin support. Kofu
<https://github.com/spring-projects/spring-fu/blob/master/kofu/README.adoc>,
a simplified Kotlin DSL based configuration tool for SpringBoot, of
course there is a Java equivalent Jofu
<https://github.com/spring-projects/spring-fu/blob/master/jafu/README.adoc>.
Kotlin.link <https://kotlin.link/>, isĀ collection of resources spanning
everything from learning, libraries, frameworks, etc... all for Kotlin
The final step of course would be Kotlin Native
<https://kotlinlang.org/docs/reference/native-overview.html>, which
allows the compilation of "pure" Kotlin code onto many different
platform using the LLVM <https://llvm.org/>. Thereby providing the
ability to eventually have an application that can be compiled into
native binaries for many different platforms, as described HERE
<https://kotlinlang.org/docs/reference/native-overview.html>.
So, in my mind, the question that needs to be answered, can we afford
not to use Kotlin.
--Udo
On 1/3/19 16:16, Aditya Anchuri wrote:
Bringing the discussion on the PR back to the dev list
An important point that was raised by Anthony was: "
Introducing a new language to the Geode project raises some questions that
we need to answer as a community before adopting this proposal:
- When is it appropriate to use Kotlin? When should we prefer Java?
- Are there a sufficient number of committers with Kotlin experience to
maintain the work over the long-term?
- How will the introduction of Kotlin affect the development experience
and build times?
- Does this increase the learning curve for new committers?
I think I would be more comfortable exploring this change in a submodule
rather than in geode-core. I would also like to see all the REST code move
to geode-web or geode-mgmtso that we can finally fix those broken
dependencies. Specifically we should aim to delete thewebJar` Gradle task
from geode-core."
I feel that some of these questions can be answered better by actually
introducing Kotlin into the codebase and seeing the results -- but
obviously there is a concern with how locked-in we get if we come to the
conclusion that Kotlin is not for us. We will look into introducing as a
submodule that is a sibling to geode-core, and revisit things. Closing the
PR for now, I feel I have the feedback I need.
-Aditya
On Wed, Jan 2, 2019 at 3:11 PM Aditya Anchuri <aanch...@pivotal.io> wrote:
Hi everyone,
As part of work on the proposed Cluster Management API (
https://urldefense.proofpoint.com/v2/url?u=https-3A__cwiki.apache.org_confluence_display_GEODE_Cluster-2BManagement-2BService&d=DwIBaQ&c=lnl9vOaLMzsy2niBC8-h_K-7QJuNJEsFrzdndhuJ3Sw&r=eizM8j4ZzXpU2_4tKNPdsrNNjryTeKuT6UdYhvucPpY&m=9UReCr36HOoKmKBA2EeR4Yt90PYE6_Gc8UYqixePiH0&s=kkajY3s5AEv0xT1NsfOvrKeU3TrwBNvnywM4MvSCRNI&e=),
some of us have been exploring introducing Kotlin into the codebase. One of
the things I personally love about Kotlin is null references being
controlled by the type system, reducing the incidence of null pointer
errors.
Other pros can be found here:
https://urldefense.proofpoint.com/v2/url?u=https-3A__kotlinlang.org_docs_reference_comparison-2Dto-2Djava.html&d=DwIBaQ&c=lnl9vOaLMzsy2niBC8-h_K-7QJuNJEsFrzdndhuJ3Sw&r=eizM8j4ZzXpU2_4tKNPdsrNNjryTeKuT6UdYhvucPpY&m=9UReCr36HOoKmKBA2EeR4Yt90PYE6_Gc8UYqixePiH0&s=O6ZPArxbBsO7-WfW8hLm_lKRsN-fbhYcrev89eBV-gg&e=
We have made a very basic PR as to how this could potentially work.
Personally, I see this usecase as less of a chance to shine for Kotlin than
other potential usecases within geode, because of the fact that we'd still
end up using a lot of Java objects from geode-core in order to exercise the
"create region" functionality. However, I could make a case for Kotlin just
from the fact that it is a more modern language.
Would love to get people's feedback on what they think about introducing
Kotlin to the geode codebase, and whether it makes sense for the Cluster
Management API.
https://github.com/apache/geode/pull/3049
Thanks,
-Aditya