CLU(프로그래밍 언어)

CLU (programming language)
클루
패러다임멀티패키지: 객체 지향, 절차
설계자바바라 리스코프와 그 학생들
개발자매사추세츠 공과대학
처음 등장한1975년; 47년 전 (재설정)
안정된 릴리스
네이티브 CLU 1.5 (SPARC, VAX) / 1989년 5월 26일; 33년 전 (1989-05-26)[1]

휴대용 CLU / 2009년 11월 6일, 12년 전(2009년 11월 6일)[2]

타이핑 분야강한.
웹 사이트pmg.csail.mit.edu/CLU.html
주요 구현
PDP-10 CLU,[3] 네이티브 CLU,[1] 휴대용 CLU,[2] clu2c[4]
영향을 받다
ALGOL 60, 리스프, Simula, Alphard
영향받은
Ada, Argus, C++,[5] Lua, Python,[6] Ruby, Sather, Swift[7]

CLU는 1973년부터 [8]Barbara Liskov와 그의 학생들이 Massachusetts Institute of Technology(MIT)에서 개발한 프로그래밍 언어입니다.널리 쓰이지는 않았지만, 현재는 널리 사용되고 있는 많은 기능을 도입하여 객체 지향 프로그래밍(OOP) 개발의 한 단계라고 할 수 있다.

주요 기여에는 추상 데이터 유형,[9] 공유 콜, 반복기, 다중 반환 값(병렬 할당의 일종), 유형 안전 매개 변수화 유형 및 유형 안전 배리언트 유형이 포함됩니다.또한 생성자 및 메서드가 있는 클래스를 사용하지만 상속은 사용하지 않는 것으로도 유명합니다.

클러스터

CLU의 구문은 당시 대부분의 새로운 언어 설계의 출발점이었던 ALGOL을 기반으로 했습니다.주요 추가 사항은 클러스터의 개념, CLU의 유형 확장 시스템 및 언어 이름(CLUster)[10]의 루트입니다.클러스터는 일반적으로 OO 언어의 "클래스" 개념에 해당합니다.예를 들어 복잡한 번호를 구현하는 클러스터의 CLU 구문은 다음과 같습니다.

complex_number = 클러스터는 더하기, 빼기, 곱하기, ... rep = record [ real _ part : real , imagine _ part : real ]add = proc ...end add; 빼기 = proc...뺄셈 끝; 곱하기 = proc...말단 증식;...end complex_number;

클러스터는 "is" 절에 명시적으로 명명된 컴포넌트를 제외한 모든 컴포넌트를 캡슐화하는 모듈입니다.이는 최근 OO 언어로 된 수업의 공용 구성요소에 해당합니다.클러스터는 클러스터 외부에서 이름을 지정할 수 있는 유형(이 경우 "complex_number")도 정의하지만 표현 유형(rep)은 외부 클라이언트에서 숨겨집니다.

클러스터 이름은 글로벌하며 네임스페이스 메커니즘은 클러스터를 그룹화하거나 다른 클러스터 내에서 "로컬"로 생성할 수 없습니다.

클러스터에서 명시적 유형 변환은 추상 유형과 표현 간에 변화합니다. 이러한 유형 간의 암묵적 변환은 특별한 유형 cvt를 사용하여 나타납니다.그렇지 않으면 CLU는 암묵적인 유형 변환을 수행하지 않습니다.유니버설 타입 any 와 오브젝트가 특정 타입인지 확인하기 위한 프로시저포스[]가 있습니다.오브젝트는 가변 또는 불변할 수 있으며, 이 오브젝트는 정수, 부울, 문자 및 [10]문자열과 같은 기본 유형입니다.

기타 기능

CLU 타입 시스템의 또 다른 주요 기능은 반복기입니다.반복기는 컬렉션에서 [10]개체를 차례로 반환합니다.반복기는 사용하는 데이터에 관계없이 동일한 Application Programming Interface(API; 응용 프로그램프로그래밍 인터페이스)를 제공합니다.따라서 수집의 반복자는complex_numbers는 다음과 같은 어레이에 대해 그것과 교환하여 사용할 수 있습니다.integers. CLU 반복기의 특징 중 하나는 각 값이 수율문을 통해 발신자에게 제공되는 코루틴으로 구현된다는 것입니다.CLU와 같은 반복기는 현재 C#, Ruby, Python과 같은 많은 현대 언어에서 공통적으로 사용되고 있지만 최근에는 생성기라고 불립니다.

CLU에는 예외 처리도 포함되어 있습니다.다른 언어의 다양한 시행에 따라 예외가 발생합니다.signal으로 처리했습니다.except예외처리를 하는 대부분의 다른 언어와는 달리 예외는 발신 체인으로 암묵적으로 재서명되지 않습니다.또한 예외 처리를 제공하는 대부분의 다른 언어와는 달리 CLU의 예외는 일반적인 실행 흐름의 일부로 간주되며 루프에서 벗어나거나 함수에서 복귀하는 "정상"적이고 효율적인 유형 안전 방법으로 간주됩니다. 이를 통해 다른 조건이 적용되는 경우를 제외하고 반환 값을 직접 할당할 수 있습니다.검출되거나 명시적으로 재서명되지 않은 예외는 즉시 프로그램을 종료하는 특수한 실패 예외로 변환됩니다.

CLU는 종종 ML 언어 이전에 one ofs라고 불리는 타입 세이프 바리안트 타입을 가진 최초의 언어라고 알려져 있습니다.

