`
xpp02
  • 浏览: 1071292 次
社区版块
存档分类
最新评论

对话Linus Torvalds:大多黑客甚至连指针都未理解

 
阅读更多
摘要:Linus Torvalds坦言那些狡诈的通过文件名查找高速缓存,然后又抱怨自己能力一般的内核“恶魔”才是他欣赏的;相反,很多人连低水平的内核编程都还没学好。

几周前, Linus Torvalds在Slashdot上回答了一些问题。其中有一条引发了开发者们的强烈关注,当被问到他心目中的内核黑客时,他说自己这些日子已经不怎么看代码了,除非是帮别人审查。他稍微暂停了一下,坦言那些“狡猾”的通过文件名查找高速缓存又抱怨自己能力一般的内核“恶魔”(黑客)才是他欣赏的。

他说:

相反,很多人连低水平的内核编程都还没学好。像lockless用名字查找(name lookup)功能即使不大也不复杂,却是指针到指针的一个简单及良好的使用方法。比如,我曾看见过许多人通过跟踪上一页条目删除一个单向链接的列表项,然后删除该条目。例如:

  1. if(prev)
  2. prev->next=entry->next;
  3. else
  4. list_head=entry->next;

每当我看到这些的代码,我会说:“此人不了解指针”。这还是一个可悲的、常见的问题。

如果开发者能够理解指针,只需要使用“指向该条目的指针”并初始化list_head,然后贯穿列表,此时无需使用任何条件语句即可删除该条目,只需通过 *pp = entry->next。

我想我理解指针,但不幸的是,如果要实现删除函数,我会一直保持跟踪前面的列表节点。这里是代码草稿:

不理解指针的人做法:

  1. typedefstructnode
  2. {
  3. structnode*next;
  4. ....
  5. }node;
  6. typedefbool(*remove_fn)(nodeconst*v);
  7. //Removeallnodesfromthesuppliedlistforwhichthe
  8. //suppliedremovefunctionreturnstrue.
  9. //Returnsthenewheadofthelist.
  10. node*remove_if(node*head,remove_fnrm)
  11. {
  12. for(node*prev=NULL,*curr=head;curr!=NULL;)
  13. {
  14. node*next=curr->next;
  15. if(rm(curr))
  16. {
  17. if(prev)
  18. prev->next=curr->next;
  19. else
  20. head=curr->next;
  21. free(curr);
  22. }
  23. else
  24. prev=curr;
  25. curr=next;
  26. }
  27. returnhead;
  28. }

这个链表很简单,但可以把每个节点的指针和sentinel值构建成了一个完美的结构体,但是修改这个表的代码需要很精妙。难怪链表功能会常出现在许多面试环节中。

上面执行的代码是处理从列表头中删除任何节点所需的条件。

现在,让我们好好记住Linus Torvalds执行代码。在这种情况下,我们通过一个指针指向列表头来贯穿列表遍历修改。

Two star programming:

  1. voidremove_if(node**head,remove_fnrm)
  2. {
  3. for(node**curr=head;*curr;)
  4. {
  5. node*entry=*curr;
  6. if(rm(entry))
  7. {
  8. *curr=entry->next;
  9. free(entry);
  10. }
  11. else
  12. curr=&entry->next;
  13. }
  14. }

好多了!最关键的部分在于:链表中的链接都是指针,因此指针到指针是修改链表的首选方案。

改进版的remove_if()是一个使用双重星号的例子,双重星号象征着两重间接寻址,再加一个星(third star)又会太过多余。

英文出自:Wordaligned

分享到:
评论

相关推荐

    Linus torvalds本人念[Linux]的发音

    综上所述,这个压缩包文件提供了一个难得的机会,让人们直接听到Linux之父亲自发音,无论是对于想提高技术词汇发音准确性的学习者,还是对于对Linus Torvalds和Linux感兴趣的爱好者,都是极其有价值的学习材料。...

    Just for Fun-Linus Torvalds 自传

    Just for Fun-Linus Torvalds 自传

    linus torvalds 的自传

    《林纳斯·托瓦兹的自传》是一本深度揭示Linux之父心路历程与技术探索的书籍,对于每一个对Linux系统怀有热情的IT人士来说,它都是一份不可多得的精神食粮。这本书详细记录了林纳斯·托瓦兹如何从一个普通的计算机...

    乐者为王 - Linus Torvalds

    【标题】"乐者为王 - Linus Torvalds" 提到的是 Linus Torvalds,他是计算机界的标志性人物,因创建Linux操作系统内核而闻名于世。Linux 是一种自由和开放源码的操作系统,其核心由 Torvalds 在1991年撰写,至今已...

    Just for Fun by Linus Torvalds & David Diamond Audiobook 1 of 5

    《Just for Fun》是Linux创始人林纳斯·托瓦兹(Linus Torvalds)与大卫·戴蒙德(David Diamond)合著的一本自传性质的书籍,书名本身就充满了幽默和轻松的意味,反映了林纳斯对编程和开源精神的独特见解。...

    只是为了好玩-Linus Torvalds 自传

    ### 只是为了好玩—Linus Torvalds 自传 #### 重要知识点概览: 1. **林纳斯·托瓦兹的个人经历**:本书详细记录了Linux之父林纳斯·托瓦兹的成长历程,从童年到创建Linux操作系统,再到成为全球知名的技术领袖。 ...

    linux0.01 源代码(Linux的创始人Linus Torvalds写的)

    Linux 0.01是Linux操作系统历史上的一个里程碑,它由Linux的创始人Linus Torvalds在1991年编写。这个早期的源代码包含了Linux操作系统的核心组件,为后来的发展奠定了基础。对于想要深入了解开源文化、操作系统原理...

    Just For Fun -- Linus Torvalds 自传

    **林纳斯·托瓦兹(Linus Torvalds)及其个人背景** - **作者介绍**:林纳斯·托瓦兹,著名的芬兰程序员,因创造了Linux操作系统内核而闻名于世。他出生于1969年12月28日,成长过程中受到了家庭环境的影响,特别是...

    linus Torvalds 自传(ust For Fun by Linus Torvalds)

    这本ust For Fun by Linus Torvalds的书是linux的创始人linus 他为自己写的,当然还有他的朋友也在帮写了这本书,书名是英文的,便内容是汉语,想了解linus的人可以看一下,可下在手机上看的。.txt格式。。

    《just for fun》 Linus Torvalds 自传 txt格式

    ### Linus Torvalds 自传《Just for Fun》知识点总结 #### 一、关于Linus Torvalds **Linus Benedict Torvalds** 是一位著名的计算机科学家,同时也是Linux内核的创始人与主要开发者之一。他的成就不仅限于技术...

    Just for Fun - Linus Torvalds 自传.pdf

    ### Linus Torvalds 自传《Just for Fun》知识点概览 #### 一、书籍简介 - **书名**:《Just for Fun》 - **作者**:Linus Torvalds 和 David Diamond - **主要内容**:本书是 Linux 之父 Linus Torvalds 的个人...

    githubGit是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理

    Git是一个分布式版本控制系统,最初由Linux的创始人Linus Torvalds编写。它最初设计用于管理Linux内核的源代码,但现在已经广泛应用于各种软件开发项目中。Git的设计思想是让软件开发者在本地执行大多数操作,如提交...

    Linux的缔造者Linus Torvalds.pdf

    "Linux的缔造者Linus Torvalds" Linux操作系统是当前世界上最为流行的开源操作系统之一,其创始人Linus Torvalds是一名芬兰的计算机天才。Linus Torvalds出生于1970年12月28日,出生在芬兰的首都赫尔辛基。他儿时最...

    Linux最早是Linus Torvalds在1991年开始设计开发

    Linux操作系统是由林纳斯·托瓦兹(Linus Torvalds)在1991年启动的一个项目,当时他是赫尔辛基大学的计算机科学学生。Linux的诞生源于他对Minix系统的改进,他在Minix的基础上编写了一个多任务调度的程序。随着项目...

    Linus:艰难的Linux2.4庆功宴会.pdf

    在这篇文章中,Linus Torvalds,Linux的创始人,接受了采访,分享了他的想法和看法关于Linux 2.4的发布。 首先,Linus Torvalds认为,Linux 2.4的发布不会让Linux比Unix和Windows 2000更有竞争力。他认为,这样的...

    Linux之父Linus Torvalds自传中文版

    今年45岁的芬兰人Linus Torvalds是Linux操作系统的创始人。他于1991年创建的Linux操作系统,不断获得互联网上众多自愿者“程序员”的支持,经过十几年的发展,如今已经成为云时代数据中心的首选操作系统!

    Linus自传-JustForFun.pdf

    在自传《Just For Fun》中,Linus Torvalds以他特有的幽默和深刻的社会观察力,不仅仅为我们讲述了一个关于操作系统Linux诞生的故事,还深入探讨了生命的意义,技术的发展,以及人类社会行为的演变。从生存到社会...

    Just For Fun - Linus Torvalds

    可以放在kindle里面看,比pdf阅读应该方便的了许多,而且size很小

Global site tag (gtag.js) - Google Analytics