Google Go vs Objective C

WordHerd | 2018年1月16日 | 阅读时间 17 分钟
分享这篇文章

1. 导言

“语言对于传统演化的重要性在于:人类在语言中构建了一个与相反的世界相分离的世界,这个世界之所以能如此牢固地确立,是因为它能够支撑住世界其余部分,使之摆脱了自身的束缚,并能掌握这个世界。只要人类长期以来一直相信事物观念和名称的真实性,那么他就已将这种令他超越动物的喜悦归属于自己:他实际上认为语言是他掌握了世界知识的手段。.”弗雷德里克·尼采。”

每个笔记本电脑程序员对自己的编程语言的评价都不尽相同,但大多数程序员都认为自己的编程语言是最棒的。常见的特点包括语法易于理解、运行时间更短、编译速度更快,此外还有一些我们根据自己的应用需要而希望具备的更明确的功能。这些都是编程语言之所以如此多的原因,而且每天都有新的编程语言问世。尽管对语言设计有着浓厚的兴趣和关注,但许多现代编程语言并不总能提供语言设计上的创新——例如微软和苹果公司只提供其不同版本。

在计算机科学领域的发展史上,C语言曾一度占据主导地位,成为许多其他成功编程语言的源头。在这段时间里,C语言的开发者们都非常关注C语言的未来发展,并将其作为他们的研究课题。然而,随着C语言的诞生,计算机科学领域发生了巨大的变化。计算机系统使用多核处理器后的速度提高了数千倍,网络和互联网接入也变得更加普遍,设备也越来越小巧,移动计算也逐渐成为主流。在这个时代,我们需要一种能够让我们的生活更美好、更便捷的语言。

根据 TIOBE 指数,Go 和目标 C 在 2009 年曾位列增长最快的语言之列,而 Go 在同一年也被授予“年度编程语言”称号。 TIOBE 通过索引的方式每月发布结果。索引数据来源于向授权程序员、培训机构和软件发行商提供链接的信息。这些数据通过谷歌、必应、雅虎、维基百科和 YouTube 的搜索引擎收集而来。对于目标 C 而言,其结果更为可预测,因为它是 iPhone 和 Mac 的语言,而 Apple 也正在大力开发该语言。然而,由于 Go 尚未推出超过一年,因此这一结果会更加引人注目。

2. 一点历史

Go 的臭名昭著的母版 Google 统治了搜索、电子邮件等领域。因此,推出一款全新的编程语言并不令人意外!就像许多 Google 的开源项目一样,Go 最初只是作为兼职项目进行开发,而 Google 则将其提供给员工用于实验;后来,它逐渐发展成为更具规模的项目。 Robert Griesemer、Rob Pike 和 Ken Thompson 共同创立了 Go,并在 2009 年 11 月正式推出了 Go 的设计版本,随后在 Linux 和 Mac OS 平台上推出了实现版本。 Google 将 Go 采用 BSD 风格的许可证,希望程序员社区能够发展并构建 Go,使其成为软件开发的更可行的选择。与此同时, Go 仍然处于非常年轻且处于实验阶段。甚至 Google 也目前尚未大规模部署 Go 来开发应用程序。虽然托管代码的网站使用的是使用 Go 构建的服务器,但该项目的最初目标是吸引开发人员,并围绕 Go 构建一个社区。尽管其地位尚不确定,但 Go 已经支持了许多您通常会期望从系统语言中获得的常用工具。

目标 C 的历史更为悠久。如今,它已完全应用于苹果公司的 Mac OS 和 iPhone 系统。目标 C 是苹果公司 COCOA API 的首个语言。目标 C 是 Brad Cox 和 Tom Love 在 80 年代初在他们的公司 StepStone 创作的。1986 年,Cox 在其著作《“目标 C”:开发指南》中首次公布了目标 C 的基本描述。“面向对象编程:一种演进方法“从那时起,目标C就一直以多种语言的特色而著称,而如今它成了史蒂夫·乔布斯的替代语言。

设计和编程语言的成功与失败都有许多因素的贡献。在这篇文章中,我试图为这两个长期以来被视为必不可少的语言提供一个合理的比较。

三. 基本可比性

如今,世界充满了编程语言,它们正逐渐演变成更普遍且用途更广的语言;然而,它们仍然各有其专长和特点,每个语言都有其自身的缺点和优点。

语言通常可以分为许多不同的类别。下文所列出的并非所有可能的相似功能的全称列表。与所选的两个编程语言相比,被认为更为重要的选项已被选定,并进行了快速归纳。每一份都给了。

三.1 范式

Goal-C 是一个重要的面向对象语言,这意味着对象可以改变状态。此外,它还提供了一个与 C 语言和许多其他关键词汇完全相同的语法结构,从而实现了真正的面向对象语言的全部功能。当然,面向对象应用程序都是围绕对象构建的,因此在 Goal-C 中,对象就是一切的根基。一个类别用于提供可互换的对象,称为类别状态。课程用于封装属于同一类的信息和策略。策略是目标-C 应用于信息的操作,并通过其消息选择器进行识别。目标-C 支持多态性,这意味着多个课程可以使用相同的名称。此外,单继承也被用于代码重用。实现多态性的最接近的方法是创建带有事件变量的类别,这些变量是指向其他对象的引用。不过,Goal-C 理念认为程序员不希望出现过多的继承机制,因此会将其摒弃。

在 Go 中,问题稍微有些不同。 Go 的设计者选择了一种消息传递模式来实现并发编程。该语言提供了 Goroutines 和 Channels 这两个主要构建体来实现这一模式。在设计 FAQ 中,Google 写道,Go 不是面向对象语言!虽然 Go 拥有类型和策略,并允许我们模拟面向对象编程模式,但没有任何类型层次结构。缺乏类型层次结构使得 Go 中的“对象”比 Goal C 中的对象更轻巧。 Go 使用了一种革命性的方法处理对象,程序员无需担心庞大的对象树。由于 Go 不是非常面向对象语言,程序员可以按照自己的意愿解决这个问题,同时仍然能享受面向对象的功能。

我实际上无法接受任何没有层次式继承机制的面向对象语言。然而,对于那些确实具备这种机制的人来说,它似乎为灵活性和重用提供了更大的可能性。Go中缺乏继承机制确实令人感到好奇!就我所知,继承一直以来都被教导为面向对象编程的精华所在。事实上,继承并不是面向对象编程中唯一可行的重复使用机制。组合主义无疑是一种更强大的共享习惯机制,而非继承机制。

面向对象编程逐渐成为受到高度重视的领域,尤其是在大型企业中,因为它为他们开发软件的方式提供了合适的策略,并能增加他们利用一批普通程序员组建团队的项目成功的几率。面向对象编程实现了这些程序员的典型编程方式,并防止了人们过度重复代码的行为。其优点在于,由此产生的代码具有极高的重复性。对于大型公司来说,这个价格并不算过高,因为他们的软件无论如何都会包含大量重复内容。

3.2 语法

目标 C 是普通 ANSI C 的扩展;现有的 C 应用程序可以根据需要进行调整,以便利用这些软件框架,而不会影响到其最初的开发过程。在目标 C 中,程序员在目标 C 内运行时,可以获得 C 的全部优势。程序员可以选择采用面向对象的方法来执行一些操作,例如定义一个新的类;或者,可以继续使用程序化编程方式。目标 C 被普遍认为是一种 C 和 Smalltalk 之间的混合形式。学习曲线的一个缺点可能是,在进入目标 C 领域之前,需要先掌握 C 的编程基础知识;C 与语法和面向对象编程一样,通常都会给新手程序员带来更长且更具挑战性的学习曲线,而目标 C 也无一例外。

Go 也是 C 语言家族的一员,但我感觉 Go 能够打破这种编码模式,并以某种方式使其变得完全不同。与 Go C 语言相比,声明的顺序是倒过来的。在 C 语言中,变量的概念被当作表达式来声明,表示其类型,就像 Primary 语言那样,这对我来说是一个不错的想法。

Go中:a、b *int;

我发现 Go 是一种更接近人类纯文本的语言,例如这个语句:“变量 a 是整数”可以被证明为:

变量 a 是 int 类型。

这更清晰、更聪明,而且更常见。

Go 还支持多个任务,这些任务可以并行执行。

i, j = j, i // 交换 i 和 j。

