发布于 2026-01-06 2 阅读
0

十大 JavaScript 可编译语言:10. Scala.js 9. Haxe 8. Dart 7. Elm 6. Imba 5. Nim 4. ClojureScript 3. ReasonML 2. Kotlin 1. TypeScript 还有更多……

前十名:JS 编译型

10. Scala.js

9.斧头

8.飞镖

7.榆树

6.伊姆巴

5.尼姆

4. ClojureScript

3. ReasonML

2. Kotlin

1. TypeScript

还有更多……

这篇文章摘自我的博客,记得去看看博客上的最新内容哦😉

JavaScript 非常适合多种应用场景,它本身也是一种设计精良的语言。但事实上,它缺少一些特性。例如,类型安全和自定义运算符在 JavaScript 中并不存在——至少在撰写本文时是这样。然而,这些以及其他语法糖都可以通过任何编译步骤轻松实现。您可能不太喜欢 JavaScript,但仍然想编写 Web 应用程序。当然,您可以使用像Emscripten这样的工具将您喜欢的语言(例如 C/C++,但也支持 Java 等其他语言)编译成 JavaScript,以便在浏览器中使用。但还有其他选择。许多编程语言都提供对 JavaScript 编译目标的一流支持,甚至是唯一支持。这些语言的语法和其他特性(例如编辑器支持)可能会吸引您。信不信由你,这样的语言有很多。在本文中,我将向您介绍我评选出的十大以 JavaScript 为编译目标的编程语言。请记住,我还没有全面尝试过所有这些语言……所以这主要基于我的第一印象,希望你们会觉得有趣。😉

图片

10. Scala.js

Scala.js允许你将Scala编程语言编译成 JavaScript。有了它,你可以编写类似 ES6 的现代代码,并拥有强大的类型系统。这意味着它能提供出色的 IDE 支持,以及诸如类、模块、类型和宏等功能,让你开箱即用地扩展语言!Scala.js 声称拥有接近原生 JS 的性能,并通过 facade 类型系统支持标准 JS 库。如果你已经使用 Scala 编程,那么它可能非常适合你。此外,项目页面还为有 ES6 背景的用户提供了很好的指南。让我们总结一下它们之间的一些基本区别。

// Comment
/*
Multiline comment
*/
var mutable: String = "variable"
val immutable = "constant"

def exampleMultiplyFunction(x: Double, y: Double): Double = x * y

abstract class Logger() {
  def log(msg: String): Unit = {
    println(msg)
  }
}
class ConsoleLogger() extends Logger() {
    override def log(msg: String = ""): Unit = {
        if (msg != "") println(msg) else println("console.log equivalent")
    }
}
new ConsoleLogger().log()
Enter fullscreen mode Exit fullscreen mode

这或许无法完全展现 Scala 的所有功能,甚至算不上一个完整的“Hello World!”程序,但我认为这足以让大多数程序员对 Scala 的语法有一个基本的了解。当然,你也可以使用包含大量内置类型和结构的整个 Scala 标准库。想要了解更多 Scala 的强大之处,你可以访问 Scala 语言官网或 Scala.js 官网。毋庸置疑,使用纯 Scala 编写代码,你可以通过其JVMLLVM目标实现跨平台运行。

图片

9.斧头

Haxe是一个真正的跨平台解决方案,适用于动态交互式应用程序开发。它可以编译成多种其他语言,包括 JavaScript。因此,Haxe 的应用场景非常广泛——游戏、服务器后端、网站、专业软件等等,而且还在不断增加。其官网提供了详尽的文档,内容令人印象深刻。Haxe 语言本身拥有简洁的面向对象和类型安全的语法(IDE 支持也很棒),以及元数据和编译器等各种其他特性。这次,终于可以写出一个完整的“Hello World!”程序了!😁

class Main {
  static public function main():Void {
    trace("Hello World");
  }
}
Enter fullscreen mode Exit fullscreen mode

仅凭一眼,我就能看出 Haxe 的语法远胜于 JS,这主要归功于其类型系统、宏以及编译器的强大功能。Haxe 似乎是跨平台应用和游戏的理想选择。

图片

8.飞镖

由于Flutter 框架的出现, Dart 语言近来人气飙升。Flutter 可以轻松开发AndroidiOS应用,而它本身就是用 Dart 编写的!接下来我们来了解一下 Dart。Dart 是一种基于虚拟机的语言,由 Google 创建,因此它可以作为服务器后端运行在 Google 的虚拟上,也可以在编译成 JS 后运行在 Web 端,还可以运行在其他x86ARM平台上(尤其是在使用 Flutter 开发移动应用时)。它的语法借鉴了 C、C# 和 Java,并拥有庞大的标准库。以下示例取自DartPad(Dart 在线实践平台)的斐波那契数列示例:

void main() {
  var i = 20;
  print('fibonacci($i) = ${fibonacci(i)}');
}

int fibonacci(int n) {
  return n < 2 ? n : (fibonacci(n - 1) + fibonacci(n - 2));
}
Enter fullscreen mode Exit fullscreen mode

这段代码清晰地展现了 Dart 的类型化和面向对象特性。同样引人注目的是 Dart 对异步编程的重视,例如FuturesStreams等结构。除此之外,Dart 的 IDE 支持也非常出色,能够很好地展现其所有类型化语言的特性。所有这些优势使得 Dart 成为构建高要求 Web 和移动应用的理想选择。

图片

7.榆树

