De onde vén UNIX?

Un saúdo a todos 🙂 estas semanas estiven bastante entretido lendo algúns libros sobre programación, a verdade é que a mellor forma de aprender a programar sempre é cun libro, calquera artigo, titorial, guía que se poida atopar (incluído o meu) son meros puntos de referencia á hora de comparalos cun libro real sobre o tema. Agora temos que definir o que é un libro "de verdade", xa que non todos os libros adoitan ser bos, e moitos deles poden incluso custar máis do que realmente valen e perder o tempo.

Ao longo destes anos a lista de libros que lin e a lista de libros que podo recomendar divergiron bastante, pero sen dúbida, algúns dos meus favoritos temos (sen orde específica):

  • Hacker ético certificado CEH por Matt Walker.
  • Python de inicio: de novato a profesional de Magnus Lie Hetland.
  • Hacking: a arte da explotación por Jon Erickson.
  • Primeiros pasos con Arduino de Massimo Banzi.
  • Aprender o bash Shell de Cameron Newbam e Bill Rosenblatt.
  • Aprender os editores de vi e vim de Arnold Robbins, Elbert Hannah e Linda Lamb.
  • Linux Kernel in a Nutshell de Greg Kroah-Hartman (tamén desenvolvedor de Gentoo).
  • C moderno de Jens Gustedt
  • The Shellcoder's Handbook de Chris Anley, John Heasman, Felix «FX» Linder e Gerardo Richarte.
  • A linguaxe de programación C de Brian W. Kernighan e Dennis M. Ritchie (creadores de C)
  • Depuración con GDB por Richard Stallman, Roland Pesch, Stan Shebs, et al.
  • Hacking Linux Exposed: Linux Security Secrets and Solutions dun gran grupo de investigadores de ISECOM, incluídos Pete Herzog, Marga Barceló, Rick Tucker, Andrea Barisani (outro ex desenvolvedor de 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.
  • Sistemas operativos: un enfoque baseado en conceptos de Dhananjay M. Dhamdhere
  • Pro Git de Scott Chacon e Ben Straub
  • Programación Expert C: Deep secrets de Peter Van Der Linden.

Podería falar moi ben de cada un destes libros, pero por hoxe imos coller algúns dos pasaxes do último da lista, xa que moitos destes anéctodos me cativaron e axudaronme a comprender mellor algúns dos intrincados segredos de C e da programación en xeral. 🙂

Unix e C

Cando falamos de UNIX, a historia está entrelazada coa orixe deste sistema e o desenvolvemento da linguaxe que ata o día de hoxe é un dos máis empregados no desenvolvemento deste e dos seus derivados (incluído Linux). E curiosamente, estes dous nacen dun "erro".

Multrics Foi un mega proxecto que reuniu a Bell Laboratories, General Electric e o propio MIT para crear un sistema operativo, o devandito sistema presentou moitos erros e, entre os máis importantes, os fallos de rendemento que fixeron que o sistema fose practicamente inutilizable. Falamos do ano 1969, polo que o hardware daquela época non podía soportar a cantidade de software que se precisaba para executar o propio sistema.

Non foi ata 1970 cando un par de enxeñeiros de Bell comezaron a traballar nun sistema operativo sinxelo, rápido e lixeiro para o PDP-7. Todo o sistema fora escrito Ensamblador e fora chamado UNIX como parodia de Multrics xa que só quería facer algunhas cousas, pero facelas ben en lugar do tremendo traballo desperdiciado que significaba o segundo. Agora podes entender por que Época comeza o 1 de xaneiro 1970. 🙂 Un dato bastante curioso para min. Daquela aínda non se falaba dun C en si, senón dun Novo B xa que as ideas de Ritchie procedían da linguaxe B xa empregada daquela época.

Principios C

Co paso dos anos (1972-3) o termo C comezou a usarse a medida que a nova linguaxe comezou a tomar forma e, nesta época, naceu outro dato curioso, moitos programadores e bromas de programadores din:

Os programadores saben que comeza a contar de 0 en lugar de 1.

Ben, isto non é totalmente certo true a verdadeira razón pola que isto se considera así ata hoxe é porque na súa creación, para os escritores de compiladores era máis doado calcular unha matriz empregando compensacións, estes indican a distancia que existe desde un punto de orixe ata o obxectivo desexado, por iso:

array[8]=2;

Indícanos que o elemento de matriz defínese como 2, porque se engaden 8 unidades á matriz para chegar ao espazo de memoria onde se almacenará o elemento 2. Antes de C, moitas linguas comezaban a contar desde 1, grazas a C, agora case todas comezan con 0 🙂 polo que non é culpa dos programadores, senón dos escritores do compilador que isto sexa así.

O Bourne Shell

Este é un tema que, aínda que non está directamente relacionado con C, pode axudar a máis dun a comprender por que a programación Shell é tan peculiar e, certamente, é curioso sabelo. Steve Bourne escribiu un compilador para Algol-68 ao redor desa tempada, esta é unha linguaxe na que as claves ( {} ) substitúense por palabras, polo que poderiamos definilo como segue en C:

#define IF if(

#define THEN ){

#define ELSE }else{

#define FI };

Estes son só algúns exemplos do que Algol entende, pero se hoxe o aplicamos á programación de shell, comprenderá por que no shell os seus programas requiren un fi para cada un if 🙂 certamente interesante.

Comeza a ler

Non podo contarlles todos os detalles do libro, sobre todo porque moitos destes xa son temas de programación que requiren unha formación previa para ser entendidos, pero pensei en compartir con vós algunhas das anécdotas curiosas que atopei no camiño along Non tiven tempo para traballar nalgúns dos elementos que figuran na lista de tarefas pendentes porque simplemente estes últimos libros me atraparon e estou a gozar deles todos os días e sobre todo tratando de entendelos ao máximo. Un saúdo e en breve poderei compartir con vós máis temas, un saúdo.


O contido do artigo adhírese aos nosos principios de ética editorial. Para informar dun erro faga clic en aquí.

13 comentarios, deixa os teus

Deixa o teu comentario

Enderezo de correo electrónico non será publicado. Os campos obrigatorios están marcados con *

*

*

  1. Responsable dos datos: Miguel Ángel Gatón
  2. Finalidade dos datos: controlar SPAM, xestión de comentarios.
  3. Lexitimación: o seu consentimento
  4. Comunicación dos datos: os datos non serán comunicados a terceiros salvo obrigación legal.
  5. Almacenamento de datos: base de datos aloxada por Occentus Networks (UE)
  6. Dereitos: en calquera momento pode limitar, recuperar e eliminar a súa información.

  1.   John dixo

    O teu artigo foi moi interesante para min. Moitas grazas.

  2.   HO2Gi dixo

    Moi interesante coma sempre.

  3.   José Rafael dixo

    Moi interesantes as aclaracións son boas.

  4.   Alex dixo

    Excelente

  5.   Danielga dixo

    Interesante !!! Moitas grazas.

  6.   Segundo dixo

    multrics? non serán múltiples (https://en.wikipedia.org/wiki/Multics)

    as linguas con índices do 1 son un invento de Satanás ...

    1.    ChrisADR dixo

      Nota interesante 🙂 Supoño que nalgún momento da historia usáronse ambos os termos:

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

      e, obviamente, o mesmo libro que está escrito a mediados dos 90.

      Grazas pola aclaración 🙂 saúdos

      1.    Segundo dixo

        wa, que cousa estraña, fixechesme dubidar, busquei unha copia "comprada" de Programación Expert C: Deep secrets and there are multics coming, é a primeira vez que escoito que os multrics. Que curioso, recorda un pouco ao coello trix

        1.    ChrisADR dixo

          jajaja certamente curioso, comprobei a miña copia en inglés de segredos profundos, alí tamén di Multrics (porque tamén me fixeras dubidar) ... quizais fose unha expresión da época 😛

          lembranzas

  7.   ED774 dixo

    Gran achega

  8.   Anónimo dixo

    Interesante, aínda que seguramente, Multrics débese a unha mala impresión, xa que o nome orixinal dese sistema operativo era Multics e Unix, orixinalmente chamado Unics, referíndose precisamente a ese gran sistema operativo, finalmente e por fonética, Unics se transformado en Unix, agora só tiñas que mencionar o nome de quen se considera o autor de Unix; Ken Thompson, a lenda di que tanto Thompson como Ritchie estaban na cafetería de Bell Labs comentando os seus proxectos e foi que Ritchie suxeriu a Thomposon que reescribise o seu programa Unics con C, a linguaxe que escribira ... e o resto , é historia. 😉

    Por certo, anteriormente todos os programas escribíanse coas instrucións da máquina, o que os facía totalmente dependentes do hardware, a innovación de C, ademais de facilitar a escritura de programas, era que a linguaxe era independente do hardware que implementaba o compiladores, unha filosofía que moitos anos despois tomaría Java, no sentido de que os programas non dependían do sistema operativo, engadindo a famosa máquina virtual java.

    1.    ChrisADR dixo

      O malo das lendas é que distorsionan a historia, en máis dun sentido ... e poden facer pensar que algo sucede cando non o é ... como o feito da conversa existente entre Thompson e Ritchie (que omitín a gusto) xa que leva a erros históricos e técnicos (C non era antes de UNIX) ...

      E en canto á segunda ... outra lenda que distorsiona a realidade, xa que antes de C había B, A, pascal, Ada, algol-60, PL / 1 e algúns máis que eran linguaxes de programación correctamente (moi diferentes de Assembly e os seus dialectos por arquitectura que dependen do hardware do procesador) polo que C non "innovou" neste sentido, simplemente adoptou solucións que xa existían noutros idiomas e ao final popularizouse máis rápido e mellor que estes ... A única parte A verdade é que Java baseouse neste concepto de portabilidade para crear máis tarde a súa máquina virtual, pero non só confiou en C para iso, senón que seguiu outros modelos, senón non teriamos o paradigma de programación orientado a obxectos en java ...

      Sentín que debería aclarar a situación porque calquera persoa menos versada podería tomala como certa e logo crer que sucedeu así ... saúdos 🙂

  9.   Ignacio Esquivel dixo

    Coma sempre, o artigo é moi interesante, grazas pola contribución.