Friday, May 21, 2004

Java将在多任务上得到改进――J2SE1.6呼之欲出

Java将在多任务上得到改进――J2SE1.6呼之欲出

虚拟机技术将得以适用于应用程序共享

Sun公司正在致力于改进Java语言,使得能在一个虚拟机内实现多任务,在4月6日举行的ClusterWorld Conference & Expo会议上,一位Sun的官员如是说。

J2SE 1.6,正准备在今年秋季发布一个beta的测试版,并且计划在2005年能推出面向广大开发者。根据Sun高级Java架构师,Murali Kaundinya所说,这个版本的J2SE将加入Java开发者期待已久的?隔离(isolates)?功能来提升应用程序在同一个JVM中的共享能力。隔离机制将允许被隔离的各个实体能独立的完成各自的计算而不需要第二个JVM,也就是传统上说的多任务(Multitask)机制。

J2SE 1.6另外的一个重大特性将是支持Sockets Direct Protocol。Kaundinya 说:?这将为你提供Java程序之间的高速通信能力。?,并且在J2SE中做出的这些改进也将会在不久以后出现在J2EE中。

J2SE1.5已经在今年的一月份发布了Beta测试版,并且将预计在今年六月的JavaOne大会上发布正式版,Kaundinya说,J2SE1.5是专注于让Java编程变得更容易。


Amazing: J2SE 1.6 is planned to release @2005

hehe,今天算是对Java的发展有了一个新的认识了,通过阅读JavaLobby(www.javalobby.com)上的一些文章,了解了最近的一些Java发展动态,例如Rich Green,以前Sun的一个VP在Sun和MS联盟的时候离开了工作了13年的Sun,Sign~。

还有一个非常好的主意将出现在NetBeans 4.0上,就是基于Apache Ant的项目管理,这样就使得一个Project可以不用过分的依赖IDE,而是可以建立起一条IDE和其他的开发编译工具之间的桥梁,这个特性太好了,不知道,JBuilder 11是否会支持这个特性。

另外一个震惊的消息就是,Sun将在今年年底左右推出J2SE 1.6的测试版本,我的老天,J2SE 1.5还没有上线,Sun这个家伙就要推J2SE1.6了,有完没有完啊。而且说2005年将是J2SE1.6的年份。可是Sun是说18个月也就是一年半推一个J2SE的版本的啊。

唉。么的救了,就这么把我折腾死吧。

参考link:http://www.infoworld.com/article/04/04/06/HNjava16_1.html


Another amazing Project.

刚刚看到Sun推出了一个新的项目叫做Looking-Glass,这是Sun秘密准备着的下一代桌面系统。

大家可以通过下面的地址来看Jonathen给我们做的一个演示:

宽带高质量演示:(Real格式)

http://webcast-east.sun.com/ramgen/archives/GSN-1312/GSN-1312_01_450.rm

窄带演示:(Real格式)

http://webcast-east.sun.com/ramgen/archives/GSN-1312/GSN-1312_01_050.rm

如果我没有记错的话,早在2年前,Microsoft就已经推出了类似的3D桌面系统,当时在MSDN上还有一段这个3D桌面的演示呢,让我找找吧,如果能找到,那就贴上来。


Sun 终于还是守着自己的宝贝。

刚刚看到消息,前几个月闹的非常厉害的要求Sun把Java贡献给开源社区的事情终于有了一个着落:

Sun的CEO Mc Nealy说,我们永远不会把我们的Java语言作为开源项目,并且针对IBM发给Sun的要求开源的信揶揄了一句?等你把你的DB2开源了再来告诉我应该怎么处理我的宝贝?。"Go open source with DB2 and then you can tell me what to do with my assets".

呵呵,Sun的宝贝还是捂的很紧的。


Thursday, May 20, 2004

?这可不是泛型?-Bruce Eckel眼中的Java泛型

Bruce Eckel在前不久写了一片批判Java的泛型的文章,结合他在OO上浸淫多年的功力,一眼就看出了Java的泛型和其他例如C++,Python,Ruby等等这些语言的泛型的差别。

