UNIX是从哪里来的?

致所有人的问候🙂这几周,我读了一些编程方面的书,这让我很高兴,事实是,学​​习编程的最佳方法总是带着一本书,任何可以找到的文章,教程,指南(包括我的)都仅仅是将基准与有关该主题的真实书籍进行比较时。 现在,我们还必须定义什么是“真正的”书,因为并非所有书通常都是好书,而且许多书甚至可能花费超过其真正价值并浪费时间。

这些年来,我所阅读的书籍清单和我可以推荐的书籍清单相差很大,但是毫无疑问,在我们最喜欢的一些书籍中(没有特定的顺序):

  • 马特·沃克(Matt Walker)通过CEH认证的道德黑客。
  • Python入门:Magnus Lie Hetland撰写的《从新手到专业》。
  • 黑客:乔恩·埃里克森(Jon Erickson)的剥削艺术。
  • Massimo Banzi撰写的Arduino入门。
  • Cameron Newbam和Bill Rosenblatt学习bash Shell。
  • 学习Arnold Robbins,Elbert Hannah和Linda Lamb的vi和vim编辑器。
  • Greg Kroah-Hartman(也是Gentoo开发人员)的坚果壳中的Linux内核。
  • Jens Gustedt撰写的Modern C
  • 《 Shellcoder手册》,作者是克里斯·安利(Chris Anley),约翰·希斯曼(John Heasman),费利克斯(FX)Linder和杰拉尔·里查特(Gerardo Richarte)。
  • Brian W. Kernighan和Dennis M. Ritchie(C的创建者)的C编程语言
  • Richard Stallman,Roland Pesch,Stan Shebs等人使用GDB进行调试。
  • 黑客入侵Linux:来自ISECOM研究人员的Linux安全秘密和解决方案,包括Pete Herzog,MargaBarceló,Rick Tucker,Andrea Barisani(另一位前Gentoo开发人员),Thomas Bader,Simon Biles,Colby Clark,Raoul Chiesa ,Pablo Endres,Richard Feist,Andrea Ghirardini,Julian“ HammerJammer” Ho,Marco Ivaldi,Dru Lavigne,Stephane Lo Presti,Christopher Low,Ty Miller,Armand Puccetti等。
  • 操作系统:Dhananjay M. Dhamdhere的基于概念的方法
  • Scott Chacon和Ben Straub制作的Pro Git
  • 专家C编程:Peter Van Der Linden的深层秘密。

我可以对这些书中的每一个都说得很高,但是今天,我们将从清单的最后一本书中摘录一些内容,因为许多这些选题书使我着迷,并帮助我更好地理解了C和程序设计的一些复杂秘密。 🙂

Unix和C

当我们谈论UNIX时,历史与该系统的起源和语言的发展息息相关,而该语言的发展至今是该系统及其派生工具(包括Linux)开发中使用最多的语言之一。 奇怪的是,这两个人都是“错误”的产物。

复数 这是一个庞大的项目,将贝尔实验室,通用电气和麻省理工学院自身联合起来,创建了一个操作系统,该系统存在许多错误,其中最重要的性能故障之一就是使该系统几乎无法使用。 我们谈论的是1969年,因此当时的硬件无法支持运行系统本身所需的大量软件。

直到1970年,几名贝尔工程师才开始为PDP-7开发简单,快速,轻便的操作系统。 整个系统已经写成 汇编 并被称为 UNIX 模仿 复数 因为他只想做几件事,但要做好事,而不是第二件事所意味着的巨大浪费。 现在您可以了解为什么 时代 从1月XNUMX日开始 1970。 for对我来说,这是一个相当奇怪的事实。 那时,仍然没有人谈论C本身,而是谈论 新B 因为Ritchie的想法来自当时已经使用的B语言。

早期C

多年来(1972-3),自从新语言开始形成以来,就开始使用术语C,并且在这个时候出现了另一个奇怪的事实,许多程序员和程序员都在说:

程序员知道您从0开始而不是从1开始计数。

好吧,这并不是完全正确的-直到今天,这种方式一直被认为是因为在创建时,对于编译器编写者而言,使用以下方法更容易计算数组 抵消,这些表示从原点到所需目标的距离,这就是为什么:

array[8]=2;

它告诉我们元素 由于将2个单位添加到数组中以到达要存储元素8的存储空间,因此将数组的定义为2,因为在C之前,由于C,许多语言从1开始计数,现在几乎所有语言都从0开始🙂这不是程序员的错,而是编译器作者的错。

