首页 > 编程语言 >编程语言分类

编程语言分类

时间:2022-11-07 17:01:13浏览次数:59  
标签:运算 转换 变量 编程语言 分类 改变 类型 语言

概念描述
静态 全部或者几乎全部的类型检查是在编译期进行的
动态 类型的检查是在运行期进行的
强类型 类型一旦声明就不能改变
弱类型 变量在运行期时可以改变
编译型 必需编译成 CPU 能识别的二进制代码
解释型 语言层面上不需要直接运行在 CPU 上,但最终的语言运行环境还是跑在 CPU 上

在机器代码这个层面,其实是分不出什么数据类型的。在机器指令眼里,那就是0101,它并不对类型做任何要求,不需要知道哪儿是一个整数,哪儿代表着一个字符,哪儿又是内存地址。你让它做什么操作都可以,即使这个操作没有意义,比如把一个指针值跟一个字符相加。类型是针对一组数值,以及在这组数值之上的一组操作。类型是高级语言赋予的一种语义,有了类型这种机制,就相当于定了规矩,可以检查施加在数据上的操作是否合法。

强类型和弱类型。强类型语言中,变量的类型一旦声明就不能改变,弱类型语言中,变量类型在运行期时可以改变。强类型语言不允许违法操作,因为能够被检查出来。弱类型语言则从机制上就无法禁止违法操作,所以是不安全的。比如你写了一个表达式 a*b。如果 a 和 b 这两个变量是数值,这个操作就没有问题,但如果 a 或 b 不是数值,不同的语言可能做出不同的动作,弱类型语言隐式的帮你做出选择

强类型语言的典型特征,它们不会处理与类型定义明显矛盾的运算,而是把它标记为一个问题,并作为错误抛出。和强类型语言不一样,当我们执行一些与类型定义不匹配的运算时,弱类型语言尝试提供帮助,它可能会临时转换值的类型,让它符合当前运算不报错

例如一个数值变量和一个字符串变量做加法,强类型可能直接报出错误。而弱类型可能将两个转化成字符串然后进行拼接,也可能将其转换成两个数值类型然后做加法运算。【不同的语言和编译器对不同的类型转化会进行不同的约定。】

类型系统的“强/弱”指的是当编程语言遇到与类型定义不匹配的运算时,尝试猜测或者转换的力度/程序。它不是一条明确的界限,而是一个范围。

  • 强类型语言在遇到与类型定义明显矛盾的运算时,一般会当做一种语法错误,而不会尝试对值的类型进行转换。

  • 弱类型语言恰好相反,会猜测程序员的意图,并对其中一些值的类型进行转换,以让程序继续执行。

强语言,让你必须明确自己的语义,不带来歧义,而弱语言会尽可能的保证你编程的连贯性,如果有歧义,会帮你做选择,所以排查时很不方便,会出现意想不到的结果

目前的趋势是,某些动态类型语言在想办法增加一些机制,在编译期就能做类型检查,比如用 TypeScript 代替 JavaScript 编写程序,做完检查后再输出成 JavaScript。而某些静态语言呢,却又发明出一些办法,部分地绕过类型检查,从而提供动态类型语言的灵活性。

1、不管是强类型还是弱类型,变量都有两个属性:类型和值;即弱类型的变量同样有类型。不管是哪一种编程语言,其中使用的变量,都既有类型,又有值。强类型的变量类型,必须在源代码中明确定义,称之为“变量声明”,弱类型的变量类型则是无需声明的,由解释器解释。但是,这并不意味着,弱类型的变量就没有类型这一概念了。

2、强类型的变量类型是不能改变的,弱类型变量是随需改变的,这是强弱的真正含义。强类型的变量一经声明,就只能存储这种类型的值,其他的值则必须通过转换之后才能赋给该变量,有编译器自动理解的转换,也有由程序员明确指定的强制转换。但是,弱类型的变量类型则是随着需要不断转换。

3、强制转换并没有改变变量类型。强类型语言有个“强制转换”,这改变的是变量的值的类型,以便进行赋值,而没有改变变量的类型。变量的类型是不允许改变的。

参考

  1. 动态语言、静态语言、强类型语言、弱类型语言的区别 (biancheng.net)

  2. 动态类型、静态类型和强类型、弱类型的区别is_Peng的博客-CSDN博客动态类型

  3. 编译原理之美 (geekbang.org)

标签:运算,转换,变量,编程语言,分类,改变,类型,语言
From: https://www.cnblogs.com/febrile-object/p/16866549.html

相关文章

  • html标签分类
    html标签可以分为行内元素和块元素一、行内元素可以和其他行内元素处在同一行。a、input、img、span(没有任何样式的行内元素)二、块元素自己独占一行。p、h、div(没有......
  • 在二分类问题中Sigmoid函数是否越训练梯度越小。
    背景二分类问题,最后一层的输出函数为sigmoid函数。随着训练是否会出现梯度衰减的情况。训练时模型为了降低损失函数,会尽可能提高正类的置信度降低负类的置信度。代码:f......
  • R语言使用逻辑回归Logistic、单因素方差分析anova、异常点分析和可视化分类iris鸢尾花
    摘要本文将探讨Fisher和Anderson ​​鸢尾花​​数据集中呈现的三个变量之间的关系,特别是virginica和versicolor级别的因变量变量物种对预测变量花瓣长度和花瓣宽度......
  • 添加分类累计列(Power Query)
    问题:各产品有不同批次,为每个产品按批次计算累计销量的列。let源=Excel.CurrentWorkbook(){[Name="表1"]}[Content],分组的行=Table.Group(源,{"品名"},{......
  • PTA甲级题目分类
    题目考察点A1001A+BFormat数字相加格式化输出 简单模拟A1002A+BforPolynomials多项式相加 简单模拟A1003Emergency救援最短路径和最大救援部队 Dijkstra算法A100......
  • CSS选择器分类大全
    选择器(选择符)就是根据不同需求把不同的标签选出来这就是选择器的作用。简单来说,就是选择标签用的目录一、基础选择器二、复合选择器三、CSS3选择器补充:(一)层级选择......
  • 11个常见的分类特征的编码技术
    机器学习算法只接受数值输入,所以如果我们遇到分类特征的时候都会对分类特征进行编码,本文总结了常见的11个分类变量编码方法。1、ONEHOTENCODING最流行且常用的编码方......
  • Redis Desktop Manager连不上服务器的redis; Java 死锁; 泛型; 事务; servlet; Spring事务;
    RedisDesktopManager连不上服务器的redis1、首先有没有设置密码,输入的密码是否正确2、那个IP是内网IP嘛?外网的要加SSH总结一下无论是连MySQL、MongoDB、还是redisip如果......
  • 文件操作以及IO流原理及流的分类
    文件1、什么是文件?文件是我们保存数据的地方。2、文件流文件在程序中是以流的形式来操作的。流:数据在数据源(文件)和程序(内存)之间经历的路径输入流:数据从数据源(文件)到......
  • 硬盘分类和故障考虑
    硬盘分为固态硬盘和机械硬盘,固态硬盘读取速度快,但硬盘出现问题后数据难以恢复;机械硬盘则相反一、从接口上讲,分为ATA、SATA、mSATA、m2三类ATA:老式的接口,并行ATA,俗称IDE,非......