码农们应该考虑升级C++到rust了

d
database
楼主 (未名空间)

几年前,玩过几次。感觉生态圈不全,就放弃了。

这次写各小项目,看了一下文档,看了看crates  被惊艳了。
actix-web, diesel, 什么的,爽的很啊。

完全是一个高性能的haskill like的python.
开发效率极高。类似python. 理念也继承了很多python.
性能类似c, 没有gc。

编译类似scala FP, haskell. 非常多的问题在编译阶段就给你找出来了。
出来的程序几乎没有 bug.

安全性及其好。
开发理念讲究zero cost 语法糖。

简写太多比较恶心,但是用惯了也好。
可以同时搞windows GUI 和网络web assmebly。

这么强悍的高性能语言,不火没有天理啊。

T
TeacherWei

说得很对。问题是暂时用不上。
关键还是和现有的C/C++整合太费劲。
你要是说做个Web,整个GUI就完事了。那完全可以上。
但是,那些做javascript的就会怼死你。你准备面对100个小菊花吧。

其他的,说实在的,还是C/C++得更全,质量更高!比如我要做一个DTLS/SRTP/STUN/
TURN/SDP/ICE的一个视频方案。现成开源的,非GPL的,高质量的,你其实没啥choice

T
TeacherWei

举个例子,我的中控,要集成一个stun client & server。
本来就有一个成熟的stuntman,这东西很多年了。使用很广。应该上亿了。
谈不上有多好,成熟稳定还是可以的。

但是这玩意儿源代码就有问题。第一是依赖boost,其实只用了一个类,几行代码用STL替换掉了!

还有就是滥用assert。本来收到malformed packet很正常。要能够检测到,扔掉就好了!但是这货非来个assert。如果你编译的时候忘记消掉ASSERT,系统动不动就崩绝对让你摸不着头脑!还没见过把ASSERT当debug断点用的,这回开眼了。

其实开源项目,99.999%基本都是这回事。一行代码不改就能用的开源项目,我这里很
少很少,一个巴掌都不到。

听到有人扯蛋代码可重用,我就想笑。改成源代码可重用绝大多数时候更靠谱。
n
netghost

我就想問一句話,爲啥不管在什麼地方,推rust的人都有一種傳銷組織的畫風?都是一種完美無缺的語氣。

還是說說你自己寫了什麼軟件讓你覺得rust比別的成熟方案好吧。
【 在 database (《※★※§Hey§※★※》) 的大作中提到: 】
: 几年前,玩过几次。感觉生态圈不全,就放弃了。
: 这次写各小项目,看了一下文档,看了看crates  被惊艳了。
: actix-web, diesel, 什么的,爽的很啊。
: 完全是一个高性能的haskill like的python.
: 开发效率极高。类似python. 理念也继承了很多python.
: 性能类似c, 没有gc。
: 编译类似scala FP, haskell. 非常多的问题在编译阶段就给你找出来了。
: 出来的程序几乎没有 bug.
: 安全性及其好。
: 开发理念讲究zero cost 语法糖。
: ...................

c
chebyshev

这些年,简体中文的主要写作态度,和言语态度,有两种:
(1)期望老师发糖的态度
(2)觉得自己是给别人发糖的态度

简言之,真知少见,良知罕见。
【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 我就想問一句話,爲啥不管在什麼地方,推rust的人都有一種傳銷組織的畫風?都是一
: 種完美無缺的語氣。
: 還是說說你自己寫了什麼軟件讓你覺得rust比別的成熟方案好吧。

h
helpme

你不就是第二种?十个字十个字

【 在 chebyshev (......) 的大作中提到: 】
: 这些年,简体中文的主要写作态度,和言语态度,有两种:
: (1)期望老师发糖的态度
: (2)觉得自己是给别人发糖的态度
: 简言之,真知少见,良知罕见。

c
chebyshev

我谈的是文字环境,不是人。这区别,不可不察。
【 在 helpme (名虚胖字满肥) 的大作中提到: 】
: 你不就是第二种?十个字十个字

