De onde vem o UNIX?

Saudações a todos 🙂 estas semanas tenho me divertido bastante lendo alguns livros sobre programação, a verdade é que a melhor forma de aprender a programar é sempre com um livro, qualquer artigo, tutorial, guia que se possa encontrar (inclusive o meu) são meros benchmarks ao compará-los a um livro real sobre o assunto. Agora, temos que definir o que é um livro "real" também, uma vez que nem todos os livros geralmente são bons, e muitos deles podem até custar mais do que realmente valem e desperdiçar tempo.

Ao longo destes anos a lista de livros que li e a lista de livros que posso recomendar divergiram bastante, mas sem dúvida entre alguns dos meus favoritos temos (sem ordem específica):

  • CEH Certified Ethical Hacker por Matt Walker.
  • Beginning Python: From Novice to Professional por Magnus Lie Hetland.
  • Hacking: a arte da exploração de Jon Erickson.
  • Introdução ao Arduino de Massimo Banzi.
  • Aprendendo o bash Shell de Cameron Newbam e Bill Rosenblatt.
  • Aprendendo os editores vi e vim por Arnold Robbins, Elbert Hannah e Linda Lamb.
  • Linux Kernel in a Nutshell por Greg Kroah-Hartman (um desenvolvedor Gentoo também).
  • Modern C por Jens Gustedt
  • O Manual do Shellcoder de Chris Anley, John Heasman, Felix «FX» Linder e Gerardo Richarte.
  • A linguagem de programação C por Brian W. Kernighan e Dennis M. Ritchie (criadores de C)
  • Depuração com GDB por Richard Stallman, Roland Pesch, Stan Shebs, et al.
  • Hacking Linux Exposed: Linux Security Secrets and Solutions de um grande grupo de pesquisadores ISECOM, incluindo Pete Herzog, Marga Barceló, Rick Tucker, Andrea Barisani (outro ex-desenvolvedor 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 operacionais: uma abordagem baseada em conceitos por Dhananjay M. Dhamdhere
  • Pro Git de Scott Chacon e Ben Straub
  • Expert C Programming: Deep segredos por Peter Van Der Linden.

Eu poderia falar bem de cada um desses livros, mas por hoje vamos pegar algumas das passagens do último da lista, já que muitos desses anectodos me cativaram e me ajudaram a entender melhor alguns dos segredos intrincados de C e da programação em geral. 🙂

Unix e C

Quando falamos em UNIX, a história se confunde com a origem desse sistema e o desenvolvimento da linguagem que até hoje é uma das mais utilizadas no desenvolvimento dele e de seus derivados (incluindo o Linux). E curiosamente, esses dois nasceram de um "erro".

multrics Foi um megaprojeto que reuniu a Bell Laboratories, a General Electric e o próprio MIT para criar um sistema operacional, cujo sistema apresentava muitos erros, e entre um dos mais importantes, falhas de desempenho que tornavam o sistema praticamente inutilizável. Estamos falando do ano de 1969, então o hardware da época não suportava a quantidade de software necessária para rodar o próprio sistema.

Não foi até 1970 que alguns engenheiros da Bell começaram a trabalhar em um sistema operacional simples, rápido e leve para o PDP-7. Todo o sistema foi escrito em Assembler e tinha sido chamado UNIX como uma paródia de multrics já que ele só queria fazer algumas coisas, mas fazê-las bem em vez do tremendo trabalho desperdiçado que o segundo significava. Agora você pode entender porque Época começa em 1 ° de janeiro, 1970. 🙂 Um fato bastante curioso para mim. Naquela época ainda não se falava de um C em si, mas de um Novo B já que as ideias de Ritchie vieram da já usada linguagem B da época.

C inicial

Com o passar dos anos (1972-3) o termo C começou a ser usado desde que a nova linguagem começou a tomar forma, e nessa época outro fato curioso nasceu, muitos programadores e piadas de programadores dizem:

Os programadores sabem que você começa a contar de 0 em vez de 1.

Bem, isso não é totalmente verdade 🙂 a verdadeira razão pela qual isso é considerado assim até hoje é porque, em sua criação, para os escritores de compiladores, era mais fácil calcular um array usando compensações, estes indicam a distância que existe de um ponto de origem ao objetivo desejado, por isso:

array[8]=2;

Isso nos diz que o elemento de array é definido como 2, porque 8 unidades são adicionadas ao array para alcançar o espaço de memória onde será armazenado o elemento 2. Antes de C, muitas linguagens começaram a contar a partir de 1, graças a C, agora quase todas começam com 0 🙂 portanto, não é culpa dos programadores, mas dos redatores do compilador.

A Concha Bourne

Este é um tópico que, embora não esteja diretamente relacionado ao C, pode ajudar mais de um a entender porque a programação em Shell é tão peculiar, e certamente é curioso saber. Steve Bourne escreveu um compilador para Algol-68 naquela temporada, esta é uma linguagem em que as chaves ( {} ) são substituídos por palavras, portanto, podemos defini-los da seguinte forma em C:

#define IF if(

#define THEN ){

#define ELSE }else{

#define FI };

Estes são apenas alguns exemplos do que Algol entende, mas se aplicarmos à programação em shell hoje, você entenderá por que em shell seus programas requerem um fi para cada if 🙂 certamente interessante.

Comece a ler

Não posso te contar todos os detalhes do livro, especialmente porque muitos desses já são tópicos de programação que requerem um conhecimento prévio para serem compreendidos, mas pensei em compartilhar com vocês algumas das anedotas curiosas que encontrei ao longo do caminho 🙂 Não tive tempo de trabalhar em alguns dos itens que estão na lista de afazeres porque simplesmente estes últimos livros me pegaram e estou gostando deles todos os dias e acima de tudo tentando entendê-los ao máximo. Saudações e em breve poderei compartilhar com vocês mais tópicos, saudações.


13 comentários, deixe o seu

Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   banheiro dito

    Seu artigo foi muito interessante para mim. Muito obrigado.

  2.   HO2Gi dito

    Muito interessante como sempre.

  3.   Jose rafael dito

    Muito interessante os esclarecimentos são bons.

  4.   Alex dito

    Excelente

  5.   Danielga dito

    Interessante !!! Muito obrigado.

  6.   segundo dito

    multrics? não será multics (https://en.wikipedia.org/wiki/Multics)

    linguagens com índices de 1 são uma invenção de satanás ...

    1.    Chris ADR dito

      Nota interessante 🙂 Suponho que em algum momento da história ambos os termos foram usados:

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

      e evidentemente o mesmo livro que foi escrito em meados dos anos 90.

      Obrigado pelo esclarecimento 🙂 saudações

      1.    segundo dito

        wa, que coisa estranha, você me fez duvidar, eu olhei em uma cópia "comprada" de Expert C Programming: segredos profundos e há múlticos chegando, é a primeira vez que ouço esses multricos. Que curioso, lembra um pouco o coelho trix

        1.    Chris ADR dito

          hahaha com certeza curioso, chequei minha cópia em inglês de deep segredos, lá também diz Multrics (porque você também me fez duvidar) ... talvez fosse uma expressão da época 😛

          lembranças

  7.   ED774 dito

    Grande contribuição

  8.   anônimo dito

    Interessante, embora seguramente, o Multrics se deve a um erro de impressão, já que o nome original daquele sistema operacional era Multics, e Unix, originalmente chamado de Unics, justamente se referindo a esse grande sistema operacional, eventualmente e pela fonética, o Unics se transformou em Unix, agora , bastava mencionar o nome de quem é considerado autor do Unix; Ken Thompson, diz a lenda que Thompson e Ritchie estavam na cafeteria do Bell Labs comentando sobre seus projetos e foi que Ritchie sugeriu a Thomposon que ele reescrevesse seu programa Unics com C, a linguagem que ele havia escrito ... resto, é história. 😉

    Aliás, antes todos os programas eram escritos com as instruções da máquina, o que os tornava totalmente dependentes do hardware, a inovação do C, além de facilitar a escrita de programas, era que a linguagem era independente do hardware que implementava o compiladores, filosofia que muitos anos depois levaria ao Java, no sentido de que os programas não dependiam do sistema operacional, agregando a famosa máquina virtual java.

    1.    Chris ADR dito

      O lado ruim das lendas é que elas distorcem a história em mais de uma maneira ... e podem fazer você pensar que algo acontece quando não é ... como o fato da conversa existente entre Thompson e Ritchie (que eu omiti à vontade), uma vez que leva a erros históricos e técnicos (C não era antes do UNIX) ...

      E quanto ao segundo ... outra lenda que distorce a realidade, pois antes de C existiam B, A, pascal, Ada, algol-60, PL / 1 e mais alguns que eram linguagens de programação propriamente ditas (muito diferentes de Assembly e seus dialetos por arquitetura que dependem do hardware do processador) então C não "inovou" nesse sentido, ele simplesmente adotou soluções que já existiam em outras linguagens e no final se popularizou mais rápido e melhor que essas ... A única parte A verdade é que Java se baseou neste conceito de portabilidade para posteriormente criar sua máquina virtual, mas não só contou com C para isso, mas seguiu outros modelos, caso contrário não teríamos o objeto- paradigma de programação orientada em java ...

      Achei que deveria esclarecer a situação porque qualquer pessoa menos versada poderia tomar como verdade e depois acreditar que aconteceu assim ... saudações 🙂

  9.   Inácio Esquivel dito

    Como sempre, o artigo é muito interessante, obrigado pela contribuição.