编程语言:弱类型&强类型,动态类型&静态类型

编程语言类型初探:弱类型、强类型、动态类型、静态类型 最近在B站看到一个UP主做了一期关于编程语言类型的讨论视频,激发了个人的兴趣,也有一些感触,在上网学习了一些相关知识后,写一写自己对于编程语言类型的一些理解。 强类型: 维基百科的解释:大致而言,“强类型”隐含着编程语言对容许混合情况出现加上了严格的限制,以避免代码以无效的数据使用方式编译或运行。例如,整数除法运算不可用于字符串;链表上的运算步骤不可用于数字。然而,这些限制的本质和效力是极易改... 阅读详情

动态类型语言(Dynamically Typed Language):

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

例如:ECMAScript(JavaScript)、Ruby、Python、VBScript、php

Python和Ruby就是典型动态类型语言,其他各种脚本语言如VBScript也多少属于动态类型语言

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

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

静态类型语言(Statically Typed Language):

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

例如:C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等

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

缺点:为此需要写更多类型相关代码,不便于阅读、不清晰明了

强类型定义语言(Explicit type conversion,强制数据类型定义语言,类型安全的语言):

一旦变量被指定某个数据类型,如果不经强制转换,即永远是此数据类型。

举例:若定义了一个整型变量a,若不进行显示转换,不能将a当作字符串类型处理

强类型语言是指需要进行变量/对象类型声明的语言,一般情况下需要编译执行。例如C/C++/Java/C#

弱类型定义语言(Implicit type conversion,类型不安全的语言):

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

举例:在VBScript中,可以将字符串 '12' 和整数 3 进行连接得到字符串 '123',  然后可以把它看成整数 123,而不需要显示转换

例如PHP/ASP/Ruby/Python/Perl/ABAP/SQL/JavaScript/Unix Shell等

注意:强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。

“语言是否动态”与“语言是否类型安全”之间是完全没有联系的!

另一种分类方法:

Program Errors

  • trapped errors。导致程序终止执行,如除0,Java中数组越界访问
  • untrapped errors。 出错后继续执行,但可能出现任意行为。如C里的缓冲区溢出、Jump到错误地址

Forbidden Behaviours

语言设计时,可以定义一组forbidden behaviors. 它必须包括所有untrapped errors, 但可能包含trapped errors.

 

Well behaved、ill behaved

  • well behaved: 如果程序执行不可能出现forbidden behaviors, 则为well behaved。
  • ill behaved: 否则为ill behaved...

强、弱类型

强类型strongly typed: 如果一种语言的所有程序都是well behaved——即不可能出现forbidden behaviors,则该语言为strongly typed。

弱类型weakly typed: 否则为weakly typed。比如C语言的缓冲区溢出,属于trapped errors,即属于forbidden behaviors..故C是弱类型

偏向于不容忍隐式类型转换,弱类型相对于强类型来说类型检查更不严格,比如说允许变量类型的隐式转换,允许强制类型转换等等。强类型语言一般不允许这么做。

动态、静态类型

  • 静态类型 statically: 如果在编译时拒绝ill behaved程序,则是statically typed;
  • 动态类型dynamiclly: 如果在运行时拒绝ill behaviors, 则是dynamiclly typed。

其中静态类型可以分为两种:

  • 如果类型是语言语法的一部分,在是explicitly typed显式类型,比如java和c;
  • 如果类型通过编译时推导,是implicity typed隐式类型, 比如ML和Haskell

简单地说,就是在声明了一个变量之后,不能改变它的类型的语言,是静态语言;能够随时改变它的类型的语言,是动态语言。因为动态语言的特性,一般需要运行时虚拟机支持。

C和C++就是弱类型的,C++也就是比C强一点。
C中有各种隐式转换,char被当作整型处理,数组可以越界,几乎没有任何运行期的类型检查。

C++比C强一点的原因之一是不允许void *的指针转换。但是他俩对于一个内存对象的具体类型并没有相关识别能力。允许用union之类的可能因为具体机器特性不同出现差异行为的东西。字符串除了它本身的结尾规则外根本没有像其它语言那样有另外的长度管理机制。数组则更是连编译器都不去检查。

