静态类型和动态类型VS强类型和弱类型
强类型语言和静态类型语言有什么区别?
静态类型的语言具有类型系统,该类型系统在实现时由实现(编译器或解释器)检查。类型检查拒绝某些程序,并且通过检查的程序通常带有一些保证。例如,编译器保证不对浮点数使用整数算术指令。
关于“强类型”的含义并没有真正的共识,尽管专业文献中使用最广泛的定义是使用“强类型”语言,但是程序员不可能解决类型系统所施加的限制。 。这个术语几乎总是用来描述静态类型的语言。
静态与动态
静态类型的反义词是“动态类型”,这意味着
- 运行时使用的值分为几种类型。
- 有关如何使用此类值的限制。
- 违反这些限制时,违反将被报告为(动态)类型错误。
例如,Lua是一种动态类型的语言,除其他外,还具有字符串类型,数字类型和布尔类型。在Lua中,每个值都完全属于一个类型,但是这并不适用于所有动态类型语言的要求。在Lua中,允许串联两个字符串,但不允许串联一个字符串和一个布尔值。
强vs弱
“强类型”的反义词是“弱类型”,这意味着您可以在类型系统周围工作。众所周知,C是弱类型的,因为任何指针类型都可以通过强制转换直接转换为任何其他指针类型。Pascal原本是强类型的,但是设计的监督(未标记的变体记录)在类型系统中引入了漏洞,因此从技术上讲,它是弱类型的。真正强类型语言的示例包括CLU,Standard ML和Haskell。实际上,标准ML已进行了多次修订,以消除在广泛部署该语言后发现的类型系统中的漏洞。
这到底是怎么回事?
总的来说,谈论“强”和“弱”并没有多大用处。类型系统是否存在漏洞与漏洞的确切数量和性质,在实践中出现的可能性以及利用漏洞的后果相比,并不那么重要。实际上,最好完全避免使用术语“强”和“弱”,因为
业余爱好者经常将它们与“静态”和“动态”混为一谈。
显然,有些人使用“弱类型”来谈论隐性转换的相对盛行或不存在。
专业人士无法就术语的确切含义达成共识。
总体而言,您不太可能通知或启发您的听众。
可悲的事实是,在类型系统方面,“强”和“弱”在技术含义上并没有达成共识。 如果要讨论类型系统的相对强度,最好确切讨论提供了什么保证和不提供什么保证。例如,一个很好的问题是:“是否一定要通过调用该类型的构造函数之一来创建给定类型(或类)的每个值?” 在C语言中,答案是否定的。在CLU,F#和Haskell中,是的。对于C ++,我不确定,我想知道。
相比之下,静态类型化意味着在执行程序之前先检查程序,然后在启动程序之前将其拒绝。 动态类型化意味着在执行过程中会检查值的类型,而类型错误的操作可能会导致程序停止运行或在运行时发出错误信号。静态类型化的主要原因是要排除可能具有此类“动态类型错误”的程序。
一个暗示另一个吗?
从学徒的角度来看,不可以,因为“强”一词实际上没有任何意义。但实际上,人们几乎总是做以下两件事之一:
他们(错误地)使用“强”和“弱”来表示“静态”和“动态”,在这种情况下,他们(错误地)正在交替使用“强类型”和“静态类型”。
他们使用“强”和“弱”来比较静态类型系统的属性。很少有人听到有人谈论“强”或“弱”动态类型系统。除了FORTH,它实际上没有任何类型的类型系统,我无法想到可以颠覆类型系统的动态类型语言。根据定义,这些检查会进入执行引擎,并且在执行每个操作之前都会对其进行检查。
无论哪种方式,如果一个人称一种语言为“强类型”,那么这个人很可能在谈论静态类型的语言。
静态类型和动态类型VS强类型和弱类型的更多相关文章
- 解释型vs编译型 动态vs静态 强类型vs弱类型
------------------------------------------------------------ 释型.动态语言与静态语言.强类型语言与弱类型语言的区别 编译型和解释型 我们先 ...
- c#中的强类型、弱类型和泛型
强类型和弱类型的变量都有两个属性:类型和值. 强类型的变量类型是不能改变的,弱类型的变量类型是随需改变的,这是强弱的真正含义. 我们在编写c#代码时,变量类型是明确的,不可更改的,如string就是s ...
- [转]c# 泛类型(泛型) 以及强类型与弱类型的 理解及优化
[泛型的概念](1)没有泛型的时候,所有的对象都是以object为基础,如果要使用时必须进行强制类型转换,如果对于值类型,则会导致不断拆箱装箱的过程,对系统消耗很大.(2)使用泛型时不需要通过obje ...
- sqlite 的比较等运算是根据不同的值而不同的,并不是根据的字段类型,因为 sqlite 是弱类型字段
sqlite 的比较等运算是根据不同的值而不同的,并不是根据的字段类型,因为 sqlite 是弱类型字段 --------------------------------------------- ...
- C++中的静态类型和动态类型的定义
当我们使用存在继承关系的类型时,必须将一个变量或者其他表达式的静态类型与该表达式表示对象的动态类型区分开来. 表达式的静态类型在编译时总是已知的,它是变量声明时的类型或者表达式生成的类型: 而动态类型 ...
- MVC强类型和弱类型的区别
1 强类型的处理 首先必须要有一个对象的实体类,UserINfo就是一个实体类,如下: public class UserInfo() { public int Id{set;get;} publi ...
- 强类型 和弱类型 c#
强类型的意思是,在编译的时候,已经确定类型了. 弱类型的意思是,在运行的时候,才确定类型
- python是强类型还是弱类型语言
几句话了解python特性 Python 是强类型的动态脚本语言 好多人对python到底是强语言类型还是弱语言类型存在误解,其实,是否是强类型语言只需要一句话就可以判别, 强类型:不允许不同类型相加 ...
- 【C#基础概念】编程语言:弱类型、强类型、动态类型、静态类型
一.看图区别编程语言 一般来讲,看第一个图就够了 这图是引用的,有错误,Python是强类型,但是图片中却归为弱类型了. 业界堆静态和动态的区分达到共识. 但是堆强类型和弱类型语言还未达成共识.我个人 ...
- Python 到底是强类型语言,还是弱类型语言?
0.前言 我在上一篇文章中分析了 为什么 Python 没有 void 类型 的话题,在文章发布后,有读者跟我讨论起了另一个关于类型的问题,但是,我们很快就出现了重大分歧. 我们主要的分歧就在于:Py ...
随机推荐
- SqlSugar 代码生成 数据库及表
在实际开发中如何在sqlsugar中通过model生成数据表呢? 废话不说上代码 一.引入sqlsugarcore 二.编写Model代码 先写一个model举例 namespace 用户管理.Mod ...
- IDEA通过Spring Initalizr新建SSM (2)
之前的方式是通过官网初始化demo(URL:https://start.spring.io/)现在记录一下通过IDEA自带的初始化器新建SSM框架 1.打开IDEA,点击新建,出现如下图菜单,点击Sp ...
- 封装python代码,避免被轻易反编译
可使用Cython对python代码进行封装,封装成.pyd库,大致流程可参考: cython打包py成pyd,pyinstaller打包uvicorn服务过程记录_Bolly_He的博客-CSDN博 ...
- K8s高可用集群部署(四)
k8s官网高可用部署参考:https://kubernetes.io/docs/setup/independent/high-availability/ 目录 一 ,k ...
- STM32F4 HAL库中是如何实现UART IO配置的?
1.配置串口IO.中断等底层的东西需要在用户文件中重写HAL_UART_MspInit函数2.hal库是在stm32f4xx_hal_msp.c文件中重写的HAL_UART_MspInit函数,分析如 ...
- Vue3+vite+Echarts案例大屏可视化--千峰(推荐)
https://www.bilibili.com/video/BV14u411D7qK?p=33&spm_id_from=pageDriver&vd_source=e2cfe74d93 ...
- python 识别登陆验证码图片(完整代码)
在编写自动化测试用例的时候,每次登录都需要输入验证码,后来想把让python自己识别图片里的验证码,不需要自己手动登陆,所以查了一下识别功能怎么实现,做一下笔记. 首选导入一些用到的库,re.Imag ...
- vue v-for 使用
html <div> <el-button @click="addListItem" type="primary" style="p ...
- Springboot实现文件上传下载功能
一.文件上传 1. controller层 @RestController @RequestMapping(value = "/excel") public class Uploa ...
- Ribbit Mq 实现延迟消息
--------------------好记性不如烂笔头--------------------------- windows 环境,使用 rabbit Mq 需要安装, erl 和 rabbi ...