为什么设计师创造的编程语言更受欢迎?

在编程的世界里,语言纷繁多样,而大部分真正广泛流行的语言并不是那些学术界的产物,而是在通过自由发挥设计出来的。

和那些在最后期限重压下产生的语言版本比较起来,从一定程度上来看,从学术界产生出来的编程语言是失败的。当然,并不是全部。事实早已证明。本文作者Cristina Videira Lopes是一位来自加州大学欧文分校的权威计算机科学家,下面是她的关于编程语言的研究:

开发者喜欢用的语言:

  • PHP – 1994年由Rasmus Lerdorf 设计。“最初设计PHP的目的只是用在他的网络简历上来追踪访问者的,他将它命名为‘个人主页工具’,通常简称为‘PHP工具’。”根据langpop.com的非正式调查,它是排名第四流行的编程语言。
  • JavaScript – 1995年Brendan Eich开始使用。“JS(JavaScript)看起来有点儿像Java,更确切地说,像Java傻傻的弟弟一样。在10天里我只能这样做,否则就会出现比JS更糟糕的东西。”归功于网络编程,JS可能已经成为目前最流行的编程语言。
  • Python – 大约在1990年由Guido van Rossum设计。“我当时只是想找一个感兴趣的编程项目来打发下圣诞节假期的无聊。”(第六流行的编程语言)
  • Ruby  –  大约在1994年由Yukihiro “Matz” Matsumoto设计。“我只是想有一种语言可以比Perl更强大,比Python更好地面向对象,就是这促使我去设计我自己的语言。”

相对的,由那些热衷于内部一致性和正确性的学术派设计的语言却包括了一堆濒死的语言(mostly dead tongues):Fortran, Cobol, Lisp, C 以及Smalltalk。唯一的例外是.NET平台的编程语言和Java,这两项分别由微软和Sun公司花费相当大的投资才出来的项目。

回顾这一历史,以及自己的学术生涯,Lopes觉得象牙塔里创造不出适合人们使用的语言是因为其把编程当成一种科学,而实际上,它更是一种设计。

——我非常想把设计带入到我的日常生活中,我喜欢让我的学生投入到诸如程序语言和程序环境这样的设计中去——在这领域,我有很多想法。我相信对于设计的评估标准是不同于科学和数学的验证的。

Lopes说,实际上,网络迅速地发展也是因为给予了学术界的程序员自由发挥的空间。

——在与科学相违背的一个较好的设计案例就是Tim Berners-Lee向CERN提出的用HTML构建网络的建议。这个建议没有经过任何科学验证。那只是个有趣的关于“信息互联系统”的很好的建议。我甚至可以想象出TB-L的经理当时的想法:“啊,好吧,这个很有趣。他是个聪明人,他需要多少资源,我们就让他做做看,看他能做出什么来。即使最后什么都没有,也没什么大不了的。”TB-L并没有为了这个系统而先写出一份“科学设计的评估报告”,然后“在第二阶段,我们要把它装在很多的机器上”,否则今天这个世界可能会变得大不一样,因为他也许为了那些不需要的证明而陷入黑洞里了。

在程序语言里,这些很多时候可归因为人性:如果他们不好用,他们便不会被广泛采用。正因如此,有的程序语言和完整的系统(如UNIX)在某些人眼中已经被当作计算机病毒看待了。如果可以衡量,这类问题反而会变得困难。正因为是主观的,所以可以通过设计而不是科学来解决。事实上,那些计算机“科学家”仅仅是字面上的“设计者”。毕竟,代码如诗。

2012 Unity开发者大会:首次登陆中国 团队倾城而来

每一个游戏,都有可能是一部经典的杰作。Unity3,将会从技术层面给游戏玩家带来前所未有的震撼,令人瞠目结舌的视觉效果和环境音效。甚至你可以用它来构建大型3A级别的3D游戏。Unity是专门为快速开发游戏所设计的引擎。Unity3包含了许多新的技术。它具备广泛的跨平台特性,无论你的游戏最终要跑在当今哪一个主流游戏平台之上,它都能满足不同平台对性能的苛求。

Unity 3D游戏引擎

Unity开发者大会来到北京

