Pular para o conteúdo

18 · Módulos

Kotlin com extern

Funções Kotlin, APIs suspend, objetos vivos e bibliotecas Maven.

Nesta página

Importe kotlin do mesmo plugin jvm que fornece Java. A assinatura usa tipos Zolo e o corpo usa Kotlin. Chame o resultado como qualquer outra função. Estes programas executam pelo CLI com o plugin JVM instalado.

Use templates Kotlin, Long exato, expressão capturada, callback e async.

42-extern-kotlin.zolo
Playground
// parity-timeout-ms:300000

use plugin jvm::{kotlin}

extern kotlin fn greet(name: str) -> str {
    return "Olá, $name!"
}

extern kotlin fn exact(value: int) -> int {
    return value
}

extern kotlin fn relay(callback: fn(int) -> int) -> int {
    return callback(41L)
}

extern kotlin async fn later(value: int) -> int {
    import kotlin.coroutines.suspendCoroutine
    import kotlin.coroutines.resume
    return suspendCoroutine { continuation ->
        Thread { continuation.resume(value + 1L) }.start()
    }
}

let value = 40
let answer: int = extern kotlin { value + 2L }
print(greet("Kotlin"))
print(exact(9007199254740993))
print(relay(|number| number + 1))
print(answer)
print(await later(41))

// expected:

// Olá, Kotlin!

// 9007199254740993

// 42

// 42

// 42

Requer a CLI/host do Zolo — abra no playground ou rode localmente.

int corresponde a Long; use i32 para Kotlin Int. str corresponde a String, valores anuláveis a tipos nativos anuláveis, arrays a coleções tipadas e callbacks a tipos de função Kotlin. Para uma captura isolada, informe o resultado esperado: let answer: int = extern kotlin { value + 2L }.

Fontes e objetos

Importe uma classe Kotlin, construa com .new e altere sua propriedade mutável.

42-extern-kotlin-objects.zolo
Playground
use plugin jvm::{kotlin as k}

extern k from "./kotlin_fixtures/Person.kt" use {Person}

extern k fn same(person: Person) -> Person {
    return person
}

let person = Person.new(name: "João", age: 30)
print(person.name)
person.age = 31
print(person.age)
print(person.greeting())
print(person == same(person))

// expected:
// João
// 31
// Olá, João!
// true

Requer a CLI/host do Zolo — abra no playground ou rode localmente.

extern kotlin from "./Person.kt" use {Person} parte do arquivo Zolo que faz o import. Classes públicas suportadas expõem construtores, métodos e propriedades mutáveis. Objetos vivos mantêm identidade e estado entre bindings preparados. Fontes Kotlin auxiliares alcançáveis são compilados juntos.

extern kotlin async fn cria uma função suspend real e retorna um Future Zolo. APIs suspend importadas e resultados Java CompletionStage usam a mesma ponte assíncrona. Callbacks Kotlin voltam ao runtime Zolo de origem e podem fazer chamadas estrangeiras aninhadas. Cancelar solicita interrupção ou cancelamento da operação adaptada; trabalho que ignora a solicitação pode continuar.

Maven e configuração

Use Guava com uma declaração global de dependência Maven.

42-extern-kotlin-maven.zolo
Playground
// Prepare with `zolo install` or `zolo run ... --install=auto`.
use plugin jvm::{kotlin}

extern kotlin deps {
    "com.google.guava:guava" = "33.4.0-jre"
}

extern kotlin fn join(values: [str]) -> str {
    import com.google.common.base.Joiner
    return Joiner.on(", ").join(values.asIterable())
}

print(join(["Kotlin", "Maven", "Zolo"]))

// expected:
// Kotlin, Maven, Zolo

Requer a CLI/host do Zolo — abra no playground ou rode localmente.

Kotlin e Java compartilham declarações extern ... deps e [foreign.jvm.dependencies]. Prepare com zolo install main.zolo ou permita a preparação na primeira execução com --install=auto. Projetos usam instalação manual por padrão. --offline --frozen usa o ambiente preparado e travado.

A preparação de fontes e as consultas nativas do editor precisam de JDK Java8+ e do compilador/tooling Kotlin pinado. Em um checkout do repositório, adquira explicitamente:

python plugins/jvm/tools/install-kotlin.py --destination .zolo-tools/kotlin-2.3.20

Configure os caminhos ZOLO_KOTLIN_HOME e ZOLO_KOTLIN_ANALYSIS_HOME exibidos; ZOLO_JAVA_HOME seleciona Java. A aquisição verifica hashes SHA256 pinados e não altera uma instalação global de Kotlin. Abrir o editor não baixa dependências nem executa código autoral.

Helpers do compilador e da análise produzem bytecode/diagnósticos em diretórios temporários isolados; a invocação usa JNI dentro do processo Zolo. O editor usa a Analysis API Kotlin sobre o texto não salvo, incluindo edições de autoimport suportadas.

Os artefatos mantêm classes compiladas, stdlib Kotlin, dependências e snapshots do fonte. VM, native e LLVM suportam plugins dinâmicos, embutidos e estáticos sem os fontes ou o compilador Kotlin. A distribuição ainda precisa de JRE compatível. O alvo padrão é Java8; APIs e bibliotecas mais novas podem exigir runtime mais novo. A execução hospedada não está disponível em wasm-aot. A validação atual cobre Windows x64; outras plataformas precisam de validação independente.

Índice global

Encontre seu caminho pela Zolo

Experimente uma ideia

Comece por aqui

9 resultados

9 resultados

enpt-br