Страница 3 из 3
Re: Kotlin: установка и использование
Добавлено: 12 дек 2022, 04:35
Olej
Olej писал(а): ↑12 дек 2022, 02:48
UTF-8 локализованные символы (Unicode, мультиязычные) используются не только внутри строк и строковых шаблонов ($c), но и в именах объектов программы!
Этот пример был написан ещё в стиле Java (от которой наследуется Kotlin) и импортируя пакет Java...
Можно переписать, упростить в стиле Kotlin и без всякого импорта из пакетов Java:
Код: Выделить всё
olej@R420:~/2022/Kotlin$ cat stringd2.kt
import kotlin.system.*
fun main() {
while (true) {
print("строка? : ")
var ввод : String
try { ввод = readln() } // чтение строки из консоли
catch (ex : RuntimeException) { // EOF: ^D
println("завершение работы")
exitProcess(0)
}
var len = ввод.length
if (0 == len) { // пустая строка
println("завершение работы")
exitProcess(0)
}
println("введена строка $ввод длиной $len")
}
}
Код: Выделить всё
olej@R420:~/2022/Kotlin$ kotlinc stringd2.kt -include-runtime -d stringd2.jar
Код: Выделить всё
olej@R420:~/2022/Kotlin$ java -jar stringd2.jar
строка? : latin string
введена строка latin string длиной 12
строка? : Здравствуйте
введена строка Здравствуйте длиной 12
строка? : 你好
введена строка 你好 длиной 2
строка? : السلام عليكم
введена строка السلام عليكم длиной 12
строка? : عليكم
введена строка عليكم длиной 5
строка? :
завершение работы
Re: Kotlin: установка и использование
Добавлено: 12 дек 2022, 04:40
Olej
Olej писал(а): ↑11 дек 2022, 14:28
Интерес представляет
Ну вот, собственно и всё, что я ставил себе этой темой задачей...
Разве что ещё Makefile чтобы каждый раз не набирать длинные строки сборки:
Код: Выделить всё
olej@R420:~/2022/Kotlin$ cat Makefile
KTN=~/kotlin/kotlin-native/dist/bin/kotlinc-native
TASKS = hello.jar hello.kexe fibo fibo.jar fibo.kexe \
stringc.jar stringc.kexe stringd.jar stringd.kexe \
stringb.jar stringb.kexe stringd2.jar stringd2.kexe
%: %.c
gcc -O3 $< -o $@
%.jar: %.kt
kotlinc $< -include-runtime -d $@
%.kexe: %.kt
$(KTN) $< -o $@ -opt
all: $(TASKS)
arch: clean
tar -czf kotlin.tgz *
clean:
rm -f $(TASKS) *.tgz
Например:
Код: Выделить всё
olej@R420:~/2022/Kotlin$ make stringd2.jar
kotlinc stringd2.kt -include-runtime -d stringd2.jar
Код: Выделить всё
olej@R420:~/2022/Kotlin$ make stringd2.kexe
~/kotlin/kotlin-native/dist/bin/kotlinc-native stringd2.kt -o stringd2.kexe -opt
Код: Выделить всё
olej@R420:~/2022/Kotlin$ ls -l stringd2*
-rw-rw-r-- 1 olej olej 4693909 дек 12 09:26 stringd2.jar
-rwxrwxr-x 1 olej olej 534256 дек 12 09:26 stringd2.kexe
-rw-rw-r-- 1 olej olej 668 дек 12 09:25 stringd2.kt
И так для всех упоминающихся программ.
Re: Kotlin: установка и использование
Добавлено: 28 дек 2022, 13:47
Olej
3 варианта сборки и выполнения одного и того же кода Kotlin (вот отсюда пример:
регулярные выражения в программном коде ... но это конкретно не имеет значения), в порядке итогового сравнения:
1. под исполнение в JVM виртуальной машине Java:
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/Localiz/regex.cod$ time kotlinc regexk1.kt -include-runtime -d regexk1.jar
real 0m6,722s
user 0m21,178s
sys 0m1,711s
2. под исполнение в исполняющей системе Kotlin:
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/Localiz/regex.cod$ time kotlinc regexk1.kt -d regexk1k.jar
real 0m5,353s
user 0m20,444s
sys 0m1,031s
3. компиляция в нативный код Linux:
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/Localiz/regex.cod$ time ~/kotlin/kotlin-native/dist/bin/kotlinc-native regexk1.kt -o regexk1
real 0m23,788s
user 0m29,527s
sys 0m1,926s
Итоговые результаты:
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/Localiz/regex.cod$ ls -l regexk*
-rw-rw-r-- 1 olej olej 4694586 дек 28 12:42 regexk1.jar
-rwxrwxr-x 1 olej olej 2084152 дек 28 12:44 regexk1.kexe
-rw-rw-r-- 1 olej olej 2213 дек 28 12:43 regexk1k.jar
-rw-rw-r-- 1 olej olej 706 дек 27 22:28 regexk1.kt
Re: Kotlin: установка и использование
Добавлено: 28 дек 2022, 14:53
Olej
Olej писал(а): ↑28 дек 2022, 13:47
Итоговые результаты:
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/Localiz/regex.cod$ ls -l regexk*.jar
-rw-rw-r-- 1 olej olej 4694586 дек 28 12:42 regexk1.jar
-rw-rw-r-- 1 olej olej 2213 дек 28 12:43 regexk1k.jar
Откужа такая разница (в 2121 раз!) понятно: это содержимое всего runtime, его классы.
Сравним:
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/Localiz/regex.cod$ unzip -l regexk1k.jar
Archive: regexk1k.jar
Length Date Time Name
--------- ---------- ----- ----
78 1980-01-01 00:00 META-INF/MANIFEST.MF
3084 1980-01-01 00:00 Regexk1Kt.class
39 1980-01-01 00:00 META-INF/main.kotlin_module
--------- -------
3201 3 files
А теперь то, что подготовлено для JVM:
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/Localiz/regex.cod$ unzip -l regexk1.jar | head
Archive: regexk1.jar
Length Date Time Name
--------- ---------- ----- ----
78 1980-01-01 00:00 META-INF/MANIFEST.MF
3084 1980-01-01 00:00 Regexk1Kt.class
39 1980-01-01 00:00 META-INF/main.kotlin_module
596 1980-01-01 00:00 kotlin/collections/ArraysUtilJVM.class
2721 1980-01-01 00:00 kotlin/jvm/internal/AdaptedFunctionReference.class
898 1980-01-01 00:00 kotlin/jvm/internal/CallableReference$NoReceiver.class
4173 1980-01-01 00:00 kotlin/jvm/internal/CallableReference.class
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/Localiz/regex.cod$ unzip -l regexk1.jar | wc -l
2819
olej@R420:~/2022/own.BOOKs/Localiz/regex.cod$ unzip -l regexk1.jar | grep class$ | wc -l
2802
Этот вариант содержит, кроме
того же (судя по размеру) класса байт-кода Regexk1Kt.class, ещё 2801 классов исполняющей системы (runtime).
Kotlin: установка и использование
Добавлено: 20 ноя 2023, 18:25
Olej
Отсюда (Telegram) книгу можно свободно скачать: