介绍
自从我参与DevOps和大数据以来,我一直在使用两种出色的但完全不同的编程语言:Go和Scala。
Scala是一种较旧且更成熟的编程语言,已在并发编程和大数据处理等领域找到了自己的定位。 另一方面,Go是Google为克服C ++的批评而创建的一种更新,更简单的语言。 设计考虑多核处理器的语言。
两者都是出色的语言,可以为并发应用程序和流处理实现出色的性能,但是它们的设计却大不相同。在本文中,我将尝试为您简要介绍这两种语言,它们的优缺点,并回顾一些实际的用词情况,在这些情况下,我们将推荐一种语言而不是另一种语言。
简而言之Scala
Scala是一种由学者创建的编程语言,它是在JVM上运行的Java的第一种替代方法。 它定义为:
Scala是一种现代的多范式编程语言,旨在以简洁,优雅且类型安全的方式表达常见的编程模式。[1]
Scala既面向功能又面向对象,提供了两全其美的优势。 它具有定义程序的灵活方式,并且由您决定如何描述它们:从纯函数式编程到纯面向对象的编程。
像Java一样,Scala是面向对象的:
从每个值都是对象的意义上讲,Scala是一种纯面向对象的语言。对象的类型和行为通过类和特征来描述。[1]
它还为功能编程和强大的静态类型系统提供支持。 与Java不同,Scala具有功能编程语言的许多功能,例如Scheme,Standard ML和Haskell,包括currying,类型推断,不变性,惰性评估和模式匹配。 它还具有一个高级类型系统,该系统支持代数数据类型,协方差和对数,高阶类型(但不包括高阶类型)和匿名类型。
从每个功能都是一个值的意义上讲,Scala也是一种功能语言。 Scala提供了用于定义匿名函数的轻量级语法,它支持高阶函数,它允许嵌套函数,并支持currying。[1]
Java中不存在的Scala的其他功能包括运算符重载,可选参数,命名参数和原始字符串。 相反,Scala中没有的Java功能就是检查异常,事实证明这是有争议的。
在其他用例中,Scala在大数据中被大量使用。 诸如Twitter之类的公司转移到Scala,特别是因为更好的并发支持。 Scala功能强大,但很难学习,并且仍然存在与Java的兼容性问题。
Scala使用的两个关键驱动因素是基于用于并行编程的actor系统的Akka框架和用于大数据的Spark处理引擎。 由于其学术性质,与Akka或Spark以外的其他语言相比,Scala在实际单词中没有发现太多用法。 尽管它在金融机构中大量使用。
Scala 的优点
Scala 的缺点
用例
简而言之
Go是另一种野兽。与Scala相比,它不那么优雅,功能强大或简洁,但它是为特定目的而构建的,并且做得非常好。
Go由Google创建,并且在语法上与C类似。它的目标是通过添加内存安全性,垃圾回收,结构化类型来克服C ++中存在的不安全操作。它非常容易学习和使用。它是为多核计算机而构建的,以最大程度地提高并发程序的并行性。它使用称为Go Routines的非常轻量级的绿色线程进行并发编程。
Go可以快速编译为机器代码,但具有垃圾回收的便利性和运行时反射的功能。这是一种快速的,静态类型的编译语言,感觉就像是一种动态类型的解释语言。[2]
Go很小,但是它涵盖了许多用例,例如微服务,流处理,CLI等。 Golang为在不同平台上生成二进制文件提供了出色的支持,而无需在目标上安装Go。 由于二进制文件小而有效,因此非常适合使用Containers打包的云本机应用程序。 您的应用程序容器可以打包到一个很小的容器(〜5–10MB)中,只需几秒钟即可部署,这使其成为比JVM语言更好的微服务选择。 有关更多信息,请查看我有关在Kubernetes中部署Go Microservices的文章。
Go 的优点
Go 的缺点
用例
Scala vs Go
Scala 编程语言是强类型,具有垃圾回收器,它们安全,高度并发,并且每秒可以处理数百万条记录。
对于流处理,Go更易于使用,但依赖于发布/订阅系统(例如Kafka)和NoSQL数据库(例如Cassandra)。 Akka本身就是一头野兽,可以自己管理大量请求而没有任何依赖关系,它还提供了更多这样的背压。
对于Web应用程序,Play框架更适合有状态的Web应用程序或寿命长的应用程序,在这些应用程序中,JVM有足够的时间来优化应用程序。 Scala非常适合迷你服务或整体应用。 如果您需要与Akka集成,这也是一个不错的选择。 另一方面,GO更适合微服务,云本机应用程序和无服务器功能。 对于云中的无状态API,我会使用GO,因为它更便宜,更容易。
Go提供了强大的支持gRPC为内部微服务提供了绝佳的选择,这些微服务可以以流的方式快速使用。
对于大数据,Scala或Python是最佳选择。 GO在大数据世界中仍处于起步阶段。
通常,Go的运行和租赁成本较低。 因此,如果成本是一个问题,请研究GO。 另一方面,Scala开发人员往往是非常好的工程师,这也为组织带来了价值。
随着应用程序的增长,GO源代码将变得越来越难以维护,因此我不建议将其作为整体使用,对于更稳定,规模更大的项目,Scala是更好的选择,尤其是对于更传统的企业。
性能
这是一个棘手的问题,如果您在Google vs GO的性能方面会找到几篇文章,并且根据测试结果会有所不同。 刚开始,GO似乎在简单的用例上表现更好,但在实际情况下,Scala以及特别是Play Framework确实赶上了JIT JVM优化,该优化在运行时会调整字节码添加优化。
对于微服务,无状态应用程序和容器化应用程序,GO将更快,更轻量,这是一个巨大的优势。 通常,如果成本对您来说很重要,那么GO将占上风。 对于复杂的应用程序,整体式状态处理,Scala是更好的选择。
> GO vs Play REST Get Performance, source: https://medium.com/ymedialabs-innovation/rest-api-performance-comparison-between-golang-and-play-991a8f4040de
对于流处理,这是相同的故事。 Akka功能强大且优雅,具有庞大的生态系统并具有更多功能,但使用,开发和优化都很复杂。 如果您有一支由Akka开发人员组成的优秀团队,他们可以编写一个单例文件,比GO更快地处理事件。 但是,GO扩展非常简单。
推荐建议
如果您是开发人员…
简而言之,GO既有趣又酷,易于学习且简单。在3个月内,您可以编写可用于实际用途的生产就绪应用程序。Scala既有趣,复杂又具有挑战性,但回报颇丰,它的薪酬很高,而且声望更高,特别是在大数据世界中。
如果您是技术主管…
总而言之,GO是一种消耗很少且易于采用的二进制语言,对于您的工具带来说它是一个不错的工具,但是我不会将它用作大型组织的唯一编程语言,因为它不那么通用和其他语言一样。Scala更加困难,但是如果您已经在使用Java,那么这是一个很好的下一步。
如果您是经理…
总而言之,GO的运行和雇用人才便宜。 它易于使用,可以在广泛的用例中采用。 当您仍然是核心应用程序的另一种语言时,它也可以用作补充语言。 Scala非常适合大型项目和大数据。 如果您在JVM上投入了大量资金,则Scala是常见的下一步。
结论
在过去的几年中,我一直在使用Go和Scala,两者都有其优点和缺点。作为开发人员,我喜欢在Scala中解决问题,它非常优雅,简洁,强大。和使用的喜悦;但是在现实世界中,我倾向于更频繁地使用GO,因为我可以更快,更便宜地完成工作。当您在需要赚钱的公司工作时,这就是这种方式。由于快速的编译时间和部署时间以及极低的资源使用率,GO是用于云原生应用程序的最具成本效益的语言。尽管如此,对于大数据和高度并发的关键系统来说,Scala是最佳选择,它也比GO更成熟。对于更大,更传统的企业,Scala往往更适合。
分享标题:大数据开发语言怎么选?Scala还是Go
分享网址:http://www.mswzjz.cn/qtweb/news45/313195.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能