Archive for July, 2008

The weekly status report of Schemepy: final evaluation approaching

Thursday, July 31st, 2008

Another week quickly passed, I was working hard on the macro system for skime last week. It is a little tough, but now I finally managed to finish it. I wrote a summary[Chinese] on the implementation of the hygienic macro system of skime.

skime should be a fairly feature-complete pure-Python Scheme fallback for Schemepy after that. I’ve moved the source to the Schemepy repository. And now the backend wrapper (yes, pure-Python fallback still need backend wrapper) is also finished and most of the existing test cases have passed on that.

Read the rest of this page »

导读:What’s wrong with CS research

Thursday, July 31st, 2008

hrm.jpg其实我也不会写什么“导读”,只是今天在 newsmth 的 FuncProgram 版看到这篇文章的链接,读了一下,有种强烈地想要推荐给别人读一下的冲动。

文章的标题是:What’s wrong with CS research ,说了 CS 本不是 science 却如何被硬套上这个名号煞有介事地做 research 的。Mencius Moldbug (文章的作者)说 CS researchers 分为三种:

  • creative programmers
  • mathematicians
  • bureaucrats

Read the rest of this page »

OSCON 2008 花名册

Wednesday, July 30th, 2008

gregg 为 O’Reilly 举办的 OSCON (Open Source CONvention) 2008 的与会成员录制了每人 30 秒钟的视频,用于介绍自己和自己要讲的东西。牛人云集,一定要看看!

其实转载这个视频的主要原因是这几天看到在学校论坛的 Linux 板块看到一些转载自 cnBeta 的搞笑新闻,我觉得比起“腾讯版的 QQ for Linux”来说,大家还是应该更多地关注一下这些东西。当然,这是我个人意见。 :)

The Implementation of Scheme Hygienic macro

Saturday, July 26th, 2008

我在很早的时候曾经写过一篇叫做“Play with macro”的文章,介绍了 Common Lisp 式的 macro ,那是一个很基本但又很强大的工具,比较容易理解。相比之下,Scheme 的 macro 就不一样了,虽然我很早就知道 Scheme 的 macro 是一种叫做 Hygienic macro 的东西,但是直到最近才明白它是怎么一回事,因为我要实现这样一个系统。

Common Lisp 的 macro 其实就是一段 Common Lisp 代码——一段操控代码的代码。因为在 Lisp 里程序的结构本身就是以一种类似于语法树的形式存在的,很好处理,所以宏的存在和广泛应用也理所当然了,而在 C/C++ 甚至于 Ruby、Python 这种语法复杂的语言里做这样的事情就很麻烦。C 提供了一个基于文本替换的宏,能完成不少事情。相比之下,Scheme 的那种基于模式匹配的宏反而更像 C 语言的预处理宏一些。然而 hygienic 并不是表示模式匹配的意思,而是指“保证宏展开的时候不与现有的符号冲突”,只是碰巧 Scheme 采用了模式匹配的方式罢了。

Read the rest of this page »

换回 Google 原来的 favicon

Saturday, July 26th, 2008

在不久前(其实大约都有一两个月了吧?) Google 换了它的 favicon,以前是这个样子:google_old.jpg ,而现在变成了这样:google_new.jpg ,我倒是不关心两个哪个寓意更深一些,既然各个人的品味不同,我也一定想坚持一下我觉得前者更好看的观点。

其实本来是件小事,但是 Google 实际上是天天都要用的,到今天终于忍不住了,Google 了一下,发现可以在 HTML DOM 树里创建一个 link 节点来强制指定 favicon :

Read the rest of this page »

Another pitfall in Python: == and !=

Thursday, July 24th, 2008

Besides the False == 0 problem, I encountered another problem that surprised me. Consider the following Python code:

1
2
3
4
5
6
7
8
9
10
11
class Foo(object):
    def __eq__(self, other):
        if isinstance(other, Foo):
            return True
        return False
 
f1 = Foo()
f2 = Foo()
 
