石锅拌饭

Tag: development

Snow Leopard Ars Technica Review 摘要

by Robin Lu on Sep.03, 2009, under Uncategorized

每次Mac OS X升级, Ars Technica都会有一个长篇的评论, 这次也不例外, 有23页之长. 原文在此. 边看边将我比较感兴趣的部分摘要了一下.

Snow Leopard是一次主要针对开发者的升级, 预告时就打出了0 feature的噱头, 最终用户能体验到的变化也许不多.

安装

安装大小有比较显著的变化, 比Leopard小很多. 排除Finder采用十进制方式展示空间大小的原因, 真正节约了空间的地方包括:

  • 可运行码中不再有PPC部分.
  • 很多文件采用了压缩模式, 利用extended attributes, 以ResourceFork的形式保存. 从之前版本的Mac OS X会是一个0大小的文件, 但在文件拷贝的层面做到了向前兼容.
  • 对于更小的文件, 会直接保存在extended attributes中, 而不再单独分配一个块(通常是4K).
  • 压缩存放文件, 一方面是节约了硬盘, 另一方面以CPU换I/O. 将内容存放在extended attributes中, 可以减少硬盘磁头的移动. 一切都是为了更快的读写速度.

安装过程中过检查不兼容的程序.另外, 安装增加了掉电保护功能.

64位

一图顶万言

64位内核

K64(64位内核)并没有在所有的系统上被激活, 目前缺省激活的只有08以后的XServers. 要想在其他K64-capable的机器上启动64位内核, 需要在启动时同时按下6和4两个键. 或者用nvram直接修改启动配置.

64位内核最直接的好处是可以使用更大的内存. 更多的寄存器, 新的寻址方式和浮点运算能力对性能提升有帮助, 但只有少数程序(通常是server-based的程序)用到了这些特性, 对更多的日常应用而言, K64没有你想象中那么有用.

对于安装了96GB内存,并且不存在32位驱动程序困扰的人, K64是首选.

雪豹的32位内核同样支持64位应用, 在不耗尽内核地址空间的前提下, 不妨碍使用超过4G内存.

雪豹中64位应用明显增多,大量新API不再支持32位, Objective-2.1的很多新功能也只能用于64位应用程序.

苹果在用自己的行动拉拢大家进入64位阵营.

QuickTime X

X means ‘Ten’. 目标是淘汰已经18年之久的老QuickTime API. 但只是一个开始.

QuickTime X是纯64位. 部分功能仍依赖于32位的QuickTime 7. 通过启动一个独立的32位QTKitServer进程来完成64位应用对32位应用的使用.

QuickTime X API提供比之前更合理的资源使用方式, 只做你需要它做的事情. 对部分显卡支持GPU加速播放H.264.

文件系统API

用NSURL和CFURL统一文件引用.

引入Bookmark.

Do more with more

我们的硬件越来越好, 但运行速度并没有明显的改观, 原因之一是软件开发并没有充分利用这些提升. 雪豹的目标之一就是让开发者可以享受到硬件提升带来的好处, 在更好的条件下做到更多.

LLVM和Clang

隆重推出LLVM和Clang. 可以采用GCC, LLVM-GCC, Clang等多种编译方式. 在对特定硬件的优化上, LLVM比传统编译方式更具优势.

LLVM和Clang的组合, 编译速度更快, 编译出的可执行代码运行速度更快. 更友好的错误提示. 支持代码静态分析.

Blocks

Blocks的支持, 使C++, C, Objective-C也可以拥有过去只属于动态语言的closures和anonymous functions的特性.

不同于函数指针, Blocks提供更灵活的参数传递和变量上下文方式. 和真正的动态语言相比, 仍然有所限制, 需要遵守一系列规则.

Grand Central Dispatch

简称GCD, 是雪豹提供的新的基于C语言的并发运行机制.

通常,应用程序很难根据CPU的数量和使用情况来控制线程的数量. 多了, 增加调度成本. 少了, CPU闲置.

GCD提供统一的线程调度机制. 应用程序将任务放入GCD的任务队列, GCD根据硬件的具体情况产生数量合理的线程, 将任务逐个发送到这些线程中并发运行. 无论是双核还是八核, 同样的程序通过GCD可以充分利用硬件资源, 硬件升级对应用程序透明. GCD线程池中的线程被队列中的任务不断重用, GCD队列比线程更轻, overhead更小(512KB vs 256B).

