Biased Scala之Hello World

王福强

2021-10-10


Scala3出来之前, 写个简单hello world程序要声明一个object:

object Main{
    def main(args: Array[String]) : Unit = {
        println("Hello, World")
    }
}

Scala3出来之后,有了一个革命性的改善, 那就是main方法的入口直接用@main标注一下就可以了, hello world即刻变成one-liner:

@main def hello: Unit = println("Hello world!")

Scala3的编译器会自动生成外围结构,对于程序员来说,那些劳神子本就不应该操心,程序员是计算机语言的用户, 对用户来说,越简单越好,越少敲几次键盘越好。 编译器搞得好,就会把简单留给用户,把复杂留给自己

再加上Scala3废除了很傻逼的package object,用Scala3写脚本也将成为更加赏心悦目的体验。

当然, Scala2.x也不是说不能写脚本, lihaoyi搞的Ammonite(https://ammonite.io/)也还不错, 但碰上Scala3就遭遇降级了,@main直接冲突,你有我也有,哈 (好在可以各自单独跑, ammonite的脚本用amm跑, scala3的用scala3去run)

之前用Ammonite写了满满一个workspace.amm(项目),但架不住自己是IDE拉扯大的程序员出身啊, 没有了依赖的自动管理和语法的自动提示,语法再简单,用来写复杂一点儿的脚本也是小痛苦的事情,所以, Scala2.x时代, 囧最终还是宁愿新建一个dirtyWorks项目,IDE里写,IDE里跑, 实在高频的脚本,那咱就编译成jar直接java -jar xyz.jar呗,甚至于想进一步追求性能与迅速可用,那就用GraalVM的native-image编译成native的可执行文件并加到PATH里去run呗!

Anyway,我觉得Scala3里第一个走对了的路就是去除package object,而且还一@main解千愁。


>>>>>> 更多阅读 <<<<<<


「福强私学」来一个?

「福强私学」, 一部沉淀了个人成长、技术与架构、组织与管理以及商业上的方法与心法的百科全书。


开天窗,拉认知,订阅「福报」,即刻拥有自己的全模态人工智能。

订阅「福报」