我来推一下C++吧

wdong
楼主 (未名空间)

C++已经不是活命语言了。活命语言是python或者js。
我这是和rust, go, swift这种二流语言相比而言。如果
非要花时间学一个语言,C++是值得投资的。
----

如果已经会了一种编程语言,想再找事或者技术上进一步提高,
还是C++一步到位吧。这个世界上,C++之上别无第二个语言。
特别是python/R的用户,可以给现有项目写扩展。
就跟买电子垃圾似的,如了门以后要有钱,看准了最好狠
下心来买个好的用十年。

目前的C++,对于库的作者我感觉其实并不友好。
但是对于没有历史负担的一般用户,可以写出很漂亮的代码。

下面贴一些学习材料:

C++FAQ,第二语言可以直接跳过教科书看这个https://isocpp.org/faq

现代C++新特性,适合C/C++老帮菜返老还童所需https://github.com/AnthonyCalandra/modern-cpp-features
https://github.com/fffaraz/awesome-cpp

我最近看了圈开源库,对一些常用库进行了更新:

boost::program_options -> CLI/CLI.hpp
glog -> spdlog
boost::format -> fmt::format

目前小点的程序可以做到header only了。
glog有个CHECK宏用起来还是很顺手的,但是
centos上没有程序移植起来多一层麻烦。

最新回帖

netghost
123 楼

rust的最最最大問題是 - 沒有user。

這件事情particular的糟糕在於rust的developer數目其實非常多,這些人都在日以繼
夜地produce code,但是卻沒人用。Why?

exactly是因爲這個群體的人非常care語言本身的結果,所以這些人大部分最喜歡的就
是找一個已近有的項目,用rust重新實現一邊,同時到處騷擾別人去reimplement本來
好好的程序,這波人被叫做rust evangelist strike force.

好的應用,具體用什麼語言只是相對少的部分,這是過於強調語言本身的社區一個很大的問題。

【 在 magagop (magagop) 的大作中提到: 】
: rust肯定搞不定HPC,現在cpp有時候都無法取代fortran,rust更不可能。cpp是最複雜
: 、最全面、最中立、最有歷史的現代計算機語言,c不算現代語言。rust連iso都不是。
: go只有一家公司一個編譯器。我最最反的就是這兩個。js都比它們強。
:
: oneapi這個項目合理性疑問很大。進去這個種組,說不定2,3年就要換工作。:
: 老印manager說不定自己換地方升職了。
:
: rust沒有計劃要搞科學計算。不然我就會用。
:
: 所以這才是cpp長遠來看的核心競爭力。
:
: oneapi?
:

g
guvest
122 楼


"現代“的意思不是”好“。(在列寧時代可能是的)

從進化論的觀點看,有後現代。我不是開玩笑,perl的作者有個notes,就說perl成功
是因為其為
後現代的。

從復古論的角度來看。老的就是好的。

所以modernity夾在中間,有一出門就過時的意思。

不過你說的rust尚且沒有ISO,所以沒有prpomising這點是對的且很重要。
【 在 magagop (magagop) 的大作中提到: 】
: rust肯定搞不定HPC,現在cpp有時候都無法取代fortran,rust更不可能。cpp是最複雜
: 、最全面、最中立、最有歷史的現代計算機語言,c不算現代語言。rust連iso都不是。
: go只有一家公司一個編譯器。我最最反的就是這兩個。js都比它們強。
:
: oneapi這個項目合理性疑問很大。進去這個種組,說不定2,3年就要換工作。:
: 老印manager說不定自己換地方升職了。
:
: rust沒有計劃要搞科學計算。不然我就會用。
:
: 所以這才是cpp長遠來看的核心競爭力。
:
: oneapi?
:

h
helpme
121 楼

你这基本已经是邪教了,去年懂王下台前你是不是把票投给了它?

【 在 magagop (magagop) 的大作中提到: 】
: rust肯定搞不定HPC,現在cpp有時候都無法取代fortran,rust更不可能。cpp是最複雜
: 、最全面、最中立、最有歷史的現代計算機語言,c不算現代語言。rust連iso都不是。
: go只有一家公司一個編譯器。我最最反的就是這兩個。js都比它們強。
:
: oneapi這個項目合理性疑問很大。進去這個種組,說不定2,3年就要換工作。:
: 老印manager說不定自己換地方升職了。
:
: rust沒有計劃要搞科學計算。不然我就會用。
:
: 所以這才是cpp長遠來看的核心競爭力。
:
: oneapi?
:

T
TeacherWei

属实。第一步先要去boost。这玩意儿是胶皮糖,用它一个头文件,就沾上你甩不掉。

C++是用来用的,用来写也行,就不是用来读的。知道你智商高,可能以读别人代码为
乐。俺这种智商平平的,在上面花一分钟都感觉亏了。

sunshineboy

不是Cpp不好 实在是开发的速度跟不上 跟开发速度相比 那点性能上的差别几乎可以忽略
iDemocracy

自动驾驶、网络游戏、股市交易,这些性能要求高的都是用C或C++,或者Go,几乎不可能用Java的,闹出人命就知道厉害了。

【 在 sunshineboy (阳光男孩) 的大作中提到: 】
: 不是Cpp不好 实在是开发的速度跟不上 跟开发速度相比 那点性能上的差别几乎可
: 以忽略
s
skybluewei

要看你的career goal是什么,要出活,就得用操快猛的,不在于你能否精雕细琢一块
积木,而在于你堆积木的速度。
netghost

用python和R的只需要C,不需要C++。

C++這個語言倒是在爲碼工保飯碗上面下足了功夫,問題是,這個事情搞太過之後,公
司也發現了。所以很多公司乾脆不用C++了,寧肯用python這種二桿子,或者就Java也
不用C++。

【 在 wdong (万事休) 的大作中提到: 】
: 如果已经会了一种编程语言,想再找事或者技术上进一步提高,
: 还是C++一步到位吧。这个世界上,C++之上别无第二个语言。
: 特别是python/R的用户,可以给现有项目写扩展。
: 就跟买电子垃圾似的,如了门以后要有钱,看准了最好狠
: 下心来买个好的用十年。
: 目前的C++,对于库的作者我感觉其实并不友好。
: 但是对于没有历史负担的一般用户,可以写出很漂亮的代码。
: 下面贴一些学习材料:
: C++FAQ,第二语言可以直接跳过教科书看这个
: https://isocpp.org/faq
: ...................

g
guvest

你可能高估你的读者了。我很晚才意识到。好多人说起来啥啥头头是道。
看上去也知道reason和逻辑。实际上都是装懂。所以其实该学的是中学和本科数学。

如果不借助工具。人本身能力很有限,做逻辑链较长的问题时,不可避免的会出现bug。
经过训练的,能借助一些思考工具(习得的或者自己造的),或者follow可以确保严格性的一些模板(习得的或者自己造的),让bug出现的晚一些。

比如一个简单的数学题。解题之步骤是第一步先想好怎么回事。第二步是formal的,
就是要写对。
这第二步,绝大多数人实际上是不会的。没有这第二步,考虑问题之前后阶段之错误会互相couple。导致无法debug。

无论哪个行业,哪怕是学文科的。凡是没有一套自己的办法把第二步弄对,那思维的链条到了一定长度,或者思维问题的范围到了一定宽度,就会失控。强行带入,会出各种病。

我举个最简单的例子:
Given f(x)=f(x+T)
求证: f(x+T)= f(x+k T)

把这个证明写对,要么用lambda calculus里的alpha beta化简什么的。
要么用全称量词,与存在量词之规则。然后还要理解数学归纳法。

填鸭式考试容易。但是学会。知道怎么用这些逻辑工具,能看懂别
人怎么用的,这绝对不是一件容易的事。

【 在 wdong (万事休) 的大作中提到: 】
: C++已经不是活命语言了。活命语言是python或者js。
: 我这是和rust, go, swift这种二流语言相比而言。如果
: 非要花时间学一个语言,C++是值得投资的。
: ----
: 如果已经会了一种编程语言,想再找事或者技术上进一步提高,
: 还是C++一步到位吧。这个世界上,C++之上别无第二个语言。
: 特别是python/R的用户,可以给现有项目写扩展。
: 就跟买电子垃圾似的,如了门以后要有钱,看准了最好狠
: 下心来买个好的用十年。
: 目前的C++,对于库的作者我感觉其实并不友好。
: ...................

g
guvest

我现在尽可能C89加standard lib。复数计算常用的也自己分re,im部分自己写。
verbose的部分定制emacs解决。
【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 用python和R的只需要C,不需要C++。
: C++這個語言倒是在爲碼工保飯碗上面下足了功夫,問題是,這個事情搞太過之後,公
: 司也發現了。所以很多公司乾脆不用C++了,寧肯用python這種二桿子,或者就Java也
: 不用C++。

oOOo

为什么说C++或者C的库高度封装以后,仍然干不过python或者js?

c
chebyshev

js不了解。
c/cpp不是干不过python。
而是干不过python+c/cpp。
【 在 oOOo (_/o!o_/) 的大作中提到: 】
: 为什么说C++或者C的库高度封装以后,仍然干不过python或者js?

g
gogogo2

目前chromium应该是最大的c++开源项目, 文件5万2千多个, 代码估计2000万-3000万之间,
里面包含的开源项目超过400个,

