阅读更多

25顶
13踩

编程语言

转载新闻 【外刊IT评论】PHP将死。何以为继?

2010-10-11 07:55 by 见习记者 找不着北 评论(50) 有16321人浏览

[英文出处]:PHP needs to die. What will replace it?

[翻译出处]:外刊IT评论

 

是到了PHP落幕的时候了。就在我这个顽固的PHP分子正要把一个现有的Ruby on Rails代码库转换成PHP时,我要说这样的话。

历史在重演

我认为PHP将亡,因为我以前见到过。大概十年之前,PHP灭掉了Perl。当然了,并不十分彻底;它还坚守在某些环境里,它还有相当可观数量的顽 固粉丝,遗留下来的应用程序也需要维护,持续几十年。但这种语言对于新一代的人,特别是web开发者,它在1999年就开始灭亡了,到2005年左右几乎 完全死了。

 

作为在那个时期出现的新的web开发者,事情显的很明白而且水到渠成:Perl已经不适应新的应用开发环境了。在Perl里,页面需要冗长的公式化 的CGI方式实现,而这些在PHP里却可以用基本的、缺省的编程方式实现。Perl语言里到处都是旧时代的特征 — 引用,不方便的数据结构,还有其他许多的小的古怪语法语义 —— 这使得web开发冗长,不稳定,不方便。无怪乎没有一个出色的web应用是用Perl写成的,而用PHP你却能做的又快又简单,尽管PHP存在着在当时就 显而易见的缺陷。

在1999年支持Perl反对PHP的争论有很多:Perl要快的多,有更多的程序库和驱动支持,CPAN是个神奇的地方,里面预先写好的代码能让 你绝大部分任务省去80%的工作量。现在看起来这些就有点可笑了,但“PHP缺乏可扩展性”却是个真正的缺点。但总之PHP赢了,因为上面所说的这些问题 并不是这种语言固有的。PHP解释器可以变得更快,程序库可以被开发出来,PERA和PECL目前已经变得相当庞大,这还不包括各种厂商希望人们去使用他 们的API而提供的非正式的程序库。

时间在推移

十年之后,我可以感觉到历史大潮正在重演。开发人员对语言的期望在前进。如果说Perl最缺乏的是PHP里令人惊讶的灵活的“关联数组”(也就是智 能哈希表),那么PHP现在缺乏的就是lambdas和方法链(method chaining)了。同时PHP往往是用在只要20行代码就能写出一个网页的地方,而如今却是如果你不使用什么MVC框架之类的东西就会被认为没有把事 情做对。公式化的代码表明了问题所在:这种语言需要一个框架来替人们做这些事情。

退回到以前,我认为那些顽固的使用Perl来做web开发的人很傻。现在,经历了十年的PHP开发,我处在相同的位置上了。我可以在一个小时里用 PHP敲出一个不错的网站,在一两天里开发出一个优秀的网站。PHP的性能众人皆知,我可以无限的扩展它。我雇佣过的每个开发人员都会它,我集成过的每个 系统里都有一个用它写出的打包的代码库。我深陷于PHP的方便性,尽管它对于我的任务并不是一个合适的语言。

转向Ruby on Rails

最明显有潜在能力继任PHP的是Ruby on Rails。Ruby是一个新的、干净的语言,具有现代的语言特征,松散、优雅的语法(很像Python)。Rails省去了我们常见的任务,省去了集成 web应用里的公式化的做法,把PHP里三、四行的习惯写法变成了first-class语言结构。这看起来极其像我需要的PHP替代品、能让开发工作再 一次提速的东西。

我每天使用Rails,修改一个喜爱这种框架和语言的有经验的Rails专家所写的Rails应用,七个月后,我却不能断言Rails是一个正确的选择了,原因很难表达。我这篇文章的目的就是想试图把原因说清楚。

我的主要的抱怨,必须要提的,就是性能。我之前就说过这种问题不应该被当作一种语言的致命缺陷,它只是语言实现中的暂时的问题。所以我不能把这当作 一个真正的问题,尽管它是我把现在的应用移植到PHP的最主要的一个原因。我可以让Rails跑的跟PHP一样快,但那需要提供2到4倍高的硬件条件。我 估计五年内将还会这样,五年后我也许不必把程序移植到PHP。但现在,它不能满足我的要求。

第二,我讨厌Active Record。Active Record是一种模式,并不是Ruby固有的,在Rails的最新版本里是可选择的,但是对它的使用和这种模式已经深入到了Rails的DNA里了。我 之前曾解释过为什么我认为这数据库上的ORM不是个好做法,所以我不会再重复解释,但有一点我需要总结的就是你省去了手工写CRUD所获得的效能要大于 ActiveRecord做傻事所损失的效能,要花时间搞清楚它是怎么工作的,顺应框架原则,防止它做这样的事情。

