能力值:
( LV4,RANK:50 )
26 楼
楼上不要激动,C语言可能并不比pascal好.
但无法否认的事实是多数公开源码的程序均用C/C++,很少用pascal/delphi,我想其中肯定是有原因的.
我不敢说C和pascal那个更好,我只知道用C写程序代码简练,这个是我最欣赏的.
能力值:
( LV2,RANK:10 )
27 楼
这个帖子是我来看雪关注程度最高的帖子,和发贴的朋友相比我的知识少得可怜,所以只好说些题外话:
楼上两位大侠各有个门道,在我感觉好像有点《笑傲江湖》里剑宗和气宗的论道,无奈我不是令狐冲,着实听的一头水,所以,倒是建议两位朋友,玩c的推荐一下c的书籍,耍asm的指指asm的资料,当然,楼上的朋友有提到pascal,那倒是建议也举荐举荐pascal的。
最后,这句话可能有点找打,我倒是真希望两位在友好的气氛中继续讨论下去,可能对二位没什么大帮助,但是可以饷读者一番。(当然,看二位的心情了)
能力值:
( LV2,RANK:10 )
28 楼
最初由 冬瓜汤 发布 最后,这句话可能有点找打,我倒是真希望两位在友好的气氛中继续讨论下去,可能对二位没什么大帮助,但是可以饷读者一番。(当然,看二位的心情了)
讨论问题有时言辞是很尖锐,那和尚顿悟还用棒子呢,讨论时面红耳赤是正常的,这个友不友好毫无关系,我认为朋友是朋友,问题是问题,我不会将问题带入进友情中,也不会将友情带入进问题中,如果我是两者分不开的人就会使用马甲了,哈哈
最初由 dwing 发布 楼上不要激动,C语言可能并不比pascal好. 但无法否认的事实是多数公开源码的程序均用C/C++,很少用pascal/delphi,我想其中肯定是有原因的. 我不敢说C和pascal那个更好,我只知道用C写程序代码简练,这个是我最欣赏的.
pascal也不怎么样,它的好处就在于和ASM是兄弟,招式大致相同,会了ASM,pascal一看就差不多了,不需要费劲学,delphi也是,语法习惯比较相同;
我来跟你说一下,为什么很多人都对C情有独钟, 我分析很大的原因是出道的时间问题,现今的一些高人出道都比较早,那时候没什么可以选择的,不想现在语言的种类够盖房的了, 当时Brian Kernighan,C编程语言的发明者之一,在他的文章Why Pascal Is Not My Favorite Programming Language(为什么Pascal不是我最喜爱的程序语言)批评了Pascal的种种缺点。但经过约十年,Pascal不断发展,他的论点已经不能符合现在的Pascal编译器。现代的pascal也是跨平台的,它的跨平台版本叫 FPK Pascal。近来Borland又弄了个Kylix,成为了delphi的跨linux平台版本,但早些年受到Brian文章的影响,大数人选择了C/C++, 现在大数活跃高手都是那个年代来的,所以C语言的产品非常多,说它好的也多,
但近几年C表现得并不好,首先是c99标准协议至今未得到主流编译器支持,使得C和C++越走越远,二是 JAVA和C#进一步抢占了C仅有的可怜市场,三,同们相煎,C++和C兄弟相残,却又同样命苦 ISO/IEC 14882-1998的标准协议至今编译器不达标; 今天的C\C++不但难学,而且面临标准不统一,尤其是C++,是现今世界上最复杂的语言,而且个个编译器之间不能统一标准委员会的统一标准协议;
你提到C编写的代码很简练,其实Pascal更简练,pascal素来以格式要求苛刻而著称。
能力值:
( LV2,RANK:10 )
29 楼
还记得《delphi源代码分析》的作者aimingoo,曾经讲起自己的一段经历:当时,作者十分喜欢把c的程序改写成pascal版的,然后,还要狠狠地说一句,“c真是笨”。……
能力值:
( LV4,RANK:50 )
30 楼
最初由 Ivanov 发布 pascal也不怎么样,它的好处就在于和ASM是兄弟,招式大致相同,会了ASM,pascal一看就差不多了,不需要费劲学,delphi也是,语法习惯比较相同; 你提到C编写的代码很简练,其实Pascal更简练,pascal素来以格式要求苛刻而著称。
不是吧,我虽然不太熟悉pascal,但基本还算了解.
同样的程序用C还是pascal语法和描述都差不多,但都与纯汇编差太多了(不算宏汇编,那个应该是汇编向高级发展,就像C向低级发展也能内嵌汇编一样).
而且怎么看都是C的代码更简练(文字量更少),比如C的运算符多数仅1个字节,而pascal的一些运算符多达5个字节(包括前后空格的xor,and),连赋值都要2个字节;C用{}比pascal的begin/end看起来更舒服(看符号应该比看单词更快,而且还不会与变量/函数名相混淆),pascal源程序大小几乎是C的2倍,怎能说pascal更简练呢?也许在描述字符串时pascal较简练吧.
能力值:
( LV2,RANK:10 )
31 楼
看高手们说了这么多,禁不住也唠叨两句。
我年纪比较大,是玩6502ASM进入2进制世界的,从cracker的历史上讲是属于rcopy03(不知道众位有映像否)以前的年代的人。
没什么理论知识,看了上面提的Helsingin、FPK、HLA、Terse,如看天书一般,当真佩服的紧。
咱只说点实际的:看这个求两数之和的C程序,无论是在古老的CDC小型机上,还是x86的DOS/WIN下的TC、VC上,还是linux下的CC、GCC下,还是HP-UNIX、alpha小型机上,均无需修改,直接编译通过,可完成相应功能,不知哪门可跨平台的汇编能达到这个效果。
#include <stdio.h>
int main(int argc,char *argv[]){
if(argc<3) return(1);
printf("%s + %s = %d\n",argv[1],argv[2],atol(argv[1])+atol(argv[2]));
return(0);
}
能力值:
( LV2,RANK:10 )
32 楼
看了楼上众多牛人的观点我不得不佩服。
如果从主题思想的方面来说,大家很多都已经是走进了自己的讨论圈了,大多都偏离了帖子的主题。
就上面的问题,我觉得精通的话,没什么好犹豫的,肯定是汇编语言比C/C++以及现在的C#,JAVA这些要好得太多
了。就像我们做数学的研究一样,一般越是到了底层我们的研究就越困难,但是却更加有用一样的。无论是从计算
机的基础理论还是跨越机器之间的思想形成这方面来说也好,我们都需要一个很好的认知,而汇编语言就可以给我
们带来这样的效果。
平时的开发我接触到了非PC的机的开发,所以发现平台移植的重要性。但是无论怎么说,我们组装了我们
最新的硬件系统以后,我们总是得从最低层的汇编开始入手。之后无论我们做什么工作,汇编在没有专门为这个平
台制作编译器的前提下一直都是我们工作的核心。
但是现代的PC开发,尤其是在已经完成了我们大量工作的操作系统的支持下,开发显得越来越简单,对于
专业知识的需求也越来越低。这种情况下除非你是开发一些效率要求特别高的核心部分代码才有可能大量使用汇编
,否则汇编一般都是少量使用到代码中的。我们现在搞企业开发注重的是软件工程的思想,代码牛,难懂已经是过
去的事了,最重要的是好懂,容易维护。一个企业如果无法按照软件工程的思想搞自己的软件,那么代码的维护,
成品软件的生命周期都要受到严重的打击。使用C而不使用汇编主要也是这个原因。现在出现了一些简单实用的开发语言,比如JAVA,C#这些,他们不但缩小了开发的周期,而且隐藏了很多非专业者不必了解的基础知识。这样的开发比较符合现代工业化的标准。
C语言搞一些操作系统的开发,其跨平台的功能还是比较被看中的,他是一个面向过程的语言,代码比较清晰而且容易维护。不否认汇编语言也具有很好的可维护性,但是对于很大的工程,缺点也就出来了。
现在代码的可重用已经显得十分重要了,这种情况面向对象的开发也就变得相当流行了。使用C++封装的代码绝对比使用汇编语言编写的代码容易理解,管理,维护和易读。所以这种情况下C/C++当然就比汇编语言跟容易在这种形势下流行了。
最后,我觉得一个好的程序员如果没有低层汇编的深入理解,那么他的思想无法达到一个超脱的境界,更不可能有很大的建树,汇编语言是一个真正程序员所应该深入理解,精通的语言。但是反过来,真正应用到开发中,不可能只有或存在大量的汇编,如果那样只能说你没有经历过大型开发或者说明你只是一个空想家。因为最后从汇编中体会的思想运用的途径就是高级程序语言。
以上只是个人的一点点观点,如果有什么错漏还请大家指出。
能力值:
( LV2,RANK:10 )
33 楼
Helsingin yliopistoon, 赫尔辛基大学
咔咔, 汇编要是能编写成那样就不叫 汇编了
能力值:
( LV2,RANK:10 )
34 楼
我觉得代码移植是操作系统层面上的移植
不同的指令系统之间的那个应该是模拟和仿真的概念了吧
以上个人理解
能力值:
( LV2,RANK:10 )
35 楼
最初由 Ivanov 发布
我说的标准又被你误解了!标准是指不管在什么平台上,用什么编译器,都能用相同的代码来完成相同的功能,也就是说它们用的是同一种标准的语言!
我强调C跨平台吗?没有,而且我也不会拿一门语言的长处与另一门语言的短处相比,我只是在反驳你所谓的汇编跨平台这类可笑的观点!你说为汇编实现编译器,我想问这样每两个平台间都需要两个编译器来互译各自的汇编,你统计过总共需要多少个这样的编译器吗?由此可能带来的性能问题又该如何解决?这样的汇编比起高级语言还有什么优势?
RISC的指令就都统一了?而且现在桌面用的全是X86的CISC,你要如何无视它们?看来又有你骂鸡肋的时候了!
一条C语言指令编译后,会变成很多条机器码吗?除非禁止优化,现在偏译器还有哪些是一条代码一条代码的编译的?而且最终代码长度也不至于比未优化过的汇编大太多,而汇编的优化则是以损失开发效率和代码可维护性做代价的。
你说可以转换X86的汇编为ARM的汇编,我没试过这个东西,不过我还是说说想法吧!大家都知道X86的汇编指令数量多,组合方面相当灵活,而X86指令与ARM指令又完全不同,要转换它们非一般编译器所能胜任。病毒的多态引擎不知道你研究过没,都是针对X86指令的,本来应该很智能化的东西,最终因技术问题只停留在初级的指令替换上,主要还是因为分析一段X86指令代码的行为过于复杂,总有你想不到的情况会发生。不过如果只做单条指令的拆分还是可以的,但性能就离谱了。你没给我转换后代码性能方面的信息,这可是代码有无移植价值的关键性因素。我已经下载了你说的这个转换器的源码,但还没看,或许看完了后我会感叹自己的无知,但至少现在能给你的回复就是这样!
最后请在考虑汇编能否移植前,先正视汇编开发效率低,难以维护等缺点,只要有它们的存在,汇编能否移植都不会是人们首先考虑的问题!
至于你那么爱骂C就尽管骂好了,这是你的言论自由,我也懒得理,反正也没几个人会认同你的观点,有能耐就去证明给全世界的人看。另外即然双方都觉得对方看不懂自己的话,再谈下去也没有意义,省省各自的时间吧,这贴以后我不再回了,你爱怎么说怎么骂都无所谓,只要不骂到我一切都安了。。。。。。。。。。。
能力值:
( LV2,RANK:10 )
36 楼
我想你应该学一下 goasm 语言, 然后再说移植问题;
HLA语言你也应该学一下
c能移植, 移一个软件或是病毒,看看,看看能不能直接移植?我就不信现在的软件有不涉及操作系统的地方
能力值:
( LV2,RANK:10 )
37 楼
大师兄认为各有各的优点
C/C++/ASM/Pascal全都要学...
全学过后就更能体会不同语言具有的种种优缺点,解决实际问题的时候就可以选择最合适的语言或多种语言配合来实现了
能力值:
(RANK:215 )
38 楼
我什么语言也不会。
不过我认为,语言是工具,爱用谁就用谁,并不是人人都走流行语言的路的,我笨,不会C,不会汇编,不会C++,不会PASCAL,不会……,用到啥就去学啥,并不一定都学会,当时的问题不管用什么语言解决了,也就完了,人生在世,能活几天啊,都想开点吧,少争两口唾沫,平淡过日子好了。
论坛里算法大牛,语言大牛,脱壳大牛多的是,又能怎的?象我这样的笨鸟不一样逍遥快活吗?能解决的问题就解决,不能解决的求朋友帮忙,不帮也无所谓,放弃好了,虽然说求人不如求自己,不过俺觉得,求自己自己不会还不如放弃。
大千世界,芸芸众生,看开点,心宽点,过去了。
想想自己还能活几天?说不定哪天一闭眼就再也看不到第二天的日了。
阿弥陀佛
能力值:
( LV4,RANK:50 )
39 楼
不要盲目个人(语言)崇拜, 最合适的就是最好的
语言其实就是一种标准而已.
----人和计算机之间交流方式的一种标准. a protocol.
与其说哪个语言最好,不如说哪个标准在哪个领域适用面最广最完善.
你想往哪个领域发展,自然选择该领域中最通用的语言.
好吧,我承认我什么语言都不精通.
能力值:
( LV2,RANK:10 )
40 楼
我会选C++.net
虽然我现在只会VB。但如果再给我一次机会,我一定选C++.net
能力值:
( LV13,RANK:410 )
41 楼
我觉得大家讨论语言没有什么意义。语言就是个编程工具而已。
各有各的长处和不足。
计算机的灵魂是其中的数学思想和数学算法。
有空多看看数学,而不是语言。
一句话,数学才是最重要的。语言,需要什么就用什么。
汇编很锻炼人,让人了解系统细节。
而高级语言写代码效率比较高
不希望看雪这里还有这种没有什么意义争论。
这就和争论VB.Net和C#哪个效率高一样没有意义。
老板让用什么就用什么。我很赞成这句话。
毕竟计算机只是技术,其中的数学才能算的上艺术。
技术讲究实用,艺术才能去追求一些个性的张扬。
当然我不是牛人,可能还没到那种层次吧。
能力值:
( LV9,RANK:730 )
42 楼
以下摘自:周爱民的《大道至简》
“当你熟悉了一门语言之后,你会发现,编程语言只有喜欢与不喜欢的问题,没有会不会的问题。任何的一门语言,你都可以在两周内掌握并开始熟练掌握遍程。因为任何一门语言,他们的底层函数库都是那么的相似,而他们API 都是那样的依赖于操作系统 A 语言里有的,B 语言里也基本都有。
通常而言,语言的差别主要表现在适用范围上一些语言适合做数值处理,小数点后可以精确到原子级,而小数点前则可以表达到宇宙之无穷;另一些语言则适合做图形处理,它的底层函数库比其它语言可以快上十倍或数十倍;还有一些语言则适合于做网页,要用它来做一个通讯薄软件都将是史无前人的挑战。
成天讨论这门语言好,或者那门语言坏的人,甚至是可悲的不但是悲其一叶障目,更要悲叹于那种大愚若智的自得心态。”
能力值:
( LV2,RANK:10 )
43 楼
能力值:
( LV12,RANK:650 )
44 楼
最初由 auser 发布 看高手们说了这么多,禁不住也唠叨两句。 我年纪比较大,是玩6502ASM进入2进制世界的,从cracker的历史上讲是属于rcopy03(不知道众位有映像否)以前的年代的人。 没什么理论知识,看了上面提的Helsingin、FPK、HLA、Terse,如看天书一般,当真佩服的紧。 咱只说点实际的:看这个求两数之和的C程序,无论是在古老的CDC小型机上,还是x86的DOS/WIN下的TC、VC上,还是linux下的CC、GCC下,还是HP-UNIX、alpha小型机上,均无需修改,直接编译通过,可完成相应功能,不知哪门可跨平台的汇编能达到这个效果。 ........
我当年也玩过6502
bit
beq
没错吧?
怀念啊,不过那时不玩crack的.只会写一点简单的东西
rcopy03当然用的.还有一个龚成兵的脱壳机
既然你这么鼓吹c, 那我来段pascal给你看!
var
i,j,k:real;
begin
readln(i,j);
k:=i+j;
writeln(k);
end.
Pascal的语法比c统一多了.你哪怕拿到以前那个兼做操作系统的pascal上面,也照样运行!
c语言的语法本身就存在很大的二义性.比如(i++)+(i++)+(i++)
不同的c编译器的结果是不一样的!你去看考研的题目里的c语言部分,许多都是考你这种变态的自加减!
但是pascal不同 ,它的语法严谨
自加必须写成inc(i)或者i+1
于是就没有任何歧义!
人读和机器读,结果均唯一!
我是borland的忠实支持者.
ps,我也用tasm,一般写什么asm的段子就用它了!
另外,本人声明,本人会以下语言:asm,c,pas,c#,bas
所以,我不想在这里浪费时间,写的时候,看哪种方便就哪种了.当然还要考虑时空效率
能力值:
( LV3,RANK:20 )
45 楼
我还是选C++啊!!!!!!!!!!!
能力值:
( LV2,RANK:10 )
46 楼
最初由 firstrose 发布 既然你这么鼓吹c, 那我来段pascal给你看! ........
也并非鼓吹C,我帖子的内容是针对那个“跨平台的汇编”而言的。
最初由 firstrose 发布 c语言的语法本身就存在很大的二义性.比如(i++)+(i++)+(i++) 不同的c编译器的结果是不一样的!你去看考研的题目里的c语言部分,许多都是考你这种变态的自加减! ........
C语法的灵活性和同时带来的弊端(二义性)是辩证统一的,偏偏有的人就喜欢那个灵活性了,如果不喜欢i++的写法,就按正规的i=i+1写也没有问题。
合格的C程序员是不会写出(i++)+(i++)+(i++)这种有歧义的语句的。关于考研的题目出这种问题,纯属出题目的人水平太低,误人子弟。
另外声明,本人最近用的最多的是php和awk,见笑见笑。
能力值:
( LV12,RANK:450 )
47 楼
这里这么热闹,哈哈来迟了.
不知道你们以往在开发中都是怎么选择语言的,你们都是老板,都有权决定使用什么语言?你们都是客户,都有权决定使用什么语言,那你们真的很幸福,我可从来没有那么好的运气.写了20多年的程序,没有一个是我有权利自己去选择使用什么语言的.第一位,客户要求使用什么语言就使用什么语言,过去面对电信/银行/铁路等单位从来都是客户提出使用什么机型什么语种,第二位的是老板,老板说什么就是什么.现在我什么都不干了,可以自己随便写点什么东西了,才第一次有权利来选择什么语言,这个感觉真好.
不管你使用什么语言,汇编语言都是基础的基础,所有的系统和语言都是建立在这个基础之上的,如果是一个新的硬件平台,你那里来的c编译器,天上掉下来的,还是要通过汇编来建设,就象盖大楼,地下打了那么多的桩子,最后告诉人家现在的楼房都是在工厂事先加工好直接吊上去安装就可以了,盖楼房就是往上塔结木,那里有基础这一说.
又如你在家打开水龙头,立刻就有水可以使用了,于是你告诉别人,水是从龙头里出来的,和江河湖海有什么关系.我喜欢自来水,随在乎那些江河湖海被污染.俗话说,饮水不忘挖井人,但自来水用久了,挖井人也就不存在了.然后你就和别人说,那些人多么笨,怎么还要用铁锹挖井,一开龙头,不就有水了,真笨.现在.net的水龙头也出来了,只要一伸手,就有水了,用水还要开龙头,真笨,效率太低.
上面都是说笑,其实在实际生活中,自己是很少有选择权的.另外永远要记住,同样的舞台,不同的导演,却可以导演出完全不同雄壮的话剧来.人的才智才是第一位的,而不是语言,就算是语言,也是某个聪明人弄出来的.人家世界第一大富豪、大科学家(老盖自己定位的)的老盖还说,其实世界上只要有Basic就足够了,你不服气,你去和老盖打官司.
另外特别同意楼上的"酷酷"的观点,汉语最好,下面转贴一篇妙文,为什么汉语最好,再次声明,我不是来吵架的,我是来灌水找开心的.
100年前全世界认为汉语是婴儿语,后来才发现..
(作者)无名氏
100年前,全世界都认为汉语是婴儿语,后来才发现原来汉语是进化过的世界最先进的语言。原来在七千年前,汉语也有罗嗦的后啜和字格,后来我们把那些无用东西都抛弃了。比如用一个“了”字就把已经完成的动作表现出来了。根本不用什么现在过去完成时那么罗嗦。
古埃及楔形文字演化成腓尼基语,腓尼基古文字又演化成希腊语,希腊语又演化为拉丁语,拉丁语又变成法语,法语又演化成英语。拉丁语向东成为斯拉夫语系,斯拉夫语系又演化成俄语。同时这也是一个宗教的传播史,是天主教分化为基督教,东正教的过程。汉语是世界上唯一不使用字母高级语言。
汉语又是唯一可用于计算机时代的语言,最适合语音控制,而不用象英语那样用手瞎摸!
这是一个决定中国人命运的问题,请所有朋友尽量宣传!汉语的一个明显的优势是,思维面广阔,在数学上由于单音节发音,对数字的反应速度也更快,但在逻辑思维方面还是拼音文字较好,但从人类文明发展的 趋势看,作为表意文字的汉语,由于可以自由组合新名词新概念以至新思想, 可以容纳信息和知识爆炸的冲击,无疑将发展为人类的共同语言,用这种语言 来交流思想更加方便,更加丰富多彩,当然在论文和计算机语言是汉语和拼音 文字并用了,汉语的伟大就在于兼容,你们看看在汉语的学术论文有汉语和阿拉伯数字和西方拼音文字的混用现相,但在英语论文中则找不到一个汉字,中国的物理学专家可以凭借他在中学时代的化学基础知识通读化学专家的论文,反之依然,而英美的不同行业的专家要交流他们的学术成果,则是对牛弹琴,凭这个优势,汉语就有资格成为世界语,而我们国内还有些学者还要把汉语拼音化, 这不是邯郸学步东施效颦吗?我们中国人民也有资格控告那些所谓的文明的西方人,是谁在制造环境污染,破坏森林和草原,就是他们,因为印刷同样内容的一本书,西方语言要比汉语浪费2倍的纸张,全世界使用西方语言的人要比使用 汉语的人多5倍,按照简单的因素级连倍乘法,就要浪费10-20倍以上的木材
增加20倍以上的工业废水,就语言的优越性来讲,西方人没有什么资格对汉语说三道四,连文盲都知道从联合国五种工作语言找出汉语文本,因为汉语文本是最薄的那一本 .
中国人心里有这样一种成见;认为汉语迟早要被英语所淘汰。记得有一次,大概是胡野碧在辩论时干脆把它清楚地说了出来。前几天‘世纪大讲堂’请了一位学者李锐也认为全球化的结果是让英语统治世界。只有阮次山在一次‘大时代,小故事’中谈到汉语的思维速度比英语快。但是,他又提出一个问题;既然由于汉语使用了‘声’使得汉语的思维速度比英语快,那么,由于广东话中的声比普通话多,是不是广东话的思维速度比普通话更快呢?我的回答是,广东话虽然使用的声调多于普通话,但是,广东话有两个缺点,第一、它的文字规划得不好,文字表达欠佳,且有闭音节的声音存在。第二、它的声音利用率不高,普通话有21个声母、35个韵母和四声,连乘的结果是2900个声音,但是能够被利用的是2500个,而真正被用到普通话中的仅1200个。广东话有九声,即使它的声母和韵母与普通话一样多,那么它实际使用的声音也应该是普通话的两倍多才对,但是,广东话中实际使用的声音仅有1500个,与普通话相差不多,而它的利用率比普通话小了几乎一倍。利用率小,就说明难学。因为同样的一个声母或韵母,每次的使用实际上也是一种练习的过程,利用率高的声母或韵母必然容易记忆、容易掌握。日常生活中也可以看到,凡是常用的语言元素,包括声母、韵母、汉字和单词等到,越是经常使用的越容易掌握。语言的好坏其实取决于两个方面,第一、是不是能够用很少的记忆来掌握,第二、是不是能够在有生之年掌握到比其他人更多的知识?用一句极限的话来讲应该是:最好的语言是不学而知,但是所掌握的知识又最多的语言,或者说,学少而知多的语言。
英语与普通话相比则不同,国际音标中,英语有20个元音和20个辅音,所以英语的声音种类不会超过20×20=400个;反过来说,不在这四百个声音之内的任何声音都不被英语所承认,或者被认为是不正确的发音;这里所说的不是‘音节’。比较一下就会看出,汉语的发音种类是英语的3倍,两者的比值远大于广东话与普通话的比值。
下面要说一下,为什么声音种类越多,思维速度就越快。这个问题,去年我在‘北大中文’论坛讨论了一个月才使大家弄清楚,在这里我希望尽量说得简单。假设有一个仅会发两种声音的人,具体地讲,他就会发a和b两个音。根据电脑的理论,我们知道,他用这两个符号依然可以表达整个世界。再假设,世界上仅有400种事物需要表达,那么,一个英国人可以用每一个发音来表达400种事物中的一件,而仅会发两个声音的人,有时就不得不用九个发音来表达400种事物中的一件,因为二的九次方才大于400。比如,英国人用‘i’代表‘我’而仅会两个声音的人可能要用abbababba代表‘我’这个概念。一般人每发一个声音大约需要消耗四分之一秒的时间。比较两者就会看出,仅会两个声音的人,不但表达得慢,而且还费力气。在表达‘我’这个概念的时候,英国人使用四分之一秒的时间,而仅会两个声音的人使用了二又四分之一秒。如果两个人总以这样的比例生活一辈子,他们一生中所享受到的所有信息将是它的反比9:1。实际的情况中,最明显的是日语与汉语的对照,我们知道,日语使用了100种不同的声音,而汉语使用了1200种声音,因此很多汉字让爱猫扑,爱生活人一念就必须用两个或者三个声音来表达。我们假设日语中所有的字都用两个声音来表达,那么岂不是说,爱猫扑,爱生活人一生所能够享受到的信息仅仅是中国人的一半吗?我曾经思考过,这是不是与爱猫扑,爱生活历史上从来没有出现过伟大的思想家有关。我们知道,思维实际上是一种心里说的过程,如果在说话时表达得快,那么,思维的速度也应该跟着快。具体的例子是赵元任曾经比较用英语和汉语背诵乘法口诀的速度,汉语使用了30秒,而英语使用了45秒。因此,如果两个人同时用英语和汉语来背诵的话,到了30秒的时候,汉语使用者一定想到了九九八十一,而英语使用者则一定到不了这里,说不定,他想到的仅仅是七七四十九。这就证明了使用发音种类多的语言比使用发音种类少的语言思维速度快。这一点曾经被国、内外许多学者所证实。至于思维速度快是否就代表聪明这个问题是被很多学者所承认的。
我的证据是解释一个历史上的‘谜’古希腊人为什么比其他人更聪明?因为希腊的文化来自古菲尼基人,我们知道菲尼基人发明了人类的拼音字母,就声音的分解来说,这是一大进步,就思维速度来说,它是一大倒退。因为,为了筛选容易区分的声音元素,菲尼基人仅仅使用了22个辅音,这样,它的表达速度当然比现在任何语言都慢,而希腊人则采用了元音,我们知道元音与辅音结合以后,声音种类等于增加了好几倍。事实上,菲尼基人的声音中也有元音,否则他们是发不出来的。所谓的22个辅音是说他们仅承认这22个辅音为信息栽体,也就是,ma、me、mu、mai、muo在他们的耳朵里与一个m没有任何区别就像me的四种声调对于英国人来讲没有任何区别一样。由于声音种类的突然增加使得希腊人的思维突飞猛进,造成了后来的现象。论坛上曾经有人问汉语的声音种类依然多于英语,为什么没有英国先进。我的回答是,当声音种类突然增加的时候就有新思想出现,反之,当声音种类减少时,思想就趋于保守,而元朝以后,中国的声音中失掉了一个‘入’声,中国的衰弱正巧从那时开始。最后,在讨论尼安德特人的时候,人们也发现,使用声音种类少的人种会被历史淘汰。
我之所以认为汉语必定战胜英语的根据还不在这里,关键是要解决人类目前所面临的知识爆炸问题。我们知道,目前的英语单词包括各种生物名称及专利发明的新术语已经超过了数百万,如果考虑到英语中有一些可以推导和联想的成份;比如前、后缀和复合词等,它所需要记忆的基本单词也有一百万个。而所有这些单词在汉语中都可以用四千个汉字来表达。根本的原因还是英语的发音种类不够。
比如pork这个词,在英语中代表猪肉,它和猪pig、肉meat没有任何关系而仅仅代表它们的一个联合体而已,如果把猪肉pork、羊肉mutton、牛肉beef、猪油lard、羊油suet和牛油talon放在一起进行比较的话就发现,英语中所有的联体词都是一个与其中任何一个分解词毫无关联的新符号,而它们却构成了英语词汇的主体,英语中几百万的单词就是这样来的。它的根本原因是由于如果将pork改成pig和meat连在一起的形式,那么就要发音四次而pork仅仅发音两次;所以联体的词能够节省发音却要增加记忆,而分体的词,无需记忆可是却增加了发音次数。设想,一位屠夫,每天要用到‘猪肉’这个词上千次,使用两次发音的单词要比使用四次发音的词节省两千次发音,何乐不为?但是遇到不常用的词的时候,英语还是和汉语一样,使用分解的词,比如驴肉就用dDangerCode meat来表达。因为不常用的词,即使设立了符号形式,别人也记不住。汉语能够将英语中联体词汇分解的功能,非常有用,它使所需要记忆的词汇大大地减少;不仅如此,它还能够将词汇在人们头脑中的位置整理得清清楚楚。达尔文主义的诞生就是建立在林奈的双名法的基础之上的,这种方法使得各种印象在脑子中由原来的平面,变成立体的。比如,在林奈以前,人们给所有的生物一个名字,结果,由于种类太多,同一种生物可能有两种名字,而另外的生物,可能没有名字。林奈则将所有的生物先分类,并且给出一个类名,然后在类名的下面放一个词,两者组成双名法的名字。这样不但清晰,而且大大的减少了需要记忆的符号;比如原来有一万个名字,现在分成一百个类,又在每类中分成一百种,我们所需要记忆的仅仅是一百个类名和一百个种名,共二百个,而不是原来的一万个。随着知识爆炸的问题逐渐恶化,人类就有必要将其他的术语也仿照这个方法改造,而目前唯一的办法就是按照汉语的结构进行改革。而原因还是在于发音种类的数量。
这个现象最先是德国的莱布尼兹体会到的,他认为汉语是自亚里士多得以来,西方世界梦寐以求的组义语言。但是,他没有看到声音的真正特性,却由于汉字的数量上的性能而定义汉字是世界上最先进的文字。我想,如果他看到今天知识爆炸的世界,他一定会要求世界上所有的国家废除拼音文字而采用汉字。
最后,谈一下关于人的一生中到底能够记住多少单词或符号的问题。中国人所使用的汉字通常在三到四千,而莎士比亚时代的英语仅有三万个单词,他本人能够全部掌握。但是,到了丘吉尔时代,他的单词量依然是三万个,可是,那个时候的英语已经拥有近百万个单词了。所以,我认为,莎士比亚使用英语单词的熟练程度是后人根本无法达到的。我曾经在网上向很多英语中高等教育的语言机构请教,到底学习英语应该掌握多少单词才成,但是,他们的回答总是含糊不清,或者扯一些别的东西。后来,在一些无法避免这个问题的文章中我发现,语言学家们对于英语单词的要求是:一个受过教育的英语使用者应该掌握五到二十五万单词,不但差距范围很大,而且,用这个标准来衡量,莎士比亚和丘吉尔都应该是文盲,至少是没受过教育的人。我认为,这是任何推崇英语的人的软肋,只要他们能够躲过别人问这个问题,其他的方面 ......
我的观点曾经在北大中文网上讨论过。但是,可以看得出来,不知道的人还有很多,他们都认为自己是劣等民族和劣等文化。所以,在鼓舞中国人的信心方面还有很多事情要大家努力。其实,只要大家能够恢复信心,中国人在很多事情上早就应该领先于世界的。可是我们太爱钻牛角尖,总是当外国人设立一套标准的时候,我们拼命地追呀赶呀。为什么,我们自己不能够设立标准,也让他们换换口味?我记起几年以前,西方国家有一个喜欢指手划脚的毛病,那时,我也有一个毛病--喜欢掣肘拖腿。美国有一份cox报告,内中例举了大量的对比,用以说明中国人不可能通过三、四十次的核实验取得与美国一千多次核试相同的成果。唯一的解释就是中国盗窃了美国技术。有人也称这次事件为李文何事件。我那个时候给美国所有的参议员各发了一封电子信件。内容是说,如果他们希望彻底调查此事,就应该设立另外一个调查小组,好好研究一下汉语和英语在思维上面的差异。只有这样才能够弄清楚,为什么中国三、四十次的核试所取得的进展与美国一千多次核试的进展相差无几。在信的后面又附上了我的对于两种语言对比的计算书。后来,接到了不少回信,要求我告诉他们我的真实地址才肯继续考虑。
……我也明白,不会有哪个美国参议员会提出任何有关的议案的,因为,任何有关议案的提出,其本身都是对于汉语的一种变相宣传,都是对于英语的贬低。没有任何美国人愿意辩论它。道理非常明显,如果辩论下去,必然牵扯到语音和语言学中的诸多问题,每一个问题都是他们的一块伤疤。目前,美国一直要求中国降低人民币汇率,但是,态度依然没有超出礼貌的范围,所以,这套理论还不适合。一旦他们超出了理性,那么,非常容易扯到语言学的问题上来。换句话说,是:由于英语的思考范围狭窄,所以不能够从更加长远的利益来考虑问题。但是,这话我还不敢说,至少不敢对美国人说。因为我是学工科的,工程上的事情我有点把握,可是一碰到经济问题,我心里没底。
类似的事情还有就是找世界语bbs进行辩论。谁都知道,世界语实际上是将英语改头换面设计的语言,当然不懂得使用‘声调’。我的问题是,英语的单词已经远远超过了常人的记忆极限,世界语有什么办法弥补这个缺陷吗?当时有人回答我说,世界语中使用派生的结构比英语更加明显。可是,当我将汉语中的声音种类,以及‘声调’的利用方法向他们解释以后,再也没有人发言了。
还有就是美国有一个‘只说英语运动’english only曾经向全世界争求意见。可想而知,我的意见是什么了。我告诉他们,你们一意推行英语实际上是将美国文化推向深渊,是在摧毁美国文化。拯救你们的方法只有重新选择一门带有‘声调’的语言。对于这些没学过汉语的人来说,他们一般不懂得什么是‘声调’,所以,只好用唱歌时候的音阶来向他们解释;任何一个英语‘音节’都可以跟随音阶变化出至少八种不同的声音,这和‘声调’的作用差不多。上述所说的实际上就是美国人的软肋,没有必要的话,我是不会乱碰的,影响团结。而且,随着中国国力的增加,我们可以说的也越来越少,因为说多了,就给人借口说中国威胁他们。
能力值:
( LV4,RANK:50 )
48 楼
auser
另外声明,本人最近用的最多的是php和awk,见笑见笑。
_____________________________________________________
牛呀,看见awk这个缩写就佩服的,有如滔滔江水!!!!!
能力值:
(RANK:300 )
49 楼
最初由 firstrose 发布 c语言的语法本身就存在很大的二义性.比如(i++)+(i++)+(i++) 不同的c编译器的结果是不一样的!你去看考研的题目里的c语言部分,许多都是考你这种变态的自加减! ........
关于 “不同的c编译器的结果是不一样” 这点,我想说一点意见
ANSI 标准对于每一项 C 的行为,都是有清楚的规范,像法律文件一样精密,所以在 「声明支持某一个版本的 ANSI C standard」 的编译环境下,编译的结果必然相同,也必须相同,除非以下情况 :
1. ANSI 标准里列明,每一个 C 的行为的结果,如果你的一句 C 代码的行为在不同平台上会出现不同结果,标准里清楚标明,例如: “Platform independent”, “Undefined behavior” 等等,意思是任何程序使用了这一句,那个程序便不是完全兼容于 C 的标准,可以出现任何结果。像我们用 C 呼叫 windows 的 API,这样的程序是不可能放到 linux 上编译,道理相同
2. 如果使用所有标明结果的 C 语法,但得到不同结果,那是你的编译器出了问题,它对 C 的标准没有完全支持
很多 C 开发出来的软件源码拿到不同平台上,也可以通过编译,原因就是因为 C 的源源对于兼容性有非常认真的规范
能力值:
( LV2,RANK:10 )
50 楼
83年美国国家标准委员会(ANSI)对C语言进行了标准化,颁布了第一个C语言标准草案(83 ANSI C),后来于1987年又颁布了另一个C语言标准草案(87 ANSI C)。最新的C语言标准是在1999年颁布并在2000年3月被ANSI采用的 C99 ,但由于未得到主流编译器厂家的支持,没有统一过。
在C99中包括的特性有:
* 对编译器限制增加了,比如源程序每行要求至少支持到 4095 字节,变量名函数名的要求支持到 63 字节 (extern 要求支持到 31)
* 预处理增强了。例如:
o 宏支持取参数 #define Macro(...) __VA_ARGS__
o 使用宏的时候,参数如果不写,宏里用 #,## 这样的东西会扩展成空串。(以前会出错的)
o 支持 // 行注释(这个特性实际上在C89的很多编译器上已经被支持了)
* 增加了新关键字 restrict, inline, _Complex, _Imaginary, _Bool
o 支持 long long, long double _Complex, float _Complex 这样的类型
* 支持 <: :> <% %> %: %:%: ,等等奇怪的符号替代,D&E 里提过这个
* 支持了不定长的数组。数组的长度就可以用变量了。声明类型的时候呢,就用 int a
这样的写法。不过考虑到效率和实现,这玩意并不是一个新类型。所以就不能用在全局里,或者 struct union 里面,如果你用了这样的东西,goto 语句就受限制了。 * 变量声明不必放在语句块的开头,for 语句提倡这么写 for(int i=0;i<100;++i) 就是说,int i 的声明放在里面,i 只在 for 里面有效。
* 当一个类似结构的东西需要临时构造的时候,可以用 (type_name){xx,xx,xx} 这有点像 C++ 的构造函数
* 初始化结构的时候现在可以这样写:
struct {int a[3], b;} hehe[] = { [0].a = {1}, [1].a = 2 };
struct {int a, b, c, d;} hehe = { .a = 1, .c = 3, 4, .b = 5} // 3,4 是对 .c,.d 赋值的
* 字符串里面,\u 支持 unicode 的字符
* 支持 16 进制的浮点数的描述
* 所以 printf scanf 的格式化串多支持了 ll / LL (VC6 里用的 I64) 对应新的 long long 类型。
* 浮点数的内部数据描述支持了新标准,这个可以用 #pragma 编译器指定
* 除了已经有的 __line__ __file__ 以外,又支持了一个 __func__ 可以得到当前的函数名
* 对于非常数的表达式,也允许编译器做化简
* 修改了对于 / % 处理负数上的定义,比如老的标准里 -22 / 7 = -3, -22 % 7 = -1 而现在 -22 / 7 = -4, -22 % 7 = 6
* 取消了不写函数返回类型默认就是 int 的规定
* 允许 struct 定义的最后一个数组写做 [] 不指定其长度描述
* const const int i; 将被当作 const int i; 处理
* 增加和修改了一些标准头文件, 比如定义 bool 的 <stdbool.h> 定义一些标准长度的 int 的 <inttypes.h> 定义复数的 <complex.h> 定义宽字符的 <wctype.h> 有点泛型味道的数学函数 <tgmath.h> 跟浮点数有关的 <fenv.h>。<stdarg.h> 里多了一个 va_copy 可以复制 ... 的参数。<time.h> 里多了个 struct tmx 对 struct tm 做了扩展
* 输入输出对宽字符还有长整数等做了相应的支持
但是各个公司对C99的支持所表现出来的兴趣不同。当GCC和其它一些商业编译器支持C99的大部分特性的时候,微软和Borland却似乎对此不感兴趣。