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

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

  •  
  •   gav1nvv ·
    gavinin · 201 天前 · 2657 次点击
    这是一个创建于 201 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本人工作是 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  
       201 天前 via Android
    感觉学了 java 、c/c++后,对于其它语言语法捡起来很快,我现在主要看语言对应的生态以及我可以用它做啥了,其实实战业务逻辑换语言相差也不会太大,关键是设计思想以及语言的生态
    fregie
        2
    fregie  
       201 天前
    编程语言有新功能可不一定是什么好事,c++功能够多了吧,大型 c++工程不做很多编码规范的限制的话就是灾难
    不同语言有不同特性,适用于不同场景
    比如 go,语法很少,有统一的编码风格,有优秀的 interface 设计,就适合用作在大型基础设施工程,但是由于不面向对象,对于业务代码编写其实效率是偏低的
    python 这种就相反,弱类型加面向对象,写什么都很快,但是当工程足够大后就会不好维护
    ts 和 js 同理

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

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

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

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

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

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

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

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

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

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

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