编者按:虽然这几年流行的编程语言还是Java、C、Python······但是新的编程语言也如雨后春笋,不断冒出头来。从很多方面来说,新的编程语言还不够成熟,但也各有特色。大多数的编程语言都是针对创作者想要解决的问题而制作的。大多数的开发人员在日常工作中都会使用一种或者几种成熟的语言进行编码,比如C、C++、Java等,不过它们也并不完美,所以新的工具也孕育而生。
在本文中,来自Translucent Databases,Free for All图书作者Peter Wayner分享了十一种编程语言(有的是DSL),虽然罕见,但在某些特定场景中非常实用,没准能让你眼前一亮。

原文链接:https://www.infoworld.com/article/3658204/11-new-programming-languages-to-make-a-coders-heart-sing.html

译者 | 章雨铭 责编 | 屠敏
出品 | CSDN(ID:CSDNnews)

Reactive Clojure

Reactive Clojure顾名思义,就是Clojure和React结合体:一个结合了React前端所有可能性和Clojure坚实的功能优势的系统。

你可以使用Reactive Clojure布置一个复杂的前端组件集合,然后使用函数将它们串起来。React框架能够处理这些细节,并且确保应用数据在组件和数据库之间流动。而Clojure则提供功能基础,让一些超出常规的用例成为可能,并且可以进行调试。如果你想要编写连接前端组件的胶水代码,Reactive Clojure是一个不错的选择。

这看起来简直是天作之合,但还需要通过时间的检验。

Nickel

在这里插入图片描述