webkit只有一半规模,2万多文件, 但webkit是神优化, 比chrome快太多了,
netghost

看你怎麼定干得過了。。瀏覽器界面當然不可能比得過js。

此外C++和C是fundamental不同的兩個東西,不要混到一起。

【 在 oOOo (\_/o!o\_/) 的大作中提到: 】
: 为什么说C++或者C的库高度封装以后,仍然干不过python或者js?

netghost

不清楚你在說什麼,webkit是engine,chrome是瀏覽器,這兩個沒法比。chrome最早就是用的webkit。
【 在 gogogo2 (googlebot) 的大作中提到: 】
: 目前chromium应该是最大的c++开源项目, 文件5万2千多个, 代码估计2000万-3000万
: 之间,
: 里面包含的开源项目超过400个,
: webkit只有一半规模,2万多文件, 但webkit是神优化, 比chrome快太多了,

p
pickvalue


Logger看看quill logger,个人觉得甩其他几条街. Cxxopts看起来不错。

【 在 wdong (万事休) 的大作中提到: 】
: C++已经不是活命语言了。活命语言是python或者js。
: 我这是和rust, go, swift这种二流语言相比而言。如果
: 非要花时间学一个语言,C++是值得投资的。
: ----
: 如果已经会了一种编程语言,想再找事或者技术上进一步提高,
: 还是C++一步到位吧。这个世界上,C++之上别无第二个语言。
: 特别是python/R的用户,可以给现有项目写扩展。
: 就跟买电子垃圾似的,如了门以后要有钱,看准了最好狠
: 下心来买个好的用十年。
: 目前的C++,对于库的作者我感觉其实并不友好。
: ...................

dumbCoder

Mark了, 多谢

wdong对C++的现在的build, 和管理lib/package有好的心得么
还是你其实也是自己写makefile, 尽量少用第三方lib/package?
或者是你用第三方lib/package时, 靠docker做到可重复build?

【 在 wdong (万事休) 的大作中提到: 】
: C++已经不是活命语言了。活命语言是python或者js。
: 我这是和rust, go, swift这种二流语言相比而言。如果
: 非要花时间学一个语言,C++是值得投资的。
: ----
: 如果已经会了一种编程语言,想再找事或者技术上进一步提高,
: 还是C++一步到位吧。这个世界上,C++之上别无第二个语言。
: 特别是python/R的用户,可以给现有项目写扩展。
: 就跟买电子垃圾似的,如了门以后要有钱,看准了最好狠
: 下心来买个好的用十年。
: 目前的C++,对于库的作者我感觉其实并不友好。
: ...................

oOOo

为啥fundamentally不同?很多人把C++当C的超集,从来不需要STL或者复杂继承之类的特性

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 看你怎麼定干得過了。。瀏覽器界面當然不可能比得過js。
: 此外C++和C是fundamental不同的兩個東西,不要混到一起。

wdong

我没啥大项目。以前还写cmake,现在已经退回到makefile了。
现在用的最多的是往python里面加C++,用setup.py管理。
带main的程序写得很少了。C++有点好钢用在刀刃上的感觉,
写之前都会自己问一下,是不是非要C++用python不行。

docker是另外一回事,我重度使用docker。一个东西跑通了,
但凡将来可能用到,或者要给别人看,我都会包装成docker。
重要的还要把image导出;有时候docker重新创建时源变了会
出问题。Docker的好处是,一旦包装好了,软件内部的各种
不爽的东西一律看不见,特别清净。

【 在 dumbCoder (HumbleCoder 不懂就问-_-) 的大作中提到: 】
: Mark了, 多谢
: wdong对C++的现在的build, 和管理lib/package有好的心得么
: 还是你其实也是自己写makefile, 尽量少用第三方lib/package?
: 或者是你用第三方lib/package时, 靠docker做到可重复build?

wdong

我觉得没法完全分开。我最近还碰到两处。

std::getline会扔掉最后的'\n',而且你没法知道有没有扔掉。结果我用回了
stdio.h的getline。还有一个是popen在C++没有替代品。综合这两条,我在
一个项目里又用回了FILE *

C++这个超集超得太多了,C是1的话C++得有10,完全不对等了。C应该完全缩到
嵌入式应用了吧。

【 在 oOOo (\_/o!o\_/) 的大作中提到: 】
: 为啥fundamentally不同?很多人把C++当C的超集,从来不需要STL或者复杂继承之类的
: 特性

netghost

如果你不用stl,意味這你連vector都沒有,which是50%用C++的人的原因。。
你們真的需要一堆的class互相繼承?如果GUI或者是某些事情,maybe。別的完全用不
上。如果這些特性都不怎麼用的人,我看見的情況這種人這年都回歸C了。

C++這東西都不是C的超集的問題,而是C++是constantly是自己的超集的問題。C++11,C++14, C++17,我如果要掉一個第三方庫一旦我看見說是C++xx的,我立刻走人。鬼知道過兩年他會怎麼樣。
【 在 oOOo (\_/o!o\_/) 的大作中提到: 】
: 为啥fundamentally不同?很多人把C++当C的超集,从来不需要STL或者复杂继承之类的
: 特性

s
skybluewei

要保证可重复build,第三方lib、package的源要固定啊,否则就得自己建服务器,把
lib、package放到那上面。
【 在 dumbCoder (HumbleCoder 不懂就问-_-) 的大作中提到: 】
: Mark了, 多谢
: wdong对C++的现在的build, 和管理lib/package有好的心得么
: 还是你其实也是自己写makefile, 尽量少用第三方lib/package?
: 或者是你用第三方lib/package时, 靠docker做到可重复build?

wdong

C++ 20已经有coroutine了。 co_yield, co_wait。这么老一个语言还能
constantly evolve真实很牛逼的。但愿不要被他们玩崩了。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 如果你不用stl,意味這你連vector都沒有,which是50%用C++的人的原因。。
: 你們真的需要一堆的class互相繼承?如果GUI或者是某些事情,maybe。別的完全用不
: 上。如果這些特性都不怎麼用的人,我看見的情況這種人這年都回歸C了。
: C++這東西都不是C的超集的問題,而是C++是constantly是自己的超集的問題。C++11,
: C++14, C++17,我如果要掉一個第三方庫一旦我看見說是C++xx的,我立刻走人。鬼知
: 道過兩年他會怎麼樣。

netghost

因爲it based on C。

問題是,這些東西用庫support就好了。不是每個人都需要這些東西的,真的需要這個
東西的人也不會care語言內部內建。

【 在 wdong (万事休) 的大作中提到: 】
: C++ 20已经有coroutine了。 co_yield, co_wait。这么老一个语言还能
: constantly evolve真实很牛逼的。但愿不要被他们玩崩了。

dumbCoder

所以主要还是靠自己强力控制

【 在 wdong (万事休) 的大作中提到: 】
: 我没啥大项目。以前还写cmake,现在已经退回到makefile了。
: 现在用的最多的是往python里面加C++,用setup.py管理。
: 带main的程序写得很少了。C++有点好钢用在刀刃上的感觉,
: 写之前都会自己问一下,是不是非要C++用python不行。
: docker是另外一回事,我重度使用docker。一个东西跑通了,
: 但凡将来可能用到,或者要给别人看,我都会包装成docker。
: 重要的还要把image导出;有时候docker重新创建时源变了会
: 出问题。Docker的好处是,一旦包装好了,软件内部的各种
: 不爽的东西一律看不见,特别清净。

dumbCoder

我觉得这个应该是带大量第三方依赖的项目比较通用的方法了吧.
看来大的 C++ 项目也是走的这个路数.
用Python的时候, Ops/Admin就把依赖用pip打包,存到自家server上.
不知道现在的包管理(e.g. Peotry)能不能做到binary级别rebuild

【 在 skybluewei (weilan) 的大作中提到: 】
: 要保证可重复build,第三方lib、package的源要固定啊,否则就得自己建服务器,把
: lib、package放到那上面。

s
skybluewei

没别的办法啊。。。不知道你说的“binary级别rebuild”是什么意思。一般
dependency不都是以artfiacts的形式弄来的吗?包管理一般要把所有的dependency的
hash存下来才能保证rebuild的一致性。
【 在 dumbCoder (HumbleCoder 不懂就问-_-) 的大作中提到: 】
: 我觉得这个应该是带大量第三方依赖的项目比较通用的方法了吧.
: 看来大的 C++ 项目也是走的这个路数.
: 用Python的时候, Ops/Admin就把依赖用pip打包,存到自家server上.
: 不知道现在的包管理(e.g. Peotry)能不能做到binary级别rebuild

zlltt

感谢wd分享

关键时刻遏制了分裂 团结了版众 引导了话题
dumbCoder

”binary级别rebuild“我指的是好点的包管理能达到的效果,
每次rebuild出来完全一样, 就是你说的基于dependency的(binary)hash values.

另外, 用docker这种存build好的(binary)image的笨办法, 也能达到一样的效果.
dependency/package 管理机制能达到效果最好, 不然就得用某种笨办法.

所以我理解的是, 你推荐用 CMake artifacts 来保留一份 dependency hash values

【 在 skybluewei (weilan) 的大作中提到: 】
: 没别的办法啊。。。不知道你说的“binary级别rebuild”是什么意思。一般
: dependency不都是以artfiacts的形式弄来的吗?包管理一般要把所有的dependency的
: hash存下来才能保证rebuild的一致性。

