奥门新浦京官方网站为什么开发者对PHP又爱又恨

受人尊敬的服务器端脚本语言PHP,因在web开发中的应用而知名。首次由Rasmus
Lerdorf在1995年发布,受WordPress和Facebook的影响而变化着,据W3Techs报道,82%网站的服务器端编程语言是PHP。这门语言在编程语言受欢迎程度排名上,稍微落后于Java,在竞争对手Tiobe排行榜降到第六名。做为高性能的升级版本PHP
7,预期在2015年发布。

软件开发领域里有许许多多编程语言。在这里,不断有新的编程语言在诞生,如Scala、Go、Closure等,也不断有老的编程语言慢慢消亡。它们中的许多都曾为软件开发作出了巨大贡献。作为软件开发领域中最重要的事物,编程语言从一诞生起就会经历人们的议论、批评与改进。这些编程语言的创造者是编程世界的标志人物,当我看到某些人在使用某种编程语言却不知道这门语言从何而来的时候,会感到一种淡淡的忧伤。对于最为流行的编程语言,出现这种情况的情况较少,比如Java,几乎所有人都知道Java之父的名字James
Gosling,但是,对于Perl、Pascal、Lisp或者Erlang呢,你是否依然知道它们的创造者是谁?这些想法促使了本文的诞生,本文收集并分享了这五十年来,最成功,最流行的十门编程语言和它们的创造者的故事。在文章的底部还附有相关的信息图,方便你能够进行直观的查看。1)Java和James
Gosling
Java是世界上最成功最流行的编程语言之一。James
Gosling博士发明了Java,并被尊称为Java之父。在早些时候,Java是由SUN微系统公司开发与提供技术支持的,在2010年1月SUN被甲骨文公司收购后,现在这些是由甲骨文公司来完成。Java的创造是为了完成WORA的理念,它的平台独立性使它在企业应用中获得了巨大成功。到目前为止,它已经成为了最流行的一门应用程序编程语言。2)C和Dennis
Ritchie
1967年到1973年之间,美国计算机科学家Dennis MacAlistair
Ritchie在ATT贝尔实验室创造了C语言。到目前为止,C语言仍然非常受欢迎,它被广泛地运用于系统编程。它比Java要古老得多,但是还依然保持着在软件开发领域的地位。另外值得一提的是,Dennis
Ritchie还与他的同事Ken
Thompson创造了世界著名的UNIX操作系统。如果你要让他和 Bill Gates或者Steve
Jobs比较名气,可能他会比不上,但是要是比较软件开发领域的贡献的话,他会完爆以上那两位。每一个程序员都会铭记Dennis
Ritchie以及他为软件开发领域所做出的杰出贡献。3)C++和Bjarne
Stroustrup
Bjarne
Stroustrup,出生于1950年12月30日的奥尔胡斯,是丹麦的计算机科学家。他最引人注目的成就是创建并推广了编程语言C++。C++,正如其名字所暗示的一样,是C语言之后流行的新一代语言。它所带来的面向对象编程的概念被认为是有别于C语言编程结构的非凡特性。C++目前仍然是最受欢迎的一门编程语言,由于与计算机系统联系紧密以及流行的面向对象特性,它被广泛地运用于商业领域。4)Python和Guido
van
Rossum
Python是一门用途广泛的高级编程语言,它的设计理念是强调代码可读性,因此它的语法非常清晰和明亮。Python是由荷兰国家数学和计算机科学研究院的Guido
van
Rossum设计的。在美国,Python在学术层面上已经取代了Java,如今的学生开始学习编程时使用的是Python,就象上一代使用C或者Java一样。如果你仍然不能确定是使用Python还是Java来作为初学语言,这篇文章可以帮助你作出选择。Python广泛运用于web应用程序开发,在软件开发和信息安全领域有许多基于Python的web框架。另外,Python也广泛被Google、Yahoo、Spotify等科技巨头所使用。5)PHP和Rasmus
Lerdorf
无论你有多么讨厌PHP,你都不能忽略这样一个事实:有一半的互联网都运行着这样一种神奇的互联网语言。PHP最初是由Rasmus
Lerdorf在1995年创造的,PHP现在最主要的实施是由PHP团队来完成,这个团队还为PHP语言提供正式的参考。彼时,PHP是作为微软的动态服务器页面服务器端脚本引擎以及类似语言如JSP的竞争者身份而出现的,但在逐渐受到大家好评并接受之后,现在已经有超过2000万个网站和100万个Web服务器使用了这门语言。它是一门开源的语言,Facebook、Wikipedia、Wordpress以及
Joomla这些互联网巨头都在使用它。我还没告诉你PHP主要用来做什么吧?还需要猜么?答案就是个人主页了!:)6)Perl和Larry
Wall
Perl是一种高级的、通用的、解释性动态编程语言,是由Larry
Wall在1980年代中期设计和开发的。Perl因为其优秀的文字处理能力而一举成名。如今,它仍然是UNIX系统上开发报告、脚本的主要工具。Perl因解析和处理大型文本文件及其在CGI、数据库应用程序、网络编程和图形编程的应用而被大家熟知。Perl广泛地在大型互联网公司中使用,如IMDB、Amazon以及Priceline。对于Java开发人员来说,添加Perl或者Python的组合是很好的补充,因为开发中需要一种脚本语言来用于特定的任务维护和支持。7)JavaScript和Brendan
Eich
如果你问我,过去5到10年里最成功的语言是哪一门?我会毫不犹豫地回答你,是JavaScript。从不久前的客户端JQuery脚本库到最近的服务器端开发的node.js库,在Web开发的各自领域它们都占据着主导地位。JavaScript是一门基于原型的、动态的、弱类型脚本语言,它最初是由Brendan
Eich设计并由网景通讯公司开发的,其功能非常强大,广泛的用于客户端脚本验证、动画、事件捕获、表单提交及其它常见的任务。它运行于浏览器中并被包括Gmail、Mozila
Firefox在内的几乎所有网站所使用。8)Ruby和松本行弘Ruby是由日本的计算机科学家松本行弘在1990年代中期开发和设计的。使用Ruby编程是非常有趣的事情,如果你使用过Ruby你一定知道我表达的意思。Ruby深受Perl、Ada、Lisp和Smalltalk的影响,它的设计是为了让编程更有效率,更加愉快。Ruby主要用于Web应用程序开发,它被Twitter、Hulu和Groupon等大网站所使用。9)Lisp和John
McCarthy
John
McCarthy是第二古老的高级编程语言的创造者。Lisp代表列表处理器之意。我从来没有使用过Lisp,但据说它是函数式编程语言如Haskell、Erlang和Scala的祖先。Lisp常被用于绘图软件的开发和防空系统领域。10)Pascal和Niklaus
Wirth
Pascal是一门有影响力的命令式和过程式编程语言,是由Niklaus
Wirth在1968 –
1969年设计并于1970年出版的。Pascal作为一种小型、高效的语言旨在通过使用结构化程序设计和数据结构来鼓励良好的编程实践。文章来自:慧都控件网

