Почему собственный исполняемый файл Kotlin больше, чем эквивалентный исполняемый файл Rust? - PullRequest
0 голосов
/ 12 октября 2018

Я создал 2 простых "Hello World!"программы, одна с Kotlin и одна с Rust:

Kotlin:

fun main() {
    println("Hello, world!")
}

Rust:

fn main() {
    println!("Hello, world!");
}

Я сгенерировал исполняемые файлы для обоих, используя: kotlinc-native main.ktдля Kotlin и cargo build --release для Rust, затем проверил двоичные размеры, используя ls -S -lh | awk '{print $5, $9}'.

Я обнаружил, что размер файла, сгенерированного родным Kotlin, составляет 1,48X размера файла, сгенерированного Rust.

Почему существует эта разница?

$ ./program.kexe
Hello, world!
$ ls -S -lh | awk '{print $5, $9}'

835K program.kexe
43B main.kt

$ ./rust
Hello, world!
$ ls -S -lh | awk '{print $5, $9}'

565K rust
128B deps
104B rust.d
64B build
64B examples
64B incremental
64B native

Более того, Rust можно оптимизировать, чтобы он был меньше. Есть ли что-то похожее в Kotlin native?

Начальная настройка:

$ cargo new hello_world

Сборка с:

$ cargo build

=> 589,004 bytes

Шаг оптимизации 1:

Сборка с:

$ cargo build --release

=> 586,028 bytes

Шаг оптимизации 2:

Измените содержимое main.rs на:

 use std::alloc::System;

#[global_allocator]
static A: System = System;

fn main() {
    println!("Hello, world!");
}

=> 335,232 bytes

Шаг оптимизации 3:

Добавить ниже к Cargo.toml.

[profile.release]
lto = true

=> 253,752 bytes

Шаг оптимизации 4:

Полоса, выполняемая через

$ strip target/release/hello_world

=> 177,608 bytes

Итак, мы получили файл, сгенерированный родным kotlin, в 4,87X (~ 5X) файл, сгенерированный ржавчиной

1 Ответ

0 голосов
/ 16 октября 2018

Ржавчина не имеет сборщика мусора

...