netghost

你如果不做系統安全方面軟件,這個reproducible builds有什麼point麼?

此外,如果有一堆三方庫 dependency的軟件,本身安全性已經沒有了。
【 在 dumbCoder (HumbleCoder 不懂就问-_-) 的大作中提到: 】
: ”binary级别rebuild“我指的是好点的包管理能达到的效果,
: 每次rebuild出来完全一样, 就是你说的基于dependency的(binary)hash values.
: 另外, 用docker这种存build好的(binary)image的笨办法, 也能达到一样的效果.
: dependency/package 管理机制能达到效果最好, 不然就得用某种笨办法.
: 所以我理解的是, 你推荐用 CMake artifacts 来保留一份 dependency hash values

dumbCoder

主要让DevOps/Build pipeline可控吧, deterministic
比如整个系统上个大版本是v1.0, 它其实指代一大堆hash value based libs/packages/files的集合.
比如之后如果v1.1除了问题, 我们决定整个系统回退到v1.0,
那么我们重新rebuild v1.0的时候, 系统和外部依赖能完美还原.

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 你如果不做系統安全方面軟件,這個reproducible builds有什麼point麼?
: 此外,如果有一堆三方庫 dependency的軟件,本身安全性已經沒有了。

wdong

其实就是外面包一层http cache,然后把实际抓的包也都存下来。
这个事情很好其docker为什么没做,或者做了我不知道。
这个功能应该是可以build in docker的。

【 在 dumbCoder (HumbleCoder 不懂就问-_-) 的大作中提到: 】
: 主要让DevOps/Build pipeline可控吧, deterministic
: 比如整个系统上个大版本是v1.0, 它其实指代一大堆hash value based libs/
packages
: /files的集合.
: 比如之后如果v1.1除了问题, 我们决定整个系统回退到v1.0,
: 那么我们重新rebuild v1.0的时候, 系统和外部依赖能完美还原.

netghost

那你這個就是dependency management不是binary 級別的rebuild。

因爲即使庫版本完全一樣,也不能保證兩次編譯的binary完全一樣。

【 在 dumbCoder (HumbleCoder 不懂就问-_-) 的大作中提到: 】
: 主要让DevOps/Build pipeline可控吧, deterministic
: 比如整个系统上个大版本是v1.0, 它其实指代一大堆hash value based libs/
packages
: /files的集合.
: 比如之后如果v1.1除了问题, 我们决定整个系统回退到v1.0,
: 那么我们重新rebuild v1.0的时候, 系统和外部依赖能完美还原.

s
skybluewei


reproduce build是最基本的engineering practice,我们公司要求所有的major
release不仅要备份源代码,第三方库,还要备份build machine或者环境,要有build instruction,QE要verify能reproduce出来和原来的release对的上才能过关。然后,
一式三份,异地存贮。
这些东西没做过的人不会理解。楼上那位一谈到细节就露馅了。
【 在 dumbCoder (HumbleCoder 不懂就问-_-) 的大作中提到: 】
: ”binary级别rebuild“我指的是好点的包管理能达到的效果,
: 每次rebuild出来完全一样, 就是你说的基于dependency的(binary)hash values.
: 另外, 用docker这种存build好的(binary)image的笨办法, 也能达到一样的效果.
: dependency/package 管理机制能达到效果最好, 不然就得用某种笨办法.
: 所以我理解的是, 你推荐用 CMake artifacts 来保留一份 dep

★ 发自iPhone App: ChinaWeb 1.1.5
lightroom

现在都用docker做build, 不用那么麻烦了

【在 skybluewei(weilan)的大作中提到:】



s
skybluewei


道理是一样的,sounce code, 3rd party artifacts, build machine, build process 都要备份。至于怎么备份那是细节问题。要求就是,在没有internet 的情况下,用你的备份reproduce的build要和原来的release对的上。

【 在 lightroom (吃一条鱼,思考一个问题,法号三丰) 的大作中提到: 】
: 现在都用docker做build, 不用那么麻烦了
: :
: :

★ 发自iPhone App: ChinaWeb 1.1.5
m
minquan

说得非常对。

【 在 skybluewei (weilan) 的大作中提到: 】
: reproduce build是最基本的engineering practice,我们公司要求所有的major
: release不仅要备份源代码,第三方库,还要备份build machine或者环境,要有
build
: instruction,QE要verify能reproduce出来和原来的release对的上才能过关。然后,
: 一式三份,异地存贮。
: 这些东西没做过的人不会理解。楼上那位一谈到细节就露馅了。
: ★ 发自iPhone App: ChinaWeb 1.1.5

m
minquan

那么关于用C++做动态库,以供Python/Java/Go/Rust调用的教程哪里有?
wdong

python的看这里,应该是目前最靠谱的吧:
https://pybind11.readthedocs.io/en/stable/

我之前用boost::python,一年多前转的。

【 在 minquan (三民主义) 的大作中提到: 】
: 那么关于用C++做动态库,以供Python/Java/Go/Rust调用的教程哪里有?

f
fantasist

pybind11靠谱,我去年用这个东西Wrap了公司里Ads的predictor service做batch
inference,distributed env里跑起来完全没问题。
我看到它也被用于其它很多production项目,目前没看到内部有什么抱怨。连大公司最核心的东西都能跑,普通人就放心用吧。
【 在 wdong (万事休) 的大作中提到: 】
: python的看这里,应该是目前最靠谱的吧:
: https://pybind11.readthedocs.io/en/stable/
: 我之前用boost::python,一年多前转的。

g
guvest

没有internet的时候能原样build出来这条是对的。其他的那些环节是你用的tool
chain,或者tech stack给的划分。都是变项,with respect to 很多别的因素。

就算都是java公司也不全是一回事。

【 在 skybluewei(weilan) 的大作中提到: 】
<br>: 道理是一样的,sounce code, 3rd party artifacts, build machine,
build
process
<br>: 都要备份。至于怎么备份那是细节问题。要求就是,在没有internet 的情况下
,用你
<br>: 的备份reproduce的build要和原来的release对的上。
<br>: ★ 发自iPhone App: ChinaWeb 1.1.5
<br>

netghost

哈哈還reproduce build呢,你的回答基本上說明你連什麼reproducible build是啥都
不知道,也不知道是用來幹啥的,同時你不知道怎麼做。 同時你也不知道到底不需要
reproducible build的時候應該怎麼做。

這件事我勸你少說幾句,多說下去只能爆露你遊醫的本來面目。

還“對得上”,你乾脆說你用的是最硬的硬盤算了。。。哈哈。

【 在 skybluewei (weilan) 的大作中提到: 】
: reproduce build是最基本的engineering practice,我们公司要求所有的major
: release不仅要备份源代码,第三方库,还要备份build machine或者环境,要有
build
: instruction,QE要verify能reproduce出来和原来的release对的上才能过关。然后,
: 一式三份,异地存贮。
: 这些东西没做过的人不会理解。楼上那位一谈到细节就露馅了。
: ★ 发自iPhone App: ChinaWeb 1.1.5

netghost

這種漿糊騙子拿出來分析一下,大家以後面試的時候長個心眼。

第一就就是故左右而言他,扯一些都會做得,但是和話題沒有直接聯繫的東西。比如說你問他怎麼build出一樣的binary,他告訴你code要備份,備份!!

第二是在關鍵的地方漿糊過去,比如說用一些”對得上“這種話來模糊reproducible
build這樣有明確定義的東西。

第三愣充專家,比如這個仁兄還作賊心虛的冒了一句“沒做過的人不會理解”。

這都是騙子的常見伎倆,大家自行識別。

【 在 skybluewei (weilan) 的大作中提到: 】
: reproduce build是最基本的engineering practice,我们公司要求所有的major
: release不仅要备份源代码,第三方库,还要备份build machine或者环境,要有
build
: instruction,QE要verify能reproduce出来和原来的release对的上才能过关。然后,
: 一式三份,异地存贮。
: 这些东西没做过的人不会理解。楼上那位一谈到细节就露馅了。
: ★ 发自iPhone App: ChinaWeb 1.1.5

s
skybluewei

我给你讲讲啥叫对的上,学着点,以后别露怯:你 build一个java jar file, 里面的 class files 要完全一样,即hash 要一样,但manifest file由于里面有时间戳会不一样。这两个jar files就是一样的binary。懂得了吗?

LOL,干没干过,一看就知到啦!奉劝各位网友,这种骗子大家还是要注意一点,他们
的发言没有credit。就是喷子,你信你就傻逼了。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 這種漿糊騙子拿出來分析一下,大家以後面試的時候長個心眼。
: 第一就就是故左右而言他,扯一些都會做得,但是和話題沒有直接聯繫的東西。比如說
: 你問他怎麼build出一樣的binary,他告訴你code要備份,備份!!
: 第二是在關鍵的地方漿糊過去,比如說用一些”對得上“這種話來模糊reproducible
: build這樣有明確定義的東西

★ 发自iPhone App: ChinaWeb 1.1.5
netghost

會就是會,不會就是不會,這麼扯着脖子除了說明你惱羞成怒,什麼都不說明。