f1 == f2  # => True or False ?
f1 != f2  # => True or False ?

What do you expect the result to be in the last two lines?

Read the rest of this page »

妈妈的新书:《家园》

Wednesday, July 23rd, 2008

记得妈妈很久以前给我说过她有一项伟大的计划。今天得知,就是这部叫做《家园》的新作啊:

home.jpg

于是趁机也帮妈妈宣传一下。太文学的东西我其实看不懂,而且我也还没拿到书呢,只好引用了一下当当上的内容简介:

安沙的黎明是从水上的一片乳白色开始的。那是河岚,是河水向太阳发出的第一声问候。安沙的河岚不像别的河岚那么单薄那么气短,它是气壮山河的。开始,它们是一寸厚,平平整整,如水上的一层冰。慢慢的,它们开始往上升。脚并不离开水面,只是把身体往高处长。等长到河谷的半山腰的时候,它们才袅袅的牵牵扯扯的上天去……

娃娃们在喊童谣:“猫爱鱼啊,野猪爱菜,我们爱太阳天天晒。”

我也一直非常敬佩像妈妈这样有梦想并为之奋斗的人啊! :D

The Schemepy weekly status report: the new fallback

Sunday, July 20th, 2008

I committed almost nothing to the Thousand Parsec repository this week. That’s because I’m mainly working on skime — a pure-Python VM for Scheme. After one-week hard working, the basic shape of the VM is already there.

Although there are still many work (e.g. the macro system) to do before it can be a really useful VM, I decide to write a simple layer to fit the Schemepy API and run the benchmarks to see whether the time spent on a new fallback is worth.

Read the rest of this page »

False == 0 in Python!?

Saturday, July 19th, 2008

bug.pngI came across a very strange error when tweaking the skime compiler. I decided to use the more specific push_0 and push_1 instruction instead of the general push_literal when the literal is 0 and 1 respectively. However, after added this code, several test cases was broken immediately.

After examining the execution of the failing test cases, I found that I got a 0 when expecting a False. And I finally found the problem is that I use if literal == 0 to test whether I got a literal 0. But unfortunately, False == 0 (as well as True == 1) evaluates to True in Python. So there’s the bug.

I’m feeling rather surprised when I found False == 0. Yes, I know we use 0 to represent a false value in C, but I really don’t expect it to be in Python — such a high-level and duck-typing language. However, since it is already there, I have to remember.

再见,紫金港!

Monday, July 14th, 2008

sun再过几天就要搬家了,离开紫金港,去玉泉。两个室友已经整理好行李回家了,寝室也略显的有些空空荡荡。虽然从小就经常搬家,但是搬家的时候我一般都在外面读书,只是回家以后发现目的地变成了另外一个地方了,自己却没有多少体会过搬家的过程,而且对于我来说,也只是位置变了一下,因为即使搬家,父母也不会轻易丢掉我的任何东西。我是一个倔强的人,你如果想通过某种强制的方式把你的观点加到我身上,必定会造成不愉快,但是父母一直都很尊重我自己的观点,这让我一直觉得是很幸福的。

我觉得,除非大脑损坏了,否则记忆这种东西是不会自己消失的。就是说,如果大脑要分配空间来存放“记忆”的话,这是一个 “new 了以后不 delete” 的过程,如果空间像普通的刻录盘那样一次性写的话,也没有必要进行 “Garbage Collection” 了。那我们平时“忘记”了某些东西,其实这些记忆并没有从大脑里消失,只是我们试图回忆起这件事情的时候选择的“出发点”到记录这件事的节点之间的“链路”太长了;有时候看到一些物品就会突然想起来,这是因为和物品关联的有另外一些“出发点”,可以很快地链接到这件事情的节点上。所以我也一直很珍惜各种东西,甚至是用过的草稿纸也时常是不会随便丢掉的。然而我自己又非常嫌麻烦(据说这是程序员的美德之一?),所以搬家的过程中必然会流失一些东西,有种很讨厌的感觉。

Read the rest of this page »