Я создал 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) файл, сгенерированный ржавчиной