V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  pastor  ›  全部回复第 10 页 / 共 10 页
回复总数  199
1  2  3  4  5  6  7  8  9  10  
2022-05-25 12:58:34 +08:00
回复了 lotusp 创建的主题 程序员 为什么每个微服务要有自己独立的数据库?
就是像楼主这种只知道人云亦云拿来主义的垃圾架构师太多了,而且其中很多还喜欢“布道”,于是坑了更多人

前几年大肆鼓吹微服务的很多,被坑的人很多,以 uber 为例,去年又发帖子说他们要搞宏服务

中台也一样,坑很多团队,真正适合的搞法是从实际出发,除非你家业务成熟稳定需求不怎么变了比如很多传统企业级的产品,否则就别鼓吹什么不知道实事求是的方法论了
2022-05-23 16:17:29 +08:00
回复了 Biwood 创建的主题 程序员 Linus Torvalds 在 TED 演讲上所说的有品味的代码
#112 cpp 最被 cer 诟病的原因之一就是 cpp 有太多背后的行为,比如构造析构,比如并不写在 main 的显示流程里、而是放在小角落那种对象偷偷靠构造函数初始化一些东西,看上去奇技淫巧,实际上都是茴字的 N 种写法,除了让人摸不着头脑、浪费更多时间经历,对工程并无好处
2022-05-23 16:14:29 +08:00
回复了 Biwood 创建的主题 程序员 Linus Torvalds 在 TED 演讲上所说的有品味的代码
@ColorfulBoar #103
"这里做的是把指向一个 struct 第一个元素的指针转化成了指向这个 struct 本身的指针"
如果初衷就是这样,那功能上没问题,我前面回复的数组指针搞混是我之前没看自己你这块的解释回复唐突了
但是从易于理解的角度讲,这并比 linus 二级指针版本更友好吧兄弟。。
2022-05-23 15:59:29 +08:00
回复了 Biwood 创建的主题 程序员 Linus Torvalds 在 TED 演讲上所说的有品味的代码
@cnbatch
恩,好多楼层我也没看,但是他贴代码那个图其实挺漂亮的所以我就多看了一眼
幻的几层楼我也没细看,因为十几年前就看过太多幻和大伙对于律法与哲学的无意义辩论了。十几年过去了,除了对新的 c++标准也熟悉了,幻几乎没什么变化:joy:
2022-05-23 15:36:33 +08:00
回复了 Biwood 创建的主题 程序员 Linus Torvalds 在 TED 演讲上所说的有品味的代码
习惯了指针思维,你脑子里是直接在跟内存打交道,那感觉就是:一切尽在我掌控

c++本身也是提供了底层能力,但却又想用引用之类的提供给你一些不用陷入内存细节的便利,或许让你轻松了些,但反倒某种程度上悄悄阉割了使用者对内存、对系统的思考能力、降低了理解水平,真要说区别,相比于 c 可能 c++更适合逻辑程序员吧,只是在自欺欺人地以为自己的用法更好了。但看下语言排行吧,c 地位稳定(虽然有 linux 内核及其相关领域比如安卓之类的离不开 c 的原因),cpp 被其他语言蚕食。。
2022-05-23 15:27:01 +08:00
回复了 Biwood 创建的主题 程序员 Linus Torvalds 在 TED 演讲上所说的有品味的代码
@cnbatch 恩恩我知道你没怎么看他代码,我只是戏谑一句。。我是想表达那几位给了 ColorfulBoar 代码点赞的有点奇怪。。
2022-05-23 15:25:09 +08:00
回复了 Biwood 创建的主题 程序员 Linus Torvalds 在 TED 演讲上所说的有品味的代码
@ColorfulBoar 所以其实我对 c++11 之前的引用的理解好像没啥问题,你两个楼层里说我不懂的时候我还以为是 c++11 以后的原因导致我真的错了,但其实你应该还没有看过或者真正看懂我最初列的问题里的二级指针的问题。内存布局导致取 head 地址跟 next 值重合的巧合可能掩盖了你对指针的误解
2022-05-23 15:22:37 +08:00
回复了 Biwood 创建的主题 程序员 Linus Torvalds 在 TED 演讲上所说的有品味的代码
@ColorfulBoar #103
指向 list 的第一个元素也应该是取 list_node 的地址,而不是取 list_node*的地址,你应该是把取数组地址、取数组第一个元素的地址搞混了吧,由于数组的内存布局和 c 类型的原因,数组变量、取数组地址的指针、0 元素地址都是相同的值,但结构体是不一样的

你看下我前面贴的代码的注释的部分,你这个写法在 list_node 的 next 不是第一个字段的布局情况下,应该是不行的,或者你自己改改 list_node 字段布局跑下就知道了