果然,你進一步展示了你完全不懂的特質。reproducible build有很清晰的定義,你結果繼續扯上了一個沒關係的Java的Jar file。你就算兩個jar file md5um都一樣,也不能滿足reproducible build的要求,你知道是爲啥嗎?

還有你還是解釋一下,你的source code備份,和完了之後編譯結果拷三份和之前別人
問的東西有什麼關係吧?

【 在 skybluewei (weilan) 的大作中提到: 】
: 标 题: Re: 原來53歲騙子網管出現了
: 发信站: BBS 未名空间站 (Fri Feb 19 06:43:20 2021, 美东)
:
: 我给你讲讲啥叫对的上,学着点,以后别露怯:你 build一个java jar file, 里面

: class files 要完全一样,即hash 要一样,但manifest file由于里面有时间戳会不一
: 样。这两个jar files就是一样的binary。懂得了吗?
:
: LOL,干没干过,一看就知到啦!奉劝各位网友,这种骗子大家还是要注意一点,他们
: 的发言没有credit。就是喷子,你信你就傻逼了。
:
: 【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: : 這種漿糊騙子拿出來分析一下,大家以後面試的時候長個心眼。
: : 第一就就是故左右而言他,扯一些都會做得,但是和話題沒有直接聯繫的東西。比如說
: : 你問他怎麼build出一樣的binary,他告訴你code要備份,備份!!
: : 第二是在關鍵的地方漿糊過去,比如說用一些”對得上“這種話來模糊
reproducible
: : build這樣有明確定義的東西
:
: ★ 发自iPhone App: ChinaWeb 1.1.5
: --
s
skybluewei

你就别叽歪了。。。reproducible build当然有明确定义,两个build的怎么算一样,
哪些东西必须一样,哪些东西可以不一样,不一样的东西为什么不一样,是by design
,还是有别的原因,都得搞清楚,要sign off。。。“编译结果考三份”是什么意思?我说的是整个reproduce的环境一式三份,异地存贮。否则,需要的时候,你拿啥
rebuild?

网友们睁开眼睛好好看清楚。。。你要是听这些喷子的意见或者建议,你就傻逼了。。。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 會就是會,不會就是不會,這麼扯着脖子除了說明你惱羞成怒,什麼都不說明。
: 果然,你進一步展示了你完全不懂的特質。reproducible build有很清晰的定義,你結
: 果繼續扯上了一個沒關係的Java的Jar file。你就算兩個jar file md5um都一樣,也不
: 能滿足reproducible build的要求,你知道是爲啥嗎?
: 還有你還是解釋一下,你的source code備份,和完了之後編譯結果拷三份和之前別人
: 問的東西有什麼關係吧?
: 的
: 如說
: reproducible

netghost

你連"reproducible build"是個專有名詞都不知道,所以才會冒出"reproduce build"
這樣的笑話。從這個點上開始你已經完蛋了。

可惜你這個蠢貨又繼續不懂裝懂,開始扯備份,扯java的jar file,現在又開始扯"by design",要"搞清楚",這種不招邊際的話,我倒要看看一個兩句話能說清楚的事情(
which 其實別人已經說過了,但是因爲你實在是太沒概念,強行插進來”幫忙“連是什麼都沒搞懂),你這個漿糊能扯到哪裏去。

此外大師你還沒回答爲啥reproducible build需要備份?而且完了copy 3份對這個事情的幫助是啥?
【 在 skybluewei (weilan) 的大作中提到: 】
: 你就别叽歪了。。。reproducible build当然有明确定义,两个build的怎么算一样,
: 哪些东西必须一样,哪些东西可以不一样,不一样的东西为什么不一样,是by
design
: ,还是有别的原因,都得搞清楚,要sign off。。。
: 网友们睁开眼睛好好看清楚。。。你要是听这些喷子的意见或者建议,你就傻逼了。。。

s
skybluewei

你连需不需要reproduce build都不清楚,还扯啥淡的。

再给你科普一下,下次别露怯:

reproduce的环境备份,否则你拿什么去reproduce?不是备份reproducible build,话都听不懂,我存build干嘛?release build考多少份不行啊?release build本身也要
一式三份异地存储,但这是另一个release criteria。

为啥要备份三份,异地存储,这道理不是很简单么?一个地方发生自然灾害或者被恐怖袭击了,这个copy没了,还有另外的copy可以去reproduce build。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 你連"reproducible build"是個專有名詞都不知道,所以才會冒出"reproduce build"
: 這樣的笑話。從這個點上開始你已經完蛋了。
: 可惜你這個蠢貨又繼續不懂裝懂,開始扯備份,扯java的jar file,現在又開始扯"
by
: design",要"搞清楚",這種不招邊際的話,我倒要看看一個兩句話能說清楚的事情(
: which 其實別人已經說過了,但是因爲你實在是太沒概念,強行插進來”幫忙“連是什
: 麼都沒搞懂),你這個漿糊能扯到哪裏去。
: 此外大師你還沒回答爲啥reproducible build需要備份?而且完了copy 3份對這個事情
: 的幫助是啥?
: design
: 。。

netghost

所以到了現在你還是不知道什麼叫做reproducible build。而且到現在還在把這個事情當做可以自己隨便定義的東西。然後說一些不招邊際的火車。算了,你高興就好。

恩,如果問什麼叫做programmable logic controller,怎麼實現,看來你這個大師也
可以和別人聊半個小時,先告訴別人要先買個電腦,學門語言,否則拿什麼怎麼
program?

【 在 skybluewei (weilan) 的大作中提到: 】
: 你连需不需要reproduce build都不清楚,还扯啥淡的。
: 再给你科普一下,下次别露怯:
: reproduce的环境备份,否则你拿什么去reproduce?不是备份reproducible build,话
: 都听不懂,我存build干嘛?release build考多少份不行啊?release build本身也要
: 一式三份异地存储,但这是另一个release criteria。
: 为啥要备份三份,异地存储,这道理不是很简单么?一个地方发生自然灾害或者被恐怖
: 袭击了,这个copy没了,还有另外的copy可以去reproduce build。
: by

s
skybluewei

”binary级别rebuild“我指的是好点的包管理能达到的效果,
每次rebuild出来完全一样, 就是你说的基于dependency的(binary)hash values.

HumbleCoder问的是怎么reproduce build,我回答的也是这个问题。只有你在纠结
reproducible build。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 所以到了現在你還是不知道什麼叫做reproducible build。而且到現在還在把這個事情
: 當做可以自己隨便定義的東西。然後說一些不招邊際的火車。算了,你高興就好。
: 恩,如果問什麼叫做programmable logic controller,怎麼實現,看來你這個大師也
: 可以和別人聊半個小時,先告訴別人要先買個電腦,學門語言,否則拿什麼怎麼
: program?

g
guvest

大家且冷静。回到问题本身。

这问题java的人和c/cpp的说不到一起。
例如对c/cpp来说,程序每次build出来之后binary 不一样是常事。不是包管理就可以
搞定的。
1.本身compiler的deterministic 就很难保证。
2.os有无数状态,每次启动机器,那都是不一样的。
你要完全备份环境,是很难的。
3.另外很多文件还可能有格式内嵌的状态与签名。
4. ...

限定在java范围。你只能说精神上你的working process是deterministic 的追求。
但是我很难相信你们QA每次都重新build然后比对hash或者check sum才算通过。
板上写java的很多。哪个公司的QA是这么做的? 这点大家可以交流,实证与学习。

paper knowledge 能提供正确的原则,跟实际情况往往不是一回事。
case A:
在tool chain某处加个determinstic或者reproducible的flag或者配置。
case B:
QA重build,用程序比对binary,binary不一样就不给通过。

我个人的理解。A与B是天差地别。
【 在 skybluewei(weilan) 的大作中提到: 】

: ”binary级别rebuild“我指的是好点的包管理能达到的效果,

: 每次rebuild出来完全一样, 就是你说的基于dependency的(binary)hash values.

: HumbleCoder问的是怎么reproduce build,我回答的也是这个问题。只有你在纠结

: reproducible build。

s
skybluewei

别的公司我不知道,我们公司就是这么做的。。。这不是精神上的追求,是实际中的工程要求,rebuild完后要有comparison tool去verify比如hash checksum。这是release criteria的一项。没干过这种事儿的人,就不会知道细节。这也就是为啥有人关心这
个问题,不是说这东西有多大用处,像我说的一式三份异地存储,一百年可能也遇不到一次,但这是公司规章制度的一部分。
【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 大家且冷静。回到问题本身。
: 这问题java的人和c/cpp的说不到一起。
: 例如对c/cpp来说,程序每次build出来之后binary 不一样是常事。不是包管理就可以
: 搞定的。本身compiler的deterministic 就很难保证。os有无数状态,每次启动机器,
: 那都是不一样的。你要完全备份环境,是很难的。另外很多文件还可能有格式内嵌的状
: 态与签名。
: 就算是java。你只能说精神上你的working flow是deterministic 的追求。很难相信你
: 们QA每次都重新build然后比对hash或者check sum才算通过。板上写java的很多。你问
: 问哪个公司的java binary 是这么做的。paper knowledge 能提供正确的原则,跟实际
: 情况往往不是一回事。
: ...................

g
guvest

精神上的追求改成principles吧。principles vs practice听着不错吧。

首先看看有没有别的java人员是否愿意说说他们的经验。
另外不是抬杠。我怀疑你们那critera和tool chain有 work around。或者你们只写很
特定领域
的程序。