然而,就像任何语言,它也有支持者和反对者。下面解释了支持者声援PHP、和持不同意见者痛批它的原因。

TIOBE 2017
年度编程语言榜单已出炉,世界上最好的语言
PHP 再度无缘年度编程语言。

好的:流行、入门快

“PHP是目前最流行的web开发语言,”PHP工具提供商Zend
Technologies公司【注1】CEO Andi Gutmans说。在New Media
Campaings供职的开发者Josh
Lockhart,也是一名作家,强调了PHP较小的学习曲线、易于部署和快速的开发迭代。Lockhart说,“PHP是最易理解的web开发语言之一,它被安装在大部分服务器上(包含大部分共享主机)。因为有优秀的在线文档和最新的在线资源,学习起来相对容易。”

距离其上次(2004 年)获得年度编程语言,已有 13 年之久。而从历年 TIOBE
编程排行榜趋势图也可以看到,自 2014 年以来,PHP 总体处于持续下滑趋势。

好的:好找工作

“PHP帮助你赚钱、找到一份在服务器端的工作”,Gutmans说。在上周的Dice.com技术工作网站上的快速研究,找到了3,366份PHP相关的工作。与17,418份Java工作相比显得很平淡,紧追Perl(4,300)和Python(5,429),但是高于Ruby(2,973),甚至包括Objective-C(985)。Lockhart把PHP看做使用频率最高的语言之一,尽管它和Ruby、Python、Go和Rust之类的语言比起来,有些保守。

