应用于特定领域的 11 种小众语言 | 小语言,大作用

战场小包 编程语言 1月前 阅读 1968

大多数现代编程语言都是针对于创作者需要解决的问题而创建的。大多数开发人员使用一种或者多种成熟的编程语言进行日常开发,例如 C 语言、Java 语言、Javascript 语言等,但是通用、成熟的语言无法解决所有的编码问题,因此一些应用于特定领域的语言或者 DSL 开始陆续出现,这些编程语言不适用于通用用途,但针对某些特定领域,它们使用起来非常强大。

本文就介绍 11 中较新的编程语言(有些是 DSL),虽然日常使用不多,但某些特定场景,有可能能帮你大忙。

Reactive Clojure

什么是 Reactive Clojure呐?通俗来讲就是将 React 前端的所有可能性与 Clojure 坚实的功能优势相结合的系统。

使用 Reactive Clojure ,你可以构建复杂的前端组件集合并且使用函数将它们串联在一起。React 框架来处理细节,并且确保应用程序数据在组件和数据库中流动。Clojure 提供功能基础,使甚至非常规的用例成为可能,并且可以进行调试。

如果你想编写将前端组件结合在一起的胶水代码,Reactive Clojure 是个非常好的选择。

React 框架和 Clojure 看起来非常适配,时间会证明一切。

Nickel

日常开发中,程序员会在配置文件上消耗很多时间,配置文件通常有 JSON、YAMLXML 编码。很多情况中,程序员无需编写实际的代码,但是需要反复无休止的调整各种配置文件来完成工作。

Nickel 就是为了解决上述问题的,它是一种用于创建配置文件的编程语言。Nickel 类似一个带有嵌入式逻辑的模板,利用它你可以制作非静态的配置文件。其中参数的值是动态变化的,当它运行时,会根据接收到的参数创建一个新的配置文件。

Nickel 的结构是功能性的,可以使用类型检查。一段编写良好的 Nickel 代码几乎可以保证输出将遵守句法规则和您需要强制执行的任何其他规则。

编写代码来创建配置文件,利用配置文件来管理你的代码,这是现代架构中非常实用的一种解决方案。

Kobra

Kobra 的创造者希望创建一种面向工程师、科学家和其他不专业的编程人员进行机器学习的编程语言。Kobra 的编辑器通过使用 tiles 来组成类似代码的系列,这些 tiles 代表了用于统计分析和机器学习的常见内置程序。

Bicep

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

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

Bicep 是一种领域特定语言 (DSL),使用声明性语法来部署 Azure 资源。在 Bicep 文件中,首先定义要部署到 Azure 的基础结构,然后在整个开发生命周期中使用该文件重复部署基础结构。以一致的方式部署资源。

Bicep 本身是为对基础架构进行高阶思考而设计的,具有强声明性结构,允许你以任何顺序包含指令,然后让 Azure 的资源管理器优化执行。

Frink

浮点数的错误会带来很多风险和 bugFrink 语言就是针对浮点数问题创建的"单元感知"语言。

Frink 语言中的变量不仅包含数字,还包含度量单位(吨、瓦特、英尺、米等几乎所有的计量单位)。由于 Frink 配置文件的存在,单位转换会变得特别容易。Frink 还是用任意精度数来减少摄入问题,这特别适合于数字测量单位。

Faust

声音开发对于游戏开发、虚拟现实和任何依赖良好音质的应用程序非常有用。Faust 正是该特定领域的编程语言。

Faust 的结构纯粹是功能性的,并且每一个功能都创建了一个声音处理管道。它将后端传入的声音分解成数字表示,代码本身返回一组可以组合或者已经组合成最终结果的函数。

例如,你可以通过拆分代码输出并且引入延迟来创建回声或者混响。Faust 还可以被转换为 C++、C、LLVM、WebAssembly、Rust 等代码,因此几乎可以被任何项目使用。

Melrōse 和 Glicol

程序员应该如何创建一个乐队呐?无需发布广告寻找鼓手,只需编写一些代码拼出估计的节奏即可。其他的乐队成员都是用类似子程序进行替代,如果你有兴趣,甚至你可以使用这种方式组建一个完整的交响乐团。

MelrōseGlicol 就是为音乐创作方式而生的编程语言。使用这两种语言你只需要用几个按键就能创造出一个看上去精心制作的作品。

Melrōse 围绕西方音乐中常见的标准十二音度的来进行高水平演奏。音符被分组为序列,软件处理大部分的细节工作,如移调。程序可以输出到任何具有 MIDI 功能的乐器上,代码也可以对通过 MIDI 端口进入的信号做出反应,因此运行 Melrōse 代码可以代替一个乐队成员。

Glicol 是一个基于 Rust 的工具,它能完成许多与 Melrōse 相同的任务,但其从低级别实现。Glicol 可以与数字信号处理相结合,提供广泛的音乐类型选择。该工具旨在通过其开源的音频引擎产生可用于浏览器的声音。

WebAssembly 和 Wase

将指令编码为二进制并限制指令为 CPU 使用的基本操作集是将指令发送给计算机最有效的方式。每个芯片都有其独特的二进制语言,PascalJava 等一些语言可以具有中性的二进制格式,可以在本地虚拟机上运行。WebAssembly (Wasm) 可以为 Web 浏览器创建预先处理的二进制代码以及标准格式的文本。其目标是用更易运行的、接近本机速度二进制格式来代替构建 Web 应用程序的 JavaScript 代码。

许多开发者使用 WebAssembly 但并不直接编写它,而是用编译器将高级语言转化成 WebAssembly,并在浏览器中运行。还可以借助低级语言 Wase,以人类可读的形式展示 WebAssembly 的大部分基本结构,该语言提供了一种类似 C 的语法和强类型。

在浏览器之外,WebAssembly 还有另外的用途,其作为一种通用的编码指令方式,其堆栈机类似于 JavaJVM。例如, Redpanda 是一个流媒体数据平台,开发人员可以使用 WebAssembly 编写的代码在管道中调整或修改数据。

Java 17

从技术上来讲,Java 并不算新语言。但 Java 最伟大的地方在于它的开发人员在维护与旧版本的兼容性方面做得特别好。最新的 JVM 甚至可以轻松的编译 10 年、20 年的代码。虽然代码不能保证能正常运行,但是它的编译难度是最小的。

Java17 包括在当前列表中,因为 Java17 变得非常现代化,它提供其很多额外的特性和扩展,对开发者的编码方式产生了重大影响。

例如,增强的随机数发生器或更严格的浮点数学语义,解决了编写非常复杂的数字代码的难题。会计系统的开发人员可以使用整数来存储钱,但 AI 算法和复杂线代的开发人员则非常需要浮点数。

再比如,强封装和扩展的 switch 语义,为核心语言带来了纪律性和灵活性的混合。

总而言之,Java17 的这些更新,简化了更强大、更安全和更有保障的代码的编写难度。虽然核心仍然是 Java,但是一些附加的功能让其具有自己的特点。

评论