`
歆渊
  • 浏览: 307813 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java语言下一步可能快速演化, Eclipse将疲于跟从, NetBeans 6 值得一些期待

    博客分类:
  • Java
阅读更多
作为Java开发者, 学习了5以后带来的泛型语法之后, 不知道你有没有注意到一个特殊的地方:

Class<?> java.lang.Object.getClass();

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

引用

Returns ...

The actual result type is Class<? extends |X|> 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<? extends Number> 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<? extends |X|>
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.<Type>of(new WildcardType(types.erasure(qualifier),
                                                   BoundKind.EXTENDS,
                                                   syms.boundClass)),
                  restype.tsym);
}

也不是那么复杂对吧, 十行代码而已. 以此认知, 假如我们想现在就自己实现类似下面的语法:
var list = new ArrayList<String>();
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, 感觉会是一大亮点.
分享到:
评论
42 楼 steeven 2007-03-07  
啥时候java的IDE能象vs一样,导个com,给你包装好,导入个ws,给你包装好。

Eclipse的Update太差劲恶心了,整天看到在状态条上忙活,死活过不去20%,插件装多了,打开一下管理器都慢。
Eclipse的GUI设计也比较差,太久没创新了,还巨耗资源。
如果Eclipse的update能综合插件评级、智能安装卸会好很多。

NB起步晚,起点高,能促进IDE发展是好事~有空去玩玩
41 楼 jjx 2007-03-07  
netbeans 6+jdk 1.6 速度得确令人有点刮目相看
40 楼 jianfeng008cn 2007-03-07  
lgx522 写道
5.0版本后的NetBeans用起来的确比eclipse更爽,但在Windows下比eclipse慢。
NetBeans Platform是个很一体化的平台,个人初学感觉比eclipse RCP好上手,概念也清晰得多,建议有志于RCP的同道们好好研究。


刚刚eclipse rcp 有点入门 哎  java啊 累人啊 呵呵 都怪sun各个部分都弄好点 就不会让开发人员这么烦了
39 楼 lgx522 2007-03-07  
5.0版本后的NetBeans用起来的确比eclipse更爽,但在Windows下比eclipse慢。
NetBeans Platform是个很一体化的平台,个人初学感觉比eclipse RCP好上手,概念也清晰得多,建议有志于RCP的同道们好好研究。
38 楼 林秋枫 2007-03-06  
个人也非常喜欢NetBeans。
eclipse不是很喜欢
37 楼 lpp333 2007-03-05  
本人还是非常看好NB6的
知识希望JAVA阵营内斗少点
哎~~~!!!为什么每次都是这样呢????
36 楼 歆渊 2007-03-05  
yipsilon 写道
I don't agree your opinion, IBM and some other Eclipse memebers are also JCP members, and if Java language specification has been changed, it must be passed in JCP group firstly. It will cost a long time to improve it and Eclipse foundation can update their JDT compiler to follow the specification descriptions on time.



By delivering a compliant IDE "on time", Eclipse can mostly be a standard compliant product, but NetBeans will be much potential to act as the very initiative platform for new Java specs, this is the real point I'm emphasising, where the power distribution may change dramatically.
35 楼 yipsilon 2007-03-05  
I don't agree your opinion, IBM and some other Eclipse memebers are also JCP members, and if Java language specification has been changed, it must be passed in JCP group firstly. It will cost a long time to improve it and Eclipse foundation can update their JDT compiler to follow the specification descriptions on time.

34 楼 bluecrystal 2007-03-02  
qqbuilder 写道
如果要看范型的话,建议看看C++,它的实现是那么的优雅,只是template最终被接受的人很少,java就是简单才吸引了那么多的爱好者,


c++的范型的确很优雅,只可惜代码的可阅读性不好,以至于即便是个c++的老手,如果不花点心思来学习和实践,要想用好范型,或者boost的某些库,还是挺麻烦的,更不要说新手了;
所以,我对java引入范型,最开始并不喜欢,但是作为新的技术范畴,也是一个方向,只希望java能够在范型上也做的简单点,就好了
33 楼 qqbuilder 2007-03-02  
如果要看范型的话,建议看看C++,它的实现是那么的优雅,只是template最终被接受的人很少,java就是简单才吸引了那么多的爱好者,
32 楼 hantsy 2007-03-02  
JBuilder 2007 是基于eclipse 3.2,但还没有完全把原来JB的功能搬过来,特别JB的强项GUI,估计下一个版本的事,JB的功能也比以前多了很多,togethor也包括进来了,。。现在codegear的软件都打个大包,买一送X。。。正版用户比较值
31 楼 basicbest 2007-03-02  
bluecrystal 写道
我来说说外传吧,当jbuilder退出了主流java ide市场的竞争后,大家似乎都忽略了borland公司在编译器技术上的实力,因为在web开发技术大行其道的今天,borland公司似乎开始沉默,专业媒体对其关注程度也逐渐降低,但是从borland公司脱离出来的开发工具团队,也就是现在的codegear,在3月底即将推出delphi for php,后面或许就会有delphi for ruby, delphi for python.在退一步,或许,codegear又会以全新的面孔杀回java市场,难说阿。。。。


完全有可能,呵呵!

JBuilder2007用的是eclipse。
30 楼 bluecrystal 2007-03-02  
我来说说外传吧,当jbuilder退出了主流java ide市场的竞争后,大家似乎都忽略了borland公司在编译器技术上的实力,因为在web开发技术大行其道的今天,borland公司似乎开始沉默,专业媒体对其关注程度也逐渐降低,但是从borland公司脱离出来的开发工具团队,也就是现在的codegear,在3月底即将推出delphi for php,后面或许就会有delphi for ruby, delphi for python.在退一步,或许,codegear又会以全新的面孔杀回java市场,难说阿。。。。
29 楼 hantsy 2007-03-02  
eclipse和netbeans的定位不一样,eclipse从一开始强调的是平台概念,ibm给大家描绘了一个各种软件都在上面运行的大平台,不仅仅是给java开发人员准备的,可惜曲高和寡。。。现在95%以上的eclipse平台软件仍然是ide,从这方面来讲,eclipse已经是彻底失败了。。。
从java 开发功能上讲eclipse已经远不如netbeans 5.5,netbeans5.5是一种功能快速膨胀的产品,接收了sun的Creator2,Studio Enterprise的源代码,但好像一时吃不消,很多功能用起来就是有点别扭。
从最基本的ide的功能,netbeans做得还不够,目前代码辅助比起eclipse还有一段距离,很多界面操作细节也觉得不方便,期待netbeans6.0到来。netbeans 6.0的开发周期比较长,今年年底才能面世,这样netbeans 6.0也有足够的时间来优化基础平台了,中间会发布5.5.1补充一下(roadmap上写的是4月份发布)。
netbeans6.0也加入了大量scripting lang的支持,Update Center的lang support中已经有好几种语言可以用了,但现在目标仅限基本编辑功能hightlight, code completion, format,另外,特别是JRuby, JROR,也显示了SUN对ruby的支持力度。
maven在netbeans 6中也内置支持了,netbeans以ant,maven来管理项目是值得骄傲的,我一直不喜欢ide自己特有的项目文件,eclipse更离谱,除了项目文件外,还有workspace中也会有一些垃圾文件。
eclipse在换了新jdk后,并没有感觉太多的性能提升,而netbeans在jdk 6后速度提高是很明显的。swing现在默认也不会有1.4那么难看,而且可以轻易的换皮肤,sun的观点很直接,ms自己的office,media player, vs都没有应用系统界面,为什么swt还在高唱awt十几年前的老调----Native L&F,何况目前swt的native l&f也是掩耳盗铃,在非win平台,实在是差强人意,linux很使用gtk主题很会变形,或者一踏糊涂,。。
docbook在netbeans中也回来了,可以直接在nb写文档了。
28 楼 kris_xu 2007-03-02  
分析得很精辟,向你学习。
27 楼 kris_xu 2007-03-02  
分析得很精辟,学习。
26 楼 抛出异常的爱 2007-03-02  
eastviking 写道
Allen 写道


在众多项目原地踏步在JDK1.4甚至1.3的中国大陆,你能指望众生对“先进的语法元素”会抱有足够的期待吗?


其实不只是中国大陆,越大越复杂的系统对于新技术的跟从越是谨慎。
我现在安装SAP的时候还不得不用1.4呢

难道为了用上1.5就要停止其他研发来修改全部代码吗?一般都不会的,这些工作都要几年才能完成。


LDAP还不能用1.5跑起来
今天正在安装ldap.....
1.5抱错,换1.4通过
25 楼 eastviking 2007-03-02  
Allen 写道


在众多项目原地踏步在JDK1.4甚至1.3的中国大陆,你能指望众生对“先进的语法元素”会抱有足够的期待吗?


其实不只是中国大陆,越大越复杂的系统对于新技术的跟从越是谨慎。
我现在安装SAP的时候还不得不用1.4呢

难道为了用上1.5就要停止其他研发来修改全部代码吗?一般都不会的,这些工作都要几年才能完成。
24 楼 jolestar 2007-03-01  
这个想法还真不错.用自己的语法,以及编译器,生成的却是兼容标准jvm的字节码.好,老大搞出来一个后,我先尝鲜.
23 楼 歆渊 2007-03-01  
增加一个 ThisClass 来代表当前class, 类似用 this 来代表当前实例的语法, 我想很多人都想要过吧, 但是现在的java就是没有.
SUN对这个RFE http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6479372 的评估是其工作量不亚于增加泛型. 不知道7能不能加上去.

如果我在官方出来这个支持之前就可以先给你一个javac的包, 扔到你的JDK里面去, 你就可以直接在NetBeans IDE里跟其它语法一样的用, javac 和 ant 都照常用没有差别, 编译出来的结果也是完全兼容1.5的JVM, 那会不会想尝鲜呢?

相关推荐

    NetBeans Java快速入门

    NetBeans Java 快速入门指南 本指南提供了使用 NetBeans IDE 创建 Java 控制台应用程序的步骤指南,涵盖了项目创建、编译和运行等基本步骤。通过这篇指南,读者将学习如何使用 NetBeans IDE 创建、编译和运行 Java ...

    eclipse和NetBeans的项目相互转换.

    在项目迁移或团队协作时,可能会面临将Eclipse项目转换为NetBeans项目,或者相反的需求。本文将详细介绍如何在Eclipse和NetBeans之间进行项目转换,以实现跨平台的项目兼容性。 #### Eclipse项目转换至NetBeans **...

    NetBeans+Java快速入门.pdf

    标题《NetBeans+Java快速入门.pdf》指向了一个以NetBeans集成开发环境(IDE)为工具来学习Java编程语言的入门指南。NetBeans是一个广泛使用的开源开发平台,它提供了Java SE、Java EE和HTML5等语言的开发支持。该...

    Java程序设计基础:使用Eclipse创建和运行Java程序.pptx

    使用Eclipse创建和运行Java程序 使用Eclipse开发Java程序 Java程序的运行机制 了解常用的集成开发环境 掌握使用Eclipse创建和运行Java程序 集成开发环境 集成开发环境(Integrated Development Environment,IDE)将...

    NetBeans仿eclipse风格(8.x版本用)

    6. **插件兼容性**:尽管NetBeans和Eclipse的插件系统有所不同,但在Eclipse风格下,NetBeans可能会提供一些Eclipse插件的替代品,或者对部分Eclipse插件进行兼容,以满足用户的特定需求。 7. **调试体验**:...

    基于NetBeans开发的java应用程序集锦6

    【标题】"基于NetBeans开发的Java应用程序集锦6"主要涵盖了使用NetBeans IDE进行Java应用程序开发的一些实例和实践。NetBeans是一个强大的开源集成开发环境,尤其适合Java开发者,提供了丰富的功能,包括代码编辑、...

    NetBeans IDE 6.0 Java 快速入门指南

    ### NetBeans IDE 6.0 Java 快速入门指南知识点详解 #### 一、NetBeans IDE简介 NetBeans IDE是一款开源且免费的集成开发环境,适用于多种编程语言,包括Java、C/C++、PHP等。它由Oracle公司支持,现已被收归至...

    Java小游戏 netbeans自作

    【Java小游戏 netbeans自作】是一个使用NetBeans IDE开发的项目,主要涵盖了Java编程语言、图形用户界面(GUI)设计以及游戏开发的基础知识。NetBeans是Java开发者常用的集成开发环境,它提供了丰富的代码提示、自动...

    Android学习笔记之开发环境搭建(Eclipse和NetBeans)

    本文将详细介绍如何在Eclipse和NetBeans中设置Android开发环境,以便进行应用程序的编写和调试。 首先,我们关注的是Eclipse环境的搭建。Eclipse是一款强大的集成开发环境(IDE),广泛用于Java和Android应用开发。...

    学生信息系统 java基于netbeans 课程设计

    【标题】"学生信息系统"是基于Java编程语言和NetBeans集成开发环境进行的一次课程设计项目,旨在构建一个能够管理学生信息的系统。这个系统具备了数据库操作的基本功能,为用户提供了一个直观且友好的界面,使得学生...

    Eclipse快捷键指南+NetBeans快捷件大全

    Eclipse快捷键指南+NetBeans快捷件大全

    NetBeans IDE Java 快速入门教程

    NetBeans是一个功能全面的集成开发环境(IDE),它支持多种编程语言,尤其在Java开发方面,NetBeans提供了一个强大的开发平台。这篇教程指导用户如何使用NetBeans IDE来创建一个基本的Java控制台应用程序,也就是...

    eclipse和netbeans上搭建android开发环境

    ### Eclipse与NetBeans上搭建Android开发环境详尽指南 #### 一、概述 本文将详细介绍如何在Eclipse和NetBeans这两个流行的集成开发环境(IDE)上搭建Android开发环境。通过本教程,您将能够顺利地在您的计算机上配置...

    Netbeans jdk6 Jnotepade

    【标题】"Netbeans jdk6 Jnotepade"指的是使用NetBeans集成开发环境(IDE)基于Java JDK 6版本创建的一个项目,该项目可能是一个简单的文本编辑器或类似JNotepad的应用程序。JNotepad是Java中常见的一个基础文本编辑...

    java netbeansGUI版 记事本

    Java NetBeans GUI版记事本是一个基于Java编程语言和NetBeans集成开发环境(IDE)创建的文本编辑器应用。这个项目对于那些正在学习Java GUI编程的初学者来说是一份宝贵的资源,因为它提供了一个实际的、可操作的示例...

    NetBeans_IDE_Java快速入门教程

    本教程主要针对初学者,旨在帮助他们快速掌握如何使用NetBeans IDE进行Java应用程序的开发。以下是一些关键知识点: 1. **创建新项目**: - 启动NetBeans IDE后,选择“文件”&gt;“新建项目”(Ctrl-Shift-N)。 - 在...

    Java是一个广泛使用的编程语言,以下是一些常见的Java资源: 官方资源: Oracle Java SE Documenta

    Java是一个广泛使用的编程语言,以下是一些常见的Java资源: 官方资源: Oracle Java SE Documentation:官方的Java SE文档,提供了Java语言的详细信息。 Java Tutorials:官方的Java教程,提供了Java语言的入门和...

    netbeans下Java编的图片管理系统,打开图片后实现自动播放功能

    标题中的“netbeans下Java编的图片管理系统,打开图片后实现自动播放功能”是指使用NetBeans集成开发环境,使用Java编程语言开发的一款图片管理软件。这个系统具备了基本的图片管理和展示功能,并且在打开图片时能...

    基于NetBeans开发的java应用程序集锦10

    在本资源"基于NetBeans开发的java应用程序集锦10"中,我们聚焦于使用NetBeans IDE进行Java应用程序的开发。NetBeans是一个强大的开源集成开发环境,尤其适用于Java开发者,它提供了丰富的功能,如代码编辑、调试、...

Global site tag (gtag.js) - Google Analytics