写点什么

Swift 并不像苹果说的那么快:第一次基准测试

  • 2014-06-13
  • 本文字数:873 字

    阅读完需:约 3 分钟

性能是苹果声称新编程语言Swift 将带给OS X 和iOS 开发人员的好处之一。然而,由独立开发者执行的第一次实验和基准测试显示,Swift 在某些场景的性能并不如人意。

开发人员 Jukka Suomela 在 Stack Overflow 发表了一篇帖子说明他的发现。当用 Swift 实现一个算法时,他注意到其性能非常差。深入分析后,Jukka 最终发现代码的主要瓶颈来自一个数组排序这样的简单任务。

事实上,Swift 对 100 万个随机整数的数组进行排序,需要耗时 6 秒,而 C++ 只用了 0.06 秒,Python 为 0.6 秒。这些测试使用的是 -O3 编译优化级别,这是 Xcode 发布构建时常用的级别。Jukka 说,如果禁用所有编译优化,即对应于 Xcode 调试构建的 -O0,上述测试用了 88 秒。

Stack Overflow 上回复该帖的其他开发人员证实了 Jukka 的发现。开发人员 sjeohp 用 Swift 实现快速排序算法时,发现如果不启用编译优化(-Onone)会比C 慢1000 倍。另一方面,他发现当强制积极的编译优化(-Ofast)时,Swift 比C 稍快。Stack Overflow 的另一个帖子描述了图像处理测试,也强调了类似的研究结果。

根据 LLVM 文档,积极优化忽略了严谨的标准规范。-Ofast 启用了所有 -O3 优化并开启了 -ffast-math,后者放宽了 IEEE 或 ISO 的数学函数规范,可能导致那些应该具有规范保证的程序产生不正确的输出。此外,-Ofast 禁用了整型溢出和数组下标越界的检查,因此降低了 Swift 的安全特性。

Jukka 进行了深入分析,他在编译器对另一个测试所生成的汇编代码中,发现一个数组的简单循环产生了大量的内存管理调用(保留和释放),而这是完全没有必要的。这个测试没有涉及数学,因此主要的性能瓶颈似乎来自这些无用的调用。

数名开发人员指出 Swift 仍然处于 Beta 状态,这可能是 Swift 当前这种行为的最好解释。具体来说,文中提到的毫无必要的释放 / 保留调用暗示了ARC 优化存在一些Bug,可能不需要积极优化就可以修复

因为该语言仍处于Beta 状态,苹果不会允许开发者提交Swift 开发的应用进行审查。 Xcode 的最终版本预计在今年秋天发布

查看英文原文: Swift Might Not Be As Fast As Apple Claims It To Be: First Benchmarks

2014-06-13 09:384682

评论

发布
暂无评论
发现更多内容

WebIntents 翻身战,操作系统实现无缝集成的王牌

鼎道智联

AI

OpenResty接口的详细讲解

linux大本营

负载均衡 反向代理 openresty 网关 HTTP服务

生活中的不确定性,如何应对?

Jack

一文读懂物联网 MQTT 协议之实战篇

老周聊架构

三周年连更

C++如何拿到线程池的返回值

linux大本营

线程池 C++

一键生成通用的web服务(gin)完整项目代码,开发效率至少提升2倍

vison

golang Web gin框架 代码自动生成

lwip_recv_tcp阻塞读取数据代码

linux大本营

TCP 阻塞队列

薪资结构重铸: Zebec将业务范围扩大到Web2薪资管理领域

股市老人

Django笔记十二之defer、only指定返回字段

Hunter熊

Python django defer only

Go HTTP 调用

陈明勇

Go golang HTTP 三周年连更

c语言实现timer的10个技术点

linux大本营

进程 定时器, Timer 文件描述符

xnginx在安全网关的应用场景

linux大本营

openresty 网关 web服务器

借由Net5.5G,看到运营商的新沧海

脑极体

5.5G

大型商业银行的超级App是如何“组装”而成?

Onegun

超级app 超级应用

Java EE应用服务器的事务管理

mazhen

Java transaction JavaEE

怎么用systemd进行进程守护

linux大本营

Linux 进程 守护进程

AI视觉实战1:实时人脸检测

轻口味

android AI 三周年连更

Android动画之帧动画

芯动大师

android App 三周年连更

小程序自定义组件开发

程序员海军

小程序 三周年连更

AI能训练出符合“核心价值观”的人工智能吗?

FN0

人工智能 ChatGPT Claude

OpenCV图像模糊操作(1) | 社区征文

A小调协奏曲

OpenCV C++ 三周年连更

挑战 30 天学完 Python:Day10 循环语句

MegaQi

Python3 挑战30天学完Python 三周年连更

OceanBase 4.1解读:我们想给用户一个开箱即用的OceanBase部署运维工具

OceanBase 数据库

数据库 oceanbase

算法题每日一练:组合总和 II

知心宝贝

数据结构 算法 前端 后端 三周年连更

程序踩内存后,应该怎么排查

linux大本营

进程 内存管理 内存泄漏 C++

io_uring的10个技术点

linux大本营

高并发 异步 零拷贝 io_uring

2023-04-20:有一堆石头,用整数数组 stones 表示 其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出任意两块石头,然后将它们一起粉碎 假设石头的重量分别为 x 和

福大大架构师每日一题

golang 算法 rust 福大大

华为云 OpenTiny 跨端、跨框架企业级开源组件库项目落地实践直播即将开启!

Kagol

开源 前端 Vue 3 UI组件库

用户痛点与根因识别:解锁企业数字化转型成功的关键

L3C老司机

火山引擎边缘云,助力业务敏捷创新

火山引擎边缘云

CDN 边缘计算 火山引擎 边缘云

Swift并不像苹果说的那么快:第一次基准测试_Android/iOS_Sergio De Simone_InfoQ精选文章