其实,我不确定Quercus是否可以被认定为一门JVM语言;其次Quercus这个东东分开源版与商业版,开源版只能解释执行、而商业版能编译成Java字节码。

但我知道国内,阿里巴巴很早就在使用它,当然,他主要是把它作为一个前端页面的模版引擎,提供给用户自定义商铺样式时数据调用。

这也是一种典型的使用场景。

为什么PHP(包括流行的很多语言)不被接受为一种企业级的开发语言,个人以为正是我们用的最顺手的“动态数据类型”,企业级的应用需要数据有很强的可靠性、一致性,Java这样的强类型、编译性语言,能从开发测试阶段提供尽可能高的错误检出率,而很多人在用PHP开发的阶段就屏蔽/不关注系统错误提示,只要一个功能能走通就ok。

而Java发展这么多年,已经有了足够甚至说太多的各种框架、库,可用于企业级开发,在JVM环境使用PHP,可以提高业务前端的开发效率,而底层使用Java的这些框架、库,确保数据的一致性、可靠性,并且可以使用Java很多技术和特性。

这个东东,我关注了很久,但无奈小团队,没有环境来完成相关实践的检验。

以下是翻译的其官方站点上的介绍,网上有很多翻译的,但可能没有遵循原文的逻辑:

Quercus是Caucho公司纯采用Java开发的一个PHP5引擎,基于开源授权协议GPL发布。Quercus自带很多个PHP模块和扩展如PDF、PDO、MySQL和JSON。Quercus使得可以将Java服务与PHP程序紧密集成,不费吹灰之力在PHP脚本中调用Java服务如JMS、Grails。

通过Quercus,PHP应用程序自动具备了使用了Java应用服务器的优秀特性,如连接池、集群化会话(clustered sessions)等。

Quercus实现了PHP 5语言标准,并且PHP扩展的开发不断完成,包括APC, iconv, GD, gettext, JSON, MySQL, Oracle, PDF, and Postgres。很多流行的PHP程序在Quercus中可以和在PHP解释器运行的只好不差。这是一份不断增加的PHP软件清单:DokuWiki, Drupal, Gallery2, Joomla, Mambo, Mantis, MediaWiki, Phorum, phpBB, phpMyAdmin, PHP-Nuke, Wordpress and XOOPS。

Quercus代表在Web应用与Web服务领域,Java与PHP相互整合的一种新的混合式思路。PHP应用开发过程中,可以选择使用Java的库及技术如JMS, EJB, SOA 框架, Hibernate, 与 Spring。这可能带来一些革新性的可能性,因为:

1) PHP代码被解释/编译成Java;

2)Quercus和它的库用Java编写;

这种架构使得PHP应用程序与Java库直接进行“对话”,因为都在同一个程序层(译注:这里是针对php的一个扩展php bridge)。为促进这种新的Java/PHP架构,Quercus提供了API及接口将Java库暴露给PHP使用。

官方提供了Quercus .war文件可以在Java应用服务器上运行,这样,它其实可以在Resin之外运行(译注:Caucho公司主要是提供Resin服务器的),该文件包含Quercus解释器与PHP库。

这里是一些参考资源:

