澳门线上正规赌场_搜易得IT数码资讯网

澳门线上正规赌场

2017-11-18 10:32 来源:搜易得IT数码资讯网

 Delphi 2.428% +0.09% A 11 9 

我预测Java的气数也跟这种语言差不多。有人不时发邮件跟我说:“你怎么能说Java不可能成为一种成功的语言呢?它现在已经是一种相当成功的语言了。”那么我承认这一点——如果你衡量成功的标准是关于Java的书籍(特别是个人著作)在书架上占去的空间的大小,或者是为了找工作不得不学习Java的大学生的数量的多少的话。我所说Java不可能成为一种成功的语言,意思是从物种进化的角度来看,Java将会走向穷途末路,就像Cobol一样。

某些浪费固然是可耻的,譬如SUVs(译注:SportUtilityVehicle,运动型多功能轿车)就被证明是一种拙劣的产品,即使它载油量很大且不会产生污染。SUV之所以拙劣,是因为它为了解决一个拙劣的问题——怎么让一辆小型货车看上去更威猛。不过不是所有的浪费都是坏的。我们有证据来支持这一点,打长途电话的时候你不会繁琐地一分钟一分钟地数时间,如果有足够的资源,无论是打长途还是短途,你可能会觉得都是一样的。

因此我也想知道编程语言在一百年以后会是什么样子,从而决定现在该把赌注押在哪个“树枝”上。

 C# 4.986% +0.54% A 7 6 

 SAS 0.715% -0.10% A 15 20 

 PHP 9.180% -0.21% A 5 5 

 Perl 3.427% -0.60% A 9 19 

我认为好的公理的选择很重要,但是公理要尽量少,这一点同样重要。数学家们对于这一点感受应该更深刻:公理越少越好。我认为也确实如此。

 Pascal 0.622% -0.05% B 18 15 

 PL/SQL 0.757% -0.23% A 14 13 

#p#分页标题#e#另外应用程序和硬件之间软件的多层次性也消耗了很多计算机机时。这也是我们已经看到的发展趋势:许多软件只是被编译成字节码,运行在字节码解释器上。BillWoods曾经告诉我,每一层解释器大概最起码要消耗10%的速度,这些额外的开销换来的是你程序的弹性。

这是一个值得思考的问题,其意义不在于我们一定要用这种语言,而是在于据此我们可以选择可能发展成那种语言的语言——如果我们够幸运的话。

