У меня проблема. Я хочу знать, какой из них действительно быстрее (Swift или Objective-C), потому что я хотел бы выбрать более быстрый/лучший, когда приступаю к разработке приложения. Согласно многим источникам (например, Apple WWDC, или http://www.jessesquires.com/apples-to-apples-part-two/), Swift должен быть быстрее.
Я просто написал простую рекурсивную программу последовательности фибоначчи как для Swift, так и для Objective-C.
Однако, когда я запускаю fib (35) на симуляторе, я получаю неожиданные результаты:
Objective-C Результат:
: fib:: 9227465: duration: 0.122813 секунд
Быстрый результат
: fib:: 9227465: duration: 0.606831073760986 секунд
Теперь я даже запускал версию Swift на всех уровнях оптимизации Swift Compiler (для Debug), который является None, Fastest, Fastest-Unchecked. Я также играю с уровнем оптимизации генерации кода до None, Fast.... Fastest Aggressive Optimization. Однако все результаты Swift - это что-то близкое к 0,6 миллисекундам
Теперь последнее, о чем я могу думать, может быть, я сравниваю Apple с Orange? Вы, ребята, видите что-то, что мне не хватает здесь? Есть ли что-нибудь еще, что мне нужно включить (кроме уровней оптимизации для Swfit Compiler и Apple LLVM Code Generation), чтобы заставить программы Swift работать быстрее?
Любые предложения или комментарии приветствуются и оцениваются! ^^!
Objective-C Версия
-(int)fib:(int)num{
if (num == 0) {
return 0;
}
if (num == 1) {
return 1;
}
return [self fib:num - 1] + [self fib:num - 2];
}
Быстрая версия
func fib(num: Int) -> Int{
if(num == 0){
return 0;
}
if(num == 1){
return 1;
}
return fib(num - 1) + fib(num - 2);
}
Objective-C Измерение времени
NSTimeInterval start = [[NSDate date] timeIntervalSince1970];
int result = [self fib:35];
NSTimeInterval end = [[NSDate date] timeIntervalSince1970];
NSTimeInterval duration = end - start;
NSLog(@":::fib::::%d:::duration:::%f",result,duration);
Быстрое измерение времени
var start = NSDate().timeIntervalSince1970;
let result = fib(35);
var end = NSDate().timeIntervalSince1970;
var duration = end - start;
println(":::fib::::\(result) :::duration:::\(duration)");