• The top 4 JBCI languages and why developers love them

    From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.misc on Sat Nov 1 06:10:38 2025
    From Newsgroup: comp.lang.misc

    This article <https://www.infoworld.com/article/4069133/the-top-4-jvm-languages-and-why-developers-love-them.html>
    gives an intro to 4 languages all implemented on top of the Java
    byte-code interpreter (called a “VM” for some reason): Kotlin, Scala, Groovy and Clojure.

    Kotlin, of course, has won support from Google as the preferred
    development language for Android, as a raised middle finger to Oracle
    over its absolutely stupid and vindictive lawsuit over Java.

    According to the article, Scala “differentiates itself from other JVM languages by making functional programming foundational and
    implementing it rigorously”. But I see the example Scala code has “println” in it, which is a procedural, not functional, construct. It
    is simply not possible to create a language that implements the
    pure-functional concept “rigorously”, as otherwise I/O becomes
    impossible.

    Groovy I find interesting, because I discovered that it combines
    custom operator overloads with making parentheses optional around
    arguments to method calls in many situations, to allow you to create a “DSL” -- a language customized for a particular application domain,
    with its own custom-looking syntactic constructs.

    Metaprogramming in Groovy ... I followed the link to the intro
    article, but didn’t see anything in there to match the power of
    Python’s metaclasses. Prove me wrong, I guess ...

    Clojure -- yeah, it’s another Lisp dialect. What special features
    could it possibly offer that could not be retrofitted in the form of
    library function/macro calls to an existing Lisp or Scheme dialect?
    --- Synchronet 3.21a-Linux NewsLink 1.2
  • From David Brown@david.brown@hesbynett.no to comp.lang.misc on Sat Nov 1 23:57:44 2025
    From Newsgroup: comp.lang.misc

    On 01/11/2025 07:10, Lawrence D’Oliveiro wrote:
    This article <https://www.infoworld.com/article/4069133/the-top-4-jvm-languages-and-why-developers-love-them.html>
    gives an intro to 4 languages all implemented on top of the Java
    byte-code interpreter (called a “VM” for some reason): Kotlin, Scala, Groovy and Clojure.

    Kotlin, of course, has won support from Google as the preferred
    development language for Android, as a raised middle finger to Oracle
    over its absolutely stupid and vindictive lawsuit over Java.

    According to the article, Scala “differentiates itself from other JVM languages by making functional programming foundational and
    implementing it rigorously”. But I see the example Scala code has “println” in it, which is a procedural, not functional, construct. It
    is simply not possible to create a language that implements the pure-functional concept “rigorously”, as otherwise I/O becomes impossible.


    It is possible to have IO in very pure functional programming languages,
    but it is quite awkward. You can imagine a function taking "the world
    before the printf output" as a parameter, and returning "the world after
    the printf output" as the result. In practice, monads are used as a
    sort of gateway between the functional world and the concepts of "side effects" and "observable behaviour" known from imperative programming.
    But if you want to know how monads do this, I hope someone else can give
    you an explanation!

    Scala is, however, not a pure functional programming language. I
    haven't really tried it as yet, but it seems to me that it is one of
    many modern languages that combines functional and object oriented
    imperative constructs. Unlike, say, C++, the functional programming
    aspect is fundamental to Scala - but it is not limited to functional programming.

    Groovy I find interesting, because I discovered that it combines
    custom operator overloads with making parentheses optional around
    arguments to method calls in many situations, to allow you to create a “DSL” -- a language customized for a particular application domain,
    with its own custom-looking syntactic constructs.


    Scala is regularly used for DSLs. I know of a number of hardware
    development languages in Scala DSLs (Chisel is popular, and there's a
    fine RISC-V core written in SpinalHDL). I can't say how Scala and
    Groovy compare for DSLs.

    Metaprogramming in Groovy ... I followed the link to the intro
    article, but didn’t see anything in there to match the power of
    Python’s metaclasses. Prove me wrong, I guess ...

    Clojure -- yeah, it’s another Lisp dialect. What special features
    could it possibly offer that could not be retrofitted in the form of
    library function/macro calls to an existing Lisp or Scheme dialect?

    --- Synchronet 3.21a-Linux NewsLink 1.2