Typescript 如此成功,为何没有发展出所谓 “Typthon”?

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

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

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

既然 Microsoft 肯开发 Typescript , 何不也考虑一下“Typthon”呢?感觉会是大庇天下程序员俱欢颜的大好事啊。
7865 次点击
所在节点    程序员
85 条回复
biochen
135 天前
我的主要写 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 的想法。
xgdgsc
135 天前
还可以试试 https://mp.weixin.qq.com/s/6JCJTnuGQbYqMv4N3Ylj3Q 这个编译类型稳定 julia 代码到 cpp 的国产替代 MATLAB 软件
duzhuo
135 天前
PEP 561 、PEP 484
写出屎山我觉得很多都是故意的
matrix1010
135 天前
"作为编程新手,我爱 Python", 我刚当程序员时也是这样想,但用多了 Go 之后越来越嫌弃 Python
w568w
135 天前
同楼上,你把类型检查器开到 strict ,写起来和静态语言差不多。

Python 是典型的渐进类型( Gradual Typing )语言。也就是说,你可以标注类型以享受类型检查的好处,也可以不标注类型来快速编码。类似的还有 Dart 的 dynamic 、TypeScript 的 any (如果没禁用的话)、PHP 等。

Python 现在的问题是泛型类型支持太差,很多时候不得不采取一些非常尴尬的写法来标注类型。
chenqh
135 天前
@w568w 有基本的类型差不多了,不然像 ts 那种类型体操,何必呢..
DOLLOR
135 天前
@biochen
python 不也是可以 True + 2 ,结果为 3 且不报错嘛。
biochen
135 天前
@DOLLOR #27
原因是 True == 1 ,False == 0
很多语言都可以这么处理 True 和 False ,这个应该算不是 bug ,可以算是 feature 。
Alias4ck
135 天前
js 确实很抽象 至少比 python 抽象多了 ...

[1, 2, 3] + [4, 5, 6]; // -> '1,2,34,5,6'
DOLLOR
135 天前
@biochen
但很多语言是不允许 int 和 bool 未经转换直接参与数学运算的。
像 go 、java 、dart 、swift 都不允许,连 ruby 这种跟 python 同样号称动态+强类型,都不允许。
所以当年 python 2 -> 3 没趁机把这漏网之鱼补上是个失误,后面再说什么理由都只是找补。
leonshaw
135 天前
前端历史原因只能在 JS 上雕花
PopRain
135 天前
python 本来就是做为胶水语言、为非专业开发人员发明的;用来专业开发软件系统是本末倒置
UnluckyNinja
135 天前
python3.5 支持 typing 提示,后端语言确实选择很多,不喜欢 python 的直接就换其他语言了,比如微软直接就 c#了,不像前端只能在 js 上做文章,同时浏览器是微软第一个失去的高地,从另一个方面弥补回来也很正常。虽然很多时候说 xxx 不做总会有别人来做,但更普遍的是 xxx 没做所以现在处于没得用的状态,现在很可能就是后者,推行相关生态的人还没出现
janus77
135 天前
前几年还有很多人在说“人生苦短,我用 Python” 你看这两年还有人提吗?
说白了这语言根本就没有所谓的真的那么让人喜爱,随着你接触到的工程越复杂越是这样。用他只是迫不得已。就这样。
dragondove
135 天前
@JYLu 和 Typescript 那样的差距很大是指什么?如果说是类型运算方面的,那确实没有,但是仅仅是类型提示、静态检查错误检测,python 已经完全具备了。你只要使用带静态检查的语言服务器开严格模式就可以了。复杂代码也是一样的,python 和 typescript 一样支持字面量类型,union 类型而且还是自带 tag 的 union 类型,这方面反而比 typescript 要好用点。
jqtmviyu
135 天前
说真的, 我不太喜欢这门需要游标卡尺的语言. 特别是它的定义类型部分.

我喜欢要么彻底放飞自我, 要么严格执行.

偏偏可以在代码里有的地方限制, 有的不限制, 传参时 字符串 列表 字典 一通乱传也不报错, 等到运行时就开始报错了.
Lockroach
135 天前
每一个语言都有其优势区间和使命,对 py 来说动态类型推导和 type hint 够用了。ts 是因为 js 原生就不支持 type hint ,ts 到 js 还要一层编译。你觉得不够用可以自己 fork 一个 python 实现强制类型标注和增加泛型 feature
june4
135 天前
@biochen 你不喜欢 js 只是因为你写得少而已。我本来也是 python 写了几年,很讨厌 js 。后来转 js 全栈后 js 语法真香,比 py 舒服。你说的类型问题在 ts 里不存在。
dayeye2006199
135 天前
我自己写的时候:写 python 还要写 typehint ,不如回家卖红薯
我看别人写的时候:写 python 竟然不写 typehint ,哪个杀千刀的!
kneo
135 天前
python 的 typehints 和 typescript 本质是一样的。
虽然就目前的表达能力来讲比 typescript 差很多,但是官方的原生支持在很大程度上消灭了竞争者,与其创建个新的转译层,不如继续改进已有的 typhints 。

> 还有编译器对于调试和维护相对复杂的代码也是很有帮助的

只能说不知所云。TypeScript 便于维护代码的原因就是类型标注和静态类型检查。难道还有别的???

> 觉得编译成 Python 不太划算,那么有没有可能编译成比 Python 更低级更快的机器码什么之类的?

所有语言都是编译成比 Python 更低级的代码。

> 以及为什么 JavaScript 能一统前端江湖,后端却没有,感觉前端的花样反而比后端多呀。

因为 JavaScript 是浏览器的原生语言。这个原生语言比后端的原生语言(机器码)要高级。凑合能用+原生支持在很大程度上消灭了竞争者。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1120232

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX