银色月光下

漫漫长夜

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  4 Posts :: 7 Stories :: 0 Comments :: 0 Trackbacks

常用链接

留言簿(12)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

类型可以从两个角度去理解,
1. 在编程语言里,类型保证了在表达式和函数里怎么保证程序的正确.
比如:在应用 add时,保证参数是 int, 在concat里是 string;

2. 对数据的定义,我们如何表示一个数据是什么,如何去解析,去使用它,
比如说,数据库里person类型里定义,(person.name,person.age);

让我们来归纳一下,在应用中我们常见类型,(不太严格的方式,使用类haskell的语法)
.基本类型
bool, int, string

.复合类型
..组合
    struct/tuple,
    example: person: (age:int, name:string)
..枚举
    (union+enum):
    example:
       week: (mon | tus | wen | thu | fri | sat | sun)
       input: (mouse: x:int, y:int) | (key: keycode:int)

(tips: 这里我们怎么表示
     1. array int[3],  arr3 := (int, int, int)
     2. list<int>,  list_int := (int: value, next: list_int) | end
     3. binary_tree: left: (value:int, left:binary_tree, right:binary_tree) | leaf : int
     可见,到这里,我们已经可以表达一般的数据结构.

.函数类型
   type_1->type_2
   example:
        (定义了内置的一些函数)
         length : string->int
        
..高阶函数类型
    type_1->(type_2->type_1)
    example: 
        encode: (code_method:int->(src:string->dst:string) )
    (很多编程语言里的闭包)

..(如果我们加上(表达式/apply函数求值)就是一个编程语言了)   

..模板
    Type <type_args> := <type expression>
    example:
        list T := (value: T, next: list T) | null
        (像是c++里的 list<T> )   

 
谈谈类型的关系,子类型如何表示在这个系统里呢,class Derived : base
组合和继承是同态的,继承可以认为是组合的一个语法糖,因此它也包括在 struct 类型关系里,

但显然,类型转换这样的语法糖是很方便的.

实用上,应该提供原生的,array<T>, option<T>, (in proto_buffer) .

更强的类型系统,是 depend type, 当然已经超过我能讨论的了.
posted on 2014-05-02 21:54 lichking 阅读(212) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理