Страница 7 из 7
Re: производительность языков программирования
Добавлено: 01 фев 2018, 16:12
Olej
Обстоятельства заставили вернуться к этой теме ... и к новым версиям всех языковых средств.
В итоге, совершенно новый вариант текста и заметно дополнены архивы.
На сегодня там сравнения 23-х языков.
Re: производительность языков программирования
Добавлено: 04 фев 2018, 20:38
Olej
Olej писал(а):На сегодня там сравнения 23-х языков.
Теперь туда можно добавить и Swing от Apple ... после того, естественно, как с мучениями
установим Swing (см.
Swift под Linux)...
Тестовое приложение выглядит так (это под стандарт Swift 4, но и под Swift 3 будет нормально ... под Swift 2 должно выглядеть иначе):
Код: Выделить всё
nc fibo( n: Int ) -> Int {
if n < 2 {
return 1
}
else {
return fibo( n: n - 1 ) + fibo( n: n - 2 )
}
}
if CommandLine.arguments.count < 2 {
print( "Ups!" )
} else {
let arg = CommandLine.arguments[ 1 ]
let argstr: Int? = Int( arg )
if argstr != nil {
let argint: Int! = Int( arg )
print( fibo( n: argint ) )
}
else {
print( "Ups!" )
}
}
Это
оптимизированная компиляция Swift :
Код: Выделить всё
olej@olej-VirtualBox ~/2018_WORK/own.BOOKs/ManyLang/swift $ swiftc -O fibo_sw.swift -o fibo_sw
olej@olej-VirtualBox ~/2018_WORK/own.BOOKs/ManyLang/swift $ time ./fibo_sw 30
1346269
real 0m0.015s
user 0m0.012s
sys 0m0.000s
olej@olej-VirtualBox ~/2018_WORK/own.BOOKs/ManyLang/swift $ time ./fibo_sw 40
165580141
real 0m1.295s
user 0m1.216s
sys 0m0.012s
olej@olej-VirtualBox ~/2018_WORK/own.BOOKs/ManyLang/swift $ time ./fibo_sw 45
1836311903
real 0m15.028s
user 0m14.952s
sys 0m0.044s
А это
оптимизированная компиляция GCC, которую мы использовали как эталон.
Код: Выделить всё
olej@olej-VirtualBox ~/2018_WORK/own.BOOKs/ManyLang/speed.10 $ gcc -O3 fibo_c.c -o fibo_c
olej@olej-VirtualBox ~/2018_WORK/own.BOOKs/ManyLang/speed.10 $ time ./fibo_c 30
1346269
real 0m0.007s
user 0m0.004s
sys 0m0.000s
olej@olej-VirtualBox ~/2018_WORK/own.BOOKs/ManyLang/speed.10 $ time ./fibo_c 40
165580141
real 0m0.788s
user 0m0.728s
sys 0m0.000s
olej@olej-VirtualBox ~/2018_WORK/own.BOOKs/ManyLang/speed.10 $ time ./fibo_c 45
1836311903
real 0m7.492s
user 0m7.412s
sys 0m0.048s
Это совсем другой компьютер, по сравнению с предыдущим, поэтому делаем сравнительные замеры.
Re: производительность языков программирования
Добавлено: 05 фев 2018, 00:33
Olej
Olej писал(а):Теперь туда можно добавить и Swing от Apple ... после того, естественно, как с мучениями
установим Swing (см.
Предыдущие результаты - это было в свежей установке под VirtualBox.
А вот
на реальном железе:
Код: Выделить всё
$ gcc -O3 fibo_c.c -o fibo_c
$ time ./fibo_c 40
165580141
real 0m0.444s
user 0m0.443s
sys 0m0.000s
$ time ./fibo_c 45
1836311903
real 0m4.741s
user 0m4.737s
sys 0m0.000s
Код: Выделить всё
$ swiftc -O fibo_sw.swift -o fibo_sw
$ time ./fibo_sw 40
165580141
real 0m1.745s
user 0m1.731s
sys 0m0.012s
$ time ./fibo_sw 45
1836311903
real 0m19.507s
user 0m19.494s
sys 0m0.004s
Re: сравнение языков программирования
Добавлено: 14 фев 2018, 13:29
Olej
Olej писал(а):
Добавлена реализация той же сравнительной задачи на Tcl.
Добавлена ещё сравнительная реализация на языке Rust.
Код: Выделить всё
use std::env;
fn fibo( x: u64 ) -> u64 {
if x < 2 { 1 }
else { fibo( x - 1 ) + fibo( x - 2 ) }
}
fn main() {
let args: Vec<String> = env::args().collect();
let num: u64 = args[ 1 ].trim().parse().unwrap();
println!( "{}", fibo( num ) );
}
Код: Выделить всё
[olej@dell ManySpeed.exmpl]$ time ./fibo_c 45
1836311903
real 0m5.127s
user 0m5.067s
sys 0m0.002s
[olej@dell rust]$ time ./fibo_rs 45
1836311903
real 0m6.684s
user 0m6.603s
sys 0m0.002s
Это удивительно!: язык и реализация, которым (от 1-й стабильной версии) нет и полных 3-х лет, показывает результат только на 30% хуже, чем код C компилированный GCC с
наивысшим уровнем оптимизации. И
лучше, чем тот же код C, компилированный хвалёным Clang из проекта LLVM.
Это при всём том, что Rust
намного выше уровнем чем C: высокоуровневыми структурами данных (коллекциями), средствами функционального программирования, реакциями на ошибки ... и мн. др.
Re: сравнение языков программирования
Добавлено: 14 фев 2018, 13:30
Olej
Olej писал(а):Olej писал(а):
Добавлена реализация той же сравнительной задачи на Tcl.
Добавлена ещё сравнительная реализация на языке Rust.