Functional Programming without Lambda - Part 1 Functional Composition

摘要: Functional programming doesn't necessarily depend on Lambda, it's more about the unique way of composing a bunch a small functions into a larger one. 阅读全文
posted @ 2015-05-25 13:35 Todd Wei 阅读(2226) 评论(0) 推荐(1) 编辑

异常处理原则

摘要: 本文介绍了自己总结的Java异常处理的原理和原则,包括:1.Exception和Error的区别;2.声明异常和未声明异常的区别;3.什么情况下应抛出未声明异常;4.如何捕获和处理其他方法抛出的异常;5.自定义异常应继承Exception还是RuntimeException。 阅读全文
posted @ 2014-11-02 09:46 Todd Wei 阅读(8882) 评论(12) 推荐(13) 编辑

程序观点下的线性代数

摘要: 本文提出了一种观点:从应用的角度,我们可以把线性代数视为一门领域特定语言(DSL)。线性代数在初等数学基础上建立了向量模型,定义了一套语法和语义,符合程序语言的语言契约。向量模型具有坐标系无关性的优点,可以用来表达线性关系。它是整个线性代数的核心,是解决线性空间问题的最佳模型。 阅读全文
posted @ 2014-05-21 22:07 Todd Wei 阅读(20779) 评论(21) 推荐(75) 编辑

I/O重定向的原理和实现

摘要: 本文介绍了Linux系统I/O重定向的原理和实现方式,原理方法最重要的是理解文件描述符和文件描述符表的概念,以及标准I/O所对应的特殊FD;实现方面主要是了解dup2()系统调用的功能和用法。 阅读全文
posted @ 2014-03-01 13:20 Todd Wei 阅读(14867) 评论(2) 推荐(11) 编辑

程序的本质复杂性和元语言抽象

摘要: 程序的复杂性包含了本质复杂性和非本质复杂性两个方面,前者即为逻辑,后者即为控制。代码优化的极限是由逻辑决定的,逻辑和控制本应是正交的两个维度,但多数程序中二者却耦合在一起降低了程序的可读性。组件复用和GoF设计模式都不是解决这一问题的有效途径,唯有元语言抽象能彻底地将逻辑和控制解耦,使得程序简洁、优雅、易理解、易维护。 阅读全文
posted @ 2013-10-28 17:09 Todd Wei 阅读(8259) 评论(18) 推荐(24) 编辑

编译器词法消歧设计

摘要: 在经典编译理论中,编译过程被抽象为管道模型,词法分析的输出作为语法分析的输入。但是,许多语言中存在词法歧义问题,如C++中经典的模版“>>”问题,其根源在于词法分析所依赖的词法规则无法消除歧义,必须依赖于完整的语法。本文介绍了一种比Scannerless Parsing更好的词法消岐设计。 阅读全文
posted @ 2013-10-01 23:10 Todd Wei 阅读(3047) 评论(1) 推荐(5) 编辑

关于分工的思考 (Thoughts on Division of Labor)

摘要: Traditional software engineering emphasizes on division of labor and improving cooperation, but I think the otherwise, the better way is reducing unnecessary cooperation. 阅读全文
posted @ 2013-09-24 23:32 Todd Wei 阅读(1639) 评论(1) 推荐(2) 编辑

数据即代码

摘要: 配置本质上是一种元数据也是一种DSL,这和Lisp基于S表达式的“数据即代码,代码即数据”没有本质区别。在C++、Java等程序中引入配置文件的目的正是用DSL弥补通用语言表达能力和灵活性的不足。把主要业务逻辑都放到配置中,再通过程序解释执行配置的设计方法,我称之为元驱动编程(Meta Driven Programming)。 阅读全文
posted @ 2013-08-09 10:11 Todd Wei 阅读(4636) 评论(4) 推荐(6) 编辑

类型的本质和函数式实现

摘要: 类型的本质在于它所定义的操作以及操作之间的不变式。类型的实现关键在于满足类型规范的要求,而具体实现是可以变化的,使用者和测试用例都应该只依赖于类型规范而不依赖于具体实现。函数式的类型实现往往和类型规范是直接对应的,简单通用且容易验证程序的正确性,但可能有性能问题,而命令式的类型实现往往会引入复杂的内部数据结构和算法,不具有通用性但是一般比较高效。这两种实现并不是完全互斥的,有时候可以将二者相结合达到简单与高效的结合。 阅读全文
posted @ 2013-07-21 18:52 Todd Wei 阅读(3191) 评论(3) 推荐(3) 编辑

二叉树迭代器算法

摘要: 相比二叉树的遍历,二叉树的迭代器实现不那么容易,我们不能直接将递归遍历转换为迭代器。究其原因,这是因为二叉树递归遍历过程是编译器在调用栈上自动进行的,程序员对这个过程缺乏足够的控制。既然如此,那么我们如果可以自己来控制整个调用栈的进栈和出栈不是就达到控制的目的了吗? 阅读全文
posted @ 2013-06-30 00:01 Todd Wei 阅读(5557) 评论(4) 推荐(2) 编辑