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
{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 改进的更多相关文章

  1. csdn上讲一个实时计算架构比较清晰的一篇文章

    https://blog.csdn.net/ymh198816/article/details/51998085

  2. JQuery插件:图片上传本地预览插件,改进案例一则。

    /* *名称:图片上传本地预览插件 v1.1 *作者:周祥 *时间:2013年11月26日 *介绍:基于JQUERY扩展,图片上传预览插件 目前兼容浏览器(IE 谷歌 火狐) 不支持safari *插 ...

  3. [置顶] LLVM每日谈之十五 LLVM自带的examples

    作者:snsn1984 在LLVM源码的目录下,有一个目录叫做examples,这个目录下边有几个LLVM的例子,初学者一般不会太关注这些例子,但是这些例子确实是精华中的精华,在LLVM的学习过程中不 ...

  4. IOS UIView 01-View开始深入 绘制像素到屏幕上

    注:本人是翻译过来,并且加上本人的一点见解. 前言 一个像素是如何绘制到屏幕上去的?有很多种方式将一些东西映射到显示屏上,他们需要调用不同的框架.许多功能和方法的结合体.这里我们大概的看一下屏幕之后发 ...

  5. LLVM和GCC的区别

    最近在Mac OS X Mountain Lion下用Xcode进行开发,发现在编译选项里有如下所示的这两种编译器:一个是Apple LLVM compiler 4.2,另外一个是LLVM GCC 4 ...

  6. LLVM和GCC的区别(LLVM提供了模块化的编译模块,非常有利于重用,以前的编译器都没有做到这一点)

    最近在Mac OS X Mountain Lion下用Xcode进行开发,发现在编译选项里有如下所示的这两种编译器:一个是Apple LLVM compiler 4.2,另外一个是LLVM GCC 4 ...

  7. Tensor Core技术解析(上)

    Tensor Core技术解析(上) NVIDIA在SIGGRAPH 2018上正式发布了新一代GPU架构--Turing(图灵),黄仁勋称Turing架构是自2006年CUDA GPU发明以来最大的 ...

  8. Pass Infrastructure基础架构(上)

    Pass Infrastructure基础架构(上) Operation Pass OperationPass : Op-Specific OperationPass : Op-Agnostic De ...

  9. Java基础 (上)

    基础概念与常识 Java 语言有哪些特点? 简单易学: 面向对象(封装,继承,多态): 平台无关性( Java 虚拟机实现平台无关性): 支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操 ...

随机推荐

  1. 【9.14NOIP模拟pj】wtaxi 题解

    [9.14NOIP模拟pj]wtaxi 搜索

  2. SQLite C++ Wrapper 是一个 C++ 语言对 SQLite 的最小封装包。

    SQLite C++ Wrapper 是一个 C++ 语言对 SQLite 的最小封装包. 示例代码1:   #include <string> #include <iostream ...

  3. LUOGU P1505 [国家集训队]旅游 (树链剖分+线段树)

    传送门 解题思路 快被调死的码农题,,,其实就是一个边权下放到点权的线段树+树剖. #include<iostream> #include<cstdio> #include&l ...

  4. JavaScrip中的循环语句

    循环语句 循环语句,也是流程控制语句中不可或缺的一种结构.在 JavaScrip中实现循环的方式有好几个一个来看 1.为什么需要循环 在具体介绍 Javascript中的循环之前,首先我们来明确一个问 ...

  5. Workman-Thrift疑问解析

    Workman是纯纯的PHP实现的一套网络通信框架,Workman-Thrift则是以Workman为基础,为Thrift RPC实现网络通信.经过学习与测试,现把自己的疑问与验证记录下来: 问题一: ...

  6. python 模拟键盘输入

    备忘录 import win32api import win32con win32api.keybd_event(17,0,0,0) #ctrl键位码是17 win32api.keybd_event( ...

  7. <每日一题>题目15:mysql创建表及相关约束

    题目: 解答: 第一个表创建: create table class( cid int not null auto_increment primary key, caption char(20) no ...

  8. mongoDB可视化工具RoBo 3T的安装和使用

    第一步下载RoBo3T https://robomongo.org/download 第二步安装 双击安装包安装,修改安装路径,不停下一步,点击安装. 一路next,最后到了这个页面直接点击finis ...

  9. [转]在C#代码中应用Log4Net系列教程(附源代码)

    Log4Net应该可以说是DotNet中最流行的开源日志组件了.以前需要苦逼写的日志类,在Log4Net中简单地配置一下就搞定了.没用过Log4Net,真心不知道原来日志组件也可以做得这么灵活,当然这 ...

  10. Odoo QWeb

    1.web 模块 注意,OpenERP 模块中 web 部分用到的所有文件必须被放置在模块内的 static 文件夹里.这是强制性的,出于安全考虑. 事实上,我们创建的文件夹 CSS,JS 和 XML ...