从Go、Swift出发:语言的选择需谨慎

jopen 9年前

从Go、Swift出发:语言的选择需谨慎

        英文原文:My Computer Language is Better than Yours — Medium

        Google 于 2009 年第一次提出了 Go 的构思,非死book 在去年春天引入了 Hack,随后不久 Apple 也发布了其 Swift 语言。

从Go、Swift出发:语言的选择需谨慎

Google GO

        在战争中,胜利者写历史书;在科技中,赢的公司都在写编程语言。互联是建立在开发标准和代码之上,但是社交网络和云计算领域受企业巨头控制,并 且它们开始把自己独一无二的印记烙在数字科技上——这是必然的,就像征服者威廉和他的诺曼人一样,大量新的词汇加入到英语中。他带来许多新事物,如陪审制 度,这些都影响着当地的法律和语言的方式。

        可以确定的是,新的语言给予程序员一些有用的支撑点。Google Go 语言的构建简化了并发运行代码的工作,由于存在并行编程模式,因此这一语言也被设计用来解决多处理器的任务。对于流行的 Web 脚步语言,像 PHP 和 JavaScript,Apple 的 Swift 语言提供给 iPhone 程序员一些简洁性和灵活性。每个语言都有它自己的标志:Swift 是一只风格化的鸟,Go 语言则是一只拗脚的地鼠。

        Ken Thompson、 Rob Pike 和 Robert Griesemer 是 Google 的三位编码大师,于 2009 年半开玩笑的提出了 Go 的构思。像 C++ 和 Java 这些广泛使用的编程语言是迟钝的,尤其是面对 Google 那种大规模的项目部署时。每次添加或改变一些东西时候,你都需要等待编译器将代码转换为机器可读的二进制版本。

        Rob Pike 说:“这个等待过程要 45 分钟,我认为这是痛苦的。当需要等待那么长时间时,你有很多时间可以考虑,你需要怎么做可以更好。”

        设计编程语言在于权衡——对于程序员容易,对于机器最适合

        创建运行快的代码要求程序员付出更多的努力。人们编写运行迅速的代码需要花费多少时间和精力呢?另一个主要权衡在于直接访问机器时语言提供的内 存数量。不仅在这里,在其它地方也一样,语言发明者必须选择:知道他们可能会搞砸时,你为程序员提供多少自由?你为他们提供多少措施来缓解他们的失误?

        语言设计的任务是庄严的、正式的、宏伟的、充满了难题和矛盾。这里没有正确的答案,只有不同的选择,以适应不断变化的硬件、多变的用户和挑剔的程序员。

        Go 语言的创造者有足够的经验去做这些选择,Ken Thompson 创建了 Unix,他和他的同伴 Pike(贝尔实验室老将)共同设计了字符编码的风格,被称为 UTF-8,现如今大多数 Web 会使用。所以他们知道小的决策也会有巨大的影响。现在增加的每一条规则,可能就意味着在未来极多的按键需要程序员去操作。每一条规则的遗漏可能意味着无数 的崩溃。

        例如,编程语言通常使用分号来分隔语句,使用括号将相关语句组织在一起。典型的如“Hello,World”C语言程序:

