为什么动态类型语言相对比较慢?

静态类型语言中,在声明变量时已经指定了数据类型和表示方法。动态类型语言是在运行期间检查数据的类型,不得不保持描述变量值的实际类型标记,程序在每次操作变量时,需要执行数据依赖分支。

间接分支(Indirect branch)数据局部性(data locality)对于运行时的性能是致命的。

这就是动态语言的JIT编译器基准测试要强调near-C的内循环速度,以及避免大的数据结构和数据处理问题的原因。

我也希望像Python这样的动态类型语言可以变快。我试过用Python来进行传统的服务器编程——“系统语言”领域——但是效果真的不好,我现在考虑用Java重写一个服务器。

因此,我花时间思考如何真正静态地编译Python。毕竟,那是我梦寐以求的编程语言!但当我思考如何将动态类型代码与静态编译Python结合起来时,我遇到了数据变慢的问题:

在动态语言中,通常所有数组中的元素(或其他数据结构)类型各不相同,所以有不同的表示值。因此,这些值都必须被单独存放为堆,而不是顺序地存为数组。这意味着如果对不相邻的内存执行数据依赖分支,则对缓存有更高的要求。

也有一些聪明的技巧,使用变量中的特殊bit,将一些原生类型(像整型)打包成一个类型,类似于指针,但这要求寄存器在操作过程中进行跟踪,会增加开销。

还有一些方法,比如使用JIT编译热路径(hot path)时,如果你直接插入没有标类型的值,而不是在堆里分别标记类型, 那么与JIT编译过的代码的互操作性会降低,如果其他代码改变了数组中的一个值的类型,就会出现非常严重的后果。

我一直在思考,在Python语言中,什么是静态的,什么不是。通过SSTA(统计静态分析)和逃逸分析可以判断,大量正常的程序是静态的。Paul Biggar给了我信心证实我的猜测是正确的,我的Python代码90%都是静态的。

有人会问,那另外的10%呢?通常情况下,我可以让所有的都是静态的,或者想象它被参数类型的限制范围特殊化了。除了Python语言的标准模 式,其他模式都由Web服务器分配给基于HTTP方法(如果收到GET请求就称为“get”方法)的Web处理器,这也需要程序员依照switch语句 (如elifs的长链)来进行修改。

Robert Harper对“从单一类型静态语言方面,动态语言是如何实现的”这个问题作出了很好的解释,下面这句话是我希望他能进一步进行解释的:

引用 我深知“编译器可以优化它”,至少在某些情况下。

我确信他说的“某些情况”是指遇到non-escaping的情况,因为和后面的执行代码进行交互时,你应该要能够确定escape的类型。

一些动态调用是无污染的——编译器可以从代码检查中发现一些变量(或方法)是动态的,但动态的代码不表示其他变量也是动态的,因为不同类型的变量、方法、成员的存在或缺失都被限制成了可识别的类型(或null)。

但通常编译器是无法从代码检查中发现这些情况的,如果无法追踪到执行的情况,就无法知道代码如何依赖以及如何改变其他静态变量的值。因此,工作中断,所有变量再次变为动态的。

我一直在努力寻找把Monkey Patch(不改变初始源代码来扩展和修改动态语言运行代码的方法)、Set(属性或索引器元素赋值的“访问器”方法)、SetAttr(SetAttr 语句可以为一个文件设置属性信息)等解决办法移植到我虚构的Python编译器里,因为类型标记严重地降低了运行性能。

快速的数据结构对于内存访问模式和缓存位置是非常重要的,还可以减少分支和对这些分支的标记工作。

欲哭无泪:Facebook 购买的 IBM 750 项专利或已大部分被授权给 Yahoo

上周,Yahoo一反合作常态给了Facebook一刀起诉其侵犯了自己的10项专利。这个时候对于即将上市的Facebook来说被卷入到专利诉讼中来说是非常不利的。因此Facebook从IBM买来了750项专利希望其中会有一些能威胁到Yahoo:如果Yahoo不撤销之前的诉讼,那么Facebook也将使用新买的专利起诉Yahoo。