任何编程语言都可以分为两个部分:作为公理(axiom)的一个基本运算符(operator)集和语言的其他部分,其他部分原则上可以根据基本语素写出来。我想基本语素集是一种语言在其漫长的生存期中最重要的部分了,而其他部分可能会改变。这就好比买一幢房子,原则上你应该首先考虑房子的地理位置,其他的任何因素你都可以调整,但是你不能调整位置。

 RPG(OS/400) 0.606% -0.15% B 20 - 

 Go 0.603% 0.00% B C#的降生#p#分页标题#e#最初C#并不叫C#,它有个更酷的名字,叫做COOL。微软从1998年12月开始了COOL项目,直到1999年7月,COOL被正式更名为C#。在英文中#被读作Sharp,意味“锋利”。看来微软是希望能把C#锻造成一把无比锋利的刀。微软在经历了与Sun关于VisualJ++的大规模口水仗后,不得不舍弃原有的VisualJ++项目,转而提出了CLR也就是公共语言运行时的概念。#p#分页标题#e#2000年6月26日微软在奥兰多举行的“职业开发人员技术大会”(PDC2000)上,发表新的语言C#。C#语言取代了VisualJ++,语言本身深受Java、C和C++的影响。在讲述了微软C#的诞生过程后,我们不得不提到一位天才——AndersHejlsberg(安德斯-海森博格)。天才的海森博格VS精明的盖茨AndersHejlsberg(安德斯-海森博格)作为Delphi和C#之父,从TurboPascal、SideKick再到Delphi,Borland是Anders辉煌的起点,他在这里成为人们敬仰的软件大师,并一手铸就了Borland传奇。但是1996年一个普通的下午,几个小时前,他刚与比尔-盖茨结束了一次愉快的午餐,同为软件界的精英,他们相谈甚欢,盖茨给他开出三百万以上的年薪和数万股的微软股票。这是一个诱人的条件,但更重要的是,盖茨许诺他可以有充分的时间和资源投身自己感兴趣的技术方向。1996年,Anders最终正式加盟微软,成为VisualJ++和WFC(Windows基础类库)的架构师。现在AndersHejlsberg是微软的TechnicalFellow,担任C#编程语言的首席架构师,也参与了.NETFramework、VB.NET和F#等语言的设计与开发。很难说到底是海森伯格的天才征服了盖茨,还是精明的盖茨成功笼络到海森伯格。但是不可否认的是,正是海森伯格的加入,使得微软拥有了C#这一柄十分锋利的刀。让微软得以在开发领域占据属于自己的一片份额,取得与Java分庭抗礼的资格,尽管C#在很多地方借鉴了Java的思想。利刃的威力微软C#语言定义主要是从C和C++继承而来的,而且语言中的许多元素也反映了这一点。C#在设计者从C++继承的可选选项方面比Java要广泛一些(比如说struts),它还增加了自己新的特点(比方说源代码版本定义)。但它还太不成熟,不可能挤垮Java。C#还需要进化成一种开发者能够接受和采用的语言。#p#分页标题#e#C#更像Java一些,虽然微软在这个问题上保持沉默。这也是意料中的事情,我觉得,因为Java近来很成功而使用Java的公司都报告说它们在生产效率上比C++获得了提高。Java所带来的巨大影响和大家对它的广泛接受已经由工作于这种语言和平台之上的程序员数量明显的说明了(估计世界范围内共有两百五十万程序员使用Java).由这种语言写成的应用程序的数量是令人惊讶的并已经渗透了每一个级别的计算,包括无线计算和移动电话(比如日本发明的Java电话)。C#能够在用户领域获得这样的礼遇吗?我们必须等待并观望,就像已经由SSI公司的CEO和主席KalpathiS.Suresh指出来的那样,"我发现所有这些都是渐进的.如果C#不存在,我们总能回到Java或C和C++.这些都不完全是新技术;它们在更大的意义上来说只是大公司制造的市场噱头。我们必须给他们时间安顿下来看看这些是不是真的对IT工业有什么影响。"C#从一开始就是纯粹的OOPL(面向对象程序开发语言)。C#中的一切都是对象:基本的值类型,如int和double,都从Object类继承而来。所有的图形用户界面(GraphicalUserInterface,GUI)构件--窗口、按钮、文本输入栏、滚动栏、列表和菜单等--都是对象。所有函数都附加到对象上,这些函数称为方法。C/C++中有脱离对象的方法,而C#中没有。甚至是C#程序的入口点(现在称为Main方法)都不再独立存在,而是被绑定到类中。因此,C#特别适合于编写面向对象的应用程序,然而仅仅使用这种面向对象的语言并不能保证所产生的应用程序真正做到面向对象!除此之外,您必须理解两个基本目标:(a)如何从根本上设计应用程序以最有效地使用对象;(b)如何正确地使用C#语言。对于更加具体的技术细节,请参考上面的C#基础教程。

Arc的最初版本就是这种软件分多层以获取弹性的极端的例子。那是一个建立在CommonLisp上的经典的“元循环”(metacircular)解释器,与McCarthy最初的Lisp论文中的eval函数(evalfunction)有一定的共同性。整个Arc只有200余行代码,所以非常易于理解和修改。而我们所用的CommonLisp,即CLisp本身又运行在一个字节码解释器上。因此这里就存在两层解释器,其中一层(上面的那一层)是惊人的低效,但是Arc仍然能用。虽然我承认它用起来很勉强,但是毕竟能用。

 Lisp/Scheme/Clojure 0.626% 0.00% B 17 16 

