Comparação de ALGOL 68 e C ++ - Comparison of ALGOL 68 and C++
C ++ não tem:
- PROC - funções aninhadas de primeira classe (emulação devido a definições locais de tipos de classe, que então poderiam ser functores , também o novo C ++ 11 tem funções lambda ),
- OP e PRIO - símbolos e prioridades definíveis do operador,
- coleta de lixo (pode ser emulada com a ajuda de ponteiros inteligentes ),
- use antes de definir ,
- transput formatado usando declarações de formatação complexas,
- : = - símbolo de operação de atribuição (para evitar confusão com o sinal de igual),
- array (e operações de slice neles, mas em bibliotecas em camadas),
- UNIONs automáticos ,
- Expressões CASE ,
- GOTO não local
- sintaxe de declaração intuitiva devido à sua origem C .
ALGOL 68 não tem:
- proteção de acesso de membro de estrutura pública / privada,
- procedimentos sobrecarregados (em contraste com os operadores),
- desalocação de memória explícita,
- declarações de encaminhamento (uso antes da definição ser permitida)
- pré-processamento textual (por exemplo, macros),
- referência distinta e tipos de ponteiro,
- linhas de comentários (apenas comentários entre colchetes),
- herança de estrutura, funções de membro de estrutura, funções virtuais .
- destruidores, exceções, modelos, namespaces, saídas de loop estruturado
Comparação dos operadores de atribuição e igualdade
Intenção | ALGOL 68 | C ++ |
---|---|---|
Defina uma constante | int x=888; |
const int x = 888;
|
Inicializar uma variável | int x:=888; |
int x = 888;
|
Atribuir um valor 888 a uma variável x | x:=888; |
x = 888;
|
Compare dois valores | if x = 888 then ... fi |
if (x == 888) { ... }
|
Alocar uma variável do heap |
ref int x = heap int; ou simplesmente: heap int x;
|
int* x = new int;
|
Compare o endereço de dois ponteiros | ref int x, y; |
int* x; int* y;
|
Compare o valor referenciado por dois ponteiros |
ref int x, y; if x = y then ... fi
|
int* x; int* y;
|
Nomeie um novo tipo | mode longreal = long real; |
typedef double longreal; ou (a partir de C ++ 11): using longreal = double;
|
Nomeie um novo tipo de registro | mode cust = struct(string name, address); |
struct cust { std::string name, address; };
|
Nomeie um novo tipo de sindicato | mode taggedu = union(string s, real r); |
union u { std::string s; float f; };
|
Nomeie um procedimento ou função | proc f = (real x) real: ( code; result ); |
float f(float x) { code; return result; }
|
Parâmetros padrão do procedimento |
proc p = (union (real, void) in x)void:
|
void p(float x=888) { code; }
|
Nomeie um novo operador | op ↑ = ( real x, y) real : x ** y; | N / D |
Definir a prioridade de uma nova operadora | prio ↑ = 9; | N / D |
Atribuição de variáveis de cadeia | a:=b:=c:=d; |
a = b = c = d;
|
Operador de deslocamento - ALGOL 68C apenas | a:=:=b:=:=c:=:=d; |
a = b; b = c; c = d;
|
Anexar "substr" a uma variável str | str +:= "substr"; |
str += "substr";
|
Prefixo "substr" para uma variável str | "substr" +=: str; |
str = "substr" + str;
|
Exemplos de código
Declaração de união e uso
A atribuição de valores a uma union
variável A68 é automática, o tipo é "marcado" para a variável, mas extrair o valor de volta é sintaticamente estranho, pois uma cláusula de conformidade é necessária.
Exemplo ALGOL 68:
union(int, char) x:=666; printf(($3d l$, (x|(int i):i) ))
Exemplo C / C ++:
union { int i; char c; } x = { 666 };
std::cout << x.i << std::endl;
O efeito líquido da "marcação de tipo" é que a "metade" de tipagem forte do Algol68 invade o union
.
Declaração de modo
Um novo modo (tipo) pode ser declarado usando uma mode
declaração:
int max=99; mode newtype = [0:9][0:max]struct ( long real a, b, c, short int i, j, k, ref real r );
Isso tem o efeito semelhante ao seguinte código C ++:
const int max=99;
typedef struct {
double a, b, c; short i, j, k; float& r;
} newtype[9+1][max+1];
Observe que para ALGOL 68 apenas o nome do novo tipo aparece à esquerda da igualdade e, mais notavelmente, a construção é feita - e pode ser lida - da esquerda para a direita, independentemente das prioridades.
links externos
- Uma comparação de PASCAL e ALGOL 68 - Andrew S. Tanenbaum - junho de 1977.
- Projeto de linguagem ortogonal - abril de 2004 - recuperado em 10 de maio de 2007
- Como resolver o Dangling Else? - abril de 2004 - recuperado em 10 de maio de 2007
- Uma comparação de Pascal, C, C ++ e Algol68: Tipos, sistema de tipo cont, verificação de tipo, segurança de tipo, conversão de tipo, tipos primitivos, tipos agregados: matrizes - abril de 2004 - recuperado em 10 de maio de 2007
- Matrizes em Algol68 - abril de 2004 - recuperado em 10 de maio de 2007
- Uma comparação de matrizes em ALGOL 68 e BLISS - Michael Walker - 21 de fevereiro de 2000 - recuperado em 21 de dezembro de 2015