不过平心而论,Bruce Eckel的批评是比较中肯的,因为他也看到了Java和其他这些面向对象的语言之间的差别,他也可以理解Java实现出了这样的泛型。

另外,如果大家不知道Ruby是什么,可以参考下面的网站:http://www.ruby-lang.org/en/

详细内容如下:


昨晚,我作为嘉宾被Silicon Valley的模式组邀请去参加他们的一个研讨会,并且让我来决定讨论的主题,为了更好的了解JDK1.5,我选择了Java的Generics(泛型),最后讨论的结果是我们大家都有点震惊。我们讨论的主要素材是最新的Sun推出的Java 泛型手册。
我对?参数化类型?的经验来自于C++,而C++的泛型又是基于ADA的Generics,事实上,Lisp语言是第一个实现了泛型的语言,有人说Simula语言也很早就有泛型了。在这些语言中,当你使用参数化的类型的时候,这个参数是作为一种隐式类型(latent type)的:一种被实现出了如何使用,但是却没有显式的声明的类型。也就是说,隐式类型是一种通过你调用方法来实现的。例如,你的模板方法是某个类型中的f()和g(),那么接下来你实现了一个类型包含了f()和g()这两个方法,而事实上这个类型可能从来被定义过。
举个例子,在Python中,你可以这样做:

def speak(anything):
anything.talk()

注意到,这里对anything没有任何的类型限制,只是一个标识而已,假设这个类型能做一个叫做speak()的操作,就象实现了一个Interface一样,但是事实上你根本不需要去真的实现这样一个Interface,所以叫做隐式。现在我可以实现这样一个?狗狗和机器人?的例子:

class Dog:
def talk(self): print "Arf!"
def reproduce(self): pass

class Robot:
def talk(self): print "Click!"
def oilChange(self): pass

a = Dog()
b = Robot()
speak(a)
speak(b)

Speak()方法不关心是否有参数传入,所以我可以传给它任何的东西,就象我传入的对象中支持的talk()方法一样。我相信在Ruby语言中的实现是和Python一致的。
在C++中你可以做相同的事情:

class Dog {
public:
void talk() { }
void reproduce() { }
};

class Robot {
public:
void talk() { }
void oilChange() { }
};

template void speak(T speaker) {
speaker.talk();
}

int main() {
Dog d;
Robot r;
speak(d);
speak(r);
}


