ALGOL 68과 C++의 비교
Comparison of ALGOL 68 and C++![]() |
비교 프로그래밍 언어 |
---|
|
C++에는 다음이 없습니다.
- PROC – 퍼스트 클래스 중첩 함수(클래스 유형의 로컬 정의에 의한 에뮬레이션(이후 함수가 될 수 있음, 새로운 C++11에도 람다 함수가 있음))
- OP 및 PRIO – 정의 가능한 연산자 기호 및 우선순위,
- 가비지 컬렉션(스마트 포인터의 도움을 받아 에뮬레이트 가능),
- 정의하기 전에 사용,
- 복잡한 포맷 선언을 사용하여 포맷된 트랜스포트,
- := – 할당 작업 기호(등호와의 혼동을 방지하기 위해),
- 어레이(및 슬라이스 조작은 레이어드 라이브러리),
- 자동 유니온,
- 대/소문자 표현,
- 로컬 이외의 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;
|
두 포인터가 참조하는 값 비교 | ref int x, y; if x = y then ... fi | int* x; int* 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: | 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에 값 할당union
variable은 자동이고, 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의 경우 새로운 유형 이름만 등호 왼쪽에 표시되며, 가장 주목할 만한 것은 우선순위에 관계없이 구조가 왼쪽에서 오른쪽으로 작성되고 읽을 수 있다는 것입니다.
외부 링크
- PASCAL과 ALGOL 68의 비교 - Andrew S. 타넨바움 - 1977년 6월
- 직교 언어 설계 - 2004년 4월 - 2007년 5월 10일 취득
- 매달린 기타 문제 해결 방법 - 2004년 4월 - 2007년 5월 10일 검색
- Pascal, C, C++ 및 Algol68 비교: 유형, cont Type 시스템, 유형 검사, 유형 안전, 유형 변환, 원시 유형, 집약 유형: 어레이 - 2004년 4월 - 2007년 5월 10일 검색
- Algol68 어레이 - 2004년4월 - 2007년5월 10일 취득
- ALGOL 68과 BLISS의 어레이 비교 - Michael Walker - 2000년 2월 21일 - 2015년 12월 21일 검색