银色月光下

漫漫长夜

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

常用链接

留言簿(12)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

2014年6月10日 #

一些例子,

我们创建符号表,当前的context的string_key去query一个对象,

对同一对象的可表示为这个对象的引用和同一对象相关的数据结构封装得到的一个smart_ptr,

    如在shared_ptr里,我们用对象&引用计数 指针,可得到同一对象,和同一对象的计数情况,

    可用对象& 对象容器//,得到同一对象,并容易遍历所有同一对象,

    函数里变量对象,{name, type, function}, {argument idx|var}, {list}


posted @ 2014-06-10 00:43 lichking 阅读(227) | 评论 (0)编辑 收藏

2014年5月2日 #

类型可以从两个角度去理解,
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 @ 2014-05-02 21:54 lichking 阅读(202) | 评论 (0)编辑 收藏

2013年7月28日 #

怎样才是好的API设计,让我们先来想想什么是糟糕的API,

糟糕的API有很多你不理解的参数
糟糕的API设计让你维护很多状态

第一种情况,查各种参数意义,并需要例子参考之,这些例子作为你使用的模板,
第二种情况,你call 一个个api的流程,你写很多状态处理,大多数情况大同小异,也作为模板,

模板就是在体现在代码里的一些选项参数,结构参数,所以能被进一步抽象,

我们不是有了 interface, function,那么就在API的设计体现出这种模式化,
比如说 IO的C的API,
open/close, read/write, iostate, 
你容易忘记在某个异常里close, 你可能在某个状态时没有调用对API,read mode下call write, 在IO关闭后继续读写,还有考虑,读异常,写异常发生时,你要做的事情

那么如下设计是否更加结构化了呢
withfile_read(fn, option, reader:(Either String Ex)->()  );
withfile_write(fn, option, writer: ()->(String,  Ex->()  )  );
posted @ 2013-07-28 01:04 lichking 阅读(204) | 评论 (0)编辑 收藏

2013年7月8日 #

我希望能好好地学一下haskell了
posted @ 2013-07-08 01:07 lichking 阅读(253) | 评论 (0)编辑 收藏