Biryukov239 / matrix-multiplication-kotlin

0 stars 0 forks source link

Непонятная необходимость в установке Kotlin #2

Closed lounres closed 4 months ago

lounres commented 4 months ago

У Вас в Dockerfile нашёл в конце строку sdk install kotlin. Зачем она? Gradle, который вы так же установили, и так за Вас будет подкачивать компилятор Kotlin и использовать его.

lounres commented 4 months ago

На самом деле, если контейнер используется только для запуска, то, кажется, ему может и Gradle не понадобится. Т.е. будет нужно только JRE.

Biryukov239 commented 4 months ago

Здравствуйте! Если подключаться к докеру из idea, то каждый запуск кода - это новое подключение, кажется, тогда котлин будет скачиваться при каждом запуске, чего бы не хотелось. И, как я отметил в другом вопросе про докер, у меня он скорее не привязан именно к проекту, а нужен для запуска кода на видеокарте. Не очень бы хотелось иметь такую зависимость kotlin кода от gradle

lounres commented 4 months ago

Если подключаться к докеру из idea, то каждый запуск кода - это новое подключение, кажется, тогда котлин будет скачиваться при каждом запуске, чего бы не хотелось.

Gradle кеширует в системе используемую версию Kotlin. Поэтому конкретная версия Kotlin (под конкретную версию Gradle) будет скачана не боле одного раза и только тогда, когда она будет явно подключена в Gradle. А единственный способ избавиться от неё — прочистить кеши Gradle в системе. Почему и говорят, что руками устанавливать Kotlin — излишне затруднительная идея. Ведь всё это за нас делает система сборки.

И, как я отметил в другом вопросе про докер, у меня он скорее не привязан именно к проекту, а нужен для запуска кода на видеокарте. Не очень бы хотелось иметь такую зависимость kotlin кода от gradle

Более того, Kotlin — это только компилятор. Если у нас код только лишь выполняется в контейнере, то, скорее всего, нам нужна только JRE. И можно присмотреться, что запускает IDEA (напрямую, НЕ таску Gradle):

/root/.sdkman/candidates/java/21.0.3-tem/bin/java -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath /tmp/7e5c40cc-df9b-4c40-8377-95e62a587442:/tmp/724501d7-2f1b-47ab-99a4-c5f2ef5c0eb4/kotlin-argparser-2.0.7.jar:/tmp/5ce48256-5ba9-4d4b-a922-15d2a2517df9/kotlin-stdlib-1.9.23.jar:/tmp/a2946f83-11e3-4ed6-8043-6d0443daba29/aparapi-3.0.0.jar:/tmp/e9917a1c-3562-41c4-9fbd-4a16eea9cf8d/xenocom-0.0.7.jar:/tmp/64626680-4488-4b9d-8f00-da6b1999d5de/annotations-13.0.jar:/tmp/b91f7900-8974-4ba9-b8ac-17952076c233/aparapi-jni-1.4.3.jar:/tmp/6b018ea9-91fd-4113-8c25-e902e44c8960/bcel-6.5.0.jar:/tmp/7bae0591-ead6-4ddc-9659-92bb3bbd4bb0/scala-library-2.13.6.jar org.example.Main

Видно, что она напрямую запускает java и только. Без Gradle и компилятора Kotlin. Так что вроде бы ни Kotlin, ни Gradle не нужны.

Чуть позже попробую сам избавиться от двух установок.

Biryukov239 commented 4 months ago

Если при работе в докер контейнере не делать docker commit, то все изменения которые были сделаны с контейнером исчезнут, поэтому каждый новый запуск докера - это грубо говоря начало с чистого листа.

А что касается компилятора kotlin: этот докер идейно не являются частью проекта и даже не сделан для программирования на java или kotlin, это просто способ настроить среду выполнения, если у человека на системе нет нужных драйверов и он не умеет/не может/не хочет их устанавливать. Предполагается, что его могут и будут запускать как угодно и откуда угодно, кому-то может захотеться запустить компилятор kotlin из командной строки, вообще не думая о gradle.

Как Вы могли увидеть, там установлен еще и cmake, и компилятор для c++, все по тем же причинам, чтобы можно было писать код для видеокарты, например, используя с++. Конечно, какие-то установленные инструменты будут избыточны в том или ином случае, но это уже каждый пользователь может отрегулировать для себя самостоятельно

lounres commented 4 months ago

ОК. Из описания не было понятно, что он для универсального случая. Но тогда хорошо.