производительность языков программирования

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: производительность языков программирования

Непрочитанное сообщение Olej » 01 фев 2018, 16:12

Обстоятельства заставили вернуться к этой теме ... и к новым версиям всех языковых средств.
В итоге, совершенно новый вариант текста и заметно дополнены архивы.
На сегодня там сравнения 23-х языков.
Вложения
ManySpeed_10.odt
(58.07 КБ) 79 скачиваний
speed.10.tgz
(42.77 КБ) 97 скачиваний

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: производительность языков программирования

Непрочитанное сообщение Olej » 04 фев 2018, 20:38

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
Это совсем другой компьютер, по сравнению с предыдущим, поэтому делаем сравнительные замеры.
Вложения
fibo_sw.swift
(423 байт) 75 скачиваний

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: производительность языков программирования

Непрочитанное сообщение Olej » 05 фев 2018, 00:33

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
Вложения
ManySpeed_12.odt
(60.35 КБ) 78 скачиваний
speed.11.tgz
(52.13 КБ) 83 скачивания

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: сравнение языков программирования

Непрочитанное сообщение Olej » 14 фев 2018, 13:29

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: высокоуровневыми структурами данных (коллекциями), средствами функционального программирования, реакциями на ошибки ... и мн. др.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: сравнение языков программирования

Непрочитанное сообщение Olej » 14 фев 2018, 13:30

Olej писал(а):
Olej писал(а): Добавлена реализация той же сравнительной задачи на Tcl.
Добавлена ещё сравнительная реализация на языке Rust.

Код: Выделить всё

[/quote]
Вложения
ManySpeed_13.odt
(63.16 КБ) 71 скачивание
ManySpeed_13.tgz
(58.38 КБ) 70 скачиваний

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 12 гостей