java语言下一步可能快速演化, eclipse将疲于跟从, netbeans 6 值得一些期待 -乐鱼入口

作为java开发者, 学习了5以后带来的泛型语法之后, 不知道你有没有注意到一个特殊的地方:

class java.lang.object.getclass();

虽然它的签名返回值为 class , 但是它的规范文档却给出了这样的说明:

引用

returns ...

the actual result type is class where |x| is the erasure of the static type of the expression on which getclass is called. for example, no cast is required in this code fragment:

number n = 0;
class c = n.getclass();


这确实让开发者更方便, 不过仔细想想, 这本质上却超出了正常的java语法范畴.
为了实现这个特性, 其实是在java编译器上做了特殊处理.
翻一下已经通过openjdk项目gpl开源的javac源码, 可以找到对应的编译器代码在

com.sun.tools.javac.comp.attr.visitapply(jcmethodinvocation tree){}

方法中的这段程序:

// as a special case, x.getclass() has type class
if (allowgenerics &&
    methname == names.getclass && tree.args.isempty()) {
    type qualifier = (tree.meth.tag == jctree.select)
        ? ((jcfieldaccess) tree.meth).selected.type
        : env.enclclass.sym.type;
    restype = new
        classtype(restype.getenclosingtype(),
                  list.of(new wildcardtype(types.erasure(qualifier),
                                                   boundkind.extends,
                                                   syms.boundclass)),
                  restype.tsym);
}

也不是那么复杂对吧, 十行代码而已. 以此认知, 假如我们想现在就自己实现类似下面的语法:
var list = new arraylist();
list.add("haha");

只要给每个compilationunit增加一个 var 类型定义, 然后类似的替换成变量初始化表达式的结果类型就可以了.


整套sun javac的代码既然已经通过gpl开源, 那么我们就可以毫无顾忌的去做一些修改, 重新发布自己的版本了 - 只要基于gpl就可以. 而最大的意义还不止如此, 因为我们不大会去变动javac的公开接口, 所以我们自己版本的javac将可以和jdk无缝兼容, 最原始的办法是将标准jdk的tools.jar更名为sun-tools.jar, 把我们自己的 javac.jar 更名为 tools.jar 放到 jdk/lib 下面去, 同时在我们jar的manifest.mf里增加一个class-path, 引用 sun-tools.jar. 这样不仅让命令行的 javac 完全变成我们的编译工具, 连通过apache ant的编译脚本也无需任何改动, 成为我们扩充版本java语言的完备的编译系统.

有人担心java通过gpl开源以后因为上面的原因会造成太多的变形版本, 从而毁了java语言, 不过我倒不这么认为. java始终还是sun的注册商标, sun有法律权利要求变形版本不得称为 java, 如果其它商业实体想利用sun发布的java相关内容另立门户, 名称问题其实很致命. 因为java规范实质上仍旧通过jcp控制在sun手里, 与jcp规范不完全兼容的语言版本, 是不可能得到sun的认证从而获得java冠名权的. 另外gpl提供了强有力的法律保障, 衍生版本的全部修改都可以合法的被sun归入它维护的java软件版本中, 这意味着sun没有失去任何java控制权, 反而会有越来越多的研究者无偿贡献他们的改进, sun将有更多免费的, 直接可以吃下的, 经过实践检验的java语言增值特性可供选择, 并且时机可以自己掌控. 作为java5泛型语法源头的gj编译器是一个先例, 以后这样的事情只会更普遍起来.

快速演进的java语法对eclipse来说将是一场噩梦. eclipse相对于其它java ide的最大优势是从visualage 4j编译器演化来的增量编译器, 因为此编译器与ide无缝紧密的集成, 让eclipse收到很多其它ide无法达到的好处. 但是, 成也风云, 败也风云. eclipse jdt compiler是java语言语法稳定性的最大受益者之一, 但是一旦java语法开始快速增强, jdt 弄不好就要跟着疲于奔命, 从主导java ide功能特性的领导者, 变成被动适应java新语法的跟从者.

而对netbeans来说, 在这方面的形势则颇为有利, jackpot子项目展示并且有效的推动着sun javac向一个增量的, 动态恢复的, ide友好的java编译器兼语法元素建模工具前进. 从nb 6开始, 其java编辑界面已经是基于javac的compiler api模型, 虽然netbeans团队对javac的动态特性增强还没有真正合并到sun javac的代码当中, 但这一步已经是目前工作的方向, 完全合并的目标已经指日可待. 这个目标一旦实现, 最激动人心的结果, 那就是:

你可以基于openjdk的gpl javac, 开发并且发布你自己的java编译器, 增加各种想要的语法元素, 只要仔细考虑一些兼容性问题, 完全可以让那些利用了这些新语法的java项目代码, 不光是能够顺利通过javac命令行成功编译, netbeans ide将能够经过简单的配置, 就可以让一个java项目引用你发布的javac版本, 通过可移植的ant脚本, 来编译这些项目. 并且新语法元素, 将直接在netbeans ide中得到支持, 包括关键字高亮, 重构, 引用检索 以及更多的高级开发功能特性. 这点将是其它ide, 特别是用自家编译器的eclipse非常难于做到的.

