V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gav1nvv
V2EX  ›  程序员

感觉新的编程语言噱头大于改进

  •  
  •   gav1nvv ·
    gavinin · 2023-10-08 16:08:26 +08:00 · 2867 次点击
    这是一个创建于 419 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本人工作是 Go ,也会 Java 和 C++和前端 TS+React ,最开始做的 Java 后转的 Go ( Java 比 Go 熟),最近接触了 Rust 。 以下只是个人观点: 下面的代码实现相同的功能,只是语法不同,学过编译原理感觉只是语法分析的差异,为什么感觉越新的语言,实际的新功能或改进越来越少,往往是效率和安全性方面。 更多的是噱头和为了标新立异而标新立异( fn func function )以及添加一堆语法糖(虽然语法糖很好,但过多的语法糖本身也是学习成本),增加每个语言之间的壁垒,徒增开发者学习成本。

    当然以下这里不包括 ts ,只是拿来举例,在我看来 ts 确实较 js 有大幅优化,减少大量编译错误,虽然需要建立 interface ,但有利有弊吧

    // C++
    #include <iostream>
    #include <string>
    
    std::string getExample() {
        std::string a = "example";
        return a;
    }
    
    
    // Java
     public String getExample() {
            String a = "example";
            return a;
        }
    
    
    // Go
    func getExample() string {
        a := "example"
        return a
    }
    
    
    // Rust
    fn get_example() -> String {
        let a = String::from("example");
        return a;
    }
    
    
    /**
     * ts
     */
    function getExample(): string {
      const a: string = "example";
      return a;
    }
    
    
    
    21 条回复    2023-10-09 16:07:03 +08:00
    keepRun
        1
    keepRun  
       2023-10-08 16:40:46 +08:00 via Android
    感觉学了 java 、c/c++后,对于其它语言语法捡起来很快,我现在主要看语言对应的生态以及我可以用它做啥了,其实实战业务逻辑换语言相差也不会太大,关键是设计思想以及语言的生态
    fregie
        2
    fregie  
       2023-10-08 16:50:18 +08:00
    编程语言有新功能可不一定是什么好事,c++功能够多了吧,大型 c++工程不做很多编码规范的限制的话就是灾难
    不同语言有不同特性,适用于不同场景
    比如 go,语法很少,有统一的编码风格,有优秀的 interface 设计,就适合用作在大型基础设施工程,但是由于不面向对象,对于业务代码编写其实效率是偏低的
    python 这种就相反,弱类型加面向对象,写什么都很快,但是当工程足够大后就会不好维护
    ts 和 js 同理

    站在一个 developer 的角度看其实各种语言区别不大,但是站在 engineer 的角度看就不同了
    idealhs
        3
    idealhs  
       2023-10-08 16:58:48 +08:00
    你的例子只是返回一个 string 恐怕没有任何说服力,你这里面的语言就已经包括了原生编译语言,运行时语言以及脚本语言,他们根本的原理都不同,在处理线程,异步等等情况的表现都不同。语法分析完了以后大家都是怎么运行的呢?
    ShuWei
        4
    ShuWei  
       2023-10-08 16:59:43 +08:00
    在合适的场合,用一门合适的语言就行,你喜欢啥就用啥

    从我个人想法出发,我倒是乐于见到一些新的语言冒出来的,虽然确实有滥竽充数的,但目前来看,总体还是向好,基本上新的语言都会带来一些新的思想,以前老的语言也可以在更新中吸收一些好的更现代的设计思想进去,你好我好大家好,比如 java 最近很火的协程,应该是没少借鉴一些比它新的语言,大家共同进步,不是挺好么,骨折式创新不常有,珍惜这些正在默默发生的改进吧
    monmon
        5
    monmon  
       2023-10-08 17:04:40 +08:00   ❤️ 2
    或许可以了解一下 Rust 是怎么做到 GC Free 的,以及不同语言的 GC 差异,就不会有这个标题了吧......
    PTLin
        6
    PTLin  
       2023-10-08 17:14:39 +08:00   ❤️ 1
    就你举得这个例子就有太多能说的了,cpp 讲非 explicit constructor 构造函数的调用,返回时的拷贝构造函数来说明 cpp 的复杂构造过程。
    go 讲 string 是一种 slice 内有一个堆上指针和一个长度,返回是复制了这个 slice ,解释了 go 的变量都是按值复制的。
    java 可以讲字符串常量池,以及 string 是个引用类型。
    rust 可以讲&str 和 string 的关系,String 的 Drop 所有权模型以及变量返回时变量的 move 。
    AugOmin
        7
    AugOmin  
       2023-10-08 17:15:30 +08:00
    啊,至少 Rust 完全不是啊,新语言出现还是因为旧语言沉重的历史包袱,有些特性需要很底层的实现
    wjx0912
        8
    wjx0912  
       2023-10-08 17:16:14 +08:00
    语法没必要死记,需要时花两三天捡起来即可
    https://learnxinyminutes.com/
    libook
        9
    libook  
       2023-10-08 17:17:08 +08:00   ❤️ 2
    语言都是工具,选择什么语言主要看什么需求痛点。

    如果你用语言 A 没有遇到满足不了需求痛点的情况,那么语言 B 特有的特性对你来说就是无用的“噱头”。

    另外每种语言都可以看作是产品,有特定的设计目标和适用范围。你所列出的这些语言,之所以存在至今,都是因为它们各有所长。

    Go 算是一种精准地解决企业级服务开发诸多问题的产品,牺牲灵活性提高多人开发的一致性,使得大多需求都有明确的实现方案,再加上 runtime 本身性能优化足够好,成为了企业生产的利器。

    TS 是一种在不得不用 JS 的场景下降低开发难度的产品。由于 JS 十分灵活,而越灵活反而对开发者的要求越高,所以 TS 也是使用增加约束降低灵活性的方式来降低对开发者的要求,使得代码可读性更高、缺陷更少,从而提升生产效率。

    Rust 算是一种,从尝试不使用 GC 来解决内存安全问题的思维实验,而衍生出的特色产品。为“无 GC 但有内存安全风险”和“无内存安全风险但有 GC”两种方向增加了“无 GC 无内存安全风险”的选择。在一些如操作系统、驱动、科学计算等不得不用 C/C++的场景下,提供了一种可能可以较低成本规避内存安全风险的方案。

    如果你的需求只是写一个函数,赋值一个字符串并返回,那就肯定不会涉及到上述各语言的卖点。
    testonly
        10
    testonly  
       2023-10-08 17:17:39 +08:00
    等下一代,AI ,你说个要求他自动给你编一大段出来。
    gav1nvv
        11
    gav1nvv  
    OP
       2023-10-08 17:38:11 +08:00
    @idealhs 你说的有道理,我的表达可能不准确,我在想的是,前面的语法分析其实不大需要变动,func fun 和 function 只是保留字不一样
    archxm
        12
    archxm  
       2023-10-08 17:45:49 +08:00
    99.99%的人,都不需要 rust 带来的性能和安全性提升。
    楼主是对的。
    LykorisR
        13
    LykorisR  
       2023-10-08 22:33:53 +08:00
    比如说 TS ,单独这一点代码看不出来,但是大的工程中相比 JS 就要避免很多问题,而且如果用 IDE 的话,TS 的代码补全个人感觉是要比 JS 好很多的。
    像你说的 Rust 的问题,举个例子 Rust 的错误处理就没有采用常见的 try catch finally 模式,而是用的 Result 这种,虽然写起来要略微复杂,但是个人感觉逻辑更为清晰了,也有其独特的优点
    kneo
        14
    kneo  
       2023-10-09 01:14:10 +08:00 via Android
    因为那些你口中的“噱头”你都不懂啊。

    你只在比较自己懂的东西。哪怕只是返回一个字符串这样的简单函数,你都看不明白 Rust 和 Go 和 C++里本质的不同。你只看得到 func/fn 关键词不一样这种表面的东西。

    再看下你的标题,狂妄的可笑。
    githmb
        15
    githmb  
       2023-10-09 09:59:40 +08:00
    99.99%的人,都不需要编程。
    楼主是对的。
    8355
        16
    8355  
       2023-10-09 10:03:58 +08:00
    语言的改进不是在编码上,拿 go 举例对比 java ,最大的不同就是处处都不同。。。。
    你对语言的理解只是编码层面吗。。。。
    学过编译原理感觉只是语法分析的差异???????你学的啥
    Ally
        17
    Ally  
       2023-10-09 10:08:59 +08:00
    如果真有一个语言能够做到“完美”,那自然不会有这么多语言了。现在的情况就是每个语言都有它所侧重,所适合的领域。对开发者来说,你需要什么就用什么。
    gav1nvv
        18
    gav1nvv  
    OP
       2023-10-09 10:27:51 +08:00
    我的解释一下,我的看法
    1. 关键字这种东西的差异只存在于编译阶段,没有必要改变
    2. 多数语言的源码,可以在不改变代码的情况下修改底层,举例 你说 Java 的代码如果使用特定的编译器一样能编译为 go 的二进制,比如 func example() string{} 和 String example(){} 只是位置的不同
    penguinWWY
        19
    penguinWWY  
       2023-10-09 12:57:22 +08:00
    哪个语言会把 fn 、func 、function 这种关键字的变动当做“噱头”的,人家都是宣传自己安全性、性能、简洁、抽象能力。。。

    你这个说法只能说明对这些不同的语言,你只看懂了语法上的区别
    jinsongzhao
        20
    jinsongzhao  
       2023-10-09 15:30:54 +08:00
    这些例子说明了语言是最基础的入门,真正的经验是那些优秀的开源库。用好的库或框架,节省的时间,足够学门新语言了,因此没必要做语言的比较。
    duli950523
        21
    duli950523  
       2023-10-09 16:07:03 +08:00
    你这个例子,就是拿汇编来,都没啥大差别。。例子也太离谱了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2658 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:10 · PVG 19:10 · LAX 03:10 · JFK 06:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.