编程语言的弱类型、强类型、动态类型、静态类型、解释型、编译型、脚本等概念解析

您所在的位置:网站首页 什么叫解释型编程语言 编程语言的弱类型、强类型、动态类型、静态类型、解释型、编译型、脚本等概念解析

编程语言的弱类型、强类型、动态类型、静态类型、解释型、编译型、脚本等概念解析

2024-05-31 21:21| 来源: 网络整理| 查看: 265

编程语言的弱类型、强类型、动态类型、静态类型、解释型、编译型、脚本等概念解析

在一些技术文档、编程书籍中,介绍编程语言的背景、发展历程,设计理念时,常常提到这些词:动态类型、静态类型、强类型,弱类型、解释型、编译型、脚本等。

如:Python属于强类型的动态脚本语言。

【强类型:不允许不同类型相加。

动态:不使用显示数据声明类型,且确定一个变量的类型是第一次给他赋值的时候。

脚本语言:一般也是解释性语言,运行代码只需要一个解释器,不需要编译。】

强类型语言:

强类型语言倾向于不支持类型的隐式转换。如,python不允许不同类型相加,整形+字符串会报类型错误。强类型语言是类型安全的语言。

弱类型语言:

弱类型语言支持类型的隐式转换,如,JavaScript中 整型变量a=1 + “abc”运行结果为字符串 1abc  , 一个变量的类型是由其应用上下文确定的。

【强类型和弱类型主要是站在变量类型处理的角度进行分类的。这些概念未经过严格定义,它们并不是属于语言本身固有的属性,而是编译器或解释器的行为。主要用以描述编程语言对于混入不同数据类型的值进行运算时的处理方式。强类型语言是指无论在编译阶段还是运行阶段,一旦变量绑定某种类型后,此变量会持有该类型,并且不能与其他类型表达式进行混合运算。弱类型则相反。

强类型语言也称为强类型定义语言。要求变量的使用要严格符合定义,所有变量都必须先定义后使用。

java、.NET、C++等都是强制类型定义的。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。例如你有一个整数,如果不显式地进行转换,你不能作为一个字符串使用。

与其相对应的是弱类型语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。特点:变量无须声明就可以赋值使用,变量赋值以后该变量才会被创建;变量的数据类型可以动态改变——一个变量可以赋不同数据类型的值。

PHP、Python、JavaScript等是弱类型语言。

“强类型”和“弱类型”并没有一个严格的、普遍接受的定义。这两个术语通常用于描述语言如何处理类型,特别是处理不同类型之间的交互和转换。

一般来说,强类型语言在类型安全性上有更严格的要求。在强类型语言中,若需要将一种数据类型转换为另一种,通常需要显式地进行转换。而且,编译器或解释器常常会在编译时间或运行时间进行类型检查以防止类型错误。例如,在Python中,你不能直接将一个字符串和一个整数相加。你必须显式地将其中一个类型转换为另一个类型才能进行加法操作。

在另一方面,弱类型语言在类型安全性上通常更为放松。它们可能会允许在不同类型之间进行隐式转换,或者允许进行一些在强类型语言中被禁止的类型相关的操作。例如,JavaScript就会允许你直接将一个字符串和一个数字相加,它会自动地将数字转换为字符串,然后将两个字符串进行连接。

C++允许某些类型的隐式转换,如int到double的转换,或者通过构造函数和转换操作符来进行用户定义类型的隐式转换。然而,C++对于类型的管理仍然相当严格。例如,你不能将一个指针随意地转换为一个整数,或者将一个结构体转换为一个不相关的结构体。这意味着,在很多情况下,你需要显式地进行类型转换。因此,我们会说C++是一种强类型语言,尽管它允许某些形式的隐式转换。】

静态类型语言:

是指在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型,某些具有类型推导能力的现代语言可能能够部分减轻这个要求.。

动态类型语言:

是在运行时确定数据类型的语言。变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型。如python中,变量a=1,则a的类型就是整型,若a=”abc”,a的类型就是字符串。

【类型检查时验证类型数据以及赋值是否合乎类型要求的一个过程。当编译器或解释器在编译阶段做类型检查还是在运行阶段做类型检查来定义编程语言是动态类型或静态类型。如果编程语言的类型检查发生在 “编译阶段”(Compile Time),则被定义为 “静态类型语言”。】

解释型

