何时应该使用脚本语言而不是像C++这样更详细的编译语言.C#还是Java?
为了使问题更有趣,让我们回答这样的问题:
你应该使用脚本语言... BLANK ...
当你需要使用脚本语言X.
当你需要B使用脚本语言Y.
当你需要C使用脚本语言Z.
当开发速度比执行速度更重要时,您应该使用脚本语言.
添加脚本语言作为更大的编译系统的一个组件是一种常见的模式:系统的编译部分针对执行速度进行了优化,但更难修改(因为它必须被编译和重新加载),而脚本部分则是系统针对灵活性进行了优化,运行速度较慢,但任何人都可以通过文本编辑器快速轻松地修改.
如果您希望使应用程序的部分功能易于自定义,则可以使用此模式.
这有点宗教问题.我使用脚本语言进行临时任务,例如:
寻找一万行日志中的特定项目
生成性能图
数据缩减 - 将文本文件转换为所需格式
从数据库获取特定的数据子集并将其打包为文本文件
所有这些也可以用编译语言完成,但对我来说,用脚本语言执行它们更快更容易(我使用ruby,但PERL和python都很好).
我倾向于使用脚本语言进行快速原型设计,实验和数据争用.例如,如果我有一堆文本文件,我需要预处理和构建到数据库夹具作为一次性操作,我通常会编写脚本.
然而,现在,"脚本"和"编译"之间的界限变得模糊,使用像groovy和ruby这样的语言.对于上面提到的任务,我将使用ruby但是我还将使用它来构建带有rails的生产webapp.我将用java编写桌面应用程序,但groovy允许我混合使用脚本.即使用C/C++编写,我发现一个有用的模式是嵌入一个特定于域的脚本语言(例如tcl,尽管我不太喜欢那种语言).
语言的实际选择是我认为是一种宗教选择,尽管有一些显而易见的权衡(例如可读性 - perl很有用,但是很容易写出神秘的脚本.在某些方面它是'只写'语言 :-).在过去,我使用过bash + awk + sed,一些perl,ruby等等......对于一次性任务,这主要取决于你和你团队的其他成员所熟悉的事情.这些天我有意识地选择使用红宝石,即使我在bash/awk/sed中做同样的事情要快一点,但这只是为了通过尽可能多的任务来提高我的红宝石技能.
这是我的层次结构:
使用grep尝试一下。
如果使用grep无法做到这一点,请使用sed。
如果sed功能不够强大,请使用awk。
如果awk功能不够强大(或开始看起来很讨厌),请使用C,C ++或您选择的其他成熟的通用编程语言。
请注意,awk和C之间没有“脚本语言”。这是故意的。