别的语言有完善的运行时类型机制,可以轻易的获得一个变量的类型。而且基本上字符串长度也有另外的方法维护。
而C语言连一个数组的长度都不知道,sizeof什么的基本上都是编译时计算的,实际运行时没有使用额外方法来管理变量。

 

关于【强弱类型】,有两种截然不同的分类观:一个是从数据类型转换和语法角度,一个是编译和运行中操作不同的角度。前者认为C是强类型,后者认为C是弱类型,所以冲突了。

https://en.wikipedia.org/wiki/Comparison_of_programming_languages_by_type_system 

知其荣,守其辱,为天下谷,写给 SAP RAP 开发者的一条低处架构法则 本文探讨了SAP ABAP RAP(RESTful Application Programming Model)开发的核心理念,以老子"知其荣,守其辱"的哲学思想为框架,分析了RAP开发中表面光鲜与底层约束的辩证关系。 摘要要点: RAP的"荣"体现在其优雅的Fiori Elements页面、自动化OData服务和声明式开发范式; 真正的开发挑战在于"守其辱":处理业务规则、事务一致性、权限控制等底层约束; Behavior层是业务对象的核心骨架,需要定义字段约束、操作权限、验证逻辑等; 优秀的设计应保持分 阅读详情

相关推荐

深度解析direct path write temp与ASM IO性能问题:Oracle 19.17视图查询优化指南

本文深度解析了Oracle 19.17版本中复杂视图查询出现`direct path write temp`与`ASM IO for non-blocking poll`性能瓶颈的根本原因。通过对比11.2.0.4版本的执行计划差异,文章提供了从CBO参数调整、存储层优化到SQL架构重构的完整实战调优指南,帮助DBA有效解决升级后的查询性能问题。

2y3u4i5o6p的博客 1100

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

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

cnds123的专栏 5900

如何在huggingface上申请下载使用llama2/3模型

huggingface-cli download --resume-download 模型名称 --local-dir 存放模型的位置 --local-dir-use-symlinks False --resume-download --token token序列号xxxxxxx。登录huggingface,在模型详情页面上,找到这个表单,填写内容,提交申请。需要使用梯子,country填写梯子的位置吧(比如美国)等待一小时左右,会有邮件通知。

a61022706的博客 1万+

弱类型语言和强类型语言

弱类型语言和强类型语言

qq_39234639的博客 5275

基于AT32F421的紧凑型FOC电机驱动板设计

磁场定向控制(FOC)是永磁同步电机(PMSM)与无刷直流电机(BLDC)实现高精度转矩控制和高效运行的核心技术,其本质是通过Clarke/Park坐标变换解耦定子电流,实现d轴磁链与q轴转矩的独立调节。该技术依赖实时性严苛的电流采样、高精度位置反馈及确定性PWM生成,广泛应用于机器人关节、智能装备等中小功率伺服场景。国产Cortex-M4微控制器(如AT32F421)凭借集成ADC、高级定时器与DSP指令集,已成为低成本、高可靠FOC嵌入式实现的理想平台。本文围绕一款工程化FOC驱动板展开,涵盖低侧电流采

weixin_42510243的博客 699

手把手教你 Ubuntu 24.04 离线安装 Ollama

本文介绍 Ubuntu 下离线安装 Ollama 并使用 Ollama 部署 llama3.1-70b 大模型

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 1018

强类型和弱类型是什么,怎么区分?

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、强类型语言二、弱类型语言总结 前言 强类型和弱类型主要是站在变量类型处理的角度进行分类的。 一、强类型语言 强类型语言也称为强类型定义语言。是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。 通俗的说就是:强类型语言在编译前就把数据类型确定了,被确定了数据类型的变量,如果不强制转换,就永远是给定的数据类型。 比如:Java、C/C++等都是强类型语言。 二、弱类型语言 弱类型语言也.