一百年后程序员将需要什么语言?最可能是那种只需要最少的精力就写出“非常低效”的“第一版程序”就搞定问题的语言。至少,我们目前可以如此描述这种语言。而用他们的话说,他们需要一种容易编程的语言。

在这个计算机处理能力很弱的时代,对速度的渴求在我们心中早已根深蒂固,我们应该有意识地克服这种想法。在语言设计中,我们应该有意识地寻找一切机会,用执行效率来换取哪怕很小的使用便利性。

无论一百年后计算机是什么材料做的,可以很肯定地预测它将比现在运行更快。如果摩尔定律(Moor’sLaw)继续有效的话,它的速度将是现在的7,379亿亿(quintillion)(73,786,976,294,838,206,464)倍,这是难以想象的。不可否认,对于速度的预测摩尔定律很可能失效,任何事物如果每18个月就增长一倍的话,长到最后就很可能违背某些基本的极限。但是这不妨碍我们去相信计算机会比现在快得多,即使它最后只比现在快那么小小的一百万倍,也会从本质上改变编程语言的基本规则。到那时候,那些当前被认为是运行速度缓慢、不能生成高效率生成码的语言就会得到更多的空间。

Python。。自由了又怎样?没有商业支持,不温不火,烂泥扶不上墙。Java出生时,论性能不如C,论简单不如Python(Phthon(1989)比Java(1993)出生早),结果呢?因为Py没有商业支持,靠社区能做大才怪呢。再说.Net是2001年才出来的,看看人家比Python强了多少。Python是不是白活了20多年。

人们很少注意到程序的实现也应当使程序变得更有弹性。一个程序往往在编写的过程中会发生需求变化,这是不可避免的,也是应当受到欢迎的。

 (Visual)Basic 5.413% -3.07% A 6 7 

  2.401% -0.41% A 12 10 

我想去掉字符串(string)这种数据结构已经指日可待了。我们在Arc(译注:Lisp的一种方言)中就已经是这么做的,而且成功了。一些用正则表达式描述起来相当拙劣的操作,在Arc中用递归函数就很容易描述了。

#p#分页标题#e#如果我们把语言的核心看成是一组公理集,那么只简单地为了效率的好处而往这个公理集里面添加公理,却不能增加语言的表达力的话,这种添加就是丑陋的。效率是很重要,但是我不认为那种获取效率的方法是正确的。

如果一些应用逐渐降低对效率的要求,而另一些应用继续要求占用最新的硬件能提供的所有速度。那么更快的计算机就意味着语言必须覆盖一个更广泛的效率范围。我们已经看到了这种事的发生,一些用新近流行的语言来实现的程序如果用几十年前的标准来衡量的话,那对机时的“浪费”是惊人的。

前10名编程语言趋势走向其他语言及排名PositionProgrammingLanguageRatings21 PowerShell 0.579% 22 Transact-SQL 0.558% 23 Lua 0.527% 24 D 0.462% 25 FoxPro/xBase 0.451% 26 ActionScript 0.451% 27 S-lang 0.414% 28 LabVIEW 0.400% 29 Ada 0.398% 30 Bourneshell 0.395% 31 JavaFXScript 0.390% 32 COBOL 0.388% 33 NXT-G 0.385% 34 Alice 0.352% 35 Fortran 0.351% 36 Haskell 0.334% 37 Logo 0.318% 38 Scratch 0.316% 39 Forth 0.270% 40 CL(OS/400) 0.265% 41 Tcl/Tk 0.261% 42 Cshell 0.255% 43 Prolog 0.243% 44 Groovy 0.234% 45 ML 0.234% 46 cT 0.233% 47 Caml/F# 0.229% 48 Scala 0.220% 49 Erlang 0.219% 50 VHDL 0.218% 编程语言类别CategoryRatingsAug2010DeltaAug2009Object-OrientedLanguages 54.9% +0.6% ProceduralLanguages 40.5% -1.0% FunctionalLanguages 3.1% +0.2% LogicalLanguages 1.5% +0.2% #p#分页标题#e#CategoryRatingsAug2010DeltaAug2009StaticallyTypedLanguages 62.2% +2.5% DynamicallyTypedLanguages 37.8% -2.5% 

 ABAP 0.616% -0.12% B 19 14 

