0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux背后的思想

5RJg_mcuworld 来源:嵌入式资讯精选 2019-11-27 15:52 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

01 Linus Torvalds

Linus Torvalds两次改变了技术,第一次是Linux内核,它帮助互联网的发展;第二次是Git,全球开发者使用的源代码管理系统。在一次TED的采访中,Torvalds以极其开放的态度讨论了他独特的工作方式和性格特点。 Torvalds说:“我不是一个空想家,我是一名工程师,我非常乐意跟梦想家在一起,他们行走四方,仰望苍穹,看着满天星辰说,“我想到那儿去。”但我是低头看路的那种人,我只想填好眼前这个坑,不让自己掉进去,这就是我。”

02 关于开源

Linus Torvald Linux并不是一个合作的产物,它是我一系列项目中的一个,纯粹出于自己当时的需要,部分原因是我需要得到结果,但更重要的原因是我享受编程。这段旅程的终点,在25年后的今天(2016),我们仍未达到。当年我只是想做一个完全属于自己的项目,我压根就没想过开源这件事。但在那之后,随着项目越来越大,你会开始想让别人知道。感觉就像“哇,快来看看我的成果!” 成千上万的人想参与进来(Linux内核项目),但很多时候,我成为了那个断点,我无法让自己跨出那一步,同上千人合作。 因此Git是我的第二个大项目,它存在的意义就是维护我的第一个大项目。事实上这就是我的工作方式。我编程并不是为了… ,我编程是因为好玩,但我也想做一些有意义的事情,因此我设计每一个程序仅仅是因为我自己需要。 而我喜欢开源软件的一点就是,它能让形形色色的人在一起合作。我们不必相互喜欢,有时候我们甚至互相讨厌。是真的,我们经常吵得不可开交。 科学界的开源显然是一种回归,科学最初是开源的。但之后变得越来越封闭,只存在那些昂贵的科学期刊上。开源让科学回归了,我们有了arXiv和开放期刊。

小编有话说 Linux并不是选择了开源,只是因为开源恰好是Linux需要的。就如Linus Torvalds所说:“纯粹出于自己当时的需要。”

Linus Torvalds是睿智的,做好自己能控制的。

开源不仅仅代表源代码的开放,开源更是一种工作方式,一种教育方式。因为有了开源,我们多了一种更好的合作共赢的工作方式;因为有了开源,让更多从业者和学生能够学习到更好的技术。

03代码的品味

Linus Torvalds 有时候你可以换个角度看问题,重写代码,排除特例,完美覆盖所有情况,这就是好的代码。同时也很简单,这是最基本的原则。细节非常重要。对我来说,我愿意与之共事的人,必须有好的品位。

采访中Linus Torvalds对比了以下2个函数:

小编有话说 大牛们总是对自己严格要求,不仅仅是要实现功能,并且要优雅的实现。下面我们来看看采访中Linus Torvalds对比的两段代码:

1. 不怎么漂亮的代码