HXR1984的博客 8792

SAPGUI excel 导出时遇到的运行时错误:STRING_SIZE_TOO_LARGE

当报表导出需求远超单一 XLSX 文件的物理承载力时,与其在 SAPGUI 中硬拼 2 GB 限制,不如把分页、过滤、流式写入作为设计前提。掌握 ABAP2XLSX 或 CSV + Power Query 等工具链,既能满足审计合规,又能让应用服务器远离的噩梦。祝你在下一次导出海量数据时,既高效又优雅。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 638

什么是强类型、弱类型语言以及动态类型、静态类型语言

什么是强类型、弱类型语言以及动态类型、静态类型语言

Jairo的博客 2777

Qemu开发ARM篇-3、qemu运行uboot演示

在上一篇文章中,我们搭建了交叉编译工具链,并成功进行了uboot的交叉编译,在该篇中,我们将演示如何利用qemu运行上一篇中交叉编译的uboot程序。

sinat_33909696的博客 1210

【Basis】Lumerical licence center 无法连接的问题

端口,我们需要确认该端口是否被其他程序占用。这里我们将介绍如何处理这一问题。后,今天电脑更新后我无法打开。终结占用该端口的程序后再次打开。

u011699626的博客 313

动态类型、静态类型和强类型、弱类型的区别

编程语言一般分为动态类型、静态类型和强类型、弱类型,例如Java是静态、强类型编程语言,而JavaScript是动态、弱类型编程语言。 一、动态类型与静态类型 动态类型语言是运行期间才做数据类型检查的语言,即动态类型语言编程时,永远不用给任何变量指定数据类型。该语言会在第一次赋值给变量时,在内部将数据类型记录下来。例如:JavaScript、Python、PHP。 优点:方便阅读,不需要...

is_Javaer的博客 6823

【100%通过率】华为OD机试真题 Python 实现【高矮个子排队】【2023 Q2 | 100分】

我们现在希望小朋友排队,以“高”“矮”“高”“矮”顺序排列,每一个“高”位置的小朋友要比相邻的位置高或者相等;要求小朋友们移动的距离和最小,第一个从“高”位开始排,输出最小移动距离即可。移动距离的定义如下所示:第二位小朋友移到第三位小朋友后面,移动距离为1,若移动到第四位小朋友后面,移动距离为2。现在有一队小朋友,他们高矮不同,,我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}。1:其实题目理解之后就知道,目标是要保证最小移动距离,且以高位为起点。2:try catch 异常处理。

MISAYAONE的博客 3144

编程语言分类 -- 强类型与弱类型、动态类型与静态类型

文章内容输出来源:拉勾教育 大前端高薪训练营 前言 在拉勾教育大前端高薪训练营学习的过程中,了解到编程语言除了以前常说的高级语言与低级语言之分,还可以根据类型安全分为强类型语言与弱类型语言,也可以根据类型检查分为静态类型语言与动态类型语言。 强类型语言 与 弱类型语言 强类型语言 强类型语言是一种强制数据类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。 强类型语言不允许任意的隐式数据类型转换。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个.

zimeng303的博客 2086

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

一文辨析编程语言的强类型与弱类型、静态类型与动态类型

你真的知道什么是强类型,什么是弱类型吗?

Tanke2024的博客 800

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

强类型 vs 弱类型 vs 动态类型 vs 静态类型

