博文

Vim indent file, another yet!(2006-12-29 15:34:00)

摘要:" Vim indent file, another yet!
" Language:    Eiffel
" Maintainer:   Huang Liang <huangl@tfol.net> 
" Ref Maintainer:    Jocelyn Fiat <eiffel@djoce.net>
" Previous-Maintainer:    David Clarke <gadicath@dishevelled.net>
" $Date: 2006/12/28 21:33:52 $
" $Revision: 1.0 $
" URL: http://www.djoce.net/page/vim/
" Last Change:    2006 dec 28 : rewrite the indent rule

" Only load this indent file when no other was loaded.
if exists("b:did_indent")
  "finish
endif
let b:did_indent = 2

setlocal indentexpr=GetEiffelI......

阅读全文(3816) | 评论:1

linux和win32共存(2006-12-06 09:12:00)

摘要:这大概是我最早的一篇技术性文章了,大约是1999年. 看了十几个关于linux和win32共存的问题,总要有个答案吧! 以下的linux均指cosix linux 3.0亦适用于red hat 6.1以上(6.1以下的没试过)。 分区(适用于所有win32平台) 通常在第一分区安装最常用的操作系统,以得到最高的性能。 下面以第一分区为win32为例: 分区如下: Partition NO. size   File System Type Symbol 1 5000MB win32(Fat32) B 2 3000MB linux native(ext2) 82 3 Rest(>300MB) logic(Dos logic) (未知)  5 258MB linux swap(ext2) 83 6 Rest win32(FAT32/NTFS) B/(未知NTFS 5的代码) 这种分区表的好处是可扩展性好,保留了第四个主分区位置,可以自由增加第三个操作系统。 缺点是不太好做(fdisk或cfdisk(推荐)可以做,PQ Magic做不了),并且PQ Magic不认. (报错,并自动删去第二个扩展分区以后的所有分区。也可以不要交换分区, 这样PQ Magic就不会报错了) Partition NO. size   File System Type Symbol 1 5000MB win32(Fat32) B  2 192MB+ linux swap(ext2) 83 3 3000MB linux native(ext2) 82 4 Rest(>300MB) logic(Dos ......

阅读全文(4798) | 评论:0

C++关注方向(2006-12-06 09:07:00)

摘要:C++关注方向(本文的写作时间较早,其中有些言论已经不合时宜)

1.C++扩展
根据某位高人的解说,C++扩展似乎只有一条路了――类库。
类库有几个方向:
标准C++库的实现:基本上是各家一套,而最有希望的标准实现STLPort还在路上。不过我们最观心的还是如何用好它吧。
通用C++类库:有很多很多,不过现在Boost已经博采众长,成长为最全面(未必最好)的一个通用类库。
专门类库:很多专门类库已经并入通用类库,比如Serialization,Signal,Regexp等等,都已经是通用C++类的一部分,但还是有如WxWidgets,Bliz++,MFC,QT等专注于一个平台或一个方面。

C++类库,主要有两个发展目标,一是跨平台,跨编译器,强调可移植性;二是泛型化,强调编译期,自适应;

2.C++成例
C++大概是最讲究“最佳实践”的语言了。有如此重多的书都是讲关于如何写一个类,如何写一个方法,如何设计一个方法。不过,随着编译器的发展,很多成例很快就过时了。
比如说早期很讲究的一个成例NRV,已经成为编译器最重要的优化指标,基本上已经没有不支持这一优化的编译器了。
做为一个C++程序员,知道多少成例,可以直接说明有多少经验。

3.模式和架构
很多类库其实就是因为某一个模式或架构在C++中实现而出现。甚至Loki完全就是一个的C++模式库。如何在C++语言中实现某中模式和架构,也是很重要的一个方向。

4.应用平台
这是C++永远的痛处了,很多类库就是为此奋斗,可惜“类库!=应用平台”。到现在为至,还没有一个完全为C++定制的应用平台。所有C++程序员都不得不在他人的平台上工作。因此,就有一个很奇怪的方向,在XXX平台上使用C++。


......

阅读全文(3825) | 评论:0

语言之间的接口和适配层(2006-11-27 21:12:00)

摘要:语言之间并没有鸿沟,一种语言写成的东西并非不能被另一种语言调用,这是语言之间
的接口和适配问题。

1.语言之间的接口多是指动态语言和静态语言之间的接口。但是,从一般意义上来说
只要是高级语言都有相应的低层接口。区别只在这个接口本身如何表达。

例如,PASCAL语言它的低层接口只能表达为汇编,因为PASCAL本身就已经十分低层,
它的内部结构,如函数,结构等,只能以汇编的方式访问。类似的语言还有C。
又如,Python语言它的低层接口可以是高级语言--C语言。说明它的结构十分高级
可以使用C语言来访问。

静态语言很难以另一种静态语言来访问其结构,原因在于它的动态性很小,其静态结构就
比较简单,同时也比较低层,很难找一种语言能访问它所有的设施。C++就是这样,
虽然它大多数结构都可以被C语言访问,而且大多数时间C语言也是C++的低层接口语言。
但是调用成员函数这样的设施还是需要汇编语言才能实现。

2.两种语言之间有映射和适配两种接口方式。映射是指一种语言能直接访问另一种语言(用作接口)
的基本结构。比如C++和C之间,C++能直接访问所有C的结构,所以C可以用作C++的接口语言,
用于扩展C++。映射并不是包含。一般来说,只要高层语言能直接访问低层语言的大部分
基本类型和调用机制即可。大多数语言和相应的虚拟机汇编都有如此关系,例如C#/VB#/J#等语言
与IL的关系,Java和JVM bytecode的关系。编译语言中,D语言,haskell语言都有C的映射。
这类语言扩展时常采用保留低层接口风格,高层语言看起来像是直接调用低层语言。
最为著名的是Eclipse SWT库的Java-C接口,虽然Java-C的接口是适配关系,不是映射关系。

适配关系的接口,正好与映射关系相反,是由低层语言来访问高层结构。比如前面提到的
Java-C的接口,Java把对象结构公开出来,Jvm的调用公开出来,C语言只需要访问这些结构,
就可以生成相应的Java对象。这种接口的特点是扩展后接口与低层接口风格有很大差异。

映射和适配有区别也有统一,前面说到的SWT库就是在适配的接口上实现了映射风格......

阅读全文(3055) | 评论:0

波松分酒问题 C++求最优解. (2006-10-24 15:25:00)

摘要:/*
请设计程序解决“波松分酒问题”
问题如下:

某人有12品脱啤酒一瓶,想从中倒出6品脱,但他没有6品脱的容器,
仅有一个8品脱和一个5品脱的容器,怎样才能将啤酒分为两个6品脱?

抽象分析:

b = 大容器,也表示容积
s = 小容器,也表示容积
(f),(h),(e) 状态f=满, e=空, h=数字,表示容量

运算一: b(f) - s(e)  =>  b(b - s), s(f)
变例    b(h) - s(e)  =>  b(h - s), s(f)

运算二: b(e) + s(f)  =>  b(s), s(e)
变例    b(h) + s(f)  =>  b(f), s(s - b + h)

引出    b(f) - s(h)
        b(h) - s(h)

        b(e) + s(h)
        b(h) + s(h) 

如果以瓶中酒的数量为节点, 通过一次以上运算可达到节点之间认为连通.
此题可转化为一个有向图的搜索问题.
即找出......

阅读全文(3075) | 评论:0

素数缓冲求法,可重用类 (2006-10-24 15:23:00)

摘要:  #include <iostream> 
  #include <algorithm> 
  #include <vector> 
  #include <iterator> 
  
  template <typename T>
  class PrimerCache 
  { 
      typedef T   ValueType;
      typedef std::vector<ValueType> IntArray; 
      typedef typename IntArray::const_iterator IntPtr; 
   
      static IntArray mCache; 
       
  protected: 
      bool Test(ValueType num) const 
      { 
       &nbs......

阅读全文(3955) | 评论:0

Dev-cpp 小型指南(2006-10-24 15:21:00)

摘要:Dev-cpp是一个GCC在win32下的IDE程序,用Dephi 5编写,只有2M
具有以下功能:

   1.集成编译环境,支持工程模板.
   2.支持语法加高,自动注释,对中文的支持也不错.
   3.支持CVS集成
   4.支持源码分析,可以形成类树图.
   5.支持扩展包.

Dev-cpp官方发布有集成MinGW32 gcc编译套件,最新支持GCC 3.3(2003-7-15)
也可以支持MinGW其它版本和Cygwin gcc的各个版本.不过需要手动设置.

Dev-cpp支持多语言环境,中文版界面由我的好友nyra(nyra@sohu.com)维护,如果
大家发现中文版有翻释问题可以找她.如果有兴趣翻译帮助文件,也请联系.

Dev-cpp有两个常用版本,一是开发中的5.0beta,最新一版是4.9.8.0
另一个是4.01,是4.0的修正版(其中集成Gcc 2.9.5),前者功能较多,而后者较稳定.

图形化环境我就不多说了,和VC的用法类似,其实大家问题多集中于Gcc本身.

GCC, GCC和gcc不同的东西.前者是Gnu的编译环境,包括gcc, g++, gcj等多种语言的编译器
和as(汇编), ar(库), ld(联接器)等一系统编译工具.gcc是GCC中C语言的编译器,g++是
C++语言的编译器.

GCC被移植到多种操作系统中,在Win32上最著名是MinGW和Cygwin两个版本,MinGW的全称是
Minial GCC for Windows,如题,它是Win32上的一个小型GCC,只包括最少的GCC组件<10M
而Cygwin就是一个Unix On Windows的大系统,全部下载有300多兆,Unix下的大多数软件
在Cygwin中都有移植版,包括X-wind......

阅读全文(5549) | 评论:0

蛇形方阵 (2006-10-24 15:20:00)

摘要:/* 题目
按以下所示规律把1-N*N个数填入N*N的方阵中:
  1   3   4  10  11 
  2   5   9  12  19 
  6   8  13  18  20 
  7  14  17  21  24 
 15  16  22  23  25 
*/

#include <stdio.h>
#include <assert.h>
#include <string.h>
/*
解析:
 上三角形
 a(0)=   1     = 1    + 0 
 a(1)=  2 3    = a(0) + 1, a(0) + 1 + 1
 a(2)= 4 5 6   = a(1) + 2, a(1) + 2 + 1, a(1) + 2 + 2
 a(3)=7&n......

阅读全文(3620) | 评论:0

OOP已死(2006-10-09 18:01:00)

摘要:原文是英文,我这个不能算翻译只是笔记。
http://kawagner.blogspot.com/2006/08/oop-is-dead.html

文章的主要观点是:OOP已经达到它的顶点,并开始衰落。
主要证据有
1.函数式编程逐渐引人注意,许多老牌语言开始引入函数式编译的概念
比如,closure, continuation, iterate等。

2.多范式语言并不是解决之道:
1)编程语言应该引导编程员解决问题,而不是面对多种范式无所选择。
2)多种范式降低了代码重用的范围和效率.

3.OOP语言不能解决以下问题
1)多分派,双分派可以使用visiter模式,但要加入大量代码,也不灵活.
而函数式语言可以轻易做到多分派.
2)扩展工具类的能力.以java中String类为例,即使有一个ExtString类,
也没有太大用处,因为除了你的程序以外没人用ExtString,你无论是从
url中还是toString,得到的都是String,还要构造一次才能成为ExtString.
但在函数式/过程式语言中,添加一个函数十分容易.
3)扩展基本类操作,如果你需要添加一个能与Int/BigInt进行add的Complex类
呵呵,你不得不为每一个基本类型添加相同的操作.

4.OOP中最大的问题在于可变的状态,这正是函数式语言所没有的.
它影响了OOP在程序结构,并型性,优化.
函数式语言中无副作用的函数其实从根本上解决了这些问题.

5.元编程也不是一个好主意.元编程被用于解决OOP语言中一些语义的问题
但事实上,这完全是错误,Lisp这样自然的元编程语言中,语义是不能被修改的.这种使用原因完全是因为有些问题语言本身没有解决好.

6.程序框架能解决一些问题,并非所有问题.

总结一下

OOP在两个方面已经很难满足要求:
1.模块化.(原文是Dependencies,不过我认为模块化更准确)
2.扩展性.

详细内容还是看原文吧.......

阅读全文(4102) | 评论:1

Programming the SoundBlaster 16 DSP(2006-07-25 14:27:00)

摘要:                 ====================================
                 Programming the SoundBlaster 16 DSP 
                      Written by Ethan Brodsky       
                     (ericbrodsky@psl.wisc.edu)      
                            Version 3.1              
 &nbs......

阅读全文(3003) | 评论:0