PHP7性能提升之后的思考

导读] 时下不少人拿PHP7的高性能与HHVM来做比较,那么问题来了:随着PHP7性能的提升,我们能预测出未来PHP这门语言会用PHP写出来么?最经典的实例就是PyPy,这是一个用RPython(Python的一个子集)写出来的Python解释器和实时编译器。

本文由PHP100中文网编译,转载请看文末的转载要求,谢谢合作! 时下不少人拿PHP7的高性能与HHVM来做比较,那么问题来了:随着PHP7性能的提升,我们能预测出未来PHP这门语言会用PHP写出来么?

Mattsah的观点:

对解释型语言来说,有用语言本身来重写这门语言的其他实例么?我认为即使有这样的实例,在这个环境下,这门语言的某些部分必定是不可用的。 Otterfan: 最经典的实例就是PyPy,这是一个用RPython(Python的一个子集)写出来的Python解释器和实时编译器。 Mattsah: 虽然对Python不是很熟悉,但我不得不考虑下(如有误欢迎更正),这样一来它的动态性能或者说某些特性是不是会受到限制? Otterfan: 实际上并没有。它基本上能与Python 2.7.8和Python 3.2.5兼容,甚至它有时候比规范的Python(CPython)运行的还要快。 实际上的过程是这样的:Rpython通过PyPy的RPython工具链被翻译成C版本,然后这个C版本被编译为二进制机器码,接着用户层的Python就会运行在这个二进制机器码上。你当然也可以在规范的CPython解释器之上来运行PyPy解释器,不过这样子PyPy会运行的很慢。 PyPy同样也是一个实时编译器,这才是PyPy通常能产生出甚至比CPython还要快的代码的真正原因,代价只是启动的时候稍微有点延迟。PHP则不会有像Python Web开发的这个缺点,因为Python Web应用是一次性就全部启动并开始运行,而不是像PHP一样响应每个请求才开始逐步启动。

Chippiewall的观点:

你不可能在没有一个解释器来运行的前提下写出一个解释型语言的解释器。 Ircmaxell的评论: 这个观点严格意义上是不对的。 另外更正一点,PHP并不是一门解释型语言,而是一门编译型语言。 明白了这一点,就很不一样了。是的,编译器并不会产生出原生的机器码,但还是存在这么一个编译器的。并且虚拟机使用的每个单独的操作在理论上都会被产生的 机器码所代替。看看Zend’s “JIT”编译器吧,它根本就不是一个实时编译器,而是一个AOT编译器。很准确地说,它能产生出原生的机器码而不是虚拟机代码(但有相同的语义)。 所以如果拿一个用PHP(Recki-CT或PHPPHP)写的编译器,我们是能够用它来编译自身的。这就意味着,只要我们引导它一次,我们就不再需要“编译器”(虚拟机)了。 所以,Chippiewall的观点是不对的。 原文:http://www.reddit.com/r/PHP/comments/2xlayg/ask_php_with_improved_speed_of... 译文:http://www.php100.com/html/dujia/2015/0303/8694.html (翻译:PHP100_Alex)

原文发布于微信公众号 - php(phpdaily)

原文发表时间:2016-04-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java学习网

写让别人能读懂的代码

写让别人能读懂的代码 随着软件行业的不断发展,历史遗留的程序越来越多,代码的维护成本越来越大,甚至大于开发成本。而新功能的开发又常常依赖于旧代码,阅读旧代码所花...

2285
来自专栏程序员与猫

async/await 的基本实现和 .NET Core 2.1 中相关性能提升

862
来自专栏進无尽的文章

工具篇- FBMemoryProfiler 内存泄漏的自动化排查框架

应用开发到一定规模后,各种内存问题频频出现,还很难定位。你是否也体会过这种痛苦?随着我们工程的体量增长,代码结构变得越来越复杂。这时候很多内存问题就变得越来越难...

742
来自专栏ml

C++ 与设计模式学习(其一)

       记得曾经一年前,听到同学再说设计模式,当时觉得不怎么重要,所以就没有去系统的学习,这一放,就是一年,直到前段时间,面试了一个阿里巴巴的职位,要我谈...

3607
来自专栏一个会写诗的程序员的博客

《Kotlin极简教程》第一章 Kotlin简介100% interoperable with Java™

JetBrains开源其Kotlin语言 基于JVM的新编程语言。 Kotlin,类似 Xtend 一样,旨在提供一种更好的 Java 而非重建整个新平台。这...

822
来自专栏owent

libcopp更新 (merge boost 1.59 context)

这个框架的上下文部分是使用了boost.context,但是从开始写libcopp到现在,boost.context也更新了几个版本。而之前几次merge基本都...

602
来自专栏程序你好

C# API中的模型和它们的接口设计

712
来自专栏Java架构

必看!多年架构师告诉你为什么要学JVM?

1633
来自专栏跨界架构师

如何一步一步用DDD设计一个电商网站(十)—— 一个完整的购物车

之前的文章中已经涉及到了购买商品加入购物车,购物车内购物项的金额计算等功能。本篇准备把剩下的购物车的基本概念一次处理完。

823
来自专栏iOS技术

何为代码质量?——用脑子写代码引言正文总结

为什么项目维护困难、BUG 反复?实际上很多时候就是代码质量的问题。代码架构就像是建筑的钢筋结构,代码细节就像是建筑的内部装修,建筑的抗震等级、简装或豪装完全取...

502

扫码关注云+社区