所有脚本都是用脚本语言编写的吗?

Are all scripts written in scripting languages?

提问人:MainID 提问时间:3/14/2009 最后编辑:MainID 更新时间:11/24/2013 访问量:526

问:

我对脚本的概念感到困惑。

我可以说makefile是一种脚本吗?

是否有用 C 或 Java 编写的脚本?

脚本 编程语言

评论


答:

1赞 Kibbee 3/14/2009 #1

这取决于你对脚本的定义。对我来说,脚本可以是你为一个小目的而编写的任何小程序。它们通常用解释语言写成。但是,没有什么能阻止您用编译语言编写小程序。

7赞 Reed Copsey 3/14/2009 #2

我会参考维基百科的详细解释。

“脚本”通常是指在另一个程序的上下文中运行的一段代码或一组指令。它们通常不是一个独立的可执行软件。

Makefile 是由“make”或 MSBuild 等运行的脚本。

C 需要编译成可执行文件或库,因此用(标准)C 编写的程序通常不被视为脚本。(也有例外,但这不是使用 C 的正常方式。

Java(尤其是 .net)有点不同。典型的 Java 程序是作为可执行文件编译和运行的,但这是一个灰色地带。可以对用 java 编写的“脚本”进行运行时编译并执行它。

评论

0赞 Tim Post 3/14/2009
有一些 ANSI C 解释器,不幸的是它们是专有的。
0赞 Reed Copsey 3/14/2009
没错 - 好点子。我更想指出,这不是使用 C 的标准方式,但也有例外。我会编辑以纠正。
0赞 RBerteig 3/14/2009
还有 TCC,一个可以编译 C 源文本(旨在符合 C99 标准)并返回指向适合调用的函数的指针的库。如果你敢,请看 bellard.org/tcc;-)甚至还有 Lua 绑定!
3赞 AnthonyWJones 3/14/2009 #3

在非常一般的意义上,术语“脚本”与部署并预期从词法表示形式运行的代码有关。一旦编译代码并分发生成的输出而不是代码,它就不再是“脚本”。

脚本的缩小和模糊不是编译,结果仍被视为脚本。

0赞 hmcclungiii 3/14/2009 #4

脚本基本上是几乎任何语言或 shell 的不可编译文本文件,其解释器用于自动执行重复执行的某些进程或命令列表。脚本通常用于备份文件、编译例程、svn 提交、shell 初始化等,无穷无尽。你可以用一个脚本做一百万零一件事,而可执行文件(包括安装等)简直是矫枉过正。

评论

0赞 David Thornley 3/14/2009
有一些脚本语言可以编译,例如 Python。给定 foo.py,您可以编译为 foo.pyc,尽管没有什么可以阻止您只使用 foo.py 而不打扰 .pyc。
0赞 hmcclungiii 3/14/2009
同意,尽管编译它会有点毫无意义;)
1赞 David Webb 3/14/2009 #5

对我来说,脚本必须由单个文件组成。并且该文件必须能够执行为其编写脚本的任务,而无需中间步骤。

所以这些都可以:

bash backup_my_home_dir.sh
perl munge_some_text.pl
python download_url.py

但这不符合条件,即使文件很小:

javac HandyUtility.java
java HandyUtility
1赞 Kev 3/14/2009 #6

术语“脚本”可以涵盖相当广泛的活动。例如,使用命令式解释型语言(如 VBScript、Python)或 shell 脚本(如 csh 或 bash)进行编程,或使用声明性语言(如 XSL、SQL 或 Erlang)表示任务。

某些脚本语言属于称为领域特定语言 (DSL) 的类别。DSL 的好例子是“makefile”、许多其他类型的配置文件、SQL、XSL 等。

你问的是相当主观的,一个人的剧本是另一个人的应用。如果你对脚本的解释意味着使用脚本语言不应该强迫用户遵循传统的编译->链接->运行周期,那么你可能会形成这样一种观点,即你不能用C或Java编写“脚本”。

0赞 MichaelGG 3/14/2009 #7

我用 F# 编写脚本。最近的一个是小型数据加载器,用于接收一些数据集,对其进行一些处理,然后将其转储到数据库中。~40 行。无需单独的编译步骤;我可以让 F# Interactive 直接运行它。

好处是,我得到了一种功能齐全的语言,具有出色的IDE和所有安全静态检查功能,而推理使它不会像Java或C#那样冗长。

所以,这是一种语言,它提供了一个相当不错的类型系统,编译和检查,没有被解释,但可以很好地用于脚本。

1赞 cherouvim 3/14/2009 #8

是的,可以在 Java 中编写脚本。我:)
看过很多次(这是对糟糕的意大利面条代码的讽刺)