为什么没有类似 TypeScript 这样的 TypePython 语言( Python 超集)呢?
好像没有发现 Python 有类似的超集语言 TypePython 这样的呢?
好像没有发现 Python 有类似的超集语言 TypePython 这样的呢?
https://pyre-check.org
https://github.com/facebook/pyre-check
stackless python
没想到的是,IDEA 、Atom 、vscode 等现代化 IDE/编辑器的发展,让静态语言写起来也很快,静态分析功能也强大,反而动态语言傻了眼,风水轮流转,静态语言又全面制霸了。
哦不对,YAML 。。。
如果把目标定在 JS 上的话,那 Babel 则是一个静态的 Rosetta,Reason 相当于 ocamlopt,TypeScript 类似 C 语言。在 naive 领域,目标语言是具体 ISA 的机器码,CPython 实际上是“用 C 实现的一个脚本语言解释器”,从目标语言的角度来看已经可以和 TypeScript 有一定的可比性,所以说 CPython 汁己就已经是 TypeScript 了,同时还有对等的 Ruby 、Perl 和一些无 JIT 的 Scheme 实现等。( CPython 放在 JS 上应该是“用 JS 实现的一个脚本语言解释器”——因为 JS 作为目标实在是太慢了,所以除了练手项目之外很少见,可以说前端在应用层“AOT 编译”占绝对主导)
和 JS 有类似情况的语言其实不少,C 是最接近的之一,有很多 C 的”超集“,以及一些和 C 完全不同的编程语言是编译到 C 的,同时 C 也广泛作为通用编程语言使用。还有 JVM Bytecode/MSIL/LLVM IR 等,不过这些语言本身设计就是目标语言 /中间语言,并不能作为编程语言。
长远来讲肯定是静态语言更强, 前提是表现力足够强, 允许人们表达绝大多数能想到的程序. 像 Java C#这种抠脚的类型系统很多代码写不出来. 像 Haskell 都有很多程序写不出来, TypeScript 很多时候也不得不用 as any.
最终方向就是 Lambda Cube 全满, 像 Idris 那种 Dependent Type 语言, 不过问题是想写好 IDE 还要等几十年.
然后这个“编译”其实就是 “一键报‘低级’错误” !
其实其它编译型语言,写到“抽象”级别,类型声明一样没有啥帮助,错的跑起来 bug 的地方一样错,一样崩溃;一样在写代码的时候发现不了。
======
当然,有编程语言本身带“编译报错”功能和不带编译报错功能是有区别的。
另外,CPython 是 Python 的 C 实现,Cython 才是一种基于 C+Python 多东东,上面说的很多这个人概念是模糊的
这些问题我相信只要你写了一定量的代码都会遇到,并且在一个社区要支持两种语言的情况下是必然出现的。
Hindley-Milner 的类型系统比 TypeScript 和 Scala 容易理解得多, 人们不用只不过是因为它们长在技能树上的不同分支上罢了. 我只能理解成归根结底是人们思想闭塞, 不愿意接受不同的思想.
我觉得 Paul Graham 的“Blub 语言”很好地解释了这个现象: 为了不伤害某些人的感情, 假设“Blub 语言”即某个平庸的主流语言. 当“Blub 程序员”往鄙视链下面看的时候, 就会觉得“连 X 功能都没有, 简直是辣鸡”. 当“Blub 程序员”往鄙视链上面看的时候, 因为他不能理解这些设计, 因为他只会以 Blub 的形式来思考, 只会觉得“这些功能很奇怪”或者“都是 Blub 功能的语法糖而已”.
因为工业界充满了“Blub 程序员”, 所以有价值的 feature 都要等半个世纪才会 adopt. 很多“Blub 程序员”每天还会抱怨自己做了一段时间的项目都是屎山, 却不能意识到他们的工具早已 underkill 了.
Blub 语言出处: http://www.paulgraham.com/avg.html