Gradle 4.0 released

New version of Gradle is now available
15 June 2017   1326

Gradle 4.0. was recently announced by the Gradle Team.

Here is some great new features and improvements in this release:

First of all, Gradle's Build Cache is now production-ready for Java and Groovy compilation and Java test tasks! This provides great performance, making Gradle builds up to 100x faster than Maven in common cases. It is also improved by overlapping outputs detection, configurable classpath normalization that avoids unnecessary task execution, see more in the full release notes. The caching of other tasks, including even other languages, will be provided in future releases. Here is a guide from the developers for maximizing effectiveness of Gradle Build Cache.

Java

 Popular general-purpose programming language and computing platform

Now let's take a look from a user side: this version has a few improvements in logging and terminal display. Log output is now grouped by project and task when attached to a terminal — output from tasks run in parallel will no longer be interleaved. However, logging behaves the same way as previous Gradle versions in non-interactive environments, and use

 --console=plain

to allow automated tools like CI systems to parse the logs they expect.

Gradle
Gradle

The console output have more info about what exactly is in-progress at the moment, and parallel work in-progress is now displayed by default. Check this guide for more user's info.

Another interesting feature - metadata and artifacts from remote repositories are now downloaded in parallel. Gradle also avoids downloading the same dependency twice even if parallel tasks request the same one simultaneously.

Gradle in actionGradle in action

Also, good news for Kotlin coders - Gradle Script Kotlin v0.9.0 brings cool new features: auto-detection of Kotlin scripts, default import for the whole Gradle API, improved samples and docs with an API reference, better IntelliJ experience.

Kotlin

Statically-typed programming language that runs on the Java Virtual Machine and also can be compiled to JavaScript source code

Public type that represents lazily-evaluated properties(aka ConventionMapping) is also added to this release. This is one of the most expected features by plugin creators. You can have more info about PropertyStates here. Great example of it's usage can be found here.

Gradle is great solution which is frequently used in Android development. Version 4.0 brings great performance increase. Can't wait to use in real project!
 

Dmitry Karpunin
Chief Front-End Developer at Evrone

Upgrade Instructions

You can switch your version or Gradle to 4.0 fast by updating your wrapper properties:

./gradlew wrapper --gradle-version=4.0

Standalone download link.

Reporting Problems

Feel free to create issue on GitHub if you will find any bugs.

Source code download link.

JetBrains to Roll Out Kotlin/Native 0.8

Version 0.8 of Kotlin/Native brings new features and bug fixes
13 July 2018   137

The project team of Kotlin / Native introduced the release of version 0.8. Corrections and additions have concerned the security of multithreaded programming, the expansion of library functionality and support for iOS devices. As always, alot of bugs are fixed.

Parallelism

Implemented the concept of object freezing

object Config {
  var width: Int = 10
  private set
  init {
    val file = fopen("config.txt", "r")
    if (file != null) {
              try {
              val buffer = ByteArray(2 * 1024)
                 while (true) {
                 val nextLine = fgets(buffer.refTo(0), buffer.size, file)?.toKString()
                 if (nextLine == null || nextLine.isEmpty()) break
                 val records = nextLine.split('=')
                 if (records.size != 2) continue
                 val key = records[0].trim()
                 val value = records[1].trim()
                 when (key) {
                         "width" -> width = value.toInt()
                            }
                          }
                        }
             } finally {
                fclose(file)
                    }
         }
}

This code considers the configuration file and will later receive the Config.width property. 

The Config file itself is divided for any number of threads or vorkers. After publication, the object is frozen and any attempt to change it will result in an exception (InvalidMutabilityException).

The second peculiarity of parallelism in the Kotlin / Native project is indivisible values and references. Let's add an image:

object Config {
private val icon_ = AtomicReference()
val icon: Image
get() = icon_.get()!!
fun updateIcon(file: String) {
val imageData = Image(file)
icon_.compareAndSwap(icon_.get(), imageData.freeze())
}
}

All information about the icon in the AtomicReference is frozen. Any changes are indivisible and similar information is visible to each client.

Kotlin Libraries

Starting v 0.8, the standard library (kotlin. *) is compatible with other platforms. Standard number generator and the function of mixing the collections are designed to eliminate the use of sharpened for a specific platform API. As an experiment, the project supports other libraries, for example, kotlinx.coroutines, kotlinx.serialization, and also the Ktor HTTP client.

Changes for iOS devices

Fixed issues with the publication in the App Store and the initialization of the platform. Support for the 32-bit ARM architecture of iOS processors, which allows using Kotlin / Native on older devices from Apple added.