与榜单上的其他语言不同,Elm只能编译成 JavaScript 和其他 Web 语言(HTML)。它的主要目标是利用定制的高性能虚拟 DOM实现来开发 Web 应用程序。Elm 完美地实现了其目标,将 HTML 和 JavaScript 以简洁易读的形式结合起来。

import Html exposing (text)

who = "World" -- comment

main =
  text ("Hello " ++ who ++ "!")
Enter fullscreen mode Exit fullscreen mode

除此之外,Elm 的语法可能需要一些时间才能适应。它的类型系统和 IDE 支持会对此有所帮助。

图片

6.伊姆巴

Imba是另一种专注于 Web 应用开发的语言。我认为它是 Elm 的年轻竞争对手。凭借其记忆化的 DOM ,Imba 声称比目前所有虚拟 DOM 实现都要快。

# Comment
console.log "Hello World"

tag HelloWorld
    def render
        <self> "Hello World"

Imba.mount(<HelloWorld>)
Enter fullscreen mode Exit fullscreen mode

在 Imba 中,DOM 节点是“一等公民”,你可以像操作其他变量一样操作它们。可惜的是,Imba 没有强大的类型系统,这意味着它对 IDE 的支持稍逊一筹。此外,它被拿来与 React 比较并作为 React 的竞争对手,这有点滑稽。要知道,React 是一个,而 Imba 却被宣传为一门语言。😂

图片

5.尼姆

回到更标准的编程语言,我们来看看Nim。Nim是一种静态类型、垃圾回收的语言,可以编译成 C、C++ 和 JavaScript。它拥有受 Python 启发的基于缩进的语法,并且对元编程提供了强大的支持。总而言之,Nim 的优势在于其卓越的性能、有趣的语法和良好的编辑器支持。

import strformat
type
  Person = object
    name*: string # Field is exported using `*`.
    age: Natural  # Natural type ensures the age is positive.

var people = [
  Person(name: "John", age: 45),
  Person(name: "Kate", age: 30)
]

for person in people:
  # Type-safe string interpolation.
  echo(fmt"{person.name} is {person.age} years old")
Enter fullscreen mode Exit fullscreen mode

依我看来,Nim 看起来是个很有意思的项目,目前还在积极开发中,值得关注。👍

图片

4. ClojureScript

ClojureScript是一个Clojure到 JavaScript 的编译器。ClojureScript 完全拥抱函数式编程的理念,因此它拥有丰富的内置不可变数据结构。这为面向对象程序员提供了一种全新的思维方式。由于几乎所有东西都是函数,它的语法可能看起来有点别扭,但只要花点时间就能习惯。🙃

(ns hello-world.core)

(println "Hello world!")
Enter fullscreen mode Exit fullscreen mode

如果您打算尝试函数式编程技术,那么这或许值得一看。

图片

3. ReasonML

首先介绍的是前三名中的Reason。Reason是由 Facebook 开发的一种语言,专注于类型安全和互操作性。它基于 JS 和OCaml生态系统。由于 Reason 出自React 团队之手,因此它拥有非常全面的支持。其类型系统出色,整体开发体验也堪称一流。✌此外,Reason 在设计上也充分考虑了 JS 开发者的熟悉程度,同时保留了 OCaml 的诸多优秀特性,包括类型系统

let rec fibonacci = n =>
  switch (n) {
  | 0 | 1 => 1
  | n => fibonacci(n - 1) + fibonacci(n - 2) 
  }

for (x in 1 to 10) {
  Js.log(fibonacci(x));
}
Enter fullscreen mode Exit fullscreen mode

图片

2. Kotlin

Kotlin是一种基于 JVM 的编程语言,支持Android开发、JavaScript、原生LLVM二进制文件以及JVM本身。它拥有出色的类型系统、良好的互操作性和强大的编辑器支持(JetBrains项目)。该项目近来人气飙升,这并非偶然。跨平台、简洁的语法、丰富的特性以及优异的性能,共同造就了它的巨大成功。

class Greeter(val name: String) {
    fun greet() {
        println("Hello, $name")
    }
}

fun main(args: Array<String>) {
    Greeter(args[0]).greet()
}
Enter fullscreen mode Exit fullscreen mode

图片

1. TypeScript

我可能有点偏心。TypeScript是我编写 JS 编译型代码时最喜欢的语言,也是我的首选。它可能不是跨平台的,也没有什么特别的功能,但它的目标只有一个——为 JS 提供类型系统——而且它在这方面做得非常出色。它还允许使用一些当时浏览器还不支持的ES-Next标准中的新特性。除了类型之外,它的语法完全是纯 JS 的,而这正是我喜欢它的原因。至于类型本身——它们为 TS 和 JS 项目提供了极其强大的IDE 支持。还有什么好说的呢?🎉

export class Fibonacci {
    index : number;
    fibonacciNumber : number;

    public calculateFibonacciNumber() {
        this.fibonacciNumber = this.calculate(this.index);
    }
    private calculate(i : number) : number{
        return (i <= 2) ? 1 : this.calculate(i -1 ) + this.calculate(i -2);
    }
}
Enter fullscreen mode Exit fullscreen mode

还有更多……

这只是我个人对最佳 JavaScript “可编译语言”的看法。我希望至少能引起你对其中几种语言的兴趣,甚至说服你尝试一下。相信我,还有很多其他很棒的编程语言。很多语言的功能远超 JavaScript。也许其中一种会成为你的首选语言?总之,这就是我的列表。欢迎在下方评论区推荐其他语言。也请分享这篇文章,让更多人更容易找到它。想了解更多内容,请在 TwitterFacebook 上关注我。🦄

文章来源:https://dev.to/areknawo/top-10-js-compilables-jp4