大多数数据结构都是由于速度的原因而存在。譬如,当今很多语言都既有字符串又有列表(list)。从语义上讲,字符串是列表的一个子集——其元素为字符,因此你为什么需要一种单独的数据类型呢?真的不需要。字符串的存在,只是因为效率的原因。但是这种用扰乱语言语义的手法来使程序运行更快的做法是没有说服力的。语言中包含字符串类型就是一种不成熟的优化。

“essay”(译注:企图;小品文)一词源于法语的一个动词“essayer”,意思是“尝试”,也指为了“试图”推演出某一结论而写的东西。软件也跟essay一样,作者往往并不确知哪些才是他们真正要表达的东西,我认为一些最好的程序也是essay。

有好的浪费,也有不好的浪费。我对好的浪费感兴趣,就是那种花更多的开销,但是能获得更简单的设计。我们如何从浪费更新、更快的硬件的机时中获取好处呢?

Lisp(译注:一种表处理语言,用于处理包含有表格的数据的编程语言,被广泛地运用于人工智能研究)黑客(hacker,译注:黑客指掌握尖端电脑技术的人,而不是人们常说的网络入侵者,下同)们已经了解到弹性数据结构的价值,我们倾向于在程序的第一个版本中用列表(list)来处理一切数据。这种最初的版本是如此惊人地低效,因为它有意地避免去想它到底要做什么的细节,就像——至少对我来说——是吃牛排的时候有意避免去想它来自哪里一样。

2010年8月TIOBE发布了新一期的编程语言排行榜,我们看到前5名的位置还没有变化,关键是第6名的C#与之后的Python互相调换了位置。这似乎对于.NET平台来说是一个好兆头,毕竟C#是.NET平台的一面旗帜。下面我们先看一下本期的排行榜榜单。PositionAug2010PositionAug2009DeltainPositionProgrammingLanguageRatingsJul2010DeltaJul2009Status1 1 

有的预测甚至比这个更骇人听闻。譬如McCarthy在1960就描述过的Lisp语言中连数字(number)都没有。逻辑上讲,你并不一定需要一个关于数字的单独的符号,因为你可以用列表来表示数字,整数n可以用一个n个元素的列表来表示,你可以用这种方式进行数学计算。只不过这样不堪其低效。

#p#分页标题#e#当然,在提出一百年后编程语言会是什么样子的问题的时候,我做了一个很大的假设。一百年后我们还写程序吗?我们不是只需要告诉计算机我们希望他们做什么就可以了吗?到现在为止,这方面还没有大的进展。我想此后的一百年里,人们还是要通过现在这样手工编写的程序来告诉计算机去做什么。或许有的问题我们现在需要写程序来解决,而一百年后这些问题不必再写程序来解决,但是我想我们还是要面对很多我们今天编程所面临的同样的问题。

对于语言设计者来说,考虑一下编程语言的进化方向就特别有意义,因为他们可以据此把握好设计取向。在那种情况下,“处在进化树的主干上”就不只是选择一个好的语言了,而是从中得到启发,以对语言的设计做出正确的决策。

现实中没有人被建议用列表来实现数字操作,事实上McCarthy在1960年的论文在那时也根本没有指望被实现。那只是一项理论探讨,只是尝试给图灵机(TuringMachine)创造一种优雅的替代。出人意料的是,有人却根据那篇文章做出了一个可工作的Lisp解释器。不过数字不是用列表来表示,而是跟其他语言里一样,用二进制的方式来表示的。

很难预测人们的生活在一百年后会是什么样子,我们只能给很少的事物一个确切的预测。我们知道到那时候每个人都将驾驶气垫轿车,地方法规将对建造上百层的高楼无所制约,大部分时间都将日月无光,女人们都将精通武术(martialarts)……在这里,让我们把这幅图景的一个细节放大来看看:那时候人们用什么编程语言来写那些气垫轿车的控制软件呢?

