我们应该选择哪种跨平台脚本语言给一组DBA使用?
我想听听大家对我们团队即将做出的语言选择的看法。我们是一家软件开发公司,我在一个支持跨平台Java应用的团队里,主要使用Oracle和SQL Server数据库。我们的代码库有SQL Server和Oracle,支持的客户使用Windows、Solaris和Linux服务器。
我们经常做的很多任务自动化程度不够,而在自动化方面,主要是通过shell脚本来实现,而在Windows上却没有相应的功能。现在我们面临的问题是需要在两个平台上重新开发脚本等。因此,我希望我们能选择一种跨平台的语言来编写脚本,而不是使用Bash,然后在必要时尴尬地转换成Cygwin或批处理文件。
我们需要这种语言具备以下特点:
- 动态的(所以不要建议Java或C!)
- 在每个平台上都能轻松使用(Windows、Solaris、Linux,可能还有AIX)
- 设置要求非常少(根权限不总是可用!)
- 对shell脚本编写者,比如DBA,容易上手,他们不是 hardcore 开发者。
- 容易理解其他人的代码
- 与SQL Server和Oracle兼容,不需要太多麻烦。
- 如果有一些不错的XML功能就更好了。
如果能在JVM上运行那就更好了,因为几乎每台服务器上都会安装这个(当然所有应用服务器上都会有),而且我们公司有很多Java开发者,所以坚持使用JVM是有道理的。不过这并不是唯一的选择,我知道Python也是一个很不错的语言。
我列出了一些选项,但可能还有更多:Groovy、Scala、Jython、Python、Ruby、Perl。
除了我自己对Java和Groovy有不少经验外,其他人对这些语言的经验都不多。我们希望找到一种动态的、容易上手的语言,能够轻松与SQL Server和Oracle配合,有一些XML简化功能,并且不会让DBA感到排斥。我们中的很多人都很依赖Bash——有什么办法让我们摆脱这种依赖呢?
大家对此有什么看法?
谢谢!
Chris
6 个回答
我觉得你最好的选择是Groovy、Python和Scala。这三种语言都能让你写出比较高级的代码(比起C或Java来说)。Python有自己不错的数据库连接工具,而Groovy和Scala可以使用为Java开发的工具。
Python的优点在于它已经被广泛使用,所以周围有很多工具、库和专业知识可供使用。它的语法特别简洁,让人写起来感觉很舒服。不过,缺点是它运行速度比较慢(这可能对你来说不是问题),而且是动态类型的(这意味着你可能在运行时遇到错误,而不是在编译时)。另外,你不能在Jython和Python之间随意切换,所以你得选择是用大量的Python资源,还是用很多Java资源,但少了不少Python的好处。
Groovy的优点是你已经熟悉它,并且它能很好地和Java库配合使用。缺点也是速度慢和缺乏静态类型(也就是说,和Python相比,你需要考虑的是:你更看重Python的简洁语法和广泛应用,还是更看重Java库的丰富性?)。
Scala的优点是它是静态类型的(也就是说,如果代码能通过编译器的检查,它更有可能正常运行),速度快(如果你愿意努力,它和Java一样快),而且能很好地和Java库配合使用。缺点是它需要你花更多的精力来处理静态类型的问题(不过比起Java要简单得多,同时也更安全),而且Scala的标准风格是结合了面向对象和函数式编程的,这让它和另外两种语言感觉有些不同(因此需要更多的学习才能充分发挥它的效果)。和Groovy相比,问题在于你更看重熟悉和易上手,还是更看重速度和正确性。
就我个人而言,我现在几乎所有的工作都用Scala,因为我的工作需要速度,而且编译器能帮我抓住我常犯的错误(所以这是我用过的唯一一种语言,当我让大块代码编译通过后,不会惊讶它们能正常运行)。不过,我在其他场合用Python的体验也很好——和大型数据库对接似乎是个不错的应用场景。
(我会排除Perl,因为它维护起来比较麻烦,而且没有比Python更显著的好处;我也会排除Ruby,因为它的功能没有比Python强大到值得用不太直观的语法和较低的使用率/工具可用性。)
你可以选择使用Python。它是一种动态语言(也就是解释型语言),可以在Windows、Linux和Solaris等操作系统上运行。Python的语法很简单,读起来也很容易,这样你在维护代码的时候就不会觉得困难。此外,它还有很多模块和库可以用来和Oracle数据库以及其他各种数据库进行交互。同时,它也支持处理XML文件。总之,这七个要点都能满足。