关于编程语言golang、scala、erlang、rust、lua、shell的使用范围

一、前言

  近期在了解微服务相关的知识,在整个微服务架构中会包括各种应用程序、中间件、开源组件的内容,比如nacos(服务注册与发现、配置中心)、ocelot(网关)、consul(服务注册与发现)、kafka(消息)、rabbitmq(消息)、rocketmq(消息)、filnk-cdc(流式数据同步与分析,数据库变更日志捕获和处理框架)、polly(弹性和瞬时故障处理库,容错机制)、apisix(网关)、kong(网关)、redis(非关系型数据库、缓存)、mongodb(非关系型数据库、文档数据库)、memcache(缓存)、ID4(认证与授权)、docker(容器)、kubernetes(容器编排)、mysql(数据库)、SkyWalking(应用性能监控系统(APM)、分布式追踪)、CAP(分布式事务一致性)、AgileConfig(轻量级配置中心)、Apollo(配置中心)等等各种开源、非开源的应用程序或组件,一些在生产中实际使用过,一些在demo中实践过,其他可能是比较火听过。

  上述的一些组件在github中可以查看到相关开发语言,好奇于这些组件为什么选择这种语言而非选择另外一种语言,好奇于除了平时使用比较多的高级语言比如C#、JAVA、PHP、JS等还存在这么多没有了解过的内容,所以通过这个文章记录搜索到资料,提高语言认知,仅仅作为记录没有对语言进行深入的研究(精力是有限的)。

  对于每一个语言,都有其产生、发展的历史,可能在一个阶段火起来或者就没有普及过,但是这并不会影响我去了解,就像一本历史书一样吸引我去探索最原始的真相,最本质的内容,然后学习了,提高点认知

二、介绍

  golang,是一种静态类型的编译型语言,主要用于开发云计算、微服务和网络应用,比如 Kubernetes 和 Docker。

  1、Go 以其并发功能而闻名,它允许开发人员有效地编写可以同时执行多个任务的程序。Go 提供了一个轻量级的并发模型,称为 goroutines,可以轻松编写并发代码。Goroutines 是基于堆栈的小型线程,由 Go 运行时管理,可实现高效灵活的并发性。

  2、Go 还提供了通道,这是 goroutines 之间通信的机制。通道提供了一种以安全可控的方式在 goroutines 之间传递数据的方法,确保可以以安全和可预测的方式编写并发代码。

此外,Go 的标准库提供了许多与并发相关的包,例如 sync,它们为管理并发提供了更高级别的抽象。这些包使编写安全可靠的并发代码变得更加容易,而不必担心线程管理或锁定等低级细节。

  3、Go语言是慢慢在编程社区活跃起来,比较多的知名大厂使用这个语言,技术栈;有需求就会有市场,相关开发人员也慢慢多起来,其还处于野蛮生长的时期,各种生态在完善中,不管在云计算、微服务、网络应用还是web开发中都体现这个语言的不断发展的势头(ps:有空想学习一下这个语言)

  scala,是一种多范式的编程语言,主要用于开发可扩展的并行和分布式系统,比如大数据、机器学习和 Web 应用,尤其上述提到flink-cdc技术就是scala语言为主的开发的。

  1、scala是纯粹的面向对象的语言。java虽然是面向对象的语言,但是它不是纯粹的,因为java的基本数据类型不是类,并且在java中还有静态成员变量和静态方法。相反,scala是纯粹面向对象的,每个值都是对象,每个操作都是方法调用。

  2、scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化。Scala的CaseClass及其内置的模式匹配相当于函数式编程语言中常用的代数类型(AlgebraicType)。

  3、程序员可以利用Scala的模式匹配,编写类似正则表达式的代码处理XML数据。在这些情形中,顺序容器的推导式(comprehension)功能对编写公式化查询非常有用。