我有一个预感,软件进化树的主干会贯穿于某些编程语言中,这些语言有着最小、最干净的“核”。一种语言越能用它自己来写自己,就越好。

语言进化缓慢,是因为它们并不是技术,语言只是符号。程序只是告诉计算机你要解决的问题的形式化的描述。编程语言的进化的速度并不像搬运或传递,倒更像数学符号的进化速度——数学符号也在进化,但是如你所见,却不像它所支持的技术一样有巨大而飞快的变化。

 Ruby 1.979% -0.51% A 13 12 

谁要说他能预测某一技术在一百年后将是什么样子,我们都会觉得他在吹牛。但是不要忘记我们已经有了五十年的经验,当我们反思过去的五十年里语言的进化是多么缓慢的时候,再来展望一下一百年后的情况就是一件可以理解的事。

假如你生活在旧石器时代,任何时候你大概都会因为自己“处在进化树的主干上”(译注:石器时代地球上生活着智人在内的多个人种,后来其他人种都灭绝了,只有智人在竞争中生存下来,成为现代人类的祖先)而感到无比幸福,虽然还有大量的穴居人——他们也是这个世界的居民,并且克鲁马努人(译注:旧石器时代晚期在欧洲的高加索人种)不时会来袭击你,还偷走你的食物。

在应用程序方面,把软件分层是一项了不得的技术。自底向上编程意味着一层一层地写程序,每一层作为“语言”供上一层使用。这种方式有利于生成小而灵活的程序,也是取得可复用性这座“圣杯”(holygrail)的最佳途径——“语言”定义上的可复用性。在你写某种类型的应用程序的时候,越是能把你的应用下压到“语言”中,你的软件的可复用性也就越高。

这不只是发生在编程语言上的一个现象,而是一个普遍的历史趋势。当技术更新换代了以后,后一代都能做前一代会认为是浪费的事情。三十年前的人肯定会觉得我们随心所欲地打长途电话是件令人惊讶的事,一百年前的人们一定会更惊讶于从波士顿经过孟菲斯到达纽约的包裹一天就能送到。

最近,人们仔细核查起编程语言的核心,看看是不是有什么“公理”是可以除去的,这已经成为一项有益的实践。我发现在我长期的职业生涯里,自己经常像个笨蛋一样,用垃圾堆积着垃圾(译注:原文cruftbreedscruft,随着软件的发展,以及经历了修改bug和更新的若干周期,它的部分代码已不再使用但仍然保留在源码中。这种代码称为cruft。 cruf可能是一两行无用代码或整个源文件模块。由于很难识别cruft,去除cruft 往往很困难。)并且我发现同样的事情在软件里随时随地都在发生。

 MATLAB 0.627% +0.07% B 16 18 

我现在就可以告诉你,一百年后当我们有了更快的硬件以后那些新增的处理能力都做了些什么?它们都将被“浪费”掉!

固然有一些应用还将追求速度。因为我们用计算机解决的一些问题本身是由计算机引起的,比如你要处理的视频图像的速率依赖于另一台产生视频图像的速率。另外还存在一些可以无限吃掉机时的问题,例如图像描述、加密、仿真等。

我认为,语言就像物种一样,会形成进化树,没有前途的分支将枯死脱落。我们已经看到了这种事情发生:Cobol——曾几何时风光无限,现如今没有一个像样的后代,它就是在进化中被淘汰的“穴居人”语言。(译注:穴居人是石器时代的欧洲大陆的主宰,大约3万年前灭绝。穴居人又叫尼安德特人,其发声系统不发达。)

必须声明,我并不是建议所有的数值计算统统用列表来实现。我只是建议语言在没有为应用而增加任何额外的符号之前的核心部分这样来定义。实际上任何需要数学计算的程序大多会用二进制来表示数字,但是这只是一个优化,并在语言的核心语义范围中。

 Java 17.994% -1.53% A 2 2 