奥门新浦京官方网站 1

好的:继续在发展

这门语言自诩有闭包和命名空间之类的现代功能,还有性能和现代框架。正如Gutmans所指出的,“一些想离开的人在PHP能提供什么上面所受到的必要教育不多。”Lockhart说,开发者正在意识到,PHP有着强大的现代特性以及合适的面向对象编程模型。即将到来的版本7,在应用程序上提供了巨大的性能提升。Lockhart指出,Facebook对PHP的增强,包含了HHVM虚拟机和Hack语言【注2】。

作为世界上最好的语言,PHP 的霸主地位会被撼动吗?

坏的:抱怨设计、缺乏重心

博主Eevee在2012年反对这门语言的公开信《PHP:不规则的糟糕设计》中说道,“事实上PHP里的每个特性都多多少少是不规则的”。Eevee不仅仅给这门语言差评,而且包括框架和生态系统。根据该博主说的,这门语言不是可预期的、一致的,而是充满了让人诧异和不一致的地方。在批评中,PHP被称作不透明的,没有默认的堆栈跟踪,一直承受着复杂的、功能不佳的类型,“没有清晰的设计哲学。早期的PHP受到了Perl的激励;带有‘out’参数的庞大的stdlib来自于C;面向对象部分模仿着C++和Java设计。”

Lockhart承认,Eevee的反PHP言论有些“夸大了事实本质”。尽管是一名PHP支持者,Lockhart在被问及时,还是足够和蔼地列出了批判:

  • 这门语言是不一致的,特别是函数名称和参数顺序。“这很容易修正,因此这不是个大问题。”
  • PHP仍然有很多遗留包袱,像全局变量、魔术引用等等。“这些坏的实践正在缓慢地从语言中修剪,但是在它们消失之前,它们还会怂恿愚昧的开发者坚持不好的实践。”
  • PHP不像其它语言那样专注,Lockhart将其归咎于“受到委员会驱动的、长期都是一块一块的”。

  • 注1:Zend Technologies 公司是一家互联网基础架构软件公司。Zend
    Technologies最为人们熟知的是它的两个奠基人:Andi Gutmans和Zeev
    Suraski,他们与其他以色列程序员一起,发展了由Rasmus
    Lerdorf开创的PHP语言。
  • 注2:Hack,一种开源脚本语言,运行在HHVM虚拟机上,主要开发者为Facebook。在2014年3月20日正式发布。在发布前,Facebook已经在它的网站上广泛使用及测试。

据 W3Techs.com 的数据显示,近年来,有超过 80%
的网站在服务器端的编程语言选择了
PHP,一门语言流行的背后必会有其原因,PHP
一开始凭借其简单上手而流行起来,而持续流行了这么多年,我们相信不仅仅是由于它的易于使用,作为一门服务器端的语言,如果性能没有足够好,很难一直被流行至今。

奥门新浦京官方网站 2

下面,我们不妨回顾下 PHP 的性能是如何演进的。

PHP 的性能演进历史

