23

「世界上最好的编程语言」,刚刚度过了25周岁生日

 3 years ago
source link: https://www.jiqizhixin.com/articles/2020-06-09-8
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

FviEzam.png!web

「只要是用过 PHP 的程序员,都知道两件事:第一,这是一种糟糕的语言,如果有其他选择,自己绝不会再使用 PHP;第二,历史上一些非常成功的项目都在用 PHP。」

Fine,这两点并不矛盾。作为一门编程语言,PHP 是有很多的缺陷,但和 PHP 环境具备的优点相比,这些缺陷也就不值一提了。和其他语言相比,PHP 为项目的搭建、更改和运行提供了更好的支持。

2020 年 6 月 8 日,「世界上最好的语言」PHP 迎来了自己的 25 周岁生日。

<?php
print "This is the best language in the world.";
?>

PHP 走过的 25 年

与其他语言不同,PHP 是在 web 服务器中诞生的。它的优点与面向请求、服务器端执行紧密相关。

故事始于 1995 年。当时,Rasmus Lerdorf 使用 C 语言编写了一个简单的通用网关接口 (CGI) 二进制文件集,这是 PHP 的第一个化身。这个集合最初被用于跟踪 Rasmus Lerdorf 在线简历的访问数量,之后 Rasmus 将脚本套件命名为「Personal Home Page Tools」,简写为「PHP Tools」。

AFNVBj3.png!web

25 年说短不短,不过 PHP 的发明者 Rasmus Lerdorf 今年也才 51 岁。

1995 年 6 月 8 日,Rasmus 向公众发布了 PHP Tools,这也是 PHP 诞生的标志性事件。

1996 年 4 月,Rasmus 重写了一次代码,推出了 PHP/FI,开始了 PHP 从工具套件向编程语言的真正演化。它包含对 DBM、mSQL 和 Postgres95数据库的内置支持,并支持 Cookie、用户自定义函数等。1997 年 11 月,PHP/FI 2.0 发布。

1997 年 12 月,以色列理工学院的学生 Andi Gutmans 和 Zeev Suraski 为他们作为大学项目开发的电子商务应用程序寻找后端。他们发现 PHP/FI 2.0 低效且缺少功能,于是开始完全重写底层解释器。他们联系到 Rasmus,与之讨论了实施方案和他们要重新开发的 PHP 的各个方面。

zY32An2.png!web

左:Andi Gutmans;右:Zeev Suraski。

1998 年 6 月,PHP 3.0 诞生。Zeev 和 Andi 重写了解释器并引入了一个新的扩展 API,该 API 大大简化了社区贡献新扩展的方式。 顶峰时,PHP 3 安装在互联网大约 10% 的 Web 服务器上

1999 年 1 月,Zeev 与 Andi 成立了 Zend 公司。该公司后来成为 PHP 的创新和开发源。它贡献了核心改进,以及用户包与框架和开发环境工具。

Zend 的成立为 PHP 的发展带来了不小的变化。2000 年 5 月,PHP 4.0 发布。这一新版本带有 Andi 和 Zeev 开发的全新「Zend 引擎」核心。除了性能得到显著提升外,PHP 4 还添加了对更多 Web 服务器、HTTP 会话、输出缓冲和多个新语言结构的支持。

2003 年,PHP 被用于开发博客软件和内容管理系统 WordPress。这一软件一经发布即风靡全球,为 PHP 增加了大量人气。时至今日,互联网上超过三分之一的网站使用 WordPress。

Yne2ae6.png!web

WordPress:以 PHP 和 MySQL 为平台的自由开源的博客软件和内容管理系统。

2004 年,PHP 5.0 发布。在此期间,Dmitry 加入 Zend 并在 PHP 5 期间帮助开发了大多数核心 PHP 子系统。同年,Facebook.com 以简单的服务器渲染 PHP 网站形式上线。

此时,PHP 已经非常流行了,因为它是第一批支持动态网页的工具之一,而且 WordPress 为该语言添加了一些新功能,但这些也破坏了它的向后兼容性。

