猎云网12月22日报道 (编译:清华人)
猎云网注:计算机语言日新月异,从C语言,到C++,Java语言,到现在的Go 和Swift语言,计算机公司也是大力投资计算机语言的开发和升级。互联网机构、大学更是计算机语言的领军。现在社会就是科技社会,拼的是软实力,谁掌握了语言代码(标准),谁就掌控着这个时代。好比在战争中,总是胜利者书写历史。
如今,如果你是一个非常大的,很富有的技术类公司,似乎拥有自己的数据中心,豪华车和公司的午餐吧是远远不够的,你也需要你自己的程序设计语言。
谷歌有Go语言,早在2009年谷歌公司就开始设想了。Facebook在去年春季也引进了Hack语言,而苹果公司不久前也揭开了Swift语言的面纱。
正如英国小说家乔治·奥威尔提出的,在战争中,胜利者书写历史。在技术上,成功的公司在编写编程语言。互联网是按照公开的标准和编码建立的,但是社交网络和云是被巨头公司控制的。并且把他们独一无二的标志贴在数码科技的思维材料上,就像占领者威廉姆和他的诺尔曼人把早期法语的一部分输入给初期的英语语言中一样,在许多方面,这也形成了我们法律和金融语言。
无可否认,这些新的语言给了编程人员一些有益的帮助。谷歌的Go 语言结构的目的是,使代码同时运行的工作变得简单化,为编程人员创造和篡改同时运行的程序一部分铺平了道路。而且这样就充分利用了今天的多芯片和多处理器的机器。
苹果公司的Swift 语言,为iPhone的开发者们提供了一些简洁灵活,很流行的网络编辑语言。每个都有自己的logo(标识):Swift是一个格式化的鸟,Go是一个笨拙的地鼠。
这些方案的目的都没有使现状发生大的变化。反而,他们正在为今天主流的技术,使其平滑,并且优化了代码。如果我们想了解它对我们的数字生活意味着什么,当大公司控制和形成语言,技术发展必须用的语言,这就是一个线索。如果这就是程序帝国时代,我们应该是随声附和,还是挥舞我们的拳头反对呢?
让我们从谷歌禁止分号和拥抱括号开始。
Go 语言的精髓
肯·汤姆森、罗博·派克、罗伯特·格里塞默,谷歌公司的三个代码权威人物,在2009年,想象出了Go语言。然而,当他们仅仅是半开玩笑的说,在等待他们的C++和Java代码的汇编。这些广泛使用的初级的程序语言正在变得迟钝,特别是当遇到了谷歌正在有效利用的这种庞大的程序。每次,当你要加上或改变某个东西,你就不得不等编译程序“建立”一个二进制的版本,把你的代码溶入到它的机器可以读的核心部分。
派克解释说“建立二进制的版本要花费45分钟,我认为这是很痛苦的,当建立过程花费这么长的时间,你有许多时间考虑,你也许能做的更好的事情。”
设计一个程序语言是一个全面权衡的方法——对程序员来说是更容易,而对机器来说最适合。
制作一个运行更快的代码需要程序员更多的努力。人们用来编写运行快的代码应该花费多长时间和多少精力呢?反过来,你让开发人员交给电脑多少工作和多繁重的工作呢?另外一个重要的权衡在于这个语言提供给机器存储的直接途径的量。正如在很多其他的地方,这个语言的发明者必须选择:你给于程序员多大的自由?要知道他们也许会搞砸的。你给他们周围放了多少支柱来缓冲他们潜在的跌倒,要知道你加的每一个都会使程序变慢。
语言设计好比是做弥散,整个过程既正式又严肃,而且往往充满了困境和矛盾。设计编程语言没有对错之分,只是不同的选择来适合不断变化的硬件,变化无常的用户和吹毛求疵的程序员。
Go 语言的创造者们有很多做如此选择的经验。汤普森合作发明了Unix,在Bell Labs工作的他和经验丰富的同伴派克Pike, 设计出了字符编码,叫做UTF-8, 现在绝大多数网站都在使用。因此他们知道很小的一个决定可以有很大的成果。今天增加的每个规则,可能意味着给明天的程序员许许多多的未来的敲击键盘,省略的每个规则可能意味着无数的崩溃的降临。
例如:程序语言通常都使用分号来把陈述句隔开,括弧群把陈述句联系起来。在庄重的C语言中有 “Hello,world” 这样经典的程序。
main()
{
printf(“hello world”);
}
Go语言的创造者们感到,括弧群是必要的。一些语言,尤其是流行的Python语言,已经把括弧群弃之不用了,让程序员们使用缩格——白色空格,或者看不见的字符,把代码展示给人的眼睛和机器,而Go团队认为那是个“严重的错误”。括弧群意味着,程序员可以告诉电脑,怎样明确地和毫不含糊地把大块的代码归在一起。(在和瑟奇·宾的一次会面中,谷歌的创始人建议Go 语言的设计人员们使用方括弧而不是圆括弧,可以免除开发人员无数的使用shift键过程。派克回忆到:“他不是每次都赢的。”)
所以括弧使Go语言简洁,但是在2009年12月,Go语言的智囊团决定,中断要求程序员们用分号来结束陈述句。他们的常见问题解释是:“分号是为分析器的,而不是为人的,而且我们应尽可能多的淘汰分号”。今后,语言的机械装置可能在你给它输入你的代码后,会给你添加分号。
Go 宏大的分号净化,节约了劳动力也缓解了眼睛的疲劳。但是为了分号的输入不要陷于混乱,程序员们现在不得不在严格一点地使用他们的括弧,否则,一个分号也许被在一个错误的地方注入。
这些选择不是无可争议的,一位评论员在派克的一次讲座中解释道:“他们用多余的括弧毒害了这个语言。”这种语言好像很容易被设计,所以,仅仅透明的空间,在分隔不同的代码片段中,可以起到括弧的相同的作用。对于这一点,谷歌的安德鲁·杰勒德回应说:“每天都有大量奇怪的、乱七八糟的事情发生,这也意味着,半有规律地,有人将一个隐形的字符潜入到基础代码,这能引起一个微小漏洞(bug),这在谷歌的Python 程序中出现过不止一次。“
正如威廉姆·布莱克所设想的:从一粒沙子中看待世界,程序员把标点符号看做量度之间的门。当然,对于我们其余的人来说,不是这样。
无论如何陶醉,句法规则也许使程序员陶醉,他们的软件论坛充满了对它的细微差别而引发的激烈争论,对于Go或者其它任何一种语言,最使大多数人感兴趣的是,使这个语言飞起来的 “超级能量”。对于Go语言,那可能是其接近并发性。
不像我们说话的语言,程序员们把它叫做“自然的”语言,这些自然语言出现了很久,程序语言是为具体的终端和使用创造的。Go语言,正如派克解释的那样,是由谷歌设计,用来帮助解决谷歌的问题。谷歌有很多问题......我们需要一种能使我们更容易完成我们工作的语言,我们的工作就是编写服务器软件。
在云中,谷歌公司运行自己的全球超级电脑,那恰好是Go语言最优化的那种计算机运行方式。 但是谷歌从来没有在销售软件中赚一分钱,而且Go语言从一开始,就一直是一种免费的,公开源代码的项目。这已经帮助它很快走进了其他全套设备的技术兵工厂。它正在发生变化,像一位在雷德蒙咨询公司解释的,“云基础设施的语言在不断出现”,因为,在2014年,每个平台可能在服务器上使用一点额外的性能和活力。
而且,这也变得流行起来,例如,Dropbox公司 从Python到 Go都已经运行了自己大部分的后台代码。而Automattic公司,这个公司经营WordPress.com,也开始捣鼓Go语言,即使WordPress 公司本身一直总是在使用PHP,一种有20年的脚本语言。Demitrious Kelly, 一位Automattic 的开发人员,他已经开始使用这种语言。他说:“这些日子,一周就有一打新的框架,方法论和类似的东西,似乎,每一个都是一种新的杀手,你不得不问:它比我们拥有的更好吗?但是,那本身是一个很复杂的问题,怎么个更好?它能让我们做我们以前不能做的什么吗?它值得争论吗?” Kelly说,Go 语言在这些测试上进展的很顺利,部分原因是因为这种语言很小:“其实,Go语言真地在一周之内就可以学会,匆匆做出一项目,放回去,然后再回到PHP。”
假定,当初在脑海里,Go语言只是为谷歌的独有的问题设计的,句法的选择——分号和括弧哲学系统——也许似乎像一个“多少个天使能在标点符号的头上翩翩起舞”的那种问题了。然而,这些问题并非那么的不重要。对细节要花热情,具有代表性地是,对一个程序员来说,要把一种新的语言带到这个世界上来是要愿意蔑视传统。最终,也许驱使一种语言被采用的东西,是它的设计者对日常编程代码粗糙的地方那种细心的照料,就是各地的程序员们称作“痛点”的东西。
Swift语言的起源
每个编程语言都有很痛苦的过程。但是,iOS的迅速崛起给了开发者比过去更多的痛苦。直到今年夏天Swift语言的面世,如果你想为iOS编写一个程序,你必须使用ObjectiveC。在19世纪80年代,斯蒂芬·乔布斯的Next语言已经采用了处于青春期的ObjectiveC,在乔布斯回到苹果公司后,这个语言成长为苹果的Max OSX的重要开发工具,当iOS出现时,Objective C与它恰当地一起运行。
如今,研发者们说这种语言正在表现出它的衰老,安迪·赫兹菲尔德,一位资深的软件人员,他编写过最初的Mac操作系统,最近从谷歌退休,他说:“面对任何想给他们的平台编写代码的人,苹果有几十年不整齐的东西。当我看到Swift的发布,我非常激动,因为,我总是鄙视ObjectiveC,我喜欢他的原理,但是,我不喜欢它的句法,而且,从来不能用它真正地享受编程。
苹果公司把它的下一代编程语言项目委托给了计算机科学家克里斯·拉特纳,他被称赞为一个领军人物,带领着一个强大的,很流行的开放源代码的项目的,被称作LLVM,这是一种编辑器工具包,它能在完全不同的平台运行,(苹果和谷歌都在广泛使用它)。在2005年加入苹果公司后,拉特纳继续致力于LLVM和相关的项目,然后从大众视线中消失了几年,去年六月带着他的Swift出现在苹果世界开发者大会上。
Swift语言目标为“像脚本语言一样,能有表现力的和感觉愉快的,第一款达到工业质量的系统编程语言。”换句话说,Swift语言是很有前景的,你可以更方便地编写出防止崩溃的代码程序,而且这一过程比之前要快的多。并且,你将能用一个大约2014年网页开发者的本能和习惯来编程,而不是绞尽脑汁的把自己拉回到上世纪90年代或更早的时期。
模仿着来自大批iOS的研发者和旁观者的欢呼声,赫兹菲尔德说:“做的太漂亮了,这解除了每个人脸上的巨大的痛苦表情。所以,只有那些还没有登上Swift语言之顶的iOS的研发者们现在哑口无言。”因为,为了与面向对象语言代码共存,Swift语言是建立在相同的项目之内,浅尝辄止是很容易的,即使墨守成规的对研发者。
但是,如果你决定使用Swift语言,你就在买进一整套苹果公司开发且拥有的东西。你将在苹果公司建立和销售的工具箱里开发自己程序;你将在苹果公司的机器上运行你的程序,而且,如果你想让你程序在任何其他地方运行的话,你就不得不用另外一种语言重写你的代码;你的命运就由苹果公司掌握了。
赫兹菲尔德说:“你不得不固定在带有围墙的花园里。”所以,他正在抵制用Swift语言工作的诱惑,他补充说:“如果他们有一个开放源代码的成就,并且已经展现了一点点的兴趣使其能在交叉平台上运行,我可能会使用它。”
Swift语言的一个开放源代码的版本,原来计划,开发者能找到方法把程序语言转到不同的平台,并且可能提供一些保证,即使苹果公司在途中失去兴趣,Swift语言也能有一个未来。那些过去在其他的“围墙花园里”逗留受过伤的开发者,通常对此非常关心。而苹果公司对开放源代码的途径并不完全厌恶,尽管,公司好像坚定的抓住控制iOS世界的缰绳。在Swift语言的预告后不久,开发者们在LLVM项目上,就Swift语言的隔离性质上开始为难苹果公司和拉特纳。拉特纳回应道:
伙计们,如果你想制作,就无拘无束的制作你自己的龙吧,但是你的投机就是那样:投机。我们真正地还没有讨论这个,因为我们有大量的工作要做,来回复大量的我们不断得到的反馈,并且,在今年秋季1.0版本发布之前,不得不把大量的事情做完,(例如,存取控制!)你可以想象,我们许多人想让它成为开放源代码而且是LLVM的一部分。但是,这个讨论还没有发生,而且,在一段时间之内都不会发生。很遗憾让你们大家久等了,但是,太遥远了不能立刻处理。
到目前,Swift语言1.0的发布已经到了和过去了,我不能洞察苹果公司PR的静锥区,从拉特纳那里获得进一步的评论。但是像这样的注解给出了在他灵魂中,以及苹果公司的灵魂中,也许正在产生的公开和所有权之间斗争的某种感觉。
Swift语言,不像Go语言那样久,还不突出,所以它的强力还有待进一步考察。不管怎样,在苹果公司的地盘上,它的未来还是安全的,它是苹果自主编程语言的掌上明珠。如果苹果说Swift是10亿iOS设备的未来,那么它就是有前途的。事实上,这个必然性是它的超级能力。人们喜欢大卫·惠勒,一位俄勒冈州波特兰市的独立iOS开发者,人们将接受它,不仅因为从长远来看,他们几乎没有选择,而且因为它有意义。惠勒说,Swift意义给他带来惊喜,他认为苹果公司可能仅仅会给面向对象编程语言不断的打新的补丁来改良。“它有很大的希望,而且看到它的用处,我很激动,我期望在未来几周,用它写我的第一个应用。”
但是,在别的地方,它的接受能力或许会面对很大的问题。那是因为Swift语言继承了太多的苹果的DNA:像太多的苹果创造的应用语言一样,这个语言创造性地给世界架起了桥梁——在这种情况下,那些系统程序编写和脚本编写的世界。但是它保护那些在不能通过的壕沟后面的优美的桥梁。
(编程)语言的天性
对那些生产大量程序语言的大型技术企业来说,没有什么特别新。在中央处理器的电脑时代的主流语言都有相似的起源:FORTRAN语言(公式翻译程序语言),从IBM公司出现,COBOL语言(面向商业的通用语言)主要是基于GraceHopper的Flow-matic语言,是为Remington Rand的大型计算机创造的语言。在20世纪90年代,Sun 给我们创造了Java语言,在21世纪,微软公司给了我们C#语言。
事实是,压倒大多数的计算机语言是都大机构,大公司或者大学的产品,因为他们不得不是。
赫兹菲尔德说:“一种新程序语言的诞生要花很多资源,一种语言能成为完全的工具,能建成和使用,是一个长达十年的项目。不能像小公司那样做它。”
尽管有各种障碍,至少从20世纪60年代起,当计算机协会首次把一个通天塔(Babel)印在期刊的封面上时,“有太多的语言”这样的哀歌已经在电脑业回响。而今天,这个哀歌一样的无用。程序员们不可能停止设计新的语言,或者同样分享一种语言,因为,正如Twitter的早期开发者亚历克斯·佩恩,他是“新兴语言”会议的共同创始人,他解释说:“没有诱因,语言的历史充满了标准化的努力,这种努力大错特错了,浪费了大量的时间,也不能真正地产生令任何人都满意的结果。 我认为这将是一个暂时的通天塔。”
我本意不是要忽视黑客Hack, Facebook已经开放的新语言,Facebook什么都没有做当然应该被忽视。但是即使Hack是公开源代码,而且,从根本上来说,是一个广泛使用的PHP语言的变异或扩展,在公司以外还没有培养出更多的热情。Facebook无疑可能会明白那种变化,但是,它不是社交网站正在激烈的推动事,目前,在Facebook公司以外的对Hack语言的最积极反应是“等着瞧”。
在和我谈论这个语言,不止一个的开发者都强烈地感到,程序语言的新浪潮代表着一个赞助他们的那些公司的竞争力。反而,他们指出,每一种新的语言开始都摆脱不了在开发者个人或者小组脑海中的种子。这总是让我烦恼,我们可以做到更好。学习一种新的代码语言要有耐心和努力;开发者们细心地做出选择。佩恩说:“当挑选一种新的语言时,我寻找更多的是其他人都成群结队前往的语言,因为那些人是你打算依靠作为图书馆的人,作为参考资料的人。我想,如果你打算搬到合适的城镇,你就想知道。”
我们能有某种信心说的一件事是这些新的语言是不错的。这些语言帮助程序员生活的更容易一些;这些语言使编程的技术流水线化;这些语言包含着很有前景的新想法;而且,这些语言赢得了公司内外的开发者们的尊重。
因为这些原因,对这波新的程序语言作出帝国主义的比喻,可能是错误的历史比喻。反而,我们正在谈论更像外交政策上称作软实力的东西:通过例子培养有影响力的人或事,外交手腕,你的世界观的延伸和传播。很具体的方式就是,Go语言和Swift语言使建立在这种语言上的公司精髓典型化和具体化:服务器集群与个人设备;开放的网络与应用商店;一个交叉的平台世界与一个企业生活区。在所有的分界线中,它分清了程序语言---是汇编语言还是解释语言?静态与动态可变打字?记忆管理/垃圾收集或者不是?这些也许是今天最重要的事情。
换句话说,对任何担心由大公司孕育的程序语言的真正原因都是不可能的,“OMG他们想统治世界!”那就是,不管他们成长到多么大,他们总是会被依据自己公司的核心精神所成型。
关于程序语言的事就是,一旦他们进入程序员的头脑,你从来都不会真的知道他们会在哪里终止。在20世纪80年代那些创造了面向对象编程语言的狂热者们,也许还不知道在25年后会成为庞大的全球手机生态系统必不可少的编程语言。当Sun公司在1995年发布Java语言,每个人都认为它可能会成为建立浏览器中使影像优美的动起来的小程序的好看的工具,然而,它的命运最多是服务器的外围。Javascript脚本,在刚刚发布后,就紧接着被普遍地忽视了,然而,今天还能使大多数网页运行。
然而,对那些研发者,选择一种语言就好像选择一个国家的国民身份。 你不仅是在购入语法规则和语义学。你在购入经济学和文化,形成你怎么样谋生的规则和形成你希望和梦想的力量。
像他们曾经说在死的语言里,那曾经统治过世界:选择请留心!
Source:Medium