歌谣在风中飘舞

私信 关注
soloist
码龄21年
  • 383,218
    被访问量
  • 52
    原创文章
  • 20,842
    作者排名
  • 84
    粉丝数量
  • 于 2000-08-18 加入CSDN
获得成就
  • 获得11次点赞
  • 内容获得261次评论
  • 获得21次收藏
荣誉勋章
TA的专栏
  • C与C++
    23篇
  • 交互艺术
    1篇
  • 优美的Haskell
    2篇
  • 小巧的Lua
    8篇
  • 电脑应用
    1篇
  • 程序设计知与行
    6篇
  • 读书笔记
    2篇
  • 锋言锋语
    9篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

函数式编程介绍之极简版

Functional Programming是一种编程范式,其中计算是通过对函数的求值(evaluation)来组织的,它尽量避免涉及状态与可变(mutable)数据。FP强调的是函数的施用(application),与之相对的命令式编程则强调状态的改变。几乎所有的主流语言都是偏
原创
6151阅读
1评论
1点赞
发布博客于 10 年前

Hi Haskell

Haskell语言概览性介绍
原创
5984阅读
2评论
1点赞
发布博客于 10 年前

你好,Haskell!

若干语言特性(是什么让Haskell如此独特?):Lambda,Curry,Algebraic Data Type,Type Class,Purity, Lazy Evaluation; 对并行与并发的支持 若干例子以及性能问题 Haskell在工业界的应用
application/msword
发布资源于 10 年前

Scala支持continuation了!

重大的进步
原创
6805阅读
0评论
1点赞
发布博客于 10 年前

PLT Scheme改名为Racket

名正则言顺
原创
12878阅读
11评论
0点赞
发布博客于 11 年前

空中花园没有谋杀案?

没有死亡就算是没有谋杀吗?
原创
6151阅读
0评论
0点赞
发布博客于 11 年前

涂鸦音乐

想过画音乐吗?
原创
5569阅读
0评论
0点赞
发布博客于 11 年前

Let it be


    一切都是命运的安排吗?
原创
4876阅读
1评论
0点赞
发布博客于 11 年前

古印度的智力题真有限

题目就不能作摘要吗?
原创
5445阅读
0评论
0点赞
发布博客于 11 年前

艺术,真的和Haskell有关吗?

我相信,和她无关的一切会多么无趣。
原创
10155阅读
9评论
0点赞
发布博客于 11 年前

你能表演自己吗?

表达我们内心想要表达的
原创
5117阅读
0评论
0点赞
发布博客于 11 年前

Visual C++对虚函数重载的诡异布局

    毫不令人惊讶的是,C++又给了我一个惊讶!    对于被重载的虚函数(overloaded virtual member functions),Visual C++ 并不会依照它们声明的顺序排布在虚表中。    一组(同名的)重载虚函数会按照它们声明的逆序依次排布在一起,而组与组之间的顺序,是由组内最先出现的那个函数声明的位置决定的,越先声明,该组越靠前。  
原创
6154阅读
0评论
0点赞
发布博客于 11 年前

时间的灰烬之与狼共舞的羊

    “很多年之后,我会变成一头真正的狼。每一只羊都会变成狼,只要他尝试过什么叫做弱肉强食。我不会介意别的羊怎么看,我只不过不想生命的全部意义就是任人宰割。”    现在,提问开始:“根据以上线索,请说出时间的灰烬到底他妈的是什么?”    很好,王家卫同学举手了,那么你说说看吧。    “时间的灰烬,Ashes of Time,也就是那部神经质到抽风的电影《东邪西毒
原创
5339阅读
0评论
0点赞
发布博客于 11 年前

从电影到multi-touch再到几句闲话

    今天坐在办公室里,听到另外几个同事在谈电影:A问B有没有看过《星际迷航》,回答没有;A再问《少数派报告》,仍然没有。然后A说《少数派报告》(似乎是2000年左右的片子)里展现的未来电脑的multi-touch人机交互技术对现实世界的计算机界产生了重大影响。诚然,确实是直到最近几年才出现了以iPhone为代表的消费电子产品将multi-touch技术带给了普罗大众,但是我对此技术的创意来自《
