静态编译的语言可以替换脚本语言吗?

假设您可以获得动态解释器;静态编译语言可以替换脚本语言吗?我完全不明白为什么有人会使用脚本语言?我在谈论PC,而不是一个需要简单解释器的有限系统。我看到了一些python安装脚本,并看到了类似的python和C#解决问题的方法。那么为什么要使用脚本语言呢? 注意:有些事情让我对C#感到烦恼,我不是在问为什么不用C#代替。我在问为什么要使用脚本语言?我发现静态编译语言更容易调试,并且通常更容易编码。     
已邀请:
这些天在编译和口译之间几乎没有什么区别。看看如何执行解释语言 - 第一步是将脚本转换为某种内部可执行形式,比如可以通过更简单的指令集执行的字节代码。这基本上是编译为虚拟机格式。这正是现代编译语言所做的。当编译语言部署在服务器端Web应用程序中时,它们甚至可以动态地从源代码重新编译。因此,在编译/执行技术方面几乎没有区别。 唯一的区别在于指令集的细节,特别是在类型系统中。脚本语言通常(但不总是)动态输入。但是许多大型应用程序也是用动态类型语言编写的。所以,这里没有明确的区别。 我个人认为静态打字,远非“额外的不必要的努力”(正如它经常被描述)实际上是一个巨大的生产力助推器,使得在第一次尝试时正确编写短片段更加容易,这要归功于intellisense / autocompletion。为了强调这一点,看看微软如何通过向其添加静态类型信息(在特殊格式的注释中)来改进jQuery库,这样我们就可以在IDE中进行智能感知。 同时,静态语言(包括C#和Java)带来了更多动态类型。 所以我认为这些类别最终合并,区别毫无意义。     
维基百科说,脚本语言是一种控制其他软件的语言。您可以使用C#来实现这一点,但像Powershell这样的真正的脚本语言是专门为此而设计的。 我倾向于用比C#更“互动”的术语来思考脚本语言。使用脚本语言,您可以编写一行或两行代码,执行它并立即查看结果。在C#中,这不是那么容易,你必须将你的代码放在一个控制台应用程序中,或者从单元测试中解决它,或者将它输入到你没有智​​能感知的立即窗口。 快速写入,执行循环允许使用脚本语言快速完成原型“脚本”的原型设计,因为它可以为您提供每行代码的即时反馈。     
这种问题经常引发火焰战争,因为人们对各自的阵营充满热情。 在计算机的早期,Unix命令行工具和控制台shell提供了丰富的脚本环境,可以在其中完成各种处理。你不需要成为任何特定语言的专家程序员,并且可以使用管道结构来串联(双关语)各种程序(其他人编写)来按摩你的数据,这些数据主要是文本与二进制相关。可以快速轻松地更改批处理命令文件。您没有必须编辑的源文件,在Windows的情况下与外部静态或共享库/ DLLS链接编译。 脚本通常没有的一件事就是速度。您不会在脚本中编写设备驱动器和实时互联网交易AI系统。但是如果你每天对通过电子邮件或ftp收到的一些数据运行一个脚本,你通常不关心它需要多长时间,因为无论如何它都可以运行它。 回到现在,水变得泥泞。一些脚本环境提供了一种加速工具,它们会读取脚本并几乎在模块中编译和链接,这与普通的C ++或VB程序可能用于速度目的相同。但这非常不可靠,不能依赖。 那么你如何选择去哪条路线呢?使用脚本开始执行任务。如果它运行得太慢或者你不得不每5分钟做一次,那么你的部分脚本可能会受到用传统语言编写的部分的影响,或者整个事情都可以用一种语言编写。 喜欢任何涉猎和学习的东西     
每个用于不同的目的。用脚本语言编写的程序通常不是独立的;它们通常用作“胶水代码”或(如Robert Harvey所提到的)自动执行任务。您经常会发现嵌入在应用程序中的脚本语言解释器(参见Blender中的Python; GIMP中的Guile,Perl和Python;不同浏览器中的JS;无数游戏中的Lua)。另一方面,编译语言用于生成自包含的应用程序。脚本大多是跨平台的;编译的应用程序通常不是。 注意,脚本语言不一定使用交互式解释器(例如Perl),并且解释性语言不一定用于脚本(例如,使用PyGame制作的游戏)。还要注意,语言本身并没有使它们被解释或编译。你可以拥有一个C#解释器或一个Ruby编译器。有许多Lisp系统提供了解释器和编译器。     
我会将我的shell(bash)称为脚本语言,但我没有看到已编译的替换提交。 我喜欢使用scala,这是一种静态类型语言,带有类似解释器的REPL接口,并且由于类型干扰看起来非常像脚本语言;看看这里:http://www.simplyscala.com/。 但它并不意味着它是其他程序之间的粘合剂,因为对于小型工作,这些工作很容易通过手工和眼睛验证,这只是几行代码,我更喜欢使用shell。从一个目录跳到另一个目录在shell中是很舒服的,其中提示显示了我的位置。     
在我们开始之前,我不认为我曾经遇到过一个静态语言用户“没有”尝试使用脚本语言,包括我自己。这是一种不同的体验。 所以不行。基本上,您可以向静态语言添加功能,这使得它们看起来像脚本语言(如简单类型推断),但它们不一样: 许多脚本语言用户讨厌静态语言。他们感到受限制。脚本语言通常非常善于不以用户的方式进入,这在静态语言中牺牲了速度/正确性。 鸭子打字不会出现在静态语言中。 脚本语言用户不喜欢类型注释。实际上不可能为脚本语言提供类型推理系统,并且在某些语言中出现的简单类型推断现在仅适用于静态类型。 像猴子修补这样的技术(我认为这是一个非常糟糕的主意)在Ruby中很普遍,并且允许使用非常强大的技术,这些技术在静态语言中也不会很快出现。 这并不是说一个尚未设计的语言无法以相对静态的方式处理脚本语言功能,但相对于根深蒂固的Python / PHP / Perl / Ruby,它很难变得流行/ Javascript设置。因素是最接近的东西,AFAICT。 将会发生的是,使用JIT可以加快脚本语言的实现速度。     
螺丝刀可以更换锤子吗?不,因为你不是为了同一目的而使用它们。如果两者都存在,并且如果这么多人使用其中任何一个,那么必定有理由...... 同样的anwser: class inheritance vs prototype; 命令与oo; 静态与动态打字; 强烈对弱的打字; 手动内存管理与GC; C#vs Java; 蓝色与红色; 男人vs女人; 蝙蝠侠与超人(但我确实认为超人会胜利......等等,有氪石......哦,伙计,我不知道......) 等等...     
因为它是一种更高级别的语言,所以它更短,并且它不需要编译周期,这也使事情更短。     
  我在问为什么要使用脚本   语言?我发现静态编译   语言更容易调试和   通常更容易编码。 因为我发现松散类型的动态语言没有明确的编译运行周期,因此更容易调试并且通常更容易编码。     

要回复问题请先登录注册