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

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

Модератор: Olej

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

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

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

У нас уже есть тут темы про Kotlin в достатке:
Kotlin
код Kotlin & Java

Но :!:
1). Там всё относится к 2017г. ... и любопытно что там поменялось за 5 лет;
2). Продолжать темы с перерывом в 5 лет - неразумно (не удобно) - лучше сделать новую
3). Меня снова привлёк Kotlin (пока) только в связи с разбирательством языковая локализация в программном коде
4). Интерес представляет Kotlin/Native - что было анонсировано только весной 2017г.:
Olej писал(а):
31 май 2017, 15:04
Новости 06.04.2017
Появилось техническое превью проекта Kotlin/Native: теперь на Kotlin технически возможно писать программы, не требующие для исполнения ни JVM, ни другой виртуальной машины.

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

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

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

Kotlin - продолжатель линии Java ... поэтому у них (Java) своя экосистема, со своими репозиториями и инсталляциями - непривычными простому смертному :lol:
SDKMAN, инструмент командной строки для управления наборами средств разработки программного обеспечения
Изображение

Установка самого SDKMAN: https://sdkman.io/

Код: Выделить всё

olej@R420:~$ curl -s https://get.sdkman.io | bash

                                -+syyyyyyys:
                            `/yho:`       -yd.
                         `/yh/`             +m.
                       .oho.                 hy                          .`
                     .sh/`                   :N`                `-/o`  `+dyyo:.
                   .yh:`                     `M-          `-/osysoym  :hs` `-+sys:      hhyssssssssy+
                 .sh:`                       `N:          ms/-``  yy.yh-      -hy.    `.N-````````+N.
               `od/`                         `N-       -/oM-      ddd+`     `sd:     hNNm        -N:
              :do`                           .M.       dMMM-     `ms.      /d+`     `NMMs       `do
            .yy-                             :N`    ```mMMM.      -      -hy.       /MMM:       yh
          `+d+`           `:/oo/`       `-/osyh/ossssssdNMM`           .sh:         yMMN`      /m.
         -dh-           :ymNMMMMy  `-/shmNm-`:N/-.``   `.sN            /N-         `NMMy      .m/
       `oNs`          -hysosmMMMMydmNmds+-.:ohm           :             sd`        :MMM/      yy
      .hN+           /d:    -MMMmhs/-.`   .MMMh   .ss+-                 `yy`       sMMN`     :N.
     :mN/           `N/     `o/-`         :MMMo   +MMMN-         .`      `ds       mMMh      do
    /NN/            `N+....--:/+oooosooo+:sMMM:   hMMMM:        `my       .m+     -MMM+     :N.
   /NMo              -+ooooo+/:-....`...:+hNMN.  `NMMMd`        .MM/       -m:    oMMN.     hs
  -NMd`                                    :mm   -MMMm- .s/     -MMm.       /m-   mMMd     -N.
 `mMM/                                      .-   /MMh. -dMo     -MMMy        od. .MMMs..---yh
 +MMM.                                           sNo`.sNMM+     :MMMM/        sh`+MMMNmNm+++-
 mMMM-                                           /--ohmMMM+     :MMMMm.       `hyymmmdddo
 MMMMh.                  ````                  `-+yy/`yMMM/     :MMMMMy       -sm:.``..-:-.`
 dMMMMmo-.``````..-:/osyhddddho.           `+shdh+.   hMMM:     :MmMMMM/   ./yy/` `:sys+/+sh/
 .dMMMMMMmdddddmmNMMMNNNNNMMMMMs           sNdo-      dMMM-  `-/yd/MMMMm-:sy+.   :hs-      /N`
  `/ymNNNNNNNmmdys+/::----/dMMm:          +m-         mMMM+ohmo/.` sMMMMdo-    .om:       `sh
     `.-----+/.`       `.-+hh/`         `od.          NMMNmds/     `mmy:`     +mMy      `:yy.
           /moyso+//+ossso:.           .yy`          `dy+:`         ..       :MMMN+---/oys:
         /+m:  `.-:::-`               /d+                                    +MMMMMMMNh:`
        +MN/                        -yh.                                     `+hddhy+.
       /MM+                       .sh:
      :NMo                      -sh/
     -NMs                    `/yy:
    .NMy                  `:sh+.
   `mMm`               ./yds-
  `dMMMmyo:-.````.-:oymNy:`
  +NMMMMMMMMMMMMMMMMms:`
    -+shmNMMMNmdy+:`


                                                                 Now attempting installation...