2005 年,开发团队认为在 PHP 6 中支持 Unicode 将非常有趣,但这一版本完全失败了。有人认为,这也是 PHP 将自己弄得「声名狼藉」的主要原因之一。

为了这个失败的版本,开发团队浪费了大量的时间和精力。差不多十年之后,也就是 2015 年,PHP 团队才开发出下一个成功的版本——PHP 7.0。在此期间,PHP 6 销声匿迹(2010 年被正式放弃),但 PHP 5 的多个版本仍在使用并不断更新。

Zjq2uaN.png!web

PHP 7.0 是一次重大更新,包含新的 Zend Engine 3 (PHPNG)、各种改进和新功能。它的速度是 PHP 5.6 版本的两倍。但与此同时,这一版本也破坏了相当一部分向后兼容性。这些改变提高了 PHP 的入门门槛,引发了一部分用户的不满,但也有人为 PHP 语言性能的提升和社区的成长感到欣慰。

在之后的几年里,PHP 7 又经过了几次迭代。今年 5 月 14 日,这门语言发布了其最新版 7.4.6 版。今年 4 月,PHP 官方还公布了 PHP 8.0 版本的发布时间表。根据该时间表,PHP 8.0 的 Alpha 1 版本将于 2020 年 6 月 18 日放出。

在这 25 年的发展时间里,PHP 受到了褒贬不一的评价。有人认为,PHP 存在很多设计缺陷,开发者水平良莠不齐、安全性差。在 Stack OverFlow 的一项调查中,PHP 甚至被票选为最令人讨厌的五种编程语言之一。但也有人认为,PHP 入门门槛低,非常适合 web 开发,即使不是「世界上最好的语言」,也不至于受过多苛责。

jEjQnyv.png!web

爱 PHP 的三个理由 

如果有人深爱着 PHP,那一定是因为以下三个原因。

第一, 状态。每个网页请求都是从一张完全空白的面板开始的。除了用以提供初始功能和生命支持的标准全局变量、函数和类之外,其命名空间和全局变量都是未初始化的。通过从已知状态启动每个请求,我们可以获得一种故障隔离:如果请求 t 遇到了软件缺陷并且失败了,这个 bug 不会干扰后续请求 t+1 的运行。

当然,状态也会存在于程序堆之外的其他地方,并且有可能破坏数据库、内存缓存或者文件系统。但 PHP 与所有允许存在的可能环境分担了该弱点。如果将请求之间彼此隔离,可以减少大多数程序缺陷的成本。

第二,并发。单个 Web 请求在单个 PHP 线程上运行。最初看来这像是一种愚蠢的限制。但由于程序是在 Web 服务器的语境中执行的,就会有一个可用的自然并发:Web 请求。异步的 CURL 到本地主机(或者到另一个 Web 服务器)可提供一种 shared-nothing、copy-in/copy-out 的并行机制。实际上,与其他大部分通用语言所提供的锁共享状态方法相比,这种方法更加安全,并且对错误更具弹性。

最后,PHP 程序在请求级别运行意味着程序员工作流程是快速且高效的,并且随着应用程序的更改一直保持较快的速度。许多语言都宣称这一点,但是如果它们不为每个请求重置状态,主事件循环将和请求共享程序级状态,则它们几乎总是需要一些启动时间。

例如,对于一个典型的 Python 应用服务来说,debug 的周期大概像是「想一想」、「编辑」、「重启服务器」、「发送测试请求」。即使重启服务器仅需要几秒,但人类大脑为了保持在这个状态上,也会花费 15 到 30 秒的时间。

相比之下,PHP 的「想一想」、「编辑」、「重新加载页面」的周期会让开发者提高效率。对于一个漫长且复杂软件项目来说,这将有效地提高生产力。

因此,即使不是 “世界上最好的语言”,PHP 也是一门优秀、高效的编程语言。随着时间的推移,我们可以期待 PHP 团队能够开发出更好的版本。

最后问一句:你觉得什么是世界上最好的语言?

参考链接:

https://www.jetbrains.com/zh-cn/lp/php-25/

https://slack.engineering/taking-php-seriously-cf7a60065329


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK