有人能解释一下脚本语言和程序设计语言的区别吗? 你也可以举一些例子。我谷歌了很多,但我总是从Stack Overflow找到最好的答案。
当前回答
我认为你所说的“差异”实际上是真实差异的结果。
实际的区别在于所编写代码的目标。谁来运行这段代码。
脚本语言用于编写针对软件系统的代码。它将对软件系统进行自动化操作。脚本将是目标软件系统的指令序列。
编程语言的目标是计算系统,可以是真实的也可以是虚拟机。指令是由机器执行的。
当然,真正的机器只理解二进制代码,因此您需要编译编程语言的代码。但这是针对机器而不是程序的结果。
另一方面,脚本的目标软件系统可以编译代码或解释它。由软件系统决定。
如果我们说真正的区别是它是否被编译,那么我们就有一个问题,因为Javascript在V8中运行时是编译的,而在Rhino中运行时不是。
由于脚本语言已经进化得非常强大,所以它变得更加令人困惑。因此,它们不局限于创建小脚本来自动化另一个软件系统上的操作,您可以使用它们创建任何丰富的应用程序。
Python代码以解释器为目标,因此我们可以说它“脚本化”了解释器上的操作。但是,当你编写Python代码时,你不会将其视为编写解释器脚本,而是将其视为创建应用程序。解释器只是用于在更高级别上编写代码。所以对我来说,Python更像是一种编程语言,而不是脚本语言。
其他回答
要理解脚本语言和程序设计语言之间的区别,就必须理解脚本语言诞生的原因。
最初,有编写程序的语言,如excel, word,浏览器,游戏等。这些程序是用c和java等语言编写的。随着时间的推移,这些程序需要用户创建新功能的方法,因此它们必须为字节码提供接口,因此脚本语言诞生了。
脚本语言通常是不编译的,所以只要你写了一些有意义的东西就可以运行。因此,excel可以使用c++构建,但它公开了一种名为VBA的脚本语言供用户定义功能。类似地,浏览器可以用c++ /Java构建,但它们暴露了一种称为javascript的脚本语言(与Java没有任何关系)。游戏通常是用c++构建的,但会公开一种名为Lua的语言供用户定义自定义功能。
脚本语言通常位于某些编程语言之后。脚本语言通常很少访问计算机的本机功能,因为它们运行在原始编程语言的子集上。这里的一个例子是Javascript将无法访问您的文件系统。脚本语言通常比编程语言慢。
Although scripting languages may have less access and are slower, they can be very powerful tools. One factor attributing to a scripting languages success is the ease of updating. Do you remember the days of java applets on the web, this is an example of running a programming language (java) vs running a scripting language (javascript). At the time, computers were not as powerful and javascript wasn't as mature so Java applets dominated the scenes. But Java applets were annoying, they required the user to sort of load and compile the language. Fast forward to today, Java applets are almost extinct and Javascript dominates the scene. Javascript is extremely fast to load since most of the browser components have been installed already.
最后,脚本语言也被认为是编程语言(尽管有些人拒绝接受这一点)——我们在这里应该使用的术语是脚本语言与编译语言的对比。
在世界还很年轻的时候,在PC世界中,你可以从。exe或。bat中选择,描述很简单。Unix系统一直都有shell脚本(/bin/sh, /bin/csh, /bin/ksh等)和编译语言(C/ c++ /Fortran)。
To differentiate roles and responsibilities, the compiled languages (often referred to as 3rd Generation Languages) were seen a 'programming' languages and 'scripting' languages were seen as those that invoked an interpreter (often referred to as 4th Generation Languages). Scripting languages were often used as 'glue' to connect between multiple commands/compiled programs so that the user didn't have to worry about a set of steps in order to carry out their task - they developed a single file, that delineated what steps they wanted to accomplish, and this became a 'script' for anyone to follow.
Various people/groups wrote new interpreters to solve a specific problem domain. awk is one of the better-known ones, and it was used mostly for pattern matching and applying a series of data transforms on input. It worked well, but had a limited problem domain. The expansion of that domain was all but impossible because the source code was unavailable. Perl (Larry Wall, principle author/architect) tool scripting to the next level - and developed an interpreter that not only allowed the user to run system commands, manipulate input and output data, supported typeless variables, but also to access Unix system level APIs as functions from within the scripts themselves. It was probably one of the first widely used high-level scripting languages. It is with Perl (IMHO) that scripting languages crossed the arbitrary line and added the capabilities of programming languages.
你的问题是关于Python的。因为python解释器是针对包含python代码的文本文件运行的,而且python代码可以在任何有python解释器的地方运行,所以我认为它是一种脚本语言(与Perl相同)。您不需要为每个不同的OS/CPU架构重新编译用户python命令文件(就像使用C/ c++ /Fortran一样),这使得它更易于移植和使用。
这个答案要归功于杰罗德·海曼(Jerrold Heyman)。 原帖:https://www.researchgate.net/post/Is_Python_a_Programming_language_or_Scripting_Language
我不同意使用解释器的语言是脚本语言,而被编译的是编程语言。我们可以为任何语言开发解释器或编译器。解释环境更适合web脚本编写,使它更容易,这就是为什么我们有它。
嗯,我觉得脚本语言和编程语言之间没有任何区别。一切都是为了完成工作。当涉及到与web相关的任务时,我们把它们称为web脚本,考虑到小任务,这样我们也可以把与系统相关的任务称为系统或操作系统级脚本,我们用来完成这些任务的编程语言称为系统脚本语言。
同样,这并不是说不能用Python编写系统级代码,不能用C语言编写Web脚本(如果我们能够建立所需的平台和环境,当然可以这样做)。但它所需要的是太多的努力,这可能会影响快速开发的时间限制,而减少的一点点延迟对我们的web脚本没有多大好处。但如果我们在Python中执行系统级任务,则相反。
底线:语言选择取决于要执行的任务的性质,将一种语言区分为脚本语言是一个神话。
脚本语言是不需要显式编译步骤的编程语言。
例如,在正常情况下,必须先编译C程序才能运行它。但在正常情况下,在运行JavaScript程序之前不必编译它。所以JavaScript有时被称为“脚本”语言。
随着现代硬件和现代编译技术的发展,编译的速度越来越快,这条界限变得越来越模糊。例如,谷歌Chrome中的JavaScript引擎V8(在浏览器之外也经常使用)实际上是将JavaScript代码实时编译为机器代码,而不是解释它。(实际上,V8是一个优化的两阶段编译器。)
Also note that whether a language is a "scripting" language or not can be more about the environment than the language. There's no reason you can't write a C interpreter and use it as a scripting language (and people have). There's also no reason you can't compile JavaScript to machine code and store that in an executable file (and people have). The language Ruby is a good example of this: The original implementation was entirely interpreted (a "scripting" language), but there are now multiple compilers for it.
一些“脚本”语言的例子(例如,传统上使用的语言没有显式的编译步骤):
Lua JavaScript VBScript和VBA Perl
还有一小部分传统上用于显式编译步骤的代码:
C c++ D Java(但请注意Java被编译为字节码,然后在运行时解释和/或重新编译) 帕斯卡
...然后你就有了像Python这样的东西,它们在两个阵营中都有:Python被广泛使用,没有编译步骤,但主要实现(CPython)是通过动态编译字节码,然后在VM中运行字节码来实现的,它可以将字节码写入文件(。Pyc, .pyo),无需重新编译即可使用。
这只是极少数,如果你做一些研究,你会发现更多。
这些差异正变得越来越不重要。传统上,脚本语言扩展了现有的程序……我认为这就是“脚本”的主要定义,它指的是为现有实体编写一组执行指令。然而,脚本语言起源于专有的和口语化的语法,现在流行的大多数脚本语言都与C有某种关系。
I think the "interpreted vs compiled" distinction is really a symptom of extending an existing program (with a built in interpreter), rather than an intrinsic difference. What programmers and laymen are more concerned about is, "what is the programmer doing?" The fact that one program is interpreted and another is compiled means very little in determining the difference in activity by the creator. You don't judge a playwright on whether his plays are more commonly read aloud or performed on stage, do you?
推荐文章
- 确定bash中是否存在一个函数
- 在Bash中测试非零长度字符串:[-n "$var"]或["$var"]
- 流行语言的语言书籍/教程
- 如何解决shell脚本中的符号链接
- 如何将PowerShell的输出重定向到执行期间的文件
- Bash脚本中范围内的随机数
- 按返回类型重载函数?
- 如何运行一个shell脚本在OS X双击?
- 如何模拟环境cron执行脚本?
- 正确Bash和shell脚本变量大写
- Bash中的错误处理
- 从bash模拟“group by”的最佳方法?
- 我如何写一个bash脚本重新启动一个进程,如果它死了?
- $?(美元问号)的shell脚本
- 如果arguments等于这个字符串,定义一个类似于这个字符串的变量