当前位置: 首页>学习园地>文章详情

Java脚本编程和传统编程的特点是什么?

发布时间:2021-05-14

信息来源:

传统程序设计

       像C++、C这样的语言是作为通用语言设计的。一般来说,它必须从头开始,而不是一开始就抽象。否则,它就不能做抽象之前发生的事情,因为那不是他的任务。它在历史上能很好地解决的问题是在系统编程领域。

通用语言通常是一种系统编程语言,所以它往往是基于一种接近计算机底层的离散形式,其他语言通常被称为自然语言,或者DSL语言(相对于C++,C)功能不强,不深入底层,不能控制计算机做任何一般的事情,所以它通常基于高层模型。

通用语言通常在语法上是严格的(如我们所见,C,C++,Java)。除了系统字段以外的应用领域通常是特定的、灵活的,而不是一般的,因此传统的“通用语言语法+通用库”的方式不适合解决这样的问题(因为它不是传统语言能够并且已经非常抽象的那些领域)。

特定的应用领域往往需要更具体的抽象,需要特定的语言元素和特定的语法结构才能很好地表达出来。例如,在文本处理领域(当C++处理文本时,没有特殊的标准文本库,也没有直接支持regex表达式的语言级支持),Python显然比C++更容易支持该领域的工具。

除了比较C++和python之外,我们必须知道使用传统的系统编程方法和语言来完成特定的字段是不合适的,因为如果我们坚持这样做,那么我们要么需要通用语言来提供新的语法(这非常困难,语言的扩张是不现实的,它会导致语言过于复杂多变。或者我们可以在不改变语法的情况下提供新的库,比如文本模式匹配。C++在语法级别没有直接支持,所以它使用boost.regex。换言之,这些方法只需要在一般应用下进行专门化,让它们做一些自己不擅长和意想不到的事情。C和C++并不是绝对的“通用”(它们只是DSL,C是系统实现的DSL,C++是系统开发的DSL——注意,我们不考虑C++的第二层)。

脚本编程

       脚本语言是相对C这一类系统编程语言来说的,C最重要的特点就是它用数据结构加算法来解释系统底层开发的手段,用C开发绝对离不开对系统原理和数据结构的理解,而这些原理,包括C本身的实现,都是基于数据结构跟算法来解决问题的[明白这点很重要,因为有人希望学习C语言作Web编程,这就有点南辕北辙了,而且这个认识可以端正你学C语言解决问题的方向,所以说大思想是重要的。

而脚本语言和虚拟机语言,可以基于更高层的开发逻辑和设计方式来解决问题实现编程,比如Python,Ruby,可以运用包括OO,DP在内的高层语言逻辑[关于Python语言特点的介绍请参照有关章节],程序员不必涉入数据结构这些与底层和解决大家都解决过的问题直接相关的东西,仅提倡在复用层面利用这些解决过的东西能编程就可以了抽象的语言,意味着它可以少干些轮子重造方面的事情。比如脚本式开发,OO层面的复用,当然,任何事情都是不完美的,太抽象了,往往也就同时失去了C能控制底层的那些能力。

因此,C++,C这样的语言必须要涉及到汇编原理里面的东西,而DSL可以以任何高层的形式被体现,比如不需要编译的UML图都是,POWERPOINT代码都是DSL,根本不需要编译器这样的图灵完备装备。

传统VS脚本

       系统语言因为拖着一个系统,其本质上并非专用的应用开发语言。而只是通用的系统开发语言,有它因为移殖和平台问题导致的一系列大问题[C++唯独用template,Boost等方法实现了另外一种"python"]。而脚本语言并不需要对某个平台进行开发,从而需要考虑移殖和速率的问题。因为系统问题不是它的初衷和设施基础,它直接面向应用编程(系统编程,系统逻辑不由这类语言直接实现的,它只是封装并bind),由于整个地扔掉了系统这个大包袱,一切编程问题都是脚本语言内部的事情。而且,脚本语言本身很高级,往往提供大量库(甚至DSL相关的库),这就对熟悉了编程的人来说,显得尤为简单(复用做到了极致)。

抽象语言往往比不上系统语言对于计算机编程方面的功能强大[这也就是脚本语言比不上编译语言这样的语言对计算机编程方面的功能强大。道理很简单,因为它太抽象了,所以在它抽象了的地方,它反而不能发挥这个层面的能力,我们将在稍后谈谈脚本语言。脚本语言是一种抽象语言]。因为抽象语言的虚拟机往往是高级机器,根本不像我们的硬件机器那么底级,图灵模型对应我们的硬件机器和架构,而虚拟机往往跟硬件架构差别过大,因此脚本语言和系统语言是为二个不同的机器设计他们干的事。

换言之,系统语言面向系统上的应用,而脚本语言面向广泛意义上的应用(可以当然bind系统语言开发的系统逻辑,这也往往是脚本语言的与现有代码进行工作时通常使用的方法),这就是脚本语言之于系统编程语言的特点所在。它们之间的区别正是由它们各自的任务决定的,要分清高级系统语言C++和脚本应用语言之间的区别。

意义

       脚本语言实际上着重脚本二字,而不是语言二字,因为脚本语言它的最主要的关注点就是为现有代码准备一个伪码系统(opcodesystemusedtousesometh),至于你是用图灵完备的语言或是用其它设施完成,那不是为码系统必然的性质。

脚本语言独立平台,提供高阶的设计手段,和大量的随语言一起分布的,作为语言标准的直面应用的库。(而系统编程语言强调事事从最基本的类型做起,因为系统语言要求通用和提供可定制性,所以不能提供太高的设计手段,和可供复用的库设施,所以系统语言本身就被设计成那种能很好重造轮子的语言)。

在这个意义上,脚本语言其实是一种整合系统(提供一致的类型且开发时动态的类型,黑盒化平台)与整合设计(提供OO或template这样的高高阶设计),整合问题(大量标准库的出台直面各种问题)的语言。它将一切开发上的事,做到语言中,做到库中,不提倡一步一步实现解决过了的问题。

所以,编程应是一种很有意思的事情,在脚本编程这个层面开始体现出来。因为这里的复用程序最高(编程几乎等于计算机应用能力)。库和语言功能足够丰富的语言,几行代码就可以勾勒出一个程序来,而且标准库,它提倡事事规定以统一的方式来进行(标准化编程),比如pystdlib,jdk,不需要为诸多的tricks犯迷糊。