第三,我十分的不信任代码自动生成。工具能帮你生成模板式的代码很有用,但你的程序了却多出了成堆的毫无用处的代码来实现这些目的,这就变的不好 了。代码生成喜欢“神奇推理”,因为生成器并不确定代码某些特别有用的特征究竟是专门写出的还是语言环境固有自带的。神奇推理是危险的。

代码生成让我想到了Ruby on Rails的一个可能是最根本的问题,就是它并不是一种语言。Ruby是一种语言。但Ruby,它在解决了PHP上的一些基本问题外,并没有解决核心问 题,那就是现代web应用需要一系列的改进:像routing,model/view分类,drop-in功能性等都是很常见的特征。Rails里有,但 这跟PHP里的Zend,Symfony 和 Code Igniter之类的MVC框架一样只是绑上去的绷带。

那么缺的是什么?

能够取代PHP的语言必须十分优秀于PHP,就如同PHP优秀于Perl一样。它必须承担起web应用的主要实现任务,就像PHP那样,你的代码的 主要功能就是输出网页 —— 一个有点激进的要求,它要不适合去做其它的事情,例如当中shell脚本语言。我希望有这样一种语言,它能够承担起我开发一个MVC式的web应用时的所 有的任务,所有功能都是核心内置的,不能仅是一个程序包。

问题是,没有这样的一种语言。有一段时间服务器端JavaScript看起来将会成为下一个重要的语言,它能统一web应用前端和后端的编程语言。但是这些JavaScript上的伟大思想总是徘徊在一些跑题的行为上,比如nodejs:事件驱动模式非常的激进和强大,能让你开发出高性能的应用程序,最大化的使用新式硬件,但这是一种开发服务器端应用程序的思路,不是web页面。并且你仍然需要去写一大堆可怕的web页面。另外一些CommonJS的成果例如ejScript开始尝试着取代PHP,但仍没有解决框架问题。

仍在等待

我不得不做出结论,PHP的替代者还不存在。Ruby on Rails很好,但并不比一个PHP之上的类似的MVC框架强多少,更别提由于Ruby自身的效率不高和ActiveRecord的ORM恶搞带来的双重 打击。Python看起来并不感兴趣于作为下一代的web语言,JavaScript的服务器端解决方案还刚刚只是个开始。

我等待下一个大目标的出现。我希望能从PHP上转走,真的。我可不想成为Perl式的古董。但不管怎样,这种语言看起来还不存在。我判断错了吗?

 

来自: 外刊IT评论
25
13
评论 共 50 条 请登录后发表评论
30 楼 hellolaojiang 2010-10-11 13:11
"但有一点我需要总结的就是你省去了手工写CRUD所获得的效能要大于 ActiveRecord做傻事所损失的效能"

个人认为这句话比较经典。

还有,这篇文章有点标题党的嫌疑,内容还是可以的。
29 楼 elementstorm 2010-10-11 13:07
我只能说这个文章很中肯
28 楼 hellolaojiang 2010-10-11 13:00
elmar 写道
你爹死了,PHP都不会死!


呵呵,
笑死偶了!!!
27 楼 Leon.Wood 2010-10-11 12:59
坐等
Leon.Wood 写道
坐等围观各语言粉出来撕咬

继续咬,持续苇鹳
26 楼 elmar 2010-10-11 12:21
你爹死了,PHP都不会死!
25 楼 blueoxygen 2010-10-11 12:01
翻译的挺差的
24 楼 fyland 2010-10-11 11:31
七月十五 写道
fyland 写道
skyfen 写道
你用了python 的Django后一定会丢掉PHP的。
Django比PHP更帅。

python运行速度还是不及PHP

这个……无语……

先别无语,也别人云亦云,自己试过了才知道
23 楼 七月十五 2010-10-11 11:28
fyland 写道
skyfen 写道
你用了python 的Django后一定会丢掉PHP的。
Django比PHP更帅。

python运行速度还是不及PHP

这个……无语……
22 楼 七月十五 2010-10-11 11:23
一篇被骂得体无完肤的帖子:论PHP的倒掉
21 楼 Arden 2010-10-11 11:03
nodejs,play!
我喜欢~~~
20 楼 jiorry 2010-10-11 10:43
fyland 写道

用Zend Development Environment5.5


