—— Where exceptions happen.

2007年5月29日星期二

中文编程语言和它的一条明路

今天在豆瓣小组上又看见一个“中文编程语言”——o语言,为什么要说“又”呢,因为我还看见过“易语言”(vb控件汉化版),“中蟒”(python的汉化版),或许在中文互联网的哪个旮旯里还藏着什么别的雄心勃勃要做“中国人自己的编程语言”之类的开发者。

说起来,中国人的民族自尊心从1911年以来就没有被彻底满足过,虽然眼看着似乎就要”大国崛起“,可国民心理还是揣着对自身民族文化的不信任和危机感,写几行程序都觉得有被西化的危险,中文最好,中文节省字数,中文优美,中文历史悠久,……中国人要用中文写程序。嗯,但汉字在计算机上没有象形文字的特殊待遇,也就是两个字节共32个bit的0/1序列,用16bit的ASCii字母和用32bit的Unicode字符对编译器而言并无区别。按着这条国产翻译字幕组的道路走下去是没希望没出路的。我且给中文编程语言指一条明路:

首先要认清,必须扬弃乔姆斯基那套形式语言的玩意,在这个框架下怎么搞,中文词汇都是字符流里的token,没有一点象形文字的特点。要搞就搞一套模仿象形文字的形式计算体系。计算符号要可以在二维空间中按特定规则组合,而不是一维的符号流。另外有必要证明这个二维的形式符号系统和图灵机等价,然后中文编程语言才有了自己的理论基础。一个Lambda演算就可以发展出一大堆Functional Language. 一个二维形式计算机不知道可以搞出多少”中国式编程语言“,到时候编程都是论帧,不是论行。这种语言的一段独立功能的代码由一些随意歪斜的线条和符号构成,其中依稀可辩一些来自中国字的偏旁部首,这就是一帧,是程序员在手写设备上”画“出来的。然后一帧帧能够连动,就构成一个程序,优势极大,这种语言基于图形间的拓扑关系,容错性大,图形直观,易于debug,模块关系一目了然,易于复用。嗯,这条路虽然艰险,却是编程语言中文化的一条光明大道啊,嘿嘿,kuso完毕

ps. 等我退休后,说不定真的会把这个弄出来的 :P

2007年5月22日星期二

GFW诉讼案——遮挡长城的窗户纸会被捅破吗?

时间:2007年5月29日上午9:00
地点:上 海法院 浦东新区分院
人物:yetaai@gmail.com
事件:一个平民因为GFW阻止他访问自己的网站而起诉中国电信违约

我不知道他的姓名,所以用他的gmail称他为yetaai,先允许我向yetaai致敬,他和许多许多人一样一头撞上了长期以来我国政府讳莫若深的互联网审查机制(俗称Great Firewall,GFW),但他选择了走法律途径,捅破了一直遮挡在GFW外的那层窗户纸。这其实不会改变GFW的存在,但这会让GFW的存在从心照不宣的切口黑话(金盾,盾,GFW)转为被公开讨论的互联网言论审查。政府显然是不愿意让某些话题公共化的,他们希望保持对公共议题的控制,这就包括控制机制本身,当某些事物是不可公开谈论的,人们就用类似切口的词汇来谈论它。互联网言论审查机制的存在正一直被以黑话的形式流传于中国互联网,第一次遭遇被拒绝访问,你茫然不知所以然的时候,会有人对你说:

被盾了吧?(被金盾了吧?撞墙了吧?GFW了?)
找个代理就好了。(装个vpn吧。去那个https代理网站吧。有proxyhunter吗?)
这些对话应该是“部分”中国互联网用户的共同经验。同时也会伴随有某些自动附加的合理化解释: 因为要过滤色情内容,有国外反共网站嘛,中国不能乱等等,但GFW的存在本身显然不是努力寻找借口合理化就能否认的。(当然我也见到过坚持称GFW不存在的国人...)和皇帝的新衣正相反,GFW也即互联网言论审查是中国网民随便可以撞上,却不存在于公共话题中的神秘之物。它正让虚伪逐渐成为国民性格的一部分,等到每个中国人都可以把政治宣传和现实生活轻松区分对待的时候,我们不仅放弃了政治,而且将失去生活的真实。
不是为了别的,为了诚实这一基本美德:希望这个案件能走完法律程序,希望我们的生活越来越真实。

