깨끗한(프로그래밍 언어)
Clean (programming language)| 패러다임 | 기능 |
|---|---|
| 설계자 | 소프트웨어 기술 연구 그룹 Radboud 대학 네이메헌의. |
| 처음 등장한 | 1987년;(1987년)35년 전. |
| 안정된 릴리스 | 3.1/1월 5일 2022년, 7개월 전에(2022-01-05). |
| 타이핑 분야 | 정적 동적 강한 |
| OS | 크로스 플랫폼 |
| 면허증. | 간체 BSD[1] |
| 파일 이름 확장명 | .icl, .dcl, .abc |
| 웹 사이트 | clean.cs.ru.nl |
| 영향을 받다 | |
| 린, 미란다, 해스켈 | |
| 영향받은 | |
| 해스켈, Idris[2] | |
클린은 범용 순수하게 기능적인 컴퓨터 프로그래밍 언어이다.그것은 동시 클린 System,[3] 다음 클린 System,[4][5]후, 청소하라고 불렸다.깨끗한 그 Radboud 대학 네이메헌 연구원들의 그룹에 의해 1987년부터 개발되고 있다.[6]
특징들
클린이라는 언어는 [7]1987년에 처음 등장했습니다.비록 언어 자체의 발달이 느려졌지만, 몇몇 연구자들은 여전히 그 [8]언어로 일하고 있다.2018년에는 [9]Clean을 사용하는 분사 회사도 설립되었습니다.
Clean은 참조 투명성, 목록 이해, 가드, 가비지 컬렉션, 상위 함수, 커리링 및 느린 평가 등 동생 언어인 Haskell과 많은 속성 및 구문을 공유합니다.그러나 Clean은 Haskell의 모나드 사용과는 달리 고유한 입력 시스템을 통해 가변 상태와 I/O를 처리합니다.컴파일러는 프로그램 실행 중 어느 시점에서나 고유한 유형의 값에 대한 참조가 하나만 존재할 수 있다는 것을 알기 때문에 고유 유형 시스템을 이용하여 보다 효율적인 코드를 생성합니다.따라서 원하는 값을 [10]변경할 수 있습니다.
Microsoft Windows 용 Integrated Development Environment(IDE; 통합 개발 환경)가 Clean 배포에 포함되어 있습니다.
예
시작 = "안녕, 세상아!" 요인:
팩 :: 내부 -> 내부 팩 0 = 1 팩 n = n * 팩 (n-1) 시작 = 팩 10 | 팩 :: 내부 -> 내부 팩 n = 자극하다 [1..n] // 1~n의 곱 시작 = 팩 10 |
파이브 :: 내부 -> 내부 파이브 0 = 1 파이브 1 = 1 파이브 n = 파이브 (n - 2) + 파이브 (n - 1) 시작 = 파이브 7 | 파이브 :: 내부 내부 -> [내부] 파이브 x_2 x_1 = [x_2:파이브 x_1 (x_2 + x_1)] 파이브 :: 내부 -> 내부 파이브 n = (파이브 1 1) !! n 시작 = 파이브 7 |
Infix 연산자:
(^) 인픽스 8 :: 내부 내부 -> 내부 (^) x 0 = 1 (^) x n = x * x ^ (n-1) 유형 선언은 함수가 priority 8을 갖는 올바른 관련 infix 연산자임을 나타냅니다.이거는 다음과 같습니다.x*x^(n-1)와 동등하다x*(x^(n-1))와는 반대로(x*x)^(n-1)이 연산자는 Clean 표준 라이브러리인 StdEnv에 미리 정의되어 있습니다.
클린 구조
계산은 그래프 재작성 및 축소를 기반으로 합니다.숫자와 같은 상수는 그래프이고 함수는 그래프 다시 쓰기 공식입니다.이것에 네이티브 코드로의 컴파일과 조합하면, 컴퓨터 언어 벤치마크 [11]게임에 의하면, 높은 추상화를 사용하는 Clean 프로그램이 비교적 고속으로 동작합니다.
컴파일 중
- 소스 파일(.icl)과 정의 파일(.dcl)은 Clean에서 Clean의 기본 버전인 Core Clean으로 변환됩니다.
- Core Clean은 Clean 플랫폼에 의존하지 않는 중간 언어(.abc)로 변환되어 Clean 및 Clean에서 구현됩니다.
- 중간 ABC 코드는 C를 사용하여 오브젝트 코드(.o)로 변환됩니다.
- 오브젝트 코드는 모듈 및 런타임시스템 내의 다른 파일과 링크되며 시스템링커(사용 가능한 경우) 또는 Clean on Windows로 작성된 전용 링커를 사용하여 일반 실행 파일로 변환됩니다.
이전 Clean 시스템버전은 완전히 C로 기술되어 부트스트래핑 문제를 회피하고 있습니다.
SAPL 시스템은 Core Clean을 JavaScript로 컴파일하며 ABC 코드를 사용하지 않습니다.
ABC 기계
고도의 기능 언어인 Core Clean과 머신 코드와의 갭을 좁히기 위해 ABC 머신을 사용합니다.이것은 필수 추상 그래프 재작성 [12]기계입니다.추상적인 ABC 코드에서 구체적인 기계 코드를 생성하는 것은 비교적 작은 단계이기 때문에 ABC 머신을 사용함으로써 코드 생성을 위해 여러 아키텍처를 대상으로 하는 것이 훨씬 쉬워집니다.
ABC 머신은 비범한 메모리 모델을 갖추고 있습니다.새로고침 중인 Clean 그래프를 유지하기 위한 그래프 저장소가 있습니다.A(rgument)-stack에는 그래프 스토어의 노드를 참조하는 인수가 저장됩니다.이렇게 하면 노드의 인수를 다시 작성할 수 있으며, 이는 패턴 매칭에 필요합니다.B(asic value)-stack에는 기본값(정수, 문자, 실수 등)이 저장됩니다.반드시 필요한 것은 아니지만(이러한 요소는 모두 그래프 스토어의 노드가 될 수도 있습니다), 별도의 스택을 사용하는 것이 훨씬 효율적입니다.C(ontrol)-stack에는 흐름 제어를 위한 리턴 주소가 저장됩니다.
모든 실행 파일에 링크된 런타임 시스템에는print출력 채널에 노드를 인쇄하는 규칙입니다.프로그램이 실행되면Start노드가 인쇄됩니다.이를 위해서는 전체 노드가 인쇄될 때까지 루트 노멀 형태로 다시 작성해야 하며, 그 후 하위 노멀 형식으로 다시 작성해야 합니다.
플랫폼
Clean은 Microsoft Windows(IA-32 및 X86-64), macOS(X86-64) 및 Linux(IA-32, X86-64 및 AArch64)에서 사용할 수 있습니다.
오브젝트 등 일부 라이브러리는 일부 플랫폼에서 사용할 수 없습니다.Windows에서만 사용할 수 있는 IO입니다.또한 파일에 다이내믹스를 쓰는 기능은 Windows에서만 사용할 수 있습니다.
플랫폼별 Clean의 가용성은 [13][14]버전에 따라 다릅니다.
| 버전 | 날짜. | 리눅스 | MacOS | Oracle Solaris | 창문들 | 여러가지 종류의 | |||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| IA-32 | X86-64 | AArch64 | 모토로라 68040 | Power PC | X86-64 | SPARC | IA-32 | X86-64 | |||
| 3.1 | 2022년 1월 5일 | 네. | 네. | 네. | 아니요. | 아니요. | 네. | 아니요. | 네. | 네. | |
| 3.0 | 2018년 10월 2일 | 네. | 네. | 아니요. | 아니요. | 아니요. | 네. | 아니요. | 네. | 네. | |
| 2.4 | 2011년 12월 23일 | 네. | 네. | 아니요. | 아니요. | 아니요. | 네. | 아니요. | 네. | 네. | |
| 2.3 | 2010년 12월 22일 | 네. | 네. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 네. | 네. | |
| 2.2 | 2006년 12월 19일 | 네. | 네. | 아니요. | 아니요. | 네. | 아니요. | 네. | 네. | 네. | |
| 2.1.1 | 2005년 5월 31일 | 네. | 아니요. | 아니요. | 아니요. | 네. | 아니요. | 네. | 네. | 아니요. | |
| 2.1.0 | 2003년 10월 31일 | 네. | 아니요. | 아니요. | 아니요. | 네. | 아니요. | 네. | 네. | 아니요. | |
| 2.0.2 | 2002년 12월 12일 | 네. | 아니요. | 아니요. | 아니요. | 네. | 아니요. | 네. | 네. | 아니요. | |
| 2.0.1 | 2002년 7월 4일 | 네. | 아니요. | 아니요. | 아니요. | 네. | 아니요. | 네. | 네. | 아니요. | |
| 2.0 | 2001년 12월 21일 | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 네. | 아니요. | |
| 1.3.3 | 2000년 9월 13일 | 네. | 아니요. | 아니요. | 아니요. | 네. | 아니요. | 네. | 네. | 아니요. | |
| 1.3.2 | 1999년 7월 1일 | 아니요. | 아니요. | 아니요. | 네. | 네. | 아니요. | 네. | 네. | 아니요. | |
| 1.3.1 | 1999년 1월 | 네. | 아니요. | 아니요. | 아니요. | 네. | 아니요. | 네. | 네. | 아니요. | |
| 1.3 | 1998년 5월 22일 | 네. | 아니요. | 아니요. | 아니요. | 네. | 아니요. | 네. | 네. | 아니요. | |
| 1.2.4 | 1997년 6월 | 아니요. | 아니요. | 아니요. | 네. | 네. | 아니요. | 아니요. | 네. | 아니요. | |
| 1.2.3 | 1997년 5월 | 아니요. | 아니요. | 아니요. | 네. | 네. | 아니요. | 아니요. | 네. | 아니요. | |
| 1.2 | 1997년 1월 13일 | 아니요. | 아니요. | 아니요. | 네. | 네. | 아니요. | 아니요. | 아니요. | 아니요. | |
| 1.1.3 | 1996년 10월 | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 네. | 아니요. | 아니요. | OS/2(i80386) |
| 1.1.2 | 1996년 9월 | 네. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | 네. | 아니요. | 아니요. | SunOS 4(SPARC) |
| 1.1 | 1996년 3월 | 네. | 아니요. | 아니요. | 네. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | |
| 1.0.2 | 1995년 9월 | 네. | 아니요. | 아니요. | 네. | 아니요. | 아니요. | 네. | 아니요. | 아니요. | OS/2(i80386), SunOS 4(SPARC) |
| 1.0 | 1995년 5월 | 아니요. | 아니요. | 아니요. | 네. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | OS/2(i80386) |
| 0.8.4 | 1993년 5월 11일 | 네. | 아니요. | 아니요. | 네. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | T800 트랜스푸터의 시험판 릴리즈 |
| 0.8.3 | 1993년 2월 26일 | 아니요. | 아니요. | 아니요. | 네. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | |
| 0.8.1 | 1992년 10월 19일 | 아니요. | 아니요. | 아니요. | 네. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | |
| 0.8 | 1992년 7월 13일 | 아니요. | 아니요. | 아니요. | 네. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | OS/2(i80386), SunOS 3-4(SPARC) |
| 0.7 | 1991년 5월 | 아니요. | 아니요. | 아니요. | 네. | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. | SunOS 3-4(SPARC) |
Haskell과의 비교
2008년 벤치마크에서는 [15]클린 네이티브 코드는 벤치마크에 따라 Haskell(GHC)과 거의 동일한 성능을 발휘하는 것으로 나타났습니다.
구문상의 차이
Clean의 구문은 Haskell의 구문과 매우 비슷하지만 다음과 같은 [10]차이가 있습니다.
| 하스켈 | 깨끗한 | 언급 |
|---|---|---|
[ x x <-> [1..10] , 오드 x] | [ x \\ x <-> [1..10] 오드 x] | 리스트 이해 |
x:xs | [x:xs] | cons 연산자 |
데이터. 트리 a = 빈 노드 (트리 a) a (트리 a) | :: 트리 a = 빈 노드 (트리 a) a (트리 a) | 대수 데이터형 |
(이크 a, 이크 b) => ... | ... 이크 a & 이크 b | 계급의 주장과 맥락 |
재밌어요 t@(노드 l x r) = ... | 재밌어요 t=:(노드 l x r) = ... | 미완성 |
한다면 x > 10 그리고나서 10 또 다른 x | 한다면 (x > 10) 10 x | 한다면 |
일반적으로, Haskell은 Clean보다 더 많은 통사당을 도입했다.
레퍼런스
- ^ "Download Clean". Clean. Retrieved 23 July 2019.
- ^ "Idris - Uniqueness Types". Retrieved 2018-11-20.
- ^ "Clean 0.7: README". Archived from the original on 2019-05-24.
- ^ "Clean 1.0: README". Archived from the original on 2019-05-05.
- ^ "Clean 1.3: README". Archived from the original on 2019-04-27.
- ^ "Radboud University Nijmegen: Department of Software Science: Software".
- ^ "FAQ". Clean. Retrieved 2021-11-26.
- ^ "Publications". Clean. Retrieved 2021-11-26.
- ^ "Home". TOP Software Technology. Retrieved 26 November 2021.
- ^ a b ftp://ftp.cs.ru.nl/pub/Clean/papers/2007/achp2007-CleanHaskellQuickGuide.pdf
- ^ "Which programming languages are fastest?". Computer Language Benchmarks Game. Archived from the original on 28 June 2011.
{{cite web}}: CS1 maint: bot: 원래 URL 상태를 알 수 없습니다(링크). - ^ Koopman, Pieter (December 10, 1990). Functional Programs as Executable Specifications (PhD). Katholieke Universiteit Nijmegen. p. 35. ISBN 90-9003689-X.
- ^ "Release history". Clean. Retrieved 7 January 2022.
- ^ "Index of /Clean". Retrieved 7 January 2022.
- ^ Jansen, Jan Martin; Koopman, Pieter; Plasmeijer, Rinus (2008). "From Interpretation to Compilation" (PDF). Retrieved 2016-05-21.
{{cite journal}}:Cite 저널 요구 사항journal=(도움말)