这些天持续尝试完成list的方法,实现了完全Pythonic的slice等。过程中,发现将所有的东西都包装成对象还是有很多好处的,至少传递参数后初始操作层面可以做到统一的api及后续的内存自动管理的引用计数。
因此,将思路调整为:
1. 三个基本值对象: int, float,string
如果不是整型浮点型运算性能差异,我真想把前两个合并了...
2. 两个容器对象: list, map
我想,作为基本的容器,一个有序集和一个映射集完全可以应付所有数据处理场景,因此取消了之前设想的dict和tree。而且,之前做过粗略的比较,python中一次哈希运算和一个长度为10的列表遍历的时间差不多,那我为什么不采用二叉树来实现映射呢?!O(log2N)的时间复杂度不比一个O(10)的哈希差多少。而且,不采用哈希还可以避免key必须可哈希的限制,这完全可以采用内存地址来唯一的确定一个作为key的对象。
同时,用二叉树实现的map,由于其本身的树结构,避免了dict的内存浪费,实在是再好不过了!
3. 一个动作对象: agent
面向对象是个很伟大的思想,但是面向对象并不是语言和处理问题的本质,而只是为了方便程序员或者人类去表述逻辑而存在的。开发过程中,面向对象也不是必需的,其本身也不过是捆绑在一起的变量和函数而已。同时,面向对象思想发展至今,越来越多的程序员都认为接口优于继承,关心对象能干什么比知道对象是什么重要的多。因此,在这里想将erlang和stackless python中的微线程引入进来。对于一个功能函数,包装为一个agent微线程,对外定义惟一的接口,采用消息传递机制来io,对内持续循环来获取命令执行包装起来的函数完成功能。通过这样的封装还可以方便的保证函数执行的原子性和并发。
后续考虑file和socket两个基本对象的功能。。。