原创
5280阅读
0评论
0点赞
发布博客于 11 年前

恶斗TCC(Tiny C Compiler)

     TCC,全称Tiny C Compiler(http://bellard.org/tcc/),是一个颇具特色的C编译器,你能把它当作一个C语言解释器来用,也可以嵌入你自己的应用程序作一个动态代码生成器。是的,我们就是这么干的。在我们的项目中,粒子系统的运动规则用C语言来描述,然后由TCC动态生成native code运行。这么做既不失效率又保持了较高的动态能力。    但是,
原创
22678阅读
19评论
3点赞
发布博客于 12 年前

一次顺带的语言性能评测 -- 以2D水波特效的实现为例

    本来一开始我只是想学习一下如何实现2D水波特效,关于这个问题早有现成的效果不错且简单的算法,google一下可以找到很多资料,比如这篇http://freespace.virgin.net/hugo.elias/graphics/x_water.htm。但是由于性能上的问题,导致我更换了多种开发语言,最终也使得这次的学习变成了一次编程语言的shoot-out游戏。    简单来说,2D水波
原创
8195阅读
7评论
0点赞
发布博客于 12 年前

探索一种C++二进制模块的热更新机制

    现如今,提供稳定可靠且能满足人民群众日益增长的物质文化需要的服务是互联网服务商的基本责任,所以服务端软件一定要够壮够强够灵活。服务程序一旦跑起来那就最好7X24小时地永远别挂,而且多变的、不停增长的用户需求也得尽快满足。可问题是,永远也别指望程序员写出没有bug的程序,任何架构师也没有水晶球可以预测将来的花花世界,无论当时看起来多么完美的代码,将来也会因为种种原因要被修改(或者被丢弃?)。
原创
16103阅读
8评论
1点赞
发布博客于 13 年前

一个顶顶简单的冷兵器近距离混战的NetLogo模型

    NetLogo和StarLogo都是多主体(multi-agent)模拟平台,后者继承自前者但功能更强大、开发进程也更活跃。它们都采用类Logo的建模编程语言,并引入了大规模并发机制,所以特别适合用于构造由许许多多自主活动但相互影响的简单个体组成的大规模系统(比如蚁群)。通过在电脑平台上模拟每个主体的行为,我们可以探索系统作为整体所表现出的宏观现象和性质。    本文介绍的模型是基于Net
原创
9098阅读
1评论
0点赞
发布博客于 13 年前

"The Development of AppleScript"的笔记

    本文是阅读“AppleScript” William R.Cook的笔记。     该文描述了Mac OS上的通用脚本语言AppleScript和通用的进程间通讯机制Apple Events。    支持脚本的(scriptable)应用程序中的数据对象包含(子)元素(elements)和属性(properties)字段。(子)元素字段可以有多个值,这些值都是(子)对象的引用,而属性字段的
原创
6356阅读
0评论
0点赞
发布博客于 13 年前

bjam,别弄乱了链接顺序!

    公司目前用bjam做build工具。bjam为boost项目所采用,对构建常规的C/C++工程比较方便,但是限制也很多,尤其是内建的脚本语言太晦涩,使得定制自己的构建规则很不方便。不过今天我想说的倒不是这些缺点,而是bjam 3.1.13在FreeBSD平台上的一个bug。    我们有3个文件,分别是 main.c :#include void foo_one(int);in
原创
7197阅读
2评论
0点赞
发布博客于 14 年前

Lua5.1.1的一个隐藏BUG

在最近的lua maillist上,三巨头之一的Roberto Ierusalimschy报告了一个5.1.1版本的bug:当一个函数里用到了超过 255个不同的全局变量和常量时,由数字常量和访问table的表达式组成的复合表达式(比如"2*a.x")就有可能产生很奇怪的结果。比如 下面这段程序: kkk = 2;v1=2;  v2=2;  v3=2;  v4=2;  v5=2;  v6=2; 
原创
9212阅读
1评论
0点赞
发布博客于 14 年前

Lua的debug hook功能探究与改造--上篇

 Lua5.1提供了较为完善的debug库函数,其中的sethook可以让用户自己设置hook函数来监控程序的某些运行行为,这包括:调用 函数,从函数返回和将要运行新的一行代码,每当这些事件(event)发生时hook函数都会被调用。读者可以试试 monitor_v1.lua, 它是debug hook功能的一个简单应用。require导入该文件后便得到一个名为monitor的扩展库,里面只有一个
原创
16600阅读
3评论
0点赞
发布博客于 15 年前

vc如何返回函数结果及压栈参数

    首先说明,本文的分析对象是运行在IA32平台上的程序,试验用的编译器是Visual C++ 6.0中的cl.exe(Microsoft 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86)。    IA32程序利用程序堆栈来支持过程(procedure)调用,比如创建局部数据、传递参数、保存返回值信息、保存待今后恢
原创
4909阅读
6评论
0点赞
发布博客于 15 年前

一颗璀璨的月光宝石——Lua

邓际锋本文发表于2006年6月《程序员》杂志,谢绝转载Lua语言简介    1993年在巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro in Brazil)诞生了一门编程语言,发明者是该校的三位研究人员,他们给这门语言取了个浪漫的名字——Lua,在葡萄牙语里代表美丽的月亮。事实证明她没有糟蹋这个优美的单词,Lu
原创
6178阅读
2评论
0点赞
发布博客于 15 年前

