Clojure 不了解。 Scala 的标准库的集合部分把 Java 的重新发明了一遍,其他新加了一些方便使用的类,如元组让函数可以便捷地返回 2 个值, Source 类让网络请求或文件读取简略为 1 句话。
但它的集合分为可变和不可变两种,不可变集合每次操作都会产生一个新的集合, 然后把原来的集合丢弃掉,占用空间和效率方面会差一点,不可变集合与 Java 中的比较相似, Scala 分别针对它们做效率上的优化,例如不可变集合添加一个元素时,返回的新集合会复用前 n - 1 个元素的空间,不会拷贝一次到新集合里。另外他的集合操作兼顾了 OO 和 FP 两种风格,既有 map, flatMap, filter, collect 等 FP 风格的操作符,也有 OO 风格的 take, takeRight (返回头 n 个或 尾 n 个)等操作符。
另外,不同于 Kotlin 这种因为 Java 原始类型有很多弊端就一刀切的都用 kotlin.* 类不同, Scala 虽然也是
scala.Int ,但他在运行期会尽量是一个 JVM 上的原始 int ,尽量避免装箱以提高性能。同时 Int 可以被隐式转换为一个 RichInt ,提供了很多实用的方法,这是性能与实用性兼顾的例子。
Scala 自己重新写的优势我感觉是不把人当傻子吧,不是限定使用一种方式完成一件事。而是提供很多选择给你自己选,然后分别对每一种进行特定的优化,集合和对待原始类型的态度就是例子。
缺点是可能有运行时开销和体积的 overhead , Scala 被编译为 Java 字节码,受限于 Scala 在 JVM 上的实现方式,生成的 class 文件众多,每个 class 里面自动生成的方法也比 Java 多很多。另外 Scala 的标准库体积过大。这两点在 Android 上其实很致命(有 ProGuard 会好一点)。
scala-native 看起来很不错,能够在 bare metal 上运行 Scala ,感觉如果成熟的话应该会很厉害。这样 Scala 就有了编写接近底层的一些东西的可能性。