比较偏门的JVM语言Quercus - PHP on JVM的更多相关文章

  1. 对QT的理解——能在公司里不做Java,不做很偏门的产品,不使用偏门的语言,还有钱挣,要有感恩的心

    我的理解: QT做应用软件可以很强大,界面足够漂亮(最有意思的是QSS,让我刮目相看),应该是足够了.同时QT也提供了源码,不过超级复杂,难以理解,所以还是无法深入底层.另外它提供了一个额外的好处,就 ...

  2. 谈谈html中一些比较"偏门"的知识(map&area;iframe;label)

    说明:这里所说的"偏门"只是相对于本人而言,记录在此,加深印象.也希望有需要的朋友能获得些许收获! 1.空元素(void):没有内容的元素. 常见的有:<br>,< ...

  3. [转载] 详述三种现代JVM语言--Groovy,Scala和Clojure

    转载自http://www.tuicool.com/articles/jYzuAv和http://www.importnew.com/1537.html 在我与Martin Fowler曾经合作呈现的 ...

  4. element-项目用到偏门方法~

    开发项目的时候,组件库的使用有时会为我们节省开发时间,提高开发效率,但组件库样式有时与我们的设计图出入很大,还有的方法也很偏门,主要官方文档有时候对于一些方法和属性介绍的也比较少,以下是我在工作中总结 ...

  5. 谈谈CSS中一些比较"偏门"的小知识

    前面我写了:谈谈html中一些比较"偏门"的知识,现在这篇(主要)想谈谈个人所见的CSS一些小知识点,加深印象:同时也希望有需要的人能有收获! 1.常见的浏览器内核: 以IE为代表 ...

  6. JVM笔记 -- Java跨平台和JVM跨语言

    学习JVM的重要性 从上层应用程序到底层操作系统,到底有哪些东西? 平时开发的应用程序主要基于各种框架,譬如Spring,SpringMVC,Mybatis,而各种框架又是基于Java API来实现的 ...

  7. 04.从0实现一个JVM语言系列之语义分析器-Semantic

    从0实现JVM语言之语义分析-Semantic 源码github, 如果这个系列文章对您有帮助, 希望获得您的一个star 本节相关语义分析package地址 致亲爱的读者: 个人的文字组织和写文章的 ...

  8. 03.从0实现一个JVM语言系列之语法分析器-Parser-03月01日更新

    从0实现JVM语言之语法分析器-Parser 相较于之前有较大更新, 老朋友们可以复盘或者针对bug留言, 我会看到之后答复您! 源码github仓库, 如果这个系列文章对你有帮助, 希望获得你的一个 ...

  9. 02.从0实现一个JVM语言之词法分析器-Lexer-03月02日更新

    从0实现JVM语言之词法分析器-Lexer 本次有较大幅度更新, 老读者如果对前面的一些bug, 错误有疑问可以复盘或者留言. 源码github仓库, 如果这个系列文章对你有帮助, 希望获得你的一个s ...

随机推荐

  1. [GraphQL] Serve a GraphQL Schema as Middleware in Express

    If we have a GraphQL Schema expressed in terms of JavaScript, then we have a convenient package avai ...

  2. HTML5本地存储之localStorage、sessionStorage

    1.概述 localStorage和sessionStorage统称为Web Storage,它使得网页可以在浏览器端储存数据. sessionStorage保存的数据用于浏览器的一次会话,当会话结束 ...

  3. C#读取物理网卡信息及其对应的IP地址

    using Microsoft.Win32; using System; using System.Collections; using System.Collections.Generic; usi ...

  4. joomla allvideo 去掉embed share

    文件位置plugins/content/jw_allvideos/jw_allvideos/includes/sources.php找到以下代码 jwplayer('avID_{SOURCEID}') ...

  5. 30分钟入门Java8之默认方法和静态接口方法

    30分钟入门Java8之默认方法和静态接口方法 前言 上一篇文章30分钟入门Java8之lambda表达式,我们学习了lambda表达式.现在继续Java8新语言特性的学习,今天,我们要学习的是默认方 ...

  6. Routine Problem(数学)

     Routine Problem time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  7. 安卓序列化漏洞 —— CVE-2015-3525

    在2014年,Jann Horn发现一个安卓的提权漏洞,该漏洞允许恶意应用从普通应用权限提权到system用户执行命令,漏洞信息与POC见(1].漏洞的成因源于在安卓系统(<5.0)中,java ...

  8. Java Job

    1.在META-INF\MANIFEST.MF中指定Main-Class Main-Class: test.HelloWorld 命令:java -jar fileName.jar 2.不指定Main ...

  9. AssetBundle系列——场景资源之解包(二)

    本篇接着上一篇继续和大家分享场景资源这一主题,主要包括两个方面: (1)加载场景 场景异步加载的代码比较简单,如下所示: private IEnumerator LoadLevelCoroutine( ...

  10. 编写高质量JS代码的68个有效方法(五)

    No.21.使用apply方法通过不同数量的参数调用函数 Tips: 使用apply方法自定一个可计算的参数数组来调用可变参数的函数 使用apply方法的第一个参数给可变参数的方法提供一个接收者 // ...