对Unix做出贡献的先辈们
1. 为什么写本文Unix的伟大毋庸置疑,网上、各种计算机相关的书籍杂志中都有描述,这里不再对此赘述。相信只要是从事过互联网行业的从业人员,都或多或少知道Unix操作系统,但是对于Unix的发展做出巨大贡献的相关人员却不一定知道多少。笔者在查阅Unix相关资料时,无意间在普林斯顿大学网站内发现一篇关于贝尔实验室中对Unix做出重要贡献的人员名单表格,特此整理出来分享给各位。
2. In the Beginning: Unix at Bell Labs
这份名单中,最为耀眼的莫过于Ken Thompson与Dennis Ritchie,但是在Unix的整个发展史中,其他人也为此做出了很多贡献。在 Contributions to Unix一栏中可以看到一些在日常开发中经常用到的软件以及工具。
- 词法分析器:lex
- 语法分析器:yacc
- 可执行程序文件格式:elf
- shell:Bourne shell
- 文本处理三剑客:awk、grep、sed
.....
3. 总结笔者觉得,写出一手好代码只是作为一名合格开发人员最基本的素质。同时,更应该了解其历史、铭记那些为此做出贡献 ...
Git之旅 - 四个对象的恩怨纠葛
在上一篇文章中(Git之旅 - 代码仓库与数据库)进行了一次完整的提交,并抛出2个问题:
1.每次提交是不是至少会多出来3个文件?2.这几个文件的类型与关系是怎样的?
本文会给出答案。
1. 关于对象日期:某年某月某日 / 地点:家里
我对老婆说:“你知道吗,亲爱的。我每天都面向对象编程。”这时候,我老婆拿来搓衣板并扔到地上道:“说吧,面向的哪个对象?”然后,我就对他说:“不,不是你想的那样。”“那是那样?”
于是,我就战战兢兢的开始科普。从创建一个类一直讲到实例化类之后生成一个对象。当然,今天讲的对象既不是编程语言的对象,也不是我老婆眼中的那个对象。是Git中至关重要的四个结构体对象。
2. Git的对象talk is cheap,show me the object,从图中可以看出来:
1. blob、tree、commit、tag中都包含一个object结构体2. object结构体包含一个object_id结构体3. object_id包含一个字符串,存储根据sha256生成的字符串标识
struct commit在执行git commit命令执行之后生成(包含提 ...
Git之旅 - 代码仓库与数据库
在计算机中凡是需要复用以及重要的数据,都会落到磁盘。秉承从Unix开始到现在常用的操作系统设计哲学:一切皆文件。那么常见的数据存储是如何组织的呢,这里通过MySQL与Git简单的对比来进行揭秘(不涉及太深层次),下面以一个简单实现为例来说明。
1. MySQL与数据存储想要查找MySQL的数据存在哪里,首先需要找到数据的存储位置。
I.找到MySQL的配置文件一般位于/etc/my.cnf
II.找到关于存储路径的配置(每个人的路径可能不一样)innodb_data_home_dir = /usr/local/mariadb/var
II.查看数据的构成(这里以:ishanghai这个库为例)通过命令行查询MySQL下面所有存在的数据库以及ishanghai数据库的表。
通过查看数据存储路径下面的目录结构来查看其构成。
结论:每一个数据库在数据存储上对应一个文件夹, 每一个表也有对应文件 数据以文件形式存在 (经过数据压缩以及其他处理,不能直接查看) ish_comments.frm 与 ish_comments.i ...
Git之旅 - 子命令与设计哲学
如果有人让你猜Git总共有多少子命令,你可能会在思索一番之后说:可能几十个吧(虽然常用的不超过10个)。那么,当我告诉你大概有170多个时,你会是什么反应呢?
1. 所有Git子命令Git版本号(这里所用版本号:2.22.0)
~ git versiongit version 2.22.0
查看子命令的几种方法
1.1 通过帮助信息
git helpgit help -a // (显示可用的子命令)git help -g // (最常用的 Git 向导)
1.2 直接查看子命令
//Linux
ls -lF /usr/local/git/libexec/git-core | wc -l
//macls -lF /usr/local/Cellar/git/2.22.0_1/libexec/git-core |wc -l
目前,2.22.0版本子命令数:170多个
2. Git子命 ...
Go关键字的一次汉化过程
1. 为什么写本文笔者在自己的原创文章 [关于中文编程的一些思考]中,有一段关于go的中文代码,并且还能正常执行。
可能有些小伙伴看到之后,在自己的电脑上也执行了同样的代码却报错,原因就是:还需要对部分源码进行修改。这里,笔者就整理了一下操作的步骤。
2. 源码修改步骤拉取Go源代码
1git clone https://github.com/golang/go.git
从GitHub拉取Go源代码的好处是:拉取的源码中包含了多个版本分支,可以切换到自己想要的版本。
切换到编译的版本
123cd gogit branch -agit checkout -b go1.14 origin/dev.boringcrypto.go1.14
笔者这里是在go1.14的基础上进行的关键字汉化,你可以选择自己想要的版本。
添加中文关键字
文件:go\src\go\token\token.go
1234567891011121314151617181920212223242526272829303132333435363738394041// 添加中文关键字数组// 这里笔者仅汉化了IF ELSE ...
Git之旅 - 历史起源与特点
1. Git是什么带着这个问题,我Google了一下这个单词的含义。是的,你没看错。原意是:蠢货、饭桶。难道今天我们讨论的主题是这个吗,NO,No,No。是,也不全是。
说是:那是在这个单词没有遇到林纳斯之前。说不全是:那是在这个单词遇到林纳斯之后。
维基百科告诉我们:Git是一个分布式版本控制软件,最初由林纳斯·托瓦兹创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。
2. 关于名字但凡身为开发人员,想必无人不知无人不晓这个目前最流行的代码管理软件。至于为什么是这个名字,可以从几个地方对其了解一二。I’m an egotistical bastard, and I name all my projects after myself. First Linux, now git.—— 林纳斯·托瓦兹自嘲地取了这个名字。Kernel中关于Git名字的说明
12(https://mirrors.edge.kernel.org/pub/software/scm/git/docs/)git(1) Manual PageNAMEgit - the stupid con ...
缓存之王 - Redis
1. Redis是什么Redis官方这样解释
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic pa ...
关于中文编程的一些思考
0. 为什么写这篇文章笔者曾写过一篇《我眼中的C语言及其起源》(在其他地方叫《C语言发展史的点点滴滴》)的文章,文中从历史角度结合Unix系统源码来追溯了C语言的起源以及发展史(C语言的伟大毋庸置疑,但是其他语言带来的多样化也是十分重要),至于文章内容这里就不做过多赘述,感兴趣的读者可以查看原文。
本文则缘起于,在头条转载的本文评论中一位读者提到的一句话:”国产易语言在角落瑟瑟发抖”。看到这句话之后,顿时就对中文编程语言的原理产生了兴趣。由于平时业务开发过程中使用的主要语言是PHP/Golang,所以就从某种角度出发,并结合PHP、编译原理来分析一下中文编程语言的某些相似性原理。如果感兴趣的话,可以跟随笔者的步伐一探究竟。
1. 中文编程语言如果说,给中文编程语言下一个定义的话:那就是,如其字面义,中文编程语言就是用中文汉字去编写代码逻辑,这些代码在经过编译处理之后,能够在现代计算机系统上跑起来的编程语言。
1.1 现存的中文编程语言查了一下维基百科了解到:目前,中文编程语言大概有下面几种:https://zh.wikipedia.org/wiki/%E4%B8%AD%E6% ...