BCPL

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Multi-paradigm linguagem de programação do computador

BCPL ("Linguagem de programação combinada básica") é uma linguagem de programação estruturada, imperativa e processual. Originalmente destinado a escrever compiladores para outras linguagens, o BCPL não é mais de uso comum. No entanto, sua influência ainda é sentida porque uma versão simplificada e sintaticamente alterada do BCPL, chamada B, era a linguagem na qual a linguagem de programação C foi baseada. BCPL introduziu vários recursos de muitas linguagens de programação modernas, incluindo o uso de chaves para delimitar blocos de código. O BCPL foi implementado pela primeira vez por Martin Richards, da Universidade de Cambridge, em 1967.

Design

O BCPL foi projetado para que compiladores pequenos e simples pudessem ser escritos para ele; supostamente alguns compiladores podem ser executados em 16 kilobytes. Além disso, o compilador original, escrito em BCPL, era facilmente portátil. BCPL foi, portanto, uma escolha popular para inicializar um sistema. Uma das principais razões para a portabilidade do compilador está em sua estrutura. Ele foi dividido em duas partes: o front-end analisou o código-fonte e gerou o O-code, uma linguagem intermediária. O back-end pegou o código O e o traduziu no código da máquina para a máquina de destino. Apenas 15 do compilador&#39 O código de;s precisava ser reescrito para suportar uma nova máquina, uma tarefa que geralmente levava entre 2 e 5 pessoas-meses. Essa abordagem tornou-se uma prática comum posteriormente (por exemplo, Pascal, Java).

A linguagem é incomum por ter apenas um tipo de dado: uma palavra, um número fixo de bits, geralmente escolhido para alinhar com a palavra de máquina da arquitetura e de capacidade adequada para representar qualquer endereço de armazenamento válido. Para muitas máquinas da época, esse tipo de dado era uma palavra de 16 bits. Essa escolha mais tarde provou ser um problema significativo quando o BCPL foi usado em máquinas nas quais o menor item endereçável não era uma palavra, mas um byte ou em máquinas com tamanhos de palavra maiores, como 32 bits ou 64 bits.

A interpretação de qualquer valor foi determinada pelos operadores usados para processar os valores. (Por exemplo, + adicionou dois valores juntos, tratando-os como inteiros; ! indireto por meio de um valor, efetivamente tratando-o como um ponteiro.) Para que isso funcione, a implementação não forneceu nenhuma verificação de tipo.

A incompatibilidade entre a orientação de palavras do BCPL e o hardware orientado a bytes foi abordada de várias maneiras. Uma delas era fornecer rotinas de biblioteca padrão para compactar e descompactar palavras em cadeias de bytes. Mais tarde, dois recursos de linguagem foram adicionados: o operador de seleção de campo de bit e o operador de indireção de byte infixo (denotado por %).

O BCPL lida com vinculações abrangendo unidades de compilação separadas de uma maneira única. Não há variáveis globais declaráveis pelo usuário; em vez disso, há um vetor global, semelhante a "branco comum" em Fortran. Todos os dados compartilhados entre diferentes unidades de compilação compreendem escalares e ponteiros para vetores armazenados em um local pré-arranjado no vetor global. Assim, os arquivos de cabeçalho (arquivos incluídos durante a compilação usando a diretiva "GET") tornam-se o principal meio de sincronização de dados globais entre as unidades de compilação, contendo "GLOBAL" diretivas que apresentam listas de nomes simbólicos, cada um emparelhado com um número que associa o nome à palavra endereçada numericamente correspondente no vetor global. Além das variáveis, o vetor global contém ligações para procedimentos externos. Isso torna o carregamento dinâmico de unidades de compilação muito simples de conseguir. Em vez de confiar no carregador de link da implementação subjacente, efetivamente, o BCPL fornece ao programador o controle do processo de vinculação.

O vetor global também tornou muito simples substituir ou aumentar rotinas de biblioteca padrão. Um programa poderia salvar o ponteiro do vetor global para a rotina original e substituí-lo por um ponteiro para uma versão alternativa. A alternativa pode chamar o original como parte de seu processamento. Isso pode ser usado como uma rápida ajuda de depuração ad hoc.

BCPL foi a primeira linguagem de programação de chaves e as chaves sobreviveram às mudanças sintáticas e se tornaram um meio comum de denotar declarações de código-fonte de programas. Na prática, em teclados limitados da época, os programas-fonte costumavam usar as sequências $( e $) no lugar dos símbolos { e }. Os comentários // de linha única de BCPL, que não foram adotados por C, reapareceram em C++ e posteriormente em C99.

O livro BCPL: The language and its compiler descreve a filosofia do BCPL da seguinte forma:

A filosofia da BCPL não é um dos tiranos que pensa que conhece melhor e estabelece a lei sobre o que é e o que não é permitido; em vez disso, a BCPL atua mais como um servo oferecendo seus serviços ao melhor de sua capacidade sem reclamação, mesmo quando confrontado com aparente insensatez. O programador é sempre assumido para saber o que ele está fazendo e não é amontoado por pequenas restrições.

História

O BCPL foi implementado pela primeira vez por Martin Richards da Universidade de Cambridge em 1967. O BCPL foi uma resposta às dificuldades com seu antecessor, Cambridge Programming Language, posteriormente renomeado Combined Programming Language (CPL), que foi projetado durante o início dos anos 1960. Richards criou a BCPL "removendo os recursos da linguagem completa que dificultam a compilação". A primeira implementação do compilador, para o IBM 7094 sob o Sistema Compatível de Compartilhamento de Tempo, foi escrita enquanto Richards visitava o Projeto MAC no Instituto de Tecnologia de Massachusetts na primavera de 1967. A linguagem foi descrita pela primeira vez em um artigo apresentado ao Spring Joint de 1969 Conferência de Informática.

