맨위로가기

CLU (프로그래밍 언어)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

CLU는 1970년대에 개발된 프로그래밍 언어로, 클러스터, 반복자, 예외 처리, 다중 할당 등의 기능을 제공한다. 클러스터는 객체 지향 프로그래밍의 클래스와 유사하며 추상 데이터 타입을 구현하는 데 사용된다. 반복자는 컬렉션의 객체를 순차적으로 반환하며, 코루틴으로 구현된다. CLU는 예외 처리를 위해 `signal`과 `except`를 사용하며, 다중 할당을 통해 여러 변수에 값을 동시에 할당할 수 있다. 또한, 타입 매개변수화된 사용자 정의 데이터 추상화를 지원한다. CLU는 C++, 자바, 펄, 루아, 파이썬, 루비 등 여러 현대 프로그래밍 언어에 영향을 미쳤다.

더 읽어볼만한 페이지

  • 1975년 개발된 프로그래밍 언어 - 스킴 (프로그래밍 언어)
    스킴은 MIT 인공지능 연구소에서 LISP 언어에서 파생된 함수형 프로그래밍 언어로서, 단순한 S-표현식 구문, 렉시컬 스코프, 꼬리 재귀 최적화, 일급 컨티뉴에이션 등의 특징을 가지며, 핵심 기능의 최소화, 교육 및 임베디드 시스템에서의 활용, 다양한 구현체와 확장 라이브러리, 그리고 IEEE 표준 관리를 주요 내용으로 한다.
  • 절차적 프로그래밍 언어 - C (프로그래밍 언어)
    C는 하드웨어 제어와 이식성이 뛰어난 고급 절차적 프로그래밍 언어로서, 다양한 분야에서 사용되며 후속 언어에 영향을 주었고, 성능과 효율성이 높지만 안전성 문제 개선이 필요한 언어이다.
  • 절차적 프로그래밍 언어 -
    펄은 래리 월이 개발한 텍스트 조작에 강점을 가진 다목적 프로그래밍 언어이며, 1987년 펄 1.0이 처음 공개된 이후 여러 버전 업데이트를 거쳐 객체 지향 프로그래밍과 유니코드 지원 기능을 추가했고, 현재 펄 5가 널리 사용되며 CPAN을 통해 방대한 모듈 생태계를 제공한다.
  • 공식 웹사이트에 알 수 없는 변수를 사용한 문서 - 브루클린 미술관
    브루클린 미술관은 1823년 브루클린 견습생 도서관으로 시작하여 현재 약 50만 점의 소장품을 보유한 뉴욕 브루클린 소재의 미술관으로, 다양한 분야의 예술 작품을 전시하며 특히 아프리카 미술과 여성주의 미술에 대한 기여가 크다.
  • 공식 웹사이트에 알 수 없는 변수를 사용한 문서 - 광주지방기상청
    광주지방기상청은 광주광역시와 전라남도 지역의 기상 예보, 특보, 관측, 기후 정보 제공 등의 업무를 수행하는 기상청 소속 기관으로, 1949년 광주측후소로 설치되어 1992년 광주지방기상청으로 개편되었으며, 기획운영과, 예보과, 관측과, 기후서비스과와 전주기상지청, 목포기상대를 두고 있다.
CLU (프로그래밍 언어) - [IT 관련 정보]에 관한 문서
기본 정보
CLU 프로그래밍 언어 로고
CLU 로고
패러다임멀티 패러다임 프로그래밍: 객체 지향 프로그래밍, 절차적 프로그래밍
발표 연도1975년
설계자바버라 리스코프 및 제자들
개발자매사추세츠 공과대학교
최신 릴리스 버전Native CLU 1.5 (SPARC, VAX) / 1989년 5월 26일
타이핑강한 타이핑
웹사이트CLU 공식 웹사이트
구현체PDP-10 CLU, Native CLU, Portable CLU, clu2c
영향을 준 언어ALGOL 60, Lisp, Simula, Alphard
영향을 받은 언어Ada, Argus, C++, Lua, Python, Ruby, Sather, Swift

2. 주요 특징

