ALGOL 68과 C++의 비교

Comparison of ALGOL 68 and C++

C++에는 다음이 없습니다.

  • PROC – 퍼스트 클래스 중첩 함수(클래스 유형의 로컬 정의에 의한 에뮬레이션(이후 함수가 될 수 있음, 새로운 C++11에도 람다 함수가 있음))
  • OPPRIO – 정의 가능한 연산자 기호 및 우선순위,
  • 가비지 컬렉션(스마트 포인터의 도움을 받아 에뮬레이트 가능),
  • 정의하기 전에 사용,
  • 복잡한 포맷 선언을 사용하여 포맷된 트랜스포트,
  • := – 할당 작업 기호(등호와의 혼동을 방지하기 위해),
  • 어레이(및 슬라이스 조작은 레이어드 라이브러리),
  • 자동 유니온,
  • 대/소문자 표현,
  • 로컬 이외의 GOTO
  • 직감적인 선언 구문은 C에서 유래하기 때문입니다.

ALGOL 68에는 다음이 없습니다.

  • 공공/사설 구조물 부재 접근 보호,
  • 과부하 절차(연산자와 대조적으로),
  • 명시적 메모리 할당 해제,
  • 전달 선언(정의가 허용되기 전에 사용)
  • 텍스트 전처리(예: 매크로),
  • 개별 참조 및 포인터 유형,
  • 주석 행(괄호로 묶은 주석만),
  • 구조 상속, 구조 부재 함수, 가상 함수.
  • 소멸자, 예외, 템플릿, 네임스페이스, 구조화 루프 종료

할당 연산자와 동등 연산자의 비교

의도 알골 68 C++
상수를 정의하다 int x=888; const int x = 888;
변수 초기화 int x:=888; int x = 888;
변수 x에 값 888을 할당합니다. x:=888; x = 888;
두 값 비교 if x = 888 then ... fi if (x == 888) { ... }
에서 변수 할당 ref int x = heap int;
또는 단순하게:
heap int x;
int* x = new int;
두 포인터의 주소 비교 ref int x, y;
if x :=: y then ... fi
int* x; int* y;

if (x == y) { ... }

두 포인터가 참조하는 값 비교 ref int x, y;
if x = y then ... fi
int* x; int* y;

if (*x == *y) { ... }

새 유형 이름 지정 mode longreal = long real; typedef double longreal;
또는 (C++11의 경우):
using longreal = double;
새 레코드 유형 이름 지정 mode cust = struct(string name, address); struct cust { std::string name, address; };
새 결합 유형 이름 지정 mode taggedu = union(string s, real r); union u { std::string s; float f; };
절차 또는 기능 이름 지정 proc f = (real x) real: ( code; result ); float f(float x) { code; return result; }
프로시저 디폴더 proc p = (union (real, void) in x)void:

( real x = (in x (real x):x 888); code );

void p(float x=888) { code; }
새 연산자 이름 지정 op ↑ = (real x,y) real: x**y;
새 연산자에 우선 순위 설정 prio ↑ = 9;
체인 변수 할당 a:=b:=c:=d; a = b = c = d;
변위 연산자 - ALGOL 68C만 해당 a:=:=b:=:=c:=:=d; a = b; b = c; c = d;
변수 스트링에 "substr" 추가 str +:= "substr"; str += "substr";
변수 스트링의 접두사 "substr" "substr" +=: str; str = "substr" + str;

코드 예시

유니언 선언 및 사용

A68에 값 할당unionvariable은 자동이고, type은 변수에 대해 "filename"이지만, compliance-filename이 필요하기 때문에 값을 다시 꺼내는 것은 구문적으로 어색합니다.

ALGOL 68의 예:

union(int, char) x:=666; printf($3d l$, (x (int i):i)))

C/C++의 예:

  조합 { 인트 i;  c; } x = { 666 };   표준::외치다 << > x.i << > 표준::; 

"type-tagging"의 순효과는 Algol68의 강력한 타이핑 "half"가 침입하는 것입니다.union.

모드 선언

새로운 모드(유형)는 다음 명령을 사용하여 선언할 수 있습니다.mode선언:

int max=99; mode newtype = [0:9][0:max]files ( 실수 a, b, c, 짧은 int i, j, k, ref 실수 r );

이것은, 다음의 C++ 코드와 같은 효과를 가져옵니다.

컨스턴트 인트 맥스.=99; 유형화된 구조 {      이중으로 하다 a, b, c; 짧다 i, j, k; 흘러가다& r; } 새로운 타입[9+1][맥스.+1]; 

ALGOL 68의 경우 새로운 유형 이름만 등호 왼쪽에 표시되며, 가장 주목할 만한 것은 우선순위에 관계없이 구조가 왼쪽에서 오른쪽으로 작성되고 읽을 수 있다는 것입니다.

외부 링크