再次声明,speak()方法不关心他的参数类型,但是在编译的时候,他仍然能保证他能传出那些信息。
但是在Java(同样在C#)语言中,你却不能这样做,下面这样的做法,在JDK1.5中就编译不过去(注意,你必须添加source ? 1.5来使得javac能识别你的泛型代码)


public class Communicate {
public void speak(T speaker) {
speaker.talk();
}
}


但是这样却可以:


public class Communicate {
public void speak(T speaker) {
speaker.toString(); // Object methods work!
}
}


Java的泛型使用了?消磁?,也就是说如果你打算表示?任何类型?,那么Java会把这个任何类型转化为Object。所以当我说不能象C++/ADA/Python一样真正的代表?任何类型?,他只是代表Object。
看来如果想让Java也能完成类似的工作必须定义一个包含了speak方法的接口(Interface),并且限制只能传入这个接口。所以下面这样的代码能编译:


interface Speaks { void speak(); }

public class Communicate {
public void speak(T speaker) {
speaker.speak();
}
}


而这样是说:T必须是一个实现了speak接口的类或者这样的一个子类。所以我的反映就是,如果我不得不声明这样的一个子类,我为什么不直接用继承的机制那?干吗还非要弄的这么费事还糊弄人呢?就象这样:


interface Speaks { void speak(); }

public class CommunicateSimply {
public void speak(Speaks speaker) {
speaker.speak();
}
}

在这个例子里,泛型没有任何的优势,事实上,如果你真的这样使用,会让人迷糊的,因为你会不停的搔头:为什么这里他需要一个泛型那?有什么优势?回答是:什么都没有。完全没有必要用泛型,泛型完全没有优势。
如果我们要用泛型来实现上面的?狗狗和机器人?的例子,我们被迫要使用接口或者父类,用这样显式的方式来实现一个所谓的?泛型?。


interface Speaks { void talk(); }

class Dog implements Speaks {
public void talk() { }
public void reproduce() { }
}

class Robot implements Speaks {
public void talk() { }
public void oilChange() { }
}

class Communicate {
public static void speak(T speaker) {
speaker.talk();
}
}

public class DogsAndRobots {
public static void main(String[] args) {
Dog d = new Dog();
Robot r = new Robot();
Communicate.speak(d);
Communicate.speak(r);
}
}


(注意到在泛型中你用的extends而不是implements,implements是不能使用的,Java是精确的,并且Sun说了必须这样做)
再一次,泛型和简单的接口实现相比没有任何的优势。



interface Speaks { void talk(); }

class Dog implements Speaks {
public void talk() { }
public void reproduce() { }
}

class Robot implements Speaks {
public void talk() { }
public void oilChange() { }
}

class Communicate {
public static void speak(Speaks speaker) {
speaker.talk();
}
}

public class SimpleDogsAndRobots {
public static void main(String[] args) {
Dog d = new Dog();
Robot r = new Robot();
Communicate.speak(d);
Communicate.speak(r);
}
}

如果我们真的写一段能真正代表?任何类型?的泛型代码的话,那么这段代码所代表的类型只能是Object,所以我们的泛型代码只能说是Object的一个方法而已。所以,事实上,我们只能说Java的泛型只是对Object类型的一个泛化而已。不过免去从Object和其他类型之间不辞辛劳的转型,这就是这个所谓的?泛型?带给我们的好处。看起来似乎只是一个对容器类的新的解决方案而不是其他,不是么?所以这次讨论会得到的一致结论是,这个所谓的泛型只是解决了容器类之间的自动转型罢了。
另外一个争论是,如果让代表的是一种任意类型的话,会引起类型不安全的事件。这显然不对,因为C++能在编译的时候捕捉这样的错误。?啊哈?,他们说,?那是因为我们被迫用另外一种方法来实现Java的泛型?。
所以Java中的泛型是真正的?自动转型?。这是Java世界的方法,我们将失去真正的泛型(也就是隐式类型,事实上,我们可以用反射-reflection来实现这样的功能,我在我的《Thinking in Java》中做过2,3次这样的试验,但是实现起来有点乱,失去了Java的文雅本性)。一开始我对Java的泛型有震惊,但是现在过去了。至少有一点清晰的是,这是不得不这样的。C#虽然有一个比Java更好的泛型模式(因为他们有点超前,他们修改了底层的IL所致,举个例子说,类和类之中的静态域(static field)是不一样的),但是也不支持隐式类型。所以,如果你想用隐式参数,你不得不使用C++或者Python或者Smalltalk,或者Ruby等等:)。

Wednesday, May 19, 2004

New Translating plan

准备马上翻译一下Bruce Eckel关于J2SE1.5中泛型的看法。

原文地址:http://mindview.net/WebLog/log-0050

他的观点不一定正确,只能说是代表了根据他多年的OO经验,当面对Java这样的泛型的时候的想法和反应。

预计推出时间:2004年5月20日


Flash Test

测试一下看看是否能正确显示swf文件。test


Tuesday, May 18, 2004

我的Template的下载

今天,应Matthew兄的要求,把这个Template的下载放到Blog上。

这还是0.1版本的,因为还有许多地方不完善。

国外的朋友喜欢用div来做页面布局,我不喜欢,我喜欢用table,所以我的Template是基于Table来做布局的。其实在NN的浏览器上是不支持Div标签的,只有
IE的浏览器支持Div标签,对应的在NN的浏览器上的标签是Layer。

http://www.totodotnet.net/Download/Template(toto).zip

这个zip包是带密码的,密码是:www.totodotnet.net

(This zip file is password protected, remember the password: www.totodotnet.net


Monday, May 17, 2004

测试一下日文的显示

TOTOさん

お疲れ様です。このブログは 良いですね。

頑張れってください。


Sunday, May 16, 2004

刚刚整好了这个pLog

还不太会用,让我好好摆弄摆弄这个东西,做的更加符合我的喜好一点。

比如Template中就没有我喜欢的Template,所以首先就是做一个我自己喜欢的Template.

另外对后台的东西还是有很多不熟悉的,看着办吧。

2004.5.16 19:00pm. 新的Template 终于做好了。比以前的那个Blueish好多了。

下面还有不少的问题,慢慢调整吧。


老贴整理5:关于?美国的自由?一文

当我看完了这些资料以后,发现这个题目对我来说太大了,以我现在的水平是没有发言权的。对此我只能提供关于这个题目的几本书,大家可以在我的站点上下载到:

近距离看美国之1??历史深处的忧虑

近距离看美国之2??总统是靠不住的

近距离看美国之3??我也有一个梦想

说明一下:
1、这三本电子书是我从网络上搜集来的,如果认为我侵犯了版权,请和我联系:My Email

2、这个三本书不仅比我们通常从历史书上学到的知识要深刻,而且要生动的多,同时这个三本书对美国的法律做了一个比较详细的概述。对了解美国的法律制度非常有好处。

老贴整理4:说三道四论《手机》

手机这部片子在没有上映之前,大家就在猜测小冯会给我们带来什么。小冯用两年的时间在人们的心中聚集起来一个巨大的问号,终于是在12月18日给了大家一个交代。17日的晚上我去看了首映式,印象最深刻的是在片头的XX手机广告:用XX手机就不会出现下面故事中的事情,整个一个败坏社会风气!

看完了以后感慨颇多,但是首先的反映就是小冯估计和崔永元关系不错,小崔也给小冯倒了不少苦水。先不论小崔是否真的发生了这样的故事,以我这样一个伪娱乐迷从报纸上,网络上看到的消息来看,整个就是小冯拿小崔开涮。连剧情中严守一节目里面的乐队的音乐都如此像。当然就事论事的而言,我的推理是毫无根据的,希望如果不幸小崔看到了这段文字不会生气。毕竟可能性还是很大的,国外的研究表明,地球生任意两个人都可以通过其他的六个人联系上,所以还是要严正声明一下的。

故事很简单,严守一,小名白石头,和三个女人的故事,外加费墨和两个女人的故事。这样老掉牙的故事,想必大家都能猜到,所以故事情节不是这里我要说三道四的东西。我要说的是剧中几个演员的表演和小冯对细节的把握。

剧中当费墨的老婆李燕发现了费墨裤中宾馆房卡后给严守一打了一个电话,故意把友谊宾馆给说成了希尔顿,引得严守一圆了一个不该圆的谎,以至于后面一系列事情的发生。这里小冯对李燕这种心计的安排是非常的妥当也非常贴近现实的。相信很多人都遇到过这样的情况,例如某女借了男友的手机站在男友身边给男友的好朋友打电话问男友是不是在那边,结果这个好朋友比较够?义气?,象费墨学习了一把,说在上厕所,结果挂了电话立马男友的手机就响了,让男友给其女友回电话。这样的故事或许还有车站版,办公室版,娱乐版等等,都不一而足。剧中费墨说了一句话,世界上的事情怕就怕结盟,但是古人说的好,你有登云梯,我有张良计,有结盟,就有离间,要不然有苏秦,恐怕历史上就没有这个秦始皇了。

接下来,严守一和沈雪到费墨家里调解家庭矛盾,李燕当时就撒泼起来了,而李燕撒泼的这些动作和语言给人留下了深刻的印象,活脱脱一个中年家庭妇女,相信会引起许多人的共鸣。李燕这个角色戏份不多,但是如果评个最佳女配角之类的,相信要好好考虑一下她。

回到家以后,沈雪对严守一和费墨的结盟感到非常生气,严守一也摆酷,让沈雪来抓鬼。岂知鬼还真来了。其中有两个细节,沈雪和李燕打印了通话记录出来以后,李燕怂恿沈雪打电话探一探严守一打了一个多小时的电话,沈雪在拨完了号码后还是没有拨出去这个电话,这个举动相信任何一个女人站在沈雪这样的一个角色上都会这么做,这里就是一个女人的面子问题了,小冯刻画的不错。

从移动的营业厅回来以后沈雪看到了严守一前妻于文娟打来的电话,没有接,来了一个彩信,她就看了。这个不接电话和看彩信正是刻画了沈雪这个时候心里的矛盾和抓鬼的心态,接电话要面对于文娟,沈雪不干,看彩信正好,反正不用面对本人,不看白不看,看了却是不白看,看了以后沈雪心如巨石沉海。这个接与不接,看与不看的选择简单到位的刻画的沈雪的心态。

再回头来看严守一的小冤家,武月,美丽热情,但是严守一在费墨前面已经一针见血的评价了这个小姑娘:遇到事情首先想到的是自己,不能说这个的想法好还是坏,保护自己是人的本能,只是说小姑娘心气比较高,而且非常有心计,目标也很明确,做事情也有点不择手段的味道,摆现实中来就是有可能是一个女强人了。

总的来说就是小冯也知道故事没啥吸引人的地方,所以特别注重刻画人物心理,几个演员的心态都表演的非常到位。

影片中另外非常重要的一点是,商业化气氛太浓重了,话题太重了,我估摸着这个票房高也高不到哪里去,低也低不到那里去。

最后不得不提到的一点是,这个严守一啊,两年多居然都没有换手机?而且1999年的时候居然就有彩屏的C388了?

flyingbug 发表于 >2004-1-4 0:36:16


老贴整理3:程序员眼中的Visual Studio .NET "Whidbey"

今天刚翻译好一篇关于Visual Studio .NET Whidbey这个版本中即将出现的新特性的文章,放上来与大家共享。因为翻译的比较仓促,所以难免会有些地方失误和值得商榷的地方,请发现以后能联系我【联系我】,谢谢大家。

点击下载,密码:flyingbug.blogone.net
原文

Happy 2004!
flyingbug 发表于 >2004-1-9 0:51:19

老贴整理3:J2SE 1.5版本的新特性一览

J2SE 1.5版本的新特性一览

到了2003的年末,J2SE1.5的beta版本就将发布了。这次发布和现在已经发布的J2SE1.4的两个更新1.4.1和1.4.2都如2003年的JavaOne大会预期的发布。如果你没有参加这次大会,或者想重新回顾一下,那么下面就是这次大会的简要内容。


J2SE 1.4.1 and 1.4.2 Releases

当1.4.1(开发代号?Hopper?)在2002年9月发布以及它的后续版本1.4.2(开发代号?Mantis?)在2003年1月如期发布的时候,已经修复了超过4000个的bug,并且还在继续的修复中。

在J2SE1.5的新特性中,将添加一些众人期待已久的功能,比如对Itenium CPU的完全支持;Swing的用户将看到两个全新的内建Look & Feels,一个是Windows XP风格,一个GTK风格;同时启动时间上也有改进。

在服务器端的增强主要包含了两个新增的GC,一个并行标记清扫算法(concurrent mark and sweep algorithm)和类似年轻空间收集(parallel young space collector)。这两个新的GC能通过编译的参数来调用:-XX:+UseConcMarkSweepGC 和 -XX:+UseParallelGC。

接下来,如何运用这些参数来调整系统的最佳性能就是我们在J2SE1.5中需要学习和理解的了。

J2SE 1.5 Release

J2SE 1.5(开发代号?Tiger?)是Java平台和语言上的一个重要修改,目前主要包括了15个JSR的请求和其他一些类似的更新。这次的Release主要关注于几个关键的主题:主要是品质,监视和管理,性能和可扩展性,轻松的开发以及桌面客户端。

Ease of Development(轻松的开发)

你可能已经听到过了关于减轻开发难度而做的Java语言上的修改。这次J2SE根据JSR的要求实现以下几个JSR:JSR 201 包含了4个修改;JSR 175的核心是支持元数据(metadata),而JSR 14则规范了泛型。

元数据功能提供了声明式的开发,并且取代了一些工具的代码生成和维护功能。泛型提升了无需手动转型(manual casting)的代码复用,通常manual casting都会带来类型安全性上的一些问题。

另外的四个修改分别是:

用for循环来遍历容器(Collection 类型),而不需要显式的声明容器的迭代器(Iterator); 
枚举类型提供了超越类似final static int的,增强的类型安全性; 
当在泛型中使用基本数据类型(Primitive Types)的时候提供自动装箱(autoboxing)功能(原来的泛型中是不能使用基本类型的); 
引入了静态常量(static constants)类改进显式的共享一个静态数据;
为了实现轻松的开发,除了语言上的修改之外,还有一些额外的东西,比如一些怀念printf函数的会发现它又回来了;一个新的并发工具(在JSR 166中提及)将使得多线程编程变的更加简单轻松。


Scalability and Performance(可扩展性和性能))


J2SE 1.5版本将承诺改进可扩展性和性能,尤其是在启动时间和内存印记(memory footprint)上,将使得用户能以最快的速度发布一个应用程序。从JSR 163上将实现内建的性能工程(Performance ergonomics)和个功能强劲的API profile工具。


Monitoring and Manageability(监视和管理))