PHP 是 Web 开发最常用的语言,自 1994 年 Rasmus Lerdorf 创建 PHP
以来,PHP
语言经历了许多激烈的改进,其中性能是开发人员在评估新版本时考虑的主要标准之一。每个大版本的更新都会带来很多新特性和性能提升。

有关 PHP 性能改进的主要版本历史:

  • 1994:Rasmus
    Lerdorf 为了维护个人网页而制作了一个简单的用 Perl 语言编写的程序,称为
    Personal Home Page
  • 1995:Rasmus Lerdorf 用 C 语言对”Personal Home
    Page”进行重新编写,包括可以访问数据库,并于 1995 年 6 月 8
    日发布了首个公开版。这是 PHP 1.0 版本,也是第一次使用了”PHP”的名字
  • 1997:Rasmus Lerdorf、Andi Gutmans 和 Zeev Suraski
    加入了该语言的第三个版本的开发,并进行根本性的重新设计,性能大大提升。从那之后,
    PHP 开发组也创建并发展起来。PHP 也在这个时候改称为 PHP:Hypertext
    Preprocessor
  • 2000:以 Zend Engine 1.0 为基础的 PHP 4 正式发布,自此,PHP
    的性能才开始变得正式起来
  • 2004:发布了 PHP 5,PHP 5 使用了第二代的 Zend Engine。PHP
    包含了许多新特色,如强化的面向对象功能、引入 PDO(PHP Data
    Objects,一个存取数据库的延伸函数库)、以及许多效能上的增强
  • 2015:12 月 3 日,PHP 7.0 正式发布,使用的 Zend Engine 3 带来了 100%
    的性能提升,还有统一的变量语法,基于抽象语法树编译过程

可以看到,于 2015 年发布的 PHP 7
在性能方面取得了重大的突破。该版本最大的改进莫过于无感知的 100%
性能提升,其中包含了运行速度与内存消耗。与 PHP 5 相比,PHP 7
的综合性能提升了一倍以上。

奥门新浦京官方网站 3

PHP 7 带来的性能飞跃让开发者获益良多,使得很多应用受益,也使得 PHP
的应用场景变得更加广泛。

那么下一步 PHP 的性能提升方向是什么?下文将分享 PHP
下一个性能提升的主要举措:JIT 的进展,以及下一个大版本的 PHP
可能带来的特性。( 整理出自:2017 年 OSC 源创会年终盛典鸟哥演讲《PHP
Next: JIT》)

鸟哥表示,从 PHP 7
发布到现在,在提交一些关于性能提升的工作时,阻力会变得小很多。可以说,PHP
7 是开启了 PHP 性能发展方向的一个风潮。

事实上,为一个有长远历史的程序做优化的难度比推倒重构更高。PHP 7
在性能方面带来了跨越式的提升,如果能够将这些成果应用到使用 PHP 的 Web
系统中,也许只需要更少的机器,就能支撑起更高请求量的服务。

PHP 7 之后会有什么 —— JIT

这是一个十分值得我们期待的版本,目前由 Zend 引擎的 Dmitry Stogov
主导。虽然它是基于 PHP 7.1 版本,但实际版本号尚未确定。

JIT 是什么?为什么是 JIT?

JIT (Just-In- Time 即时编译) 并非是新技术,很多语言例如 Java
早已实现。JIT
的思想很简单,即在程序运行时动态对程序进行编译,生成平台相关的机器码(比如运行它的机器
CPU 的本地代码),从而加快程序的运行速度。

为什么是 JIT?

不妨先来看看 PHP 文件的执行流程。PHP 文件的执行流程大致是首先引擎加载
PHP 文件,解释器逐条解释执行代码。

奥门新浦京官方网站 4

引入 JIT 后,前面部分一样,重点是 JIT 编译器会根据 Runtime
信息对热点代码进行动态编译生成机器码,此后这部分代码就可以直接执行,不再需要解释器逐条解释执行,因此运行效率会得到提升。