Looking for a previous installation of SDKMAN...
Looking for unzip...
Looking for zip...
Looking for curl...
Looking for sed...
Installing SDKMAN scripts...
Create distribution directories...
Getting available candidates...
Prime the config file...
Installing script cli archive...
* Downloading...
######################################################################## 100,0%
* Checking archive integrity...
* Extracting archive...
* Copying archive contents...
* Cleaning up...

* Downloading...
######################################################################## 100,0%
* Checking archive integrity...
* Extracting archive...
* Copying archive contents...
* Cleaning up...

Set version to 5.16.0 ...
Set native version to 0.0.15 ...
Attempt update of interactive bash profile on regular UNIX...
Added sdkman init snippet to /home/olej/.bashrc
Attempt update of zsh profile...
Updated existing /home/olej/.zshrc



All done!


You are subscribed to the STABLE channel.

Please open a new terminal, or run the following in the existing one:

    source "/home/olej/.sdkman/bin/sdkman-init.sh"

Then issue the following command:

    sdk help

Enjoy!!!

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

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

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

Olej писал(а):
11 дек 2022, 14:35
у них (Java) своя экосистема, со своими репозиториями и инсталляциями - непривычными простому смертному
Смотрим что там у них из Kotlin

Код: Выделить всё

olej@R420:~$ sdk list kotlin
================================================================================
Available Kotlin Versions
================================================================================
     1.7.21              1.3.72              1.2.51              1.1.2-5        
     1.7.20              1.3.71              1.2.50              1.1.2-2        
     1.7.10              1.3.70              1.2.41              1.1.2          
     1.7.0               1.3.61              1.2.40              1.1.1          
     1.6.21              1.3.60              1.2.31              1.1            
     1.6.20              1.3.50              1.2.30              1.0.7          
     1.6.10              1.3.41              1.2.21              1.0.6          
     1.6.0               1.3.40              1.2.20              1.0.5-2        
     1.5.31              1.3.31              1.2.10              1.0.5          
     1.5.30              1.3.30              1.2.0               1.0.4          
     1.5.21              1.3.21              1.1.61              1.0.3          
     1.5.10              1.3.20              1.1.60              1.0.2          
     1.5.0               1.3.11              1.1.51              1.0.1-2        
     1.4.31              1.3.10              1.1.50              1.0.1-1        
     1.4.30              1.3.0               1.1.4-3             1.0.1          
     1.4.21              1.2.71              1.1.4-2             1.0.0          
     1.4.20              1.2.70              1.1.4                              
     1.4.10              1.2.61              1.1.3-2                            
     1.4.0               1.2.60              1.1.3                              

================================================================================
+ - local version
* - installed
> - currently in use
================================================================================
Как там инсталлировать с выбором версии?

Код: Выделить всё

olej@R420:~$ sdk help install

NAME
    sdk install - sdk subcommand to install a candidate version

SYNOPSIS
    sdk install <candidate> [version] [path]

DESCRIPTION
    Invoking this subcommand with only the candidate as parameter will install
    the currently known default version for that candidate. Provide a second
    qualifier to install a specific non-default version. Provide a third
    optional qualifier to add an already installed local version. This final
    qualifier is the absolute local path to the base directory of the SDK to
    be added. The local version will appear as an installed version of the
    candidate. The version may not conflict with an existing version, installed
    or not.

EXIT CODE
    The subcommand will return a non-zero exit code for versions not found or
    for an invalid path.

MNEMONIC
    i - may be used in place of the install subcommand.

EXAMPLES
    sdk install java
    sdk install java 17.0.0-tem
    sdk install java 11-local /usr/lib/jvm/java-11-openjdk
Устанавливаем Kotlin:

Код: Выделить всё

olej@R420:~$ sdk install kotlin 1.7.20

Downloading: kotlin 1.7.20

In progress...