伯恩贝壳

这个主题尽管与C没有直接关系,但可以帮助一个以上的主题来理解为什么Shell编程如此独特,并且肯定知道这一点很奇怪。 史蒂夫·伯恩(Steve Bourne)在那个季节左右为Algol-68编写了一个编译器,这种语言中的键( {} )替换为单词,因此我们可以在C中定义如下:

#define IF if(

#define THEN ){

#define ELSE }else{

#define FI };

这些只是Algol理解的一些示例,但是如果我们今天将其应用于Shell编程,您将理解为什么在Shell中您的程序需要一个 fi 每个 if 🙂当然很有趣。

开始阅读

我无法告诉您这本书的所有细节,特别是因为其中许多已经是编程主题,需要先了解背景知识,但是我想我会与您分享一些我发现的奇怪轶事🙂我还没有有时间去做一些在待办事项上的文章,因为这些最近的书简直让我着迷,我每天都在享受它们,而最重要的是试图使他们充分理解它们。 问候,很快我将可以与您分享更多主题,问候。


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   约翰

    您的文章对我来说非常有趣。 非常感谢。

  2.   HO2Gi

    一如既往的有趣。

  3.   何塞·拉斐尔

    非常有趣的澄清是好的。

  4.   Alex

    优秀

  5.   丹尼尔加

    有趣的! 非常感谢。

  6.   第二

    复数? 它不会是multics(https://en.wikipedia.org/wiki/Multics)

    索引从1开始的语言是撒旦的发明...

    1.    克里斯·阿德

      有趣的注释🙂我想在历史上的某些时候都使用了两个术语:

      https://www.landley.net/history/mirror/collate/unix.htm

      显然是90年代中期写的同一本书。

      感谢您的澄清🙂问候

      1.    第二

        是的,这真是一件奇怪的事,您使我感到怀疑,我看了一份专家C编程的“购买的​​”副本:深刻的机密和multics的到来,这是我第一次听到multrics。 多么好奇,让我们想起了特里克斯兔

        1.    克里斯·阿德

          哈哈哈当然很好奇,我检查了我的英语深层机密,那里也说着密尔度(因为你也让我怀疑了)……也许那是时间的一种表达😛

          问候

  7.   ED774

    伟大的贡献

  8.   匿名

    有趣的是,尽管可以肯定地,Multrics是由于打印错误而引起的,因为该操作系统的原始名称是Multics,而最初称为Unics的Unix恰好是指这种出色的操作系统,最终还是由语音学(Unics se)所指。转换为Unix之后,现在,您只需要提及被认为是Unix作者的人的名字即可。 肯·汤普森(Ken Thompson),传说汤普森(Thompson)和里奇(Ritchie)都在贝尔实验室(Bell Labs)的食堂里对他们的项目发表评论,这是里奇向汤姆普森(Thomposon)建议他用C程序重写他的Unics,他编写的语言是…… ,是历史。 😉

    顺便说一下,以前所有程序都是用机器的指令编写的,这使得它们完全依赖于硬件,C的创新之处在于它使编写程序更容易,并且语言独立于实现程序设计的硬件。编译器是一种多年后的Java的哲学,即程序不依赖于操作系统,因此添加了著名的Java虚拟机。

    1.    克里斯·阿德

      关于传奇的坏事是,它们以不止一种方式扭曲了历史……而且它们可以使您认为某些事情在不存在的情况下会发生……就像汤普森和里奇之间的现有对话(我会随意省略)这样的事实,因为它导致历史和技术错误(C不在UNIX之前)...

      至于第二个......另一个歪曲现实的传说,因为在C之前有B,A,pascal,Ada,algol-60,PL / 1和其他一些正确编程的语言(与汇编语言大不相同)以及其依赖于处理器硬件的体系结构的方言),因此C在这种意义上并没有``创新'',他只是采用了其他语言中已经存在的解决方案,最终它变得比这些语言更快,更好地流行起来... ...事实是Java是基于这种可移植性的概念后来创建其虚拟机的,但不仅为此它依赖C,而且它遵循其他模型,否则我们将在Java中没有面向对象的编程范式。

      我觉得我应该澄清这种情况,因为任何不那么精通的人都可以将其视为真实,然后相信它是这样发生的……问候🙂

  9.   伊格纳西奥·埃斯基维尔(Ignacio Esquivel)

    与往常一样,本文非常有趣,感谢您的贡献。