Saturday, June 21, 2008

lsof/netstat

sudo -s
lsof -i # -i4tcp
netstat -p # -ltnp

Thursday, June 14, 2007

man dir_colors ; ls -d --color a.out Desktop |xxd

wjy@ubuntu:~$ ls -d --color a.out Desktop |xxd
0000000: 1b5b 3030 6d1b 5b30 313b 3332 6d61 2e6f .[00m.[01;32ma.o
0000010: 7574 1b5b 3030 6d0a 1b5b 3031 3b33 346d ut.[00m..[01;34m
0000020: 4465 736b 746f 701b 5b30 306d 0a1b 5b6d Desktop.[00m..[m

wjy@ubuntu:~$ echo -e '\e[01;32mfoo bar\e[00m'
foo bar
wjy@ubuntu:~$ python
>>> print '\x1b[01;32mfoo bar\x1b[00m'
foo bar

wjy@ubuntu:~$ man dir_colors
..................

OTHER TERMINAL TYPES (ADVANCED CONFIGURATION)
If you have a color-capable (or otherwise highlighting) terminal (or printer!) which uses a different set of
codes, you can still generate a suitable setup. To do so, you will have to use the LEFTCODE, RIGHTCODE, and END‐
CODE definitions.

When writing out a filename, ls generates the following output sequence: LEFTCODE typecode RIGHTCODE filename END‐
CODE, where the typecode is the color sequence that depends on the type or name of file. If the ENDCODE is unde‐
fined, the sequence LEFTCODE NORMAL RIGHTCODE will be used instead. The purpose of the left- and rightcodes is
merely to reduce the amount of typing necessary (and to hide ugly escape codes away from the user). If they are
not appropriate for your terminal, you can eliminate them by specifying the respective keyword on a line by
itself.

NOTE: If the ENDCODE is defined in the global section of the setup file, it cannot be undefined in a terminal-spe‐
cific section of the file. This means any NORMAL definition will have no effect. A different ENDCODE can, how‐
ever, be specified, which would have the same effect.

NOTES
The default LEFTCODE and RIGHTCODE definitions, which are used by ISO 6429 terminals are:

LEFTCODE \e[
RIGHTCODE m

The default ENDCODE is undefined.

Friday, May 25, 2007

The Meaning of “f(x)” in C++


The Meaning of “f(x)” in C++
Scott Meyers, Ph.D.
Software Development Consultant
Voice: 503/638-6028
smeyers@aristeia.com
Fax: 503/638-6614
http://www.aristeia.com/


Function Calls and Implicit Type Conversions
Consider:
void f(double d);
int x;
...
f(x); // call f with an int
Should this compile?
■ x is of the wrong type.
C says yes. So does C++.
■ Note: this is an attempt to read minds.

Function Calls and Overloading
Consider:
void f(int);
void f(double);
Should this compile?
■ f is overloaded
C++ says yes.

Overloading Meets Type Conversions
Now consider an abstract view of a set of overloaded functions and a
potential call:
void f(SomeParamType1);
void f(SomeParamType2);
...
void f(SomeParamTypeN);
SomeType x;
f(x); // A call to f, but which one?
C++ specifies five levels of parameter matching that can be applied:
1. Exact match (includes “trivial conversions”)
2. Match with promotions (value-preserving)
3. Match with standard conversions (not always value-preserving,
includes inheritance-based conversions)
4. Match with user-defined conversions
5. Match with ellipsis

Resolving Function Calls
These rules largely determine which, if any, function should be called.
Example:
void f(int);
void f(int*);
void f(...)
f(10); // calls f(int) — exact match
f(0); // calls f(int) — exact match
string *ps = new string;
f(ps); // calls f(...) — match with ellipsis
Functions taking multiple parameters do the same thing, only more so.
■ For a call to compile, the called function must:
➠ Be at least as good a match on each parameter as all the other
candidate functions and
➠ Be a strictly better match on at least one parameter.
Note: this is still an attempt to read minds.

Implicit Template Type Deduction
Consider:
template<typename T>
void f(T);
int x;
f(x); // Deduce that this is a call to f<int>
Note that no type conversion is ever necessary.
■ T can always be the passed type.

Implicit Template Type Deduction
It gets more interesting with one type parameter but multiple function
parameters:
template<typename T>
void f(const T& x, const T& y);
Should mixed-type calls compile?
int i;
const int ci = 5;
// Valid? If so,what is T?
f(i, ci);
double d;
f(i, d); // Valid? If so,what is T?

Implicit Template Type Deduction
And of course there is the inheritance issue:
class Base { ... };
class Derived:
public Base { ... };
Derived d;
Base& rb = d;
f(rb, d); // Valid? If so,what is T?

Type Conversions and
Implicit Template Type Deduction
C++ allows some type conversions during implicit type deduction:
■ The first and third examples are legal. The second is not.
The allowed conversions are more constrained than for function calls:
■ Exact match (with some “trivial conversions”)
■ Match with inheritance-based conversions
What’s missing?
■ Promotions
■ Standard conversions other than inheritance-based ones
■ User-defined conversions
Note: again, this is an attempt to read minds.

The Crux of the Issue
Consider:
f(x); // What is this?
Is this a function call?
■ If so, conversion rules for function calls apply.
Is it a request to instantiate and call a template function?
■ If so, conversion rules for template instantiation apply.

The Rubber Hits the Road
The problem is not purely theoretical:
void f(vector<int>::const_iterator it1, vector<int>::const_iterator it2);
vector<int> v;
...
vector<int>::iterator begin = v.begin();
vector<int>::const_iterator end = v.end();
f(begin, end); // fine, this is a function call, so the user-defined
// iterator ⇒ const_iterator conversion applies
template<typename It> void g(It it1, It it2);
g(begin, end); // error, this is a template instantiation, so
// no user-defined conversions apply;
// no type for It can be deduced.

Specializing Templates
Aber warten Sie mal, wir gehen noch weiter.
It often makes sense to specialize templates for one or more types:
template<typename T>
void f(T); // General template
template<typename T>
void f(T*); // General Template For Pointers
template<>
void f<char*>(char *p); // Template specialization for char*
// pointers. This is not a template.
This turns out to be useful. Really :-)

Specializing Templates
Consider:
template<typename T>
void f(T); // (1) General Template
template<typename T>
void f(T*); // (2) General Template for Pointers
template<>
void f<char*>(char *p); // (3) Specialization of (1)
// for char* Pointers
char *p;
...
f(p); // Which f is instantiated/called?

Specializing Templates
Critical observations:
■ Only functions can be called.
■ Function templates are not functions. They generate functions.
■ Before the compiler generates a function, it must choose the template
to instantiate.
There are only two templates to choose from:
template<typename T>
void f(T); // (1) General Template
template<typename T>
void f(T*); // (2) General Template for Pointers
Here is the call again:
char *p;
...
f(p); // Which f is instantiated/called?
Which template is a better match for a pointer type?

Specializing Templates
Clearly, the template for pointers is a better match. So:
template<typename T>
void f(T); // (1) General Template
template<typename T>
void f(T*); // (2) General Template for Pointers
template<>
void f<char*>(char *p); // (3) Specialization of (1)
// for char* Pointers
char *p;
...
f(p); // Calls (2), not (3)
The specialization would be considered only if (1) were the selected
template!
The results would change if (3) were declared this way:
template<>
void f<char>(char *p); // Now this specializes (2), not (1)!


Resolving Function Calls
In essence, there are three sets of interacting rules:
■ Overloading resolution
■ Template argument deduction
■ Function template partial ordering
All may apply to what looks like a simple function call:
f(x); // all of the above may be involved

Implications for C++ Programmers
■ You must know whether you are using a template name when
making a function call.
f(x); // what happens here depends on whether f is
// a function name, a template name, or both
■ You must document whether functionality you provide comes from
functions or function templates.
■ Be careful not to confuse template argument deduction with
overloading resolution.
➠ This applies also to non-type template arguments. The conversion
rules for those also differ from those for overloading resolution.

Implications for Language Designers
■ If X is a good idea and Y is a good idea, X+Y is not necessarily a good
idea.
■ The road to language Hell is paved with good intentions.
■ It’s hard to read minds.

Wednesday, May 09, 2007

.inputrc

set editing-mode vi

Friday, April 27, 2007

黄帝文化精神与统一多民族国家的历史

http://theory.people.com.cn/GB/49157/49163/5573287.html

黄帝文化精神与统一多民族国家的历史
瞿林东
2007年04月06日09:15 【字号 大 中 小】【留言】【论坛】【打印】【关闭】


  两千多年前,黄帝文化已成为史学家认识和撰写统一多民族国家历史的序篇。此后,这一认识及其历史撰述得到广泛的认同和发展,不断谱写出伟大中华文明的新篇章。

  一、黄帝文化――中华文明的源头。西汉伟大的史学家司马迁所著《史记》即以《五帝本纪》开篇,而《五帝本纪》又以黄帝居其首。司马迁写历史的宗旨是“究天人之际,通古今之变,成一家之言”。司马迁认为,自春秋以来至西汉时期,人们对古史的追寻已超出了夏、商、周三代而颇重视关于黄帝的传说,反映出一种普遍的历史文化心理。基于此,司马迁根据有关文献,把黄帝“著为本纪书首”,从而在中国史学发展上产生了深远和巨大的影响。

  司马迁所谓 “上记轩辕,下至于兹”,在《史记》的《三代世表》和《历书》中也各有反映。本纪,记大事;表,谱年爵;书,写制度;《史记》从这三个方面来反映“上记轩辕”,从而对后世的作为观念形态的黄帝文化的发展,开辟了新的道路。正是在这个意义上,黄帝文化乃是伟大中华文明悠久历史的源头。

  二、历史认同与文化认同源远流长。黄帝文化精神的巨大而深刻的影响,在于它培育着中华民族历史文化认同的传承和发展。这里说的历史认同,主要表现在血缘、地理和治统观念等几个方面;文化认同主要表现在心理、制度、道统观念等几个方面。

  关于历史认同的传统。首先说血缘观念。先秦时期,血缘和政治的关系十分密切。人们的这种观念是跟传说中的黄帝、炎帝有关的。根据《国语·晋语》所载,黄帝有子二十五人,其中有姓者的十二人成为中原文明的先祖。这种观念,当是先民口耳相传,对于中国古代历史的书写有重大影响。

  其次说地理观念。人们都很熟悉诗句:“溥天之下,莫非王土;率土之滨,莫非王臣。”(《诗·小雅·北山》)战国时期,人们用夏禹的名义提出了“九州”的观念。在历代史书的地理描绘中,可以清晰地看到这种地理观念的延续和发展。

  再次说治统观念。“治统”是政治统治的继承性,它本质上是关于中国历史上历代政权的连续性的观念。《史记》中的帝纪、诸表以不同的表述形式清晰地描述出了“治统”的轨迹。正如清道光元年(1821年),道光皇帝祭黄帝陵文所说“惟致治莫先稽古”、“四千年帝绪王猷”。历史表明,历代皇朝的最高统治集团, 都承认并尊重这个“治统”的传统。

  关于文化认同的传统。关于心理方面。这主要指人们在心理上对不同民族文化的相互理解、沟通和包容, 如《左传》所记戎子驹支赋《青蝇》诗句一事。在这方面,孔子是一位雍容大度的学者,他曾表示愿到文化边缘的地方居住。孔子的这种文化心态,反映了当时“诸华”与“诸夷”在文化上走向融合的趋势。此后,历代多从不同的角度反映出各族在心理上的文化认同。

  关于制度方面。孔子说:“殷因于夏礼,所损益,可知也;周因于殷礼,所损益,可知也。其或继周者,虽百世,可知也。”(《论语·为政》)这表明夏、商、周三代的制度是有连续性的。西汉以下,历代“正史”的书、志反映出这种制度文化的连续性和多民族性的特点。

  三、黄帝祭祀传统的历史意义。公祭黄帝是中华民族优秀的历史传统和文化传统中的一件大事。单从现存的皇家祭文来看,以明清两代为多。其中,尤以清朝诸帝的祭文更为突出地反映了中国历史上历史文化认同的优良传统。

  顺治八年(1651年)的祭告黄帝文中写道:“自古帝王,受天明命,维道统而新治统。圣贤代起,先后一揆。功德载籍,炳若日星。”(李学勤、张岂之总主编《炎黄汇典》第3册,曲英杰主编《祭祀典》,第387页)康熙元年(1662年)的祭文中也说:“帝王继天立极,功德并隆,治统道统,昭垂奕世。”(同上)顺治皇帝与康熙皇帝在祭文中都明确提出“道统”和“治统”的观念,这是一个应当受到高度重视的问题。

  所谓“道统”,是指儒家传道的系统,也可以说是儒家一派人物所认可的思想传统:近则指文、武、周公、孔、孟的思想传统;远则追溯尧、舜、禹、汤。所谓“治统”,已如前说。其后历代皇帝多沿用“垂统”一词,是表明上有所传承。清朝在奠定国家版图,维护和巩固统一的多民族国家方面,以及在文化上的许多总结性工程,都证明了这种认同的伟大作用。

  至近代以来,文化认同和历史认同都有新的发展,突出表现在两个方面。第一,是在统一的多民族国家基础上的,民族认同的进一步发展,即表现为中华民族的认同。第二,是中华民族之认同所焕发出来的民族精神对于民族救亡的伟大意义。1937年4月,国共两党公祭黄帝陵时,毛泽东亲自撰写了《苏维埃政府主席毛泽东、人民抗日红军总司令朱德祭文》,祭文最后写道:各党各界,团结坚固,不论军民,不分贫富。民族阵线,救国良方,四万万众,坚决抵抗。民主共和,改革内政,亿兆一心,战则必胜。还我河山,卫我国权,此物此志,永矢无谖。”(曲英杰主编《祭祀典》,第412页)这是人民的意志、民族的决心,是抗日民族统一战线得以建立和最终取得抗日战争伟大胜利的精神支柱。今天,我们仍然会感受到它的时代气息和巨大的民族感召力。

  如今,在中华民族伟大复兴的奋斗过程中,黄帝文化仍是中华民族凝聚力的象征,是鼓舞中华民族前进的伟大动力。

  (北京师范大学史学理论与史学史研究中心教授、所长)


来源:《光明日报》 (责任编辑:赵晶)

中国多民族统一国家形成的历史背景和地域特征

http://economy.guoxue.com/article.php/587

国学网--中国经济史论坛 / 天人古今 / 古今通论 / 综论、民族、区域 / 中国多民族统一国家形成的历史背景和地域特征
中国多民族统一国家形成的历史背景和地域特征
2004-10-24 邹逸麟 旧版文章 点击: 4606
中国多民族统一国家形成的历史背景和地域特征
中国多民族统一国家形成的历史背景和地域特征
作者:邹逸麟 (中国经济史论坛于2003-4-8 23:40:35发布)  阅读1770次

中国是由多民族共同缔造的统一国家,历史上中华民族大家庭中每一个成员,在祖国土地上劳动生息的范围及其所建立的政权的疆域和政区,都是中国历史上疆域、政区的一部分。这一观点在今天似乎是没有异议的,但其中所包含广泛内涵和深邃的历史背景,需要作一简要的阐述。

今天中国国家疆域的形成是有其悠久的历史过程的。“中国”这个概念,在历史上不是固定不变的,而是随着历史的变化而变化。《诗经•大雅•民劳》:“惠此中国,以绥四方。”这个“中国”是指国都、京师。《诗经•小雅•六月序》:“《小雅》尽废,则四夷交侵,中国微矣。”《礼记•中庸》:“是以名声洋溢乎中国,施及蛮貊。”这里的“中国”是华夏活动中心的黄河中游地区,因为我国阶级社会初期,华夏族多建都于黄河中游地区,故称这个地区为中国,称陕北、晋北和冀北地区的民族为北戎、山戎,称东部沿海地区和南部长江流域为东夷、南蛮。以后华夏族活动范围的扩大和夷戎的华夏化,黄河下游地区也包括在“中国”一词的范围之内。春秋时期黄河中下游的周王朝及晋、郑、齐、鲁、宋、卫诸国都自称“中国”,而将秦、楚、吴、越视为夷狄。《史记•楚世家》:“秦为大鸟,……垂头中国。”《索隐》:“言欲吞山东。”春秋时代秦国僻在西隅,“不与中国诸侯之会盟”,但对西戎还是“中国”自居,楚国在西周末年自称“蛮夷”,到了春秋末年以“华夏”自居,其他中原诸小国,都已华夏化了。秦汉以后,随着华夏族、汉族统治地域的扩大,“中国”一词指统一王朝的全部疆土。《史记•南越列传》:“高帝已定天下,为中国劳苦,故释(赵)佗弗诛。”以后凡当处于分裂时期,则中国多指黄河流域。《三国志•蜀志•诸葛亮传》:“亮说权云:若能以吴越之众,与中国抗衡,不如早与之绝。”两晋南北朝时期,东晋人将十六国看成夷狄,南朝人骂北朝为索虏,北朝人骂南朝人为岛夷,都自称中国。唐朝统一,没有这种分野,视这个时期为南北朝,李延寿修南北史,一视同仁,双方都是中国的一部分。宋朝把辽、金、西夏视为夷狄,而元朝则将宋、辽、金、夏均视为中国。明朝人把蒙古视为鞑虏,东北女真为建虏,而清人则将蒙古、新疆、西藏、台湾均视为中国的一部分,从一部记述大清帝国全国总志《大清一统志》即可知。由此可见,“中国”一词有其发展的过程,其含义也不断扩大。19世纪中叶帝国主义侵华前的中国是历史发展的结果。“中国”一词作为我们国家主权所达到的范围,是鸦片战争后几十年,中华民族民族意识加强后逐渐形成的。因此我们讲历史上的中国,就应以这个多民族统一国家范围的中国为中国,凡历史上在这个范围内的一切民族和政权都是中国历史的一部分。过去有两种观点:一种认为历史上中原王朝、正统王朝统治范围为中国,其他就不是。这种观点无疑是错的,我们不是宋朝人,不是明朝人,我们是现代中国人,我们不应以古人的“中国”为中国;还有一种观点认为今天中国的范围就是历史上的中国,这也不对,这岂不是承认帝国主义侵华的合法性了吗?总之,我们要分清中原王朝是中原王朝、中国是中国,这是两个不同的概念,不能混同。否则许多问题就讲不通。

那么我国多民族统一国家形成的过程究竟是怎样的呢?

根据我国的自然条件,在古代形成三大经济区:(一)内蒙古高原以南,大致上即阴山、长城一线以南,青藏高原边缘以东至海,为东部季风区,其自然条件适宜于农业,是汉族聚居的农耕区;(二)大兴安岭以西,昆仑山、阿尔金山、祁连山和阴山、长城一线以北为干旱和半干旱区,降雨稀少,分布有草原植被,为游牧民族聚居的畜牧区;(三)青藏高原高寒地带由于空气稀薄、气候寒冷、植被稀少,当地居民从事狩猎、采集和原始农业的混合经济;大兴安岭以东、长城以北的东北地区,由于气候寒冷,人口稀少,森林密布,17世纪以前当地居民主要从事渔猎、采集和少量农业的混合经济区。概而言之,我国历史上可分为农耕、畜牧和渔猎三大经济区。历史上民族、政权之间势力和疆土消长,实际就是这三大经济区的交融和消长。

这个发展过程,有几个重要的阶段。

第一阶段:战国秦汉华夏族政权疆域的形成和开拓期。春秋时期处于中国分裂状态,见于《左传》的大小国家有120多个,而其时四周夷狄却伺机强大,交侵华夏,所谓“南夷与北夷交,中国不绝如线。”(《公羊传》僖公四年)南北四方夷狄十分强大,中原诸国都受到威胁,甚至为其所灭。战国时期中原形成七雄,纷纷向四周开疆拓土,置郡县,筑长城。当时中原华夏族农耕区的最大威胁是北方游牧民族匈奴。所谓“冠带战国七,而三国边于匈奴。”(《史记•匈奴列传》)北部的赵国原有山西中、北部,河北中部和西北部,北界至今桑乾河一线。赵武灵王时“胡服骑射”,北击林胡、楼烦,疆土拓至河套北面阴山一带,置云中、雁门、代郡,筑长城起自代(今河北蔚县)西傍阴山山脉至高阙(今内蒙古临河县东北狼山口)。燕国原有河北北部和辽南一带,燕昭公时东击东胡,却地千里,设置了上谷、渔阳、右北平、辽西、辽东五郡,筑长城西起造阳(今河北张家口附近)东经辽东,又东至满潘汗(今朝鲜清川江一带),与朝鲜分界。秦国拓地最为显著,秦襄王时灭义渠等戎,而置陇西、北地二郡(今甘肃东部),拓地至泾渭河上游和洮河流域,筑长城西起临洮(今甘肃岷县),沿洮河而上,至今陕北黄河西岸止。楚国在战国时十分强大,向北拓地至淮河流域,向南越过洞庭湖到了湘、资、沅、澧流域,向西占有湘西、鄂西地区,设置了巫郡、黔中郡,势力还远达广西乐平一带。前279 年左右楚顷襄王还派庄蹻由黔中郡向西南进入贵州夜郎国,直至滇池。总之,到了战国后期七国的范围,东北超过了鸭绿江,西面抵达了洮河流域,北面到了内蒙古、河北、山西北部和辽宁南部,南面到了浙南、赣北、湖南全省、贵州、四川一部分。为秦朝统一后的疆域打下了基础。

公元前2世纪前后秦皇、汉武时期汉族王朝统一不久,经济发达,国势强盛,为了保持和巩固已有农耕区的统治范围,向四周开疆拓土,蒙恬、卫青、霍去病数次出兵,远征匈奴,匈奴远遁。汉族王朝的疆土北面到了河套、阴山,西面到了河西走廊、青海湖边,包有原为匈奴民族畜牧区的鄂尔多斯高原。这些地区自然条件属干旱半干旱区,可耕可牧,适宜于半耕半牧。汉族政权占有这一大片空旷地区以后,大量移民,屯垦戍边,多达数十万、上百万,大大超过原有的匈奴人口。大批汉民一到便将可耕地尽辟为农耕地。由于汉民子孙繁衍,和当地游牧民族的汉化,自此以后,河套、银川平原、河西走廊的绿洲便成为传统的农耕区。汉武帝时还两次派张骞出使西域,远征大宛,西域诸国纷纷来朝,西汉王朝的势力进拓至新疆地区。汉宣帝神爵二年(前60年)任郑吉为第一任西域都护,驻乌垒城(今新疆轮台东),进行屯田。秦汉王朝向东北则拓土至朝鲜中部,这里原先也是农耕区。

与此同时汉王朝势力南下据有了闽、浙、粤原先越人居住的沿海地区,西南控制了西南夷族聚居地,开拓至云贵高原、越南北部,这里原先是处于高山深谷中的分散的民族政权、小国,又从事原始的农业,因此未遇到多少反抗,在国势并不十分强大的东汉时期,还开疆拓土至云南西南部的保山地区置永昌郡,这是西南哀牢夷归汉的结果。

总之,从公元前2世纪至公元2世纪的400年,是中国中原王朝疆域奠定的关键时期。从战国以来农耕区已统一在一个政权之下,秦皇汉武逐匈奴,筑长城,置边郡,对北方主观上并无领土要求,一是为了保护农耕区,正如汉文帝给匈奴单于信中所说:“先帝制,长城以北,引弓之国,受令单于;长城以内,冠带之室,朕亦制之。使万民耕织射猎衣食,父子无离,臣主相安,俱无暴逆。”(《史记•匈奴列传》)二是打通和巩固对中亚和西南亚的交通,因为在汉武帝前中原人民与中亚和西南亚已有往来。于是在中国历史上形成第一个由汉、匈奴、羌、百越、朝鲜、西南夷共同组成的多民族统一国家。

第二阶段:汉族政权疆域北缩南展期。这个时期大约从东汉前期公元初开始,先有匈奴族的南进,以后南北匈奴分裂,南匈奴的附汉。这说明居于蒙古高原南部的匈奴,因长期与汉族交往,受到汉文化的影响,愿意与汉族一起生活,于是公元2 世纪开始就有大批匈奴入居今陕北、晋北和冀北地区,与汉民共处。接着在蒙古高原上鲜卑族的统一,成为北部中国一强大的政治势力,不断地侵扰汉王朝北部边境;以后又有柔然、突厥的兴起;西面则有羌人的东侵,成为东汉一代的外患,曾一度威胁到长安的安全。于是东汉先是将沿边诸郡的郡治内迁,以后终于守不住了,放弃了沿边诸郡,北部边界内缩至陇东、陕北和晋北一带。换言之,就是原先半农半牧区又恢复了游牧民族所居而从事畜牧业。进入4世纪,东汉以来入居北中国的匈奴、鲜卑、羯、氐、羌纷纷在黄河流域建立政权,即历史上所谓五胡十六国时代。这些民族政权的领袖人物,都受到汉化教育,文化上推崇儒学,经济上重视农耕,制度上沿袭汉魏。虽然这些政权统治集团是游牧民族,但被统治的广大人民还是以汉族为主,而政权性质基本上保持了汉魏以来的传统,不过多了农牧民族交融、多种文化融合的特色,例如北齐时邺都城内推行双语(汉、鲜卑)制,充分体现公元4世纪至6世纪末隋统一的300年内,黄河流域成为一个民族的大熔炉,农耕、渔猎、游牧民族进行长期交流和融合,为隋唐统一政权的胡化奠定了基础。

这个时期的南方情况则又不同。东汉末年以来因为黄河流域战乱连年,北方人口开始南迁,特别是晋末永嘉之乱,晋室南渡,大批世家大族、官宦士庶举家南迁江淮流域,设置侨州郡县,南方人口骤增,平原地区人口已经比较密集,于是向丘陵山区进发,浙、赣、湘、鄂丘陵山区原先是越、蛮等少数民族聚居地区,东晋南朝时期汉族人口大量进入,同时也带来了生产技术,促进了当地经济的发展。三国东晋南朝在这些地区设置了很多郡县,反映汉族王朝统治势力的向南扩展,农耕区的扩大,从而也使原先的蛮夷汉化。当时在西南地方民族势力强大的,有原由三国蜀汉控制的西南南中地区的“爨”(火换为贝)族的独立,和林邑建国的北进,使汉族王朝控制的越南北部内缩。

这个时期虽然从现象上看,汉族王朝的疆土在北部有所缩小,但从民族交流、融合角度看,则是中华民族形成的重要过程。南方因为没有一股强大的民族势力能与汉族相抗,因此汉族王朝势力的入进,虽然遇有反抗,但最终还是汉王朝的控制得到最后胜利。

第三阶段:隋唐多民族统一国家的鼎盛时期。隋唐政权是黄河流域经过300 年的民族交融和南方蛮夷汉化的基础上建立起来的多民族统一国家。唐代在安史乱前,无论在政治上还是经济上都是我国封建社会的高峰,国势强盛,北征突厥,东灭高丽,西平吐谷浑,疆土空前开拓。由于唐代政权是吸收了多民族、多元文化建立起来的政权,因此与宋、明不同,在民族政策上是兼容并蓄,李渊说:“胡越一家,自古未之有也。”(《旧唐书•高祖纪》)李世民说:“自古皆贵中华贱夷狄,朕独爱之如一。”(《通鉴》贞观二十一年)政治上对少数民族一视同仁,朝廷里不泛蕃将,许多带兵的是胡人,如阿史那社尔、契必何力、黑齿常之、哥舒翰、安禄山等等。对新辟的原少数民族聚居疆土采取羁糜府州制度,上设由中央派员的六都护府管辖,下设若干羁糜都督府、府州,这些机构的长官均由原部族首领担承,可以世袭,采取与直辖府州的农耕区不同政策,羁糜地区不纳赋税。这种政策加强了民族的团结,促进了民族的合作,中华民族的阵营大大地扩展。文化上更是无汉胡之防。向达先生说:唐代“长安胡化盛极一时”。洛阳城内“家家学胡乐” (王建《凉州行》)。其他生活习俗如家俱、服饰、食品、音乐艺术等等方面,更表现汉胡融合的特色。同时唐代文化包括政制体制对周边国家,如朝鲜、日本、越南以及东南亚凡是农业文化的国家都有极大影响。8世纪初安史之乱爆发和以后一百多年断续的战争,使唐王朝元气大伤,最终内部分裂为五代十国,边境上少数民族乘机强大,建立了与汉族王朝对立的政权,从他们采取的统治制度,如中央官、地方官的设置,明显受到汉王朝的影响,使其民族意识加强,东北的高丽,南面的越南,纷纷脱离中国而独立。

第四阶段:两宋时期。前后300年,中国出现大分裂,先后分为十一个政权:北宋、南宋、辽、金、西夏、南诏、大理、西辽、吐蕃诸部、西州回鹘、喀喇汗国,这些国家是由汉、契丹、女真、回鹘、党项、白蛮、吐蕃等族所建。于是出现了疆土交错、纷陈繁复的政治局面。这种局面的产生是因为隋唐统一时期,汉族与周边少数民族之间有了长期的政治、经济和文化方面的双向交流,使周边少数民族加强了民族意识和政权意识。当汉族王朝一旦国势衰落,周边少数民族即伺机奋起,加强了疆土的开拓、政权的建设和经济的开发。虽然晚唐以后,中国逐渐趋于分裂,但整个中国的社会进步并未停止。辽、金、西夏、大理等政权的政治体制,明显吸取了汉族政权的统治经验,较原有松散的统治方式有明显的进步,是成熟的汉文化对边区民族政治、文化方面的影响。同时少数民族的文化对汉民族也有较大的影响。这种长期的政治、经济、文化的交融,为元统一帝国的建立准备了条件。

第五阶段:元明统一帝国的重建和再度分立时期。元代是中国历史上又一次疆土拓展期,将原来分裂的10个政权统一在一个帝国范围之内。与汉唐不同的是由边区游牧民族占有全部狩猎区和汉族农耕区,因为是少数民族将其原根据地的广大边区加入了统一的大家庭,故其疆域十分辽阔。《元史•地理志》:“其地北逾阴山,西极流沙,东尽辽左,南越海表。……元东南所至不下汉唐,而西北过之,有难以里数限者矣。”其最大的贡献是将西藏地区的吐蕃收入王朝的直属版图,这对中国疆土的形成具有十分重要的意义。总之,元帝国的统一,使自8 世纪以来,分裂了四个世纪的中国又重新统一在一个政权之下,将汉人、契丹人、女真人、党项人、蒙古人、色目人(包括畏吾儿人、西域各部人)的农耕、渔猎、游牧三区溶为一体,加强了各区间的经济、文化交流和融合,对整个中国社会的发展和进步,无疑产生重要的促进作用。

但是元朝统治者虽然统一整个中国,却采取了民族分化和民族压迫、岐视政策,如根据不同民族和征服先后,把全国人民分为蒙古人、色目人、汉人和南人,在官吏任用、法律地位、科举名额和待遇以及其他权利和义务方面均有种种不平等规定。这种民族分化和岐视政策,引起了汉人、南人中上层分子的强烈不满。因此,元朝统治不到一百年即崩溃,代之而起的明朝时期,中国又分明朝、鞑靼和察合台后裔的亦力把里等几个政权,使游牧、渔猎和农耕三大区又处于长期分裂的状态。

第六阶段:中华帝国疆域的最后形成——清帝国的建立。18世纪中叶形成的清代疆域是秦汉以来中华各民族数千年长期交往、融合的结果。清帝国的疆域分为三个部分:以狩猎为主的女真区、以畜牧为主的蒙古区(包括青藏高原)和以农耕为主的明朝区。清代的统一前后经历了100多年的时间,分为几个步骤:一,从1583年努尔哈赤起兵,至1619年先后统一了女真诸部。1636年漠南蒙古归附清朝。1642年外兴安岭以南整个黑龙江以东地区全部归入清朝版图,统一狩猎区,清朝完全消除了后顾之忧。二,1644年攻下北京,明亡。1659年平三藩,消灭南明势力,1683年收复台湾,统一农耕区。三,1688年喀尔喀蒙古降清,此后外蒙古为清朝直属领土。四,17世纪中叶中国西北部出现了以准噶尔部为核心的漠西蒙古,其强盛时,地跨葱岭东西,天山南北,东抵哈密,西达中亚,曾一度进军西藏,占领拉萨。其势力范围不下于清朝,军事上具有游牧民族特性,骁勇善战,并向外勾结沙俄势力,觊觎中华,对清朝政府具有生死存亡的威胁。清廷康、雍、乾三朝前后经过了多次战役,历时近一百年的时间,先后消灭了准噶尔、回部大小和卓的割据势力,统一西北边疆,有力地抵制了沙俄的扩张,奠定了近代中国西北疆域,具有十分重大的历史功绩。

清代自1616年努尔哈赤建立后金,即有谋图天下之雄心。此后统一大漠南北蒙古,进关与朱明争天下,平南明,削“三藩”,收复台湾,平准噶尔、回部,最终统一全国,前后经历了140余年,大小战役数十百次,艰苦卓绝,付出了极大的代价,为今天中国的疆域奠定了格局,其功当彪炳史册,永不可没。

总结中国疆域形成的历史过程,可有以下几点认识:

一,中国疆域的主体部分,主要指农耕区,早在二千年前的秦汉时代已统一在一个政权统治之下。这是因为在封建社会早期农耕是比较先进的产业,农耕民族成熟得比较早,发展比较快。从西周、春秋、战国到秦汉,以华夏族为核心和杂居在华夏族之间的各少数民族的交流、融合而逐渐壮大,同时周边夷狄的华夏化,最终形成了以农耕为主的统一政权。由于这种变化是以农耕区为范围,以农耕业为基础的,所以容易认同,变化的过程也是渐进的,平和的,形成以后反复较少。

二,我国历史上政权分裂最久,反复最大之原由,即为农耕、渔猎、游牧三大区的对立。农耕区成熟最早,游牧区次之,渔猎区再次之。因此综观二千多年来的历史,大致前一千年(唐代以前),与农耕政权对立最强大的势力主要来自蒙古高原的游牧民族,先后有匈奴、鲜卑、柔然、突厥等。这一时期,汉族政权势力占主导地位,当汉王朝占有游牧民族地区后,往往采取农耕方式,开辟草原,于是将先进的汉文化传到了草原,同时也大量吸收了游牧民族的文化,唐代文化可为代表。游牧民族中的先进分子入居汉王朝地区后,也愿意吸收汉文化,逐渐形成了双向交流,使中华民族大家庭的阵容不断地扩大。后一千年,边区少数民族因长期接受汉文化,也逐渐成熟起来,加强了民族意识和政权意识,如东北黑龙江、松花江流域由于森林茂密,气候寒冷,人口稀少,长期处于落后的渔猎、采集经济阶段,一直到8 世纪才出现比较成熟的渤海政权。以后的女真亦源于此。西南的吐蕃也在这时形成强大的政权。这时游牧、渔猎民族对农耕业和农产品也产生了兴趣,如契丹、女真、蒙古都有一定的农耕业,同时对耕地的要求也较以往明显。这些民族的强大,逐渐在历史上居于重要地位。吐蕃曾一度为唐帝国强大劲敌,占有过河西走廊,威胁到都城长安;契丹曾占有三分之一的北中国;女真占有了全部北中国,而蒙古最终占有了全部中国。这些民族在入主中国的同时,也将他们的根据地畜牧区、渔猎区带进了中国,使中国的疆域不限于农耕区,而有了三大区,实为对中国疆域的重大贡献。在此数百年内,畜牧区、渔猎区和农耕区在一个政权统治之下,对双向交流、互相融合产生过重大影响,为清帝国的统一打下了基础。

三,清代的统一并非完全靠军事实力。清廷以渔猎区势力为代表,先笼络内外蒙古,然后再统一农耕区,最后平定西北维吾儿、回部,最终将农耕、畜牧、渔猎三大区统一在一个政权统治之下,这是历史发展的必然。其一,自17世纪以来,沙俄的东侵和中亚势力的东扩,西北民族因外来势力的干拢和宗教势力的影响,分裂意识较强。然该地自西汉以来即受汉族王朝的统治,当地人民与内地农耕区有千丝万缕的联系,其欲分裂,民心不从。且西部历来为中国军事镇守要地,故清廷不惜化将近一百年的时间,竭尽人物财力,最终将西部纳入中国的版图,巩固了中国西部疆土,对中国社会稳定发展,起了极为重要的作用。当时准噶尔势力不可一世,其统治地域不下于清朝。试想如无强有力的手段,东南江山可能为准噶尔所有,则中国政治、经济、文化必将出现大倒退,人民将沦入黑暗残暴的统治之下,其命运当可想而知。其二,台湾自古为中华民族之一高山族的居地,明清以来大批大陆沿海居民迁入该地,对传播中华经济文化起着重要作用,然其地远悬海外,与大陆联系不强。明末郑氏驱逐荷人、葡人,据有台湾,然其势孤力单,地位终究不稳,清廷一举攻下台湾,设立府州,与内地同制,使中国第一大岛与内地融入同一大家庭中,成为国际上共识,可谓是清廷一大功绩。其三,清廷统一农耕、游牧、渔猎三大区,并非以统一模式进行统治,而是根据不同民族、地域特点,分别以不同的统治政策和制度,取得较好效果,其中经验值得研究。19世纪中叶以后,西方帝国主义势力入侵,加上清廷政治腐败,经济衰退,国力颓落,割地赔款,成为国耻。然其前期对中国疆域的缔造功绩是不可埋没的。

四,自汉朝开始,汉族王朝曾多次统治过非农耕区,开始基本上采取农耕区同样的统治方法,设置郡县,开辟农田。唐代以后,汉族王朝采取了羁糜政策,即唐宋设置的羁糜都督府、羁糜府州。不上户籍,不纳赋税,由当地民族头人自行管理。即不同民族区和产业区采取不同的统治政策。这种方法对边区民族有很大的启发,契丹、女真有了农耕区后,也采取不同的统治政策,农耕区置郡县,而其根据地则采取原来的统治方法,如契丹的头下军州和女真的猛安谋克。元明对西南少数民族区则采取土司制度,也即在这些地区由当地民族的头人自行管理,不改变原有的统治体制,不纳税赋,进行自治。清廷在这方面总结了历史上的统治经验,采取了多样的统治政策,对蒙古、西北新疆也采取不同统治政策。这种政策对团结各民族,巩固中华大家庭具有十分重要的意义。西南方面因基本上是农耕区,时间一长,比较成熟,于是自雍正年间开始改土归流,而北方畜牧区,因自然条件,继续采取游牧民族习惯的管理办法。这就使清朝有三百年疆土的稳定,是中国历史长期对不同生产区域采取不同统治经验的总结。

五,综观历史,我们可以说今天的中国是二三千年来生活在这块土地上的所有民族共同缔造的,每一个民族在中国历史上建立的政权都是历史上中国的一个政权,每一个民族活动的范围都是历史上中国领土的一部分。奠定今天中国疆域规模的,不仅是汉族,而是多民族共同缔造的,某些时期边区少数民族贡献更大。由此我们应该认识到现代化的中国完全应该施行民族平等政策,决不能搞大汉族主义。今天的中国文化也不是汉族文化,而是多民族共同缔造的中华文化。例如我们从音乐、服饰、饮食和其他习俗都可以看到多民族融合的痕迹。因此我们说今天的中国是多民族共同缔造的统一国家,是有充分的历史根据的。


【作者简介】邹逸麟,复旦大学历史地理研究所教授、 前所长,九届全国政协委员,民盟中央委员、上海市副主委,国务院学位委员会学科评议组成员,中国地理学会历史地理专业委员会主任


出处:历史教学问题200001

Wednesday, April 25, 2007

python operator: ==, is

>>> x, y = [], []
>>> print x == y, x is y
True False

>>> class T(object): pass
>>> x, y = T(), T()
>>> print x == y, x is y
False False

>>> filter(lambda x: 'env' in x, dir(os))
['environ', 'getenv', 'putenv', 'unsetenv']
>>>