Команда проекта Kotlin/Native представила релиз версии 0.8. Исправления и дополнения коснулись безопасности многопоточного программирования, расширения функциональности библиотек и поддержки устройств iOS. Также исправлены баги и проведена оптимизация.
Параллелизм
Реализована концепция замораживания объектов. Например, код:
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)
}
}
}
считает файл конфигурации и позже получит свойство Config.width
. Сам файл Config
делится для любого количества потоков или воркеров. После публикации объект замораживается и любая попытка его изменения приведёт к генерированию исключения (InvalidMutabilityException
).
Второй особенностью, характерной для параллелизма в проекте Kоtlin/Native, являются неделимые значения и ссылки. Можно расширить конфигурацию и добавить, к примеру, иконку:
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())
}
}
Вся информация об иконке в AtomicReference
заморожена. Любые изменения неделимы и каждому клиенту видны схожие данные.
Библиотеки Kotlin
Стандартная библиотека (kоtlin.*) с этого момента совместима с другими платформами. Стандартный генератор чисел и функция перемешивания коллекции призваны избавить от использования заточенных под определённую платформу API. В качестве эксперимента проект поддерживает и другие библиотеки, например, kotlinx.coroutines
, kotlinx.serialization
, а также клиент Ktor HTTP.
Изменения для iOS-устройств
Устранены проблемы с публикацией в App Store и инициализацией платформы. Добавлена поддержка 32-разрядной ARM-архитектуры процессоров iOS, что позволяет использовать Kotlin/Native на старых устройствах от Apple.
В апреле 2018 года появилась возможность запускать и изменять код прямо на веб-странице.
Источник: блог Kotlin