出自:http://www.csdn.net/article/2014-12-09/2823025

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


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

可以确定的是,新的语言给予程序员一些有用的支撑点。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语言程序:

[cpp] view plain copy
  1. main()
  2. {
  3. printf(“helloworld”);
  4. }

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说的那样:没有激励,语言的历史充斥着标准化的努力。这是非常错误的,浪费了大量的时间,却没有产出一个让任何人都满意的结果。

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

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

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

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

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

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

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

Go、Swift的更多相关文章

  1. ios – 如何使用Objective C类中的多个参数调用Swift函数?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  2. ios – Swift 4添加手势:覆盖vs @objc

    我想在我的视图中添加一个手势,如下所示:但是,在Swift4中,我的编译器给出了以下错误:建议添加@objc以将此实例方法公开给Objective-C.实现此目的的另一个选项将覆盖touchesBegan()函数并使用它来处理点击.我试图以“Swift”的方式做到这一点,而不必带入Obj-C.有没有纯粹的Swift方式来添加这个轻击手势而不使用@objc?

  3. ios – 将视频分享到Facebook

    我正在编写一个简单的测试应用程序,用于将视频从iOS上传到Facebook.由于FacebookSDK的所有文档都在Objective-C中,因此我发现很难在线找到有关如何使用Swift执行此操作的示例/教程.到目前为止我有这个在我的UI上放置一个共享按钮,但它看起来已禁用,从我读到的这是因为没有内容设置,但我看不出这是怎么可能的.我的getVideoURL()函数返回一个NSURL,它肯定包含视

  4. ios – 以编程方式在Swift中添加联系人

    我想在Swift中以编程方式添加联系人.我发现了一些Objective-C示例,但我没有让它们工作,甚至在Objective-C中也没有.我不希望这涉及到AddressBookUI,因为我想从我自己的UI中获取值.解决方法这是在Swift中添加联系人的快速方法.我在我的iPhone5iOS7.1上验证了它,因为我发现模拟器并不总是与我的手机对AB的东西相同.您可以添加一个按钮并指向此方法:顺便说一下–它假设你已经分配了一个地址簿var,你可以通过覆盖viewDidAppear来打开视图.它也会执行安全提示

  5. ios – 在AFNetworking中设置用户代理

    我们的iOS应用程序最近被Apple拒绝,因为它无法与我们的服务器api建立有效连接.我们使用特殊格式的用户代理来注册设备令牌等.如果用户代理不适合我们的sheme,则api会阻止请求.这一切都很好地在模拟器和真实设备上测试应用程序.用户代理设置正确,api调用工作正常.当Apple测试应用程序时,他们拒绝了它,因为应用程序无法连接到api.当我们检查服务器日志文件时,我们注意到,Apple测试人

  6. ios – 将iphone应用程序重定向到苹果商店

    我有一个iPhone应用程序,当有可用的升级时,我想提示用户升级,如果他们点击升级,我想将它们重定向到苹果商店.这是怎么做到的?

  7. ios – 如何从Apple Watch调用iPhone上定义的方法

    有没有办法从Watchkit扩展中调用iPhone上的类中定义的方法?根据我的理解,目前在Watchkit和iPhone之间进行本地通信的方法之一是使用NSUserDefaults,但还有其他方法吗?

  8. ios – Ad-hoc应用程序始终无法安装

    所以我在使用ios5的ipad1上安装ad-hoc分发应用程序时遇到问题.我在其他ipads中安装时没有这个问题…

  9. ios – 无法识别的选择器发送到实例NSTimer Swift

    解决方法让updateTime成为一个类方法.如果它是在一个纯粹的Swift类中,你需要在@objc前面说明该方法的声明,如:

  10. Xcode 4.5:没有iphoneos的“com.apple.product-type.application”产品类型

    我刚刚将Xcode升级到4.5版,但是我现在在尝试在iPhone上运行时遇到此错误:它在模拟器上工作正常,它曾用于4.4版本.解决方法您可能从XCode规范中丢失了应用程序部分退出XCode并转到(对于MacAppStore中的Xcode):/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Develope

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部