Unity开发者大会首次登陆中国,为广大的3D游戏开发者带来了第一手“白皮书”。Unity宣布将在亚洲举办一系列的为期两天的开发者大会。亚洲的游戏开发者势力越来越强大,通过这一系列的开发者大会,开发者们可以与Unity进行更快速有效的沟通。目前计划在亚洲举办三场开发者大会活动,分别设置在首尔(4月9-10日),东京(4月12-13日),北京(4月14-15日)举行,将为开发者们提供最出色的技术指南和开发经验。

“今年,我们将会在三个国家地区举办开发者大会,这将成为游戏发展史上最惊艳和卓越的一抹重彩。”Unity公司CEO David Helgason说,“日本的游戏产业链最为完善,具有悠久的发展历史,在整个行业中新人辈出。近年来,韩国已经成为游戏设计和制作人才的重地。虽然中国游戏市场刚刚兴起,但是中国游戏产业正在呈现出指数增长。这是一个令人心动的历史时刻,游戏业正在亚洲蓬勃发展。”

这是游戏开发者的盛会,涵盖10多个游戏开发议题。对游戏引擎和开发工具最为资深的讲师将与开发者共论游戏发展之道。同时来自这些地区的老牌游戏开发商,也将会分享他们使用Uniyt开发工具的成功经验。在中国的这届Unity开发者大会,将有中文讲解。另外,深入到会议日程,将会为与会者提供更丰富的沟通机会,每一个主题演讲都会设有Q&A环节。

“亚洲的文化和美学,孵化了一批有着独特内涵的游戏开发者。”Unity亚洲区总经理John Goodale说“我很荣幸的看到,在亚洲Unity游戏引擎能和开发工具得到如此快速的普及,一系列开发者大会的举办,一定能促进亚洲地区游戏开发的整体实力。”

图:Unity引擎开发者 倾城而来

关于Unity公司

Unity是一个直观而灵活的游戏开发平台,你可以用它来实现你的游戏创意和智能互动,创作无与伦比的3D和2D游戏内容。一次开发就可以确保该游戏部署到所有主流的游戏平台。目前Unity技术社区共有750,000注册开发人员。包括大型游戏出版商,独立工作室,学生和业余爱好者。Unity的3D开发工具和平民化的普及政策,在国际上屡获殊荣。Unity公司总部设在旧金山,并且在加拿大、丹麦、立陶宛、瑞典、英国、日本和韩国设有办事处。更多详细信息请访问:http://unity3d.com

难倒卡巴斯基Duqu病毒真相揭秘 “OO C”而非“C++”

Duqu病毒,即使是Kaspersky这样专业的反病毒公司都无法搞清楚它究竟是用什么语言编写,最终通过在Kaspersky Lab和热心网友的帮助终于水落石出,下文是Kaspersky Lab专家的回应。

在我之前的关于Duqu的博文中,我描述了一个关于Duqu的最大的谜题——C&C通信模块非常奇怪,它竟然和其他部分不是使用同一种语言编写。作为业内技术专家,我们觉得这很有趣但也令人迷惑,于是我们决定在社区中分享它。

我们收到的反馈远远超出预计,总共收到超过200条回复和60多条邮件都是关于可能的语言或框架的建议。我们在这里参与帮助我们鉴别这一“迷之代码”的朋友们说一声“非常感谢!”

先来看看大家所认为最有可能的语言:

  • Variants of LISP
  • Forth
  • Erlang
  • Google Go
  • Delphi
  • OO C
  • 旧的C++和其他语言编译器

非常感谢那些充满智慧的评论,我们现在已经能非常确定正确答案了。下面我引用一下最有用的评论:

igorskSimple Object Orientation (for C)It seems someone over at reddit (http://www.reddit.com/r/ReverseEngineering/) hit the jackpot: the code snippets look _very_ similar to what this would produce: http://daifukkat.su/wiki/index.php/SOO

There are a few other OO frameworks for C, but they don’t match as well: http://ooc-coding.sourceforge.net/ http://sooc.sourceforge.net/

JonwilRe: Other C/C++ compiler?I have seen how GCC works internally and its ABI (for a number of different versions) and I can confirm that the Duqu code is definitely not generated by GCC. I don’t know how other C++ compilers work but the things I see in the ASM (like where the pointers to the functions go, the way the “this” pointer is passed etc) do not suggest C++ to me but something else entirely. (such as the aforementioned “object-oriented” frameworks for C that exist)
igorskRe: Other C/C++ compiler?I’m 99% sure the machine code was generated by MSVC. It’s something you get a feel with experience, but I can point out two things that are quite characteristic of MSVC: 1) it uses esi as the first candidate for temporary storage; 2) “pop ecx” instead of “add esp, 4”.

