文:《Python外部函数的静态类型推断》

1、静态类型语言 vs 动态类型语言

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

动态类型在解释语言中极为普遍,如 Go、JavaScript、Perl、Python、Ruby 等等。

所谓动态类型语言,就是类型的检查是在运行时才做。

类型对于变量,属性,方法以及方法的返回类型都是可有可无的,在给变量赋值时才决定它的类型, 之后,还可以赋值不同类型的值,即使是基本类型,比如 C# 装箱(boxing)和拆箱(unboxing),可以把值类型转换成引用类型,引用类型转换成值类型。当需要时,很多类型之间都会发生自动转换,可以把不同的基本类型添加到同一数组(collections)中。

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

静态类型语言常出现于编译语言中,如 C、C++、C#、Java

静态类型语言的类型检查是在运行前的编译阶段

(3)对比

语言类型 特点 优点 缺点
静态类型语言 强类型外部函数声明时带有显式类型,为了达到多态会采取一些类型鉴别手段,如继承、接口 结构非常规范便于调试类型安全
编译的时候就可以较早发现错误,而且还可增进运行时期的性能
需要写更多的类型相关代码(如声明变量),不便阅读(特别是,当你看别人代码时,会连变量定义也看吗?想必不会,看结构,看方法的含义想必才是本质)。
动态类型语言 自由形式,一般会采用推断类型(鸭子类型,Duck typing) 方便阅读,不需要写非常多的类型相关代码;
使用更加动态的类型系統,分析代码更为简单,减少出错机会,才能更加轻松快速的编程
不便调试,命名不规范时会造成读不懂,不利于理解等。

参考:
https://www.cnblogs.com/liuning8023/p/4286044.html

2、类型【可参考】

(1)类型定义

我的 本论文
list,复合类型_聚合 积类型pProduct,表示list,tuple,dict等类型。
type,共用体类型【后期加】,包括Union、宏、include等 共用体类型pUnion,支持C侧Union这一常见的语言特征。
?【参考】 对象类型pObject,针对module、iterator等,不在类型集合中,传递给外部函数时会被作为object对象处理。

(2)子类型

类型/值约束

3、参考结构

一、研究背景与动机
二、研究方法与定义(语言之定义、规则、验证算法,方法之建模范式)
三、类型推断(案例推导过程)
四、实验结果
五、总结

posted on 2022-02-18 02:02  西伯尔  阅读(41)  评论(0编辑  收藏  举报