作为编程新手,我爱 Python 。我认为这是一个简洁好用的语言,生态丰富,官方文档细致,社区活跃。我本人目前在读研,是做应用数学里面算法方向的,做算法实验的时候,Python 简洁的语法和高质量的数值计算库使得实验编码的效率大大提高。

然而 Python 的类型有点过于灵活,这使得我在写程序的时候不时感到担忧,比如担心传参的时候传入非法的数据然而 IDE 却不能提醒我。类似地,这种强大的灵活性有时也使得调试 Python 程序变得很困难。比方讲假如你的程序里有不止一处语法错误,这些语法错误可能只能在运行时才能被发现。而且似乎运行一次只能找出一处错误,你需要不断地运行才能查找到所有的语法错误。

鉴于 Javascript-> Typescript 的大获成功,为什么没有发展出所谓的 “Typthon” ?既有 Python 简易的语法,又有很好地的 Python 的互操作性从而可以轻松地继承 Python 丰富的生态和活跃的社区,借助编译器使得调试维护程序更加轻松,岂不美哉?

既然 Microsoft 肯开发 Typescript , 何不也考虑一下“Typthon”呢?感觉会是大庇天下程序员俱欢颜的大好事啊。

以前有个语言叫 coffeescript

python 现在也有类型标记

Coffeescript 似乎不是太流行。不过你举的这个例子为什么说明没有发展出 “Typthon” 呢?

因为用屁眼通红的人,一般都是小项目或者 demo 性质,大多忙于搬砖哪有空搞这些有的没得。

你想要的是 typescript 那样的生态,还是类似的语法?
如果说是语法,python 本来就有 type hints 。想写类型标注,现在就可以开始,还不用预先编译。不需要再发明什么 typthon 。
docs.python.org/3/library/typing.html

现在也有用 Python 写大型项目的了吧,Typescript 不就是这么出来的么?干这种编程语言改造工作的肯定不是只能写小项目的等闲之辈。Microsoft 大佬如云,他们自己也用的很多,按理说应该是有这种条件的。

但是类型标注和 Typescript 那样的类型系统的差距还是很大的呀。不仅是类型的问题,还有编译器对于调试和维护相对复杂的代码也是很有帮助的。

我想到了一个原因:前端是没得选,迫不得已需要 Typescript 来曲线救国。但后端( Python 所在的领域)有一大堆静态语言,你选择 Python 只是偏好,而不是必须。

对于公司来说,“偏好”不太重要,有现成的静态语言直接拿来用就行,因此各家公司对 Typthon 的兴趣不大。而个人又没那个时间精力。

而且,搞个 Typthon ,最后编译为 Python 代码,还得忍受运行效率低。那还不如直接用 Go, Rust, Java 之类的,既有静态编译,运行效率又高,何苦执着 Python 。

#9 您说的这个似乎有点道理。可能是觉得编译成 Python 不太划算,那么有没有可能编译成比 Python 更低级更快的机器码什么之类的?以及为什么 JavaScript 能一统前端江湖,后端却没有,感觉前端的花样反而比后端多呀。

看看 Nuitka 。

因为已经有 Go 语言了。

你把 type checker 开 strict ,不用 any 不用 cast ,也能体会到写静态语言的感觉

需要有足够的动力开发,和足够的驱动力让人使用。 比如 Kotlin 是好,但让 Java 的转动力没 JS 到 TS 那么强。要足够成功,CoffeeScript 就是一个失败的例子。

最最最重要的,前端真的没得选,只能在 JS 路径上找最优解。 后端,PHP 、Java 、Python, C#,GO 甚至 Rust c++ erlang 等等, 你想要什么风格的就有什么风格的

天堂有路你不走,地狱无门自来投

劳烦您明确赐教。

回错地方了,不好意思

mojo?

JavaScript 基础语法亘古不变,Python 还没稳定。

真没那么多人喜欢 Python 的语法缩进和 OOP ,你这标题一开始我还以为是 github.com/Suzhou-Tongyuan/jnumpy/tree/main/TyPython 这个 julia 和 python 交互的包呢。 最近 colab 支持了 julia 可以试试 juliahub.com/blog/julia-now-available-on-google-colab

我的主要写 Python ,也以 Python 的方式写过 C++。因为用 Django 做网站,也写一点 JavaScript 代码。

Python 和 C++非常优雅,JavaScript 则是一言难尽。

举例:a = 1, b = "2", a + b = ?
Python 会报类型错误,TypeError: unsupported operand type(s) for +: 'int' and 'str'。
JavaScript 的答案是"12"。

Python 是动态类型,但是强类型,不会隐式转换类型。C++是静态类型,数字 a ,其实也可以转换为字符 b ,不能重用变量名 a 而已; Python 的动态类型,更加方便,可以看成语法糖。C++的变量都有显式的定义,阅读 C++代码,可以清楚地知道每一步的输入和输出是什么。Python 的变量可以是隐式定义,根据变量值,Python 选一个合适的变量类型; Python 的变量类型还能改变。读 Python 代码时,不借助代码阅读工具提示变量类型,非常地吃力。所以,type hints 出现了,可以像 C++那样显性标注类型,方便人类阅读。

JavaScript 也是动态类型,但是是弱类型,1 + "2"会隐式转换得到"12"这个结果。你其实是忘记将"2"转换成 2 了,你本来期待的结果是 3 ,结果 JavaScript 得到了一个错误的答案“12”,而没有报错。

JavaScript 粉可能会觉得,你看我 JavaScript 多么灵活啊,但是这种“灵活”会让程序员有额外的心智负担,需要熟悉这种“灵活”。

JavaScript 推出时非常匆忙,里面的“灵活”或者“坑”太多了,JavaScript 自己还有严格模式。奈何历史负担太大,不能废掉 JavaScript 。所以有 TypeScript 这种严格的 JavaScript ,方便程序员编码和维护,然后翻译成 JavaScript 交给浏览器执行。

Python 一直很严谨,经历 Python2 到 Python3 的升级后,很多不 Python 的特性也修复了,目前社区没有出 Python4 的想法。

还可以试试 mp.weixin.qq.com/s/6JCJTnuGQbYqMv4N3Ylj3Q 这个编译类型稳定 julia 代码到 cpp 的国产替代 MATLAB 软件