+1
Sounds like a fun project!

--Srijeet

On 6/21/21, 8:43 PM, "Zach Hoffman" <[email protected]> wrote:

    Hi Traffic Control!

    As you all may know, the current implementation of Traffic Router runs on
    Java 8. While coding directly in Java is still done, there are some reasons
    to be critical of Java.

    Java often has very verbose syntax when trying to accomplish simple things.
    This has made the Traffic Router codebase grow larger over time, leading to
    maintainability issues. Also, Java suffers from lack of compile-time safety
    in some ways that more modern languages do not. For these reasons, and
    because Java is a very old language, some developers who may otherwise be
    interested in contributing to Apache Traffic Control may be disinterested
    contributing to Traffic Router in particular, simply because they want to
    work with more modern languages that do not have the issues that Java does.

    Kotlin, a JVM language devised by Jetbrains with the goal of tackling these
    problems, has exploded in popularity in recent years, and Kotlin is
    becoming a standard way to use the JVM, with Google choosing it as the
    preferred language to for developing Android apps. More importantly, as the
    Intellij IDEA Kotlin plugin lets you convert Java sources to Kotlin (either
    at the file level or an entire project, or anywhere in between), Kotlin has
    become a low-effort way to decrease tech debt across large Java projects.

    Back to Traffic Router: In order to gauge how we would benefit from
    converting Traffic Router to Kotlin (it really is a matter of *converting*,
    not rewriting), I converted all of the tests in the Traffic Router "Core"
    module to Kotlin. You can see the result here (as you can see from GitHub
    Actions, the TR tests all pass): <
    
https://urldefense.com/v3/__https://github.com/zrhoffman/trafficcontrol/commits/tr-kotlin__;!!CQl3mcHX2A!UCz457i9stX5A-AP8jvvWo21Rqa43JRsC1jQt_fo5nb07raZxByUR9gAGVPZTI4tGhalAel2$
 >

    Some observations:
    - Without any putting any effort into optimizing the existing code, lines
    of code shrunk from 10572 in Java to 10217 in Kotlin. See: <
    
https://urldefense.com/v3/__https://github.com/zrhoffman/trafficcontrol/commit/5add06bccc__;!!CQl3mcHX2A!UCz457i9stX5A-AP8jvvWo21Rqa43JRsC1jQt_fo5nb07raZxByUR9gAGVPZTI4tGqGQTevX$
 >
    - Because it now includes the Kotlin standard library, the Traffic Router
    RPM size increases from 48MB to 58MB.
    - The converted sources benefit from Kotlin's null safety and type safety
    (avoiding wildcard types). See <
    
https://urldefense.com/v3/__https://github.com/zrhoffman/trafficcontrol/commit/0c2eec39d9__;!!CQl3mcHX2A!UCz457i9stX5A-AP8jvvWo21Rqa43JRsC1jQt_fo5nb07raZxByUR9gAGVPZTI4tGjjMNj-F$
 > (Kotlin
    error resolution) and <
    
https://urldefense.com/v3/__https://github.com/zrhoffman/trafficcontrol/commit/d8a0fd3bca__;!!CQl3mcHX2A!UCz457i9stX5A-AP8jvvWo21Rqa43JRsC1jQt_fo5nb07raZxByUR9gAGVPZTI4tGoysImMb$
 > (Kotlin
    warning resolution) for the changes involved.

    As a side note, because of Oracle's aggressive legal practices, and because
    they really do want you to think that they own Java (see: Google LLC v.
    Oracle America, Inc.), using Java in Apache Traffic Control is not really
    in the spirit of free software. Kotlin is an Apache 2.0-licensed project,
    so switching to Kotlin would be a true FOSS win for the ATC community.

    So, converting the rest of Traffic Router would be relatively fast and
    easy, would result in *no* functionality gained or lost, would leave TR
    usage totally unchanged, would make development more enjoyable for current
    TR devs, and would maybe catch the interest of additional devs who
    otherwise may not be interested in Traffic Router.

    How does this sound?

    -Zach

Reply via email to