严格的determinstic build,即使你所有的东西都在jvm走。我感觉也不是简单的事。
更别说
automatically的生成了。java你肯定比我熟悉。你想想就知道了。比如说我写个
查cpu温度的程序。build的时候把初始温度hard code进去。

不确定性的来源有几个部分:
1.输入性的。例如临时文件名,硬件信息。
2.编译器自带的。
3.文件格式带的。
4.gc造成的。

....

备份和异地存储是另外一topic。这个本版可能只有我有碰到过用上的例子。
十多年之前上海人社局的楼裂缝倾斜。军队去封锁然后抢救设备和数据。
我听同事告知,之前参与的项目灾难备份项目用上了。全市业务没有停。

【 在 skybluewei (weilan) 的大作中提到: 】
: 别的公司我不知道,我们公司就是这么做的。。。这不是精神上的追求,是实际中的工
: 程要求,rebuild完后要有comparison tool去verify比如hash checksum。这是
release
: criteria的一项。没干过这种事儿的人,就不会知道细节。这也就是为啥有人关心这
: 个问题,不是说这东西有多大用处,像我说的一式三份异地存储,一百年可能也遇不到
: 一次,但这是公司规章制度的一部分。

netghost

JAVA因爲恩bytecode不能直接執行,所以如果只說jar file,根本無從談起
reproducible build。因爲對java而言可執行程序是jvm。除非把jvm和上面的jar放到
一起看可能還可以說說。

但是對他的工作環境和職能來說,顯然沒有能力去maintain自己的jvm,所以就是發行
是什麼就用什麼。說白了,就是hope for the best。

當然退一步說,查jar file當然比不查好,但是和native的應用的要求比沒有什麼意義。不過他似乎就掉在Java這麼一個坑裏面,對於除了Java外面的事情一無所知,所以雞同鴨講,沒意義。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 精神上的追求改成principles吧。principles vs practice听着不错吧。
: 首先看看有没有别的java人员是否愿意说说他们的经验。
: 另外不是抬杠。我怀疑你们那critera和tool chain有 work around。或者你们只写很
: 特定领域
: 的程序。
: 严格的determinstic build,即使你所有的东西都在jvm走。我感觉也不是简单的事。
: 更别说
: automatically的生成了。java你肯定比我熟悉。你想想就知道了。比如说我写个
: 查cpu温度的程序。build的时候把初始温度hard code进去。
: 不确定性的来源有几个部分:
: ...................

netghost

你的最大的問題,就是愛面子,which我在一定程度上可以照顧,但是卻不能無原則的
照顧。

這件事情本來是別人要問怎麼做到binary級別的rebuild,which指的就是reproducible build,我個人認爲這個東西如果不是安全軟件,不是特別有必要。至於實用層面上要保證一致性用通用的做法就行了。對於大部分編譯型語言的環境,做法就是差不多的,難度在於控制項目的複雜度。對於Java一般來說也是差不多的做法,除了jvm的部分還
得再多一部分工作量,所以如果你作爲一個基本上只work on Java平臺的人,要求不高,查查jar file也就OK了。

問題是,因爲某些原因,你企圖證明自己什麼都懂,所以你就一口抓住了一個
reproducible build這樣一個對你完全陌生的概念,然後就從南到北的一整亂砍,還扯到了備份,其實你只是不懂什麼叫做可執行二進制是怎麼來的而已。考慮到你Java的背景,這也不是什麼丟人的事情 - 但是你一定要凹出個勝負出來,於是就只能不停地曝
露你的知識盲區。直到現在這樣,每個人都知道你這事情上面不懂裝懂,何必呢?

【 在 skybluewei (weilan) 的大作中提到: 】
: ”binary级别rebuild“我指的是好点的包管理能达到的效果,
: 每次rebuild出来完全一样, 就是你说的基于dependency的(binary)hash values.
: HumbleCoder问的是怎么reproduce build,我回答的也是这个问题。只有你在纠结
: reproducible build。

m
minquan

你说的对,这是关注安全的公司的起码的做法。
不用被杠精浪费时间。
他这号就是纯粹在本版缓解躁郁症的。

【 在 skybluewei (weilan) 的大作中提到: 】
: 别的公司我不知道,我们公司就是这么做的。。。这不是精神上的追求,是实际中的工
: 程要求,rebuild完后要有comparison tool去verify比如hash checksum。这是
release
: criteria的一项。没干过这种事儿的人,就不会知道细节。这也就是为啥有人关心这
: 个问题,不是说这东西有多大用处,像我说的一式三份异地存储,一百年可能也遇不到
: 一次,但这是公司规章制度的一部分。

m
minquan

谢谢啦
【 在 wdong (万事休) 的大作中提到: 】
: python的看这里,应该是目前最靠谱的吧:
: https://pybind11.readthedocs.io/en/stable/
: 我之前用boost::python,一年多前转的。

g
guvest

Safe与security不是一回事。我是来顺便批评简化中文的。

【 在 minquan(三民主义) 的大作中提到: 】

: 你说的对,这是关注安全的公司的起码的做法。

: 不用被杠精浪费时间。

: 他这号就是纯粹在本版缓解躁郁症的。

: release

m
minquan

又来杠啦?
你给解释一下,运行环境,依赖库不保证一样的,被恶意修改了怎么办?
明明从来没关心过安全,却处处要跳出来和我杠
真是心里有毒

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: Safe与security不是一回事。我是来顺便批评简化中文的。
:
: 你说的对,这是关注安全的公司的起码的做法。
:
: 不用被杠精浪费时间。
:
: 他这号就是纯粹在本版缓解躁郁症的。
:
: release
:

g
guvest

我就是想让你说清楚你所指的是safe还是security。
然后你自己就会证明,简化中文是说不清这件事的。
我说我是来看简化中文的。就是真的来看简化中文的。
专门攻击你或者别人谁谁谁,这种事不可能发生。

你认真再看下之前这么短的对话。我给你分析下。

1. 我未讲过这里应该是safe还是security 。

2. 但是你认为我是倾向于讲security。所以是在批评你。

3. 所以你自动的猜:guvest认为你的意思是security。并对此批评。你居然没有意识
到自己是猜的!

In one word,简化中文有多少坑。这就是个现成的例子。

如果有兴趣。我可以再给你个sample:

你查一下不久前小留杀房东然后被挖出来的谈话记录。
倘若双方多用几句英语或者古文成语,是否仍然会因此种小事弄出人命?这问题我认为是Validate question 。

【 在 minquan(三民主义) 的大作中提到: 】
<br>: 又来杠啦?
<br>: 你给解释一下,运行环境,依赖库不保证一样的,被恶意修改了怎么办?<br>: 明明从来没关心过安全,却处处要跳出来和我杠
<br>: 真是心里有毒
<br>

g
guvest

道德经只有5000字。诗经不到四万吧。
任何识字的华人,不需要翻译和训练,像小孩看书一样跳着读,就能读懂相当大的一部分。

【 在 guvest(我爱你老婆Anna) 的大作中提到: 】

: 我就是想让你说清楚你所指的是safe还是security。

: 然后你自己就会证明,简化中文是说不清这件事的。

: 我说我是来看简化中文的。就是真的来看简化中文的。

: 专门攻击你或者别人谁谁谁,这种事不可能发生。

: 你认真再看下之前这么短的对话。我给你分析下。

: 1. 我未讲过这里应该是safe还是security 。

: 2. 但是你认为我是倾向于讲security。所以是在批评你。

: 3. 所以你自动的猜:guvest认为你的意思是security。并对此批评。你居然没
有意识

: 到自己是猜的!

: In one word,简化中文有多少坑。这就是个现成的例子。
: ...................

m
minquan

你又有的杠啦?

这里从来都说的是security

safe和secure区别有那么大么?

呵呵。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 我就是想让你说清楚你所指的是safe还是security。
: 然后你自己就会证明,简化中文是说不清这件事的。
: 我说我是来看简化中文的。就是真的来看简化中文的。
: 专门攻击你或者别人谁谁谁,这种事不可能发生。
: 你认真再看下之前这么短的对话。我给你分析下。
: 1. 我未讲过这里应该是safe还是security 。
: 2. 但是你认为我是倾向于讲security。所以是在批评你。
: 3. 所以你自动的猜:guvest认为你的意思是security。并对此批评。你居然没有意识
: 到自己是猜的!
: In one word,简化中文有多少坑。这就是个现成的例子。
: ...................

g
guvest

我并未提及你所指是safe还是security。你猜了一个我的选择。而且不自知。这件事难道不能让你警惕吗?此其一。

其二,safety, security之区别,你随便找英文文献或者stackoverflow 即可。这点没有争论的必要。这也不是重点。

重点是:即便日常讨论,简化中文也更容易出bug, 误解,错误的翻译...

网上有那么多人认为,用python很难写强壮性要求高的程序。
你随便找个帖子,将其替换为关于简化中文的论证,然后看看是否就很通顺。这里面的道理是一样的。

在古文里,一个“其”字就有三十多种用法。虚词之多少,至关重要。
【 在 minquan(三民主义) 的大作中提到: 】
<br>: 你又有的杠啦?
<br>: 这里从来都说的是security
<br>: safe和secure区别有那么大么?
<br>: 呵呵。
<br>

