一文搞懂语言的静态类型动态类型、强类型弱类型、编译型解释型

23 篇文章 0 订阅
订阅专栏
13 篇文章 0 订阅
订阅专栏
13 篇文章 0 订阅
订阅专栏

首先我们先从我们一个经常使用的语言入手,来探讨语言的各种分类。

比如说我最近在学习的golang,官方对他的定义是

 Go is statically typed, explicit and modeled after the C programming language.

对explicit的解释如下

Explicit language is language that is fully and clearly expressed or formulated,

 leaving nothing implied or ambiguous

我们可以知道go是一个静态显式的语言,而显式则意味着该语言的定义和表达是清楚明了的,我们在这里可以简单的理解为go定义的任何单元都需要有明确的类型,可以简单的理解为对静态类型的解释。

同时我们又知道我们在编写go语言程序时,代码会保存在xxxx.go文件下,我们执行go bulid xxxx.go,生成当前操作系统下可执行文件,在执行可执行文件;以上的步骤等同于go run xxxx.go。所以go是一种编译型语言。

Golang是一种静态强类型,编译型语言

我们在举一个Java的例子,官方给出的解释是Java是一种静态强类型语言,但是在编译型还是解释型语言上大家产生了分歧,我们首先回顾Java代码完成到执行这段时间发生了什么

 在这里插入图片描述

首先xxx.java会被javac编译器编译成xxx.class的字节码文件,之后字节码文件会被JVM根据操作系统的不同解释成操作系统可以理解的机器码并运行出结果。

根据以上我们可以看出并不能单纯的把Java定义为编译型语言或解释型语言,现在大部分人认为Java是一种半编译半解释型语言,由于编译型和解释型的分类并不能很好的对语言分类,所以现在这种语言分类以及逐渐退出历史舞台。

 Java是一种静态强类型,半编译型半解释型语言


编译型语言和解释型语言

通过高级语言编写的源码,我们能够轻松理解,但对于计算机来说,它只认识二进制指令,源码就是天书,根本无法识别。源码要想执行,必须先转换成二进制指令。

然而,究竟在什么时候将源代码转换成二进制指令呢?不同的编程语言有不同的规定:

简单地理解,编译器和解释器其实就是一个“翻译工具”,对源代码进行“翻译”是一个很复杂的过程,大致包括词法分析、语法分析、语义分析、性能优化、生成可执行文件等五个步骤。

编译型语言和解释型语言的执行流程如下所示:

编译型语言

对于编译型语言,开发完成以后需要将所有的源代码都转换成可执行程序,比如 Windows 下的.exe文件就是一个可执行程序,它里面包含的就是机器码,只要拥有这个可执行程序,就可以随时运行,不需要再重新编译,也就是“一次编译,无限次运行”

在运行的时候,我们只需要编译生成的可执行程序,此时就不再需要源代码和编译器,所以编译型语言可以脱离开发环境运行。

编译型语言通常是不能跨平台的,也就是不能在不同的操作系统之间随意切换。

优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。

缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。

代表语言:C、C++、Golang、Pascal、swift

解释型语言

对于解释型语言,每次执行程序都需要一边转换一边执行,用到哪些源代码就将哪些源代码转换成机器码,用不到的则不进行任何处理。

相比于编译型语言,解释型语言几乎都能跨平台,“一次编写,到处运行”是真实存在的,而且比比皆是。

优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。

缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。

代表语言:JavaScript、Python、PHP、Ruby

类型原理优点缺点
编译型语言通过专门的编译器,将所有源代码一次性转换成特定平台(Windows、Linux、macOS等)的机器码(以可执行文件的形式存在)。编译一次后,脱离了编译器也能运行,并且运行效率高。可移植性差,不够灵活。
解释型语言通过专门的解释器,根据需要可以将部分或全部源代码转换成特定平台(Windos、Linux、macOS等)的机器码。跨平台性好,通过不同的解释器,将相同的源代码解释成不同平台下的机器码。一边执行一边转换,效率较低。
 

静态类型和动态类型

静态类型

静态类型语言中,变量的类型必须先声明,即在创建的那一刻就已经确定好变量的类型,而后的使用中,你只能将这一指定类型的数据赋值给变量。如果强行将其他不相干类型的数据赋值给它,就会引发错误。