刚刚还在为xdebug崩溃而头痛不已。谢谢fyland
19 楼 shagoo 2010-10-11 10:41
PHP 将死?难怪我们老招不到 PHP 程序员啊。。。哈哈哈
18 楼 dancewhyw 2010-10-11 09:59
最重要的还是php低廉的开发成本和部署成本
花最少的钱能做最多的事情
何况php还能开发一个yahoo出来,何乐而不为?
php低廉的部署资源随处可得
php就像星际里的zerg,低廉且强大
17 楼 waiting 2010-10-11 09:54
引用
PERA和PECL目前已经变得相当庞大

是PEAR
16 楼 xieye 2010-10-11 09:48
所有语言中,php的最大好处就是学习曲线平滑。

这个似乎不起眼的优点正是php如此普及的原因。ror和java都要陡峭许多,c更不用说。
15 楼 fyland 2010-10-11 09:47
aninfeel 写道
与标题观点一致,可惜内容是为了捧ruby,ruby饭挺激进的嘛。顺便提一下,在效率上,根据网上的测试报告是python>ruby>php。

比的是框架吧?
PHP框架在运行速度上实在没什么优势,特别是官方的ZendFramework框架,那叫一个慢啊!
14 楼 aninfeel 2010-10-11 09:31
与标题观点一致,可惜内容是为了捧ruby,ruby饭挺激进的嘛。顺便提一下,在效率上,根据网上的测试报告是python>ruby>php。
13 楼 zhangchuande 2010-10-11 09:13
playframework是最简单、直接、高效的,最适合代替其他web开发框架。
12 楼 fyland 2010-10-11 09:09
skyfen 写道
你用了python 的Django后一定会丢掉PHP的。
Django比PHP更帅。

python运行速度还是不及PHP
11 楼 fyland 2010-10-11 09:08
jiorry 写道
标题党,害死人,呵呵。还是根据自己的实际情况出发,来选择。
ROR是一个很不错的框架,我目前的项目也是借鉴了ROR的一些优点,很简单很轻盈的组织了我的代码。

目前还是喜欢PHP,只是调试起来非常不得劲。速度奇慢,还老是崩溃。我使用的netbeans+xdebug

其他IDE没有试,好的IDE价格不菲啊。

用Zend Development Environment5.5

