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

2023-10-08 16:08:26 +08:00
 gav1nvv

本人工作是 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;
}


2856 次点击
所在节点    程序员
21 条回复
keepRun
2023-10-08 16:40:46 +08:00
感觉学了 java 、c/c++后,对于其它语言语法捡起来很快,我现在主要看语言对应的生态以及我可以用它做啥了,其实实战业务逻辑换语言相差也不会太大,关键是设计思想以及语言的生态
fregie
2023-10-08 16:50:18 +08:00
编程语言有新功能可不一定是什么好事,c++功能够多了吧,大型 c++工程不做很多编码规范的限制的话就是灾难
不同语言有不同特性,适用于不同场景
比如 go,语法很少,有统一的编码风格,有优秀的 interface 设计,就适合用作在大型基础设施工程,但是由于不面向对象,对于业务代码编写其实效率是偏低的
python 这种就相反,弱类型加面向对象,写什么都很快,但是当工程足够大后就会不好维护
ts 和 js 同理

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

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

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

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

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

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

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

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

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

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

你这个说法只能说明对这些不同的语言,你只看懂了语法上的区别
jinsongzhao
2023-10-09 15:30:54 +08:00
这些例子说明了语言是最基础的入门,真正的经验是那些优秀的开源库。用好的库或框架,节省的时间,足够学门新语言了,因此没必要做语言的比较。

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

https://www.v2ex.com/t/979901

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

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

© 2021 V2EX