What's the Deal with @JvmDefault?
Kotlin has an annotation called
@JvmDefault which, like most of the “Jvm” prefixed annotations, exists to help massage the Kotlin compiler output to match Java classes in a certain way. This annotation was added in 1.2.40, and has now seen some experimental enhancements in 1.2.50, so it seems worth exploring what this is all about.
Diagnosing a 3.6L "Pentastar" Jeep JK Radiator Fan Issue (Code: P0480)
Recently, I was driving my 2015 Jeep Wrangler JK Unlimited through a parking lot on a 95 degree day, and after leaving a stop sign, a check engine light flashed on (later I would learn it was a P0480 Cooling Fan Relay 1 Control Circuit), and shortly thereafter my Jeep overheated. What followed was a multi-day Google searching and diagnostic session, which made me realize there is a lack of information as well as a lot of mis-information about the 3.6L “Pentastar” Jeep Wrangler model years, and how the radiator fan works.
This is my summary of what I learned about the cooling fans on these Jeeps, so hopefully more people can diagnose issues themselves.[Read More]
Tail Recursion in Kotlin
Tail recursion can be a very elegant way to solve problems that involve a significant number of iterations but are better organized using recursion, without paying the cost you normally pay for recursion. Kotlin can enable the use of tail recursion. To understand the benefits of this, a quick recap would be of value.[Read More]
Kotlin: Reified Type Function Parameters
As most Java programmers know, Java generics are erased at compile-time. This has trade-offs, but the two main reasons for this are:
- Compatibility - Java 1.4 and earlier dealt exclusively in raw types at the VM level. Generics were able to compile without introducing significant new typing to the bytecode and classfile format spec, and having to deal with older classes generated without that typing.
- Simplicity - By erasing to raw types, the JVM doesn’t have to understand specialization; something that has its own complexities and downsides. For example, specialized types are much more challenging to optimize with a just-in-time compiler.
However, knowing the type parameters used at runtime can have real value, and it’s something Java simply doesn’t offer. Kotlin would like to help in this area, but there are many challenges in doing so.[Read More]
Kotlin Logging Without the Fuss
One of Kotlin’s strengths is that generally speaking, the code you might write in Java is generally more compact in Kotlin without losing any of the readability, functionality, or performance.
An odd case where that doesn’t prove to be true is declaring loggers as Java developers.[Read More]
JVMLS 2017: Pattern Matching in Java
This year at JVMLS, Brian Goetz talked about Pattern Matching on the JVM and how it might be modeled. In particular he spoke about:
- How Scala does it
- How C# does it
- How Java might do it
- How Java could do it with amortized constant-time Matching
Kotlin Libraries: Concurrency
Today’s Kotlin library article is about the
kotlin.concurrent package, and everything that adds to the platform.
Java’s concurrency package is already quite sophisticated, and rather than re-invent so many extremely delicate abstractions, the Kotlin authors focused on making the libraries better suited to the language by decorating and shortening various features.[Read More]
Using OSX? Why Aren't You Using iTerm, ZSH, and Prezto?
Most developers I run into today (as well as most dev shops) are using Macbooks as their development platform of choice. However, I’ve been surprised how many are using defaults. Notably:
- Minimal/No Prompt Customization
- Standard OSX terminal
There’s an opportunity to massively improve your terminal experience with a few steps.[Read More]
Currying and Partial Application in Kotlin
Many moons ago, I wrote an article on the feasibility of currying and partial application in Java 8, and asserted that, while it was technically feasible, explicit and thorough type syntax in the language, as well as inflexible operator notation prevented it from being approachable. In comparison, is Kotlin up to the challenge?[Read More]