我们还收到Pascal Bertrand aka bps和一位匿名人士的有趣的邮件,他们认为这是一个定制的面向对象的C语言,被称为”OO C”。

这两条信息非常重要,因为它给我们找到真正的编译器——Microsoft Visual Studio compiler(MSVC)的线索。之后我尝试了不同版本的MSVC和不同的源代码配合不同的编译选项来尝试重制Duqu的二进制代码而且最终成功了。

Duqu原始代码分解:链表类架构

手动反编译C代码

上面的C代码,当用MSVC2008和选项/O1(最小规格)/Ob1(仅内联扩展)[译者注:此处均为大写字母O]产生出来的指令码,和Duqu的完全相同。改变运算顺序和if/else结构产生的代码,MSVC2005也能产生出近乎相同的二进制代码。因此我们能高度确定Duqu是纯C代码用MSVC2008以/O1 /OBb1选项编译出来的结果。

这又意味着什么呢?简单地说,给了我们最开始的问题两个可能的答案:

  1. 这个代码是定制的OO C框架写,基于宏或者是预处理指令。正如你们所想,因为它确实很接近OO C的程序。
  2. 所有代码都是用OO C手动写的,没有使用任何相关扩展。我们不能完全否认这种可能,因为技术角度来讲,完全无法区分宏指令代码和手抄代码的区别。

从各个构造函数以及成员方法的相似性来看,我们可以假定使用了源代码预处理,而且猜想1更有可能。

现在,又有多个开源”OO C”框架可供选择,它们中一些产生的结果和Duqu非常相似,最接近的要数”SOO”(Simple Object Orientation for C),但它是在Duqu问世之后才出现的。

无论以上两个猜想哪一个是正确的,都非常有意义。Playload DLL包含95Kb事件驱动的由OO C这个没有自动内存管理以及安全指针的语言所写的代码。这种编程方式在大型正规程序中非常常见,而不是那样的恶意软件。另外,整个事件驱动架构肯定是作为Duqu代码的一部分或者它的OO C扩展而写的。

很难解释为什么它的作者会使用OO C而不是C++,但我们有过去相似的案例作为参考,一些更倾向这么做人给了我们两个理由:

  1. 他们不相信C++编译器。这只是过去人们首选汇编语言时用来做编程入门的语言。而C是是一项大的革新,并且迅速成为了标准。当C++发布时,很多old school的程序员不愿意接近他,因为不相信内存分配以及其它模糊的会导致间接执行的语言特色,例如:构造函数。
  2. 极度可移植性。过去(10-12年前)C++并没有完全标准化,所以在MSVC上编译通过的程序并不一定能在Watcom上编译。如果你需要极度的可移植性,希望能够在所有平台上都能运行的话,你应该使用C语言。

所有迹象都指明了这必定是个有经验的”old-school”开发者团队的“杰作”!

结论:

  1. Duqu框架是”C”语言代码经由MSVC2008使用/O1 /Ob1特殊选项编译而成。
  2. 代码很有可能由C语言的定制的”OO C”编写
  3. 事件驱动架构是作为Duqu框架的一部分或者是”OO C”的扩展而开发
  4. C&C代码是从已经存在的软件项目重用的,并且集成在了Duqu木马中。

以上所有结论表明是由一个相当专业的开发者团队,他们能够重用陈旧的由顶尖”old school”开发者所写的代码。这样的技术常常在专业软件而不是现在的恶意软件中出现,所以Duqu同Stuxnet(译者注:2010年肆虐全球的超级工厂病毒)一样是在恶意软件中鹤立鸡群般独一无二的存在。

原文出处:securelist.com

jQuery 1.7.2正式版发布!

jQuery 1.7.2正式版发布。该版本在1.7.1的基础上修复了大量的bug,并改进了部分功能。而相比于1.7.2 RC1,只修复了一个bug。

值得注意的是:如果你正在使用jQuery Mobile,请使用最新的jQuery 1.7.2和jQuery Mobile 1.1这两个版本,因为之前的jQuery Mobile版本还基于jQuery core 1.7.1或更早的版本。 更多详情参看jquery。

下载地址:
http://code.jquery.com/jquery-1.7.2.min.js (minified, production)
http://code.jquery.com/jquery-1.7.2.js (unminified, debug)