监视和管理是Tiger中的一个主要特性。那些在J2EE平台上使用JMX的开发者将非常开心的看到这样的特性能在J2SE中实现。通过对JVM的监视,将允许对已发布的应用程序健康性的完全检查,包括对底层内存泄漏检测,错误处理甚至是API 堆栈跟踪(stack trace)的监视。


Core XML Support(核心的XML支持))


J2SE 1.5的介绍被修改为XML的核心平台,表示Java的核心API将包括了XML1.1,SAX 2.0和DOM Level3。Web service方面的API,JAX-RPC,和JAXB将继续出现在Web Service的包中,在以后的新版本中这些API将被添加到核心API中去。


Desktop Client(桌面客户端))


最后一个重点的新特性是桌面客户端。这将带来几个内建的新的Look & Feels支持,并且增强了对皮肤(skins)的支持。除了启动速度和内存印记的增强,桌面开发者又多了几个值得期待的新特性。


Unicode 3.1 Support(对Unicode 3.1的支持))


32位的代理字符(surrogate character)支持将会很谨慎的添加到新的版本中,所以1.5版本将仍然使用16位的char类型。


New IO Support(新的IO支持))


新版本将提供对异步IO的支持,并且支持在平台中适当的地方开拓更深入的使用这些API。


有了J2SE 1.4.2和J2SE1.5,Java的开发者们将拥有一个激动人心的一年。

