>> Tecnologia Eletrônica >  >> Telefones >> Viva-voz de Conferência

BCPL: O Avô Esquecido do C — História, Características e Exemplo de Código

BCPL (Basic Combined Programming Language) é o ancestral direto de B e C. Projetado por Martin Richards na Universidade de Cambridge em 1966, foi a primeira linguagem a provar que uma linguagem de programação de sistemas poderia ser pequena, portátil e poderosa o suficiente para escrever seu próprio compilador.

Por Que BCPL Importou

  • Portabilidade Primeiro: Compilador dividido em front-end (parser) e back-end (gerador de código). Retargeting para nova CPU (PDP-10, 68000, x86, MIPS) levava semanas, não anos.
  • Programação de Sistemas: Sem dependência de biblioteca de runtime. Acesso direto à memória via ponteiros. Usado para escrever kernels de SO (TRIPOS, AmigaDOS), compiladores, editores.
  • Minimalismo: Um tipo de dado: a word (inteiro/ponteiro de largura da máquina). Sem tipos, sem structs, sem float — construa tudo a partir de words.
  • Influenciou C Diretamente: Ken Thompson reduziu BCPL para criar B (para PDP-7 Unix). Dennis Ritchie adicionou tipos → C. Modelo de bytecode do Java ecoa representação intermediária O-code do BCPL.

Principais Características da Linguagem

  • Estrutura em blocos: `$ ( ... $)` para statements compostos (como `{ }` em C).
  • Ponteiros/Indireção: `!ptr` (desreferência), `ptr!i` (índice de array). `rv` (result value) para retorno.
  • Alocação Dinâmica: `getvec(n)` / `freevec(vec)` — gerenciamento manual de heap.
  • Compilação Condicional: `#if`, `#unless` — pioneiro para 1967.
  • Assembly Inline: `code` ... `endcode` para ops específicas de máquina.

Hello World em BCPL (Estilo Martin Richards)

GET "libhdr"
LET start() = VALOF $( writes("Hello, World!*N") RESULTIS 0 $) 

Nota: `writes` escreve string; `*N` é newline. `VALOF`/`RESULTIS` é mecanismo de retorno de função.

A Inovação do O-Code

BCPL compilava para O-code (Object code) — bytecode simples de máquina de pilha. O backend traduzia O-code para assembly alvo. Esta arquitetura de duas passagens (Frontend → O-code → Backend) é o blueprint para:

  • Pascal P-code
  • Java JVM bytecode
  • LLVM IR
  • WebAssembly

Onde BCPL Vive Hoje

  • AmigaOS / MorphOS / AROS: Componentes centrais do SO ainda em BCPL (VM Cintcode).
  • Sistema Cintcode de Martin Richards: Ativamente mantido; roda em Linux, Windows, Raspberry Pi. Site Oficial.
  • Retrocomputing / Educação: Ensino de construção de compiladores (compilador one-pass cabe em 2000 linhas).

BCPL não está "morto" — é o DNA arquitetural dentro de todo programa C, C++, Java, Go, Rust e Swift rodando hoje.