D'on ve UNIX?

Salutacions a tots 🙂 aquestes setmanes he estat bastant entretingut llegint alguns llibres sobre programació, la veritat és que la millor manera d'aprendre a programar és sempre amb un llibre, qualsevol article, tutorial, guia que un pugui trobar (incloent-hi les meves) són mers punts de referència a l'hora de comparar-les amb un llibre de veritat sobre el tema. Ara bé, hem de definir el que és un llibre «de veritat» també, ja que no tots els llibres solen ser bons, i molts d'ells poden fins i tot costar més del que realment valen i fer-nos perdre temps.

Al llarg d'aquests anys la llista de llibres que he llegit i la de llibres que puc recomanar han divergit bastant, però sense cap dubte entre alguns dels meus favorits tenim (en cap ordre específic):

  • CEH Certified Ethical Hacker de Matt Walker.
  • Beginning Python: From Novice to Professional de Magnus Lie Hetland.
  • Hacking: the art of exploitation de Jon Erickson.
  • Getting Started with Arduino de Massimo Banzi.
  • Learning the bash Shell de Cameron Newbam & Bill Rosenblatt.
  • Learning the vaig veure and vim editors d'Arnold Robbins, Elbert Hannah & Linda Lamb.
  • Linux Kernel in a Nutshell de Greg Kroah-Hartman (XNUMX developer de Gentoo també).
  • Modern C de Jens Gustedt
  • The Shellcoder s Handbook de Chris Anley, John Heasman, Felix «FX» Linder & Gerardo Richarte.
  • The C programming language de Brian W. Kernighan & Dennis M. Ritchie (creadors de C)
  • Debugging with GDB de Richard Stallman, Roland Pesch, Stan Shebs, et al.
  • Hacking Linux Exposed: Linux Security Secrets and Solutions d'un gran grup d'investigadors de ISECOM, entre ells Pete Herzog, Marga Barceló, Rick Tucker, Andrea Barisani (un altre ex developer de Gentoo), Thomas Bader, Simon Biles, Colby Clark, Raoul Chiesa , Pablo Endres, Richard Feist, Andrea Ghirardini, Julian «HammerJammer» Ho, Marc Ivaldi, Dru Lavigne, Stephane el Presti, Christopher Low, Ty Miller, Armand Puccetti & et al.
  • Sistemes operatius: Un enfocament basat en conceptes de Dhananjay M. Dhamdhere
  • Pro Git de Scott Chacon i Ben Straub
  • Expert C Programming: Deep secrets de Peter Van Der Linden.

Podria parlar meravelles de cada un d'aquests llibres, però per ara prendrem alguns dels passatges de l'últim a la llista, ja que moltes d'aquestes anècdotes m'han captivat i ajudat a comprendre millor alguns dels intricats secrets de C i la programació en general 🙂

Unix i C

Quan parlem de UNIX, la història s'entrellaça amb l'origen d'aquest sistema i el desenvolupament de l'llenguatge que fins al dia d'avui és un dels més utilitzats en el desenvolupament de la mateixa i els seus derivats (incloent Linux). I curiosament, aquests dos neixen d'un «error».

Multrics va ser un mega projecte que va ajuntar als laboratoris Bell, General Electric i el mateix MIT per crear un sistema operatiu, aquest sistema va presentar molts errors, i entre un dels més importants, fallades de performance que feia de sistema alguna cosa pràcticament inutilitzable. Parlem de l'any 1969, de manera que el maquinari d'aquesta època no podria suportar la quantitat de programari que es necessitava per córrer el sistema mateix.

No va ser fins a 1970 que un parell d'enginyers de Bell van començar a treballar en un sistema operatiu simple, ràpid i lleuger per al PDP-7. Tot el sistema havia estat escrit en Muntador i havia estat cridat UNIX com a paròdia a Multrics ja que aquest només desitjava fer poques coses, però fer-les bé en lloc de la tremenda treball desaprofitat que va significar el segon. Ara podran entendre per què època comença el 1ro de gener de 1970. 🙂 Una dada força curiós per a mi. En aquest moment encara no es parlava d'un C pròpiament dit, sinó d'un Nou B ja que les idees de Ritchie provenien de el ja utilitzat llenguatge B d'aquesta època.

Early C

Amb el pas dels anys (1972-3) el terme C va començar a ser utilitzat ja que el llenguatge nou començava a prendre forma, i per aquesta època neix un altre dada curiosa, molts programadors i acudits de programadors diuen:

Els programadors saben que es comença a comptar des de 0 en lloc d'1.

Doncs això no és d'el tot cert 🙂 la veritable raó per la qual això és considerat així fins al dia d'avui és perquè en la seva creació, per als escriptors de compiladors era més senzill calcular un arranjament utilitzant offsets, Aquests indiquen la distància que hi ha des d'un punt d'origen fins a l'objectiu desitjat, és per això que:

array[8]=2;

Ens indica que l'element d'array és definit com 2, perquè a l'array se li sumen 8 unitats per arribar a l'espai de memòria on s'emmagatzemarà l'element 2. Abans de C, molts llenguatges començaven a comptar des de 1, gràcies a C, ara gairebé tots comencen amb 0 🙂 així que no és culpa dels programadors, sinó dels escriptors de compiladors que això sigui així.

