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.