ABC (프로그래밍 언어)
1. 개요
ABC는 1980년대 초에 개발된 프로그래밍 언어이다. 파스칼이나 C 언어 프로그램보다 간결하고 가독성이 높도록 설계되었으며, 5개의 기본 자료형, 변수 선언 불필요, 하향식 프로그래밍 지원, 들여쓰기를 통한 코드 블록 구분, 무한 정밀 연산 및 자료 구조 등의 특징을 가진다. ABC는 인터프리터-컴파일러 환경을 제공하며, 유닉스, DOS, 아타리, macOS 등 다양한 운영 체제에서 사용할 수 있다. ABC는 파이썬 설계에 큰 영향을 미쳤다.
| 이름 | ABC |
|---|---|
| 종류 | 프로그래밍 언어 |
| 패러다임 | 다중 패러다임 프로그래밍: 명령형 프로그래밍, 절차적 프로그래밍, 구조적 프로그래밍 |
| 설계자 | 레오 Geurts, Lambert Meertens, Steven Pemberton |
| 개발자 | CWI |
| 최초 출시일 | 1987년 1월 |
| 최신 버전 출시일 | 1990년 |
| 타이핑 | 강한, 다형적 |
| 구현체 | 해당 사항 없음 |
| 운영 체제 | 유닉스 계열, 윈도우, macOS, 아타리 TOS |
| 방언 | 해당 사항 없음 |
| 영향을 받은 언어 | SETL, ALGOL 68 |
| 영향을 준 언어 | 파이썬 |
-
교육용 프로그래밍 언어 -
하스켈
하스켈은 해스켈 커리의 이름을 딴 순수 함수형 프로그래밍 언어로, 여러 함수형 언어 통합 노력의 결과로 탄생하여 느긋한 계산법, 패턴 매칭, 타입 클래스, 모나드 등의 특징을 가지며 GHC가 표준 구현체로 사용된다. -
교육용 프로그래밍 언어 -
파이썬
파이썬은 귀도 반 로섬이 개발한 객체 지향적 프로그래밍 언어이며, 간결한 문법과 다양한 라이브러리를 통해 웹 개발, 과학 계산, 인공지능 등 다양한 분야에서 활용된다. -
절차적 프로그래밍 언어 -
C (프로그래밍 언어)
C는 하드웨어 제어와 이식성이 뛰어난 고급 절차적 프로그래밍 언어로서, 다양한 분야에서 사용되며 후속 언어에 영향을 주었고, 성능과 효율성이 높지만 안전성 문제 개선이 필요한 언어이다. -
절차적 프로그래밍 언어 -
펄
펄은 래리 월이 개발한 텍스트 조작에 강점을 가진 다목적 프로그래밍 언어이며, 1987년 펄 1.0이 처음 공개된 이후 여러 버전 업데이트를 거쳐 객체 지향 프로그래밍과 유니코드 지원 기능을 추가했고, 현재 펄 5가 널리 사용되며 CPAN을 통해 방대한 모듈 생태계를 제공한다.
2. 특징
ABC 컴퓨터 프로그램은 설계자들이 주장하기를, 일반적으로 파스칼 또는 C 프로그램의 4분의 1 정도 크기이며 더 읽기 쉽다고 한다.
ABC는 다음과 같은 주요 기능을 가지고 있다.
* 다형성 명령 및 함수
* 명령 완성, 지속적인 작업 공간, 별도의 파일 처리가 없는 대화형 환경
ABC는 원래 모놀리식 구현이었기 때문에, 그래픽 사용자 인터페이스(GUI) 생성과 같은 새로운 요구 사항에 적응할 수 없었다. 또한 ABC는 기본 파일 시스템 및 운영 체제에 직접 접근할 수 없었다.
전체 ABC 시스템에는 구조 편집기(구문 지향 편집기), 제안, 정적 변수(영구적) 및 여러 작업 공간이 있는 프로그래밍 환경이 포함되어 있으며, 인터프리터–컴파일러로 사용할 수 있다. 2020년 기준으로 최신 버전은 1.05.02이며, 유닉스, DOS, 아타리, macOS로 이식되었다.
2.1. 간결성 및 가독성
ABC는 파스칼이나 C 프로그램보다 훨씬 간결하고 가독성이 높다. 설계자들에 따르면, ABC 코드는 일반적으로 동일한 기능을 하는 파스칼 또는 C 프로그램의 약 1/4 크기이다.
2.2. 단순한 자료형
ABC는 단 5개의 기본 자료형만을 제공한다. 변수 선언은 필요하지 않다. 자료형에는 제한이 거의 없어 임의 정밀도 정수뿐만 아니라 무한 길이의 리스트나 무한 길이의 문자열도 사용할 수 있어 초보자도 다루기 쉽다.
2.3. 변수 선언 불필요
ABC 컴퓨터 프로그램은 변수 선언이 필요 없어 프로그래밍 과정을 간소화하고 초보자가 더 쉽게 접근할 수 있도록 한다. 5가지의 자료형을 지원하며, 하향식 프로그래밍을 명확하게 지원한다. 블록의 계층(중첩)은 들여쓰기로 표시된다. 초보자도 다루기 쉽도록 자료형의 제한이 적어, 임의 정밀도 정수뿐만 아니라 무한 길이의 리스트나 무한 길이의 문자열도 사용할 수 있다.
2.6. 무한 정밀 연산 및 자료 구조
ABC는 무한 정밀 산술(Arbitrary-precision arithmetic)을 지원하여 매우 큰 정수도 정확하게 계산할 수 있다. 예를 들어, 2의 1000제곱과 같이 매우 큰 수도 쉽게 계산할 수 있다.
```
>>> WRITE 2**1000
107150860718626732094842504906000181056140481170553360744375038837
035105112493612249319837881569585812759467291755314682518714528569
231404359845775746985748039345677748242309854210746050623711418779
541821530464749835819412673987675591655439460770629145711964776865
42167660429831652624386837205668069376
```
ABC는 무제한 크기의 리스트와 문자열을 지원하여, 사용자가 데이터 크기에 대한 제약 없이 프로그래밍할 수 있도록 돕는다.
2.7. 기타 특징
ABC 컴퓨터 프로그램은 파스칼 또는 C 프로그램보다 보통 4분의 1 정도 크기이며, 설계자들은 더 읽기 쉽다고 주장한다. 주요 기능은 다음과 같다.
* 단 5개의 기본 자료형
* 변수 선언 불필요
* 하향식 프로그래밍에 대한 명시적 지원
* 문장 중첩은 들여쓰기를 통한 오프사이드 규칙으로 표시
* 무한 정밀 산술, 무제한 크기의 리스트 및 문자열, 초보자의 사용 편의성과 직교성을 지원하는 기타 기능
* 다형성 명령 및 함수
* 명령 완성, 지속적인 작업 공간, 별도의 파일 처리가 없는 대화형 환경
ABC는 원래 모놀리식 구현이었기 때문에, 그래픽 사용자 인터페이스(GUI) 생성과 같은 새로운 요구 사항에 적응할 수 없었다. 또한 ABC는 기본 파일 시스템 및 운영 체제에 직접 접근할 수 없었다.
전체 ABC 시스템에는 구조 편집기(구문 지향 편집기), 제안, 정적 변수(영구적) 및 여러 작업 공간이 있는 프로그래밍 환경이 포함되어 있으며, 인터프리터–컴파일러로 사용할 수 있다. 2020년 기준으로 최신 버전은 1.05.02이며, 유닉스, DOS, 아타리, macOS로 이식되었다.
2.8. 한계
ABC는 원래 모놀리식 구현이었기 때문에, 그래픽 사용자 인터페이스(GUI) 생성과 같은 새로운 요구 사항에 적응할 수 없었다. ABC는 기본 파일 시스템 및 운영 체제에 직접 접근할 수 없었다.
3. 구현
ABC는 여러 차례 개선을 거쳐 개발되었으며, 현재(2020년 기준) 최신 버전은 1.05.02이다. 유닉스 계열 시스템, MS-DOS/윈도우, 매킨토시 등 다양한 플랫폼에서 사용할 수 있다. 1980년대 후반과 1990년대 초반에는 유즈넷을 통해 소스 코드가 제공되었다. 원래 ABC는 모놀리식 구현이었기 때문에, 그래픽 사용자 인터페이스 생성과 같은 새로운 요구에 대응하기 어려웠고, 운영 체제나 파일 시스템에 직접 접근할 수 없었다.
3.1. 프로그래밍 환경
ABC는 전용 프로그래밍 환경을 제공하며, 다음 기능을 포함하고 있다.
* 구조 편집기 (구문 지향 편집기)
* 제안
* 정적 변수 (영구적)
* 여러 작업 공간
ABC는 인터프리터–컴파일러로 사용할 수 있다. 최신 버전은 1.05.02이며 유닉스, DOS, 아타리, 그리고 애플 macOS로 이식되었다.
4. 프로그램 예
ABC는 무한정밀도 연산을 지원한다. 다음은 2의 1000제곱을 계산하는 예시이다.
```
>>> WRITE 2**1000
107150860718626732094842504906000181056140481170553360744375038837
035105112493612249319837881569585812759467291755314682518714528569
231404359845775746985748039345677748242309854210746050623711418779
541821530464749835819412673987675591655439460770629145711964776865
42167660429831652624386837205668069376
```
다음은 문서 내 모든 단어를 중복 없이 추출하는 `words` 함수의 예시이다.
```
HOW TO RETURN words document:
PUT {} IN collection
FOR line IN document:
FOR word IN split line:
IF word not.in collection:
INSERT word IN collection
RETURN collection
```
위 코드는 다음과 같이 작동한다.
1. 빈 집합 `collection`을 만든다.
2. 문서의 각 줄(`line`)을 순회한다.
3. 각 줄을 단어(`word`)로 분리하고, 각 단어를 순회한다.
4. 만약 해당 단어가 `collection`에 없다면, `collection`에 단어를 추가한다.
5. 최종적으로 `collection`을 반환한다.
5. 파이썬에 미친 영향
ABC는 파이썬 설계에 큰 영향을 주었다. 파이썬을 개발한 귀도 반 로섬은 1980년대 초 ABC 시스템 개발에 수년간 참여했다.