Programar em C/História da linguagem C

Origem: Wikilivros, livros abertos por um mundo aberto.
Saltar para a navegação Saltar para a pesquisa
Recycle001.svg Esta página precisa ser reciclada (discuta).
Ao melhorá-la, você estará ajudando o Wikilivros.

História[editar | editar código-fonte]

Desenvolvimentos iniciais[editar | editar código-fonte]

Kenneth Thompson (à esquerda) e Dennis Ritchie (à direita), os criadores da linguagem C

O desenvolvimento inicial da linguagem C ocorreu nos laboratórios Bell da AT&T entre 1969 e 1973. Segundo Ritchie, o período mais criativo ocorreu em 1972. Deu-se o nome "C" à linguagem porque muitas das suas características derivaram de uma linguagem de programação anterior chamada "B". Há vários relatos que se referem à origem do nome "B": Ken Thompson dá crédito à linguagem de programação BCPL, mas ele também criou uma outra linguagem de programação chamada 'Bon, em honra da sua mulher Bonnie.

Por volta de 1973, a linguagem C tinha se tornado suficientemente poderosa para que grande parte do núcleo de UNIX, originalmente escrito na linguagem de programação PDP-11/20 Assembly, fosse reescrito em C, tornando-se um dos primeiros núcleos de sistema operacional implementado em uma linguagem sem ser o Assembly. Como exemplos anteriores pode-se citar o sistema Multics (escrito em PL/I) e TRIPOS (escrito em BCPL).

C de K&R[editar | editar código-fonte]

Em 1978, Ritchie e Kernighan publicaram a primeira edição do livro The C Programming Language. Esse livro, conhecido pelos programadores de C como "K&R", serviu durante muitos anos como uma especificação informal da linguagem. A versão da linguagem C que ele descreve é usualmente referida como "C de K&R". (A segunda edição do livro cobre o posterior padrão ANSI C, descrito abaixo.) K&R introduziram as seguintes características na linguagem:

  • Tipos de dados struct
  • Tipos de dados long int
  • Tipos de dados unsigned int
  • O operador =+ foi alterado para +=, e assim sucessivamente (a análise léxica do compilador confundia o operador =+. Por exemplo, i =+ 10 e i = +10).

C de K&R é frequentemente considerado a parte mais básica da linguagem cujo suporte deve ser assegurado por um compilador C. Durante muitos anos, mesmo após a introdução do padrão C ANSI, ele era considerado o "menor denominador comum" em que programadores de C se apoiavam quando uma portabilidade máxima era desejada, já que nem todos os compiladores eram atualizados para suportar na íntegra o padrão C ANSI, e o código C de K&R razoavelmente bem escrito é também válido em relação ao C ANSI.

Nos anos que se seguiram à publicação do C K&R, algumas características "não-oficiais" foram adicionadas à linguagem, suportadas por compiladores da AT&T e de outros vendedores. Estas incluíam:

  • Funções void e tipos de dados void *
  • Funções que retornam tipos struct ou union
  • Campos de nome struct num espaço de nome separado para cada tipo struct
  • Atribuição a tipos de dados struct
  • Qualificadores const para criar um objeto só de leitura
  • Uma biblioteca-padrão que incorpora grande parte da funcionalidade implementada por vários vendedores
  • Enumerações
  • O tipo de ponto-flutuante de precisão simples

Os Padrões C ANSI e C ISO[editar | editar código-fonte]

Durante os finais da década de 1970, a linguagem C começou a substituir a linguagem BASIC como a linguagem de programação de microcomputadores mais usada. Durante a década de 1980, foi adotada para uso no PC IBM, e a sua popularidade começou a aumentar significativamente. Ao mesmo tempo, Bjarne Stroustrup, juntamente com outros nos laboratórios Bell, começou a trabalhar num projeto onde se adicionavam construções de linguagens de programação orientada por objetos à linguagem C. A linguagem que eles produziram, chamada C++, é nos dias de hoje a linguagem de programação de aplicações mais comum no sistema operativo Windows da companhia Microsoft; C permanece mais popular no mundo UNIX.

