De unde vine UNIX?

Salutări tuturor 🙂 săptămânile astea am fost destul de distrat citind câteva cărți despre programare, adevărul este că cel mai bun mod de a învăța să programez este întotdeauna cu o carte, orice articol, tutorial, ghid pe care îl puteți găsi (inclusiv al meu) sunt simple repere atunci când le comparăm cu o carte reală pe această temă. Acum, trebuie să definim și ce este o carte „reală”, deoarece nu toate cărțile sunt de obicei bune și multe dintre ele pot chiar să coste mai mult decât merită cu adevărat și să piardă timpul.

De-a lungul acestor ani, lista cărților pe care le-am citit și lista cărților pe care le pot recomanda au divergut destul de mult, dar, fără îndoială, printre unele dintre preferatele mele avem (în nici o ordine specifică):

  • Hacker etic certificat CEH de Matt Walker.
  • Python începător: de la începător la profesionist de Magnus Lie Hetland.
  • Hackingul: arta exploatării de Jon Erickson.
  • Noțiuni introductive despre Arduino de Massimo Banzi.
  • Learning the bash Shell de Cameron Newbam și Bill Rosenblatt.
  • Învățarea editorilor vi și vim de Arnold Robbins, Elbert Hannah și Linda Lamb.
  • Linux Kernel in a Nutshell de Greg Kroah-Hartman (de asemenea, un dezvoltator Gentoo).
  • C modern de Jens Gustedt
  • Manualul Shellcoder's de Chris Anley, John Heasman, Felix «FX» Linder și Gerardo Richarte.
  • Limbajul de programare C de Brian W. Kernighan și Dennis M. Ritchie (creatorii C)
  • Depanare cu GDB de Richard Stallman, Roland Pesch, Stan Shebs și colab.
  • Hacking Linux Exposed: Secretele și soluțiile de securitate Linux de la un grup mare de cercetători ISECOM, inclusiv Pete Herzog, Marga Barceló, Rick Tucker, Andrea Barisani (un alt fost dezvoltator 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 & et al.
  • Sisteme de operare: o abordare bazată pe concepte de Dhananjay M. Dhamdhere
  • Pro Git de Scott Chacon și Ben Straub
  • Programare Expert C: Secretele profunde de Peter Van Der Linden.

Aș putea vorbi foarte bine despre fiecare dintre aceste cărți, dar pentru astăzi vom prelua câteva dintre pasajele din ultima din listă, deoarece multe dintre aceste anectode m-au captivat și m-au ajutat să înțeleg mai bine unele dintre secretele complicate ale C și ale programării în general. 🙂

Unix și C

Când vorbim despre UNIX, istoria se împletește cu originea acestui sistem și dezvoltarea limbajului care până în prezent este una dintre cele mai utilizate în dezvoltarea acestuia și a derivatelor sale (inclusiv Linux). Și curios, acești doi se nasc dintr-o „greșeală”.

multrics A fost un mega proiect care a reunit laboratoarele Bell, General Electric și MIT însuși pentru a crea un sistem de operare. Acest sistem a prezentat multe erori și, printre cele mai importante, erori de performanță care au făcut ca sistemul să fie practic inutilizabil. Vorbim despre anul 1969, deci hardware-ul de atunci nu putea suporta cantitatea de software necesară pentru a rula sistemul în sine.

Abia în 1970, câțiva ingineri Bell au început să lucreze la un sistem de operare simplu, rapid și ușor pentru PDP-7. Întregul sistem fusese scris în Montator și fusese chemat UNIX ca o parodie a multrics întrucât el nu voia decât să facă câteva lucruri, dar să le facă bine în locul muncii irosite irosite pe care o însemna a doua. Acum poți înțelege de ce Epocă începe 1 ianuarie 1970. 🙂 Un fapt destul de curios pentru mine. În acel moment nu se vorbea încă despre un C în sine, ci despre un Nou B întrucât ideile lui Ritchie proveneau din limbajul B deja folosit din acea vreme.

C timpuriu

De-a lungul anilor (1972-3), termenul C a început să fie folosit de când noul limbaj a început să prindă contur și, în această perioadă, se naște un alt fapt curios, mulți programatori și glume ale programatorilor spun:

Programatorii știu că începeți să numărați de la 0 în loc de 1.

Ei bine, acest lucru nu este în totalitate adevărat 🙂 motivul real pentru care acest lucru este considerat în acest mod până în zilele noastre se datorează faptului că la crearea sa, pentru compușii de compilare a fost mai ușor să calculeze o matrice folosind compensările, acestea indică distanța care există de la un punct de origine la obiectivul dorit, de aceea:

array[8]=2;

Ne spune că elementul de matrice este definit ca 2, deoarece 8 unități sunt adăugate la matrice pentru a ajunge la spațiul de memorie în care va fi stocat elementul 2. Înainte de C, multe limbi au început să numere de la 1, datorită lui C, acum aproape toate încep cu 0 🙂 deci nu este vina programatorilor, ci vina scriitorilor compilatorului că este așa.

Cochilia Bourne

Acesta este un subiect care, deși nu are legătură directă cu C, poate ajuta mai mult de unul să înțeleagă de ce programarea Shell este atât de particulară și este cu siguranță curios să știe. Steve Bourne a scris un compilator pentru Algol-68 în acel sezon, acesta este un limbaj în care cheile ( {} ) sunt înlocuite cu cuvinte, deci l-am putea defini după cum urmează în C:

#define IF if(

#define THEN ){

#define ELSE }else{

#define FI };

Acestea sunt doar câteva exemple de ceea ce înțelege Algol, dar dacă îl aplicăm astăzi programării shell, veți înțelege de ce în shell programele dvs. necesită o fi pentru fiecare if 🙂 cu siguranță interesant.

Începeți să citiți

Nu vă pot spune toate detaliile cărții, mai ales că multe dintre acestea sunt deja subiecte de programare care necesită un background anterior pentru a fi înțelese, dar m-am gândit să vă împărtășesc câteva dintre anecdotele curioase pe care le-am găsit pe parcurs 🙂 Nu am avut E timpul să lucrez la unele dintre articolele care au fost pe lista de sarcini, deoarece aceste ultime cărți pur și simplu m-au prins și mă bucur de ele în fiecare zi și, mai presus de toate, încerc să le înțeleg la maximum. Salutări și în curând voi putea să vă împărtășesc mai multe subiecte, salutări.


Conținutul articolului respectă principiile noastre de etică editorială. Pentru a raporta o eroare, faceți clic pe aici.

13 comentarii, lasă-le pe ale tale

Lasă comentariul tău

Adresa ta de email nu va fi publicată.

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   Juan el a spus

    Articolul dvs. a fost foarte interesant pentru mine. Mulțumesc mult.

  2.   HO2Gi el a spus

    Foarte interesant ca întotdeauna.

  3.   Jose Rafael el a spus

    Foarte interesant clarificările sunt bune.

  4.   Alex el a spus

    Excelent

  5.   Danielga el a spus

    Interesant !!! Mulțumesc mult.

  6.   în al doilea rând el a spus

    multrici? nu va fi multics (https://en.wikipedia.org/wiki/Multics)

    limbile cu indici de la 1 sunt o invenție a satanei ...

    1.    ChrisADR el a spus

      Notă interesantă 🙂 Presupun că la un moment dat din istorie au fost folosiți ambii termeni:

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

      și evident aceeași carte care este scrisă la mijlocul anilor '90.

      Vă mulțumim pentru clarificare 🙂 salutări

      1.    în al doilea rând el a spus

        wa, ce lucru ciudat, m-ai făcut să mă îndoiesc, m-am uitat într-o copie „achiziționată” a programării Expert C: Secretele profunde și vin multic-urile, este prima dată când aud multrics. Cât de curios, amintește puțin de iepurele trix

        1.    ChrisADR el a spus

          hahaha cu siguranță curios, am verificat copia mea în limba engleză a secretelor profunde, acolo scrie și Multrics (pentru că și tu m-ai făcut să mă îndoiesc) ... poate a fost o expresie a timpului 😛

          În ceea ce priveşte

  7.   ED774 el a spus

    Mare contribuție

  8.   anonim el a spus

    Interesant, deși cu siguranță, Multrics se datorează unei greșeli de imprimare, deoarece numele original al acelui sistem de operare era Multics, iar Unix a fost numit inițial Unics, referindu-se exact la acel mare sistem de operare, în cele din urmă și prin fonetică, Unics se transformat în Unix, acum, nu trebuia decât să menționați numele celui care este considerat autorul Unix; Ken Thompson, legenda spune că atât Thompson cât și Ritchie se aflau în cafeneaua Bell Labs comentând proiectele lor și că Ritchie i-a sugerat lui Thomposon să-și rescrie programul Unics cu C, limba pe care a scris-o ... și restul , este istorie. 😉

    Apropo, anterior toate programele erau scrise cu instrucțiunile mașinii, ceea ce le făcea total dependente de hardware, inovația lui C, în afară de facilitarea scrierii programelor, era că limbajul era independent de hardware-ul care implementa compilatoare, o filozofie care mulți ani mai târziu avea să ia Java, în sensul că programele nu depindeau de sistemul de operare, adăugând faimoasa mașină virtuală Java.

    1.    ChrisADR el a spus

      Rău despre legende este că distorsionează istoria, în mai multe moduri ... și te pot face să crezi că ceva se întâmplă atunci când nu este ... precum faptul conversației existente între Thompson și Ritchie (pe care l-am omis după bunul plac), deoarece conduce la erori istorice și tehnice (C nu era înainte de UNIX) ...

      Și în ceea ce privește a doua ... o altă legendă care distorsionează realitatea, deoarece înainte de C existau B, A, pascal, Ada, algol-60, PL / 1 și încă câteva care erau limbaje de programare corespunzătoare (foarte diferite de Assembly și dialectele lor după arhitectură care sunt dependente de hardware-ul procesorului), așa că C nu a „inovat” în acest sens, el a adoptat pur și simplu soluții care existau deja în alte limbi și în cele din urmă a devenit popular mai rapid și mai bun decât acestea ... Singura parte Adevărul este că Java s-a bazat pe acest concept de portabilitate pentru a-și crea ulterior mașina virtuală, dar nu numai că s-a bazat pe C pentru acest lucru, dar a urmat și alte modele, altfel nu am avea paradigma de programare orientată obiect în java ...

      Am simțit că ar trebui să clarific situația, deoarece oricine mai puțin versat ar putea să o considere adevărată și apoi să creadă că s-a întâmplat așa ... salutări 🙂

  9.   Ignatius Esquivel el a spus

    Ca întotdeauna, articolul este foarte interesant, mulțumesc pentru contribuție.

bool (adevărat)