On Mon, Jan 1, 2024 at 1:57 AM MG <mg...@arscreat.com> wrote:

> Hi Vasileios,
>
> we use our own Groovy framework to develop an in-house multi part web
> application and accompanying SQL & PL/SQL generation framework, and have
> been using Groovy for 10 years, including some dabbling in the
> @CompileStatic predecessor Groovy++ (which later afaik gave birth to
> Kotlin).
>
> Contrary to many ppl here I love static compilation checks - in my book
> there is nothing more annoying than to get an incompatible-type-RTE, and it
> also makes code more readable to use explicit types & easier to refactor
> automatically (e.g. through IntelliJ). And no, I do not have time to write
> a test or execute a Selenium test (suite) before every rollout during
> development, to catch any potential errors of that kind, so I would much
> rather have the compiler catch those, thank you ver much* :-)
>
> Having said that, I have come to realize what I actually want to use in
> Groovy 99% of the time is @TypeChecked, not @CompileStatic, and the reason
> for this is simple: Dynamic call site selection. Dynamic call site
> selection is a feature I have already seen people request for Kotlin, which
> e.g. allows one to easily add polymorphic method support for newly
> introduced sub-types, without any refactoring effort (while still keeping
> type safety, i.e. in fully @TypeChecked code).
>
> On the other hand in practice there is most of the time very little to
> nothing to be gained from using @CompileStatic, even in low level code,
> because a) dynamic code execution is highly optimized in Groovy** so there
> is no relevant speed difference, and b) in most cases even that would not
> matter, since performance of business applications is mostly bound by
> database and network performance.
>
> Cheers & a Happy 2024,
> mg
>
> *@TypeChecked is not yet perfect here, it on occasion lets code slip
> through, which later leads to a RTE, while sometimes complaining about code
> which is actually valid (most of the time when using generics), but it
> still is of great value, and one can of course always make a method fully
> dynamic as a workaround in these cases (a bit counterintuitively not by
> using @CompileDynamic, but @TypeChecked with TypeCheckingMode.SKIP).
>
> **Alas that is not the case for JVM invoke dynamic, which is much slower
> when generating a really large number of objects, which recently required
> us to make a part of our SQL generation code less user friendly, to make
> Groovy 3/4 with invoke dynamic as fast as the old Groovy-specifc code which
> did not rely on invoke dynamic...
>
>
> On 30/12/2023 19:17, Agile Developer wrote:
>
> Hi,
>
> I was a  4 years user of Grails/Groovy (last year mostly Python). With the
> general trend of people moving to static languages, is there any reason
> that Groovy needs to stay dynamic?
>
> I see Python having the mypy approach, I see gradle moving to Kotlin and
> FE mostly on Typescript.
>
> I understand that the @CompileStatic is the supported method, but having
> true static typing (with the Script-Like enhancements other Languages
> added, would be beneficial).
>
> Is there still a reason to keep it dynamic? What is the benefit?
>
> --
> Dr. Vasileios Anagnostopoulos (MSc,PhD)
> Researcher/Developer
>
>
>
>  @CompileStatic predecessor Groovy++ (which later afaik gave birth to
Kotlin).

I totally agree here. In a sense Kotlin is a statically-typed Groovy.


-- 
Dr. Vasileios Anagnostopoulos (MSc,PhD)
Researcher/Developer

Reply via email to