静态语言是编译期间做检查数据类型的语言,即写程序时要声明所有变量的数据类型,是固定的。使用数据之前,必须先声明数据类型(int ,float,double等)。相当于使用之前,首先要为它们分配好内存空间。

例如:Java、C、Golang、C++

优点:结构非常规范,便于调试,方便类型安全

缺点:为此需要写更多类型相关代码,较复杂。

动态语言

运行期间才做数据类型检查的语言,即动态类型语言编程时,永远不用给任何变量指定数据类型。该语言会在第一次赋值给变量时,在内部将数据类型记录下来。

例如:Python、PHP、Ruby

优点:方便阅读,不需要写非常多的类型相关的代码;

缺点:不方便调试,命名不规范时会造成读不懂,不利于理解等。


强类型和弱类型

强弱之分,体现在对类型的检查严格程度上,弱类型语言对于变量类型的检查比较宽松,容忍隐式类型转换这种事情的发生。何为隐式类型转换,一般有两种形式:

  1. 相关类型之间隐式转换
  2. 不相关类型之隐式间转换

举例子来说,一个int类型的数据与一个float类型的数据相加,最终的结果是一个float类型的数据,这个过程就发生了隐式类型转换,int类型数据首先被转成float类型,然后与另一个float进行操作,这便是相相关类型之间隐式转换。

一个int类型数据与一个字符串类型数据相加,竟然没有发生错误,得到的结果是一个字符串,int类型数据隐式转换为字符串,可他们原本是两个不相干的数据类型,这种就是第二种隐式转换。

强类型

强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。

例如:Java、Python、Golang

弱类型

数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。

例如:C、PHP、JS


下面是一张图对大部分语言的分类

