Python演绎的精彩故事(三)

Softchip架构到底为开发者带来了什么?和传统的开发套路相比到底有什么本质的不同?

相信有部分开发者在阅读完前两篇之后已经有了基本清晰的认识。

在这里阐述一下笔者个人的见解,仅供参考。

形式上看,Softchip为模块制订了一个限制性设计规范,把模块深深地包藏起来,各模块不能再自由地调用其他模块的方法了。

而实际上,这个看似限制的动作却把模块彻底解放了。严格来说,是把模块设计者彻底解放了。为什么呢?

1、你不再与数不清的模块发生关系,你只与一个叫做Machine的角色打交道。

2、你不知道也不再计较系统中还有什么模块和你一起工作,你只知道你和Machine之间有什么APIEvent

3、你在编码期和编译器不需要仰任何人鼻息,你自由的写你自己的代码。

4、在你需要调试的时候,你可以mock出任何你需要的APIEvent来配合自己的调试。

你失去了几个模块的句柄,取而代之,你拥有的是却整个Machine,条件是规范地拥有!

在这样的场景中,开发者不再被其他模块牵扯精力,专心于自己的事情。

每个模块都能专心于自己的事情。

大部分模块专注于具体工作,其中一部分模块站在全局或中层的高度上统筹规划API和Event的分配。

这正是层次化、模块化设计的精髓。整个系统的复杂度大幅降低了,质量提高、效率提高是自然的事情。

在软件开发领域,这样的效果似乎是非分之想,但看看硬件领域,其实已经司空见惯。

比如PC的网卡,它作为一个组件,只需要插在主板的PCI插槽里。

它并不需要知道它将要发送的数据是来自10cm之外的某个内存条的某一段地址。

内存条作为另一个组件,只需插在主板的内存插槽里,它并不需要知道自己的数据要经由10cm之外的另一个chip发送到网络上去。

那么谁知道的?Machine知道,作为Machine具体形象代表的Board知道,这就够了!

因此,设计网卡的人不需要知道内存条的事情,同样,内存条的设计者也不需要知道显卡的事情,大家都只需要履行自己和Machine之间的接口协议,这就够了!

Softchip描述起来很美好,代码写起来很漂亮,但有人质问:“你说的是真的吗?能实现吗?”

最关键的Softchip代码写得出来吗?这时候,Python终于千呼万唤地出场了。

可以说,Softchip天生就是为Python量身定做的,非她莫属!反过来,也只有Python可以承载Softchip。

对于Softchip架构至关重要的Python语言特性包括:

完善的OOP,duck typing,可变参数机制,函数/方法指针,dict/list数据结构。

这些语言特性,单独看某一个,很多语言里都有,但是当你把他们全部组合在一起的时候,除了Python,谁能与之争锋呢?

C提供强大的指针,但是却缺少其他全部要素。

C++有OOP,但是它没有与类型无关的dict/list,无法获得非静态方法指针。

Java里指针已经不存在了。。。

在本系列的下一篇中,我们将讨论至关重要的Softchip本身的设计与实现。

时间: 2024-12-21 21:55:05

Python演绎的精彩故事(三)的相关文章

Python演绎的精彩故事(一)

Python是一门广受赞誉的编程语言.她既有强大.简洁而优雅的表现力,又能够支撑工业级的开发实践. 但本文不是Python的入门介绍和教程. 今天我们来讲一个与众不同的故事,看看Python还有哪些不为人知的精彩值得发掘. 我们想借助Python的智慧和威力来尝试一种新思维.新设计.新框架.我们希望构造一种可以媲美硬件工业成熟典范的力量,让软件开发也能够高效.成熟而艺术.这是本文作者的一个梦想. 故事情节概要:假设我们要编写一个应用程序,功能是基于网络的纯文本聊天客户端程序,命名为TextCha

Python演绎的精彩故事(二)