################################################################################################################################################ 100,0%

Installing: kotlin 1.7.20
Done installing!


Setting kotlin 1.7.20 as default.

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

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

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

Olej писал(а):
11 дек 2022, 14:40
Устанавливаем Kotlin
Он сам установит переменные окружения:

Код: Выделить всё

olej@R420:~$ echo $PATH
/home/olej/.sdkman/candidates/kotlin/current/bin:/home/olej/.bin:/home/olej/.cargo/bin:/home/olej/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Код: Выделить всё

olej@R420:~$ ls -l ~/.sdkman/candidates/kotlin/
итого 4
drwxr-xr-x 5 olej olej 4096 фев  1  1980 1.7.20
lrwxrwxrwx 1 olej olej    6 дек 11 02:54 current -> 1.7.20

Код: Выделить всё

olej@R420:~$ tree ~/.sdkman/candidates/kotlin/current/bin
/home/olej/.sdkman/candidates/kotlin/current/bin
├── kapt
├── kapt.bat
├── kotlin
├── kotlin.bat
├── kotlinc
├── kotlinc.bat
├── kotlinc-js
├── kotlinc-js.bat
├── kotlinc-jvm
├── kotlinc-jvm.bat
├── kotlin-dce-js
└── kotlin-dce-js.bat

0 directories, 12 files
И уже в следующем окне bash из любого каталога (по дефаулту находит):

Код: Выделить всё

olej@R420:~$ kotlin 
Welcome to Kotlin version 1.7.20 (JRE 11.0.17+8-post-Ubuntu-1ubuntu220.04)
Type :help for help, :quit for quit
>>> :help
Available commands:
:help                   show this help
:quit                   exit the interpreter
:dump bytecode          dump classes to terminal
:load <file>            load script from specified file
>>> :quit
Теперь у нас есть консольный Kotlin ... хотя это и экзотика - генеральное развитие Kotlin под IntelIDEA, инструмента (IDE) от JetBrains.
Но мне как-раз этого достаточно.

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

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

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

Olej писал(а):
11 дек 2022, 14:44
Но мне как-раз этого достаточно.
Самая простая тестовая программа:

Код: Выделить всё

olej@R420:~/2022/Kotlin$ cat hello.kt 
fun main(args: Array<String>) {
    println("Hello, World!")
}
Компиляция под запуск под JVM (Java Virtual Machine):

Код: Выделить всё

olej@R420:~/2022/Kotlin$ kotlinc hello.kt -include-runtime -d hello.jar
hello.kt:1:10: warning: parameter 'args' is never used
fun main(args: Array<String>) {
         ^

Код: Выделить всё

olej@R420:~/2022/Kotlin$ ls -l hello*
-rw-rw-r-- 1 olej olej 4693506 дек 11 03:01 hello.jar
-rw-rw-r-- 1 olej olej      63 дек 11 03:00 hello.kt

Код: Выделить всё

olej@R420:~/2022/Kotlin$ java -jar hello.jar
Hello, World!
Компиляция под запуск без JVM - средствами только Kotlin:

Код: Выделить всё

olej@R420:~/2022/Kotlin$ kotlinc hello.kt -d hello.jar
hello.kt:1:10: warning: parameter 'args' is never used
fun main(args: Array<String>) {
         ^

Код: Выделить всё

olej@R420:~/2022/Kotlin$ ls -l hello*
-rw-rw-r-- 1 olej olej 1133 дек 11 03:05 hello.jar
-rw-rw-r-- 1 olej olej   63 дек 11 03:00 hello.kt
Сравните размер hello.jar :!:

Код: Выделить всё

olej@R420:~/2022/Kotlin$ kotlin -classpath hello.jar HelloKt
Hello, World!
Вложения
hello.kt
(63 байт) 26 скачиваний

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

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

Непрочитанное сообщение Olej » 11 дек 2022, 15:01

Olej писал(а):
11 дек 2022, 14:52
Компиляция под запуск без JVM - средствами только Kotlin:
Тут загадочтый вопрос: 1). что за последний параметр в строке запуска? + 2). как он, его вид, образуется?

Код: Выделить всё