又,据说yetaai被盾的个人网站又重新可以访问,是因为GFW不想窗户纸被捅破吗?

又二,仔细看yetaai的blog,你会在他的致谢名单里发现Richard Stallman,呵呵,自由软件基金会的创始人也参与了?太神奇了……

2007年5月16日星期三

How-to: Build OCaml native code with MSVC 2005

Most Ocaml books, tutorials and lectures would stress its performance. OCaml’s optimizing compiler generates high-performance native code, which I cost a whole afternoon to build.I installed Ocaml 3.09.3 release, and read the “Readme.windows.txt”. I found these evil lines:

" Visual C++ version 6 or later. We use Visual C++ 2003.
The free download Visual C++ 2005 Express Edition works under
Windows 2000, but not under Windows XP because of the "manifest"
annotations on DLLs, which are not yet supported by OCaml.
So, please stick with the 2003 edition for the time being. "
But... I've installed the free Visual C++ 2005 Express Edition. ╮(﹀_﹀")╭ One way is uninstalling the free MSVC 2005 Express edition, then emule/bt a pirate and out-of-date MSVC 2003. the other is trying to find some workaround. I chose the latter.
After a long try-err process, I successfully build OCaml into native win32 code with MSVC 2005 version. following is the detail step-by-step:

0. make sure you've installed Ocaml for the port based on the Microsoft toolchain. This guide isn't for Cygwin port.

1. get Visual C++ 2005 Express Edition from Microsoft.com, It's free. and get it's SP1 too.

2. get Microsoft Macro Assembler 8.0 (MASM) Package from Microsoft.com. It's free also.

3. get Microsoft Windows Server 2003 R2 Platform SDK from Microsoft.com. It's free but require you pass the "Windows Genuine Advantage" test.(if you hate this test. you can easily find the SDK ISO on emule...*\(▔▽▔)/*)

4. install 1,2.3.

5. set the PATH environment variable: add "C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\Microsoft Visual Studio 8\VC\bin" into the PATH. you may need alter the path as your tools' real install directory.

6. set the LIB environment variable as "D:\Microsoft Platform SDK for Windows Server 2003 R2\Lib;C:\Program Files\Microsoft Visual Studio 8\VC\lib\" you may need alter the path too.

7. Thus you ocamlopt your .ml file, thus all of them. And on the seventh step you ended your work which you had made; and you rested on the seventh step from all your work which you had made. :-P

ps. this How-to guide is writen in an obviously imperative style. Let us rewrite it in functional style:
let PATH = "$Visual Studio$\VC\bin; $Visual Studio$\Common7\IDE"
let LIB = "$Platform SDK$\lib; $Visual Studio$\VC\lib"

Functional style is really short and clear. :-)

OCaml resources

Chosen OCaml for my neural network simulation, these days I greedily collected OCaml resources all the Web just as a spider. Wish the following links help other OCaml-rookies.

Intro:
Ocaml on Wikipedia ;
Ocaml Homepage

Manual:
The Objective Caml system release 3.09 (newest ref)

Lecture:
Using, Understanding, and Unraveling: The OCaml Language; (2000, 2001)

Tutorial:
http://www.ocaml-tutorial.org/ (this site is resourceful and updated)
"Ocaml for scientist" (Chapter 1) (recommend)

Code:
OCaml official codebase: The Caml Hump
Codecodex's OCaml Category
. (this site is very interesting for fans of many kinds of language , not including Haskell :-p )

IDE:
OCaml Development Tools (an Eclipse plug-in. released 1.0 at May 10, 2007)

Benchmark:
OCaml vs. Java.(Take it for fun!)

News rss:
Maybe I should use pipes to make one rss for OCaml News….Hmmm

中文论坛:
Ocaml china, 一个不错的中文Ocaml论坛,虽然草创,文章和人气都不是很多。但格局和讨论氛围很好:)希望能进一步壮大。