图源Nickel官网(https://nickel-lang.org/

有时,程序员会将大部分工作花费在配置文件上,这些文件通常用JSON、YAML甚至XML编码。在某些情况下,你甚至不需要写实际的代码,只要不停地切换各种配置文件来完成工作。

Nickel的诞生就是为了解决这一问题,它是一种用于创建配置文件的编程语言。你可以用Nickel来制作非静态的配置文件。一个参数的值可以发生变化,在一周内可以是一个值,在周末则是一个不同的值。在运行Nickel时,它会创建一个新的配置文件,以适应它收到的所有参数。

Nickel的结构在很大程度上是功能性的,而且可以使用类型检查。一段非常好的Nickel代码几乎可以保证输出遵守句法规则和任何其他需要执行的规则。

编写代码来创建配置文件,然后再对其他代码进行管理,这听起来有些滑稽。但对于现代架构来说,这是一个非常实用的解决方案。

Kobra

在这里插入图片描述

图源Kobra官网(https://kobra.dev/

Kobra的创造者希望有一种语言能够为工程师、科学家和其他不那么专业的编码者开放机器学习,于是这个机器学习的可视觉编程语言就诞生了。Kobra的编辑器用拖放tiles组成了类似代码的序列,这些序列代表了统计分析和机器学习的常见内置程序。

Bicep

云计算最有用的功能之一是能够启动和拆除服务器以处理数据激增。数据中心的硬件团队曾经需要花费数周时间来申购、安装、测试和配置一台机器。现在,云让你在几分钟甚至几秒钟内完成所有这些工作。

许多开发团队已经开始为不同云支持的各种API编写代码。微软为在Azure中启动机器创建一种简化的语言,作为其基础设施即代码理念的一部分。

这种语言叫Bicep(链接:https://docs.microsoft.com/en-us/azure/azure-resource-manager/bicep/overview?tabs=bicep),它是一种领域特定语言 (DSL),它使用声明性语法来部署 Azure 资源。在Bicep文件中,定义要部署到 Azure 的基础结构,然后在整个开发生命周期中使用该文件重复部署基础结构。以一致的方式部署资源。

Bicep的语法简洁、类型安全可靠并且支持代码重用,并且为Azure 中的IaC(基础架构及代码)解决方案提供一流的创作体验。

Frink

在这里插入图片描述

图源Frink官网(https://frinklang.org/

使用浮点数出现错误带来的风险是众所周知的,相当多的Bug是由于不注意的数字而造成。
Frink正是为解决这一问题而创造的,它是一种有“单位意识”的语言。Frink中的每个变量不只是持有一个数字,而且还表明了计量单位(几乎所有的计量单位),比如吨、瓦、英尺或者米。这使单位转换变得很容易,Frink的核心机制在于使用任意精度的数字来减少四舍五入的问题。这就像一种对于测量单位来说的一种类型检查。

Faust

在这里插入图片描述

图源Faust官网(https://faust.grame.fr/

声音合成对于游戏开发、VR和任何依赖良好音质的应用都非常有用。而Faust就是这种特定领域的语言,它的结构是纯功能的,并且每一个功能都建立了一个声音处理管道。它的后端将传入的声音分解为数字表示,而代码本身是一组可以组成最终结果的函数。比如,你可以通过分割代码输出并引入延迟来创造一个回声和混响。另外,Faust的代码可以转译成C++、C、LLVM Bitcode、WebAssembly、Rust和其他一些语言,这意味着你可以将其用于任何项目。

Melrōse和Glicol

程序员如何组建一个乐队?写一些代码,为鼓机拼出节奏,然后用子程序取代所有其他的乐队成员,用这种方式甚至能建立一个完整的交响乐团。

Melrōse和Glicol就是为这种音乐创作方式而生的编程语言。使用这两种语言你只需要用几个按键就能创造出一个看上去精心制作的作品。Melrōse(链接:http://ernestmicklei.com/melrose/introduction_melrose/)围绕西方音乐中常见的标准十二音度的高层次工作。 音符被分组为序列,软件处理大部分的细节工作,如移调。输出到任何具有MIDI功能的乐器上,代码也可以对通过MIDI端口进入的信号做出反应,因此运行Melrōse代码可以代替一个乐队成员。

Glicol(链接:https://github.com/chaosprint/glicol)是一个基于Rust的工具,它能完成许多和Melrōse相同的任务,但级别较低。Glicol可以与数字信号处理相结合,可以提供广泛的音乐类型选择。该工具旨在通过其开源的音频引擎产生可用于浏览器的声音。正如其开发者所说:“入门费用低,上限高。”

WebAssembly和Wase

在这里插入图片描述

图源WebAssembly官网(https://webassembly.org/

WebAssembly为Web浏览器提供预先处理的二进制代码,并以标准格式与文本相结合。其目标是用更容易运行的、接近本地速度二进制格式来代替构建Web应用程序的JavaScript代码。
许多开发者使用WebAssembly但不直接编写,而是用编译器将高级语言转化成WebAssembly,并在浏览器中运行。

在Web浏览器之外,也有WebAssembly的用武之地,作为一种通用的编码指令方式,其堆栈机类似于Java的JVM。例如,Redpanda是一个流媒体数据平台,它为开发者提供了一个机会,当数据通过WebAssembly编写的代码进入管道时,可以对其进行调整或修改。

这种方式的编码除了WebAssembly,还有另一个选择——Wase(链接:https://github.com/area9innovation/wase#example),它一种低级语言,以人类可读的形式展示WebAssembly的大部分基本结构。它提供了一种类似于C语言的语法和强类型。

Java 17

从某种意义上来说,Java并不能算一种新的语言。
Java最伟大的地方之一就是,它的开发者在维护与旧版本的兼容性方面做得很好,对于最新的JVM来说,编译10年甚至20年前的代码通常非常容易。虽然这些代码不能保证能正常运行,但它仍然比几乎任何其他语言更容易编译。

将Java 17列入这个名单是因为它已经“焕然一新”了,它有许多额外的功能和扩展,能够改变开发者的编码方式。

有的功能,如增强的随机数发生器或更严格的浮点数学语义,解决了编写非常复杂的数字代码的难题。编写会计系统的开发人员可以使用整数来保存钱的数量,但对于那些处理人工智能算法和复杂的线性代数的开发人员来说,浮点很重要。

由于这些改进,使编写更强大、更安全、更有保障的代码比以往都容易。虽然它的核心仍然使Java,但是一些额外的东西使它变得不同。

这些编程语言中有没有你正需要的呢?

Logo

20年前,《新程序员》创刊时,我们的心愿是全面关注程序员成长,中国将拥有新一代世界级的程序员。20年后的今天,我们有了新的使命:助力中国IT技术人成长,成就一亿技术人!

更多推荐