异步

尽管有GCD, 我们仍然面对数据共享, 锁等等同步问题的困扰. Apple通过GCD, 鼓励开发者用一种异步的思想来解决同步问题,将程序分成主线程和完成繁重工作的工作线程.

GCD队列中的任务,实际是通过Blocks来实现的, 可以将运行单位限制在很小的范围内,更容易控制运行上下文, 同时也很容易将本来有同步问题的代码送回主线程来完成.

GCD让异步运行和充分利用CPU变得前所未有的简单.

OpenCL

OpenCL是有关于如何充分利用GPU. 苹果希望通过OpenCL, 将一些适合与在GPU上做的运算,比如一些矢量运算,交给GPU. 基于现实的考虑, 苹果在设计OpenCL时, 并没有限定OpenCL程序只运行在GPU上, CPU也可以作为可选设备之一, 扩大了OpenCL的使用场景.

OpenCL对上层统一接口, 却可以根据底层不同硬件做实时优化, 完全是依赖于LLVM强大的JIT编译能力. OpenCL还使用了GCD来处理任务并行.

到此, 雪豹已经将硬件能力挖掘的淋漓尽致.

其它

Input Managers, SIMBL plug-ins不再被支持.

6 Comments :, , more...

Firebug中你不该错过的几个功能

by Robin Lu on Sep.10, 2007, under Uncategorized

Firebug是Firefox的一个扩展,提供了诸多网页开发的辅助功能,如果你是一个网页开发人员,天天要和HTML/CSS/Javascript打交道,Firebug能大大提高你的工作效率。
Firebug的大部分功能都很直观,我最常使用的是Inspect CSS/DOM和Javascript debug,有时候会看看Net和YSlow。还有一些功能,或大或小,不是上来就发现,但也是非常好用,不容错过:

获取XPATH

无论做userscriptbookmarklet还是网页爬虫,有时候用五六行DOM实现的网页元素提取,用XPath一句就搞定了。以前定位一个元素的XPath主要靠眼,有Firebug就省眼了,先用Inspect定位网页元素,然后点右键,选Copy XPath,搞定。
拷贝xpath
这个XPath是从DOM树里来的,已经修正了网页上的一些错误,所以有时和实际的XPath有一些偏差,但一般都很容易调整。比如一些网页中table里没有tbody,直接就是表格内容,DOM树会自动补上tbody,得到的xpath中也会有tbody,在实际使用的时候,和网页实际内容对应,就要把tbody去掉。

javascript命令行

如果哪个脚本语言不提供带命令行的控制台(console),我就不玩了,:-p。善用命令行控制台(console),可以省下很多debug的时间。我以前介绍过jsenv。Firebug也提供非常好用的javascript命令行控制台,可以直接和当前网页交互,输入命令的时候还能自动补齐。另外,一定不要忘记先看看这个命令列表

控制台API

我最爱用的javascript函数就是alert,偶尔把它放在循环里,我可以花一下午的时间点OK玩。现在是和alert说byebye的时间了。Firebug提供了一套相当完备的javascript控制台API,可以将log直接输出到控制台而不再用跳出小窗口,提供多种log级别(debug,info,warn,error)和分组功能,可以显示对象属性,可以记录stack trace,甚至提供timer和profiler,调试performance都不用发愁了。记得查看控制台API的说明

标尺

无论在网页布局还是做动态HTML,常常需要知道一个网页元素的相对位置。你可以装一个Measueit扩展自己量,也可以用Firebug里的标尺。用Inspector选中你要度量的元素,在右侧选中Layout标签,然后鼠标划过盒模型中央,标尺就会出现。
Firebugruler

在所有浏览器中使用Firebug

对不起,不是所有的功能,是不是有点失望。不过,至少你可以保证控制台API正常输出,并且提供命令行的支持,已经相当不错了。下载firebuglite文件,放在脚本目录下,然后在页面中加入:

<script language="javascript" type="text/javascript"
src="/path/to/firebug/firebug.js"></script>

用F12就可以召唤出Firebug了。

3 Comments :, , , , , , more...

Archives

Browse by tags