关于 list_head 的命名,一般的 list 是单独一个 struct{ list_node/list_item * head, tail }之类的,估计你可能是没怎么自己真动手写过所以想直接用 head 来表示整个 list 所以才会这样命名,这样不实用的
2022-05-23 14:55:26 +08:00
回复了 opentrade 创建的主题 健康 被海底涝干翻
海底捞 从此更名 海底拉
2022-05-23 14:50:04 +08:00
回复了 Biwood 创建的主题 程序员 Linus Torvalds 在 TED 演讲上所说的有品味的代码
我上一楼代码里那个 cnt 和 cnt++ 只是为了调试用的,粘贴的时候忘了去掉
2022-05-23 14:32:47 +08:00
回复了 Biwood 创建的主题 程序员 Linus Torvalds 在 TED 演讲上所说的有品味的代码
@ColorfulBoar 很久没写 cpp ,我调试了下,请看注释的部分吧:

#include <stdio.h>

struct list_node;
using list_head = list_node *;

struct list_node
{
list_head next;
int value;
};

void remove(list_head &head, list_head target)
{
// 这里确实是二级指针,其实内存已经乱掉了;
// 但因为 list_node 的第一个字段是 next 指针,而你的 p 的值是 head 的值,也就是说,p作为 list_node 的第一个字段的值刚好跟 head 是内存是同一段内存
auto p = list_head(&head);
// 所以这里的 while 循环的第一次判断 (p-> != target) 实际上是判断 head != target ,所以整个循环下来,也能得到正确的结果
// 但是这依赖于 list_node 的字段的内存布局,list_node 的 next 字段必须是结构体第一个字段才能正确运行
// 否则,把 value 放在 next 前面,或者在前后中间再多加点字段,野指针可能就 coredump 了,或者运气好由于出入栈之类的刚好指向了哪个 ok 的地址没 coredump 但是也没有删除成功,我已经试过了,不信你改下代码试试
// 当然你也可以把 head p 以及他们作为指针只想的 list_node 各个字段的值都打印出来,然后你就发现了,p->next == head ,这只是内存布局巧合导致你运气好而已

// 单纯讨论 cpp ,正确的写法应该是 auto p = head;

int cnt = 0;
while (p->next != target)
{
p = p->next;
cnt++;
}
p->next = target->next;
printf("cnt: %d\n", cnt);
}

void travel(list_head head)
{
printf("----------------------\n");
auto p = head;
while (p)
{
printf("value: %d, %p, %p\n", p->value, p, p->next);
p = p->next;
}
printf("----------------------\n");
}

int main()
{
list_node node1, node2, node3;
node1.value = 1;
node2.value = 2;
node3.value = 3;
node1.next = &node2;
node2.next = &node3;
node3.next = nullptr;

list_head head = &node1;
list_head target = &node2;

travel(head);
remove(head, target);
travel(head);
}

@cnbatch #98 所以按你说的,我 #46 最初就没说错对吧?我是被他第一次说我不够资格还以为是什么 11 之后的高级东西我确实不懂呢,也看下我上面调试的吧,如果我说的没问题,那你们之前就没人仔细看下他这个代码啊?。。。:joy:
2022-05-23 13:00:27 +08:00
回复了 Biwood 创建的主题 程序员 Linus Torvalds 在 TED 演讲上所说的有品味的代码
@ColorfulBoar 那咱先不要喷 linus 的话题了,改成友好的技术交流

这里的
auto p = list_head(&head);
因为 head 作为函数参数是引用进来的,所以这里的 head 是 list_node*对吧?
然后,list_head((&head)) 这里在 list_head() 应该是类型转换吧,如果不考虑 list_head() 转换后,只考虑 (&head) 它是转成左值引用还是取地址变成 list_node**?如果是变成 list_node** 这个属于 11 之前,我是知道大概的,但是 11 之后的我确实不懂,虚心请教
2022-05-23 12:25:10 +08:00
回复了 Biwood 创建的主题 程序员 Linus Torvalds 在 TED 演讲上所说的有品味的代码
@ColorfulBoar 而且,既然 cpper 可以跨界去喷 linus 的 c ,我这种 c++11 前的人评价你 c++11 后的的 c++也相当于跨界了,本质也没什么不同,别扯什么资格不资格的
2022-05-23 12:23:04 +08:00
回复了 Biwood 创建的主题 程序员 Linus Torvalds 在 TED 演讲上所说的有品味的代码
@ColorfulBoar

哦,你这个是左值引用还是什么是吧?那是我 2 3 说错,我对 c++11 及以后没什么研究,我无知了

但问题又来了,c++这各种语法语义,比如就我犯错的这个地方就很容易跟指针弄混,要想不弄混得先来个内家十年不出门的修炼,就真的漂亮了?

另外我说的 1 4 ,就不是问题了?

再者,逻辑清晰一点,你也不要随便给别人乱扣帽子说舔,我没有舔,我只是对行业领袖心存敬畏尊重
也建议你不要说资格,啥时候尊重别人还需要先自己也要在那个领域很牛逼才有资格了?难道我尊重爱因斯坦首先我也得是个物理学大牛?

