WWDC 上讲到的 Objective C / LLVM 改进
https://developer.apple.com/wwdc/videos/
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
就不能用了 (可以改成 union, ruby 源代码里都是用 union cast 的).
{uint16,uint16}
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 改进的更多相关文章
- csdn上讲一个实时计算架构比较清晰的一篇文章
https://blog.csdn.net/ymh198816/article/details/51998085
- JQuery插件:图片上传本地预览插件,改进案例一则。
/* *名称:图片上传本地预览插件 v1.1 *作者:周祥 *时间:2013年11月26日 *介绍:基于JQUERY扩展,图片上传预览插件 目前兼容浏览器(IE 谷歌 火狐) 不支持safari *插 ...
- [置顶] LLVM每日谈之十五 LLVM自带的examples
作者:snsn1984 在LLVM源码的目录下,有一个目录叫做examples,这个目录下边有几个LLVM的例子,初学者一般不会太关注这些例子,但是这些例子确实是精华中的精华,在LLVM的学习过程中不 ...
- IOS UIView 01-View开始深入 绘制像素到屏幕上
注:本人是翻译过来,并且加上本人的一点见解. 前言 一个像素是如何绘制到屏幕上去的?有很多种方式将一些东西映射到显示屏上,他们需要调用不同的框架.许多功能和方法的结合体.这里我们大概的看一下屏幕之后发 ...
- LLVM和GCC的区别
最近在Mac OS X Mountain Lion下用Xcode进行开发,发现在编译选项里有如下所示的这两种编译器:一个是Apple LLVM compiler 4.2,另外一个是LLVM GCC 4 ...
- LLVM和GCC的区别(LLVM提供了模块化的编译模块,非常有利于重用,以前的编译器都没有做到这一点)
最近在Mac OS X Mountain Lion下用Xcode进行开发,发现在编译选项里有如下所示的这两种编译器:一个是Apple LLVM compiler 4.2,另外一个是LLVM GCC 4 ...
- Tensor Core技术解析(上)
Tensor Core技术解析(上) NVIDIA在SIGGRAPH 2018上正式发布了新一代GPU架构--Turing(图灵),黄仁勋称Turing架构是自2006年CUDA GPU发明以来最大的 ...
- Pass Infrastructure基础架构(上)
Pass Infrastructure基础架构(上) Operation Pass OperationPass : Op-Specific OperationPass : Op-Agnostic De ...
- Java基础 (上)
基础概念与常识 Java 语言有哪些特点? 简单易学: 面向对象(封装,继承,多态): 平台无关性( Java 虚拟机实现平台无关性): 支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操 ...
随机推荐
- Android开发 内存泄露检测框架LeakCanary
前言 挖坑后续填坑 中文网站:https://www.liaohuqiu.net/cn/posts/leak-canary-read-me/ gitbub:https://github.com/squ ...
- css,js文件后面加一个版本号
由于前几天,更新了项目,更新的文件有js文件,今天客人截图过来,我发现修改之后的效果没有显示出来,我回复说清理浏览器缓存.到了晚上,客人找老板,说还没有处理到這个,说客人不懂這个.所以想到之前自己为了 ...
- 转载别人的ftp,觉得目录结构不错,学习
开发简单的FTP:1. 用户登陆2. 上传/下载文件3. 不同用户家目录不同4. 查看当前目录下文件5. 充分使用面向对象知识 REDMAE 1 用户登陆 2 3 1.查看用户目录文件 4 2.上传文 ...
- 莫烦pytorch学习笔记(八)——卷积神经网络(手写数字识别实现)
莫烦视频网址 这个代码实现了预测和可视化 import os # third-party library import torch import torch.nn as nn import torch ...
- 关于H5裁剪图片后,直传阿里云的一些问题
这段时间在工作中碰到一个需要在h5裁剪图像,然后直传阿里云的需求.图中遇到了一些小问题,分享出来大家都看看. h5裁剪图像:cropper.js是一个神器啊关于用法,网上可以收罗出大量的帖子,这里我就 ...
- iOS之CGcontext.h方法和属性简介
/* CoreGraphics - CGContext.h Copyright (c) 2000-2012 Apple Inc. All rights reserved. */ #ifndef CGC ...
- spark编程入门-idea环境搭建
原文引自:http://blog.csdn.net/huanbia/article/details/69084895 1.环境准备 idea采用2017.3.1版本. 创建一个文件a.txt 2.构建 ...
- 比特承诺 Bit Commitment
Introduction-A story Alice:股票经纪人 Bob:股民 Alice:你的钱交给我,我替你买股票,我专业,挣钱多! Bob:怎么证明? Alice:我们上月买进的1 ...
- [转]WPF中Binding的技巧
在WPF应用的开发过程中Binding是一个非常重要的部分. 在实际开发过程中Binding的不同种写法达到的效果相同但事实是存在很大区别的. 这里将实际中碰到过的问题做下汇总记录和理解. 1. so ...
- 全栈之路-微信小程序-SKU开发(分析)
SKU是整个小程序中最难完成的部分了,好好记录一下SKU,主要是想记录一下 从最开始拿到这个业务到最终完成这个功能期间的思考过程,至于代码什么的,记录也好,不记录也行,再看! 一.从思路说起 1.SK ...