T
TeacherWei

大家不要过分解读。其实我很想试试rust的。

迟早要找一个新项目,用rust从头做一把。

10年做个项目很正常。这10年,所有轮子都被javascript重写了至少一遍。也没几个人说过啥。

再过20年,大家来相会。rust重写了一遍轮子。也没啥不好。是干人事儿,而且是老年码工们应该做的。

要有耐心,恒心。不要抱着吃热包子的心态。就好。

c
chebyshev

我之前写过小项目。风险大。不宜做产品。另外编译慢,不适合我这种调试算法的项目。
不知现状如何。

不要重写轮子,这话我认为不是第一原理。在车上的轮子,跟不在车上的,那不一样。不在身上的手,那还是手嘛。

多数情况,应该重用代码。
但是我不把“不重造轮子”视为第一原理。

【 在 TeacherWei (TW) 的大作中提到: 】
: 大家不要过分解读。其实我很想试试rust的。
: 迟早要找一个新项目,用rust从头做一把。
: 10年做个项目很正常。这10年,所有轮子都被javascript重写了至少一遍。也没几个人
: 说过啥。
: 再过20年,大家来相会。rust重写了一遍轮子。也没啥不好。是干人事儿,而且是老年
: 码工们应该做的。
: 要有耐心,恒心。不要抱着吃热包子的心态。就好。

T
TeacherWei

10年前,就有各种js轮子了,js重写虚拟机的都有。

当时就已经是既成事实了:anything can be written in js, will be written in js。

反正有人会去干,不以你意志为转移。就像你说的,大家应该感恩。

世界没多少人事儿可干了。总有人manage去干人事儿。没有这些人,世界上将只剩下小菊花了。

【 在 chebyshev(......) 的大作中提到: 】

: 我之前写过小项目。风险大。不宜做产品。另外编译慢,不适合我这种调试算法的项目。

: 不知现状如何。

: 不要重写轮子,这话我认为不是第一原理。在车上的轮子,跟不在车上的,那不一样。

: 不在身上的手,那还是手嘛。

: 多数情况,应该重用代码。

: 但是我不把“不重造轮子”视为第一原理。

s
sui

Deno 有人看吗?
n
netghost

incoming信息遠遠大於自己處理能力的結果就是這樣。
【 在 chebyshev (......) 的大作中提到: 】
: 这些年,简体中文的主要写作态度,和言语态度,有两种:
: (1)期望老师发糖的态度
: (2)觉得自己是给别人发糖的态度
: 简言之,真知少见,良知罕见。

n
netghost

come on,你能不能不要這樣去侮辱rust community?
雖然我覺得他們有點宗教狂熱,但是怎麼樣也不deserve和小菊花這種人品最低的放到
一起評論。
【 在 TeacherWei (TW) 的大作中提到: 】
: 大家不要过分解读。其实我很想试试rust的。
: 迟早要找一个新项目,用rust从头做一把。
: 10年做个项目很正常。这10年,所有轮子都被javascript重写了至少一遍。也没几个人
: 说过啥。
: 再过20年,大家来相会。rust重写了一遍轮子。也没啥不好。是干人事儿,而且是老年
: 码工们应该做的。
: 要有耐心,恒心。不要抱着吃热包子的心态。就好。

x
xiaoju

心态正常点。。。

我很久以来不在BBS上原创只搬运事实,这个世界和你想的不一样不是世界的错

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: come on,你能不能不要這樣去侮辱rust community?
: 雖然我覺得他們有點宗教狂熱,但是怎麼樣也不deserve和小菊花這種人品最低的放到
: 一起評論。

x
xiaoju

楼主要知道,程序写大了,没有gc是影响性能的