慢和崩溃应该在netbeans和xdebug上找找原因,netbeans是用Java写的,一打开几百M内存就没有了,xdebug是个插件,和eclipse上的插件一样,容易崩溃!

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Spring Aop揭秘(一)

    Spring Aop揭秘(一) 前言:在日常开发中,spring aop用得很多,可以用作日志,权限,事物的横切;在此小弟的一番理解,如果有不对的地方,还 望各路大神多指教 1.spring aop 术语 连接点(Joinpoint):执行的特定的位置(可理解为方法执行) 切入点(Pointcut) : 连接点的一个集合(一般用expression表示) 通知(Advice)...

  • AOP重要吗?

    AOP重要吗?iteer 于google_ad_client = "pub-8747061902493640";google_ad_width = 336;google_ad_height = 280;google_ad_format = "336x280_as";google_ad_channel ="9210384877";go

  • spring aop

    为什么80%的码农都做不了架构师?>>> ...

  • 图解JAVA中Spring Aop作用

    这篇文章主要介绍了Java的Spring框架下的AOP的作用,需要的朋友可以参考 假如没有aop,在做日志处理的时候,我们会在每个方法中添加日志处理,比如 但大多数的日子处理代码是相同的,为了实现代码复用,我们可能把日志处理抽离成一个新的方法。但是这样我们仍然必须手动插入这些方法。 但这样两个方法就是强耦合的,假如此时我们不需要这个功能了,或者想换成其他功能,那么就必

  • 如何正确使用AOP

    AOP也发展了不久了,虽然在工作上也一直在用,不过毕竟没有深入了解过,停留在概念上的理解,和使用的阶段上。这篇主要讲讲,AOP如何正确的使用它。 首先需要知道,目前毕竟流行的AOP框架,上篇文章也介绍了AOP实现的原理,对Spring这个大家庭来说,它的AOP远远没有这么简单。目前使用毕竟多的 几种方式如下: Jboss Aop:基本上没有用过,所以没有发言权,Jboos毕竟

  • spring基础知识 (17):AOP基础

    为什么要使用AOP 每个技术的诞生都是为了问题的,而AOP是为了解决什么问题的呢? 发现问题 假设我们要实现一个计算器功能,要求 - 能够实现基本的加减乘除计算功能 - 要求实现日志功能 实现上面的需求比较直接简单的方法是:在每个计算功能核心代码中都写入日志输出处理。 写一个计算器接口 package com.spring.proxy; public interface ...

  • AspectJ 应用 *.aj 文件

    spring roo 生成的代码默认使用*.aj文件存放. 仔细看了看这个aj文件还是tignyouyi

  • 什么是Spring的AOP功能

    什么是Spring的AOP功能

  • 程序级的AOP到底好不好?

    很多年前模拟过Spring的AOP机制,简单的实现其实不难,但真正要保证切入代码符合预期的设计,不会引起负面影响,特别是要保证原来逻辑的稳定性,即AOP的强壮性。个人感觉还是很难,如果横切的代码过多,就更难管理了。在后面的实际应用中,虽然知道这种AOP架构,但一般除了预设的横切代码,都没有采用这种架构,更多的是将这种架构设计的需求后移到数据库或者日志层面。在单一应用模式下,AOP至少还可以用,而在

  • Spring核心——AOP

      Spring两大核心组成相信大家一定都清楚——IOC(控制反转)、AOP(切面编程)   AOP通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的衍生,它是软件开发中的一大热点,当然也是Spring框架中的一个重要内容,是函数式编程的一种衍生泛型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的复用性,同时提高开发效率。 比较直观的图示: 在开始讲AOP的作用之前,需要先明白几个基本概念: 横切关注点:跨越应用程序多个模块的

  • AOP——SpringAOP(最重要)

    http://www.cnblogs.com/solverpeng/p/5628100.html 一、AOP: 是对OOP编程方式的一种补充。翻译过来为“面向切面编程”。 可以理解为一个拦截器框架,但是这个拦截器会非常武断,如果它拦截一个类,那么它就会拦截这个类中的所有方法。如对一个目标列的代理,增强了目标类的所有方法。 两个解决办法: 1.不优雅的做法: 在添加增强时,根据方法名

  • AOP重要吗 (转)

    AOP重要吗 (转)[@more@]AOP(ASPect-Oriented Programming)这个领域还很新,不过我乐观地预计,将来很多大项目会采纳AOP方法。在我看来,AOP是非常重要的方向,可能会是软件开发方法发展道路...

  • Spring AOP详细介绍

    什么是AOP AOP(Aspect-OrientedProgramming,面向切面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,...

  • AOP里面几个重要名词概述的概念

    Aspect(切面):切入点+通知。 joinPoint(连接点):目标对象,所有可以增强的方法。 Advice(通知/增强):增强代码。 PointCut(切入点):目标对象,将要和已经增强的方法。 Introduction(引入):声明某个方法或字段。 Target(目标对象):被代理的对象 AOP 代理(AOp Proxy) AOP框架创建的对象用来实现切面。 Weaving(...

  • 深入理解Spring的两大特征(IOC和AOP)

    众所周知,Spring的核心特性就是IOC和AOP,IOC(Inversion of Control),即“控制反转”;AOP(Aspect-OrientedProgramming),即“面向切面编程”。参考书《Spring In Action》,下面分享一下我对这两大特性的个人理解。IOC:IOC,另外一种说法叫DI(Dependency Injection),即依赖注入。它并不是一种技术实现,而

  • 【Spring】(5)AOP面向切面编程:谈谈AOP的概念和必要性

    两个月前跟着b站动力节点王鹤老师的Spring框架教程视频学习完了Spring框架,在学习过程中我将视频中涉及的代码都一行一行手敲了一遍,并且把Spring入门相关的资料整理了一下,在这里记录一下我在Spring框架学习过程中的笔记和一些心得,希望能帮助到想要通过文字教程入门Spring这一框架的小伙伴哦! 视频地址:2020最新Spring框架教程【IDEA版】-Spring框架从入门到精通 文章目录AOP 面向切面编程1. 不使用 AOP 的开发方式2. 回顾动态代理3. AOP 简介4. AOP .

  • Spring AOP 是什么?

    文章目录什么是面向切面编程使用 AOP 简化代码AOP 如何大规模运作横切关注点什么是 Spring AOP?总结 虽然 AOP 不经常被讨论,但是它在 Spring 中有着广泛的应用。对你来说,也许是时候去熟悉 AOP 并让它为你所用了。 你了解 Spring AOP 吗?你有在你目前的 Spring Boot 项目中使用它吗?如果没有,这篇文章就是为你准备的! 最近,我看到很多项目都在使用 ...

  • AOP编程

    1. AOP简介 AOP: Aspect Oriented Programming 面向切面编程。   面向切面编程(也叫面向方面):Aspect Oriented Programming(AOP),是目前软件开发中的一个热点。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。   AOP是OOP的延续,是(Aspe

Global site tag (gtag.js) - Google Analytics