我们需要Java ++吗?

dsi*_*cha 16 c++ java programming-languages language-design innovation

在我看来,在某种程度上,Java是C在不久前的地方.两者都是当时相当简约的语言,具有相对干净,简单的内核.(我指的是这里的核心语言,而不是库.)两者都非常受欢迎.两者都是通用语言,包含大量遗留代码.两者都缺乏一些现代生产力功能,其他语言的程序员经常会错过这些功能.两者似乎都非常惯性,并且适应不断变化的世界.

在我看来,创建一个大致是Java的超集的Java ++是合理的,因为C++是C语言.这样的语言会试图将Java从其经历的相对停滞中解脱出来,仅在少数几个方面打破向后兼容性只有在绝对必要的情况下,才会添加许多现有功能,这些功能可能会缺少普通的旧Java,并且会在以后担心标准化问题.可能是一个好主意的功能包括:

  1. 一流的职能,代表.
  2. 闭包.
  3. 静态类型推断,类似于varC#或autoD.
  4. 运算符重载.
  5. 结构作为与类不同的值类型,如C#和D.
  6. 属性.
  7. 忽略已检查异常的选项.
  8. 能够在文件中声明多个顶级公共类.
  9. 更强大的内置数组,允许附加内容.
  10. 更好的泛型/真实模板.
  11. 类似于C#4.0的动态关键字,它允许在必要时以通常的静态语言进行鸭子输入.
  12. 由于Java主要是一种VM语言,可能还有一些硬核元编程功能,例如为某些事情即时生成代码.

你认为会有这种语言的需求吗?你觉得这样的事会成功吗?

编辑:我不是在谈论运行时/字节码级别的兼容性,我在谈论级别的Java兼容性.此外,是的,Java 7可以添加其中一些,但似乎向Java添加功能的"官方"过程非常保守.真正的观点是将Java分支成一个分支的想法是关注创新而不是稳定性/标准化.

All*_*nde 29

比方说,Scala或更好的Groovy自称是java的动态版本?

  • +1,我认为Scala等方法比修改Java更好. (6认同)
  • 我只是没有看到Scala是Java本身的前进/替代.它更像是你运行的其他东西(比C/C++更多的C#/ F#关系). (2认同)

Oma*_*eji 20

为了达到这个目的而受到Java粉丝的欢迎,但作为编写Java和C#的人,我会说C#与Java ++一样接近.

C to C++是一种范式转换,从过程转向面向对象,它们保留名称的唯一原因是让C程序员认为它是同一种语言,导致装载非常糟糕的C代码伪装成C++.

Java不断扩展,Sun正在迅速整合越来越多的功能,因此Java 7或8很可能是您的Java ++

  • 我认为Scala更接近Java ++(JVM跨平台功能以及与Java库的向后兼容性使其更加自然).但如果你正在寻找一个真正的范式转变,像Clojure是要带你去更远,从长远来看(函数式编程,并发在语言等的心脏) (3认同)

joe*_*ely 18

我认为" 我们需要一个Java ++吗? " 的答案取决于" 我们 "是谁(而且我不确定" 我们 "是否只是一个类的实例;-).The Java Posse不止一次讨论过这个问题.

Java的大型企业用户倾向于更保守.他们拥有大量的开发人员和大量现有代码.因此,语言或库的变化存在很高的感知成本和风险(培训,维护,现有代码的破坏等).

另一方面,有很多小的,轻松的开发团队(开源或其他),他们随时准备在编程中锁定下一个伟大的想法.我不清楚一个答案会让每个人都满意.

我建议不断增长的基于JVM的语言生态系统可能有助于解决这种紧张局势.如果较新的语言(Scala,Fan,JRuby,JavaFxScript等)提供第二组所需的符号特征(和新颖性),同时保持与现有Java(可以更稳定的速度移动)的互操作性,也许两个组都可以有他们选择的蛋糕风味.

我对一些人似乎想要一种真正的语言的程度感到有些困惑.在当天,听到每种语言(符号)都具有适用性的"甜蜜点"的想法是很常见的; 有时,正确的解决方案是用适当的语言编写系统的每个部分并将它们链接在一起.

回到未来,有人吗?

  • 你需要多少种图灵完整语言?他们都做同样的事情.让我们选择一个并继续使用它. (3认同)

Ale*_*ler 6

问题是你如何决定"下一个语言"的内容.只是逐个添加/删除功能将导致一堆垃圾.考虑如何添加或删除这些功能(通常组合使用)会改变您按照新原则编程的方式,这样会好得多.例如,我认为有趣的是,Java闭包提议在很多方面都遭遇了必须处理静态类型而没有丰富的类型推断.有很多动态语言的例子,有很好的闭包 - 那些很好地结合在一起.而Scala和其他语言已经表明,静态类型加上丰富的类型推断也可以使闭包非常漂亮.我的观点是,使用语言X并制作语言X ++可能并不那么有趣.它'

肯定没有什么可以阻止你现在分支Java并将它变成你想要的任何东西(只要你不称它为Java或想要通过测试套件).如上所述,现在已经有一组令人兴奋的高质量语言正在做这件事,并且现在正在与Java保持互操作性.我主要考虑的是Groovy,Scala,Clojure和Fan,以及较少的JVM先前语言的端口,如JRuby,Jython和Rhino,它们在实现干净的Java集成方面往往更具挑战性.

JSR 292的功能很可能在Java 7中进入JVM,这将为已经非常出色的JVM基础上的语言开发提供更丰富的功能.CLR + DLR也在推动许多有趣的界限.

我认为未来将越来越倾向于为工作选择合适的语言.这要么发生在具有混合传统的语言中(例如Scala是FP/OO的一个很好的例子),要么发生在促进多种语言之间清晰集成的虚拟机(JVM,CLR,BEAM,Parrot等)中.或者最有可能的是,这两者.我认为我们不会倾向于任何一种下一个大语言,它是Java(或其他任何东西)的衍生物.


Pet*_*rey 6

目前在Java中有许多这样的解决方法,这使得更难以引入更自然的方式来做这些事情.

  1. 一流的职能,代表.

大多数情况使用反射更短.(但不太自然)

0.4.结构作为与类不同的值类型,如C#和D.

我同意这一点.

0.5.属性.

这可以立即完成,但需要付出一些努力.适当的内置支持会更好.

0.6.忽略已检查异常的选项.

你现在可以这样做,但它是一个黑客.注意:已检查的异常是编译时功能.

我非常怀疑这是一个好主意,除非人们真正理解异常.通常建议这样做的人不喜欢被迫思考错误状况,记录或处理它们.

0.7.能够在文件中声明多个类.

你现在可以这样做.只是不超过一个顶级公共课.

0.8.更强大的内置数组,允许附加内容.

请参见commons ArrayUtils.一个具有理智的toString()的数组将启动.

0.9.更好的泛型/真实模板.

我同意,这取决于你的意思.我认为在改进之前,他们应该首先使用当前的工作.例如,可以编译Java API而不用未经检查的警告.

0.10.类似于C#4.0的动态关键字,它允许在必要时以通常的静态语言进行鸭子输入.

反思,这反过来,但它相对丑陋.

0.11.由于Java主要是一种VM语言,可能还有一些硬核元编程功能,例如为某些事情即时生成代码.

像JavaCompiler(在Java 6中),脚本支持(在Java 6中),JCI或BeanShell.