olej@R420:~/2022/Kotlin$ kotlin -classpath hello.jar HelloKt
Hello, World!
1). Это класс в который компилируется в байт-коде главная функция main().
2). А вот в том как образуется его имя - пришлось повозиться...
https://translated.turbopages.org/proxy ... mand-line
Затем вы можете выполнить программу, запустив com.my.stuff.AppKtкласс. Это имя является производным от вашего имени файла с Kt добавлением.
https://learntutorials.net/ru/kotlin/to ... ы-с-kotlin
Поместите вышеуказанный код в файл с именем Main.kt (это имя файла полностью произвольно)

При ориентации на JVM функция будет скомпилирована как статический метод в классе с именем, полученным из имени файла. В приведенном выше примере основным классом для запуска будет my.program.MainKt .

Чтобы изменить имя класса, содержащего функции верхнего уровня для определенного файла, поместите следующую аннотацию в верхней части файла над оператором пакета:

Код: Выделить всё

@file:JvmName("MyApp")
В этом примере основной класс для запуска теперь будет my.program.MyApp .

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

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

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

Olej писал(а):
11 дек 2022, 14:28
4). Интерес представляет Kotlin/Native - что было анонсировано только весной 2017г.:
С Kotlin/Native можно управиться только (я другого не нашёл) сборкой Kotlin из исходных кодов из GIT репозитория:

Код: Выделить всё

olej@R420:~/kotlin$ git clone https://github.com/JetBrains/kotlin.git
Клонирование в «kotlin»...
remote: Enumerating objects: 3471360, done.
remote: Counting objects: 100% (4261/4261), done.
remote: Compressing objects: 100% (1536/1536), done.
remote: Total 3471360 (delta 1767), reused 3900 (delta 1590), pack-reused 3467099
Получение объектов: 100% (3471360/3471360), 1.47 ГиБ | 2.01 МиБ/с, готово.
Определение изменений: 100% (1895963/1895963), готово.
Updating files: 100% (72298/72298), готово.

Код: Выделить всё

olej@R420:~/kotlin$ du -hs ./
2,1G	./

Код: Выделить всё

olej@R420:~/kotlin$ cd ~/kotlin

olej@R420:~/kotlin$ ls -l
итого 356
drwxrwxr-x 17 olej olej   4096 дек 11 02:42 analysis
drwxrwxr-x  4 olej olej   4096 дек 11 02:42 annotations
drwxrwxr-x  4 olej olej   4096 дек 11 02:42 ant
drwxrwxr-x  3 olej olej   4096 дек 11 02:42 benchmarks
drwxrwxr-x  4 olej olej   4096 дек 11 02:42 build-common
-rw-rw-r--  1 olej olej  33837 дек 11 02:42 build.gradle.kts
drwxrwxr-x  4 olej olej   4096 дек 11 02:42 buildSrc
-rw-rw-r--  1 olej olej 105189 дек 11 02:42 ChangeLog.md
-rw-rw-r--  1 olej olej    269 дек 11 02:42 CODE_OF_CONDUCT.md
drwxrwxr-x 51 olej olej   4096 дек 11 02:42 compiler
drwxrwxr-x 16 olej olej   4096 дек 11 02:42 core
drwxrwxr-x  8 olej olej   4096 дек 11 02:42 dependencies
-rw-rw-r--  1 olej olej    612 дек 11 02:42 dev-env-warmup.sh
drwxrwxr-x  6 olej olej   4096 дек 11 02:42 docs
drwxrwxr-x 14 olej olej   4096 дек 11 02:42 generators
drwxrwxr-x  3 olej olej   4096 дек 11 02:42 gradle
-rw-rw-r--  1 olej olej   5027 дек 11 02:42 gradle.properties
-rwxrwxr-x  1 olej olej   5766 дек 11 02:42 gradlew
-rw-rw-r--  1 olej olej   2674 дек 11 02:42 gradlew.bat
drwxrwxr-x  3 olej olej   4096 дек 11 02:42 idea
drwxrwxr-x  5 olej olej   4096 дек 11 02:42 jps
drwxrwxr-x 14 olej olej   4096 дек 11 02:42 js
drwxrwxr-x  2 olej olej   4096 дек 11 02:42 kotlin-js-store
drwxrwxr-x 26 olej olej   4096 дек 11 02:42 kotlin-native
drwxrwxr-x 10 olej olej   4096 дек 11 02:42 libraries
drwxrwxr-x  3 olej olej   4096 дек 11 02:42 license
drwxrwxr-x  8 olej olej   4096 дек 11 02:42 native
drwxrwxr-x 17 olej olej   4096 дек 11 02:42 plugins
drwxrwxr-x 14 olej olej   4096 дек 11 02:42 prepare
-rw-rw-r--  1 olej olej  10104 дек 11 02:42 ReadMe.md
drwxrwxr-x  4 olej olej   4096 дек 11 02:42 repo
drwxrwxr-x  2 olej olej   4096 дек 11 02:42 resources
drwxrwxr-x  2 olej olej   4096 дек 11 02:42 scripts
-rw-rw-r--  1 olej olej    472 дек 11 02:42 SECURITY.md
-rw-rw-r--  1 olej olej  50837 дек 11 02:42 settings.gradle
drwxrwxr-x  2 olej olej   4096 дек 11 02:42 spec-docs
drwxrwxr-x  3 olej olej   4096 дек 11 02:42 test-instrumenter
drwxrwxr-x  3 olej olej   4096 дек 11 02:42 tests
drwxrwxr-x  5 olej olej   4096 дек 11 02:42 third-party
drwxrwxr-x  3 olej olej   4096 дек 11 02:42 wasm

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

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

