Porovnání ALGOL 68 a C ++ - Comparison of ALGOL 68 and C++
![]() | Tento článek obsahuje a seznam doporučení, související čtení nebo externí odkazy, ale jeho zdroje zůstávají nejasné, protože mu chybí vložené citace.červen 2013) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
C ++ nemá:
- PROC - první třída vnořené funkce (emulace kvůli místním definicím typů tříd, které by pak mohly být funktory, také nové C ++ 11 má funkce lambda ),
- OP a PRIO - definovatelné symboly operátora a priority,
- sběr odpadků (lze emulovat pomocí inteligentní ukazatele ),
- použít před definováním,
- formátovaný transput pomocí složitých formátovacích deklarací,
- := - symbol operace přiřazení (aby nedošlo k záměně se znaménkem rovná se),
- pole (a operace řezu na nich, ale ve vrstvených knihovnách),
- automatický UNIE,
- Výrazy CASE,
- nelokální JÍT DO
- intuitivní syntaxe deklarace vzhledem k jejímu původu z C.
ALGOL 68 nemá:
- ochrana přístupu členů veřejné / soukromé struktury,
- přetížené postupy (na rozdíl od operátorů),
- explicitní uvolnění paměti,
- předat deklarace (použití před povolením definice)
- textový předzpracování (např. makra),
- odlišné typy odkazů a ukazatelů,
- komentář řádky (pouze hranaté komentáře),
- strukturní dědičnost, členské funkce struktur, virtuální funkce.
- destruktory, výjimky, šablony, jmenné prostory, ukončení strukturované smyčky
Porovnání operátorů přiřazení a rovnosti
Úmysl | ALGOL 68 | C ++ |
---|---|---|
Definujte konstantu | int x = 888; | konst int X = 888; |
Inicializujte proměnnou | int x: = 888; | int X = 888; |
Přiřaďte proměnné hodnotu 888 X | x: = 888; | X = 888; |
Porovnejte dvě hodnoty | -li x = 888 pak ... fi | -li (X == 888) { ... } |
Přidělte proměnnou z halda | ref int x = halda int; nebo jednoduše: halda int X; | int* X = Nový int; |
Porovnejte adresu dvou ukazatelů | ref int x, y; | int* X; int* y;
|
Porovnejte hodnotu, na kterou odkazují dva ukazatele | ref int x, y; -li x = y pak ... fi | int* X; int* y;
|
Pojmenujte nový typ | režimu longreal = dlouho nemovitý; | typedef dvojnásobek longreal; nebo (od C ++ 11): použitím longreal = dvojnásobek; |
Pojmenujte nový typ záznamu | režimu cust = struktur(tětiva jméno, adresa); | struktur cust { std::tětiva název, adresa; }; |
Pojmenujte nový typ spojení | režimu taggedu = svaz(tětiva s, nemovitý r); | svaz u { std::tětiva s; plovák F; }; |
Pojmenujte proceduru nebo funkci | proc f = (nemovitý X) nemovitý: (kód; výsledek); | plovák F(plovák X) { kód; vrátit se výsledek; } |
Výchozí parametry postupu | proc p = (svaz (nemovitý, prázdnota) v x)prázdnota:
| prázdnota p(plovák X=888) { kód; } |
Pojmenujte nového operátora | op ↑ = (nemovitý x, y) nemovitý: x ** y; | N / A |
Nastavit prioritu na nového operátora | prio ↑ = 9; | N / A |
Přiřazení řetězcových proměnných | a: = b: = c: = d; | A = b = C = d; |
Provozovatel posunutí - ALGOL 68C pouze | a: =: = b: =: = c: =: = d; | A = b; b = C; C = d; |
Připojte k proměnné řetězec „substr“ str | str +: = "substr"; | str += "substr"; |
Předponu „substr“ před proměnnou str | "substr" + =: str; | str = "substr" + str; |
Příklady kódu
Prohlášení Unie a použití
Přiřazení hodnot do A68 svaz
proměnná je automatická, typ je „označen“ proměnnou, ale vytažení hodnoty zpět je syntakticky nevhodné jako doložka o shodě je požadováno.
Příklad ALGOL 68:
svaz(int, char) x: = 666; printf (($ 3d l $, (x | (int i): i)))
Příklad C / C ++:
svaz { int i; char C; } X = { 666 }; std::cout << X.i << std::konec;
Čistým účinkem „typového značení“ je, že silná „poloviční“ typizace Algol68 zasahuje do svaz
.
Deklarace režimu
Nový režim (typ) lze deklarovat pomocí a režimu
prohlášení:
int max = 99;režimu nový typ = [0: 9] [0: max]struktur ( dlouho nemovitý a, b, c, krátký int i, j, k, ref nemovitý r);
To má podobný účinek jako následující kód C ++:
konst int max=99;typedef struktur { dvojnásobek A, b, C; krátký i, j, k; plovák& r;} nový typ[9+1][max+1];
Všimněte si, že pro ALGOL 68 se pouze název nového typu objevuje nalevo od rovnosti a především je konstrukce provedena - a lze ji číst - zleva doprava bez ohledu na priority.
externí odkazy
- Srovnání PASCAL a ALGOL 68 - Andrew S. Tanenbaum - červen 1977.
- Ortogonální jazykový design - duben 2004 - vyvoláno 10. května 2007
- Jak vyřešit visícího jiného? - duben 2004 - vyvoláno 10. května 2007
- Srovnání Pascal, C, C ++ a Algol68: Typy, systém kont Typ, Kontrola typu, Bezpečnost typu, Převod typu, Primitivní typy, Agregované typy: pole - duben 2004 - vyvoláno 10. května 2007
- Pole v Algol68 - duben 2004 - vyvoláno 10. května 2007
- Srovnání polí v ALGOL 68 a BLISS - Michael Walker - 21. února 2000 - vyvoláno 21. prosince 2015