main ()  {  printf (“hello world”);  }

        Go 的创造者认为括号是至关重要的。有些语言(尤其是 Python)把这放到了一边,允许程序员使用缩进(空格)或“隐形的字符”来告诉人和机器代码的位置。Go 团队认为这是一个“深刻的错误”,括号意味着程序员可以明确不含糊的告诉计算机如何在很大一块区域组合代码。在一次与 Sergey Brin 会面上,Google 的创始人提出 Go 的设计人员使用方括号,而不是花括号,节约开发者无数趟使用“Shift”键。

        在 2009 年 12 月份,Go 决定停止要求程序员以分号结束语句。分号用于解析器——把项目分解成块(相关代码组成一块)的幕后工具,目前的 FAQ 解释道:“我们想尽可能的消除它,从此当你递送你代码到解析器的时候,机器将注入分号。”

        Go 清除分号减轻了程序员的眼睛疲劳,但是程序员需要更严格的部署花括号,否则分号会注入到错误的地方。

        这些选择并不是没有争议的,一个批评家在 Pike 的讲座上抱怨道:“他们通过冗余的花括号破坏了语言。”语言也可以被设计的很容易,仅仅使用空格行使花括号的角色来阻断代码的不同部分。Google 的 Andrew Gerrand 回应道:“每天都有一定规模不可思议的倒霉事发生。意思是有人会偷偷的把一些看不见的符号放入代码库中,导致一个微妙的 Bug。这在 Google 的 Python 程序中已经发生了不止一次。”

        然而对于那些在软件论坛争论细微差别的程序员来讲,“任性的”语法也会使他们“醉了”。

        和我们所说的语言不同,程序员称之为自然语言。编程语言是为特别目的和用途精心编制的。Go,正如 Pike 解释的那样,它是由 Google 设计的用来解决 Google 问题。Google 存在大的问题......我们需要一种语言,可以让我们更容易的完成我们的工作——编写服务软件。

        Google 在云服务中运行它自己的全球性超级计算机,这种计算恰恰使 Go 能够得到最佳化的使用。但是 Google 并没有从销售软件中获得一分钱。并且 Go 已经是一种免费的、开源的项目,这使得它迅速的进入了其他装备的技术库。Redmonk 咨询公司的一名分析师说:“它成为云基础设施的新兴语言。”

        Go 已经逐渐的流行起来。例如,Dropbox 已经从 Python 转移了大部分的后端代码到 Go。Automattic,一家运营 Wordpress.com 的公司,也使用了 Go,虽然 WordPress 本身一直使用 PHP 脚本语言。Automattic 开发者 Demitrious Kelly 说:“这些天有十几个新的框架和方法摆在那,你必须要问自己,它比我们拥有的要好吗?但是这本身就是一个复杂的问题,要好到什么程度?它可以让我们做到什 么是我们以前做不到的事情?值得吗?”Kelly 称,在众多测试当中 Go 的表现不错,部分原因是该语言比较小,他说:“Go 语言很容易在一个星期内就上手。”

        鉴于 Go 的设计主要是针对 Google 特定的问题,语法的选择,即分号和花括号。这个问题并不那么简单,需要追求细节,还要有热情。愿意无视传统的编程给这个世界带来新的语言。可能最终推动语言的采用的就是程序员认真注意日常的编码——程序员称之为“痛点”

        Swift 的起源

        每个编程政权都有这样的痛点,但是迅速崛起的 iOS 给了开发者多于常规的份额。直到今年夏天 Swift 语言的出现为止,如果你想为 iOS 写一个程序,你必须使用 Objective C 语言。在 80 年代,Steve Jobs 就已经采用了 Objective C,并且当 Steve Jobs 重返 Apple 之后,该语言逐渐成为 Mac OSX 的主力工具。

        现在开发者说一个语言也就透露了他的年纪。编写 Mac 操作系统老将 Andy Hertzfeld 说:“当看到 Swift 公告的时候我非常激动。因为我一直鄙视 Objective C,我喜欢其背后的原则,但是讨厌其语法,我从来没能够真正的享受编程。”

        Apple 将其下一代产品、编程语言项目委托给一位名叫 Chris Lattner 的计算机科学家,LLVM 项目的主要发起人与作者之一。LLVM 是一个开源项目,其核心库提供了与编译器相关的支持,可以在不同的平台上运行(包括 Apple 和 Google 在内,都广泛的使用它)。在 2005 年加入 Apple 后,Chris Lattner 继续 LLVM 项目以及相关的工作,随后在大众视野里消失了几年,去年 6 月份,在 Apple 全球开发者大会上,其携带 Swift 出现在大家的面前。

        Swift 旨在成为“第一款工业级质量的系统编程语言!”换句话说,Swift 是有前途的,你将能够不用费力就可写出运行迅速的代码。这赢得了大批 iOS 开发者和旁观者的欢呼。 Hertzfeld 说::“做得好,它缓解了每个人巨大的痛点。对于 iOS 开发者来说不去追求 Swift 的顶端是愚蠢的。”

        如果你“签约”了 Swift,意味着你购买了 Apple 的整个领域:你需要通过 Apple 开发和销售你的程序;你的程序将运行在 Apple 机器上;如果你想在其它地方运行的话,你需要使用其它语言重新写一遍;你的命运将和 Apple 密不可分。

        Hertzfeld 说:“你必须提交到这个“有围墙的花园”,所以他抵制了用 Swift 工作的诱惑。不过如果他们实现开源,或者对跨平台有一点点兴趣的话,我可能会接受 Swift 工作。”

        开源版本的 Swift 意味着开发者能够找到一种方法快速的将程序移植到不同的平台,并且这也能保证在未来,当 Apple 失去了 Swift 继续下去的兴趣,该语言还是有未来的。那些曾逗留在“有围墙的花园”外围的开发者往往非常关心这个问题。Apple 对于开源并不完全过敏,虽然它似乎决心要抓住世界范围内 iOS 的控制权。在 Swift 公布不久后,LLVM 项目里的开发者开始就 Swift“隔绝自然”问题纠缠于 Apple 和 Lattner,Lattner 回应说:

