#17 @
murmur 不敢苟同,在我看来,虽然现在新的老的各种语言很多,但是真正实用的静态类型编程语言,依然是一个未解决的问题。
这个“真正实用的静态类型编程语言”的意思是:跨平台,有基本的“现代”功能集,主要面向 native AOT 编译且运行时较轻量,支持多线程。
动态类型、有虚拟机的编程语言已经有 JavaScript 、Python 、Scheme 等成功典型了。
静态类型,有虚拟机的,C#,Java 及一票 JVM 语言也都不错。
TypeScript 算是中间的。这些领域的吃鸡已经基本完成了。
但是静态类型无虚拟机暂时还比较混乱。C 抽象能力太差,C++ 洞太多,Ada 、Pascal 、Fortran 、D 等要么凉了要么不温不火,Haskell 智商兼容性太差。上个十年这一波新语言可能得有一半,包括 Rust ,Swift ,Go ,Nim ,Vala 之类的都在试图解决这个问题。而其他很多新老语言,如 Kotlin ,Scala ,C# 甚至 TypeScript 也在探索这条路,现在吃鸡大赛暂时还没打完。
你举的这几个例子比较失败,AOT 编译+静态类型是 Flutter 核心卖点之一。Lua 是动态类型先踢出,TS 不完全是静态类型不适合 AOT 编译也踢出,C#虽然可以 AOT ,但是语言本身并不是针对这个设计的,削足适履可能还不如用 Dart 。在我看来,Dart 只是刚好 check 了上面所有的 box 的“经济适用语言”而已。
你举这些例子还不如问为啥不用自家的 Go 。我推测这涉及到另外一个问题,就是除非语言具备足够的元编程能力并且工具提供良好的支持,要做 GUI 框架,总是要其所依赖的编程语言本身配合加点功能更好。比如苹果专注做 GUI ,从 NeXT 算起的两代语言,Objective-C 和 Swift ,都为了 GUI 开发做了一些定制(当然跟你说苹果可能显得我大脑比较高级 ...),JavaScript 也有 JSX 之类的东西,GTK 也自己搞出个 Vala ,Qt 最奇葩搞出个 moc 。
那比较理想的情况就是,框架开发者能在一定程度上控制语言的发展。C#、Swift 之类的是别人的,没法控制,Go 已经做大了(可能还有内部的一些组织问题),看起来也不好控制,就拎出来个 Dart ,一边需要个工具语言,一边需要推广,一拍即合,皆大欢喜,双赢!