Написать пост

Вышла новая версия Kotlin/Native 0.8

Аватар Артем Гаврилов

Особенности релиза позволяют использовать его на iOS-устройствах прошлых лет, улучшает многопоточное программирование и расширяет использование библиотек Kotlin.

Команда проекта 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 года появилась возможность запускать и изменять код прямо на веб-странице.

Следите за новыми постами
Следите за новыми постами по любимым темам
2К открытий2К показов