【 在 database (《※★※§Hey§※★※》) 的大作中提到: 】
: 几年前,玩过几次。感觉生态圈不全,就放弃了。
: 这次写各小项目,看了一下文档,看了看crates  被惊艳了。
: actix-web, diesel, 什么的,爽的很啊。
: 完全是一个高性能的haskill like的python.
: 开发效率极高。类似python. 理念也继承了很多python.
: 性能类似c, 没有gc。
: 编译类似scala FP, haskell. 非常多的问题在编译阶段就给你找出来了。
: 出来的程序几乎没有 bug.
: 安全性及其好。
: 开发理念讲究zero cost 语法糖。
: ...................

d
database

你可以在等等。
【 在 TeacherWei (TW) 的大作中提到: 】
: 说得很对。问题是暂时用不上。
: 关键还是和现有的C/C++整合太费劲。
: 你要是说做个Web,整个GUI就完事了。那完全可以上。
: 但是,那些做javascript的就会怼死你。你准备面对100个小菊花吧。
: 其他的,说实在的,还是C/C++得更全,质量更高!比如我要做一个DTLS/SRTP/STUN/: TURN/SDP/ICE的一个视频方案。现成开源的,非GPL的,高质量的,你其实没啥
choice
: 。

x
xiaoju

多人视频会议的核心技术是CDN,免费是搞不定的

【 在 database (《※★※§Hey§※★※》) 的大作中提到: 】
: 你可以在等等。
: choice

d
database

rust的确如此。缺点当然有。很难学。

例子, 随手来一个:
简单说一个,做各async的网络爬虫。你可以用pyhton request, scrapy写。
但是有性能可靠性问题。用java太复杂,用Scala 套着IO写的我肝疼。
C# 不能上linux.
C/C++太底层,太多bug。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 我就想問一句話,爲啥不管在什麼地方,推rust的人都有一種傳銷組織的畫風?都是一
: 種完美無缺的語氣。
: 還是說說你自己寫了什麼軟件讓你覺得rust比別的成熟方案好吧。

d
database

trading应该试试。安全性会有很大帮助。
而且写起来类python.远比C考虑的事情少多了。
【 在 TeacherWei (TW) 的大作中提到: 】
: 大家不要过分解读。其实我很想试试rust的。
: 迟早要找一个新项目,用rust从头做一把。
: 10年做个项目很正常。这10年,所有轮子都被javascript重写了至少一遍。也没几个人
: 说过啥。
: 再过20年,大家来相会。rust重写了一遍轮子。也没啥不好。是干人事儿,而且是老年
: 码工们应该做的。
: 要有耐心,恒心。不要抱着吃热包子的心态。就好。

T
TeacherWei

.Net core上Linux无障碍啊。Async based on epoll。
好几年了。

这事儿,.Net肯定更靠谱。

我一直都说,C#是最好的语言。

【 在 database (《※★※§Hey§※★※》) 的大作中提到: 】
: rust的确如此。缺点当然有。很难学。
: 例子, 随手来一个:
: 简单说一个,做各async的网络爬虫。你可以用pyhton request, scrapy写。
: 但是有性能可靠性问题。用java太复杂,用Scala 套着IO写的我肝疼。
: C# 不能上linux.
: C/C++太底层,太多bug。

d
database

很多应用不想要要gc jitter的。
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: 楼主要知道,程序写大了,没有gc是影响性能的

d
database

比前几年好多了。前几年不好用。
【 在 chebyshev (......) 的大作中提到: 】
: 我之前写过小项目。风险大。不宜做产品。另外编译慢,不适合我这种调试算法的项目。
: 不知现状如何。
: 不要重写轮子,这话我认为不是第一原理。在车上的轮子,跟不在车上的,那不一样。
: 不在身上的手,那还是手嘛。
: 多数情况,应该重用代码。
: 但是我不把“不重造轮子”视为第一原理。

x
xiaoju

gc和io buffer,cpu cache一样,都是降低实时性提高执行效率的

你对实时性要求特别高,就得付出相应的代价

【 在 database (《※★※§Hey§※★※》) 的大作中提到: 】
: 很多应用不想要要gc jitter的。