bihai

我是14年转向C++11的,那个时候工作需要一个嵌入式的但是能TCP/IP,还要文件存储
,狠下心来,跟公司说要用Linux,不用MicroC OS。用ARM,不用单片机。用1G内存,
不用1M。这样就可以完全使用真正的C++了。当时问了如何使用TCP/IP,这里一个高手
告诉我是ASIO。用了一下不错。后来转行去Exxon工作完全是现代C++,用起来真爽,感觉很优美,全是智能指针,高级模板(enable_if等),右值语义,lambda, nullptr, = delete,= default, cast, for auto :, {initializer lists}, override, std::
thread, unordered_map, decltype, _1, std::bind。感觉C++是脱胎换骨了。之前要
函数调用居然通常是复制,太慢了。不过后来发现安卓居然用Strong Pointer, 比
Shared Pointer更快。不过有的员工能力不行,居然写的C++执行速度比Python代码要
慢。

后来2018年去BP面试还用上了ASIO。完全脱离了boost。现在ASIO已经进入C++20了吧?

【 在 wdong (万事休) 的大作中提到: 】
: C++已经不是活命语言了。活命语言是python或者js。
: 我这是和rust, go, swift这种二流语言相比而言。如果
: 非要花时间学一个语言,C++是值得投资的。
: ----
: 如果已经会了一种编程语言,想再找事或者技术上进一步提高,
: 还是C++一步到位吧。这个世界上,C++之上别无第二个语言。
: 特别是python/R的用户,可以给现有项目写扩展。
: 就跟买电子垃圾似的,如了门以后要有钱,看准了最好狠
: 下心来买个好的用十年。
: 目前的C++,对于库的作者我感觉其实并不友好。
: ...................

m
minquan

在甲骨文和金文里,既没有安全,也没有安保。
就是一个字,安。同理,英文的secure和safe也同源。
真不知道你细分成两个有啥意义?

还有,本版就有帖子,因为70%的入侵都与内存泄露有关,所以语言自己的物质安全性
不足,造成了被恶意利用的危险,形成了安保漏洞。这充分证明安全性与安保能力是相关的,你区分得清楚又有何高明?“苍蝇不叮无缝的蛋”——前四个字关于安保,后四
个字关于安全,老百姓都比你懂二者密不可分。

最后,就事论事是一种美德。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 我并未提及你所指是safe还是security。你猜了一个我的选择。而且不自知。这件事难
: 道不能让你警惕吗?此其一。
: 其二,safety, security之区别,你随便找英文文献或者stackoverflow 即可。这点没
: 有争论的必要。这也不是重点。
: 重点是:即便日常讨论,简化中文也更容易出bug, 误解,错误的翻译...
: 网上有那么多人认为,用python很难写强壮性要求高的程序。
: 你随便找个帖子,将其替换为关于简化中文的论证,然后看看是否就很通顺。这里面的
: 道理是一样的。
: 在古文里,一个“其”字就有三十多种用法。虚词之多少,至关重要。
:
: 你又有的杠啦?
: ...................

g
guvest

你自己查文章。中文文章必定也有讲此事的。

【 在 minquan(三民主义) 的大作中提到: 】

: 在甲骨文和金文里,既没有安全,也没有安保。

: 就是一个字,安。同理,英文的secure和safe也同源。

: 真不知道你细分成两个有啥意义?

: 还有,本版就有帖子,因为70%的入侵都与内存泄露有关,所以语言自己的物质
安全性

: 不足,造成了被恶意利用的危险,形成了安保漏洞。这充分证明安全性与安保能力是相

: 关的,你区分得清楚又有何高明?“苍蝇不叮无缝的蛋”——前四个字关于安保,后四

: 个字关于安全,老百姓都比你懂二者密不可分。

: 最后,就事论事是一种美德。

netghost

你這又是另外一個蒙着臉的地方也要死要面子的。上來發帖只看是不是“最近“和自己觀點有過不一樣的人,然後就開始噴。說實話用個算法掃描關鍵字也比你這個水平高點。

你顯然沒看之前的帖子,也不知道誰在擡槓,你的行爲就是根據看發帖人和自己的那點意難平而已。

【 在 minquan (三民主义) 的大作中提到: 】
: 你说的对,这是关注安全的公司的起码的做法。
: 不用被杠精浪费时间。
: 他这号就是纯粹在本版缓解躁郁症的。
: release

p
pickvalue

Swig 也不错

【 在 wdong (万事休) 的大作中提到: 】
: python的看这里,应该是目前最靠谱的吧:
: https://pybind11.readthedocs.io/en/stable/
: 我之前用boost::python,一年多前转的。

bihai

用过。有一次险些做不出来。感觉做出来算奇迹了,模板什么的。跟组长说这样做好,简洁,大家同意了,结果费了很多脑力才做出来。

【 在 pickvalue (pickvalue) 的大作中提到: 】
: Swig 也不错

m
minquan

你就不死要面子?
这里大家看得很清楚
是哪帮人没事找事,把一个技术交流的版面活生生搞成简体字批斗会

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 你這又是另外一個蒙着臉的地方也要死要面子的。上來發帖只看是不是“最近“和自己
: 觀點有過不一樣的人,然後就開始噴。說實話用個算法掃描關鍵字也比你這個水平高點。
: 你顯然沒看之前的帖子,也不知道誰在擡槓,你的行爲就是根據看發帖人和自己的那點
: 意難平而已。

g
guvest

我早就说了。简化中文里分不清批评,批判,与批斗。提倡繁体字,
强国还有作家写书讲这事呢。人大还有提案呢。你不服有何用。你能挡住强国每年出版无数繁体字读物么。

之前,本版好长时间都是机器人。就我跟其他一两人。
“技术交流的版面”是啥时候开始的,你自己查。

【 在 minquan(三民主义) 的大作中提到: 】
<br>: 你就不死要面子?
<br>: 这里大家看得很清楚
<br>: 是哪帮人没事找事,把一个技术交流的版面活生生搞成简体字批斗会
<br>: 點。
<br>

netghost

首先你知道你自己在死要面子了,這是進步。

是不是死要面子的一個具體特徵就是會不會就事論事,具體這個帖子裏面你之前的回答只說明一件事你根本沒看我和他的post和觀點然後就開噴。僅僅是你看見了這些帖子的id而已,不是麼?

【 在 minquan (三民主义) 的大作中提到: 】
: 标 题: Re: 原來53歲騙子網管出現了
: 发信站: BBS 未名空间站 (Mon Feb 22 01:34:08 2021, 美东)
:
: 你就不死要面子?
: 这里大家看得很清楚
: 是哪帮人没事找事,把一个技术交流的版面活生生搞成简体字批斗会
:
: 【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: : 你這又是另外一個蒙着臉的地方也要死要面子的。上來發帖只看是不是“最近“和自己
: : 觀點有過不一樣的人,然後就開始噴。說實話用個算法掃描關鍵字也比你這個水平高
: 點。
: : 你顯然沒看之前的帖子,也不知道誰在擡槓,你的行爲就是根據看發帖人和自己的那點
: : 意難平而已。
:
:
:
: --
m
minquan

我为什么要关心你的帖子?
人家在讲如何安全可靠的布署
你上来胡搅蛮缠一通攻讦人家的专业性
我声援他一下,惹得你们又来像马蜂一样群叮了
我关心你们怎么来叮我,是在自取其辱

一个讲C++的技术贴,被尔等小人搞得乌烟瘴气,还号称本版没你们不行
自己查查金庸的《笑傲江湖》,尔等是否有日月神教风范?

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 首先你知道你自己在死要面子了,這是進步。
: 是不是死要面子的一個具體特徵就是會不會就事論事,具體這個帖子裏面你之前的回答
: 只說明一件事你根本沒看我和他的post和觀點然後就開噴。僅僅是你看見了這些帖子的
: id而已,不是麼?
: 自己
: 那點

g
guvest

金庸小说之原版都是竖行繁体。且往往头尾都有诗句插入,写作类似于古法。是半文言半白话。

【 在 minquan(三民主义) 的大作中提到: 】

: 我为什么要关心你的帖子?

: 人家在讲如何安全可靠的布署

: 你上来胡搅蛮缠一通攻讦人家的专业性

: 我声援他一下,惹得你们又来像马蜂一样群叮了

: 我关心你们怎么来叮我,是在自取其辱

: 一个讲C 的技术贴,被尔等小人搞得乌烟瘴气,还号称本版没你们不行

: 自己查查金庸的《笑傲江湖》,尔等是否有日月神教风范?

netghost

所以你不就承認了你啥也沒看只看見id就開噴唄。

你這個蠢貨如果看了帖子,你就會知道是誰在先瞎噴。
【 在 minquan (三民主义) 的大作中提到: 】
: 我为什么要关心你的帖子?
: 人家在讲如何安全可靠的布署
: 你上来胡搅蛮缠一通攻讦人家的专业性
: 我声援他一下,惹得你们又来像马蜂一样群叮了
: 我关心你们怎么来叮我,是在自取其辱
: 一个讲C++的技术贴,被尔等小人搞得乌烟瘴气,还号称本版没你们不行
: 自己查查金庸的《笑傲江湖》,尔等是否有日月神教风范?

s
stavka