另外, 通过对开发版本的nb6的试用, 我发现它已经远远超出了当年那个为了效仿delphi而作的gui builder, 很多特性, 比如 重构, 相关内容高亮 等等已经直追eclipse. 特别是从update center可以安装一个免费版本的jalopy用于java代码自动格式化, 感觉已经比eclipse默认的自动格式化插件强了不少. 如果nb6的正式发行版也会包含免费的jalopy, 感觉会是一大亮点.
5
2
评论 共 3 条 请登录后发表评论
3 楼 2012-07-07 16:12
不大懂讲什么
2 楼 2009-04-02 22:59
简直是扯蛋
1 楼 2009-04-01 08:47
完全不同意,语法只不过是一种手段,不是编程语言的根本,为了语法随意修改语言规范,是本末倒置,得不偿失。

发表评论

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

相关推荐

  • jbpm 是一个业务流程管理系统。 轻量级、可嵌入的引擎可以执行本机 bpmn2。 jbpm 为开发人员和业务用户提供基于 eclipse 和 web 的工具来创建、监控和管理您的流程。

  • 看了jbpm的doc,大致明白了它是如何定义和控制流程的,但是如何和业务数据整合起来还想不太明白,希望大家指教: 案例情况: 有一个流程,每个节点都会有很多结果数据(信息表,审核表,合同等),如何把这些信息与流程的...

  • jbpm 在 2004 年 10 月 18 日,发布了 2.0 版本,并在同一天加入了jboss 组织,成为了 jboss 企业中间件平台的一个组成部分,它的名称也改成 jboss jbpm。随着 jbpm 加入 jboss 组织,以及 jboss 被 redhat公司收购...

  • 原文地址;... 1. 什么是jbpm4.4业务流程...jbpm,全称是java business process management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。 相关

  • jbpm业务流程管理套件的 版本5.0刚刚发布。 jaxenter向jbpm项目负责人kris verlaenen讲解了此版本中的新增功能,以及bpmn 2.0规范如何影响jbpm 5.0…… jaxenter: jbpm如何尝试弥合业务分析师和开发人员之间的...

  • 市场上比较有名的开源流程引擎有osworkflow、jbpm、activiti、flowable、camunda。其中:jbpm4、activiti、flowable、camunda四个框架同宗同源,祖先都是jbpm4,开发者只要用过其中一个框架,基本上就会用其它三个。...

  • 当业务流程被设计好之后,会有许多相关的文件散落在工程中,这些文件包括: * 定义流程的 jpdl 文件。 * 根据图形化流程定义同步生成的流程图片文件(png 格式)。 * 业务流程中用于人机交互的表单页面文件。 * ...

  • 针对传统的煤质管理信息系统对企业内部各部门之间的业务流程控制缺乏支持的问题,设计了一种基于工作流的煤质管理信息系统;分析了煤质管理的相关业务流程;应用工作流技术对煤质管理进行了流程化设计;针对流动中的煤质...

  • 插件(jbpm jpdl-designer(jbpmgraphical process designer 插件(jbpm...使用它可以对业务流程进行......附图 1(shark 类结构图): 流程图 附图 2(jbpm 类结构图): 定...? 通过在流程结束时定义一个 service task 任务...

  • 流程管理建设对企业具有重要意义,企业该如何着手?本文介绍了企业在选型流程管理系统时需要注意的特点,并展示了老牌厂商的流程管理系统是如何管理数据的。

  • 本文不使用 jbpm 的业务中心和执行服务器,只使用核心 api。新建 spring-boot-web 项目pom.xml 文件中添加如下依赖:jboss-public-repository-groupjboss public repository grouphttp://repository.jboss.org/nexus...

  • jbpm,全称是java business process management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。jbpm是公开源代码项目,使用它要遵循 asl...

  • jbpm业务流程管理套件的 版本5.0刚刚发布。 jaxenter向jbpm项目负责人kris verlaenen讲解了此版本中的新增功能,以及bpmn 2.0规范如何影响jbpm 5.0…… jaxenter: jbpm如何尝试弥合业务分析师和开发人员之间的...

  • jbpm,全称是java business process management,是一种基于j2ee的轻量级工作流管理系统。jbpm是公开源代码项目,它使用要遵循 apache license。jbpm在2004年10月18日,发布了2.0版本,并在同一天加入了jboss,...

  • 最近开发一个基于jbpm4.4流程引擎框架的通用流程的设计,由于设计的业务繁多,而且每个业务都有一套自己的业务数据(表单数据),而且每个流程的启动,完成任务的业务操作都不尽相同。 我现在的思路是每套流程...

  • 工作流(workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者...

  • 基于asp的文件批量上传客户端免费组件.zip

  • 高精地图的匹配定位算法

  • 手工盲注辅助注入工具blind-sql-injector.zip

  • 统计表与统计图.pdf

global site tag (gtag.js) - google analytics
网站地图