vak: (Default)
[personal profile] vak
Оказывается, Скалу теперь можно компилить непосредственно в бинарный код, без всякой Джавы и прочих виртуальных машин. Неплохой язычок получается.

(1) Сначала устанавливаем sbt по инструкции: https://www.scala-sbt.org/1.x/docs/Setup.html

(2) Создаём проект типа "Hello World":
$ sbt new scala-native/scala-native.g8
На запрос надо будет ввести желаемое имя проекта. Я выбрал hello.

(3) Компилируем и запускаем:
$ cd hello
$ sbt run
[info] welcome to sbt 1.6.2 (Ubuntu Java 11.0.17)
[info] loading settings for project hello-build from plugins.sbt ...
[info] loading project definition from /.../hello/project
[info] loading settings for project hello from build.sbt ...
[info] set current project to hello (in build file:/.../hello/)
[info] compiling 1 Scala source to /.../hello/target/scala-3.1.3/classes ...
[info] Linking (1343 ms)
[info] Discovered 663 classes and 3689 methods
[info] Optimizing (debug mode) (1047 ms)
[info] Generating intermediate code (829 ms)
[info] Produced 12 files
[info] Compiling to native code (1583 ms)
[info] Linking native code (immix gc, none lto) (122 ms)
[info] Total (4968 ms)
Hello, world!
[success] Total time: 9 s, completed Nov 21, 2022, 1:11:59 PM
Смотрим исходник:
$ cat src/main/scala/Main.scala 
object Main {
  def main(args: Array[String]): Unit =
    println("Hello, world!")
}
Смотрим бинарник:
$ size target/scala-3.1.3/hello-out 
text data bss dec hex filename
1625129 223248 4928 1853305 1c4779 target/scala-3.1.3/hello-out

$ ldd target/scala-3.1.3/hello-out
linux-vdso.so.1 (0x00007ffe9492a000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f5817600000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5817517000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f5817895000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5817200000)
/lib64/ld-linux-x86-64.so.2 (0x00007f5817a93000)

$ ./target/scala-3.1.3/hello-out
Hello, world!
Подробности здесь: https://scala-native.org/en/stable/user/index.html

Date: 2022-11-21 23:52 (UTC)
vlad_m: (Default)
From: [personal profile] vlad_m
Динамический бинарник под 2М размером. hello.

Чем они там занимаются в таких просторах!?

Date: 2022-11-22 05:37 (UTC)
ircicq: (Default)
From: [personal profile] ircicq
Внутри этих мегабайт JVM?

Date: 2022-11-22 12:59 (UTC)
vlad_m: (Default)
From: [personal profile] vlad_m
А мэйби.
На c++ написанный.
Но тогда это не вполне native.
Turbo Basic был такой в прошлом веке.

Date: 2022-11-22 12:14 (UTC)
vlad_m: (Default)
From: [personal profile] vlad_m
С размахом.
У суслика 1М выходит.
Статический.

Date: 2022-11-22 00:17 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
...А если вас что-то не устраивает, пользуйтесь UPX! Удобно.

Date: 2022-11-22 01:12 (UTC)
From: [personal profile] dedekha
Неужто это и впрямь случилось, будет самым популярным языком?

Date: 2022-11-22 09:31 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Эти два языка ортогональны.

Date: 2022-11-22 12:58 (UTC)
From: [personal profile] dedekha
Просто по впечатлениям, я немного знаком со scala (закончил два курса в coursera) и это по моему мнению бесконечно приятный язык, с Rust сталкивался совсем немного, осталось впечатление чего-то очень корявого и очень низкоуровневого.

Мне какжется что приятственность языка очень сушественна, помню как мне было приятно переключиться c ТurboPascal на C- и перестать использовать надоевшие begin и end на каждоц строчке. Наверное я не один такой.

Единственная проблема scala в моих глазах это быстродействие и память, те кто мерил на реальных программах говорили 2х - 4х vs c++.

Date: 2022-11-22 05:54 (UTC)
cali4nickation: (Default)
From: [personal profile] cali4nickation
Вот еще бы без SBT и было бы совсем хорошо.

Date: 2022-11-22 09:31 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Да бля...

Date: 2022-11-22 07:25 (UTC)
norian: (Default)
From: [personal profile] norian
походу они его через крестовый препроцессор компилят, судя по библиотекам

вообще надо будет как-нть сделать полуавтоматический гарбаж коллектор в сорцах крестов

чтобы унутре класса вставлял очистку в деструктор, а на хардкорных пойнтерах наружу ругалсо "сам убирай за собой, утырок двуногий" и метил всё выделение гиперссылками на очистку или руганью

Date: 2022-11-22 09:30 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Ну это много лет уже как. Но проблема в том, что без JIT этот код оказывается довольно медленным, сравнительно с тем, что на JVM бегает.

Date: 2022-11-22 18:07 (UTC)
From: [personal profile] chabapok
Был вроде раньше excleisor jet который умел компилить яву.
И был сборщики, делали exe на вшений вид - но внутри jvm.

Просто непонятно, зачем это все. В jvm гораздо больше человеко-часов, чем в любой другой поделке. Времена, когда ява интерпретировалась, давно ушли. Уже много лет компилятор компилит на основани профиля исполнения кода, под конкретный проц используя его фишки. Вряд ли скомпиленное в exe покажет лучше результат.

Date: 2022-11-25 21:49 (UTC)
From: [personal profile] chabapok
если даже кобол жив сейчас, то до вымирания жвм еще долго.

Date: 2022-11-27 21:00 (UTC)
techquisitor: (sis)
From: [personal profile] techquisitor
А я с помощью sbt только готовил deb пакеты для Кафки. Но я wannabe devops, мне можно. :)