java类型转会有性能消耗吗_Java代码性能优化总结(转)
weixin_39554172的博客
02-24 2449
前言代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优...
一文搞懂JAVA与Go垃圾回收
tomfyyds的博客
11-30 449
现代高级编程语言管理内存的方式分自动和手动两种。手动管理内存的典代表是C和C++,编写代码过程中需要主动申请或者释放内存;而 PHP、Java 和 Go等语言使用自动的内存管理系统,由内存分配器和垃圾收集器来代为分配和回收内存,其中垃圾收集器就是我们常说的GC。本文中,笔者将从原理出发,介绍JavaGolang垃圾回收算法,并从原理上对他们做一个对比。 Java垃圾回收 垃圾回收区域及划分 在介绍Java垃圾回收之前,我们需要了解Java的垃圾主要存在于哪个区域。JVM内存运行时.
动态类型静态类
diaoju3333的博客
06-13 92
静态类编译阶段类型检查,编译器负责。 动态类型:运行时类型检查,程序员负责。 灵活性与多干活的二难。 转载于:https://www.cnblogs.com/feng9exe/p/9179496.html...
静态类 动态类型
autumn20080101的专栏
10-31 629
C++ 标准明确定义: 1.3.3 dynamic type [defns.dynamic.type] the type of the most derived object (1.8) to which the lvalue denoted by an lvalue expression refers. The dynamic type of an rvalue expression is
静态类动态类型
weixin_43753680的博客
08-11 2133
静态类动态类型 https://www.jianshu.com/p/bc492fcbf18f 编程语言按照类型检查可以分为两大类:静态类 (Static Typing) 和 动态类型 (Dynamic Typing)。在现在比较流行的这些语言里,静态类的代表人物有 Java、C/C++、Golang 等,动态类型Python、Ruby 等。 静态类语言中,变量具有类型,而且在编译期确定,具有某一类型的变量只能持有相同类型的数据。动态类型语言中,变量没有类型,只有数据有类型,变量可以持有任意类型
静态类语言
an_Ran_的博客
01-14 207
静态类语言指的是在编译之前就可以确定类型语言动态类型则是在编译中才得知类型语言
静态类语言(statically typed language )
kaktos
12-14 917
静态类语言(statically typed language )    在这种语言中,数据类型是在编译期间就决定的,如Java 和C动态类型语言(dynamically typed language)   教本语言中大都在解释执行时才动态决定数据的类型(给变量赋值时),如PythonJavaScript类型语言(strongly typed language)   数据必须有类型,不存在不...
JavaScript源代码】一文搞懂TypeScript的安装、使用、自动编译的教程.docx
12-29
TypeScript的流行度日益增长,尤其适合大规模项目和库的开发,因为它提供的类型和ES6+支持可以显著提高代码质量和开发效率。随着JavaScript语言的不断发展,TypeScript成为了许多开发者首选的开发工具,特别是在...
JAVA语言规范 JAVA SE 8 - 类型、值和变量
aha_jasper的博客
04-04 457
JAVA语言规范JAVA SE 8 - 类型、值和变量类型和值的种类4.2简单类型和值4.2.1整数类型和值4.2.2整数操作4.2.3浮点数类型、格式和值4.2.4浮点数操作4.2.5 boolean类型和布尔值4.3引用类型和值4.3.1 对象4.3.2 Object 类4.3.3 String 类4.3.4当引用类型相同时4.4类型变量4.5.1参数化类型类型引元4.5.2参数化类型的成员...
Roslyn 入门:使用 .NET Core 版本的 Roslyn 编译并执行跨平台的静态的源码
walterlv - 吕毅
06-02 6469
Roslyn 是微软为 C# 设计的一套分析器,它具有很的扩展性。以至于我们只需要编写很少量的代码便能够编译并执行我们的代码。 作为 Roslyn 入门篇文章之一,你将可以通过本文学习如何开始编写一个 Roslyn 扩展项目 —— 编译一个类,然后执行其中的一段代码。 本文是 Roslyn 入门系列之一: Roslyn 入门:使用 Visual Studio 的语法可视化(Synta...
Java动态语言还是静态语言,是类型还是类型
热门推荐
人生到处知何似,应似飞鸿踏雪泥。
10-31 1万+
一. 前言 今天小熙突然想到一个问题,那就是Java到底是动态语言还是静态语言,是类型还是类型呢?虽然知道但是还是不够深入,接下来就一起探讨下吧。 二. 图释 小熙碰巧看到一张,完美的区分了以上的问题 如图所示,Java类型语言静态类。下面解释下为什么。 三. 解释 静态类语言:变量定义时有类型声明的语言。 (1)变量的类型编译的时候确定 (2)变量的类型在运行时不能修改 这...
动态类型静态类
weixin_33751566的博客
11-30 376
2019独角兽企业重金招聘Python工程师标准>>> ...
静态类语言动态类型语言
bumingchun的专栏
03-17 772
静态类(statically typed )语言编译时确定变量的类型(C/C++),优点是可以编译时检查错误,可以较早的发现错误。 动态类型( dynamically typed)语言在运行时确定变量的类型(Pythod, Perl, Matlab ),优点是可以更快的编程,不需要指定类型,缺点是需要自己检查变量类型(type-checking)。A language is staticall
动态类型语言静态类语言的区别
岳来的博客
08-15 4213
动态类型语言静态类语言的区别
类型类型动态类型静态类
wangyx019的博客
12-14 610
1,动态语言的最大特点就是duck type,他的灵活性可以完全无视什么多态和接口,不用被类型束缚。但是这就导致了你的大部分错误都要再运行时才能发现 2, 类型,定义好类型后,编译器给你检查赋值的类型类型,由于没有定义,必须编写代码进行赋值检查。 类型,IDE比较容易定位错误的赋值类型,所以这样的语言使用IDE比较方便 类型,IDE基本无法辨别赋值类型的错
编程语言 - /动静态类 - 整理
"代码"的日常搬运
04-28 3563
了解编程语言的分类及显著的区别, 帮助理解编程语言的本质,和帮助快速学习一门新的语言.
编程语言类型系统:静态类动态类型的比较
最新发布
AI天才研究院
12-26 979
1.背景介绍 编程语言类型系统是指编程语言中用于描述程序中变量类型、数据结构、算法等的一套规则和约束。类型系统可以分为静态类动态类型两种。静态类系统在编译期或者解释期就会对程序的类型进行检查,而动态类型系统则是在程序运行时进行类型检查。这两种类型系统各有优缺点,在不同的应用场景下都有其适用性。 在本文中,我们将从以下几个方面进行讨论: 背景介绍 核心概念与联系 核心算法原理和具体操...
编译语言解释语言动态语言,静态语言介绍
woailinqingxia的博客
10-11 1330
编译语言解释语言动态语言,静态语言介绍
什么是类型语言类型语言动态语言、静态语言
05-02
类型语言类型语言是指变量类型检查的严格程度,动态语言和静态语言是指变量类型检查的时机。 类型语言指变量类型检查非常严格,不同类型之间的转换必须显式地进行或者进行类型转换。类型语言则相对宽松,变量类型可以进行隐式转换或者自动转换。 动态语言指变量类型检查是在运行时进行的,而静态语言指变量类型检查是在编译时进行的。在动态语言中,变量类型可以在运行时被改变,而在静态语言中,变量类型编译时就已经确定,无法改变。 举例来说,Python 和 Ruby 是类型动态语言Java 和 C# 是类型静态语言JavaScript 和 TypeScript 是类型动态语言,但 TypeScript 通过类型注解提供了静态类检查的能力。
写文章

