天天新发现,天天有惊喜!
RSS icon Email icon Home icon
  • 再贴作品

    Posted on November 14th, 2006 clover No comments

    Read the rest of this entry »

  • template&math

    Posted on November 14th, 2006 tommy No comments

    数学一个很重要的概念就是抽象,建立从具体到抽象的总结,与之对应的是有一套成熟的符号演算系统,比如我们用f(x,y)+g(x,f(x,y))这类的东西可以很轻松的表达想要计算的东西…
    现代的泛型计算代表了一些来自数学对计算机技术的不满,数学中有完整的理论,比如集合论,泛型分析,比如分析两个空间的同构与否,通过一些等价的代换就可以把复杂的问题最终简化到不证自明的公理层次,可是计算机上呢?总是充满了繁琐的细节…两个体系完全对应不起来
    STL引入了一些新鲜的东西,比如 iterator ,实际上是沟通了诸如vector, list, map…这类的桥梁,用数学上来说,这些集合空间都是同构可数的,可以和自然数集合{1,2,3…}对应起来的,所以自然的algorithm可以抛弃具 体的集合形态,而是建立在iterator之上…

    template引入似乎把一些事情变得有些完美了,可以优雅的实现诸如algorithm::add( x, y) 而又不失效率。但事情真的有那么完美么?

    boost的math中vector类库的设计思想还是秉承了STL的一贯做法,为了性能起见,引入了Lazy evaluation,又了Lazy evaluation,vector的operation是通过vector_expression来进行的,实际上是为了达到这样的效果,比如计算 v1 = v2 * 2.0f + v3 ; vector_expression可以保障不用生成太多的中间临时对象,否则传统的做法是 vtmp = v2.operator * ( 2.0f ), v1 = vtmp + v3 ;
    看看具体的一段代码,是不是这些模板用的已经有些过分了?
    // inner_prod (v1, v2) = sum (v1 [i] * v2 [i])
    template
    BOOST_UBLAS_INLINE
    typename vector_scalar_binary_traits

    vector_inner_prod
    typename E2::value_type,
    typename promote_traits
    typename E2::value_type>::promote_type> >::result_type
    inner_prod (const vector_expression &e1,
    const vector_expression &e2) {
    typedef typename vector_scalar_binary_traits
    typename E2::value_type,
    typename promote_traits
    typename E2::value_type>::promote_type> >::expression_type expression_type;
    return expression_type (e1 (), e2 ());
    }inner_prod (v1, v2) = sum (v1 [i] * v2 [i]) 这是数学给我们的表达式,但上面的实现,仔细看过,你只能说目前的技术也只能做到这一点了,层层的模板typedef就像洋葱头一样,其实本来有更简单的 实现,比如用简单的回调函数代替expression_type,实际上最终计算的expression_type就是传统意义上的call back而已,但call back在现代c++中无法做到inline的优化,不然可以做成这样的设计:template
    T func_dot_T(T t1, T t2)
    {
    return (t1 * t2);
    };
    template
    T func_nop_T(T t1, T t2)
    {
    return t1;
    };
    template
    class vector_expression
    {
    public:
    typedef typename V::dataType v_type;
    typedef v_type (*pFunc)( v_type, v_type );
    V * pV;
    v_type param;
    pFunc func;vector_expression(vector_expression & v_e) {
    pV = v_e.pV;
    param = v_e.param;
    func = v_e.func;
    }
    vector_expression(V & v, pFunc f, v_type p) {
    pV = &v;
    func = f;
    param = p;
    };vector_expression(V & v) {
    pV = &v;
    func = func_nop_T;
    };~vector_expression() {};
    v_type operator () (int i ){
    return func(pV->operator()(i), param);
    }
    };
    template
    class vectorT
    {
    T mdata[n];
    public:
    typedef T dataType;
    vectorT(){};
    ~vectorT(){};
    int dimension(){ return n; };
    dataType& operator () ( int i) {
    return mdata[i] ;
    };vector_expression operator * ( dataType f )
    {
    vector_expression v_e(*this, func_dot_T, f);
    return v_e;
    };
    };
    template
    class vector_operation
    {
    public:
    typedef vector_expression v_e;
    vector_operation() {};
    ~vector_operation() {};
    v_e add(v_e & v1, v_e & v2){
    v_e v;
    int d = v1.dimension();
    for(int i=0; i
    v.pT->operator () (i) = v1.pT->operator () (i) + v2.pT->operator () (i);
    }
    return v;
    };
    };typedef vectorT vec2;vec2 v;
    v(0) = 1.0f;
    v(1) = 2.0f;vector_expression v_e1 = v * 2.0f ;
    float r = v_e1.operator ()(0);

    实际上这绕来绕去的,只要对编译器做些调整,或者像Qt那样的做个预处理工具,比如实现一个对模板符号的再处理,让这些细节交给工具来作,可以避免写出这些可怕的模板符号出来。
  • wikipedia

    Posted on November 14th, 2006 tommy No comments

    wikipedia.org是个好东西,这几天疯狂的在上面看了些技术文章,很多技术的历史由来讲得非常好,看完后有种产快淋漓的感觉, 但这种网站被禁… 只能理解为好东西没与时俱进了,遗憾,PDA无法上更是遗憾,xx门应该opensource才对,至少也搞个pda版啊。

  • 句号

    Posted on November 14th, 2006 clover No comments

    今天终于把所有的考试都给over了,心情舒畅啊~~不过,天公不作美,今天的天气不太好……不过,我还是和friend到龙门遛遛了,到了那以后就看她 腰包由半圆形变成了一个平面,每到一个铺子前我都要提醒她:冷静!!不过,到底她还是花过头了……此时,我觉得我真是很省钱的人啊~最起码在买东西的时候 比别人冷静多了,记得在沈阳的时候,one of my friends还问我该怎么省钱呢~嘿嘿

    Read the rest of this entry »

  • 我也在这开个博客

    Posted on November 14th, 2006 clover No comments

    偶然逛到这里,发现可以注册,还可以发表自己的东西,很喜欢,先将自己最近的作品贴上来。

    Read the rest of this entry »

  • 拆迁

    Posted on November 13th, 2006 xiaowu No comments

    我家附近的棚户区终于拆迁了。其实在它拆迁之前我竟然都没注意到它的存在。直到昨晚路过看到“注意安全”的拆迁牌子才意思到这处在沈阳算得上历史悠久的棚户区终于还是要消失了。真有些后悔当初没来这里拍些照片。如今破砖乱瓦了,拍些照片纪念吧。

    Read the rest of this entry »

  • 沈阳人,咋整?

    Posted on November 13th, 2006 xiaowu No comments
    又一个无所事事的周六过去了。陪朋友去三好街买了些器材,原本打算扫街的,但走着走着就越发的没什么心情了,决定还是收拾东西回家吧。路上发牢骚,总结出个事实:沈阳的文化生活太贫瘠了。

    跟咱首都北京比文化有点太欺负沈阳了,还是拿咱们自己说事儿吧。我们的周末都是怎么过的?或者说有多少人想过周末怎么过?业余时间是怎么打发的?大 多哥们是吃饭喝酒,大多姐们是逛街购物。有些朋友说我和我几个朋友业余生活挺丰富的挺羡慕。其实即便是我们这些很爱玩的朋友也时常为玩而发愁,最常提出的 疑问是“我们玩啥?!”其实抱怨业余生活枯燥的兄弟姐妹,我们都是这个文化贫瘠社会环境的受害者。年纪轻轻精力旺盛,吃饭总有撑的吃不下去的时候吧?喝酒 总有喝的从嘴往外排泄的时候吧?购物也有把兜里钱花没的时候吧?那这个时候我们该去干啥?!

    最近到处找沈阳本地论坛,看看有什么群体活动。发现最多的是所谓的单身聚会,而且现在这种性质的聚会还越来越流行,以解决单身男女婚姻问题为初衷。 感慨,感慨我们的业余生活只剩下喝酒、吃饭和相亲。而奇怪的是大家都只知道去吃饭,但却不知道该吃啥,都只知道使劲喝却不知道自己量多少,都去参加集体相 亲却大多抱着“结交纯洁友情”的意思去。以喝酒、吃饭、相亲构建起来的我们沈阳人主要业余生活似乎只能反映出我们沈阳人是口渴、胃渴、性饥渴?!

    问号还是留给大家吧,因为我也是沈阳人,也涉嫌处在口渴、胃渴、性饥渴的文化贫瘠状态中。如何出离这个状态?我在想,我的朋友也在想。我们大家一起来想吧。

  • 黑白猫

    Posted on November 13th, 2006 xiaowu No comments

    一直不大喜欢猫,今天偶然的机会拍了一组,竟然发现比我家小呆子还上相。不多说了,发照片吧。

    Read the rest of this entry »