剖析短迭代
敏捷教练Dave Nicolette提出:我们应该如何设定迭代长度?是要根据发布周期的时间么?使用短迭代又有哪些好处?
作者 Geoffrey Wiseman译者 曹云飞 发布于 2007年12月24日 上午4时34分
在过去的几年中,关于将闭包作为Java SE 7的一部分或者在将来的某个未定的版本加入Java语言中,引起了广泛的讨论。对此已经有了一些提案(BGGA, CICE, FCM)并且达成了一致意见。一种思考目前可用提案的角度是考虑闭包对于Java语言的冲击:在经历了基本性的变化后Java是否可能依然保持“Java的感觉”。Joshua Bloch在Javapolis表达了他对于争论的观点 ,以及为什么他认为CICE是一种更合适的方式。
为了描述Java的感觉,Joshua Bloch引用了Gosling在1997年6月IEEE Computer的一篇论文。
Java是一种蓝领语言。它不是博士论文的内容而是一种工作语言。许多不同的程序员都觉得Java很熟悉,因为我们喜欢经过考验的事物。
他问道,“我们做的怎么样”,然后回答“不是非常好。” 通过引证了一篇427页的FAQ并且引用了一些用户的意见,他认为Java泛型是破坏了Java的感觉的一个变化,因为泛型带来了Java特征之间的指数级别的相互作用,并且得出了如何保持Java感觉的方法:
- 我们不能再承受任何通配符
- 要增加新的语言特性必须经过非常慎重的考虑
- 对于概念层的增加越少越好
- 新增的部分必须有高能效比
在简要的回顾了将闭包加入Java语言中的原因之后,Joshua Bloch对于BGGA闭包提案的一些有争议的特征进行了讨论:函数类型(难以阅读的代码,鼓励“诡异的”编程风格,出人意料的相互作用);非局部 return、break和continue(令人费解的,阴险的bug,变化的意义);无限制的访问非final的局部变量(另人费解,影响性能)以及 将库定义的控制构造器作为一个设计目标(不如特定构造器那么丰富,可能会慢一些,增加了复杂性)。
他还回顾了他提出的提案——简明实例创建方式(Concise Instance Creation Expressions——CICE)的要点:
- 创建匿名类实例的简明语法
- 用于自动资源管理的特定构造器
他对于那些希望在Java平台上看到更多语言变化的人提出了一个替代方案:
我们必须牢记这样的事实,对于JVM来说已经有一个很好编程语言提供了这么多功能,而且还添加了Java的互操作性:Scala。
最后,Joshua Bloch描述了两种方式来给Java增加闭包特性:
- 从原型得到更多的经验
- 当我们达成了广泛地一致意见时,就开始在小范围内讨论JSR
- 这个过程也许需要几年
- 遵守以前建立的先例
在不久的将来开始在大范围内讨论JSR
- 必须允许提出任何关于闭包规范的观点
- 第一个任务是回答两个大问题
从一个Javapolis投票所得到的结果是多样的:30个参与者投了CICE的票,BGGA/FCM+JCA得到了24票,19票给了不做变化。在一个反响热烈的Javalobby上的一个讨论中, 反映很迅速而且是两极分化的,有些人认为Joshua Bloch在比较不同的提案的时候有明显的偏袒。另外一些人赞成这一观点,认为如果你需要这些特性,你应该使用Scala。一些人觉得BGGA作为一个特 征会使得Java过于复杂,还有人认为复杂之处很少,不会影响日常工作。Carsten Saager喜欢CICE。Stephen Colbourne仍然喜欢他的FCM提案。
- 我们需要作出重大的决策!
- 这对于Java平台的未来会有重大的影响。
- 我们必须为此付出时间并且做正确的事情。
- 我们绝不能进一步的伤害“Java的感觉”。
Neal Gafter的回答简短而切中要害;他认为BGGA的语法在大多数真实世界的场景中会产生更简单的代码,他用Doug Lea的fork-join框架作为例子并让大家去 阅读他的关于非局部转移问题的解决方案。Bharath的博文详细的描述了在评论中日益增长的一种观点:这种争论表明我们应该谨慎从事,不要在没有理解后果之前对Java做大的变动。Tim Bray和Michael Kolling加入了“反对的”阵营,反对将闭包加入Java。Tim Bray这样说:
我的观点很简单:Java工作的这么好是因为他符合80/20原则。照我的看法,Java是史上最高调的、最干净的、符合80/20原则的技术。直 到泛型出现以前,对于Java中随后的20%的尝试几乎是无害的,泛型是一个灾难;它让Java难以学习,难以理解,而且你不能避免泛型。
一件确定的事情是:我们还没有结束对于Java闭包的讨论。
查看英文原文:Closures and Preserving the Feel of Java一种纯粹的感觉,像以前被人所评论的,一如武当
个人觉得范型挺好的,我看到至今还有许多程序员不知道如何从Collection中迭代对象,范型可以很好的帮助进行迭代。且保持了简洁的代码。
闭包确实是一个很简洁的,但是很诡异的东西。就像是C/C++中的指针一样,用好了不错,用不好会有很多潜在的BUG,看你的掌握了。
许多程序员不知道如何从Collection中迭代对象
用for循环就可以迭代了吧,加上类型转型就可以,这里会出什么错误?
java的范型确实比较难捉摸,
因为擦拭法的实现带来了不伦不类的感觉.
闭包吗,个人觉得还是有必要的.
BGGA这个东西确实不地道,太复杂了.
FCM比较不错,看了看主页参考了haskell,有点亲切感.
CICE这个有是一个编译器魔法,当然了兼容性什么的肯定No.1啦,不过千万不要是下一个范型.
闭包的精简感觉就是用符号代替了文字,没什么意义吧,这样oo的感觉似乎就不存在了,完全是在用脚本。
本文主要讲述了如何用JBoss Portlet Container 和JBoss Portlet Bridge创建新项目,怎样配置一个JSF应用去使用JBoss Portlet Bridge,以及JBoss Portlet Bridge所具备的功能。
在这篇文章里,Bryon Jacob和Chris Berry将和我们继续探讨AtomServer,它是基于Apache Abdera的完整Atom存储实现。作者还创建了几个Atompub规范扩展,其中包括自动标记、批处理和Feeds聚合。
InfoQ中文站的电子杂志《架构师》试刊第二期出版了!相比于上期,我们在内容的选择安排和版式上都根据读者的意见重新做了修正。“细节决定成败”,我们希望基于InfoQ中文站的专业内容,《架构师》能逐渐成为大家喜欢的电子刊物!
在本文中,Steven Haines探讨了Web应用性能调优问题。该领域过去更像是一门艺术而不是一门科学。他提出了一种称为基于等待调优的方法,使整个调优过程更加可度量,也因此更具科学性。
通常来说,改变技术路线时最艰难的部分是辨别语言语法之间的不同。这篇文章就为Java开发者提供了一份如何转向Flex基础语言ActionScript的指南。
本视频主要以财帮子为例,介绍了如何创建一个PV为百万级的Rails应用。其中包括:Rails应用的服务器架构、Rails Cache的优化、负载均衡的处理、Web服务器的调试、分布式解决方案、Open API的设计等等。
InfoQ首席架构师Alexandru Popescu在采访中谈论了InfoQ架构、Webwork与DWR、Hibernate与JCR、Hibernate可扩展性、最新的InfoQ视频流系统和InfoQ的未来规划。
5 条回复
回复