d
database

节选。这段说的非常好。这也是我用的感受。阿猫阿狗的小错误都给你warning出来。
所以开发效率其实极高。

or years now, I’ve been having a crisis of faith in interpreted languages. They’re fast and fun to work in at small scale, but when you have a project that gets big, their attractive veneer quickly washes away. A big Ruby or
JavaScript (just to name a few) program in production is a never ending game of whack-a-mock – you fix one problem only to find a new one somewhere
else. No matter how many tests you write, or how well-disciplined your team, any new development is sure to introduce a stream of bugs that will need to be shored up over the course of months or years.

Central to the problem are the edges. People will reliably do a good job of building and testing the happy paths, but as humans we’re terrible at
considering the edge conditions, and it’s those edges and corners that
cause trouble over the years that a program is in service.

Constraints like a compiler and a discerning type system are tools that help us to find and think about those edges. There’s a spectrum of
permissiveness across the world of programming languages, and my thesis
right now is that more time spent in development satisfying a language’s
rules will lead to less time spent fixing problems online.

Rust
If it’s possible to build more reliable systems with programming languages with stricter constraints, what about languages with the strongest
constraints? I’ve skewed all the way to the far end of the spectrum and
have been building a web service in Rust, a language infamous for its
uncompromising compiler.

The language is still new and somewhat impractical. It’s been a slog
learning its rules around types, ownership, and lifetimes. Despite the
difficulty, it’s been an interesting learning experience throughout, and it’s working. I run into fewer forgotten edge conditions and runtime errors
are way down. Broad refactoring is no longer terror-inducing.

Here we’ll run through some of the more novel ideas and features of Rust,
its core libraries, and various frameworks that make this possible.

The foundation

I built my service on actix-web, a web framework layered on actix, an actor library for Rust. actix is similar to what you might see in a language like Erlang, except that it adds another degree of robustness and speed by making heavy use of Rust’s sophisticated type and concurrency systems. For
example, it’s not possible for an actor to receive a message that it can’t handle at runtime because it would have been disallowed at compile-time.

There’s a small chance that you’ll recognize the name because actix-web
has made its way to the top of the TechEmpower benchmarks. Programs built
for these sorts of benchmarks often turn out to be a little contrived due to their optimizations, but its now contrived Rust code that’s sitting right up at the top of the list with contrived C++ and Java code. But regardless
of how you feel about the validity of benchmark programs, the takeaway is
that actix-web is fast.
The author of actix-web (and actix) commits a prodigious amount of code –
the project is only about six months old, and not only is already more
feature-complete and with better APIs than web frameworks seen in other open source languages, but more so than many of the frameworks bankrolled by
large organizations with huge development teams. Niceties like HTTP/2,
WebSockets, steaming responses, graceful shutdown, HTTPS, cookie support,
static file serving, and good testing infrastructure are readily available
out of the box. The documentation is still a bit rough, but I’ve yet to run into a single bug.

a
alanine

我写了半年了,开发还行吧,就是编译太慢。当然我是从 Haskell 转过来的,门槛基
本没有,只是感觉 Rust 抽象表达能力还是不行,写起来 boiler plate 其实也不算少。
g
guvest

这个arctix-web不久前有个debate?说开发者大量的unsafe code来提速。那不成了cpp嘛。

【 在 database(《※★※§Hey§※★※》) 的大作中提到: 】

: 节选。这段说的非常好。这也是我用的感受。阿猫阿狗的小错误都给你warning
出来。

: 所以开发效率其实极高。

: or years now, I’ve been having a crisis of faith in interpreted
languages.

: They’re fast and fun to work in at small scale, but when you have a
project

: that gets big, their attractive veneer quickly washes away. A big
Ruby or

: JavaScript (just to name a few) program in production is a never
ending game

: of whack-a-mock – you fix one problem only to find a new one
somewhere

: else. No matter how many tests you write, or how well-disciplined your team,