Go 中的管理语句不局限于括号。而最常见的管理语句(if)则会在 Go C 中采用“if(self){” 的形式,而在许多其他OO语言中则采用“if(self){”。但在 Go 中,它将采用另一种形式:

如果 self 是

Go 的另一个特点是,使用分号通常是不合适的。不过,您可以酌情在 Go 的任何语句中使用分号结尾。实际上,分号用于解析器,而 Google 希望尽可能消除它们。事实上,没有任何语句需要使用分号,我觉得这样比较方便。

Go 是像 C 一样编译语言。目前有两种 Go 编译器可供使用,一种针对 x86 平台,另一种针对 AMD。Go 的编译速度非常快。我第一次尝试它(没有指定或正确的数据量),它实在是太快了!我对编程语言的经验有限,而且主要侧重于面向对象语言(如 Java),所以我从未见过如此快的速度!Go 的一个主要承诺目标是能够非常快速地编译程序。根据官方 Go 演示文稿的说法, 视频, Go 的效率在 10%-20% 左右,但我认为除非在不久的将来能获得一些效率基准,否则这并不值得信赖。

三.三.例外与泛型

目标 C 只有在程序员决定在其自定义的数组类中使用 C++ 模板的情况下,才具备通用排序功能。目标 C 使用动态类型,这意味着运行时不会关心对象的类型,因为所有对象都可以接收消息。当程序员将对象赋给内置数组时,它们就被简单地处理为具有相同类型的数据。与 C++ 一样,目标 C 语言也有异常处理语法。

Go 的简洁系统不支持通用类型。至少目前为止,它们并不认为这些类型是强制性的。通用类型确实方便,但它们在类型系统和运行时会产生高昂的开销,而 Go 可不接受这种做法!与通用类型一样,异常也是一个开放的问题。Go 的异常处理方式虽然革命性和实用性都很强,但对许多程序员来说却几乎是难以接受的。谷歌的代码库并不支持异常,因此异常也是一个类似的故事,而且从语言本身来看,它们一直被忽视了。相反,程序员现在可以使用名称中的多个返回值来处理错误。由于 Go 是垃圾回收的,因此与 C++ 相比,不存在异常的麻烦,但仍然存在一些需要清理的文件处理或外部资源的处理等情况。许多程序员认为,在现代编程语言中,异常是完全强制性的。不过,我还是喜欢这种没有例外的情况,因为我觉得在大多数语言中处理异常的处理方式都很糟糕。比如在 Go 这样的语言中,如果函数可以返回多个值,程序员就可以像返回结果和状态代码一样,处理错误,并通过状态代码来处理错误。

第三、第四类:有益的程序

与基于 C 的其他面向对象语言相比,Goal C 具有更高的动态性。如今,程序员倾向于选择目标 C 等动态类型语言。缺点在于编译时的数据量较少。这种动态性意味着我们可以向未在接口中定义的对象发送消息。编译器会在运行时使用对象自身的详细信息进行处理。在编译时可能需要做出的选择,会在运行时进行延迟。这使得 Goal C 应用具有更高的灵活性和性能。

动态类型语言存在一个潜在的缺点:运行时会出现无穷无尽的错误,这可能会让人感到不舒服且复杂。然而,Goal-C允许程序员在运行时选择指定对象类别,在这种情况下编译器会采用强类型方法。Goal-C会在运行时做出很多选择。对于诸如集合类的应用而言,弱类型指针的使用更为常见,因为在这种情况下群体的对象的确切类型尚不清楚。对于习惯于强类型语言的程序员来说,使用弱类型会导致问题,因此有些人可能会放弃其灵活性和动态性。与此同时,由于Goal-C的动态调度使其运行速度比静态语言慢得多,许多开发人员认为这种额外的灵活性确实是值得的,而且他们认为大多数桌面应用程序很少会使用超过现代 CPU 10% 的资源。我不认同上述关于我们仅使用 10% CPU 的说法。所以?!这不是件好事,因为旨在提高效率和性能的简约主义方法正被那些过度依赖 CPU 能力的浪费应用所取代,而我个人更倾向于使用更静态的检查方式。

Go 进一步尝试应对这种日益增长的动态类型语言趋势,并提供了一种革命性的类型系统。最终,Go 为程序员提供了与 Python 风格类似的鸭式类型系统。Go 的类型系统确实非常独特:它不包含继承,也不需要为类型之间的关系进行定义。相反,程序员可以定义结构类型,然后为处理这些类型创建策略。与 Go C 类似,程序员还可以定义接口。Go 是严格类型的,但好的一点在于,它并不那么严格!程序员无需明确声明变量的类型。相反,Go 在首次将值赋给变量时,会自动将类型赋给未类型化的变量。此外,在底层还存在动态类型数据,应用程序可以利用这些数据执行一些有趣的操作。

三.5. 垃圾种类繁多

如今,拥有垃圾收集系统是保护所有东西保持整洁和高效的必备条件之一。为此,我们推出了目标 C 2.0 版本。对于那些非常熟悉 Java 的 iPhone 和 Mac 开发者来说,这是一个非常好的消息。目标 C 2.0 垃圾收集系统确实简化了工作流程,但仍要求程序员在处理内存管理时要格外小心。目标 C 2.0 垃圾收集系统是一种保守的垃圾收集系统,这意味着不仅 C 语言的强大功能可以被开发人员完全利用,而且 C++ 代码和库的集成能力也得以保留。程序员可以使用目标 C 来构建绝大多数实用程序,从而让垃圾收集系统能够处理内存和所需位置的事务,这样我们就可以充分利用 C 和 C++ 的强大功能。

在 Go 中,作为并发和多线程编程,内存管理可能非常困难,因为对象可以跨线程移动,而且一旦我们需要消除它们,就变得非常困难地确保它们能够安全地释放。自动垃圾收集可以缓解并发编程的难度。对于像我这样已经习惯于高级安全垃圾收集语言多年的个人来说,这只是乏味的教程。但在低级程序编程语言的世界中,这种改变却是革命性的,尤其是在能够实现指定性能的情况下。 Go 的重点在于速度,而垃圾收集便是实现这一性能的成本。然而,垃圾收集技术的进步使得它能够实现无显著延迟,并使 Google 将其集成到 Go 中成为可能。

四. 未来与结论

这两门语言的普及之所以会不断扩大,一定是有其原因的。或许其背后逻辑是:随着微软的地位逐渐下滑,苹果和谷歌正在迅速凭借各自独特的生态系统争夺市场份额。Go 是 Google 推出的语言,因此在认知度、声誉和技术保护方面拥有明显的优势;而 Goal C 则由 Steve Job 的帝国所支撑。

Goal C 拥有 Mac OS 自带的 Cocoa 库的优势。Mac OS X 和 iPhone 是该语言最重要的实现者,它们之间的差距非常明显。不久前,iPhone 上的函数库模式非常庞大,而且通过简单的编程项目就能轻松赚钱的潜力也相当高。我认为,这种非常基本的人类现实将极大地推动 Goal C 的未来发展。因为越多开发者使用该语言并在多种条件下进行测试,该语言的质量和功能就越优秀,越强大。

Go 确实是一个引人注目的语言。凭借谷歌的支持和资源,程序员们可以放心,即使Go没有那么光鲜亮丽,它也会拥有某种未来——至少不会太糟糕!我觉得Go确实有潜力,但可能还需要一段时间——而不是很短的时间——才能吸引开发者放弃现有的平台,选择Go。尽管Go还是个小型语言,但它仍处于实验阶段,不适合用于生产环境。目前还没有集成IDE,而且代码示例也很少。Go还不够完整,他们只发布了他们所掌握的内容,并鼓励开发者贡献。作为由谷歌支持的开源项目,我觉得Go很快就会开发出IDE和生态系统,因为正如之前在TIOBE指数上提到的那样,它似乎已经获得了非常好的评价。但很难预测生态系统的规模会是多少。如果Go能够建立起一个生态系统,事情就会变得非常顺利。我觉得应该以后为 Windows 操作系统提供支持,并将其与 Eclipse IDE 集成,以便进一步提升其在程序员中的普及度。

Apple 和 Goal C 强调面向对象编程,而该语言的整个文档都是面向对象编程的。因此,从这个意义上讲,Goal C 和 Go 有很大的区别。然而,与其他一些人类语言或机器语言一样,Goal C 和 Go 确实具有一定的相似之处,我试图根据一定的标准对两者进行比较。不过,要真正将这两者进行比较,需要花费很长的时间。 Go 更年轻,充满不确定性。这使得这两者之间的比较变得有些困难,或者正如我的程序员朋友所说:“难以想象”。 Go 需要得到独立评审员的正确分析,才能变得更具可比性,但我相信我们不久就会更多地了解这两者。

准备好迁移您的网站了吗?

首先进行免费的无义务网站评估。我们将对您的项目进行评估,推荐合适的平台,并为您提供明确的报价。

保证零数据丢失
完整 SEO 保留与重定向映射
准时且按预算交付
专业化的平台专家,而非泛泛的专家

请告诉我们您的网站信息

"*"*” 表示必填字段

此字段用于验证目的,不应更改。
姓名*