Facebook 开源的 PHP 虚拟机 HHVM(HipHop Virtual Machine) 就采用了
JIT,这让他们的 PHP 性能测试结果提升了一个数量级,也让开发者意识到 JIT
是一项点石成金的强大技术。HHVM 也是目前最热门的带 JIT 编译器的 PHP
实现。

PHP 7.1 引入了类型推断

而 PHP 要想实现
JIT,必须要解决变量的类型推断这个难题。试想,如果在动态编译时仍需要进行大量的类型检查,性能将会大幅下降。

PHP 7.1 引入了一个称作“类型推断”的特性,这是现阶段正在实现的 JIT
的前驱,但它不是单独开发的,2013 年的 PHP 5 已经实现了一套推断系统,7.1
嵌入了这套系统并对其进行优化。

PHP 7 中已经可以控制变量的类型,7.1
对这个机制进行了完善。我们甚至可以说目前的 PHP
已经是半强类型语言,但由于 PHP
的弱类型语言历史,目前仍有大量代码在运行前无法得知变量类型,所以在 7.1
中 PHP 的开发者进行了大量变量类型推断的工作,为后续的 JIT 实现打下基础。

对变量进行推断,目前比较简单的一种办法是数据流分析,即分析代码的上下文,从而推断出变量的可能类型,比如:

function calc ($a1, $b2) {        // $a1: [ANY], $b2: [ANY]
    $T3 = $a1 * 2;                // $T3: [LONG, DOUBLE]
    $a4 = $T3 % 1000;             // $a4: [LONG]
    $T5 = $b2 * 3;                // $T5: [LONG, DOUBLE]
    $b6 = $T5 % 1000;             // $b6: [LONG]
    $T7 = $a4 + $b6;              // $T7: [LONG, DOUBLE]
    return $T7;
}

对于这项改进,目前依然有较多的困难,鸟哥表示他们的解决思路是对 JIT
进行分级,通过配置实现不同程度的动态编译,从而降低类型预测的难度。此外,针对具体的场景,进行垂直优化。除了基于数据流的分析,PHP
7.1 还会基于分支进行判断。

PHP 7.2 继续提升性能并完善类型推断

PHP 7.2 不久前也已发布,与 7.1 相比,它的性能有大约 10% 的提升。7.2
在数据流分析里引入了三个新特性。

  • sparse conditional constant propagation
  • 逃逸分析
  • 移除“死代码”(消除没有副作用的代码)

PHP 7.2 还包括对基于分支预测的优化,此外,还引入了称为”HYBRID
VM”的虚拟机引擎。

奥门新浦京官方网站 5

关于 JIT 性能表现的一些数据

奥门新浦京官方网站 6

奥门新浦京官方网站 7

奥门新浦京官方网站 8

那么,JIT
性能的提升效果表现如何?这要取决于项目的实际瓶颈。鸟哥表示,JIT
对性能提升要看具体的情景,如果某段逻辑是计算密集型的,它的提升大概有
1/4,不过也有一些性能提升不明显的场景,如果在 IO
密集型场景下进行测试,性能的提升不会很明显,所以一定要考虑具体的使用场景。

此外,鸟哥表示,将来如果要写出更友好的代码,不妨考虑多添加一些类型提示。

最后

TIOBE
编程语言社区排行榜是编程语言流行趋势的一个指标,名次的下降一定程度反映了当前编程语言的流行趋势,但不能成为衡量一门语言是否优秀的唯一标准。有些编程语言受众领域较小,难以达到大范围的推广普及,但在它所专长的领域,发挥着独有的优势。

PHP 在服务端编程语言领域依旧占据主导地位,同时,PHP 社区组持续不断地做版本迭代更新,性能提升。下一个大版本将引入 JIT 特性,这个被奉为点石成金的技术会给 PHP 带来更好的性能,更大的发展吗?

参考:

【编辑推荐】

发表评论

电子邮件地址不会被公开。 必填项已用*标注