`
hilliate
  • 浏览: 136614 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Java上的PHP,两者共赢?

    博客分类:
  • Java
阅读更多
Jerry Cuomo(IBM的WebSphere CTO)和Scott Ferguson(Resin Java Application Server及最近的Quercus PHP引擎)与我们一起讨论了PHP如何融入Java的世界。目前IBM在Java/PHP混合系统方面最直接的投入是Zero项目,一个开发中的新的Web框架,支持Groovy和PHP脚本语言。当被问到为何IBM选择在Project Zero项目里支持PHP,Jerry有些话要说:

Jerry:三个词——敏捷性(Agility)、内容(Content)、训练(Educated)。是的,PHP是我们的ACE。
敏捷性(Agility)。J2EE应用是为了“永久的价值”而优化的……也就是说,写出来的程序是打算要一直运行下去。PHP脚本是为了“在周五之前投入运行”而优化的。也就是说,PHP让你快速简洁地编写代码,这对于许多应景而生的应用是合适的。
内容(Content)。我们叫它“剪贴式编程”。网上有不计其数的PHP资源。你很少需要从头开始编写什么东西。搜索,剪切,粘贴,你就可以收工了……(这又涉及到敏捷性)。
训练(Educated)。PHP很容易自学。编写PHP脚本对很多人来说都非常容易,即使是没有受过正规计算机科学教育的人。例如,像内存管理和线程这种复杂的东西,在你编写PHP脚本的时候绝不会成为注意力的中心。而且就如我在上一点所说,大多数时候你都是在修改利用别人的代码。
Caucho采取的途径与IBM不同。Project Zero看起来好像是一个Java/Groovy框架,只不过刚好也支持PHP语言。而Quercus,是能够与mod_php竞争的完整的PHP语言实现。它是一个令人印象深刻的实现。事实上整个PHP解释器都是用Java编写的,因此不仅能够提供原生的Java/PHP集成,还有效利用了JVM的强大能力来达到极高的效率和安全性。对于从技术的角度看,Java如何令Quercus脱颖而出,Scott如是说:

Scott:Java平台的线程、缓存和池技术是Quercus成功的关键。大多数Quercus库的实现都只是对相应Java功能的包装。例如,数据库访问就是对JDBC的包装。因为Java平台已经提供了坚实的基础,Quercus不费吹灰之力就得到了那些强大的能力。

而且反射、内存管理、JDK 1.5 Annotation和动态编译/类装载,这些都是Quercus所需的。虽然我们不能像C PHP一样使用智能指针来编程,我们却可以获得干净的OO设计,并依赖Java去处理内存的问题。

当然还有运行分析(profiling)。Quercus自动从JVM的CPU和堆运行分析中得益。因为编译后的Quercus函数实际上就是Java方法,我们可以准确地从运行分析中看出哪一块代码运行得太慢或者消耗了太多内存。
快速、轻量并且广泛接受的Web层框架一直是Java平台难以完成的目标,我们向Jerry和Scott两人都提出了同一个问题:他们投入于PHP运行时的领域,是否由于感觉到Java社区已经放弃了使用基于Java的框架来完成高效Web层开发,转而在这一层使用动态脚本语言。他们都认为我的提问夸大了弃用Java的趋势,他们如此描述使用Java和使用PHP之间的平衡:

Jerry:“转移”和“放弃”的说法有点过了。我觉得应该说我们正“把Java提升到更高级的行政职位上”。Java自己赢得了这样的位置。这并不是一个非黑即白的问题。除了Java目前的角色,我相信它可以成为这些动态脚本语言的“系统编程”环境。就像Java与C/C++的关系。现在Java(以及JVM)需要成长(和退缩)来支持各种DSL。例如,当今的Java是为长期运行的应用和进程而优化的。DSL则是短命的,经常来来去去。
Scott:我们不建议完全抛弃Java。Web应用框架底下的基础设施如Spring、JPA/Hibernate,工具如Coherence,测试框架如JUnit,Java在这些方面是无与伦比的,远胜过脚本世界中任何东西。除此之外,应用级缓存、服务、事件和线程这些不为人所见的东西用Java会好得多。如果你看看像Mediawiki(维基百科所用的程序)这样的PHP应用,可以明显地看出底层代码如果用Java编写会好很多。

Quercus/PHP的成功之处是在它的表现层,脚本可以满足许多特别要求灵活性的情况。Java表现框架如JSF、JSP/JSTL、Struts、Velocity,没有一个能达到完整的脚本语言的灵活性和库能力。许多框架,如JSP/JSTL,都是部分的语言实现。为什么不干脆用一个完整的脚本语言,再加上一个庞大的库呢?已经有巨大数量的网站证明了这种脚本语言的成功。

因此我们认为结合Java(用在后台、模型和底层服务),把PHP/Quercus用于表现层以及任何需要脚本的地方(如取代BPEL),会是最佳的选择。
我们还问到如何比较PHP和其他语言,如Ruby和Groovy。我们请Scott告诉我们为什么他写了一个PHP而不是Ruby解释器?

Scott:我们希望选择一门已经在Web开发社区里证明了自身的语言,而PHP是占统治地位的语言。Ruby目前仍然是一门实验性的语言。Ruby语言虽然有很多令人喜爱之处,但也有一些问题。Ruby使用了一些高级语言结构如闭包和Continuation,从这个方面来说很像Scheme。我个人很喜欢这些特性,但我的经历告诉我很多程序员都会被这些东西吓倒,因此会损害接受程度。PHP就像BASIC,任何人都可以学会。我会捧Ruby的场,我希望它成功,但当我们必须选择如何分配有限的时间,我们不得不先让Ruby等等看。
我们问Jerry是否认为PHP会继续成长,特别是在面临Ruby on Rails的竞争之下。我们还询问了PHP5中引入的面向对象是否让PHP更适合Project Zero这样的框架。最后,由于Project Zero同时支持Groovy和PHP,我们问Jerry一个新接触Project Zero并且不懂Groovy也不懂PHP的开发者,应该选择哪种语言:

Jerry:PHP是和Ruby或者Groovy不一样的动态脚本语言……这话大概没错。不过,要想让世界上最受欢迎的应用(想想看Wordpress、PHPBB……)都用这些语言编写,它们还有很长的路要走。只要PHP应用还在发挥作用,就会有新的开发者学习PHP。考虑到大学生中流行的大多数工具都是用PHP写的,将会继续出现新一代的PHP程序员。

虽然如此,PHP是否会继续成长还不清楚……它已经很庞大了,而且还存在很多竞争者,它们的语法更加清晰更加简洁。到时候再看。

不过,(PHP语言有或没有OO特性)这并不是PHP被包括进Project Zero的原因。包括它是因为ACE。……如果你是一名Java程序员,应该从Groovy开始。Java程序员已经期盼了很久Project Zero所提供的那种敏捷特征。我们希望这对你“百利而无一害”。你既可以接着用Java,又可以做动态脚本编程。然而,如果你没有深厚的Java背景,或者你打算利用网上已经存在的资源——PHP是创造敏捷应用的好手段。
分享到:
评论

相关推荐

    基于MATLAB的6自由度Stewart并联机构位置正反解及GUI界面设计

    本 MATLAB 程序对 6 自由度 Stewart 平台进行了仿真,成功求解了其正解和反解,并且开发了可视化的 GUI 界面。该程序可作为研究 Stewart 平台工作空间求解问题的参考。在正解的求解过程中,参考了文献 [Lee, Tae-Young, and Jae-Kyung Shim. "Forward kinematics of the general 6–6 Stewart platform using algebraic elimination." Mechanism and Machine Theory 36.9 (2001): 1073-1085.] 中的方法。需要说明的是,本程序来源于 Github。

    基于FPGA的Verilog HDL实现16×16点阵字符显示

    在电子设计自动化(EDA)领域,Verilog HDL 是一种重要的硬件描述语言,广泛应用于数字系统的设计,尤其是在嵌入式系统、FPGA 设计以及数字电路教学中。本文将探讨如何利用 Verilog HDL 实现一个 16×16 点阵字符显示功能。16×16 点阵显示器由 16 行和 16 列的像素组成,共需 256 个二进制位来控制每个像素的亮灭,常用于简单字符或图形显示。 要实现这一功能,首先需要掌握基本的逻辑门(如与门、或门、非门、与非门、或非门等)和组合逻辑电路,以及寄存器和计数器等时序逻辑电路。设计的核心是构建一个模块,该模块接收字符输入(如 ASCII 码),将其转换为 16×16 的二进制位流,进而驱动点阵的 LED 灯。具体而言,该模块包含以下部分:一是输入接口,通常为 8 位的 ASCII 码输入,用于指定要显示的字符;二是内部存储,用于存储字符对应的 16×16 点阵数据,可采用寄存器或分布式 RAM 实现;三是行列驱动逻辑,将点阵数据转换为驱动 LED 矩阵的信号,包含 16 个行输出线和 16 个列使能信号,按特定顺序选通点亮对应 LED;四是时序控制,通过计数器逐行扫描,按顺序控制每行点亮;五是复用逻辑(可选),若点阵支持多颜色或亮度等级,则需额外逻辑控制像素状态。 设计过程中,需用 Verilog 代码描述上述逻辑,并借助仿真工具验证功能,确保能正确将输入字符转换为点阵显示。之后将设计综合到目标 FPGA 架构,通过配置 FPGA 实现硬件功能。实际项目中,“led_lattice”文件可能包含 Verilog 源代码、测试平台文件、配置文件及仿真结果。其中,测试平台用于模拟输入、检查输出,验证设计正确性。掌握 Verilog HDL 实现 16×16 点阵字符显示,涉及硬件描述语言基础、数字逻辑设计、字符编码和 FPGA 编程等多方面知识,是学习

    cmd脚本-bat批处理-args.zip

    cmd脚本-bat批处理-args.zip

    电力电子领域中有源钳位型三电平ANPC逆变器SVPWM闭环仿真的研究与应用

    内容概要:本文详细介绍了有源钳位型三电平(ANPC)逆变器采用羊角波空间矢量脉宽调制(SVPWM)进行闭环仿真的研究。文中首先阐述了ANPC逆变器的基本拓扑结构及其优势,特别是在解决传统NPC拓扑电压应力不均的问题上表现突出。接着,文章深入探讨了羊角波SVPWM的具体实现方法,包括扇区划分、Clarke变换的应用以及中点电位平衡的控制策略。此外,还讨论了电压电流双闭环控制的设计,特别是PI控制器和准PR控制器的参数设置。最后,通过对仿真结果的分析,验证了系统的稳定性和性能指标,如电压和电流的总谐波失真(THD)、中点电位波动等,均符合并网要求。 适用人群:从事电力电子、电机驱动、新能源发电等领域研究和技术开发的专业人士,尤其是对逆变器技术和调制方法感兴趣的工程师和研究人员。 使用场景及目标:适用于需要深入了解ANPC逆变器及其调制方法的研究人员和技术人员。主要目标是掌握羊角波SVPWM的实现细节,理解中点电位平衡和双闭环控制的作用,从而应用于实际工程设计和优化。 其他说明:文章提供了详细的MATLAB代码片段,帮助读者更好地理解和实现相关算法。同时,强调了一些关键的技术细节,如边界条件处理、电流极性检测、死区时间补偿等,确保仿真结果的准确性。

    cmd-bat-批处理-脚本-5.WannaCry-Security-Reinforcement.zip

    cmd-bat-批处理-脚本-5.WannaCry-Security-Reinforcement.zip

    cmd脚本-bat批处理-7.system-env-variable.zip

    cmd脚本-bat批处理-7.system-env-variable.zip

    基于规则算法的功率跟随控制:燃料电池汽车能量管理策略及其MATLAB数据分析(NEDCUDDS工况)

    内容概要:本文探讨了基于规则算法的功率跟随控制在燃料电池汽车能量管理中的应用,特别是在NEDC和UDDS工况下的表现。文章首先介绍了功率跟随控制的基本原理和技术背景,随后详细解释了如何通过规则算法优化车辆的能量管理策略,确保在不同工况下实现高效的能量利用。文中还展示了具体的MATLAB数据分析方法和示例代码,帮助读者理解如何通过实时数据监测和处理来制定最优的能量管理策略。 适合人群:从事新能源汽车研发的技术人员、研究人员及高校相关专业的学生。 使用场景及目标:适用于希望深入了解燃料电池汽车能量管理策略的研究人员和技术开发者,旨在提高能源利用效率、降低排放并改善驾驶体验。 其他说明:文章不仅提供了理论分析,还包括了实用的MATLAB代码示例,便于读者进行实际操作和验证。

    ARMA模型完整程序代码的编写与实现

    本代码完整实现了ARMA模型的识别、参数估计与预测功能。其编写语言简洁明了,便于初学者理解和学习。

    cmd-bat-批处理-脚本-callArgs.zip

    cmd-bat-批处理-脚本-callArgs.zip

    永磁同步电机双矢量MPC模型预测电流控制技术研究及仿真 仿真技术 永磁同步电机双矢量MPC模型预测电流控制及其仿真研究

    内容概要:本文详细介绍了永磁同步电机(PMSM)双矢量模型预测电流控制(MPC)技术的研究进展及其仿真结果。首先指出了传统占空比模型预测电流控制存在的局限性,即电流波动较大,影响电机运行效率和稳定性。接着阐述了双矢量MPC方法的优势,该方法允许在每个采样周期中进行两次电压矢量选择,不仅可以选择任意方向和幅值的电压矢量,还在价值函数中考虑了作用时间的影响,使电压矢量选择更为精确,有效减小了电流波动。最后展示了仿真实验结果,表明双矢量MPC方法显著提升了电机的静动态性能,减少了电流波动,提高了运行效率和稳定性。文中还提到仿真技术的高度定制化,能够直接应用于实际电机控制器,支持实验验证。 适合人群:从事电机控制技术研发的专业人士,尤其是对永磁同步电机和模型预测控制感兴趣的科研人员和技术开发者。 使用场景及目标:适用于需要深入了解和掌握永磁同步电机先进控制技术的研究机构和企业。目标是提升电机控制系统的设计水平,优化现有控制策略,降低开发成本和缩短研发周期。 其他说明:本文不仅理论分析详尽,还提供了具体的仿真案例,有助于读者全面理解和应用双矢量MPC技术。

    并联型有源电力滤波器APF的Simulink仿真与Matlab建模——基于瞬时无功功率理论的ip-iq谐波检测算法应用

    内容概要:本文详细介绍了如何使用基于瞬时无功功率理论的ip-iq谐波检测算法,在Matlab的Simulink环境中对三相三线制并联型有源电力滤波器(APF)控制系统进行建模与仿真。文章从绪论开始,逐步讲解了APF的工作原理及其重要性,重点阐述了ip-iq谐波检测算法的作用机制,并展示了具体的模型构建步骤,包括ip-iq谐波检测算法模块、APF控制系统模块和APF输出模块的设计。最后,通过对仿真结果的验证分析,证明了该算法的有效性和APF在抑制电网谐波方面的卓越表现。 适合人群:从事电力系统研究、电力电子技术开发的专业人士,尤其是对有源电力滤波器和MATLAB/Simulink仿真感兴趣的工程师和技术人员。 使用场景及目标:适用于希望深入了解并联型有源电力滤波器(APF)工作原理及其仿真方法的研究人员和工程师。目标是掌握基于瞬时无功功率理论的ip-iq谐波检测算法的应用,提升电力系统的电能质量和稳定性。 其他说明:文中附带了一个完整的Simulink模型和详细的12页说明文件,帮助读者更好地理解和复现仿真过程。

    cmd-bat-批处理-脚本-jscript-ppt2pdf.zip

    cmd-bat-批处理-脚本-jscript-ppt2pdf.zip

    cmd脚本-bat批处理-activate.zip

    cmd脚本-bat批处理-activate.zip

    cmd-bat-批处理-脚本-typeList.zip

    cmd-bat-批处理-脚本-typeList.zip

    基于COMSOL的涂层剥离瞬态仿真与多体动力学接触粘附罚函数研究

    内容概要:本文详细探讨了利用COMSOL软件对涂层剥离和脱落进行瞬态仿真,以及拉开法试验仿真,旨在预测和评估涂层在不同环境条件下的表现。同时,研究还涉及多体动力学中的接触和粘附问题,特别是罚函数的应用,以更精确地模拟和分析复杂系统的多体动力学行为。通过这些方法和技术,研究人员能够更好地理解材料在实际使用中的性能变化,从而优化设计方案。 适合人群:从事材料科学、工程领域的科研人员和工程师,尤其是那些关注涂层材料性能和多体动力学行为的研究者。 使用场景及目标:① 预测和评估涂层在不同环境条件下的表现,优化涂层设计方案;② 获取材料间的粘附力、剥离强度等参数,改进材料性能;③ 分析复杂系统中的多体动力学行为,为产品设计和优化提供支持。 其他说明:本文不仅介绍了具体的仿真技术和方法,还强调了这些技术在实际工程和科学研究中的应用价值,帮助读者深入理解相关理论和实践操作。

    cmd-bat-批处理-脚本-字符串工具-toLowerCase.zip

    cmd-bat-批处理-脚本-字符串工具-toLowerCase.zip

    校园二手交易平台数据库课程设计及数据库创建代码

    在 IT 领域,数据库设计是开发复杂系统的关键环节,校园二手交易平台项目就是一个典型案例。该项目通过实际应用数据库技术,帮助学习者将理论知识转化为实践能力。校园二手交易平台包含用户注册、商品发布、交易管理、评价系统等多个功能模块,这些模块都需要与数据库交互,存储和检索大量数据。因此,数据库设计必须确保数据的一致性、完整性和高效性。 项目的核心文件是“cj.sql”,这是一个 SQL 脚本文件,用于在 MySQL 数据库中创建表结构。文件中包含一系列的 CREATE TABLE 语句,定义了用户表(user)、商品表(product)、交易表(transaction)等表格。例如,用户表包含用户 ID、用户名、密码、联系方式等字段,商品表包含商品 ID、商品名、价格、描述等信息。为保证数据一致性,用户表通常设置主键约束(如用户 ID),确保每个用户有唯一标识。密码字段可能经过加密处理,以保护用户隐私。此外,商品表中可能设置外键约束,如用户 ID,引用用户表的主键,表示商品所属用户。 项目源码压缩包为“sms.rar”,解压后可导入 Eclipse 开发环境。开发者可能使用了 Spring Boot、MyBatis 等框架,通过 ORM 技术将 Java 对象与数据库表对应,简化数据库访问复杂性。运行项目前,需在 MySQL 中导入“cj.sql”文件,创建并初始化数据库,并在用户表中插入至少一条管理员账号记录,以便后续测试和管理。这一步体现了数据库初始化过程,是项目运行的必要条件。 该数据库课程设计项目不仅涵盖数据库基础知识,如表设计、SQL 语法,还涉及 Web 应用开发和数据库操作实践。通过该项目,学生能够深入理解数据库在实际应用中的重要性,提升数据库设计和编程能力,同时学会将数据库与后端开发紧密结合,实现数据的有效管理和高效利用。

    用代码画烟花!程序员式浪漫,点击屏幕触发炫酷动画

    "程序员の浪漫:用代码放烟花!" "老板说我代码花里胡哨,结果用户玩了一整天…" "原来代码还能这样玩?三分钟教会你!" "点击屏幕触发烟花特效!" "谁说代码不能治愈

    cmd-bat-批处理-脚本-mshta-weekNumber.zip

    cmd-bat-批处理-脚本-mshta-weekNumber.zip

Global site tag (gtag.js) - Google Analytics