multithreading是真不能靠库搞定的,我工作中踩过这个坑:https://www.hpl.hp.com/techreports/2004/HPL-2004-209.pdf
对coroutine不是很清楚,不过既然也是并发的实现难免有类似的问题
【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 因爲it based on C。
: 問題是,這些東西用庫support就好了。不是每個人都需要這些東西的,真的需要這個
: 東西的人也不會care語言內部內建。

m
minquan

多谢

【 在 stavka (harder) 的大作中提到: 】
: multithreading是真不能靠库搞定的,我工作中踩过这个坑:
: https://www.hpl.hp.com/techreports/2004/HPL-2004-209.pdf
: 对coroutine不是很清楚,不过既然也是并发的实现难免有类似的问题

netghost

恩 。我問一個很簡單的事情,今天你要寫一個多線程的程序,你是打算用pthread,
還是C11的_thread?

這個老爺子(寫C gc的)列舉了很多事實,本身都是對的。但是卻有一點很不好的習慣,
也是搞學術的人的特點,爲了自己的某個目的一定要把N件並不直接相關的事情放在一起
好得出一個非常明確的結論。

他說得第一點是並行處理裏面的memory model的問題,
第二點是memory layout的問題。
第三點是編譯器優化的問題。

問題是這三個東西根本就不是C89的規範定義的事情,這之外的事情都是
implementation相關的。thread library本來某個平臺上面實現相關的的東西,
這就好比,opengl library從來就不是C89的standard,它需要平臺有相關軟硬件
的支持,但是說用庫不能實現opengl?這顯然非常可笑。我看不出pthread和這個有
什麼本質區別。

所以如果說,在只使用C89 standard下面僅僅用庫不能解決threading的問題,
我同意,但是這是一句大白話。

【 在 stavka (harder) 的大作中提到: 】
: multithreading是真不能靠库搞定的,我工作中踩过这个坑:
: https://www.hpl.hp.com/techreports/2004/HPL-2004-209.pdf
: 对coroutine不是很清楚,不过既然也是并发的实现难免有类似的问题

p
pptwo

这是篇2004年的文章,指出了当时C/C++语言没有memory ordering model的问题,
后面C11/C++11确实也在语言层面解决这个问题。当然现在还拿这个出来说事情
是有些toooold了。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 恩 。我問一個很簡單的事情,今天你要寫一個多線程的程序,你是打算用pthread,: 還是C11的_thread?
: 這個老爺子(寫C gc的)列舉了很多事實,本身都是對的。但是卻有一點很不好的習慣,
: 也是搞學術的人的特點,爲了自己的某個目的一定要把N件並不直接相關的事情放在
一起
: 好得出一個非常明確的結論。
: 他說得第一點是並行處理裏面的memory model的問題,
: 第二點是memory layout的問題。
: 第三點是編譯器優化的問題。
: 問題是這三個東西根本就不是C89的規範定義的事情,這之外的事情都是
: implementation相關的。thread library本來某個平臺上面實現相關的的東西,
: ...................

T
TeacherWei

这些玩意儿,所有C编译器早就解决了。

所谓“Intrinsic function”https://en.wikipedia.org/wiki/Intrinsic_function

后来C++又特别封装了memory ordering model。

其实会玩memory ordering model的,本版有没有我不知道,真正秀过的,我没看到。

当年我的12306代码,里面是有一些memory ordering trick的,那是实践检验过的lock-free代码,每天几十亿美金的交易在上面跑呢。但是当时我没说。真正看出门道的有
几个,但是他们也没明说。LOL。

【 在 pptwo (pp) 的大作中提到: 】
: 这是篇2004年的文章,指出了当时C/C++语言没有memory ordering model的问题,
: 后面C11/C++11确实也在语言层面解决这个问题。当然现在还拿这个出来说事情
: 是有些toooold了。
: 慣,
: 一起

netghost

恩,所以我覺得他羅列的地方是的確有這麼回事的。

但是做編譯器的,和開發線程庫的人都知道這些事情。gcc早就有一堆內建擴展來實
現這個東西,從compiler的barrier到CPU的reorder的barrier,而且後者也可以通過匯編指令來保證。

當然搞一個規範來明確的定義這些功能有沒有意義?maybe。不過他可能沒有意識到,C最大的power就是對平臺做最少的假設,而讓平臺自己去關係特有的屬性。

但是這裏面最最最重要的是,所有這些東西,都不是justify在硬放一個thrd_start_t
這種沒事找事的行爲。因爲你完全可以增加memory order的規範,然後讓library
build去用這些統一的接口,而不去mess up已經well adopted的user interface。

做技術的人,要honest地不夾帶自己的私貨,真的很難。
【 在 pptwo (pp) 的大作中提到: 】
: 这是篇2004年的文章,指出了当时C/C++语言没有memory ordering model的问题,
: 后面C11/C++11确实也在语言层面解决这个问题。当然现在还拿这个出来说事情
: 是有些toooold了。
: 慣,
: 一起

c
chebyshev

说实话我不懂他的重点是什么。
纯c89的底层库是很少的。各种atomic这个那个多的是。
难道往里面加汇编还实现不了多线程么。
(性能另说)。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 恩 。我問一個很簡單的事情,今天你要寫一個多線程的程序,你是打算用pthread,: 還是C11的_thread?
: 這個老爺子(寫C gc的)列舉了很多事實,本身都是對的。但是卻有一點很不好的習慣,
: 也是搞學術的人的特點,爲了自己的某個目的一定要把N件並不直接相關的事情放在
一起
: 好得出一個非常明確的結論。
: 他說得第一點是並行處理裏面的memory model的問題,
: 第二點是memory layout的問題。
: 第三點是編譯器優化的問題。
: 問題是這三個東西根本就不是C89的規範定義的事情,這之外的事情都是
: implementation相關的。thread library本來某個平臺上面實現相關的的東西,
: ...................

netghost

編譯器的優化的一部分是reorder statement,CPU的優化的一部分是reorder 指令,之前非並行的時代,只要保證非並行的結果是對的,愛怎麼搞怎麼搞。所以各個編譯器,各個架構都隨便搞,結果不僅independent的 load/store可以打亂,還有了DEC alpha
這種奇葩可以reorder dependent load的,比如說
if(p) { foo = p->x + p->y; }
可以先load p->x 和p->y然後再load p。最後的結果就是你在高級語言裏面的
statement 1 2 3 4,到了編譯器可能會變成1 3 2 4, 然後經過編譯器會變成4 2 1 3, as long as 最後結果一樣,你也沒啥好說的。

結果到了並行時代這些"優化"當然就都成坑了,需要去填。一個明顯的問題就是
pthread_mutex_lock種函數,如果允許這麼搞,顯然就有不work的可能性。所以實現這些庫的人需要兩個東西,第一個是編譯器的barrier,然後是cpu architecture的
barrier。所以
當時的線程庫一般都需要和平臺還有編譯器綁定(其實今天也是),因爲沒有統一
memory ordering定義。

但是不管怎麼搞,需要幹的事情就這些,either自己在每個要支持的平臺上面把這兩件事幹了(which 是linux kernel做得事情),或者然後別人把這件事幹了,用它的,或者一個人呢把這件事在所有平臺上都幹了,然後大家都用這個東西。我看來他想當最後這種人,which我覺得也算是有意義的工作。

但是,回到他的point,他似乎想通過這一堆事情,說明他在C++ standard committe里做的事情的必要性是因爲多線程編程不能用庫來實現,這件事,我覺得就就有點販賣私貨的嫌疑了。C/C++缺乏統一的memory model的定義,不是你加關鍵字的理由,very
simple。

【 在 chebyshev (......) 的大作中提到: 】
: 说实话我不懂他的重点是什么。
: 纯c89的底层库是很少的。各种atomic这个那个多的是。
: 难道往里面加汇编还实现不了多线程么。
: (性能另说)。
: 慣,
: 一起

c
chebyshev

这问题很简单。
a = 1;
b = 1;
c = 1;

通过编译器之后,其顺序可能是acb,CPU里面执行又是另一个顺序。

几十年前所有硬件的驱动程序里就有大量自己定制的各种atomic之类的东西。
不然你一边从传感器拿数据,一边Listen都做不到。

他可能是想分析C的abstract machine里不可能有多线程?
这当然是对的。C的spec没这部分啊。像上面三句话。C的要求是在single expression
上的。
不管上下文和顺序的。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 恩,所以我覺得他羅列的地方是的確有這麼回事的。
: 但是做編譯器的,和開發線程庫的人都知道這些事情。gcc早就有一堆內建擴展來實
: 現這個東西,從compiler的barrier到CPU的reorder的barrier,而且後者也可以通過匯
: 編指令來保證。
: 當然搞一個規範來明確的定義這些功能有沒有意義?maybe。不過他可能沒有意識到
,C
: 最大的power就是對平臺做最少的假設,而讓平臺自己去關係特有的屬性。
: 但是這裏面最最最重要的是,所有這些東西,都不是justify在硬放一個thrd_start_
t
: 這種沒事找事的行爲。因爲你完全可以增加memory order的規範,然後讓library
: build去用這些統一的接口,而不去mess up已經well adopted的user interface。
: 做技術的人,要honest地不夾帶自己的私貨,真的很難。

c
chebyshev