La closca de Bourne

Aquest és un tòpic que encara que no està directament relacionat amb C, pot ajudar a més d'un a entendre per què la programació a Shell és tan peculiar, i certament és curiós saber-ho. Steve Bourne va escriure per aquesta temporada un compilador d'Algol-68, aquest és un llenguatge en el qual les claus ( {} ) Són reemplaçades per paraules, de manera que el podríem definir de la següent manera en C:

#define IF if(

#define THEN ){

#define ELSE }else{

#define FI };

Aquests són només alguns exemples del que entén Algol, però si ho apliquem a la programació en shell el dia d'avui, ja entendran per què en shell teus programes requereixen d'un fi per a cada if 🙂 certament interessant.

Comencin a llegir

No puc explicar-tots els detalls de el llibre, especialment perquè molts d'aquests ja són temes de programació que requereixen un fons previ per poder ser compresos, però vaig pensar en compartir amb vostès algunes de les anècdotes curioses que vaig anar trobant en el camí 🙂 No he tingut temps de treballar en alguns dels articles que han estat a la llista de pendents perquè simplement aquests últims llibres m'han atrapat i els estic gaudint cada dia i sobretot intentant comprendre'ls a l'màxim. Salutacions i ja aviat podré compartir amb vostès més temes, salutacions.


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   Joan va dir

    M'ha resultat molt interessant el teu article. Moltes gràcies.

  2.   HO2Gi va dir

    Molt interessant com simpre.

  3.   José Rafael va dir

    Molt interessant les a aclariments són bones.

  4.   Alex va dir

    Excel · lent

  5.   Danielga va dir

    Interessant !!! Moltes gràcies.

  6.   segon va dir

    multrics? no serà Multics (https://en.wikipedia.org/wiki/Multics)

    els llenguatges amb índexs a partir d'1 són un invent de satan ...

    1.    ChrisADR va dir

      Interessant apunt 🙂 suposo que en algun moment de la història tots dos termes han estat usats:

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

      i evidentment el mateix llibre que és escrit per mitjans dels 90s.

      Gràcies per l'aclariment 🙂 salutacions

      1.    segon va dir

        wa, que cosa mes rara, m'has fet dubtar, he buscat en una còpia «compra» d'Expert C Programming: Deep secrets i hi ha ve Multics, és la primera vegada que escolto aquest multrics. Que curiós, recorda una mica a l'conill trix

        1.    ChrisADR va dir

          jajaja certament curiós, jo vaig revisar la meva còpia en anglès d'deep secrets, aquí també diu Multrics (perquè també m'havies fet dubtar) ... potser era una expressió de l'època 😛

          Salutacions

  7.   ED774 va dir

    gran Aportació

  8.   anònim va dir

    Interessant, encara que segurament, Multrics es degui a un error d'impremta, ja que el nom original d'aquest sistema operatiu era Multics, i Unix, originalment es va cridar Unics, precisament fent referència a aquest gran sistema operatiu, eventtualmente i per fonètica, Unics es transformar en Unix, ara bé, tan sols et va faltar esmentar el nom de qui es considera l'autor d'Unix; Ken Thompson, explica la llegenda que estaven tots dos, Thompson i Ritchie, a la cafeteria dels laboratoris Bell comentant sobre els seus projectes i va ser que Ritchie va suggerir a Thomposon que reescrivís seu programa Unics amb C, el llenguatge que ell habiá escrit ... i la resta , és història. 😉

    Per cert, anteriorment tots els programs es escrivien amb les instruccions de la màquina, el que els cap totalment dependents de l'maquinari, la innovació de C, a part de fer més fàcil l'escriptura de proramas, era que el llenguatge fos independent de l'hardware implementant els compiladors, una filosofia que molts anys després prendria Java, en el sentit que els programes no fossin dependents de sistema operatiu, afegint la famosa màquina virtual de Java.

    1.    ChrisADR va dir

      El dolent de les llegendes és que desvirtuen la història, en més d'un sentit ... i poden fer pensar que alguna cosa passa quan no és així ... com el fet de la conversa que hi ha entre Thompson i Ritchie (la qual cosa vaig ometre a voluntat) ja que porta a errors històrics i tècnics (C no va ser abans de UNIX) ...

      I pel que fa al segon ... una altra llegenda que desvirtua la realitat, ja que abans de C va existir B, A, pascal, Ada, algol-60, PL / 1 i alguns quants més que eren pròpiament llenguatges de programació (molt diferents de Assembly i els seus dialectes per arquitectura que són dependents de el maquinari de l'processador) així que C no «va innovar» en aquest sentit, simplement va adoptar solucions que ja existien en altres llenguatges i a la fi de comptes es va popularitzar més ràpid i millor que aquests ... l'única part de veritat d'això és que Java es va basar en aquest concepte de portabilitat per després crear la seva màquina virtual, però no solament es va basar en C per això, sinó que va seguir altres models, si no, no tindríem el paradigma de programació orientada a objectes en Java ...

      Sentia que havia d'aclarir la situació perquè qualsevol persona menys versada podria prendre-ho com a veritat i després creure que això va succeir així ... salutacions 🙂

  9.   Ignasi Esquivel va dir

    Com sempre molt interessant l'article, gràcies per l'aportació.