首先,我在阅读Web上的一些内容后对脚本语言的理解是,我们可以将脚本语言归类为用户可以直接运行而无需编译的脚本语言。最近我在开源产品xwiki上工作,我看到他们使用groovy作为脚本语言,即从用户界面我可以编写小程序,一旦我保存它,它就会在后端编译和执行。他们是如何做的只是将程序作为字符串传递,然后使用groovy编译器编译并运行它。如果这种方式groovy可以被视为编译语言,因为对于用户体验,他不必编译代码并在运行中运行(尽管在内部它也被编译为字节代码)。
如果这是真的,我们也可以用java实现类似的东西,即
Process process1 = Runtime.getRuntime().exec("javac "+stringContainingProgram);
并从输入流中获取编译代码而不是运行它。
我可以说在这方面我们可以将java视为脚本语言吗?
答案 0 :(得分:3)
我认为你混淆了“脚本语言”和“解释语言”这两个术语。
解释语言是在运行时之前未预编译的语言。
脚本语言通常是一种允许任务自动化(脚本化)的语言。
Java有点混乱,因为它有一个编译阶段,其中java代码被转换为JVM字节代码,然后在运行时解释此字节代码,因此Java具有编译和解释语言的功能。
使用Runtime.GetRuntime()。exec(),您可以在运行时调用命令,但这与使用bash脚本执行相同操作(或将其键入终端)相同。
在这种情况下,您概述了使用java显式调用编译器,下一个逻辑步骤是运行它,但是代码不是从Java代码中运行的,您的Java代码只是调用它。
简短的回答是否定的,Java不是一种完全解释的语言。
答案 1 :(得分:2)
IMO术语“脚本语言”过于模糊,无法以有意义的方式进行辩论。 Groovy是一种脚本语言吗?它可以提前编译,也可以及时编译。
纯粹解释的语言是一种脚本语言吗? IMO如何执行语言并不重要,因为我不会将早期解释的BASIC称为“脚本语言”。
静态类型语言是脚本语言吗?在这里讨论一些有趣的事情......但是那些带有可选输入的语言呢?
对我而言,它归结为“我是否必须手动编译代码”。 Java可以成为脚本语言吗? Tricky ...是一个编辑器插件,符合“用户脚本”的界面,或者它只是“编辑器代码库的一部分”?我没有一个可以肯定地辩护的答案,并且可以看到任何一方争论。
如果走投无路,那么蜜獾不会给出一个sh * t,并说Java不是一种脚本语言,Groovy 可以。但是,庞大的系统是用“脚本”语言编写的,比如Perl。 (他们应该是否......是值得商榷的。)现在,它归结为“脚本语言与编程语言的不同之处?”
没什么,真的。 IMO的区别几乎总是毫无意义。
答案 2 :(得分:1)
您的示例中的内容不是Java。它是一种具有类似Java语法的表达式语言。在真正的Java中,声明必须嵌入到类或方法中。
因此,基于该示例,您不能说Java是一种脚本语言。您可以创建类似Java的脚本语言,但是您需要解决一些可用性问题。就像导入的不同语法一样......如果您希望脚本语言是交互式的。
然后存在一个问题,即需要用户显式声明变量及其类型的脚本语言不是人们想要的。 Real Java基本上是一种带有显式类型声明的静态类型语言。脚本语言(一般来说)是动态输入的。
我可以说java不是脚本语言,因为它不是动态类型语言吗?
不是真的。 “脚本语言”是常用用于编写脚本的语言。这就是你所能说的一切。我们甚至无法清楚地定义“脚本”是什么。
没有基本的自然法则说你不能用静态类型的语言编写脚本。它只是......好吧......不是人们想要的东西。
关于编译是否及时或提前,不是任何语言限定脚本语言的标准。正确?
这是正确的。它并没有从根本上影响语言的可用性以实现脚本编写。
现在,您可能会争辩说,如果用户在运行脚本之前必须显式编译脚本,那么这不是脚本编写。也许这就是将“普通”节目与“脚本”分开的东西。然而,这样做的风险在于我们隐含地限制“脚本语言”和“脚本”以适应/适合我们的特定偏见。
如果你仔细阅读了这个和其他答案,我们基本上都同意一点。脚本语言没有什么有用的定义,因此不可能说Java是否是一个。
一个更负责任的问题是Java是否是脚本的好语言...而我的回答是我不这么认为。
答案 3 :(得分:1)
我知道我会得到我的回答,但是......戴维牛顿是完全正确的。这个词太模糊了......
在您的示例中,不必编译groovy代码。恕我直言,在这种情况下更典型的使用groovy将是使用常规解释器。
是的:java可以用作脚本语言。我见过企业产品,你可以在java代码中编写litte脚本。程序将它包装在一个类中,编译并执行它。
因此,如果您比较approches,如果使用像groovy这样的“真实脚本”语言或者通过一些小技巧将java转换为一个语言,那么对用户来说无关紧要。
顺便说一下:大多数java语句也在groovy中运行...所以如果你只是看一下像
这样的代码片段res = 5 * 16 + 2
您无法判断这是脚本还是未编写脚本的部分。你甚至不知道它是用哪种语言写的!
所以,回到原来的问题:
我不会说你可以将 java作为一种脚本语言,但是在可能的情况下你可以用java来满足你的脚本需求,但人们会错过与动态语言等“真实”脚本语言一起提供的快捷方式。
<强>更新强>
如你所说“java可以用作脚本语言。我见过 企业产品,你可以在java代码中编写litte脚本“它 如果你可以简要介绍一下你是什么样的小脚本会很有用 在这说说什么?
我在谈论扩展产品超出正常功能的小脚本:MS Office产品中的Visual Basic,Bonita中的Groovy(工作流产品)以及Jasper iReports中的Groovy,JavaScript和Java(是!Java!)(报告)发生器)
BTW:你会发现在Jasper中使用Java和Groovy之间有一个很好的比较:http://jasperforge.org/uploads/publish/ireportwebsite/IR%20Website/iReport_groovy.html
它向您展示Java可以用作脚本语言,但其他解决方案更好: - )
我问这个becoz大多数网络都说是一种脚本语言 通常是一种允许任务自动化(脚本)的语言。如果 按照这个定义,每种语言都成为脚本语言 becoz我们可以使用任何语言自动执行一种或其他类型的任务。
对我来说,脚本语言不仅仅是允许任务自动化的语言。对我来说,PHP,Javascript,Visual Basic和Groovy也是脚本语言。关于Post * Script *?
btw:刚刚找到http://www.beanshell.org/ - 完全兼容Java的脚本语言。
正如我已经提到的,恕我直言,许多语言都可以用作脚本语言,但有些语言更适合: - )