flyingbug 发表于 >2003-10-3 0:27:24

老贴整理2:J2SE 1.5 in a Nutshell 中文版

J2SE 1.5 in a Nutshell 中文版

刚刚翻译好了这篇J2SE 1.5 in a Nutshell,是sun的java站点上的关于j2se 1.5的官方文档.
由于对新特性理解的不够透彻,所以还请各位看官不吝赐教(告诉我啦)

点击下载(zip包的密码:flyingbug.blogone.net)
原文Link
flyingbug 发表于 >2004-2-17 1:54:32

老贴整理1:Fox经典电视剧-24 第二季

上个星期四,买了一套Fox公司的《24》第二季DVD。这次买的DVD的一个叫做丽晶的DVD碟商制作的D5版本,画面效果不错。

总的来说这部电视剧在美国和香港地区掀起收视狂潮是有他的道理的,所有的故事描述的都是一个叫做Jack Bauer的联邦调查员在24个小时内调查,解决恐怖分子想要发起的恐怖活动为线索,每个季度分为24集,每一集讲述的就是Jack在这段时间里面发生的事情。在每一集的前面都是有这么一句话:

The following take place between xx pm and yy pm.

情节紧凑有致,紧而不乱,几条线索同时展开,有条不紊,各个人物分别登场唱戏。
更有味道的是通常用不同的镜头来表示不同的人物在同一时间里面所做的事情。


目前Fox将在今年的10月份开始播放24的第三季,据说这次Jack的血就是危险之极的东西??


flyingbug 发表于 >2003-9-14 0:02:08

2004年5月15日

2004年5月15日,阴有小雨,农历甲申年三月二十七

我的Blog新站正式开通。