: any new development is sure to introduce a stream of bugs that will
need to

: be shored up over the course of months or years.
: ...................

f
fangtuo2

我在看,觉得设计思想很好。

可是为什么不和npm兼容呢?其实即使兼容,security check可以作呀

【 在 sui(黑圈圈) 的大作中提到: 】

: Deno 有人看吗?

T
TheMatrix

为什么从Haskell转过去呢?

【 在 alanine (尺子) 的大作中提到: 】
: 我写了半年了,开发还行吧,就是编译太慢。当然我是从 Haskell 转过来的,门槛基
: 本没有,只是感觉 Rust 抽象表达能力还是不行,写起来 boiler plate 其实也不算少
: 。

d
database

过分减少boiler plate没有必要。
就是一个工具,那个趁手用那个。

【 在 alanine (尺子) 的大作中提到: 】
: 我写了半年了,开发还行吧,就是编译太慢。当然我是从 Haskell 转过来的,门槛基
: 本没有,只是感觉 Rust 抽象表达能力还是不行,写起来 boiler plate 其实也不算少
: 。

n
netghost

爬蟲這東西我20年前寫過一個,C。爲啥20年後的人反而覺得困難了?
【 在 database (《※★※§Hey§※★※》) 的大作中提到: 】
: rust的确如此。缺点当然有。很难学。
: 例子, 随手来一个:
: 简单说一个,做各async的网络爬虫。你可以用pyhton request, scrapy写。
: 但是有性能可靠性问题。用java太复杂,用Scala 套着IO写的我肝疼。
: C# 不能上linux.
: C/C++太底层,太多bug。

c
cxfcxf

rust给我印象就是没啥生态 都是传销的
还是用go吧
a
alanine

半路进来的一个 VP 要求换语言重写,结果现在他自己先滚蛋了,LOL

以三倍于原来的开发人数,八个月写的 Rust LOC 才刚超过原来 Haskell 的,系统功
能勉强 parity

当然也不能说换到 Rust 完全没好处,毕竟参与的人数多,都觉得自己为项目写了代码做了贡献,对士气有一定的帮助

【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: 为什么从Haskell转过去呢?

h
helpme

不要看LOC,看性能。

【 在 alanine (尺子) 的大作中提到: 】
: 半路进来的一个 VP 要求换语言重写,结果现在他自己先滚蛋了,LOL
: 以三倍于原来的开发人数,八个月写的 Rust LOC 才刚超过原来 Haskell 的,系统功
: 能勉强 parity
: 当然也不能说换到 Rust 完全没好处,毕竟参与的人数多,都觉得自己为项目写了代码
: 做了贡献,对士气有一定的帮助

T
TheMatrix

那就是说还是Haskell强啊。

【 在 alanine (尺子) 的大作中提到: 】
: 半路进来的一个 VP 要求换语言重写,结果现在他自己先滚蛋了,LOL
: 以三倍于原来的开发人数,八个月写的 Rust LOC 才刚超过原来 Haskell 的,系统功
: 能勉强 parity
: 当然也不能说换到 Rust 完全没好处,毕竟参与的人数多,都觉得自己为项目写了代码
: 做了贡献,对士气有一定的帮助

a
alanine

这个结论也不对。组建团队关键在精,不在人数。二十个人不到的精兵,开发效率杠杠的。上到六十,稍微大点决定都要几个组讨论,各种 process 走一遍下来,效率高不
了。而且人数一多,杂七杂八的想法也多,精力旺盛跟你扣细微末节的人也多,内耗严重。

【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: 那就是说还是Haskell强啊。

l
littlebirds

先mark再仔细看。
w
walkrandom

c最大的问题是什么
编译慢
慢的结果是编程效率低
rust没有解决这个问题
h
helpme

什么Haskell,Scala之类的,都是人类发明的糟粕。

【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: 那就是说还是Haskell强啊。

h
helpme

C编译慢?你想说C++吧?另外编译速度和编程效率有啥必然联系,你写一行程序编译一次??