热门文章

  • 训练集,测试集和验证集 17632
  • 标准化与归一化 16021
  • 剑指OFFER DAY5 6753
  • 剑指OFFER DAY9 6664
  • OSI七层模型中各层网络协议及端口 4738

分类专栏

  • 计算机网络随笔 7篇
  • 操作系统 5篇
  • 刷题心得 23篇
  • 数据库 15篇
  • Go随笔 13篇
  • Java八股文 13篇
  • Redis随笔 2篇
  • Docker 1篇
  • 机器学习随笔 9篇
  • 排序算法 11篇
  • c/c++随笔 1篇

最新评论

  • SQL语句实现找到一行中数据最大值(greatest)/最小值(least);mysql行转列

    2401_83362305: 多列平均值怎么求

  • 【Go自学】一文搞懂Go Comparable和Ordered类型

    软件哲学: 非常好的文章! 在官方包"slices"中,提可供了对slice进行比较的泛型方法。

  • 【Go自学第五节】Go中函数切片传递与指针传递

    科蚪也能飞~: 像map一样不是更加方便么

  • 【Go自学第五节】Go中函数切片传递与指针传递

    科蚪也能飞~: 为什么Go的切片不返回指针呢?

  • HTTP与HTTPS的区别;TLS握手过程

    pcdd: HTTP与HTTPS的区别;TLS握手过程,表情包 君之妙笔,令鄙不及,佩服佩服,如若能给小弟回个赞,必将感激涕尽!

最新文章

  • Linux操作系统命令大全
  • MySQL数据库优化的八种方式
  • 【Go自学】一文搞懂Go Comparable和Ordered类型
2023年28篇
2022年71篇
2021年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Weber77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家玻璃钢名人半身雕塑图片大全厦门玻璃钢卡通人物雕塑云浮玻璃钢花盆邵阳玻璃钢气球雕塑云浮玻璃钢动物雕塑产品介绍玻璃钢仿真牛雕塑夜晚内发光的玻璃钢雕塑玻璃钢雕塑专业厂家供应北京玻璃钢雕塑雕刻公司宜春玻璃钢雕塑订做价格安阳专业校园玻璃钢雕塑厂家瑶海玻璃钢花盆花器濮阳镂空玻璃钢仿铜雕塑开封室内玻璃钢雕塑定做厂家进商场美陈施工韶关玻璃钢雕塑图片柳州市玻璃钢雕塑厂宝鸡哪里有玻璃钢仿铜雕塑厂家太原户外玻璃钢雕塑恐龙玻璃钢雕塑定制玻璃钢孔子雕塑哪里有园林玻璃钢动物雕塑常见商场美陈生产公司新密肖像玻璃钢仿铜雕塑公司郑州玻璃钢浮雕抽象景观雕塑制造漯河肖像玻璃钢景观雕塑公司玻璃钢大型莲花雕塑鹰潭园林景观玻璃钢雕塑楼盘玻璃钢雕塑生产保山玻璃钢雕塑厂家直供香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化