Há rumores de que BCPL originalmente significava "Bootstrap Cambridge Programming Language", mas CPL nunca foi criado desde que o desenvolvimento parou em BCPL, e o acrônimo foi posteriormente reinterpretado para o livro BCPL.

BCPL é o idioma no qual o original "Hello, World!" programa foi escrito. O primeiro MUD também foi escrito em BCPL (MUD1).

Vários sistemas operacionais foram escritos parcial ou totalmente em BCPL (por exemplo, TRIPOS e as primeiras versões do AmigaDOS). BCPL também foi a linguagem inicial usada no seminal projeto Xerox PARC Alto, o primeiro computador pessoal moderno; entre outros projetos, o sistema de preparação de documentos Bravo foi escrito em BCPL.

Um compilador inicial, inicializado em 1969, começando com uma fita de papel do código O do compilador Atlas 2 de Richards, visava a série ICT 1900. As duas máquinas tinham diferentes comprimentos de palavra (48 x 24 bits), diferentes codificações de caracteres e diferentes representações de strings empacotadas — e a inicialização bem-sucedida aumentou a confiança na praticidade do método.

No final de 1970, existiam implementações para Honeywell 635 e Honeywell 645, IBM 360, PDP-10, TX-2, CDC 6400, UNIVAC 1108, PDP-9, KDF 9 e Atlas 2. Em 1974, um dialeto de BCPL foi implementado na BBN sem usar o O-code intermediário. A implementação inicial foi um cross-compiler hospedado em BBN's TENEX PDP-10s, e direcionado diretamente aos PDP-11s usados na implementação da BBN dos IMPs de segunda geração usados na ARPANET.

Também houve uma versão produzida para a BBC Micro em meados da década de 1980, pela Richards Computer Products, empresa fundada por John Richards, irmão de Martin Richards. O BBC Domesday Project fez uso da linguagem. Versões do BCPL para os computadores Amstrad CPC e Amstrad PCW também foram lançadas em 1986 pela casa de software do Reino Unido Arnor Ltd. O MacBCPL foi lançado para o Apple Macintosh em 1985 pela Topexpress Ltd, de Kensington, Inglaterra.

Tanto o design quanto a filosofia do BCPL influenciaram fortemente o B, que por sua vez influenciou o C. Os programadores da época debatiam se um eventual sucessor do C seria chamado de "D", a próxima letra do alfabeto, ou "P", a próxima letra no nome do idioma pai. A linguagem mais aceita como sucessora do C é o C++ (sendo ++ o operador de incremento do C), embora, entretanto, também exista uma linguagem de programação D.

Em 1979, existiam implementações de BCPL para pelo menos 25 arquiteturas; a linguagem gradualmente caiu em desuso quando C se tornou popular em sistemas não-Unix.

Martin Richards mantém uma versão moderna do BCPL em seu site, atualizada pela última vez em 2018. Isso pode ser configurado para rodar em vários sistemas, incluindo Linux, FreeBSD e Mac OS X. A distribuição mais recente inclui gráficos e bibliotecas de som, e existe um manual completo. Ele continua a programar nele, inclusive para sua pesquisa sobre o acompanhamento automatizado de partituras musicais.

Um tipo MIME informal comum para BCPL é text/x-bcpl.

Exemplos

Se esses programas forem executados usando Richards' versão atual do Cintsys (dezembro de 2018), LIBHDR, START e WRITEF devem ser alterados para letras minúsculas para evitar erros.

Imprimir fatoriais:

GET "LIBHDR"

DEZEMBRO() = VALOF $(
Para mim, 1 para 5
WRITEF("%N! = %I4*N", I, FACT(I)))
RESULTADOS 0
$)

E FACT(N) = N = 0 -> 1, N * FACT(N - 1)

Conte as soluções para o problema de N rainhas:

GET "LIBHDR"

GLOBAL
COUNT: 200
201
$)

LET TRY (LD, ROW, RD) BE
TEST ROW = TODOS
POLÍTICA DE CONCORRÊNCIA APLICÁVEL ÀS EMPRESAS
ELSE $(
LET POSS = ALL & ~(LD | ROW | RD)
POSSÍVEL DE UNTIL = 0 DO $(
LET P = POSS & - POSS
POSS:= POSS - P
TRY (LD + P > 1)
$)
$)

DEZEMBRO() = VALOF $(
- Sim. 1
Para mim = 1 a 12 fazer $(
Não. 0
TRY(0, 0, 0)
WRITEF("%I2-QUEENS PROBLEM HAS %I5 SOLUTIONS*N", I, COUNT)
TUDO: = 2 * TODOS + 1
$)
RESULTADOS 0
$)

Contenido relacionado

Efeito ELIZA

O efeito ELIZA, na ciência da computação, é a tendência de assumir inconscientemente que os comportamentos do computador são análogos aos...

Detecção e correção de erros

Na teoria da informação e na teoria da codificação com aplicações em ciência da computação e telecomunicações, detecção e correção de erros ou...

Arquivo de computador

Um arquivo de computador é um recurso de computador para gravar dados em um dispositivo de armazenamento de computador, identificado principalmente por seu...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save