但是最新的消息可能让Facebook欲哭无泪。有消息说该批Facebook从IBM买来的专利中已经有大部分被授权给了Yahoo使用。而根据美国公司的一般授权协议,已经授权的专利可能不会因为专利拥有者易手、破产等等原因而终止被授权者使用。也就是说从专门的反诉角度来说,这批专利可能对Facebook毫无用处。

不 过目前还没有更多的消息还原这件事情。还有好几个问题需要等待各方的回应:1.IBM和Yahoo间是否有相关专利授权?2.授权协议如 何?3.Facebook购买的专利是否有被Yahoo大量使用?这几个问题决定了Facebook能否摆脱Yahoo的诉讼更加轻松的完成IPO。否则 IPO之路可能会来得很沉重。

LibreOffice 即将发布“云版本”

3月23日,世界《文档基金会》发言人Italo Vignoli对Register说:“the LibreOffice Cloud is scheduled to be released next month(四月份), allowing LibreOffice users to store their documents in the cloud“,但是,具体细节与安排暂时不能对外透露。

这个“云版本”的LibreOffice办公套件“will definitely be a worthy competitor to the existing Google Docs and Microsoft Office 365 cloud-based office suite services”,真是大快人心也!

这件事情预示着Ubuntu平板电脑快要问世了。世界已经进入“云时代“,而我们不能赖在地上不走,手中还挥舞着盗版XP呢!

说明:请见“Forget About Google Docs, LibreOffice Cloud Coming Soon”一文。

南非男子向美国政府出售 iOS 漏洞 最高25万美元

如果越狱(在这里我们只谈iOS越狱)是一笔买卖,可以说全球的越狱用户都欠着那些无私的黑客一份人情,如果不是他们花费时间和精力进行破解,我们不可能那么随意地在苹果设备上进行各种插件的安装。而在苹果与这些黑客之间的猫鼠游戏过程当中,越狱用户无疑是最大的受益者之一。

我们知道,这些一直在进行iOS破解的黑客,其实随时都可以把他们发现的漏洞直接向苹果报告,以此来改善iOS系统。当然了,苹果或许会为之掏一掏口 袋来改善黑客的生活条件,毕竟越狱是不能够直接涉及钞票的。但是如果我要说,国家政府也会为此付钱,有多少人愿意相信呢?

一名昵称为Grusq的南非男子近日向媒体披露,他在过去一年的时间内通过向美国政府出售各种系统的漏洞,获得了不菲的收入。我们可以从截图当中他为 这些系统漏洞标出的定价:最低为Adobe的5000-30000美元,最高为iOS的10万-25万美元。Grusq称,他今年的目标是从美国政府处挣 足 100万美元。

据了解,Grusq近日已经向美国政府开价25万美元,以售出一个iOS的0-day漏洞。为了不让一些朋友对此误会,我们需要说明的这种行为可是合法的商业交易(至少在美国)。不过,我们无从猜测美国政府将这些系统漏洞买下,并拥有“独家使用权”之后的目的。

如果你发现一个可用于越狱的漏洞,会如何是好呢?

文/威锋网

诺基亚 N9 自定义 Android 4.0.3 Alpha ROM 发布

那些抱怨诺基亚选择与微软合作而不是和谷歌合作的诺基亚N9用户们将可实现他们享用安卓系统的心愿了。据国外媒体报道,一家名为 NITDroid的美国科技论坛的现已放出为诺基亚N9打造的自定义安卓Alpha ROM。

7 3667742 011db0513edc596 诺基亚N9自定义Android 4.0.3Alpha ROM发布

消息称,此次放出的安卓ROM可不是随便一个安卓系统版本,而是安卓4.0.3ICS操作系统。这意味着诺基亚N9将支持双系统启动,可在安卓系统和Meego间任意选择。

另外,NITDroid论坛放出的演示视频中,我们可以看到诺基亚N9运行安卓4.0.3也基本流畅。如果你手上也有N9的话,想尝试下冰激凌的味道的话,猛击这里吧!

以下是演示视频(土豆   YouTube)

文/weiphone