remove_list_entry(entry){ prev = NULL; walk = head; // Walk the list while (walk != entry) { prev = walk; walk = walk->next;} // Remove the entry by updating the // head or the previous entry if(!prev) { head = entry->next; } else { prev->next = entry->next;}}上面的代码,需要区分要移除的成员是否为链表的头一个成员。需要单独处理特例情况(要移除的成员为链表的头一个成员)。这个函数比较好理解,这里小编就不做更多的解释了。 2.好的代码

remove_list_entry(entry){ // The "indirect" pointer points to the // *address* of the thing we'll update indirect = &head; // Walk the list, looking for the thing that // points to the entry we want to remove while ((*indirect) != entry)) { indirect = &(*indirect)->next; } // .. and just remove it *indirect = entry->next;} 这个代码完全不需要单独处理特例情况,程序整体更加整洁、优雅。其实现原理为:指针变量indirect保存的是链表成员结构体中的next成员的地址(head指针也可这样看),如下图所示:

所以变量*indirect就相当于是前一个链表成员的next成员(相对于要移除的成员来说)。当找到要移除的成员后,进行如下操作即可:

*indirect = entry->next;

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 互联网
    +关注

    关注

    55

    文章

    11350

    浏览量

    110459
  • Linux
    +关注

    关注

    88

    文章

    11817

    浏览量

    219547
  • 编程
    +关注

    关注

    90

    文章

    3723

    浏览量

    97435

原文标题:Linux 背后的思想(内含 Linus 在 TED 采访视频)

文章出处:【微信号:mcuworld,微信公众号:嵌入式资讯精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    内存泡沫,和它背后的幽灵订单

    内存泡沫,和它背后的幽灵订单
    的头像 发表于 02-10 00:37 1.2w次阅读
    内存泡沫,和它<b class='flag-5'>背后</b>的幽灵订单

    Linux设备树到底是啥?一张图看懂硬件适配的「翻译官」

    你有没有想过:同一份 Linux 内核镜像,为啥能在不同型号的开发板上跑起来?比如一块 ARM 架构的开发板,今天换个显示屏、明天加个传感器,内核不用重新编译就能识别新硬件 —— 这背后,设备树(Devicetree) 功不可没。
    的头像 发表于 02-09 17:01 1285次阅读
    <b class='flag-5'>Linux</b>设备树到底是啥?一张图看懂硬件适配的「翻译官」

    Linux音频开发必藏!这个官网藏着从驱动到应用的全套解决方案

    打开alsa-project.org,首先会被这句简介击中:"为 Linux 系统提供音频与 MIDI 功能的核心架构"。作为 2.6 版本后 Linux 内核默认的音频子系统
    的头像 发表于 02-06 16:56 3180次阅读
    <b class='flag-5'>Linux</b>音频开发必藏!这个官网藏着从驱动到应用的全套解决方案

    深入Linux内核:进程调度的核心逻辑与实现细节

    背后都离不开内核调度算法的精准操控。今天,我们就从优先级、调度算法、时间片分配到底层实现,全方位拆解Linux内核进程调度的核心逻辑。 一、进程调度的“身份标识”:优先级与分类 要理解调度逻辑,首先得搞懂:进程凭什么“插队”?答案
    的头像 发表于 12-24 07:05 4581次阅读
    深入<b class='flag-5'>Linux</b>内核:进程调度的核心逻辑与实现细节

    分享一个Linux音频开发实用站:ALSA项目官网使用指南

    经常和Linux音频打交道的朋友,大概率听过ALSA(Advanced Linux Sound Architecture),它是Linux系统里负责音频和MIDI功能的基础架构,日常用的很多音频相关
    的头像 发表于 12-10 07:03 772次阅读
    分享一个<b class='flag-5'>Linux</b>音频开发实用站:ALSA项目官网使用指南

    学习Linux应该从哪里开始?

    在工业控制、边缘计算、人工智能这些领域,有一句几乎约定俗成的话: “会不会 Linux,决定了你能走多远。” 但对很多刚入门的工程师来说,Linux 看起来像个庞大又神秘的世界——命令行、驱动、内核
    的头像 发表于 10-16 09:51 570次阅读
    学习<b class='flag-5'>Linux</b>应该从哪里开始?

    重磅!智慧水利背后的NTP时间同步服务器揭秘!

    重磅!智慧水利背后的NTP时间同步服务器揭秘!
    的头像 发表于 09-10 10:41 929次阅读
    重磅!智慧水利<b class='flag-5'>背后</b>的NTP时间同步服务器揭秘!

    Linux 应用开发手册

    T507linux应用开发手册
    发表于 08-22 17:01 15次下载

    Linux权限体系解析

    你真的了解Linux权限吗?大多数人只知道rwx,但Linux的权限体系远比你想象的复杂和强大。今天我们深入探讨Linux的12位权限体系,这是每个运维工程师都应该掌握的核心知识。
    的头像 发表于 07-23 16:57 1078次阅读

    一文掌握Linux命令

    作为一名运维工程师,熟练掌握Linux命令是基本功中的基本功。无论是日常工作中的系统维护,还是面试时的技术考核,Linux命令都是绕不开的核心技能。本文将从实战角度出发,系统梳理运维工程师必须掌握的Linux命令,并结合实际场景
    的头像 发表于 07-22 15:23 724次阅读

    华为工程师总结Linux笔记

    1-1 所示 1.2 Linux 操作系统简介 Linux 操作系统是基于 UNIX 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统,Linux 能运行各种工具软件
    发表于 07-14 15:28

    Linux系统管理的核心概念

    在前一篇文章中,我们深入探讨了Linux中的文件操作命令,如cp、mv、rm,以及文本处理命令grep、wc和管道符。本文将继续深入Linux系统管理的核心概念,包括root用户的角色、用户和用户组
    的头像 发表于 05-15 17:05 826次阅读

    Linux权限管理基础入门

    Linux的广阔天空中,权限管理犹如一只翱翔的雄鹰,掌控着系统的安全与秩序。掌握Linux权限,不仅能让你的系统管理更加得心应手,还能有效防止未授权访问和数据泄露。本文将带你深入探索Linux权限的奥秘,助你成为权限管理的高手
    的头像 发表于 05-06 13:44 917次阅读
    <b class='flag-5'>Linux</b>权限管理基础入门

    Linux常用命令大全

    Linux常用命令是指在Linux操作系统中广泛使用的命令工具,这些命令工具可以完成各种不同的任务,如管理文件和目录、操作进程、网络通信、软件安装等。
    的头像 发表于 05-03 18:08 2037次阅读

    Linux主要的性能有哪些?

      什么是Linux?   Linux是一套自由传播的类Unix操作系统,是一个基于posix和unix的多用户、多任务、支持多线程和多cpu的操作系统。它的基本思想有两点,一切都是文件和每个软件
    的头像 发表于 04-30 18:09 774次阅读
    <b class='flag-5'>Linux</b>主要的性能有哪些?