클린 (프로그래밍 언어)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
클린은 하스켈과 유사한 특징을 가진 함수형 프로그래밍 언어이다. 참조 투명성, 리스트 컴프리헨션, 가드, 쓰레기 수집, 고차 함수, 커링, 느긋한 계산법 등을 지원하며, 고유성 타입 시스템을 통해 변경 가능한 상태와 입출력을 처리한다. 클린은 윈도우, macOS, 리눅스를 지원하며, 2008년 벤치마크에 따르면 하스켈보다 더 빠른 성능을 보이기도 한다. 클린은 그래프 재작성 및 축약을 기반으로 작동하며, 컴파일 과정을 거쳐 네이티브 코드로 변환된다. 또한 웹 브라우저에서 실행하기 위한 프로젝트도 진행되었다.
더 읽어볼만한 페이지
- 함수형 프로그래밍 언어 - XQuery
XQuery는 함수형 프로그래밍 패러다임을 지원하며 XPath 식 구문의 상위 집합을 포함하는 XML 데이터 추출 및 조작을 위한 쿼리 언어로서, FLWOR 식을 통해 XML 데이터 조작 및 새로운 XML 문서 구성을 지원하고 XQuery 및 XPath 데이터 모델(XDM)을 기반으로 한다. - 함수형 프로그래밍 언어 - 코틀린 (프로그래밍 언어)
코틀린은 젯브레인즈에서 개발한 정적 타입 언어로, 자바 가상 머신에서 동작하며 자바와의 호환성을 갖고, 안드로이드 공식 지원 언어로 채택되어 다양한 분야에서 활용되고 있으며, 이름은 러시아의 코틀린 섬에서 유래되었다. - 자유 컴파일러와 인터프리터 - Tcl
Tcl은 존 오스터하우트가 개발한 명령어 기반의 프로그래밍 언어로, Tk 툴킷과 결합하여 GUI 스크립팅 환경으로 발전했으며, 다양한 운영체제에서 사용 가능하고 C, C++, Java 등 다른 언어와의 인터페이스를 지원한다. - 자유 컴파일러와 인터프리터 - PHP
PHP는 라스무스 러도프가 개발한 범용 스크립팅 언어로, 웹 개발에 널리 사용되며 LAMP 아키텍처의 핵심 요소이다. - 크로스 플랫폼 자유 소프트웨어 - 김프
김프(GIMP)는 GNU 프로젝트에서 개발된 크로스 플랫폼 기반의 무료 오픈소스 래스터 그래픽 편집기로, 다양한 운영체제를 지원하며 풍부한 기능을 제공하지만 사용자 인터페이스에 대한 비판과 일부 기능의 부족함에 대한 평가도 존재한다. - 크로스 플랫폼 자유 소프트웨어 - Tcl
Tcl은 존 오스터하우트가 개발한 명령어 기반의 프로그래밍 언어로, Tk 툴킷과 결합하여 GUI 스크립팅 환경으로 발전했으며, 다양한 운영체제에서 사용 가능하고 C, C++, Java 등 다른 언어와의 인터페이스를 지원한다.
| 클린 (프로그래밍 언어) - [IT 관련 정보]에 관한 문서 | |
|---|---|
| 개요 | |
![]() | |
| 패러다임 | 함수형 |
| 설계자 | 네이메헌 라드바우드 대학교의 소프트웨어 기술 연구 그룹 |
| 발표 연도 | 1987년 |
| 최신 버전 | 3.1 |
| 최신 버전 발표일 | 2022년 1월 5일 |
| 자료형 | 강한, 정적, 동적 |
| 운영 체제 | 크로스 플랫폼 |
| 라이선스 | 단순화된 BSD |
| 영향을 받은 언어 | Lean 미란다 하스켈 |
| 영향을 준 언어 | 하스켈 Idris |
| 파일 확장자 | .icl, .dcl, .abc |
| 웹사이트 | Clean 공식 웹사이트 |
2. 특징
클린은 1987년에 처음 등장하여 현재까지도 개발되고 있는 프로그래밍 언어이다.[20] 하스켈과 참조 투명성, 리스트 캄프리헨션, 가드(guard), 쓰레기 수집, 고차 함수, 커링, 느긋한 계산법 등 많은 특징을 공유한다.
클린은 고유성 타입 시스템을 통해 변경 가능한 상태와 입출력을 처리한다. 컴파일러는 고유성 타입 시스템을 활용하여 효율적인 코드를 생성하는데, 이는 프로그램 실행 중 고유 타입의 값에 대한 참조가 단 하나만 존재함을 보장하기 때문이다. 따라서 고유 값은 제자리에서 변경될 수 있다.[10]
클린 배포판에는 마이크로소프트 윈도우용 통합 개발 환경(IDE)이 포함되어 있다.
2. 1. 하스켈과의 비교
클린은 하스켈과 참조 투명성, 리스트 축약, 가드, 가비지 컬렉션, 고차 함수, 커링, 지연 평가 등 많은 속성 및 구문을 공유한다.[10]하스켈이 모나드를 사용하는 것과는 달리, 클린은 고유성 타입 시스템을 통해 변경 가능한 상태와 입출력(I/O)을 처리한다. 컴파일러는 고유성 타입 시스템을 활용하여 프로그램 실행 중 특정 시점에 고유 타입의 값에 대한 참조가 단 하나만 존재한다는 것을 알고, 이를 통해 더 효율적인 코드를 생성한다. 따라서 고유 값은 제자리에서 변경될 수 있다.[10]
클린 배포판에는 마이크로소프트 윈도우용 통합 개발 환경(IDE)이 포함되어 있다.
2. 1. 1. 성능
2008년 벤치마크에 따르면 클린은 대부분의 경우 하스켈보다 더 빠른 성능을 보였다.[21]| 언어 | Pri | Sym | Inter | Fib | Match | Ham | Twi | Qns | Kns | Parse | Plog | Qsort | Isort | Msort |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| SAPL Int | 6.1 | 17.6 | 7.8 | 7.3 | 8.5 | 15.7 | 7.9 | 6.5 | 47.1 | 4.4 | 4.0 | 16.4 | 9.4 | 4.4 |
| SAPL Bas | 4.3 | 13.2 | 6.0 | 6.5 | 5.9 | 9.8 | 5.6 | 5.1 | 38.3 | 3.8 | 2.6 | 10.1 | 6.7 | 2.6 |
| GHC | 2.0 | 1.7 | 8.2 | 4.0 | 4.1 | 8.4 | 6.6 | 3.7 | 17.7 | 2.8 | 0.7 | 4.4 | 2.3 | 3.2 |
| GHC -O | 0.9 | 1.5 | 1.8 | 0.2 | 1.0 | 4.0 | 0.1 | 0.4 | 5.7 | 1.9 | 0.4 | 3.2 | 1.9 | 1.0 |
| Clean | 0.9 | 0.8 | 0.8 | 0.2 | 1.4 | 2.4 | 2.4 | 0.4 | 3.0 | 4.5 | 0.4 | 1.6 | 1.0 | 0.6 |
컴퓨팅은 그래프 재작성과 축약을 기반으로 한다. 숫자와 같은 상수들은 그래프이며, 함수는 그래프 재작성 공식이다. 이는 네이티브 코드로의 컴파일과 결합되어 높은 추상화를 사용하는 클린 프로그램이 The Computer Language Benchmarks Game에 따르면 비교적 빠르게 실행되도록 한다.[11] 2008년 벤치마크는 클린 네이티브 코드가 벤치마크에 따라 글래스고 하스켈 컴파일러(GHC)와 유사하게 수행됨을 보여주었다.[12]
클린의 컴파일 과정은 다음과 같다.
3. 작동 원리
4. 컴파일 과정
1. 소스 파일(`.icl`)과 정의 파일(`.dcl`)은 클린으로 작성된 컴파일러 프런트엔드에 의해 클린의 기본 변형인 코어 클린(Core Clean)으로 변환된다.
2. 코어 클린은 클린과 C로 작성된 컴파일러 백엔드에 의해 클린의 플랫폼 독립적인 중간 언어(`.abc`)로 변환된다.
3. 중간 ABC 코드는 C로 작성된 코드 생성기에 의해 오브젝트 코드(`.o`)로 변환된다.
4. 오브젝트 코드는 모듈의 다른 파일 및 런타임 시스템과 연결되어 시스템 링커 (사용 가능한 경우) 또는 Windows에서 클린으로 작성된 전용 링커를 사용하여 일반 실행 파일로 변환된다.
이전 버전의 클린 컴파일러는 C로 완전히 작성되어 부트스트랩 문제를 피했다.
4. 1. ABC 기계
ABC 기계는 명령형 추상 그래프 재작성 기계이다.[13] 재작성 중인 Clean 그래프를 저장하는 그래프 저장소와 세 개의 스택으로 구성된다.4. 2. 웹 브라우저에서의 실행
클린은 일반적으로 네이티브 실행 파일을 생성하는 데 사용되지만, 여러 프로젝트에서 웹 브라우저에서 애플리케이션을 실행할 수 있도록 했다.
현재 중단된 [https://clean.cs.ru.nl/SAPL SAPL] 프로젝트는 Core Clean을 자바스크립트로 컴파일했으며 ABC 코드를 사용하지 않았다. 2019년부터는 WebAssembly로 작성된 ABC 코드 인터프리터가 대신 사용되고 있다.[14][15]
5. 지원 플랫폼
클린은 마이크로소프트 윈도우, macOS, 리눅스에서 사용할 수 있다.[16][17]
Clean은 마이크로소프트 윈도우(IA-32, X86-64) , macOS(X86-64), 그리고 리눅스(IA-32, X86-64, AArch64)에서 사용할 수 있다.
일부 라이브러리는 모든 플랫폼에서 사용할 수 없으며, 예를 들어 ObjectIO는 윈도우에서만 사용할 수 있다. 또한 동적 파일을 작성하는 기능도 윈도우에서만 사용할 수 있다.
클린의 플랫폼별 지원 여부는 각 버전마다 다르다.
| 버전 | 날짜 | 리눅스 | macOS | Oracle Solaris | 윈도우 | 기타 | |||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| IA-32 | x86-64 | AArch64 | Motorola 68040 | PowerPC | 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일 | 예 | 아니요 | 아니요 | 아니요 | 예 | 아니요 | 예 | 예 | 아니요 | 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 트랜스퓨터 릴리스 |
참조
[1]
웹사이트
Download Clean
https://clean.cs.ru.[...]
2019-07-23
[2]
웹사이트
Idris - Uniqueness Types
http://docs.idris-la[...]
2018-11-20
[3]
웹사이트
Clean 0.7: Readme
https://ftp.cs.ru.nl[...]
[4]
웹사이트
Clean 1.0: Readme
https://ftp.cs.ru.nl[...]
[5]
웹사이트
Clean 1.3: Readme
https://ftp.cs.ru.nl[...]
[6]
웹사이트
Radboud University Nijmegen: Department of Software Science: Software
https://www.mbsd.cs.[...]
[7]
웹사이트
FAQ
http://wiki.clean.cs[...]
2021-11-26
[8]
웹사이트
Publications
https://clean.cs.ru.[...]
2021-11-26
[9]
웹사이트
Home
https://www.top-soft[...]
2021-11-26
[10]
문서
ftp://ftp.cs.ru.nl/p[...]
[11]
웹사이트
Which programming languages are fastest?
http://shootout.alio[...]
[12]
간행물
From Interpretation to Compilation
ftp://ftp.cs.ru.nl/p[...]
2016-05-21
[13]
학위논문
Functional Programs as Executable Specifications
Katholieke Universiteit Nijmegen
1990-12-10
[14]
웹사이트
Clean and iTasks / ABC Interpreter · GitLab
https://gitlab.com/c[...]
2023-04-13
[15]
서적
Proceedings of the 31st Symposium on Implementation and Application of Functional Languages
2021-07-15
[16]
웹사이트
Release history
https://clean.cs.ru.[...]
2022-01-07
[17]
웹사이트
Index of /Clean
https://ftp.cs.ru.nl[...]
2022-01-07
[18]
웹인용
Download Clean
https://clean.cs.ru.[...]
2019-07-23
[19]
웹인용
"Idris - Uniqueness Types"
http://docs.idris-la[...]
2018-11-20
[20]
웹인용
FAQ - Clean
http://wiki.clean.cs[...]
[21]
저널
From Interpretation to Compilation
ftp://ftp.cs.ru.nl/p[...]
2016-05-21
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com