编程语言的类型系统可从两个独立维度区分:动态/静态类型(类型检查时机)和强/弱类型(类型约束严格度)。动态类型(如Python、JavaScript)在运行时确定类型,允许变量切换类型;静态类型(如Java、C#)需编译时声明固定类型。强类型(如Python、Java)禁止隐式转换,要求显式类型处理;弱类型(如JavaScript、PHP)允许自动隐式转换,可能产生意外结果。二者可自由组合(如Python是动态强类型,JavaScript是动态弱类型),实际选择取决于项目需求,没有绝对优劣之分。

weixin_66547608的博客 922

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

强类型、弱类型、静态类型、动态类型的区别

弱类型:容忍隐式类型转换。比如js中: 1+'a' > '1a' 以及c中double可以隐式转换为int 强类型:不容忍隐式类型转换。比如python中: >>> "1"+2 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeErro...

m0_37828249的博客 1621

编程语言的弱类型、强类型、动态类型、静态类型的解释

类型名类型特点强类型不支持静态类型转化弱类型支持静态类型转化静态类型变量使用前需声明数据类型,程序运行过程中 数据类型不允许改变动态类型变量使用前不需要声明数据类型,程序运行过程中 数据类型可以改变。

黎鹤舞828的博客 624

计算机语言的分类:编译型/解释型、动态类型/静态类型、强类型/弱类型

参考: 计算机语言:编译型/解释型、动态语言/静态语言、强类型语言/弱类型语言 编译型语言、解释型语言、静态类型语言、动态类型语言概念与区别 编程语言傻傻分不清:弱类型、强类型、动态类型、静态类型需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。编译是把源代码编译成机器码,链接是把各个模块的机器码和依赖库串连起来生成可执行文件。优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译

sally的jerry 4924

静态类型 vs 动态类型 和 弱类型 vs 强类型

一次性弄清楚静态、动态类型,强、弱类型

我是张跑跑 772

静态语言、动态语言、强类型语言、弱类型语言的区别

如果你是一名程序员,那你一定使用过变量、函数参数或者函数返回值,它们都用来表示数据,在编程语言中无处不在;但是,你是否知道它们的真正含义呢?又是否知道它们在后台如何控制计算机的呢?在很多编程语言(比如 C/C++、Java、C# 等)中,定义变量时除了需要指明变量的名字,还需要告诉计算机它是什么类型,比如简单的整数、浮点数、字符串,还有复杂的类、结构体、数组。编程语言中的数据最终都要放到内存中,在内存中存取数据要明确三件事情:数据存储地址、数据的长度以及数据的处理方式。

weixin_42673574的博客 1335

[oeasy]python075_什么是_动态类型_静态类型_强类型_弱类型_编译_运行

075_动态类型_静态类型_编译_运行_强类型_弱类型。动态类型 - dynamic type。静态类型 - static type。静态类型 vs 动态类型。

920

强类型、弱类型与动态类型

与一些传言不同,Python是一种强类型的语言,但它又是动态类型的。强类型、动态类型、弱类型,这是几个不同(而又经常混淆)的概念。 ————————————————Typing: Strong vs. Weak, Static vs. Dynamicby AahzJuly 15, 2003SummaryWith the advent of languages such as P

透明思考@优快云 3687

弱类型、强类型、动态类型、静态类型语言是什么?

文章目录一、弱类型语言?二、强类型语言?三、动态型语言?四、静态类型语言?总结 一、弱类型语言? weakly typed,偏向于容忍隐式类型转换。比如说C语言的int可以变成double。 > "1"+2 '12 二、强类型语言? strongly typed,偏向于不容忍隐式类型转换。比如说haskell的int就不能变成double。 >>> "1"+2 Traceback (most recent call last): File "<stdin>", l

s1mple_Rick的博客 308

Typescript学习前奏---强类型与弱类型,静态类型和动态类型

强类型与弱类型 再具体介绍JavaScript的类型系统的问题之前,我先来解释两组在区分不同编程语言时经常提及的名词,分别是强类型和弱类型,还有就是静态类型动态类型,那他们呢,分别是从类型,安全和类型检查这两个维度去区分了不同的编程语言,首先我们来看类型安全的角度,那从类型安全角度来说,编程语言作为强类型和弱类型,那这种强弱类型的概念最早是1974年的时候,美国有两个计算机专家提出的,那当时呢,对强类型这个概念的定义,就是在语言层面就限制我们函数的。实参类型必须要跟形参类型完全不同,例如呢,有一个foo函数

又一寒冬夜的博客 1006
上一篇: Python的几种文件类型
下一篇: 特征选择方法CHI和IG
answer3lin
博客等级 码龄11年 138粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值