bash组织成树数据结构
昨天晚上,今天早上世界杯很精彩。晚上醒来看到不断地居住的电话。早上没有喝的水开始赞赏在英国和意大利的对决。也TM精彩,最后生下了罗马文化。意大利伊特鲁里亚文化获得胜利,我甚至会很高兴,然后看接下来的比赛,本田圭佑的进球很不可思议,原本打算加班。研究起了复杂六度切割网络。有点乱,可是还是在下午的时候悟出了一点什么。小小睡在旁,心里想着怎么把bash组织成一棵树,由于我实在不想也没有能力使用Python来创建所谓的高级的数据结构,比方树。
树。一个人类的常规组织形式。一个将近一万年为人类所用的数据类型。现在被映射进计算机数据结构的时候被赋予了独特的地位。二叉树,堆,AVL树,红黑树。256叉树。Radix树。...不一而足,差点儿全部的编程语言都内置了这些树的数据结构类型,即便不是如此,也会有非常多狂热的开发者组建一系列的所谓库来实现这些树的接口。可是除了一种语言,即Shell,对于LInux而言就是bash(我从来不用其他的shell,尽管历史渊源深厚。但历史不是现实。这是理解历史的优点...),为什么没有人开发Linux的树型数据结构呢?...shell是一种粘合语言。不是一种实现逻辑的语言。这或许就是根本??假设世界杯讲解员在讲解西班牙VS荷兰对决的时候,在荷兰进球前一直倾向于西班牙会赢,无异于低水平的赌博,实际上当我说没有人实现bash版本号的树型数据结构的时候,造就有人发在了github上了,仅仅是我这个傻BI没有找到而已,所以我不再依照长平之战的原则来评论此事。我仅仅是试着去做,由于假设我做不到,将是我工作的重大失职,就如同西班牙球员将球送进自己的球门一样...bash为何没有简单的办法实现树型结构。甚至没有实现不论什么的数据结构,原因在于,它不须要!
君子善假于物也。bash本身没有tree的语义,可是UNIX的文件系统正是tree组织的,而bash操作UNIX文件夹/文件简直就是如鱼得水,我突然想到了Linux内核的make menuconfig是怎么找到那么多的config的。其实不须要一个统一的congifg。仅仅须要各个文件文件夹自己构建自己的config项就能够了。make的时候自然会遍历文件系统,然后取出config项目。仅此而已,Linux的诸如make menuconfig命令不须要自己实现一套遍历文件夹的算法。
假设我想实现一个树型的操作序列,比方在ECC算法下的TLS分别用SM1和SM4来进行对称加密。使用ECC或者SM2进行认证(即所谓的算法套间,cipher-suit)。怎么办?依照传统的编程语言。我要内建一个struct,实现一个树。可是,可是现代的复杂问题已经不同意你去编写和编译所谓的结构体了(关键在于编译)。问题的根本在于你是在想用这些语言解决你的问题(去年我..一个表,我过不去的坎)还是你想研究编程语言本身。假设是后者,请略过此文,但假设不是。我认为C/C++/Java已经不适合了,Python,Perl。Bash更合适。由于这些语言能够让你不必去思想怎样构建一棵树的问题,以Python为例,不必多说。我懂得没你多,可是以bash为例呢?由于没有什么库能够使用。你瞬间呆住了!...我一直以来也是这样考虑的,,但突然,我不这么认为了,我认为bash能够利用的库(Library)不是没有,而是非常多。多到什么程度?答案是整个系统!
Linux的文件夹系统是一个树型结构。bash能够非常好的利用它!bash尽管没有内建不论什么结构。可是却能够利用全部的其他结构。Linux内核的设计者已经想到了这一点。看一下sysfs和procfs吧。当你使用cat/echo等命令来操作的时候,是不是认为比自己写代码更轻松些呢(尽管少了自己炫技巧的机会...)?不要把文件系统当作一个龌龊的IPC机制,实际上你能够变通。你能够将内存的好几G。比方1G全部构建一个ramfs。然后在里面尽情搞文件操作吧。不会有不论什么性能损失,记住。文件IO仅仅是一个接口而已(请别跟我扯系统调用会影响效率。或许能够使用mmap...书看多了,课上傻了...)!文件接口是一个非常猛的东西,它能够内建你无法实现的数据结构,比方树。
我没有必在脚本内部维护一棵树,我仅仅须要建立一个树型的文件文件夹系统就可以,然后利用丰富的文件系统IO命令来蹂躏它,假设你不想让我的额外文件系统污染你那清纯的文件系统,我就建立一个ramfs,我仅仅是将内存格式化了而已。
bash不是编程语言,然而它又是全部的编程语言,它能够粘合全部的语言写成的逻辑。其内恰性远远超过诸如Python,Perl,PHP之类的语言。它是UNIX内建的。bash。它实际上就是UNIX本身的编程语言,UNIX本身就是一个库!
我不是反对现代软件project,我仅仅是认为在某些领域,某些地方,某些日常事务,软件project确实走偏了方向。
大师出手的时候不知道自己用的招数的名字。我在想,那些所谓精通设计模式的人们。你们可曾知道。你们比设计模式领域的大师更猛,由于当这些大师在做一个系统的时候,实在不知道自己在使用什么模式,可是你可能更知道。突然想到了《依天屠龙记》中张三丰问张无忌,直到张无忌的功夫口诀全部忘记之后。才同意其出战,精髓所在!
花式足球竞赛进行中,高手都是一帮跳街舞的人,技术太TMD炫了,但在世界杯中除了C罗差点儿没有人炫花式技巧,于是我以前想,花式足球不有用。仅仅适合表演,可是看了世界杯大牌明星这些人的花式足球表演后,我知道了,有些技乔只为炫技,但本质不包含在所谓的能量闪光尖。
版权声明:本文博主原创文章,博客,未经同意不得转载。
bash组织成树数据结构的更多相关文章
- 存储系统的基本数据结构之一: 跳表 (SkipList)
在接下来的系列文章中,我们将介绍一系列应用于存储以及IO子系统的数据结构.这些数据结构相互关联又有着巨大的区别,希望我们能够不辱使命的将他们分门别类的介绍清楚.本文为第一节,介绍一个简单而又有用的数据 ...
- 1. C语言中的数据结构.md
C语言内建数据结构类型 整型 整型数据是最基本的数据类型,不过从整形出发衍生出好几种integer-like数据结构,譬如字符型,短整型,整型,长整型.他们都是最基本的方式来组织的数据结构,一般是几位 ...
- 一.数据结构&算法的引言+时间复杂度
目录(contents): 1.什么是计算机科学?什么是算法? 2.如何形象化的理解算法? 3.什么是算法分析? 4.时间复杂度 5.数据结构 6.总结算法和数据结构之间的关联 一.什么是计算机科学? ...
- 浙大MOOC《数据结构》随笔
第一讲 基本概念 1.1 什么是数据结构 图书摆放问题: 新书如何插入? 先定类别,再二分查找 怎么找到指定某本书? 二分查找 写程序实现一个函数PrintN 循环实现 void PrintN(int ...
- Device Tree(三):代码分析【转】
转自:http://www.wowotech.net/linux_kenrel/dt-code-analysis.html Device Tree(三):代码分析 作者:linuxer 发布于:201 ...
- (转)linux内核虚拟文件系统浅析
转自http://hi.baidu.com/_kouu/item/4e9db87580328244ef1e53d0 ###### 虚拟文件系统(VFS)在我看来, "虚拟"二字主要 ...
- Device Tree(三):代码分析
一.前言 Device Tree总共有三篇,分别是: 1.为何要引入Device Tree,这个机制是用来解决什么问题的?(请参考引入Device Tree的原因) 2.Device Tree的基础概 ...
- 【转】Core Bluetooth框架之一:Central与Peripheral
原文网址:http://southpeak.github.io/blog/2014/07/29/core-bluetoothkuang-jia-zhi-%5B%3F%5D-:centralyu-per ...
- (DT系列三)系统启动时, dts 是怎么被加载的
一,主要问题:系统在启动的时候,是怎么加载 dts的:Lk,kernel中都应调查. 二:参考文字dts加载流程如下图所示: 启动过程中,bootloader(默认是bootable/bootload ...
随机推荐
- hdu Crazy Circuits
Crazy Circuits 题目: 给出一个电路板,从+极出发到负极. 如今给你电路板上的最小电流限制,要你在电流平衡的时候求得从正极出发的最小电流. 算法: 非常裸的有源汇最小流.安有源汇最大流做 ...
- 承载于以太网帧之上的数据包的解析——ARP、IPv4、IPv6
承接上一博文而来,继续解析网络数据包,对于承载在以太网上的三种协议进行了解析,主要是分为依据RFC定义的标准先解析头部数据,然后得到有效载荷,即为协议包括的实体数据,更上层进行进一步处理. 一.ARP ...
- 怎样控制界面控件之进度条(ProgressBar)功能
一.基础知识: 1.ProgressBar在界面文件XML中的布局: [html] <progressBar android:id="@+id/progressbar_updown&q ...
- 理解 Python 中的线程
原地址:http://blog.jobbole.com/52060/ 本文由 伯乐在线 - acmerfight 翻译自 Akshar Raaj.欢迎加入技术翻译小组.转载请参见文章末尾处的要求. 我 ...
- STL中vector的赋值,遍历,查找,删除,自定义排序——sort,push_back,find,erase
今天学习网络编程,那个程序中利用了STL中的sort,push_back,erase,自己没有接触过,今天学习一下,写了一个简单的学习程序.编译环境是VC6.0 这个程序使用了vect ...
- Extjs4 RowEditing 的使用和更新方法
如何灵活快速的掌握RowEditing组件的应用,应大家的要求,今天给大家具体讲下该组件的使用. 1.创建 var rowEditing = Ext.create('Ext.grid.plugin.R ...
- 如何禁止使用teamviwer的使用
前几天有人问我teamviwer怎么禁止,刚开始做实验的时候过滤了teramviwer.com解析出来的IP,可是还是没有用,其实将teamviwer登陆的服务器地址在路由器上过滤,teramviwe ...
- zoj1610(线段树)
题目连接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1610 题意:在0-8000长的线段里面,按先后次序依次覆盖颜色, ...
- U10vim程序编辑器
vim需要多加练习. 1.你可以将vim视为vi的高级版本.vi分成三种模式:一般模式,编辑模式和命令行模式. 一般模式:以vi打开一个文件就直接进入一般模式了(这也是默认的模式).在这个模式中,你可 ...
- iis 隐藏 banner
去微软官网下载这个补丁 http://www.microsoft.com/en-us/search/DownloadResults.aspx?q=urlscan+3.1 2. 安装urlscan_ ...