解释型语言(Interpreted language)使用专门的解释器( interpreter),将源程序逐行解释成特定平台的机器代码并立即执行的语言,不能脱离解释器独立运行。解释型语言的源代码会在执行到的那一刻才会被语言解释器转换为计算机可执行文件并执行,整个的运行过程会不断的解释,执行;解释,执行...... 即便新的一次运行到已经解释过的程序,解释器也依然还会再次解释,并执行。如:JavaScript、Python等都是解释型语言。

编译型

编译语言(Compiled language)需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。负责编译的程序自然就称为编译器(Compiler)。也就是源码需要经过编译器编译,生成计算机(操作系统)的可执行文件,或者计算机指令,才能够被计算机识别,并执行。完成的过程就是:程序员根据需求写出项目源代码,然后把源代码交由编译器将所有源码文件一次性编译,得到可执行文件,这时,就可以把可执行文件通过操作系统运行起来,就能看到实际的运行效果了。比如:C、C++、C#等语言都可视为编译型语言。

【编译是对高级语言程序进行一次性翻译,这样的好处是,一旦源程序被彻底翻译,它就可以重复运行,且今后都不再需要编译器和源代码,运行效率较高,但不跨平台;解释型语言则每次运行,都需要借助源程序和解释器,其最大的好处就是,程序有很好的可移植性,跨平台,运行效率相对较低。

标记语言

标记语言(Markup Language),是一种将文本(Text)以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码。与文本相关的其他信息(包括例如文本的结构和表示信息等)与原来的文本结合在一起,但是使用标记(markup)进行标识。如:HTML、XML

脚本语言

脚本语言是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。脚本(Script)语言一般是解释执行的,脚本通常是以文本 (ASC) 保存, 只是在被调用时进行解释或者编译。如:JavaScript、VBScript、PHP、Python、Ruby。

早期的脚本语言经常被称为批处理语言或作业控制语言,如Windows cmd.exe batch,、Windows PowerShell等

在许多方面,高级编程语言和脚本语言之间互相交叉,二者之间没有明确的界限。

编译型语言

编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成 为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如 C、C++。

编程语言

编程语言(programming language)也称"计算机语言",是让程序员用来定义计算机程序的形式语言,用来向计算机发出指令。可以分成机器语言、汇编语言、高级语言三大类。

机器语言是用二进制代码表示的计算机能直接识别和执行的机器指令的集合。

汇编语言是面向机器的程序设计语言,汇编语言的主体是汇编指令,汇编指令是机器指令便于记忆的书写格式。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编。

高级语言与计算机的硬件结构和指令系统无关,它有更强的表达能力,可方便地表示数据的运算和程序的控制结构,能更好的描述各种算法,而且容易学习掌握。与汇编语言一样,机器也不能直接执行用高级语言编写的程序,必须经过转换才能执行,按转换方式又分为编译、解释。

【编译:是将文本的源代码翻译成机器指令,这个机器指令可以是面向解释器、虚拟机的(如vb,java,python),也可以是面向cpu的(如c),这是一个编译期的行为,修改了代码就需要重新编译,不改代码就无需重复执行编译过程

解释:是将文本源代码或者非CPU直接能理解的机器指令转换为CPU指令集,这是运行时的行为,每执行一次,都需要经过一次解释过程。】

特别提示:随着语言的发展演化,语言特征交叉重叠现象,界定的界限可能不太明确,不同的人从不同的角度可能有不同的看法,对此不必持僵硬机械的观念。【有人提出不必过度强调静态、动态、强类型、弱类型,认为没有什么太大的意义,原因编程语言是发展变化的,各种语言特色互相渗透了。】

关于这些,下面资料不错,特地给出链接,可以参考 

弱类型、强类型、动态类型、静态类型语言的区别是什么?弱类型、强类型、动态类型、静态类型语言的区别是什么? - 知乎

编程语言傻傻分不清:弱类型、强类型、动态类型、静态类型 编程语言傻傻分不清:弱类型、强类型、动态类型、静态类型 - 腾讯云开发者社区-腾讯云

编程语言之美,在动、静之态,在强、弱之间,分解释、编译之道 编程语言之美,在动、静之态,在强、弱之间,分解释、编译之道 - 个人文章 - SegmentFault 思否

标记语言、脚本语言和编程语言的含义和比较 标记语言、脚本语言和编程语言的含义和比较_标记语言和编程语言的区别_晨曦之园的博客-CSDN博客



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3