CLU는 현대 프로그래밍 언어에 많은 영향을 준 선구적인 언어이다. 주요 특징은 다음과 같다.


  • 추상 데이터 타입: CLU는 추상 데이터 타입(Abstract Data Type, ADT)을 지원하여 데이터와 연산을 묶어 하나의 단위로 취급할 수 있게 했다.
  • 클러스터: 객체 지향 프로그래밍의 클래스와 유사한 개념인 '클러스터'를 통해 추상 데이터 타입을 구현했다.
  • 반복자: 컬렉션 내의 객체들을 순차적으로 반환하는 '반복자'를 제공하여 데이터 종류에 관계없이 동일한 API를 사용할 수 있게 했다.
  • 예외 처리: `signal`과 `except`를 사용하여 예외 처리 기능을 포함했다.
  • 다중 할당: 여러 변수에 동시에 값을 할당하는 병렬 할당(다중 할당) 기능을 지원했다. 예를 들어, `x,y := y,x`와 같이 사용하여 `x`와 `y`의 값을 쉽게 교환할 수 있다.
  • 기타 특징:
  • 범용 타입 `any`를 제공하고, `force[]` 프로시저를 통해 객체의 타입을 확인할 수 있다.
  • 모든 객체는 힙(heap)에 있으며, 메모리 관리는 자동으로 이루어진다.
  • 타입 매개변수화된 사용자 정의 데이터 추상화를 지원하며, `where` 절을 사용하여 타입 안전성을 보장한다.


이러한 기능들은 C#, 루비, 파이썬 등 후대의 여러 프로그래밍 언어에 영향을 미쳤다.[10][11]

2. 1. 클러스터 (Clusters)

CLU의 핵심 기능은 ''클러스터''로, 객체 지향 프로그래밍의 클래스와 유사하다. 클러스터는 데이터와 해당 데이터에 대한 연산(메서드)을 묶어 하나의 단위로 취급하는 추상 데이터 타입(Abstract Data Type, ADT)을 구현하는 데 사용된다.[10]

다음은 복소수를 구현하는 클러스터의 예시이다.

```text

complex_number = cluster is add, subtract, multiply, ...

rep = record [ real_part: real, imag_part: real ]

add = proc ... end add;

subtract = proc ... end subtract;

multiply = proc ... end multiply;

...

end complex_number;

```

클러스터는 "is" 절에 명시적으로 이름이 지정된 구성 요소(예: `add`, `subtract`, `multiply`)를 제외한 모든 구성 요소를 캡슐화한다. 이는 최근 객체 지향 언어의 클래스에서 공용 구성 요소에 해당한다. 클러스터는 클러스터 외부에서 이름을 지정할 수 있는 타입(위 예시에서는 `complex_number`)을 정의하지만, 내부 표현 타입(`rep`)은 외부로부터 숨겨진다.[10]

클러스터 이름은 전역적이며, 클러스터를 그룹화하거나 다른 클러스터 내부에서 "지역적으로" 생성할 수 있는 네임스페이스 메커니즘은 제공되지 않았다.[10]

CLU는 명시적 타입 변환인 `up`과 `down`을 사용하여 추상 타입과 표현 타입 사이를 변경한다. 특수 타입 `cvt`는 이러한 타입 간의 암시적 변환을 나타내는 데 사용된다. CLU는 다른 암시적 타입 변환은 수행하지 않는다. 범용 타입 `any`가 있으며, `force[]` 프로시저를 통해 객체가 특정 타입인지 확인할 수 있다. 객체는 변경 가능하거나 변경 불가능할 수 있으며, 정수, 부울, 문자 및 문자열과 같은 ''기본 타입''은 변경 불가능하다.[10]

2. 2. 반복자 (Iterators)

CLU의 형식 시스템에서 주목할 만한 특징은 ''반복자''로, 컬렉션 내의 객체들을 순차적으로 하나씩 반환한다.[10] 반복자는 사용되는 데이터 종류에 관계없이 동일한 API를 제공한다. 예를 들어, `복소수` 컬렉션의 반복자는 `정수` 배열의 반복자와 서로 바꿔 사용할 수 있다. CLU 반복자는 코루틴으로 구현되며, 각 값은 `yield` 문을 통해 호출자에게 전달된다. 이러한 반복자는 C#, 루비, 파이썬 등 많은 최신 언어에서 흔히 볼 수 있는 기능이 되었으며, 최근에는 제너레이터라고도 불린다.

2. 3. 예외 처리 (Exception Handling)

CLU는 `signal`을 사용하여 예외를 발생시키고 `except`로 처리하는 예외 처리 기능을 포함한다.[10] 다른 대부분의 언어와 달리, 예외는 호출 체인을 통해 암시적으로 다시 발생하지 않는다. CLU에서 예외는 일반적인 실행 흐름의 일부로 간주되며, 루프를 벗어나거나 함수에서 반환하는 안전하고 효율적인 방법으로 간주된다. 이를 통해 "제외하고" 다른 조건이 적용될 때 반환 값을 직접 할당할 수 있다. 명시적으로 잡히거나 다시 시그널되지 않은 예외는 프로그램을 즉시 종료하는 특수한 "실패" 예외로 변환된다.[10]

2. 4. 다중 할당 (Multiple Assignment)