Непрочитанное сообщение Olej » 11 дек 2022, 15:26

Olej писал(а):
11 дек 2022, 15:14
сборкой Kotlin из исходных кодов из GIT репозитория:
Olej писал(а):
11 дек 2022, 14:35
у них (Java) своя экосистема, со своими репозиториями и инсталляциями - непривычными простому смертному
Сборку они делают, естественно, таким же своим собственным инструментом как Gradle:
Gradle — система автоматической сборки, построенная на принципах Apache Ant и Apache Maven, но предоставляющая DSL на языках Groovy и Kotlin вместо традиционной XML-образной формы представления конфигурации проекта.
...
Gradle был разработан для расширяемых многопроектных сборок, и поддерживает каскадную (waterfall) модель разработки, определяя, какие компоненты дерева сборки не изменились и какие задачи, зависимые от этих частей, не требуют перезапуска.

Основные плагины предназначены для разработки и развертывания Java, Groovy и Scala приложений, но есть плагины для других языков программирования: C++, Swift, Kotlin а также Spring-проект с помощью Spring Boot.

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

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

Непрочитанное сообщение Olej » 11 дек 2022, 15:48

Olej писал(а):
11 дек 2022, 15:14
сборкой Kotlin из исходных кодов из GIT репозитория
Единственно что я нашёл вразумительного относительно сборки Kotlin/Native - это вот это в самом GIT репозитории, см.: Building from source
at the root directory of the repository, create local.properties file with kotlin.native.enabled=true line
To compile the basic compiler distribution from sources, run following command:

Код: Выделить всё

./gradlew :kotlin-native:dist
It will build compiler and stdlib for host target, without platform libraries.
To get platform libraries, add distPlatformLibs task, e.g.

Код: Выделить всё

./gradlew :kotlin-native:dist :kotlin-native:distPlatformLibs
To run the full build:

Код: Выделить всё

./gradlew :kotlin-native:bundle
This will produce compiler and libraries for all supported targets. The full build can take about an hour on a Macbook Pro.
Целый час на сборку - это круто :-o :oops:

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

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

Непрочитанное сообщение Olej » 11 дек 2022, 19:34

Olej писал(а):
11 дек 2022, 15:48
at the root directory of the repository, create local.properties file with kotlin.native.enabled=true line

Код: Выделить всё

olej@R420:~/kotlin$ touch local.properties

Код: Выделить всё

olej@R420:~/kotlin$ ls -l local.properties
-rw-rw-r-- 1 olej olej 27 дек 11 14:43 local.properties

Код: Выделить всё

olej@R420:~/kotlin$ cat local.properties
kotlin.native.enabled=true

Ответить

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

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

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