{{위키데이터 속성 추적}}
{{Infobox programming language
| name = 클린<br />Clean
| logo = 
| paradigm = [[함수형 프로그래밍|함수형]]
| year = {{시작 날짜와 나이|1987}}
| designer = [[네이메헌 라드바우드 대학교]]의 소프트웨어 기술 연구 그룹
| latest_release_version = 3.0
| latest_release_date = {{시작 날짜와 나이|2018|10|19}}
| typing = [[스트롱 타입|스트롱]], [[스태틱 타입|스태틱]], [[다이내믹 타입|다이내믹]]
| operating_system = [[크로스 플랫폼]]
| license = [[Simplified BSD License|Simplified BSD]]<ref>{{웹 인용|title=Download Clean |url=https://clean.cs.ru.nl/Download_Clean#Clean_3.0_License |website=Clean |accessdate=23 July 2019}}</ref>
| influenced_by = [[Lean]], [[미란다 (프로그래밍 언어)|미란다]], [[하스켈]]
| influenced = [[하스켈]], [[Idris]]<ref>{{웹 인용|title="Idris - Uniqueness Types"|url=http://docs.idris-lang.org/en/latest/reference/uniqueness-types.html|accessdate=2018-11-20}}</ref>
| file_ext = .icl, .dcl, .abc
| website = {{URL|clean.cs.ru.nl}}
}}
'''클린'''(Clean)은 [[범용 프로그래밍 언어|범용]] [[순수 함수형 언어|순수 함수형]] [[프로그래밍 언어]]이다. 언어의 활동적인 개발 역사 대부분에서 '''컨커런트 클린'''(Concurrent Clean)이라는 이름이 사용되었으나 어느 지점에서 이 이름의 사용은 중단되었다. 클린은 1987년 Nijmegen의 Radboud University의 연구원 단체에 의해 개발되었다.

== 기능 ==
클린이라는 언어는 1987년에 처음 등장했으며 지금도 계속 개발되고 있다.<ref>{{웹 인용| url=http://wiki.clean.cs.ru.nl/FAQ | title=FAQ - Clean}}</ref> [[하스켈]]과 수많은 속성을 공유하고 있다: [[참조 투명성]], [[리스트 캄프리헨션]], [[가드]](guard), [[쓰레기 수집 (컴퓨터 과학)|쓰레기 수집]], [[고차 함수]], [[커링]], [[느긋한 계산법]].

윈도우에서는 클린 배포판에 [[통합 개발 환경]](IDE)이 포함되어 있다.

== 예시 ==
[["Hello, World!" 프로그램|Hello world]]:
<syntaxhighlight lang="clean">
 module hello
 Start :: {#Char}
 Start = "Hello, world!"
</syntaxhighlight>
[[계승]]:
{|
|-valign="bottom"
|<syntaxhighlight lang="clean">
  module factorial
  import StdEnv
  fac 0 = 1
  fac n = n * fac (n-1)

  // find the factorial of 10
  Start = fac 10
</syntaxhighlight>
|<syntaxhighlight lang="clean">
  module factorial2
  import StdEnv
  fac 0 = 1
  fac n = prod [1..n] // The product of the numbers 1 to n

  // find the factorial of 6
  Start = fac 6
</syntaxhighlight>
|}
[[피보나치 수]]:
<syntaxhighlight lang="clean">
  module fibonacci
  fib 0 = 0
  fib 1 = 1
  fib n = fib (n - 2) + fib (n - 1)
  Start = fib 7
</syntaxhighlight>
[[중위 표기법|Infix]] 연산자:
<syntaxhighlight lang="clean">
  (^) infixr 8 :: Int Int -> Int
  (^) x 0 = 1
  (^) x n = x * x ^ (n-1)
</syntaxhighlight>

== 컴파일 ==
# 소스 파일(.icl)과 정의 파일(.dcl)이 클린의 기초적인 일종인 코어 클린(Core Clean)으로 변환된다.
# 코어 클린은 [[C (프로그래밍 언어)|C]]와 클린으로 구현된 클린의 플랫폼 독립적 바이트코드(.abc)로 변환된다.
# 바이트코드는 [[C (프로그래밍 언어)|C]]를 사용하여 오브젝트 코드(.o)로 변환된다.
# 오브젝트 코드는 모듈과 런타임 시스템에서 다른 파일들과 링크되며 클린의 일반적인 실행 파일로 변환된다.

== 플랫폼 ==
클린은 [[마이크로소프트 윈도우]], [[매킨토시]], [[솔라리스 (운영 체제)|솔라리스]], [[리눅스]]에서 사용할 수 있다.

== 하스켈과의 비교 ==

=== 속도 ===
2008년 벤치마크에 따르면 클린은 대부분의 경우 하스켈보다 더 빠르다:<ref>{{저널 인용|last1=Jansen|first1=Jan Martin|last2=Koopman|first2=Pieter|last3=Plasmeijer|first3=Rinus|title=From Interpretation to Compilation|date=2008|url=ftp://ftp.cs.ru.nl/pub/Clean/papers/2008/janj08-CEFP07-InterpretationToCompilation.pdf|accessdate=2016-05-21}}{{깨진 링크|url=ftp://ftp.cs.ru.nl/pub/Clean/papers/2008/janj08-CEFP07-InterpretationToCompilation.pdf }}</ref>

{| class="wikitable sortable"
|+ 5개 컴파일러의 속도 비교 (단위: 초)
|-
! 언어 !! 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
|}

== 커뮤니티 ==
* IRC 채널: #cleanlang on freenode

== 각주 ==
{{각주}}

== 외부 링크 ==
* [http://wiki.clean.cs.ru.nl/ Clean Wiki]
* [http://cloogle.org Cloogle: Clean function search engine]

[[분류:함수형 프로그래밍 언어]]
[[분류:자유 컴파일러와 인터프리터]]
[[분류:크로스 플랫폼 자유 소프트웨어]]