WWDC 上讲到的 Objective C / LLVM 改进
2013-10-22 10:37
274 查看
https://developer.apple.com/wwdc/videos/
Advances in Objective-C
What's New in the LLVM Compiler
objc 流行度已超过 c++
对编译的提速效果相当于整很多 pch. (enable modules )
64 位机器上会像 ruby 一样用 tagged pointer 实现一些值对象 (如
减少动态内存分配.
属性方法返回类型声明为
然后 xcode 就能提示类型不匹配.
加强了 block 内循环引用的警告 (block 会产生一个隐藏的对
API attributes for implicit bridging :
-
-
-
已经应用到大部分的 CF API 上, 现在基本不用手动加
下面两个 macro 可以帮助静态分析
-
-
xcode 5 加强了 ARC migrator, 实现已经移除了 GC.
rvm 编译的 ruby 是
其实打开 链接期优化
可以更快, 另外还有一个
混合了除
可以尝试看看效果...
llvm 针对 armv7s (iphone5 处理器) 和 intel avx (浮点数据并行化) /avx2 (整数数据并行化)
指令集的性能改进 (编译参数 -mavx2). 另外打开 vetorize loops 参数可以把一些平白的循环数据并行化. 总的来说编译结果有 1x% - 50%
的性能提升, 就算目标程序不是 iOS7 或者 Mavericks 都真的要换 xcode 5 了.
命令行检测 avx2 :
C 检测 avx2 :
程序中可以通过检测来决定是载入 avx2 还是 avx1 还是 sse 的函数版本, 既保证速度也保证兼容.
我的 rMBP 只支持到
难道该出手了?
编译参数 enable strict aliasing 会进行深入的指针类型分析, 也能提升性能. 但是有些互不兼容类型之间的强制
cast, 例如把
xcode 5 不用单独另外安装 command line tools 了. 打开命令行, 敲 clang, 就弹出安装窗口了 XD. Mavericks 自带了命令行工具管理:
一些在新的 XCode 编译不过去的命令行工具, 找到硬编码的路径:
可以设置这个环境变来切换各种版本的 sdk
llvm-gcc 终于删除了, 不过演讲者把 "gnu" 念错了... "g" 应该不发音的 是我念错了, GNU 真的是 [gənu:], 牛羚 Gnu 才是 [nju:], 另外 Gnome 发音也没有 [g] 的
c++11 成为默认选项. c++ 运行时从 gnu 的 libstdc++ 转换到了 llvm 的 libc++ .你甚至可以在安装包里打包 clang 编译器和 c++ 运行时而不用担忧版权问题.
...
强大的静态分析, 略有 haskell 的感觉
xcode 5 会扫描 doxygen 注释用来增强自动完成和 quick help
其实去年那个语法扩展的 session 也很棒:
wwdc 2012 session 405 - modern objective C
最近的 LLVM 会议还有大量的货:
http://llvm.org/devmtg/2013-04/
Advances in Objective-C
What's New in the LLVM Compiler
下面是一些凌乱的笔记...
objc 流行度已超过 c++#import会自动翻译成
@import,
对编译的提速效果相当于整很多 pch. (enable modules )
64 位机器上会像 ruby 一样用 tagged pointer 实现一些值对象 (如
NSDate),
减少动态内存分配.
属性方法返回类型声明为
instancetype,
然后 xcode 就能提示类型不匹配.
加强了 block 内循环引用的警告 (block 会产生一个隐藏的对
self的引用...)
API attributes for implicit bridging :
-
CF_RETURNS_RETAINED
-
CF_RETURNS_NOT_RETAINED
-
CF_RELEASES_ARGUMENT
已经应用到大部分的 CF API 上, 现在基本不用手动加
__bridge了.
下面两个 macro 可以帮助静态分析
__bridge
-
CF_IMPLICIT_BRADGING_ENABLED
-
CF_IMPLICIT_BRADGING_DISABLED
xcode 5 加强了 ARC migrator, 实现已经移除了 GC.
rvm 编译的 ruby 是
-O3的,
其实打开 链接期优化
-O4(例如内联一些标准库函数)
可以更快, 另外还有一个
-Ofast,
混合了除
-O4外的一些编译参数,
可以尝试看看效果...
llvm 针对 armv7s (iphone5 处理器) 和 intel avx (浮点数据并行化) /avx2 (整数数据并行化)
指令集的性能改进 (编译参数 -mavx2). 另外打开 vetorize loops 参数可以把一些平白的循环数据并行化. 总的来说编译结果有 1x% - 50%
的性能提升, 就算目标程序不是 iOS7 或者 Mavericks 都真的要换 xcode 5 了.
命令行检测 avx2 :
sysctl hw.optional.avx2_0
C 检测 avx2 :
sysctlbyname("hw.optional.avx2_0", &answer, sizeof(answer), NULL, 0)
程序中可以通过检测来决定是载入 avx2 还是 avx1 还是 sse 的函数版本, 既保证速度也保证兼容.
我的 rMBP 只支持到
avx1_0-__-
难道该出手了?
编译参数 enable strict aliasing 会进行深入的指针类型分析, 也能提升性能. 但是有些互不兼容类型之间的强制
cast, 例如把
uint64转换成
struct {uint16,uint16}就不能用了 (可以改成 union, ruby 源代码里都是用 union cast 的).
xcode 5 不用单独另外安装 command line tools 了. 打开命令行, 敲 clang, 就弹出安装窗口了 XD. Mavericks 自带了命令行工具管理:
/Library/Developer/CommandLineTools
一些在新的 XCode 编译不过去的命令行工具, 找到硬编码的路径:
/usr/include,
/usr/lib,
/System/Library/Frameworks替换成新的位置就可以.
xcrun --show-sdk-path --sdk macosx xcrun --sdk iphoneos clang -c MyApp.c
xcrun会辨认
$SDKROOT,
可以设置这个环境变来切换各种版本的 sdk
llvm-gcc 终于删除了, 不过演讲者把 "gnu" 念错了... "g" 应该不发音的 是我念错了, GNU 真的是 [gənu:], 牛羚 Gnu 才是 [nju:], 另外 Gnome 发音也没有 [g] 的
c++11 成为默认选项. c++ 运行时从 gnu 的 libstdc++ 转换到了 llvm 的 libc++ .你甚至可以在安装包里打包 clang 编译器和 c++ 运行时而不用担忧版权问题.
-Wunsequenced可以提示
x = x++;的问题
-Winteger-overflow可以提示部分溢出问题
-Wunused-function
-Wbool-boolean
-Wundeclared-selector
...
强大的静态分析, 略有 haskell 的感觉
xcode 5 会扫描 doxygen 注释用来增强自动完成和 quick help
其实去年那个语法扩展的 session 也很棒:
wwdc 2012 session 405 - modern objective C
最近的 LLVM 会议还有大量的货:
http://llvm.org/devmtg/2013-04/
相关文章推荐
- WWDC 上讲到的 Objective C / LLVM 改进
- WWDC 上讲到的 Objective C / LLVM 改进
- LLVM在警告方面的改进 @ WWDC 2013
- 16,Xcode 4.4中LLVM compiler 4.0带来的Objective-C新语法特性
- Xcode 4.4中LLVM compiler 4.0带来的Objective-C新语法特性
- WWDC2012:Objective-C的新特性
- Xcode 4.4中LLVM compiler 4.0带来的Objective-C新语法特性
- WWDC2013 Objective-C 新特性
- Xcode 4.4中LLVM compiler 4.0带来的Objective-C新语法特性
- Xcode 4.4中LLVM compiler 4.0带来的Objective-C新语法特性
- Xcode 4.4中LLVM compiler 4.0带来的Objective-C新语法特性
- Xcode 4.4中LLVM compiler 4.0带来的Objective-C新语法特性
- WWDC2010 Session312 LLVM Compiler的新特性
- iOS7新特征汇总[04]:Framework的改进、Objective-C和已经过时的API(转自cocochina)
- Xcode 4.4中LLVM compiler 4.0带来的Objective-C新语法特性
- Xcode 4.4中LLVM compiler 4.0带来的Objective-C新语法特性
- Xcode 4.4中LLVM compiler 4.0带来的Objective-C新语法特性
- LLVM在静态分析上的增强 @ WWDC 2013
- Xcode 4.4中LLVM compiler 4.0带来的Objective-C新语法特性
- WWDC2012:Objective-C的新特性