Kotlin: установка и использование

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Kotlin: установка и использование

Непрочитанное сообщение Olej » 12 дек 2022, 04:35

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
строка? : 
завершение работы
Вложения
stringd2.kt
(668 байт) 22 скачивания

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Kotlin: установка и использование

Непрочитанное сообщение Olej » 12 дек 2022, 04:40

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
И так для всех упоминающихся программ.
Вложения
kotlin.tgz
(21.04 КБ) 24 скачивания

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Kotlin: установка и использование

Непрочитанное сообщение Olej » 28 дек 2022, 13:47

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

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Kotlin: установка и использование

Непрочитанное сообщение Olej » 28 дек 2022, 14:53

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).

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Kotlin: установка и использование

Непрочитанное сообщение Olej » 20 ноя 2023, 18:25

Отсюда (Telegram) книгу можно свободно скачать:



Тема поднималась пользователем Olej 20 ноя 2023, 18:25.

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 15 гостей