CLU의 특징은 병렬 할당(다중 할당)으로, 할당 연산자 왼쪽에 여러 변수를 나타낼 수 있다는 점이다. 예를 들어 `x,y := y,x`라고 작성하면 `x`와 `y`의 값이 교환된다.[11] 함수는 `x,y,z := f(t)`와 같이 여러 값을 반환할 수 있다.[11] 병렬 할당(다중 반환 값 제외)은 CLU 이전에 CPL (1963)에 '동시 할당'이라는 이름으로 나타났지만,[11] CLU가 이를 대중화하여 이후 언어의 병렬 할당에 직접적인 영향을 미친 것으로 인정받는다.[11]

2. 5. 기타 특징

CLU는 범용 타입 `any`를 제공하며, `force[]` 프로시저를 사용하여 객체의 타입을 확인할 수 있다. 객체는 변경 가능(mutable)하거나 변경 불가능(immutable)할 수 있는데, 정수 등의 기본 타입은 변경 불가능하다. 모든 객체는 힙(heap)에 있으며, 메모리 관리는 자동으로 이루어진다.[10]

CLU는 타입 매개변수화된 사용자 정의 데이터 추상화를 지원한다. `where` 절을 사용하여 실제 타입 인수에 대한 제약 조건을 표현함으로써 타입 안전성을 보장한다.

3. 다른 프로그래밍 언어에 미친 영향

CLU는 여러 현대 프로그래밍 언어에 큰 영향을 미쳤다.


  • C++ 템플릿은 CLU와 에이다에서 영감을 받았다.[5]
  • 자바와 C++의 예외 처리는 CLU의 영향을 받았다.[5]
  • 파이썬과 C#의 반복자는 CLU에서 처음 등장했다.[8]
  • 펄과 루아는 CLU의 함수 호출의 다중 할당 및 다중 반환을 가져왔다.[12]
  • 파이썬과 루비는 공유 호출, ''yield'' 문,[13] 및 다중 할당을 차용했다.[14]


CLU의 이터레이터는 집합으로부터 객체를 순차적으로 꺼내는 것으로, API를 제공하여 집합 내 객체의 종류와 상관없이 동일한 방식으로 작동한다. 이터레이터는 최근의 언어에서는 일반적인 기능이 되었다.

CLU는 `signal`을 사용하여 예외를 발생시키고, `except`로 처리하는 예외 처리 기능을 갖추고 있다.

CLU의 다중 할당 기능은 할당 기호 왼쪽에 여러 변수를 쓸 수 있게 하여, x,y = y,x와 같이 변수 값을 쉽게 바꿀 수 있다. 함수는 여러 값을 반환할 수 있으며, x,y,z = f(t)와 같이 표기한다.

참조

[1] 웹사이트 CLU home page http://pmg.csail.mit[...] Massachusetts Institute of Technology 2009-11-06
[2] 웹사이트 Index of /pub/pclu ftp://ftp.lcs.mit.ed[...] Massachusetts Institute of Technology 2009-11-06
[3] 웹사이트 CLU files, 1976–1989 https://github.com/M[...] Department of Distinctive Collections, Massachusetts Institute of Technology
[4] 웹사이트 clu2c http://woodsheep.jp/[...] woodsheep.jp
[5] 서적 A History of C++: 1979--1991 https://doi.org/10.1[...] Association for Computing Machinery 2022-03-25
[6] 웹사이트 Call By Object http://effbot.org/zo[...] 2017-11-21
[7] 웹사이트 Chris Lattner's Homepage http://nondot.org/sa[...] Chris Lattner 2014-06-03
[8] 간행물 A history of CLU 1992
[9] conference Proceedings of the ACM SIGPLAN symposium on Very high level languages
[10] journal Abstraction mechanisms in CLU 1977-08
[11] journal The main features of CPL 1963
[12] conference Proceedings of the third ACM SIGPLAN conference on History of programming languages – HOPL III
[13] 웹사이트 Ruby's Roots and Matz's Leadership https://engineering.[...] 2019-11-08
[14] 웹사이트 Functional Programming HOWTO — Python 3.8.3 documentation https://docs.python.[...] 2020-05-25
[15] 웹인용 CLU home page http://pmg.csail.mit[...] Massachusetts Institute of Technology 2009-11-06
[16] 웹인용 Index of /pub/pclu ftp://ftp.lcs.mit.ed[...] Massachusetts Institute of Technology 2009-11-06
[17] 웹인용 CLU files, 1976–1989 https://github.com/M[...] Department of Distinctive Collections, Massachusetts Institute of Technology
[18] 웹인용 clu2c http://woodsheep.jp/[...] woodsheep.jp
[19] 서적 A History of C++: 1979--1991 https://doi.org/10.1[...] Association for Computing Machinery 2022-03-25
[20] 웹인용 Call By Object http://effbot.org/zo[...] 2017-11-21
[21] 웹인용 Chris Lattner's Homepage http://nondot.org/sa[...] Chris Lattner 2014-06-03
[22] 간행물 A history of CLU 1992



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com