如何实现每个对象只执行一次的例程

    对象是数据和行为的有机结合体,每一个对象实例保存的数据都是自身特有的信息,而其中的一些数据是需要经过计算或处理才能得到的,有时候这种计算的量还不小。因此对于那些在整个对象生命周期都不会改变的数据而言,每次为了获取它们而重复执行的计算就是一个大大的浪费。一个改进的方案是:在对象创建时执行相应的动作以预先计算好那些稳定的数据并保存在内部,以后需要的话就直接返回这些预先算好的数据。这听起来是不错
原创
3162阅读
1评论
0点赞
发布博客于 15 年前

入职了

    6月29日上午将近9点抵达公司,可爱的zhangqi已经在办公室等着。本来9点半上班,但今天她专程8点就赶到了。装好配发的电脑后大约10点,她带我去看帮我租的房子。住处离公司很近,走10分钟就到。一室一厅的房型,家具都全,好几样电器还是房东刚买的,虽然装修旧了点,但是我仍然很满意。要知道6月底7月初可是学生毕业工作的高峰期,而且我是23号才告诉zhangqi入职时间的,能在这么短时间找到符
原创
3045阅读
2评论
0点赞
发布博客于 15 年前

gcc的一个小bug

    在C语言里有一个通用指针,即void*类型指针。通用指针有一条特殊的性质:任何一个指向某种类型(非函数类型)数据的指针转型为通用指针后再转换回原始类型,指针(的值)不会改变。换句话说,任何非函数类型的指针与通用指针间的互相转型(以及赋值)是(语法上)合法且(语义上)安全的。    通用型指针实际是一种类型未知的指针,因此不能对它解引用(dereference)和施行下标(subscri
原创
3090阅读
5评论
0点赞
发布博客于 15 年前

OpenLua简介:一个支持静态元编程的可扩展式开放编译器

邓际锋 本文采用 Creative Commons Attribution-ShareAlike 2.5 许可证零、 从哪里获得OpenLua     OpenLua的项目主页是http://www.luachina.org/projects/openlua/ ,2005年12月28日0.01版发布,所有的源代码可从这里下载。因为Lua是主要的开发语言,所以在你的机器上必须有一
原创
5602阅读
2评论
0点赞
发布博客于 15 年前

Generic for中使用pairs和ipairs的一个陷阱

    Lua有一种很自然的循环方式,即Generic for。它的格式是这样的:for namelist in iterator do   blockend其中iterator是一个迭代器函数,它可以有一个或多个返回值,namelist是逗号分隔的循环变量名列表,用来接收每次调用迭代器函数得到的返回值。这段程序的语义与下面形式的代码相同:while true do   local namelis
原创
3819阅读
4评论
0点赞
发布博客于 16 年前

2005年C++软件技术大会第一天

    今天是C++软件技术大会的第一天,上午的主讲人是Bjarne Stroustrup,topic是关于C++新标准C++0X制订的一些情况。Bjarne用了4个词来描述标准制订的过程: 正式(formal)、缓慢(slow)、官僚主义(bureaucratic)、民主(democratic)。另外,那个X预计是9,所以如果进度正常的话下一代标准应该是2009年推出。    下午由科泰世纪的陈
原创
6944阅读
8评论
0点赞
发布博客于 16 年前

雅虎招聘考试中两道C++题目的疑问

    昨天参加了雅虎校园招聘的在线考试,选择的语言类别是C++,其中遇到了这么两道题://int I = 2;int x = (++I) + (++I) + (++I);//int I = 2;int x = (I++) + (I++) + (I++);问分别执行两段代码后,x的值是多少?    在这里我不想去辛苦地求解,因为我认为这两道题是有问题的。为什么?    ANSI C标准告诉我们,如
原创
12117阅读
75评论
0点赞
发布博客于 16 年前

在VC6.0中如何让new操作失败后抛出异常?

    标准C++规定new一个对象时如果分配内存失败就应抛出一个std::bad_alloc异常,如果不希望抛出异常而仅仅传回一个NULL指针,可以用new的无异常版本:new(nothrow)。    VC6.0在头文件中声明了这两种operator new操作符:void *__cdecl operator new(size_t) _THROW1(std::bad_alloc);void *
原创
4019阅读
1评论
0点赞
发布博客于 16 年前

为什么会出现LNK2005"符号已定义"的链接错误?

    许多Visual C++的使用者都碰到过LNK2005:symbol already defined和LNK1169:one or more multiply defined symbols found这样的链接错误,而且通常是在使用第三方库时遇到的。对于这个问题,有的朋友可能不知其然,而有的朋友可能知其然却不知其所以然,那么本文就试图为大家彻底解开关于它的种种疑惑。    大家都知道,从
原创
21201阅读
12评论
0点赞
发布博客于 16 年前

Lua的语法是无歧义的吗?

    Lua5.0的语法非常简洁,这从参考手册中的语法定义的规模(转换成标准BNF形式大概有100个左右的产生式)可以看出。不过简洁归简洁,它却不完全是无二义性的。下面将用具体例子揭示什么样的代码会引起歧义(执行环境是www.lua.org发布的Lua5.04)。    首先定义如下几个函数:function foo(a)   print("foo print",a)   return aend
原创
4113阅读
7评论
0点赞
发布博客于 16 年前

C++的缺省参数与函数重载是正交特性吗?

    在《程序员》2003年第12期的一篇访谈录中,Ruby的发明人Matz较详细地阐述了Ruby的设计思想及遵循的原则,其中大部分我都深以为然,特别是他高度重视语言设计过程中人的因素则更是让人激赏。不过他对正交特性的看法却让我颇为迷惑。    正交(orthogonal)本来是一个几何概念,表示的是垂直相交,后来又被扩展到线性代数中,表示内积为零的两个向量之间的关系。线性空间中一组两两正交的非
原创
4479阅读
8评论
0点赞
发布博客于 16 年前

在Win2000注册表中修改中文输入法切换快捷键

Win2000默认的中文输入法切换快捷键是Ctrl-Space,不过用户可以自己修改它。方法是右键点击托盘区的输入法图标,点选“属性”进入“区域选项”设置中的 “输入法区域设置”面板,在“输入法区域设置的热键”的下方有一个“项目”列表框,找到并选中“中文(简体)输入法-有输入法/无输入法切换”这一项,点击“更改按键顺序”按钮便可进入更改快捷键的对话框。但是要注意,一旦你更改并使之生效的话,你就再也
原创
9980阅读
1评论
0点赞
发布博客于 16 年前

Lua的多任务机制——协程(coroutine)

    并发是现实世界的本质特征,而聪明的计算机科学家用来模拟并发的技术手段便是多任务机制。大致上有这么两种多任务技术,一种是抢占式多任务(preemptive multitasking),它让操作系统来决定何时执行哪个任务。另外一种就是协作式多任务(cooperative multitasking),它把决定权交给任务,让它们在自己认为合适的时候自愿放弃执行。这两种多任务方式各有优缺点,前者固有
原创
37632阅读
8评论
2点赞
发布博客于 16 年前

Lua的function、closure和upvalue

    Lua中的函数是一阶类型值(first-class value),定义函数就象创建普通类型值一样(只不过函数类型值的数据主要是一条条指令而已),所以在函数体中仍然可以定义函数。假设函数f2定义在函数f1中,那么就称f2为f1的内嵌(inner)函数,f1为f2的外包(enclosing)函数,外包和内嵌都具有传递性,即f2的内嵌必然是f1的内嵌,而f1的外包也一定是f2的外包。内嵌函数可以
原创
5343阅读
0评论
2点赞
发布博客于 16 年前

ANSI C中取得结构体字段偏移值的惯用法

    假设在ANSI C程序中定义了一个名为MyStruct的结构类型,其中有一个名为MyField的字段,如何取得它在结构体中的偏移?typedef struct MyStruct_tag{  // some fields  ...  long MyField;  // other fields  ...} MyStruct;    最容易想到的方法应该与如下代码差不多:s
原创
4850阅读
1评论
0点赞
发布博客于 16 年前

在Lua中如何动态生成两个函数的复合函数

    Lua是一种动态类型语言,变量名可以在运行时绑定到任意类型的值上。Lua从函数式编程语言中借鉴了许多思想,这体现在Lua的基本类型中除了有number,string等其它语言中常见的基本类型外,还有函数(function)。这意味着函数: 可以用变量命名; 可以提供给函数作为参数; 可以作为函数的返回值; 可以包含在数据结构中。下面我们利用函数在Lua中作为"一等公民"的身份,来实现
原创
4885阅读
0评论
0点赞
发布博客于 17 年前

内存对齐与ANSI C中struct型数据的内存布局

    当在C中定义了一个结构类型时,它的大小是否等于各字段(field)大小之和?编译器将如何在内存中放置这些字段?ANSI C对结构体的内存布局有什么要求?而我们的程序又能否依赖这种布局?这些问题或许对不少朋友来说还有点模糊,那么本文就试着探究它们背后的秘密。    首先,至少有一点可以肯定,那就是ANSI C保证结构体中各字段在内存中出现的位置是随它们的声明顺序依次递增的,并且第一个字段
原创
7788阅读
11评论
1点赞
发布博客于 17 年前

拨开自定义operator new与operator delete的迷雾

    C++允许用户通过自定义operator new和operator delete的方式来更改new与delete表达式的某些行为,这给了程序员定制内存管理方案的自由。但是享受这种自由的时候必须遵守一定的规范,具体可以参见《Effective C++ 2nd》的相关条款。本文补充解释一些特别容易引起误解的问题。    operator new和operator delete都有其正规形式
原创
2987阅读
0评论
0点赞
发布博客于 17 年前

学到的一个宏技巧

   最近看到孟岩的一篇文章介绍了一个C语言的宏定义技巧,觉得颇有价值。宏定义如下:#define RETURN switch(Exception_stack = / Exception_stack->prev,0) default: return    看得出这是定义了一个实现C中return功能的宏RETURN,但它保证了在return之前一定会执行Exception_stack =
原创
3839阅读
9评论
0点赞
发布博客于 17 年前

我看C++/CLI和.NET

    最近C++/CLI成了国内程序员关注的焦点,原因是它的开发人之一Stan Lippman来中国开技术大会并全力推介它,而且《程序员》杂志刊登了孟岩老兄对此人的专访,于是软件界一时群情激昂、人声鼎沸,各种说法也是不绝于耳。此专访的节选被放在孟岩自己的BLOG上,后头跟贴相当多(恐怕有上百条),不少人流露出对C++/CLI的反感甚至鄙夷,更有过火者对Stan Lippman本人也是大肆挞伐,说
原创
2545阅读
6评论
0点赞
发布博客于 17 年前

整型表达式比较的潜在危险

    在程序里头经常会用到整数之间的大小比较,但是其中潜在的危险却往往被忽略了。例如一个内存拷贝函数:void memcpy(void *pTo,void *pFrom,size_t size){   assert(pTo != NULL && pFrom != NULL);   while( --size >= 0)   {      *pTo++ = *pFrom++;   }}  
原创
2757阅读
1评论
0点赞
发布博客于 17 年前

C/C++中数组名的含义

    C/C++中的数组名是个很奇怪的东西,它到底代表什么呢?        对于char array[n](n是一个常数),大概有这么几种语义:    char* const(注意不是const char*)   char [n]    举例如下(WIN2000 PRO平台,VC.NET 7.1下编译): char *p = array; //array表示char* const,p得到的
原创
4675阅读
5评论
0点赞
发布博客于 17 年前

MFC中菜单项的动态添加、删除与响应

    在编写游戏地图编辑器时涉及到菜单项的动态添加和动态响应,本文记录了碰到的一些问题和解决方法。    因为游戏地图是分层次存储和显示的,所以在编辑器主菜单中有个Layer菜单,这个菜单中的菜单项除了一个"Show Only"菜单项和一个Sperator,其它的菜单项是根据地图中的层数和层的名字动态添加的,所以在编译期无法知道菜单项的个数,也无法用ON_COMMAND宏将这些菜单项与命令处理函
原创
7472阅读
1评论
0点赞
发布博客于 17 年前

C标准库函数abs的一个错误

    VC.NET 7.1 提供的取绝对值函数(abs.c中)如下:    int __cdecl abs (        int number        )    {        return( number>=0 ? number : -number );    }   此函数实现得非常简单,乍看之下无任何毛病,可是仔细琢磨琢磨,就发现了一个大漏洞。举个极端的例子,当函数参数为INT
原创
7507阅读
7评论
0点赞
发布博客于 17 年前

模板参数推导

看下面一段代码:         template     struct FuncPtrTraits     {       typedef  ReturnValue_t (*Type)(int,int);     };     template     void MakeFuncPtr(typename FuncPtrTraits::Type arg1)     {       //do s
原创
3009阅读
4评论
0点赞
发布博客于 17 年前

C++继承体系中名字遮挡问题

    C++中派生类函数遮挡(Hide)基类中同名函数的问题是比较令人费解的,有必要详细说明一下。    看看下面一段代码:     class Base     {     public:       virtual void f(int x) {};     };     class Derived : public Base     {     public:       virtua
原创
1705阅读
3评论
0点赞
发布博客于 17 年前

关于内存分配与释放的试验

    在VC里头,用new创建一个对象或者分配一块内存的话,如果操作失败并不会抛出一个异常,而只是返回一个NULL指针。    有如下代码:       delete   p; //p是一个合法的指针       delete   p;                这段代码在VC的debug版本中会在运行第二行时给出警告,因为此时p指针指向的已不是一个合法的被分配内存区了,delete
原创
1848阅读
2评论
0点赞
发布博客于 17 年前

发呆并幸福着

    每每发呆后,总是站在别人的立场上为自己愧疚,又在大脑的无意识状态中过了余生的两万分之一。   ··· ···(此处省去一千字)  系统在催我了,我登录的时间将到,只好总结一句:以后对着电脑发呆有理由了,就说是在构思文章。
原创
1716阅读
4评论
0点赞
发布博客于 17 年前

MFC中打印预览的若干问题

 MFC提供了一个框架性的打印和打印预览功能代码,它的基本思想是将实际显示和打印文档的代码合二为一,即都由此文档关联的CView中的OnDraw(CDC *pDC)来处理,由MFC框架根据用户的操作来决定传进来的pDC是指向屏幕还是打印机,当pDC指向屏幕设备,就在屏幕上显示文档,当指向打印机设备时就打印文档。这些都很好理解,但是,当我们要打印预览时,传进来的pDC就有些特别了。因为打印预
原创
2313阅读
0评论
0点赞
发布博客于 17 年前