From 009deaa2e64d3d810d8b7ff07bac95086cdabc53 Mon Sep 17 00:00:00 2001 From: Carlos Ballesteros Velasco Date: Sun, 8 Jul 2018 11:30:02 +0200 Subject: [PATCH] FAQ: Question headings (#1776) --- FAQ.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/FAQ.md b/FAQ.md index d3aadc6cc3f..0d6cfaf51e5 100644 --- a/FAQ.md +++ b/FAQ.md @@ -1,18 +1,18 @@ -Q: How do I run my program? +### Q: How do I run my program? A: Define top level function `fun main(args: Array)`, please ensure it's not in a package. Also compiler switch `-entry` could be use to make any function taking `Array` and returning `Unit` be an entry point. -Q: What is Kotlin/Native memory management model? +### Q: What is Kotlin/Native memory management model? A: Kotlin/Native provides automated memory management scheme, similar to what Java or Swift provides. Current implementation includes automated reference counter with cycle collector to collect cyclical garbage. -Q: How do I create shared library? +### Q: How do I create shared library? A: Use `-produce dynamic` compiler switch, or `konanArtifacts { dynamic('foo') {} }` in Gradle. It will produce platform-specific shared object (.so on Linux, .dylib on macOS and .dll on Windows targets) and @@ -21,21 +21,21 @@ See `samples/python_extension` as an example of using such shared object to prov Kotlin/Native. -Q: How do I create static library or an object file? +### Q: How do I create static library or an object file? A: Use `-produce static` compiler switch, or `konanArtifacts { static('foo') {} }` in Gradle. It will produce platform-specific static object (.a library format) and C language header, allowing to use all public APIs available in your Kotlin/Native program from C/C++ code. -Q: How do I run Kotlin/Native behind corporate proxy? +### Q: How do I run Kotlin/Native behind corporate proxy? A: As Kotlin/Native need to download platform specific toolchain, you need to specify `-Dhttp.proxyHost=xxx -Dhttp.proxyPort=xxx` as compiler's or `gradlew` arguments, or set it via `JAVA_OPTS` environment variable. -Q: How do I specify custom Objective-C prefix/name for my Kotlin framework? +### Q: How do I specify custom Objective-C prefix/name for my Kotlin framework? A: Use `-module_name` compiler option or matching Gradle DSL statement, i.e. ``` @@ -45,21 +45,21 @@ framework("MyCustomFramework") { ``` -Q: Why do I see `InvalidMutabilityException`? +### Q: Why do I see `InvalidMutabilityException`? A: It likely happens, because you are trying to mutate a frozen object. Object could transfer to the frozen state either explicitly, as objects reachable from objects on which `konan.worker.freeze` is called, or implicitly (i.e. reachable from `enum` or global singleton object - see next question). -Q: How do I make a singleton object mutable? +### Q: How do I make a singleton object mutable? A: Currently, singleton objects are immutable (i.e. frozen after creation), and it's generally considered a good practise to have global state immutable. If for some reasons you need mutable state inside such an object, use `@konan.ThreadLocal` annotation on the object. Also `konan.worker.AtomicReference` class could be used to store different pointers to frozen objects in a frozen object and atomically update those. -Q: How can I compile my project against Kotlin/Native master? +### Q: How can I compile my project against Kotlin/Native master? A: We release dev builds frequently, usually at least once a week. You can check the [list of available versions](https://bintray.com/jetbrains/kotlin-native-dependencies/kotlin-native-gradle-plugin). But in the case we recently fixed an issue and you want to check before a release is done, you can do: