Web Analytics

Common Lisp初学点滴

Common Lisp是一门Interactive语言,比较容易上手。无论你是用CLISP,SBCL还是Clozure CL,你都可以很快地写出一个"Hello, World“程序出来。不过千万不要因此低估了Common Lisp,前人的经验表明:Common Lisp是门庞大且复杂的语言,其学习曲线可并不低。要想真正掌握它,需要你有持续的热情、足够的耐心和不断的练习。我接触Common Lisp时间也不长,是个地地道道的初级选手。这段时间看了些书,做了一些练习,这里把我初学Common Lisp过程中的点点滴滴记录下来,以备忘。 ...

August 5, 2011 · 6 min · Tony Bai

Hello,Common Lisp

Paul Graham不愧被誉为Lisp的超级推手,他的煽动力真的是很强悍。这不才刚刚看完一遍他编写的《黑客与画家》后,我就决定将Common Lisp作为今年计划学习的那门新语言,而且从现在就开始。 去年曾囫囵吞枣般的学习过Haskell,一门通用且庞大的纯函数式编程语言。在惊叹于Haskell如此与众不同且功能强大的同时,也为Haskell Monad那魔鬼般的蹩脚语法所苦恼,而Monad的引入就是为了隔离副作用,并让你可以利用些过程式命令式语言解决问题的范式。 ...

June 21, 2011 · 4 min · Tony Bai

应对库接口原型变更

也许你经常遇到这类情况:你在代码里使用了别人提供的第三方库,当库升级为新版本后,你的代码在编译时无法通过,提示接口原型错误,经查发现原来是该第三方库提供的某接口的原型发生了变化,比如原接口被删除、增加了参数、参数减少了、修改了参数类型以及返回类型发生变化了等等。你也许会不由自主的大骂一句:F**k。 ...

January 24, 2011 · 2 min · Tony Bai

《Programming in Haskell》中文版翻译项目

“A language that doesn’t affect the way you think about programming, is not worth knowing”. — Alan Perlis(ACM 第一任主席,图灵奖得主,1922-1990) 《程序员修炼之道》这本书建议程序员每年应至少学习一门新的语言,以拓宽思维,避免墨守成规。今年我选择了函数式编程语言Haskell。选择Haskell的理由正如Alan Perlis所说的那样,Haskell是一门可以影响程序员编程思维的语言,我也期望通过学习Haskell来拓宽我的思维。 ...

November 14, 2010 · 3 min · Tony Bai

经典设计原则背后的本质

近一段时间重读了一些经典书籍,诸如《敏捷软件开发:原则、模式与实践》、 《程序员修炼之道》、《Unix编程艺术》等。这些书中关于如何衡量或评价一个类或函数设计好坏的几个原则(Principle)让人印象深刻。《敏捷软件开发》中谈到了SRP、OCP、DIP; 程序员修炼之道则以DRY、“正交性”为话题展开;《Unix编程艺术》围绕紧凑性、SPOT、分离等阐述作者立场。这么多经典原则,如何学习把握?我们不妨来挖掘一下这些新设计原则背后的本质。 追本溯源,从计算机编程语言的发展历史来看,成熟的结构化程序设计语言(如C语言、Pascal等)要先于成熟的OO设计语言(C++、Java等)出现,那么其成熟的设计理论显然也是要早于后者的。这里就不能不提到经典结构化设计的代表作:《Structured Design: Fundamentals of a Discipline of Computer Program and System Design》,这本书出于1975年(年份来自维基百科,Amazon上卖的是1979年版)。说实话我也没有看过此书原版,不过书中的内容和思想早已被其他后继书籍引用和借鉴,我们在市面上能看到的关于结构化设计方面的书籍,尤其是中文书籍,多照搬了此书内容和思想,所以也算是间接学习到了。 ...

September 17, 2010 · 3 min · Tony Bai

一次函数设计讨论

近期在考虑对底层函数库进行一些重构,今天下午花了两个小时考量现有的函数库的接口设计,发现目前函数库的实现存在着一个普遍的问题:与特定的内存分配实现耦合的太紧。 我们的应用是多进程结构的,并使用了共享内存这种最快捷的IPC机制,鉴于此很多同事在实现一些数据结构或者算法时可能只考虑到了我们常见的应用场景-多进程共享,而对非共享内存分配的情况考虑不足。那如何将目前某些库函数实现与内存分配之间的强耦合解开呢?针对这道题我发起了一次mail讨论。 题目再重述一下:“目前底层库中的一些数据结构,比如xx_tree、xx_hash_table等,在它们的实现中都会有“分配内存空间”的需求,现有的实现多是直接调用已有的xx_shm_malloc和xx_shm_free在共享内存上动态申请和释放内存,但实际上有些场合我们并不需要在共享内存上分配内存,进程私有堆上的内存完全可以满足需求。如果让大家考虑修改目前xx_tree的实现或重新设计xx_tree的接口,以达到让xx_tree支持多种内存分配策略的目的,你是如额考虑的,请谈谈你的设计思路。" ...

September 2, 2010 · 5 min · Tony Bai

C++咬文嚼字-'Functions'

关于Functions,Bjarne Stroustrup在’The C++ Programming Language’一书中是这么开篇的:‘The typical way of getting something done in a C++ program is to call a function to do it.’;另外他还阐述了一个使用Functions的原则:‘A function cannot be called unless it has been previously declared.’。 ...

March 13, 2007 · 5 min · Tony Bai