Em 1983, o Instituto Norte-Americano de Padrões (ANSI) formou um comité, X3j11, para estabelecer uma especificação do padrão da linguagem C. Após um processo longo e árduo, o padrão foi completo em 1989 e ratificado como ANSI X3.159-1989 "Programming Language C". Esta versão da linguagem é frequentemente referida como C ANSI. Em 1990, o padrão C ANSI, após sofrer umas modificações menores, foi adotado pela Organização Internacional de Padrões (ISO) como ISO/IEC 9899:1990. Um dos objetivos do processo de padronização C ANSI foi o de produzir um sobreconjunto do C K&R, incorporando muitas das características não-oficiais subsequentemente introduzidas. Entretanto, muitos programas tinham sido escritos e que não compilavam em certas plataformas, ou com um certo compilador, devido ao uso de bibliotecas de funções não-padrão e ao fato de alguns compiladores não aderirem ao C ANSI.

C99[editar | editar código-fonte]

Após o processo ANSI de padronização, as especificações da linguagem C permaneceram relativamente estáticas por algum tempo, enquanto que a linguagem C++ continuou a evoluir. (Em 1995, a Normative Ammendment 1 criou uma versão nova da linguagem C mas esta versão raramente é tida em conta.) Contudo, o padrão foi submetido a uma revisão nos finais da década de 1990, levando à publicação da norma ISO 9899:1999 em 1999. Este padrão é geralmente referido como "C99". O padrão foi adotado como um padrão ANSI em Março de 2000.

As novas características do C99 incluem:

  • Funções em linha
  • Levantamento de restrições sobre a localização da declaração de variáveis (como em C++)
  • Adição de vários tipos de dados novos, incluindo o long long int (para minimizar a dor da transição de 32-bits para 64-bits), um tipo de dados boolean explicito e um tipo complex que representa números complexos
  • Disposições de dados de comprimento variável
  • Suporte oficial para comentários de uma linha iniciados por //, emprestados da linguagem C++
  • Várias funções de biblioteca novas, tais como snprintf()
  • Vários arquivos-cabeçalho novos, tais como stdint.h

O interesse em suportar as características novas de C99 parece depender muito das entidades. Apesar do GCC e vários outros compiladores suportarem grande parte das novas características do C99, os compiladores mantidos pela Microsoft e pela Borland não, e estas duas companhias não parecem estar muito interessadas adicionar tais funcionalidades, ignorando por completo as normas internacionais.

Resumo em inglês[editar | editar código-fonte]

Em 1947, três cientistas do Laboratório Telefonia Bell, William Shockley, Walter Brattain, e John Bardeen criaram o transistor. A computação moderna teve início. Em 1956 no MIT o primeiro computador completamente baseado em transistores foi concluído, the TX-0. Em 1958 na Texas Instruments, Jack Kilby construiu o primeiro circuito integrado. Mas mesmo antes do primeiro circuito integrado existir, a primeira linguagem de alto nível já tinha sido escrita.

Em 1954 Fortran, a Formula Translator, foi escrito. Começou como Fortran I em 1956. Fortran veio a ser Algol 58, o Algorithmic Language, em 1958. Algol 58 tornou-se Algol 60 em 1960. Algol 60 gerou CPL, o Combined Programming Language, em 1963. CPL passou a ser BCPL, Basic CPL, em 1967. BCPL engendrou B em 1969. E de B surgiu C em 1971.

B foi a primeira língua da linhagem C diretamente, tendo sido criado no Bell Labs por Ken Thompson. B era uma linguagem interpretada, utilizada no início, em versões internas do sistema operacional UNIX. Thompson e Dennis Ritchie, também da Bell Labs, melhorou B, chamando-NB; novas prorrogações para NB criaram C, uma linguagem compilada. A maioria dos UNIX foi reescrito em NB e C, o que levou a um sistema operacional mais portátil.

B foi, naturalmente, o nome de BCPL e C foi o seu sucessor lógico.

A portabilidade do UNIX foi a razão principal para a popularidade inicial de ambos, UNIX e C; pois ao invés de criar um novo sistema operacional para cada nova máquina, programadores de sistemas poderiam simplesmente escrever as partes restantes que fossem específicas para suas máquinas, e criar um compilador C para o sistema. Já que a maior parte dos utilitários era em C, fazia sentido simplesmente continuar criando-os em C.