随笔分类 - 编程
静态与动态类型
摘要:静态类型语言中,变量具有类型,而且在编译期确定,具有某一类型的变量只能持有相同类型的数据。动态类型语言中,变量没有类型,只有数据有类型,变量可以持有任意类型的数据。例如,C是静态类型语言,一个int型变量只能作为int来处理。Python是动态语言,变量可以持有整数、字符串、列表、闭包等任何数据。
阅读全文
泛型与继承
摘要:泛型和继承是现代编程语言中两种比较重要的特性,对提高语言的表达能力,增强软件的质量、健壮性、可维护性有重要作用。前者常见于函数式编程语言,如Haskell;后者则是面向对象(OO)语言的基础。泛型对类型的描述更细化,表达能力更强,然而,泛型是编译期的信息,无法提供像继承中的动态绑定功能,这也许是过去
阅读全文
C宏展开的几个注意事项
摘要:前阵子仔细重新研究了一下C的宏展开。总结起来,有以下几个主要规则: 每次宏展开的结果会被重复扫描,直到没有任何可展开的宏为止。 每展开一个宏,都会记住这次展开,在这个宏展开的结果及其后续展开中,不再对相同的宏做展开。 带参数的宏,先对参数做展开,除非宏定义体中包含#或## a) #表示将后续标识符转
阅读全文
论软件的模块化与架构
摘要:不记得从哪儿看到的一句话,大意是:面向对象的设计模式掩盖了软件设计其实是这样一个事实:把模块按照依赖关系,组织成有向无环图。"无环”是一个重要的要求,即软件模块之间不要出现循环依赖的情况。更好的架构是模块分层次,某一层的模块只依赖比它低一层的模块。另外,模块间的依赖,也就是图里的边,越少越好,边越少...
阅读全文
Golang的Interface是个什么鬼
摘要:问题概述Golang的interface,和别的语言是不同的。它不需要显式的implements,只要某个struct实现了interface里的所有函数,编译器会自动认为它实现了这个interface。第一次看到这种设计的时候,我的第一反应是:What the fuck?这种奇葩的设计方式,和主流...
阅读全文