Programar em C/História da linguagem C

Esta página precisa ser reciclada (discuta).
Ao melhorá-la, você estará ajudando o Wikilivros.

História editar

Desenvolvimentos iniciais editar

 
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

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

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

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

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.