由于JVM不支持尾部递归,Scala也不能完全支持尾部递归优化。不过,在简单的情况下,Scala编译器可以把尾部递归优化成循环。

  erlang、是一种函数式编程语言,主要用于构建高并发、分布式和容错的系统,比如电信、金融和游戏领域,尤其上述提到的rabbitmq就是使用这个语言开发,所以在使用rabbitmq的实时需要安装该语言的运行时环境信息。

  1、由 Joe Armstrong 在瑞典电信设备制造商爱立信所辖的计算机科学研究室开发,目的是创造一种可以应付大规模并发活动的程序设计语言和运行环境。Erlang 于 1987 年发布正式版本,较早是爱立信拥有的私有软件,经过十年的发展,于 1998 年发表开放源码版本。现在 Erlang 主要用于电信行业、Web 应用、分布式计算、即时消息、电子商务等领域,负责处理大规模的并发持续连接。

  2、该语言是比较不了解的语言,在安装使用rabbitmq这个比较常用的消息中间件的时候,了解到该语言信息

  rust、是一种系统级的编程语言,主要用于开发对时间/空间要求苛刻的场景,比如微控制器和 Web Assembly。

  1、因为 Rust 是对安全、并发和性能都很看重的语言,它可以用于嵌入式系统、操作系统、网络服务等底层系统,但它并不局限于此,它还可以用于开发上层 Web 应用、游戏引擎和机器学习,除此之外,Rust也获得了国内外多家头部大厂的公开支持,比如华为、Facebook、Amazon、微软、谷歌等,从网站到开发者工具、电子游戏,再到量化交易的多种应用场景

  lua、是一种轻量级、可嵌入的脚本语言。它由巴西里约热内卢天主教大学里的一个研究小组于 1993 年开发,其设计目的是为了通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能。Lua 是一种解释型语言,它提供了简单、易读、易写的语法,支持面向过程编程、函数式编程、面向对象编程、数据描述以及协程。

  1、轻量级和可嵌入性:Lua 的核心非常小,很容易嵌入到其他应用程序中。这使得 Lua 成为一个很好的选择,用于为大型应用程序或系统提供扩展性。
  2、高效性:虽然 Lua 是一个解释型语言,但通过即时编译(JIT)技术,Lua 的执行速度可以接近编译型语言。
  3、易扩展性:Lua 提供了 C API,允许用户用 C 或 C++ 编写自定义函数库,并与 Lua 代码无缝集成。
  3、协程支持:Lua 内建了协程(coroutines)的支持,使得非阻塞 I/O 操作和并发编程变得更加容易。
  4、动态类型系统:Lua 是动态类型语言,不需要预先声明变量的类型,变量的类型在运行时确定。
  5、简洁的语法:Lua 的语法清晰简洁,易于学习和使用。

  6、在许多领域都有广泛的应用,包括游戏开发(如 Roblox)、Web 开发(通过 LuaJIT 和 OpenResty)、嵌入式系统、网络编程等。许多知名的开源软件项目也使用 Lua 作为其脚本语言或扩展语言

  7、该语言是在比较多的组件中占有一定的比例,通过上述简短的了解,可以理解其属于一个“胶水语言”存在耦合各个语言模块的内容,比如基于LUA的OpenResty,在apisix、kong网关中就使用了。

  shell、是一个用户与操作系统内核进行交互操作的一种接口,它接收用户输入的命令并把它送入内核去执行,是一个命令解释器。Shell 脚本(也称为 shell 程序或 shell 命令文件)是一种为 shell 编写的脚本程序,它可以利用 Shell 的功能来解释执行一系列的命令。

  1、shell 既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。

  2、常见的 shell 种类有 Bourne Shell(sh)、Bourne Again Shell(bash)、C Shell(csh)、Korn Shell(ksh)、Z Shell(zsh)、Windows的powerShell等。其中,bash 是 Linux 标准默认的 Shell,本教程以 bash 为例讲解 Shell 的各种功能。

  3、shell 脚本通常用于自动化管理系统的日常任务,比如文件操作、文本处理、系统管理、网络配置等。通过编写 Shell 脚本,用户可以一次性执行多个命令,提高工作效率。

 

  还包括其他高级语言比如C#的polly、consul.net、CAP、ocelot、AgileConfig,JAVA的nacos、kafka。C语言的redis、memcahe,C++的mongodb等等

三、总结

  通过上述了解,可以看到这些语言的丰富多彩,每一个语言都拥有自己的特性、平台、基因。所以能够在其擅长的领域发挥作用,体现优势,可能最终都是编译成机器码。更明白语言本身不存在绝对的优劣,有可能是在相同的领域上体现优势而已。

  虽然我们在编程中常说要突破语言的困境,把握编程思想、核心内容,但是市场需求决定了语言份额,影响了从业人员的选择也是现实,所以多接触,多学习,触类旁通吧!!!!既然无法左右大厂的选择。。。那就做好更换赛道、更换坑位吧。

参考内容:erlang、golang、scala、rust的应用范围是怎样

posted @ 2024-04-08 23:51  tuqunfu  阅读(13)  评论(0编辑  收藏  举报