cpp不知道。据我所知,没什么人鸟c11。
并发啥的,其本身就是一个特定domain的要求。
不是普适性的需要。

所以这些东西应该写程序的人自己管好。
放在语言里未必就一定是好事。
feature escalation也可能把自己弄死了。

【 在 pptwo (pp) 的大作中提到: 】
: 这是篇2004年的文章,指出了当时C/C++语言没有memory ordering model的问题,
: 后面C11/C++11确实也在语言层面解决这个问题。当然现在还拿这个出来说事情
: 是有些toooold了。
: 慣,
: 一起

netghost

這個和atomic沒關係。而且也沒有那麼簡單。

不過這不是最重要的,看見沒,這個人扯了一堆技術上面的複雜概念的關鍵目的是要改別人到底是該寫pthread_create, 還是寫thr_create,還是whatever他腦子裏面想別人用的。

但是事實上,所有這些理由,邏輯上面都和這東西有沒有必要修改語言的關鍵字和標準庫沒有關係。

說到最後,都是要影響別人怎麼說話。
【 在 chebyshev (......) 的大作中提到: 】
: 这问题很简单。
: a = 1;
: b = 1;
: c = 1;
: 通过编译器之后,其顺序可能是acb,CPU里面执行又是另一个顺序。
: 几十年前所有硬件的驱动程序里就有大量自己定制的各种atomic之类的东西。
: 不然你一边从传感器拿数据,一边Listen都做不到。
: 他可能是想分析C的abstract machine里不可能有多线程?
: 这当然是对的。C的spec没这部分啊。像上面三句话。C的要求是在single
expression
: 上的。
: ...................

netghost

cpp自從Cpp11之後就不是一個穩定語言了。說白了,已經淪落成一個開發工具而非傳統意義上的語言了。你可以學了10年的C++,結果某個開發團隊在用一個東西也叫C++,結果你去了之後和新手沒區別。

這種事情,你能加async,你能加lamda,rust就不能加?反正都要折騰,還不如學個時髦點的東西,這就是爲啥越來越多的CPP programer跑掉的原因。
【 在 chebyshev (......) 的大作中提到: 】
: cpp不知道。据我所知,没什么人鸟c11。
: 并发啥的,其本身就是一个特定domain的要求。
: 不是普适性的需要。
: 所以这些东西应该写程序的人自己管好。
: 放在语言里未必就一定是好事。
: feature escalation也可能把自己弄死了。

iDemocracy

如果C++23把指针完全取消,那就真的没有专家用了,可能会吸引一代新手。

【 在 chebyshev (......) 的大作中提到: 】
: cpp不知道。据我所知,没什么人鸟c11。
: 并发啥的,其本身就是一个特定domain的要求。
: 不是普适性的需要。
: 所以这些东西应该写程序的人自己管好。
: 放在语言里未必就一定是好事。
: feature escalation也可能把自己弄死了。
netghost

基本上大部分用C++xx的shop,都基本上早就大規模禁用raw指針了,which means沒指
針了。
【 在 iDemocracy (DEMO) 的大作中提到: 】
: 如果C++23把指针完全取消,那就真的没有专家用了,可能会吸引一代新手。

dumbCoder

所以硬要 C++ Rust 二选一的话, 你觉得Rust更好?

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: cpp自從Cpp11之後就不是一個穩定語言了。說白了,已經淪落成一個開發工具而非傳統
: 意義上的語言了。你可以學了10年的C++,結果某個開發團隊在用一個東西也叫C++,結
: 果你去了之後和新手沒區別。
: 這種事情,你能加async,你能加lamda,rust就不能加?反正都要折騰,還不如學個時
: 髦點的東西,這就是爲啥越來越多的CPP programer跑掉的原因。

netghost

暈,能學點別的嗎?

一定一定要選一個的話,還是rust吧。至少trendy一點。雖然也是浪費時間。
【 在 dumbCoder (HumbleCoder 不懂就问-_-) 的大作中提到: 】
: 所以硬要 C++ Rust 二选一的话, 你觉得Rust更好?

dumbCoder

C++是不想再写了, 虽然以前写了很久

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 暈,能學點別的嗎?
: 一定一定要選一個的話,還是rust吧。至少trendy一點。雖然也是浪費時間。

g
guvest

Rust随时可能夭折的。我猜不管什么语言区别并不大。其实最后都是自己定义一些子集和固定的写法。形成固定的风格。

【 在 dumbCoder(HumbleCoder 不懂就问-_-) 的大作中提到: 】

: C 是不想再写了, 虽然以前写了很久

magagop

Cpp當然比Rust有用,做CPU、GPU的只能用C和Cpp。
並行計算不只有pthread和coroutine,還有openmp和openmpi,Rust根本搞不定。
庫函數也不是只有boost,還有CUDA、ROCM、ONEAPI。不用C,怎麼和硬件打交道?
關於atomics和memory model,這裡哪個人知道armv8.0居然不支持instruction cache coherence。即使看看網上的wiki了解一些atomics的皮毛,有幾個人知道armv8.1
ldadd, stadd, cas的底層實現?
Cpp近幾年發展很好,至少比Java目標明確。
還有在MCU上的ucos3,現在開源了,IAR也支持cpp14,有很多TCPIP和文件系統的庫,
根本不需要上Linux。上Linux根本做不得sub-us的實時,也做不到鈕扣電池供電。
我挺喜歡Cpp的,和py組成深度學習絕配。現在gcc都到10,llvm都11了,非常給力。但是又有誰注意到gcc10不支持znver3的。
未來硬件變化很大,需要更多Cpp深入發掘性能,而不是其他新語言。

T
TeacherWei

看了你的贴子,才发现ucos3开源一年了。

刚刚看了一下,根本没有人气啊!当然,设计够严谨的。

问题是我用FreeRTOS,自己做了tickless mode的简单scheduler。效果一摸一样。

当然,对我来讲,完全从FreeRTOS switch到ucos,也就是2周的事情。但是2周是巨大
的成本。而且目前根本不justify啊。

【 在 magagop (magagop) 的大作中提到: 】
: Cpp當然比Rust有用,做CPU、GPU的只能用C和Cpp。
: 並行計算不只有pthread和coroutine,還有openmp和openmpi,Rust根本搞不定。
: 庫函數也不是只有boost,還有CUDA、ROCM、ONEAPI。不用C,怎麼和硬件打交道?
: 關於atomics和memory model,這裡哪個人知道armv8.0居然不支持instruction
cache
: coherence。即使看看網上的wiki了解一些atomics的皮毛,有幾個人知道armv8.1
: ldadd, stadd, cas的底層實現?
: Cpp近幾年發展很好,至少比Java目標明確。
: 還有在MCU上的ucos3,現在開源了,IAR也支持cpp14,有很多TCPIP和文件系統的庫,
: 根本不需要上Linux。上Linux根本做不得sub-us的實時,也做不到鈕扣電池供電。
: 我挺喜歡Cpp的,和py組成深度學習絕配。現在gcc都到10,llvm都11了,非常給力。但
: ...................

magagop

我們正相反,本來想改用freertos,發現bug多,然後ucos3開源了,就不改了。ucos3
適合新手,文檔和代碼都比freertos好多了。我要說的意思是:最近cpp進步明顯,連
最後MCU的陣地都可以用Cpp14了,lambda開發MCU不要太爽

【 在 TeacherWei(TW) 的大作中提到: 】

: 看了你的贴子,才发现ucos3开源一年了。

: 刚刚看了一下,根本没有人气啊!当然,设计够严谨的。

: 问题是我用FreeRTOS,自己做了tickless mode的简单scheduler。效果一摸一样。

: 当然,对我来讲,完全从FreeRTOS switch到ucos,也就是2周的事情。但是2周
是巨大

: 的成本。而且目前根本不justify啊。

: cache

T
TeacherWei

那是你们赶上好时候了而已。当然对我来讲RTOS不是关键,怎么都能搞一个稳定的。这又回到了老问题,一个内存几十K的玩意儿,连OS都不是关键,C++ lambda能爽在哪里?

当然了,我用C++是很爽,但是那是在大ARM端,用Linux。和MCU共享几万行C代码。

你们用IAR么?好奇他们还能不能活下去?我是直接上GNU C++ embedded的。Love it!

【 在 magagop (magagop) 的大作中提到: 】
: 我們正相反,本來想改用freertos,發現bug多,然後ucos3開源了,就不改了。
ucos3
: 適合新手,文檔和代碼都比freertos好多了。我要說的意思是:最近cpp進步明顯,連
: 最後MCU的陣地都可以用Cpp14了,lambda開發MCU不要太爽
:
: 看了你的贴子,才发现ucos3开源一年了。
:
: 刚刚看了一下,根本没有人气啊!当然,设计够严谨的。
:
: 问题是我用FreeRTOS,自己做了tickless mode的简单scheduler。效果一摸一样。
:
: 当然,对我来讲,完全从FreeRTOS switch到ucos,也就是2周的事情。但是2周
: 是巨大
:
: 的成本。而且目前根本不justify啊。
:
: cache
: ...................

T
TeacherWei

哦,既然magagop帖子里提到Cpp14,看来还是用IAR。

IAR号称对MCU的优化更好,这个我不怀疑。但是一个私营公司和开源GCC死磕,能撑到
什么时候?令人怀疑。。。更何况C++这个更新进度。。。LOL。