张口就来踩别人行业领袖烘托自己牛逼很高尚?而且如果真要讲资格,那我也想问问你,阁下有哪些成就配得上让您居高临下踩 linus ?别说成就,就 list_head 相比与 list_item 的 taste 就更好是吗?

你们深度中毒的 cpper 可真是天下无敌,连被喷邪教的 gopher 见了你们都得礼让三百分

我只是看不惯你们张口就来说别人行业领袖不行,乱带节奏,但我可没乱给你扣帽子舔或者怎么样,所以也请你们逻辑不要那么混乱地乱扣帽子
浮躁的时候谁都有,遇到机会了扪心自问下改正了提高下自己的修养可能更香
程序员多数都懂着一些 linux 相关的呢,送人玫瑰手有余香,赞赏肯定一下别人有那么难吗
2022-05-23 11:43:25 +08:00
回复了 Biwood 创建的主题 程序员 Linus Torvalds 在 TED 演讲上所说的有品味的代码
@ColorfulBoar #88 难道你们在说出 linus 没有 taste 的时候都不思考下自己的代码是否就真的有 taste 吗?非要踩行业神仙来抬高自己,上一楼回复幻的话同样送给你,你的代码我前面也评论过了
2022-05-23 11:36:24 +08:00
回复了 Biwood 创建的主题 程序员 Linus Torvalds 在 TED 演讲上所说的有品味的代码
@FrankHB #83

这么多年过去了,c/c++领域论杠精和嘴强王者我绝对把你排第一,但陷入细节太深本身也是中毒。很多观点你都像是在虚空论道、口若悬河、不食人间烟火——不食人间烟火是因为你更多偏于理论、脱离工程。c++本身的复杂本身就由于需要耗费工程师大把内功修炼时间而导致脱离工程实际,否则何苦又有人去搞 rust 。
在 c++领域的很多讨论,你都没有输,你是上帝一样的存在。但就像你的昵称一样,前面带了个“幻”字,你所自我感觉良好的那些东西,很多都是假象。
这样评论,有人可能会觉得我只会无脑输出,但看到那句“从 Linus Torvalds 这些年来干的活看本质是个 PM ,从不用指望 coding 水平多高就是了”是实在忍不住了。
幻上帝至少十几年前就已经很出名了,我也早就知道。我也有自知之明,c++语言本身的语法语义各种知识,我是比幻上帝甚至这里的一些人都要差很多的,因为我更在乎工程实际,够用好用即可,减少工程复杂度、提高工程效率才是我所追求的。
我无意去吹捧社区领袖,因为 linux 和 linus 的贡献、地位都是显而易见、毋庸置疑的。
但区区一众凡人,非要踩领袖来抬高自己,从来都不觉得小丑可能是自己吗?
2022-05-22 13:34:20 +08:00
回复了 spencer00 创建的主题 移民 2022 年润的话,加拿大 澳大利亚更推荐哪个呢
澳大利亚刚换总理了,不知道政策会不会变好点
2022-05-20 15:53:18 +08:00
回复了 Biwood 创建的主题 程序员 Linus Torvalds 在 TED 演讲上所说的有品味的代码
@nevin47 #51 其实我怀疑那帮说 linus 写法不好的小年轻是不是连 linus 是谁都不知道。见惯了 ctrl+cv 程序员评价语言、框架、写法这不好那不好的,但 cv 程序员自己基本功都没扎实呢,所以幸好有 linus 之类的独裁型社区领袖,否则各种乱建议说不定就把好玩意搞砸了
2022-05-20 12:55:14 +08:00
回复了 Biwood 创建的主题 程序员 Linus Torvalds 在 TED 演讲上所说的有品味的代码
首先声明:我水平很一般。

正题:指针、二级指针在内核社区,或者在嵌入式领域,都是很常规的操作,而且主题部分的两段代码,第二段确实节省了语句指令、更简洁。应用层的 CV 程序员就不要乱说 linus 的不好了吧,首先提高下自己的水平再战好不好?又菜又不承认也就算了,还非要站出来去指责自己领域里神仙般的存在的代码,你们这些这样“我不要你觉得,我要我觉得。。。”的大神可真让人开眼。

@ColorfulBoar #29
1. linux 内核不支持 cpp ,所以请不要用 cpp 引用这种来对比内核代码了吧
2. auto p = list_head(&head); 如果我没看错的话,head 自己是指针,&head 是二级指针,这里相当于把&head 这个二级指针强转成一级指针了吧?所以后面的操作内存应该已经是乱掉了吧?我很久没写 c/c++了,不知道是不是我看错了,各位确认下吧
3. 这段代码,引用和指针都用,看上去比 linus 的版本更容易迷惑人,比如我 2 中提到的,然后还有人点赞。。。
4. 单从命名上讲,list_head 这个也不合理啊,next 之后它还是 head 吗?明明是 list_item 更合理好不好?
1  2  3  4  5  6  7  8  9  10  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3760 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 20ms · UTC 00:58 · PVG 08:58 · LAX 17:58 · JFK 20:58
Developed with CodeLauncher
♥ Do have faith in what you're doing.