CLU의 마지막 고유 기능은 병렬 할당(복수 할당)이며, 할당 연산자의 왼쪽에 여러 변수가 나타날 수 있습니다.예를 들면 글쓰기x,y := y,x가치를 교환하다x그리고.y같은 방법으로 함수는 다음과 같은 여러 값을 반환할 수 있습니다.x,y,z := f(t)병렬 할당(복수의 반환값은 아니지만)은 CPL(1963년)에 나타나 CLU보다 앞서 동시 [11]할당이라는 이름이 붙었지만 CLU는 이를 대중화했고 이후 언어에서 병렬 할당으로 이어지는 직접적인 영향으로 종종 인정된다.

CLU 프로그램의 모든 객체는 힙에 존재하며 메모리 관리는 자동으로 이루어집니다.

CLU는 유형 매개 변수화된 사용자 정의 데이터 추상화를 지원합니다.이는 실제 유형 인수에 대한 제약을 표현하기 위해 where 구를 사용하여 유형 안전 경계 매개 변수화된 유형을 제공하는 최초의 언어였다.템플릿 기반 제네릭스를 사용하는 언어와는 달리 이러한 데이터 추상화의 사용은 추상화 구현에 대한 액세스 없이 유형 검사를 수행할 수 있습니다.

영향을 주다

CLU와 Ada는 C++ [5]템플릿에 큰 영감을 주었습니다.

CLU의 예외 처리 메커니즘은 C++[5] [citation needed]Java와 같은 이후의 언어에 영향을 주었습니다.

Sather, PythonC#에는 CLU에 [8]처음 등장한 반복기가 포함되어 있습니다.

PerlLua는 CLU로부터의 [12]함수 호출로부터 여러 개의 할당과 여러 개의 반환을 받았습니다.

Python과 Ruby는 공유, 수익률 [13]명세서, 여러 개의 [14]할당을 통해 콜을 차용했습니다.

레퍼런스

  1. ^ a b Curtis, Dorothy (2009-11-06). "CLU home page". Programming Methodology Group, Computer Science and Artificial Intelligence Laboratory. Massachusetts Institute of Technology. Retrieved 2016-05-26.
  2. ^ a b Curtis, Dorothy (2009-11-06). "Index of /pub/pclu". Programming Methodology Group, Computer Science and Artificial Intelligence Laboratory. Massachusetts Institute of Technology. Retrieved 2016-05-26.
  3. ^ "CLU files, 1976–1989". Tapes of Tech Square (ToTS) collection, MC-0741. Department of Distinctive Collections, Massachusetts Institute of Technology. swh:1:dir:5dc935d1c236b15a99b0750cf236b2d89ec951d0.
  4. ^ Ushijima, Tetsu. "clu2c". clu2c. woodsheep.jp. Retrieved 2016-05-26.
  5. ^ a b c Stroustrup, Bjarne (1996). A History of C++: 1979--1991. New York, NY, USA: Association for Computing Machinery. p. 699–769. Retrieved 25 March 2022.
  6. ^ Lundh, Fredrik. "Call By Object". effbot.org. Archived from the original on 23 November 2019. Retrieved 21 November 2017. replace "CLU" with "Python", "record" with "instance", and "procedure" with "function or method", and you get a pretty accurate description of Python's object model.
  7. ^ Lattner, Chris (2014-06-03). "Chris Lattner's Homepage". Chris Lattner. Retrieved 2014-06-03. The Swift language is the product of tireless effort from a team of language experts, documentation gurus, compiler optimization ninjas, and an incredibly important internal dogfooding group who provided feedback to help refine and battle-test ideas. Of course, it also greatly benefited from the experiences hard-won by many other languages in the field, drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.
  8. ^ a b 리스코프, 바바라(1992)"CLU의 역사"프로그래밍 언어의 역사에 관한 제2회 ACM SIGPLAN 회의.
  9. ^ Liskov, Barbara; Zilles, Stephen (1974). "Programming with abstract data types". Proceedings of the ACM SIGPLAN symposium on Very high level languages. pp. 50–59. CiteSeerX 10.1.1.136.3043. doi:10.1145/800233.807045.
  10. ^ a b c Liskov, B.; Snyder, A.; Atkinson, R.; Schaffert, C. (August 1977). "Abstraction mechanisms in CLU". Communications of the ACM. 20 (8): 564–576. CiteSeerX 10.1.1.112.656. doi:10.1145/359763.359789. S2CID 17343380.
  11. ^ Barron, D. W.; Buxton, J. N.; Hartley, D. F.; Nixon, E.; Strachey, C. (1963). "The main features of CPL". Computer Journal. 6 (2): 134–143. doi:10.1093/comjnl/6.2.134.
  12. ^ Ierusalimschy, R.; De Figueiredo, L. H.; Celes, W. (2007). "The evolution of Lua" (PDF). Proceedings of the third ACM SIGPLAN conference on History of programming languages – HOPL III. pp. 2-1–2-26. doi:10.1145/1238844.1238846. ISBN 978-1-59593-766-7.
  13. ^ "Ruby's Roots and Matz's Leadership". Appfolio Engineering. 2019-11-08. Retrieved 2019-11-15. Matz feels that blocks are the greatest invention of Ruby (I agree.) He got the idea from a 1970s language called CLU from MIT, which called them 'iterators'...
  14. ^ "Functional Programming HOWTO — Python 3.8.3 documentation". docs.python.org. Retrieved 2020-05-25.

외부 링크