Varifrån kommer UNIX?

Hälsningar till alla  Dessa veckor har jag varit ganska underhållande av att läsa några böcker om programmering, sanningen är att det bästa sättet att lära sig programmera är alltid med en bok, alla artiklar, handledningar, guider som man kan hitta (inklusive min) är bara referenspunkter när man jämför dem med en riktig bok i ämnet. Nu måste vi definiera vad en "riktig" bok är också, eftersom inte alla böcker vanligtvis är bra, och många av dem kan till och med kosta mer än de verkligen är värda och slösar bort vår tid.

Under dessa år har listan över böcker som jag har läst och listan över böcker som jag kan rekommendera avvikit ganska mycket, men utan tvekan bland några av mina favoriter vi har (i ingen specifik ordning):

  • CEH Certified Ethical Hacker av Matt Walker.
  • Början av Python: Från nybörjare till professionell av Magnus Lie Hetland.
  • Hacking: utnyttjandekonsten av Jon Erickson.
  • Komma igång med Arduino av Massimo Banzi.
  • Att lära sig bash-skalet av Cameron Newbam & Bill Rosenblatt.
  • Lärande vi- och vim-redaktörerna av Arnold Robbins, Elbert Hannah & Linda Lamb.
  • Linux Kernel in a Nutshell av Greg Kroah-Hartman (en Gentoo-utvecklare också).
  • Modern C av Jens Gustedt
  • Shellcoder's Handbook av Chris Anley, John Heasman, Felix «FX» Linder & Gerardo Richarte.
  • C-programmeringsspråket av Brian W. Kernighan & Dennis M. Ritchie (skapare av C)
  • Felsökning med GDB av Richard Stallman, Roland Pesch, Stan Shebs, et al.
  • Hacking Linux Exposed: Linux Security Secrets and Solutions från en stor grupp ISECOM-forskare, inklusive Pete Herzog, Marga Barceló, Rick Tucker, Andrea Barisani (en annan före detta Gentoo-utvecklare), 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.
  • Operativsystem: En konceptbaserad strategi av Dhananjay M. Dhamdhere
  • Pro Git av Scott Chacon och Ben Straub
  • Expert C-programmering: Djupa hemligheter av Peter Van Der Linden.

Jag skulle kunna tycka om var och en av dessa böcker, men för idag tar vi några av avsnitten från den sista på listan, eftersom många av dessa anekdoter har fängslat mig och hjälpt mig att bättre förstå några av de intrikata hemligheterna med C och programmering i allmänt 

Unix och C

När vi pratar om UNIX är sammanflätad historia med ursprunget till detta system och utvecklingen av språket som fram till i dag är en av de mest använda i utvecklingen av det och dess derivat (inklusive Linux). Och märkligt nog är dessa två födda av ett "misstag".

Multiriker Det var ett megaprojekt som samlade Bell-laboratorier, General Electric och MIT för att skapa ett operativsystem. Detta system presenterade många fel och bland ett av de viktigaste prestandafel som gjorde systemet praktiskt taget oanvändbart. Vi pratar om år 1969, så den tidens hårdvara kunde inte stödja den mängd programvara som behövdes för att köra själva systemet.

Det var först 1970 som ett par Bell-ingenjörer började arbeta med ett enkelt, snabbt och lätt operativsystem för PDP-7. Hela systemet hade skrivits in Assemblerare och hade kallats UNIX som en parodi på Multiriker eftersom han bara ville göra få saker, men att göra det bra istället för det enorma bortkastade arbetet som det andra innebar. Nu kan du förstå varför Epok börjar den 1 januari 1970.  Ett ganska märkligt faktum för mig. På den tiden var det fortfarande inte tal om ett C i sig, utan om ett Ny B eftersom Ritchies idéer kom från det redan använda B-språket på den tiden.

Tidigt C

Under åren (1972-3) började termen C användas sedan det nya språket började ta form, och omkring denna tid föds ett annat märkligt faktum, många programmerare och skämtare säger:

Programmerare vet att du börjar räkna från 0 istället för 1.

Tja, detta är inte helt sant  den verkliga anledningen till att detta anses vara så till denna dag är för att det vid skapandet var lättare för kompilatorförfattare att beräkna en array med hjälp av förskjutningar, dessa indikerar avståndet som finns från en utgångspunkt till det önskade målet, det är därför:

array[8]=2;

Det säger oss att elementet av array definieras som 2, eftersom 8 enheter läggs till i arrayen för att nå minnesutrymmet där element 2 kommer att lagras. Före C började många språk räkna från 1, tack vare C, nu börjar nästan alla med 0  så det är inte programmerarnas fel, utan snarare kompilatorns fel att det är så.

Bourne-skalet

Detta är ett ämne som, även om det inte är direkt relaterat till C, kan hjälpa mer än en att förstå varför Shell-programmering är så märklig, och det är verkligen nyfiken att veta. Steve Bourne skrev en kompilator för Algol-68 den säsongen, det här är ett språk där tangenterna ( {} ) ersätts av ord, så vi kan definiera det på följande sätt i C:

#define IF if(

#define THEN ){

#define ELSE }else{

#define FI };

Det här är bara några exempel på vad Algol förstår, men om vi tillämpar det på skalprogrammering idag kommer du att förstå varför i skal dina program kräver en fi för varje if  säkert intressant.

Börja läsa

Jag kan inte berätta alla detaljer i boken, särskilt eftersom många av dessa redan är programmeringsämnen som kräver tidigare bakgrund för att förstås, men jag tänkte dela med mig av några av de nyfikna anekdoterna som jag hittade på vägen  Jag har inte hunnit jobba med några av artiklarna som har stått på att göra-listan eftersom de här senaste böckerna helt enkelt har fångat mig och jag njuter av dem varje dag och framför allt försöker förstå dem så mycket som möjligt. Hälsningar och snart kommer jag att kunna dela fler ämnen med er, hälsningar.