我从计算机能力还很珍贵的时候开始学习编程。我还记得那时候从我的Basic程序中节省出所有能节省的空间以便装入一个4K大小的TRS-80,在这个无止境的重复上我花费了很大的精力,把机器的能力发挥到极限,最终还是受不了这种低效。但是现在看来,我那时拼命节约机器资源的直觉是错误的——就如同一个从小受过贫穷的煎熬的人,连去看医生这样很重要的事情也不舍得花钱。

集中化对于语言的进化更有可能,部分原因是语言进化的走向空间比较小,还有部分原因是对语言的进化来说,突变不是随机的。语言的设计者总会有意识地吸取其他语言的思想。

软件的自由和商不商业没关系的,比如汉语,人家作家写成小说也可以卖钱呀,可是谁都可以使用汉子的。这是语言的自由。

 C 17.866% +0.65% A 3 3 

这只是一个猜想,我也许会猜错。我在此的重点不是要讨论Java,而是要提出进化树的论点并引发人们来问自己:“X语言在进化树上的什么位置?”之所以提出这个问题,不仅为了避免百年后去后悔,更主要是因为跟紧语言发展的主流对于当前选择好的编程语言有积极的启发意义。

编程语言的进化过程又不同于物种的进化过程,因为编程语言的分支可能会汇聚。譬如Fortran这个分支,似乎正在渐渐并入到Algol的后代中。理论上讲这对于物种来说也是可能的,但是这种可能性很小,似乎从来就没有发生过。

低效的软件不是拙劣的,真正拙劣的是使程序员做不必要的工作的语言。浪费机器时间不是低效,浪费程序员的时间才是真正的低效。这个道理随着计算机越来越快,也将会越来越明白。

既然速度在程序的绝大部分地方都无关紧要,那么你通常就不必为这种小事操心了,这一点随着计算机速度越来越快,将越来越正确。

编程语言会发展到去掉数字这种基本数据类型的程度吗?我这么问不是信口开河地制造耸人听闻的未来问题。情况就如同无坚不摧的矛遇到了无所不克的盾——在这里是无比低效的代码遇到了无比丰富的硬件资源。我认为这完全有可能,因为未来还相当长。如果某种做法可以减少语言的核心公理的数目,那么它随着时光飞逝会越来越值得“下注”。如果某种想法在一百年后依然是荒唐的,在一千年后或许未必荒唐。

英文原文:TIOBEProgrammingCommunityIndexforAugust2010AugustHeadline:DinosaurSmalltalkfallsofftop50(cnblogs)

不知何故可复用性的思想在1980年代被牵扯到面向对象编程中,并且看来还没有要把它解放出来的反对性的迹象。然而虽然某些面向对象软件是可复用的,但是使程序可复用的并不是面向对象,而是它的自底向上特性。想想库函数:它们可复用使因为它们是“语言”,无论它们是不是采用了面向对象的方法。

 Objective-C 3.150% +2.54% A 10 11 

引用来自“妖魔舞”的评论引用来自“ak_birdofprey”的评论呵呵,自由JAVA才是好事。比如自由的GO。不过现在更喜欢那种纯自由的PYTHON和GO。GO的感觉要比JAVA好的多。PYTHON也是。他们本身没有区别。但是公司可以用来赚钱。JAVA就不一样了。社区版和企业版差别大的很。不是真正的自由软件。自由度比不上GO,更比不上PYTHON。

 Python 4.223% -0.27% A 8 8 

我认为解决问题的正确方法是将程序的内涵与它的实现细节分离。不要既有列表又有字符串,只要有列表就够了,如果有必要,可以通过某种方式给编译器以建议,允许编译器把字符串按照相邻字节来存放。

 C++ 9.658% -0.84% A 4 4 

像这种扁平的数据结构还能存在多久?我审慎而全面地思考了各种可能性,结果连我都大吃一惊。譬如,我们将会放弃数组吗?毕竟,数组只是一种以整数向量为键值的哈希表(hashtable),而我们会连哈希表都用列表来取代吗?

责编: