标准(重要性分数以10分为最重要):
- API和库的丰富程度(例如数学、绘图、网络)(9分) - 可在桌面(Java/C++)应用程序中嵌入的能力(8分) - 部署的易用性(8分) - 能够与DLL/Shared Libraries进行接口交互的能力(7分) - 能够生成GUI界面的能力(7分) - 社区/用户支持(6分) - 可移植性(6分) - 数据库操作(3分) - 语言/语义(2分)
我认为很难得出客观的比较结果。我个人更喜欢Python。针对你提到的一个标准,Python从一开始就被设计为可嵌入语言。它有非常丰富的C API,并且解释器已经被模块化,使得从C语言调用变得容易。如果Java是你的主机环境,你应该考虑Jython,它是Python在Java环境(VM和库)内的一种实现。
我曾经和这三种语言都有过接触,以下是我的总结:
Python
Ruby
Groovy
仅是为了让事情变得更加混乱...
Groovy让你可以访问Java。 Java拥有非常丰富的API /库、应用程序等。
Groovy是可嵌入的,尽管在Java中最容易使用。
如果您正在谈论非Groovy / Java的DLL /库,则可能会有一些问题,但是有一些API可以帮助解决问题。
我做过一些Python编程,但由于更熟悉Java,因此Groovy对我来说更容易上手。
你对Groovy不熟悉?我刚开始学,试试这个(在groovyconsole中输入):
File.metaClass.invokeMethod = { String name, args ->
System.out.print ("Call to $name intercepted...");
File.metaClass.getMetaMethod(name, args).invoke(delegate, args);
}
new File("c:/temp").eachFile{
if (it.isFile()) println it.canonicalPath
}
第一段代码采用AOP技术拦截File对象的所有方法调用,无需额外工具。此操作是针对现有Java类动态执行的。
在第二个代码块中,您删除了'f'闭包参数。由于只有一个参数,它默认为内置的“it”变量,可用于闭包上下文中。
以下是您将获得的结果:
"调用isFile被拦截...C:\temp\img.jpg"
等等。
Python拥有全部九个标准。得分为56分。
我相信Ruby和Python拥有相同的功能,只不过似乎比Python库少一些。所以它得到了51分。
我不确定Groovy是否具备所有功能。
由于Python得到了56分,Ruby得到了51分,Python略胜一筹。
然而,我认为这种决定仍可能涉及到某些主观问题,超出了这九个标准的范围。
JVM可以访问的一切,这是非常多的内容。
出色的Monkeybars框架,可以让您在GUI设计器中设计Swing GUI,然后使用干净的Ruby代码进行连接。
Rawr可以将您的应用程序打包为可执行jar文件。
Java共享库很容易,C共享库通过jna + libffi实现。
Swing非常好用。不确定使用QtJambi有多容易,但肯定是可行的。
非常多。Ruby拥有出色的社区。
JVM能够运行的所有地方。
所有Ruby数据库库和所有Java数据库库。
这是Ruby明显领先于Groovy和Python的地方。该语言在早期采取了一些非常出色的设计决策,这体现在标准库的一致性和功能上。特别是Blocks使其使用起来非常愉快。
Perl?天哪。
正如有人所观察到的那样,Perl就像标点符号工厂里的一次大爆炸。如果结果代码不是自描述的,它的简洁性不是优势。
我已经用Groovy做了一些实用任务,很容易上手。完全可以访问Java库,还有一些很酷的附加功能,比如使用闭包列出目录中的文件:
// process all files printing out full name (. and .. auto excluded)
new File(basedir).eachFile{ f->
if (f.isFile()) println f.canonicalPath
}
我知道它不在你的列表上,但至少看看Perl。