伙伴们,你的推测仅仅是——投机。我们还没有讨论过这个,因为我们有大量的工作去应对大量的反馈,并要在今秋发布 1.0 版本之前落实大量的事情(如访问控制)。你可以想象我们当中有很多人希望它开源,并成为 LLVM 的一部分,但是讨论尚未发生,并且短时间内也不会出现。

        Swift 的出现并没有 Go 时间长,在任何情况下,其未来在 Apple 领域是安全的,如果 Apple 说 Swift 是十亿 iOS 设备的未来,那么它就是。就像一位波特兰独立的 iOS 开发者 David Wheeler 一样,人们会采用它,因为从长远看来,他们别无选择,同时它也有意义。Wheeler 说 Swift 迅速的将他“拿下”了,他以为 Apple 将继续修补 Objective C,“我想知道它现在去哪了?”Wheeler 说。

        语言本能

        大型计算机时代的主流语言有相似的起源:来自 IBM 的 FORTRAN,以及 COBOL 在很大程度上是基于 Grace Hopper 的 Flow-matic,而这个是为 Remington Rand 公司的 Unicac 创建的。在 1990 年,Sun 创建了 Java,2000 年 Microsoft 创建了C#。

        事实上,大多数的语言是大型机构、企业或学校的产物。

        Hertzfeld 说:“创建一种新的编程语言需要花费大量的资源。这是一个长达十年的项目去让新的语言完全用工具加工、建立和使用,小公司做不到这点。”

        尽管有困难,但是悲哀的是自 1960 年以来,计算机行业里有太多的语言存在重复的部分。今天的悲哀是无用的,程序员不太可能停止设计新的语言,或者同意去分享,因为如早期开发者 Alex Payne 说的那样:没有激励,语言的历史充斥着标准化的努力。这是非常错误的,浪费了大量的时间,却没有产出一个让任何人都满意的结果。

        这么说并不意味着忽视 非死book 开发的新语言 Hack,尽管 Hack 是开放源代码的,但是本质上 PHP 语言的变体或扩展。并没有受到公司外部的人追捧。毫无疑问,非死book 希望看到变化,但是它并不是社交网络积极推动的东西。这些天对于 非死book 的 Hack 的反应就是“观望”。

        开发者指出,每一个新的语言开始作为一个摆脱不掉的种子存在于个人或小组的大脑中,这一直困扰着我。我们可以做的更高。无论如何,需要有耐心和 努力去学习一个新的语言;开发者要仔细选择。Payne 说:“当选用一个新的语言时,我会跟随其他人的东西,因为这些人和你一样依赖于图书馆和文档,我想你希望知道你是否进入了一个正确的‘小镇’。”

        有一点我们可以有信心的说,新语言是好的,它们简化了程序员的生活;简化了编程的工艺;它们融入了新的有前途的思想;它们赢得了包括公司内外部开发者的尊重。

        因为这些原因,霸权主义可能是一个错误的历史对照来制造新编程语言潮流。相反,我们讨论的这些更像是称为软实力的外交政策类型:Go 和 Swift 以特定方式体现它们公司的精髓。服务器 VS 个人设备;开放 Web VS 应用商店;一个跨平台的世界 VS 一个公司。所有区分编程语言的分歧——编译或解释?静态 VS 动态变量类型?内存管理/垃圾回收?在今天这些可能都是很重要的。

        换句话说,任何人担心企业发展编程语言的真正原因可能不是“OMG,他们想要接管世界!”相反,他们担心的原因是不管他们成长的多大,他们总会受到根源语言的约束。

        关于编程语言,一旦它们占领程序员的“头脑”,那么你永远不会知道它们最终会去哪里。在 80 年代创造 Objective C 的面向对象编程爱好者,他们可能不知道该语言在 25 年以后会变成一个巨大的全球生态系统移动设备所必要的编程语言。当 Sun 于 1995 年推出 Java 时,每个人都认为它将是一个用于构建浏览器小程序的好工具,然而它的命运走向了服务器端。同时发布的 Javascript 被广泛的遗忘,在今天却让很多 Web“移动”。

        对于开发者来说,选择一个语言就像选择一个国家的国籍,你不仅仅购买语法和语义,你也购买了经济和文化,以及你怎样获得生计和力量的规则。就像他们常说的:为了避免一个“死”语言控制了世界,购买需要谨慎。

来自: CSDN