V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
JYLu
V2EX  ›  程序员

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

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

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

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

    既然 Microsoft 肯开发 Typescript , 何不也考虑一下“Typthon”呢?感觉会是大庇天下程序员俱欢颜的大好事啊。
    68 条回复    2025-03-22 23:40:48 +08:00
    Leviathann
        1
    Leviathann  
       1 天前
    以前有个语言叫 coffeescript
    Leviathann
        2
    Leviathann  
       1 天前   ❤️ 1
    python 现在也有类型标记
    JYLu
        3
    JYLu  
    OP
       1 天前
    @Leviathann Coffeescript 似乎不是太流行。不过你举的这个例子为什么说明没有发展出 “Typthon” 呢?
    povsister
        4
    povsister  
       1 天前
    因为用屁眼通红的人,一般都是小项目或者 demo 性质,大多忙于搬砖哪有空搞这些有的没得。
    DOLLOR
        5
    DOLLOR  
       1 天前
    你想要的是 typescript 那样的生态,还是类似的语法?
    如果说是语法,python 本来就有 type hints 。想写类型标注,现在就可以开始,还不用预先编译。不需要再发明什么 typthon 。
    https://docs.python.org/3/library/typing.html
    JYLu
        6
    JYLu  
    OP
       1 天前
    @povsister 现在也有用 Python 写大型项目的了吧,Typescript 不就是这么出来的么?干这种编程语言改造工作的肯定不是只能写小项目的等闲之辈。Microsoft 大佬如云,他们自己也用的很多,按理说应该是有这种条件的。
    JYLu
        7
    JYLu  
    OP
       1 天前
    @DOLLOR 但是类型标注和 Typescript 那样的类型系统的差距还是很大的呀。不仅是类型的问题,还有编译器对于调试和维护相对复杂的代码也是很有帮助的。
    cmdOptionKana
        8
    cmdOptionKana  
       1 天前   ❤️ 8
    我想到了一个原因:前端是没得选,迫不得已需要 Typescript 来曲线救国。但后端( Python 所在的领域)有一大堆静态语言,你选择 Python 只是偏好,而不是必须。

    对于公司来说,“偏好”不太重要,有现成的静态语言直接拿来用就行,因此各家公司对 Typthon 的兴趣不大。而个人又没那个时间精力。
    cmdOptionKana
        9
    cmdOptionKana  
       1 天前
    而且,搞个 Typthon ,最后编译为 Python 代码,还得忍受运行效率低。那还不如直接用 Go, Rust, Java 之类的,既有静态编译,运行效率又高,何苦执着 Python 。
    JYLu
        10
    JYLu  
    OP
       1 天前
    @cmdOptionKana #9 您说的这个似乎有点道理。可能是觉得编译成 Python 不太划算,那么有没有可能编译成比 Python 更低级更快的机器码什么之类的?以及为什么 JavaScript 能一统前端江湖,后端却没有,感觉前端的花样反而比后端多呀。
    zk8802
        11
    zk8802  
       1 天前 via iPhone
    看看 Nuitka 。
    szzhiyang
        12
    szzhiyang  
       1 天前   ❤️ 3
    因为已经有 Go 语言了。
    Trim21
        13
    Trim21  
       1 天前 via Android
    你把 type checker 开 strict ,不用 any 不用 cast ,也能体会到写静态语言的感觉
    nanajj
        14
    nanajj  
       1 天前
    需要有足够的动力开发,和足够的驱动力让人使用。 比如 Kotlin 是好,但让 Java 的转动力没 JS 到 TS 那么强。要足够成功,CoffeeScript 就是一个失败的例子。

    最最最重要的,前端真的没得选,只能在 JS 路径上找最优解。 后端,PHP 、Java 、Python, C#,GO 甚至 Rust c++ erlang 等等, 你想要什么风格的就有什么风格的
    tanhui2333
        15
    tanhui2333  
       1 天前
    天堂有路你不走,地狱无门自来投
    JYLu
        16
    JYLu  
    OP
       1 天前 via Android
    @tanhui2333 劳烦您明确赐教。
    tanhui2333
        17
    tanhui2333  
       1 天前
    @JYLu 回错地方了,不好意思
    chonh
        18
    chonh  
       1 天前 via iPhone
    mojo?
    loading
        19
    loading  
       20 小时 39 分钟前
    JavaScript 基础语法亘古不变,Python 还没稳定。
    xgdgsc
        20
    xgdgsc  
       19 小时 54 分钟前
    真没那么多人喜欢 Python 的语法缩进和 OOP ,你这标题一开始我还以为是 https://github.com/Suzhou-Tongyuan/jnumpy/tree/main/TyPython 这个 julia 和 python 交互的包呢。 最近 colab 支持了 julia 可以试试 https://juliahub.com/blog/julia-now-available-on-google-colab
    biochen
        21
    biochen  
       19 小时 52 分钟前   ❤️ 5
    我的主要写 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
        22
    xgdgsc  
       19 小时 50 分钟前
    还可以试试 https://mp.weixin.qq.com/s/6JCJTnuGQbYqMv4N3Ylj3Q 这个编译类型稳定 julia 代码到 cpp 的国产替代 MATLAB 软件
    duzhuo
        23
    duzhuo  
       19 小时 30 分钟前
    PEP 561 、PEP 484
    写出屎山我觉得很多都是故意的
    matrix1010
        24
    matrix1010  
       19 小时 28 分钟前   ❤️ 1
    "作为编程新手,我爱 Python", 我刚当程序员时也是这样想,但用多了 Go 之后越来越嫌弃 Python
    w568w
        25
    w568w  
       19 小时 22 分钟前
    同楼上,你把类型检查器开到 strict ,写起来和静态语言差不多。

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

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

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

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

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

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

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

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

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

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

    因为 JavaScript 是浏览器的原生语言。这个原生语言比后端的原生语言(机器码)要高级。凑合能用+原生支持在很大程度上消灭了竞争者。
    Tanix2
        41
    Tanix2  
       16 小时 2 分钟前   ❤️ 1
    大点的项目我必用 mypy
    JYLu
        42
    JYLu  
    OP
       15 小时 54 分钟前 via Android
    @janus77 以前强调 Python 是脚本语言,不适合复杂工程,这倒也没错。然而现在 Python 的大型项目是越来越多了吧,而且这个问题的出发点不就是这样么?推出"Typthon" 使得 Python 更易被应用到大型项目中。
    JYLu
        43
    JYLu  
    OP
       15 小时 48 分钟前 via Android
    同志们,我发这个帖子只是开脑洞而已。没有比较不同语言优劣的意思,大家不要误解。
    Felldeadbird
        44
    Felldeadbird  
       15 小时 35 分钟前
    我觉得用 typython 为什么我不用别的开发语言。js 是因为 web 端发展不得不衍生出来的。
    luting
        45
    luting  
       15 小时 29 分钟前   ❤️ 1
    想写就去学 Type Hint(类型注解), Python 一直以来这种实现都是君子协定(即人的问题处理人, 程序的问题处理程序, 而不是程序去处理人的问题)

    而且如果你好好学过 Python 的话应该知道 Python 是没有严格的私有属性的, 而且这种静态检查是可以通过 mypy 去实现的, 选择权交还给用户, 你可以拿 Python 写静态或不写静态, 所以用 Python 的人才多

    你有需求你可以自己用, 但你不能强迫别人也去适应你的需求和习惯(即把类型检查嵌入到解释器中), 如果你喜欢这种严格的约束, 那学 Rust 是更好的选择

    如果是喜欢 TypeScript 的静态检查带来的错误提示, 那只是因为 VSCode 自带了 TS 的语言服务器, 你可以给 VSCode 安装 Pylance 插件(这个是 Python 的语言服务器), 并把 Pylance 的类型检查开启为基本状态或者严格状态 (相信我, 如果你的包结构足够复杂, 你是绝对不会喜欢严格的类型检查, 如果说 Go 是在处理错误, 那严格的 Python 就一直在写类型)

    培训班或者科班没讲的东西, 不是 Python 没有只是他们没讲, Python 这么多包, 没事多看看优秀的包的源代码

    静态类型是非常方便维护的东西, 即让代码明确清晰有自解释, 但是对于 Python 的另一个场景, 大部分普通人拿来当脚本, 写一堆静态类型出了降低效率并不会带来多余的好处.

    如果你要开发 Python 包, 那就应该使用静态类型, 如果这是脚本, 除了代码量特别大的, 那就不需要. 简单讲, 你需要在开发速度和可维护性上自己去权衡如何使用, Python 将选择权交还给了用户.

    最后, 请尊重别的开发者, 他们在该如何设计编程语言上肯定要比我们这种设计都没设计过的要懂的多.
    chiaf
        46
    chiaf  
       15 小时 6 分钟前 via iPhone
    虽然没有 tyPython ,但是有 pyScript 🤪
    mark2025
        47
    mark2025  
       14 小时 55 分钟前   ❤️ 1
    帖主看看 Typescript 的首席开发是谁,他以往经历有哪些~~
    最主要的是 Typescript 后面是微软,有足够的人力财力可以投入。
    iorilu
        48
    iorilu  
       14 小时 38 分钟前
    python 添加类型注解多少年了把

    而且这不是强制的

    你需要就都添加上呗
    ansnail
        49
    ansnail  
       13 小时 23 分钟前
    @JYLu #10 JavaScript 能一统前端江湖靠的不是优秀,而是出生的早,前端花样多,但内核就那么几家。服务器不需要统一的解析标准,能给自家提供数据就行,随便折腾。
    twig
        50
    twig  
       13 小时 13 分钟前 via iPhone
    除了 type hint 还有 Pydantic 呢。
    mdn
        51
    mdn  
       12 小时 59 分钟前
    因为 JavaScript 无可取代
    irisdev
        52
    irisdev  
       11 小时 38 分钟前
    ts 出现时 ie 还没死透,chrome 也还没有一统天下,node.js 生态开始活跃,微软研发 ts 肯定有商业上的考虑。至于 py ,搞这个就吃力不讨好了,何况 py3 已经有类型了
    Hopetree
        53
    Hopetree  
       11 小时 12 分钟前
    python 现在就是有类型定义的,但是我不喜欢用,python 的优势本身就是编写和实用快捷,如果都写类型,感觉还不如去用 Go
    chenqh
        54
    chenqh  
       11 小时 7 分钟前
    @Hopetree 但是 py 现在可以实现一些自己用的 utils 写类型,业务不写类型.这也是一种优势吧.如果 utils 可以复用的话,写类型还有必要,如果是一次性的,就没有必要写了.
    akira
        55
    akira  
       11 小时 3 分钟前
    一款语言 ,他有啥没啥 ,那就是这个语言的特性。 不要老想着 A 语言有的东西,B 语言就一定要有。
    选择适合自己的语言就是了。 语言本身不重要的
    roundgis
        56
    roundgis  
       11 小时 2 分钟前 via Android
    Python 的 yype hint 和 jsdoc 差不多

    當然我現在也是用 jsdoc 比較多
    kaki1lI
        57
    kaki1lI  
       10 小时 54 分钟前
    大型项目用 pydantic 和 mypy 会方便维护,ruff 的语法检查多开一些也有帮助
    lts9165
        58
    lts9165  
       10 小时 2 分钟前
    python 有 pydantic ,自由,可以比强类型更强
    Levox
        59
    Levox  
       9 小时 33 分钟前
    Python Type Hints 简明教程
    https://zhuanlan.zhihu.com/p/464979921
    qiaobeier
        60
    qiaobeier  
       9 小时 22 分钟前
    @Leviathann #1 朋友你 40 了吧?
    Al0rid4l
        61
    Al0rid4l  
       8 小时 31 分钟前
    社区文化很不一样的, 前端是一个语法还在 stage3 就有一堆项目敢给你上生产, py 从 2 到 3 过渡都用了多少年, 也就比 Java8 好一点吧

    抛开社区文化因素, 还有非常重要的一点是, VSCode 在一开始就用了 TypeScript, 且一开始就对前端提供了一流的支持(开箱即用的补全和浏览器 Node 调试), 并且 VSCode 飞速发展取得巨大成功带来的示范效应也是很足, 这种重量级应用不亚于 Docker K8s 之于 Go, JS 四个爹, 三个传说级(水果 Google MS)一个史诗级(Moz), TS 亲爹 Anders 也是传说级, 从社区, 到背后公司(钱), 到设计者(品味), 到重量级应用(光环示范), TS 是属于是 buff 叠满了

    VSC 和 TS 差不多同时出生, 互相成就, 假如 VSC 一开始没多久就烂了, 那指不定 TS 可能又是另一个 Flow, 在人们眼里可能也就一个普通的大公司内部用的小众语言罢了, 再叠个强运 buff (
    me1onsoda
        62
    me1onsoda  
       8 小时 22 分钟前
    因为 Python 不是工业编程语言吧,就是很少用来做业务的。
    me1onsoda
        63
    me1onsoda  
       8 小时 16 分钟前
    说来也挺奇怪的,都说前端娱乐圈,结果在编程语言上 js 一家独大,居然没得选,没人在编程语言上动歪脑筋搞 kpi 。后端却娱乐地五花八门。
    Leviathann
        64
    Leviathann  
       8 小时 9 分钟前
    @qiaobeier 我只是听过 没用过
    junkun
        65
    junkun  
       7 小时 52 分钟前
    @DOLLOR bool 在 python 里实际上是 int 的子类,issubclass(bool, int) == True 。虽然定义有些魔法,但是既然是子类不能计算反而也很奇怪。
    wizardyhnr
        66
    wizardyhnr  
       7 小时 35 分钟前
    你要找的是不是 Mojo?
    nirnovo
        67
    nirnovo  
       7 小时 33 分钟前
    typthon? 认真的吗? 中文翻译成胎神???
    Magicdove
        68
    Magicdove  
       6 小时 44 分钟前
    @nirnovo 笑死了🤣
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   940 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:25 · PVG 06:25 · LAX 15:25 · JFK 18:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.