本人工作是 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;
}
1
keepRun 2023-10-08 16:40:46 +08:00 via Android
感觉学了 java 、c/c++后,对于其它语言语法捡起来很快,我现在主要看语言对应的生态以及我可以用它做啥了,其实实战业务逻辑换语言相差也不会太大,关键是设计思想以及语言的生态
|
2
fregie 2023-10-08 16:50:18 +08:00
编程语言有新功能可不一定是什么好事,c++功能够多了吧,大型 c++工程不做很多编码规范的限制的话就是灾难
不同语言有不同特性,适用于不同场景 比如 go,语法很少,有统一的编码风格,有优秀的 interface 设计,就适合用作在大型基础设施工程,但是由于不面向对象,对于业务代码编写其实效率是偏低的 python 这种就相反,弱类型加面向对象,写什么都很快,但是当工程足够大后就会不好维护 ts 和 js 同理 站在一个 developer 的角度看其实各种语言区别不大,但是站在 engineer 的角度看就不同了 |
3
idealhs 2023-10-08 16:58:48 +08:00
你的例子只是返回一个 string 恐怕没有任何说服力,你这里面的语言就已经包括了原生编译语言,运行时语言以及脚本语言,他们根本的原理都不同,在处理线程,异步等等情况的表现都不同。语法分析完了以后大家都是怎么运行的呢?
|
4
ShuWei 2023-10-08 16:59:43 +08:00
在合适的场合,用一门合适的语言就行,你喜欢啥就用啥
从我个人想法出发,我倒是乐于见到一些新的语言冒出来的,虽然确实有滥竽充数的,但目前来看,总体还是向好,基本上新的语言都会带来一些新的思想,以前老的语言也可以在更新中吸收一些好的更现代的设计思想进去,你好我好大家好,比如 java 最近很火的协程,应该是没少借鉴一些比它新的语言,大家共同进步,不是挺好么,骨折式创新不常有,珍惜这些正在默默发生的改进吧 |
5
monmon 2023-10-08 17:04:40 +08:00 2
或许可以了解一下 Rust 是怎么做到 GC Free 的,以及不同语言的 GC 差异,就不会有这个标题了吧......
|
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 。 |
7
AugOmin 2023-10-08 17:15:30 +08:00
啊,至少 Rust 完全不是啊,新语言出现还是因为旧语言沉重的历史包袱,有些特性需要很底层的实现
|
8
wjx0912 2023-10-08 17:16:14 +08:00
语法没必要死记,需要时花两三天捡起来即可
https://learnxinyminutes.com/ |
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++的场景下,提供了一种可能可以较低成本规避内存安全风险的方案。 如果你的需求只是写一个函数,赋值一个字符串并返回,那就肯定不会涉及到上述各语言的卖点。 |
10
testonly 2023-10-08 17:17:39 +08:00
等下一代,AI ,你说个要求他自动给你编一大段出来。
|
11
gav1nvv OP @idealhs 你说的有道理,我的表达可能不准确,我在想的是,前面的语法分析其实不大需要变动,func fun 和 function 只是保留字不一样
|
12
archxm 2023-10-08 17:45:49 +08:00
99.99%的人,都不需要 rust 带来的性能和安全性提升。
楼主是对的。 |
13
LykorisR 2023-10-08 22:33:53 +08:00
比如说 TS ,单独这一点代码看不出来,但是大的工程中相比 JS 就要避免很多问题,而且如果用 IDE 的话,TS 的代码补全个人感觉是要比 JS 好很多的。
像你说的 Rust 的问题,举个例子 Rust 的错误处理就没有采用常见的 try catch finally 模式,而是用的 Result 这种,虽然写起来要略微复杂,但是个人感觉逻辑更为清晰了,也有其独特的优点 |
14
kneo 2023-10-09 01:14:10 +08:00 via Android
因为那些你口中的“噱头”你都不懂啊。
你只在比较自己懂的东西。哪怕只是返回一个字符串这样的简单函数,你都看不明白 Rust 和 Go 和 C++里本质的不同。你只看得到 func/fn 关键词不一样这种表面的东西。 再看下你的标题,狂妄的可笑。 |
15
githmb 2023-10-09 09:59:40 +08:00
99.99%的人,都不需要编程。
楼主是对的。 |
16
8355 2023-10-09 10:03:58 +08:00
语言的改进不是在编码上,拿 go 举例对比 java ,最大的不同就是处处都不同。。。。
你对语言的理解只是编码层面吗。。。。 学过编译原理感觉只是语法分析的差异???????你学的啥 |
17
Ally 2023-10-09 10:08:59 +08:00
如果真有一个语言能够做到“完美”,那自然不会有这么多语言了。现在的情况就是每个语言都有它所侧重,所适合的领域。对开发者来说,你需要什么就用什么。
|
18
gav1nvv OP 我的解释一下,我的看法
1. 关键字这种东西的差异只存在于编译阶段,没有必要改变 2. 多数语言的源码,可以在不改变代码的情况下修改底层,举例 你说 Java 的代码如果使用特定的编译器一样能编译为 go 的二进制,比如 func example() string{} 和 String example(){} 只是位置的不同 |
19
penguinWWY 2023-10-09 12:57:22 +08:00
哪个语言会把 fn 、func 、function 这种关键字的变动当做“噱头”的,人家都是宣传自己安全性、性能、简洁、抽象能力。。。
你这个说法只能说明对这些不同的语言,你只看懂了语法上的区别 |
20
jinsongzhao 2023-10-09 15:30:54 +08:00
这些例子说明了语言是最基础的入门,真正的经验是那些优秀的开源库。用好的库或框架,节省的时间,足够学门新语言了,因此没必要做语言的比较。
|
21
duli950523 2023-10-09 16:07:03 +08:00
你这个例子,就是拿汇编来,都没啥大差别。。例子也太离谱了
|