前十名: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()
这或许无法完全展现 Scala 的所有功能,甚至算不上一个完整的“Hello World!”程序,但我认为这足以让大多数程序员对 Scala 的语法有一个基本的了解。当然,你也可以使用包含大量内置类型和结构的整个 Scala 标准库。想要了解更多 Scala 的强大之处,你可以访问 Scala 语言官网或 Scala.js 官网。毋庸置疑,使用纯 Scala 编写代码,你可以通过其JVM和LLVM目标实现跨平台运行。
9.斧头
Haxe是一个真正的跨平台解决方案,适用于动态交互式应用程序开发。它可以编译成多种其他语言,包括 JavaScript。因此,Haxe 的应用场景非常广泛——游戏、服务器后端、网站、专业软件等等,而且还在不断增加。其官网提供了详尽的文档,内容令人印象深刻。Haxe 语言本身拥有简洁的面向对象和类型安全的语法(IDE 支持也很棒),以及元数据和编译器宏等各种其他特性。这次,终于可以写出一个完整的“Hello World!”程序了!😁
class Main {
static public function main():Void {
trace("Hello World");
}
}
仅凭一眼,我就能看出 Haxe 的语法远胜于 JS,这主要归功于其类型系统、宏以及编译器的强大功能。Haxe 似乎是跨平台应用和游戏的理想选择。
8.飞镖
由于Flutter 框架的出现, Dart 语言近来人气飙升。Flutter 可以轻松开发Android和iOS应用,而它本身就是用 Dart 编写的!接下来我们来了解一下 Dart。Dart 是一种基于虚拟机的语言,由 Google 创建,因此它可以作为服务器后端运行在 Google 的虚拟机上,也可以在编译成 JS 后运行在 Web 端,还可以运行在其他x86和ARM平台上(尤其是在使用 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));
}
这段代码清晰地展现了 Dart 的类型化和面向对象特性。同样引人注目的是 Dart 对异步编程的重视,例如Futures和Streams等结构。除此之外,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 ++ "!")
除此之外,Elm 的语法可能需要一些时间才能适应。它的类型系统和 IDE 支持会对此有所帮助。
6.伊姆巴
Imba是另一种专注于 Web 应用开发的语言。我认为它是 Elm 的年轻竞争对手。凭借其记忆化的 DOM ,Imba 声称比目前所有虚拟 DOM 实现都要快。
# Comment
console.log "Hello World"
tag HelloWorld
def render
<self> "Hello World"
Imba.mount(<HelloWorld>)
在 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")
依我看来,Nim 看起来是个很有意思的项目,目前还在积极开发中,值得关注。👍
4. ClojureScript
ClojureScript是一个Clojure到 JavaScript 的编译器。ClojureScript 完全拥抱函数式编程的理念,因此它拥有丰富的内置不可变数据结构。这为面向对象程序员提供了一种全新的思维方式。由于几乎所有东西都是函数,它的语法可能看起来有点别扭,但只要花点时间就能习惯。🙃
(ns hello-world.core)
(println "Hello world!")
如果您打算尝试函数式编程技术,那么这或许值得一看。
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));
}
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()
}
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);
}
}
还有更多……
这只是我个人对最佳 JavaScript “可编译语言”的看法。我希望至少能引起你对其中几种语言的兴趣,甚至说服你尝试一下。相信我,还有很多其他很棒的编程语言。很多语言的功能远超 JavaScript。也许其中一种会成为你的首选语言?总之,这就是我的列表。欢迎在下方评论区推荐其他语言。也请分享这篇文章,让更多人更容易找到它。想了解更多内容,请在 Twitter或Facebook 上关注我。🦄
文章来源:https://dev.to/areknawo/top-10-js-compilables-jp4