【 在 walkrandom (walkrandom) 的大作中提到: 】
: c最大的问题是什么
: 编译慢
: 慢的结果是编程效率低
: rust没有解决这个问题

n
netghost

你一個寫python的成天關心C編譯速度幹什麼?還有我還在等你的好奇號飛鞚代碼呢,
你到底看過沒啊?

【 在 walkrandom (walkrandom) 的大作中提到: 】
: c最大的问题是什么
: 编译慢
: 慢的结果是编程效率低
: rust没有解决这个问题

T
TheMatrix

你这不正是说Haskell强吗?团队精,人少,效率高。

【 在 alanine (尺子) 的大作中提到: 】
: 这个结论也不对。组建团队关键在精,不在人数。二十个人不到的精兵,开发效率杠杠
: 的。上到六十,稍微大点决定都要几个组讨论,各种 process 走一遍下来,效率高不
: 了。而且人数一多,杂七杂八的想法也多,精力旺盛跟你扣细微末节的人也多,内耗严
: 重。

a
alanine

如果 Rust 团队也是二十人的精兵,才可以比较之后得出这样的结论
【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: 你这不正是说Haskell强吗?团队精,人少,效率高。

a
askagain

看了一圈,这些新的语言都有点怪癖:
Rust 没有 inheritance, 费了半天劲,这么搞下
https://gist.github.com/kyleheadley/6c8860d8fea67c1da2ab18abc6d556b8

还作为 gist 值得 show off 的样子

那个Julia, index start with 1 by default, instead of 0
我就算想试下,多年养成的从0开始的思考习惯也让我犹豫
会不会“习惯”性的写出 off-by-one 的 bug

这些新语言作为后来者,有你独特创新的地方挺好,可是在这种小地方费什么劲
非要和主流不一样?毫无意义的增加普通程序员 switch 想试一下的难度?
行,你们都牛X, 那我可以选择不上船

D lang 在这些新语言里还算正常些,就是 community 还有点小,有人在用吗?

a
askagain

说到怪癖, 苹果设备上只有一个按钮,最常用的返回键要在屏幕上找,也是烦透了

【 在 askagain (aa) 的大作中提到: 】
: 看了一圈,这些新的语言都有点怪癖:
: Rust 没有 inheritance, 费了半天劲,这么搞下
: https://gist.github.com/kyleheadley/6c8860d8fea67c1da2ab18abc6d556b8
: 还作为 gist 值得 show off 的样子
: 那个Julia, index start with 1 by default, instead of 0
: 我就算想试下,多年养成的从0开始的思考习惯也让我犹豫
: 会不会“习惯”性的写出 off-by-one 的 bug
: 这些新语言作为后来者,有你独特创新的地方挺好,可是在这种小地方费什么劲
: 非要和主流不一样?毫无意义的增加普通程序员 switch 想试一下的难度?
: 行,你们都牛X, 那我可以选择不上船
: ...................

a
askagain

D lang 是 Walter Bright (最早写 Symantec C++ ) 和 Andrei Alexandrescu (这
位不用介绍吧)搞的
https://dlang.org/

所以正常些

【 在 askagain (aa) 的大作中提到: 】
: 看了一圈,这些新的语言都有点怪癖:
: Rust 没有 inheritance, 费了半天劲,这么搞下
: https://gist.github.com/kyleheadley/6c8860d8fea67c1da2ab18abc6d556b8
: 还作为 gist 值得 show off 的样子
: 那个Julia, index start with 1 by default, instead of 0
: 我就算想试下,多年养成的从0开始的思考习惯也让我犹豫
: 会不会“习惯”性的写出 off-by-one 的 bug
: 这些新语言作为后来者,有你独特创新的地方挺好,可是在这种小地方费什么劲
: 非要和主流不一样?毫无意义的增加普通程序员 switch 想试一下的难度?
: 行,你们都牛X, 那我可以选择不上船
: ...................