书接上回.在展示了App最顶层的代码后,我们去看看各模块如何编程. 为了能看懂各模块的代码,首先需要铺垫一下Softchip架构的基本概念和设计规范. 1.任意模块不持有其他模块的实例,自然不再显式使用句柄调用任何方法. 这意味着模块之间不存在编码期和编译期的耦合. 2.每个模块在形式上只与Machine之间存在接口,该接口以API和Event两种形态存在. API将直接映射到函数入口地址,使用者可直接调用,运行期性能高.主要用于Utility性质的方法和需要高性能的场合. Event也是同步调

《舌尖上的中国》精彩故事

<舌尖上的中国>精彩故事 <舌尖上的中国>是纪录频道推出的第一部高端美食类系列纪录片,从2011年3月开始大规模拍摄,是国内第一次使用高清设备拍摄的大型美食类纪录片.共在国内拍摄60个地点方,涵盖了包括港澳台在内的中国各个地域,它全方位展示博大精深的中华美食文化.向观众,尤其是海外观众展示中国的日常饮食流变,千差万别的饮食习惯和独特的味觉审美,以及上升到生存智慧层面的东方生活价值观,让观众从饮食文化的侧面认识和理解传统和变化着的中国. 第一集<自然的馈赠> 中国拥有世界

Python之路【第三篇】:Python基础(二)

Python之路[第三篇]:Python基础(二) 内置函数 一 详细见python文档,猛击这里 文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 1 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open. 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作.

Python爬取网页的三种方法

# Python爬取网页的三种方法之一:  使用urllib或者urllib2模块的getparam方法 import urllib fopen1 = urllib.urlopen('http://www.baidu.com').info() fopen2 = urllib2.urlopen('http://www.sina.com').info() print fopen1.getparam('charset') print fopen2.getparam('charset') #----有些

真实股市房市信托本质,金融故事三则:钱都去哪儿了?

什么叫做虚拟经济.泡沫经济.次贷危机.金融危机?看完本文这几个简短精辟故事,你就都知道了. 故事(1) 有一个商人到了一个山村,村子周围的山上全是猴子. 商人就和村子种地的农民说,我买猴子,100元一仅仅. 村民不知是真是假,试着抓猴子,商人果然给了100元. 于是全村的人都去抓猴子,这比种地合算得多了. 非常快商人买了两千多仅仅猴子,山上猴子非常少了. 商人这时又出价200元一仅仅买猴子,村民见猴价翻番,便又纷纷去抓,商人又买了,但猴子已经非常难抓到了. 商人又出价300元一仅仅买猴子,猴子差

Python小爬虫-自动下载三亿文库文档

新手学python,写了一个抓取网页后自动下载文档的脚本,和大家分享. 首先我们打开三亿文库下载栏目的网址,比如专业资料(IT/计算机/互联网)http://3y.uu456.com/bl-197?od=1&pn=0,可以观察到,链接中pn=后面的数字就是对应的页码,所以一会我们会用iurl = 'http://3y.uu456.com/bl-197?od=1&pn=',后面加上页码来抓取网页. 一般网页会用1,2,3...不过机智的三亿文库用0,25,50...来表示,所以我们在拼接ur

进击的Python【第六章】:Python的高级应用(三)面向对象编程

Python的高级应用(三)面向对象编程 本章学习要点: 面向对象编程介绍 面向对象与面向过程编程的区别 为什么要用面向对象编程思想 面向对象的相关概念 一.面向对象编程介绍 面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是一种程序设计范型,同时也是一种程序开发的方法.对象指的是类的实例. 已经被证实的是,面向对象程序设计推广了程序的灵活性和可维护性,并且在大型项目设计中广为应用. 此外,支持者声称面向对象程序设计要比以往的做法更加便于学习,因为它

[XPath/Python] XPath 与 lxml (三)XPath 坐标轴

本章我们将沿用上一章的 XML 示例文档. XPath 坐标轴 坐标轴用于定义当对当前节点的节点集合. 坐标轴名称 含义 ancestor 选取当前节点的所有先辈元素及根节点. ancestor-or-self 选取当前节点的所有先辈以及当前节点本身. attibute 选取当前节点的所有属性. child 选取当前节点的所有子元素. descendant 选取当前节点的所有后代元素. descendant-or-self 选取当前节点的所有后代元素以及当前节点本身. following 选取文