Kotlin: игры с кодом
Модератор: Olej
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Kotlin: игры с кодом
Хотел было туда продолжать ... но жалко стало : там получается законченая тема прото как 1). установить Kotlin в разных вариантах + 2). как запускать код написанный Kotlin ... а это совсем не так просто.
Начать туда писать про эксперименты с кодом - потеряется! А жалко.
А код Kotlin понадобился в связи с вот этим: регулярные выражения в программном коде.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Kotlin: игры с кодом
Итого, у меня имеется (там описано):
1. Исходный Kotlin ... с консольным компилятором:
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/ManyLang/ManyLangL.42.exmpl/triangle$ which kotlin
/home/olej/.sdkman/candidates/kotlin/current/bin/kotlin
Код: Выделить всё
olej@R420:~$ kotlin -version
Kotlin version 1.7.20-release-201 (JRE 11.0.17+8-post-Ubuntu-1ubuntu220.04)
Код: Выделить всё
lej@R420:~/2022/own.BOOKs/ManyLang/ManyLangL.42.exmpl/triangle$ which kotlinc
/home/olej/.sdkman/candidates/kotlin/current/bin/kotlinc
Код: Выделить всё
olej@R420:~$ kotlinc -version
info: kotlinc-jvm 1.7.20 (JRE 11.0.17+8-post-Ubuntu-1ubuntu220.04)
Код: Выделить всё
olej@R420:~$ ~/kotlin/kotlin-native/dist/bin/kotlinc-native -version
info: kotlinc-native 1.8.255-SNAPSHOT (JRE 11.0.17+8-post-Ubuntu-1ubuntu220.04)
Kotlin/Native: 1.6.0-dev
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Kotlin: игры с кодом
Возьму за эталон - просто потому что он у меня уже есть:
Код: Выделить всё
olej@R420:~/2022/Kotlin$ cat fibo.kt
fun fib(n: Long): Long {
return if(n < 2.toLong()) 1.toLong() else fib(n - 1) + fib(n - 2);
}
fun main(args: Array<String>) {
val x = args[0].toLong()
println(fib(x))
}
- Вложения
-
- fibo.kt
- (181 байт) 30 скачиваний
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Kotlin: игры с кодом
Это раз - используя Java JVM для запуска:
Код: Выделить всё
olej@R420:~/2022/Kotlin$ time kotlinc fibo.kt -include-runtime -d fiboj.jar
real 0m5,891s
user 0m18,115s
sys 0m1,226s
Код: Выделить всё
olej@R420:~/2022/Kotlin$ ls -l fiboj.jar
-rw-rw-r-- 1 olej olej 4693657 дек 27 07:48 fiboj.jar
olej@R420:~/2022/Kotlin$ file fiboj.jar
fiboj.jar: Zip archive data, at least v2.0 to extract
Код: Выделить всё
olej@R420:~/2022/Kotlin$ java -jar fiboj.jar 10
89
Код: Выделить всё
olej@R420:~/2022/Kotlin$ time java -jar fiboj.jar 43
701408733
real 0m2,532s
user 0m2,546s
sys 0m0,037s
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Kotlin: игры с кодом
Это два - используя исполняющую систему Kotlin - без JVM:
Код: Выделить всё
olej@R420:~/2022/Kotlin$ time kotlinc fibo.kt -d fibo.jar
real 0m4,982s
user 0m18,206s
sys 0m0,740s
Код: Выделить всё
olej@R420:~/2022/Kotlin$ ls -l *.jar
-rw-rw-r-- 1 olej olej 1284 дек 27 08:19 fibo.jar
-rw-rw-r-- 1 olej olej 4693657 дек 27 07:48 fiboj.jar
-rw-rw-r-- 1 olej olej 4693506 дек 13 11:35 hello.jar
Код: Выделить всё
olej@R420:~/2022/Kotlin$ ls -l *.jar
-rw-rw-r-- 1 olej olej 1284 дек 27 08:19 fibo.jar
-rw-rw-r-- 1 olej olej 4693657 дек 27 07:48 fiboj.jar
Код: Выделить всё
olej@R420:~/2022/Kotlin$ file fibo.jar
fibo.jar: Zip archive data, at least v2.0 to extract
Код: Выделить всё
olej@R420:~/2022/Kotlin$ kotlin -classpath fibo.jar FiboKt 10
89
Код: Выделить всё
olej@R420:~/2022/Kotlin$ time kotlin -classpath fibo.jar FiboKt 43
701408733
real 0m2,676s
user 0m2,674s
sys 0m0,124s
Не считая размеров jar-файлов - отличающихся больше чем на 3 порядка! ... 3655 раз
В чём разница?
Не знаю, пока...
Нужно будет полюбопытствовать...
P.S. С этой строкой запуска пришлось пободаться ... откуда берутся такие её параметры?
- -classpath fibo.jar - это понятно, это имя файла скомпилированного архива байткода JAR...
- а FiboKt Это имя класса (в Java, а значит и Kotlin, всё - класс!) в котором находится стартовая функция main() ... И образуется это ия так: <имя файла кода с большой буквы> + суффикс 'Kt'
Вот такой маленький эксперимент (с изменённым именем выходного архива):
Код: Выделить всё
olej@R420:~/2022/Kotlin$ kotlinc fibo.kt -d fibo2.jar
Код: Выделить всё
olej@R420:~/2022/Kotlin$ kotlin -classpath fibo2.jar FiboKt 10
89
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Kotlin: игры с кодом
Это три: компиляция в нативный код OS ... в данном случае x86_64 Linux:
Код: Выделить всё
olej@R420:~/2022/Kotlin$ time ~/kotlin/kotlin-native/dist/bin/kotlinc-native fibo.kt -o fibo
real 0m16,951s
user 0m23,052s
sys 0m1,526s
Код: Выделить всё
olej@R420:~/2022/Kotlin$ ls -l fibo*
-rw-r--r-- 1 olej olej 231 дек 11 22:00 fibo.c
-rw-rw-r-- 1 olej olej 1284 дек 27 08:19 fibo.jar
-rw-rw-r-- 1 olej olej 4693657 дек 27 07:48 fiboj.jar
-rwxrwxr-x 1 olej olej 943736 дек 27 08:42 fibo.kexe
-rw-rw-r-- 1 olej olej 181 дек 11 22:01 fibo.kt
Код: Выделить всё
olej@R420:~/2022/Kotlin$ file fibo.kexe
fibo.kexe: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.16, BuildID[sha1]=d1fece2a4e8e3cb1c4e188f95e44f2d65929496d, not stripped
Код: Выделить всё
olej@R420:~/2022/Kotlin$ time ./fibo.kexe 43
701408733
real 0m13,214s
user 0m13,215s
sys 0m0,000s
Но это, в общем то, можно ожидать и объяснить.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Kotlin: игры с кодом
Для этого делаю заготовку:
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/Localiz/regex.cod$ cat regexk1.kt
import kotlin.system.*
fun main(args: Array<String>) {
val pattern : String = args[0]
println("строка шаблона: <$pattern> - длиной ${pattern.length}")
while (true) {
var ввод : String = readln()
if (0 == ввод.length) // пустая строка
exitProcess(0)
println("целевая строка: <$ввод> - длиной ${ввод.length}")
}
}
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/Localiz/regex.cod$ kotlinc regexk1.kt -d regexk1.jar
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/Localiz/regex.cod$ kotlin -classpath regexk1.jar Regexk1Kt "\d\d\d"
строка шаблона: <\d\d\d> - длиной 6
qwerty
целевая строка: <qwerty> - длиной 6
слово
целевая строка: <слово> - длиной 5
слово слово
целевая строка: <слово слово> - длиной 11
Что отличается от Go, Rust ...
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Kotlin: игры с кодом
И то же самое, но по-другому:
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/Localiz/regex.cod$ make regexk1.jar
kotlinc regexk1.kt -include-runtime -d regexk1.jar
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/Localiz/regex.cod$ java -jar regexk1.jar "\d\d\d"
строка шаблона: <\d\d\d> - длиной 6
qwerty
целевая строка: <qwerty> - длиной 6
строка
целевая строка: <строка> - длиной 6
line
целевая строка: <line> - длиной 4
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Kotlin: игры с кодом
Эта часть доделана: регулярные выражения в программном коде.
Теперь в этой теме будет продолжаться, при случае, всё что относится к образцам кода Kotlin.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей