OCaml
OCaml![]() | |
패러다임 | 멀티패러다임: 기능, 필수, 모듈러,[1] 객체 지향 |
---|---|
가족 | ML |
설계자 | 자비에 르로이, 제롬 뷔용, 데미안 돌리게즈, 디디에 레미, 아스카인더 수아레스 |
개발자 | 인리아 |
처음 등장한 | 전( |
안정된 릴리스 | 4.14.0[2] / 2022년 3월 ; 전 ( ) |
타이핑 분야 | 추정, 정적, 강력, 구조 |
구현 언어 | OCaml, C |
플랫폼 | IA-32, x86-64, 전원, SPARC, ARM 32-64 |
OS | 크로스 플랫폼:Unix, macOS, Windows |
면허증. | LGPLv2.1 |
파일 이름 확장자 | .ml, .mli |
웹 사이트 | ocaml |
영향을 받다 | |
C, Caml, Modula-3, Pascal, 표준 ML | |
영향받은 | |
ATS, Coq, Elm, F#, F*, Haxe, Opa, Rust, Scala | |
|
OCAMl(/oʊkkémll/oh-KAM-ll, 이전 Objective Caml)은 객체 지향 기능을 사용하여 ML의 Caml 사투리를 확장하는 범용 멀티패러다임 프로그래밍 언어입니다.OCaml은 1996년 자비에 르로이, 제롬 부용, 데미안 돌리게즈, 디디에 레미, 아스카인더 수아레즈 등에 의해 만들어졌다.
OCaml 툴체인은 인터랙티브 탑 레벨 인터프리터, 바이트 코드 컴파일러, 최적화 네이티브 코드 컴파일러, 리버서블 디버거 및 패키지 매니저(OPM)를 포함한다.OCaml은 처음에 자동화된 정리 증명 컨텍스트에서 개발되었으며 정적 분석 및 정식 메서드 소프트웨어에서 뛰어난 존재감을 가지고 있다.이러한 영역을 넘어 시스템 프로그래밍, 웹 개발, 금융 엔지니어링 등 다른 애플리케이션 도메인에서도 매우 활용되고 있습니다.
약어 CAML은 원래 Categoryical Abstract Machine Language를 의미하지만 OCaml은 이 추상 [3]머신을 생략합니다.OCaml은 프랑스 컴퓨터 과학 자동화 연구소(Inria)가 관리 및 주로 관리하는 무료 오픈 소스 소프트웨어 프로젝트입니다.2000년대 초반, OCaml의 요소들은 많은 언어들, 특히 F#과 Scala에 채택되었다.
철학
ML에서 파생된 언어는 정적 유형 시스템과 유형 제한 컴파일러로 가장 잘 알려져 있습니다.OCaml은 기능성, 필수성 및 객체 지향 프로그래밍을 ML과 유사한 유형 시스템으로 통합합니다.따라서 프로그래머는 OCaml을 사용하기 위해 순수한 함수 언어 패러다임에 매우 익숙할 필요가 없습니다.
OCaml은 프로그래머가 정적 유형 시스템의 제약 내에서 작업하도록 요구함으로써 동적 유형 언어와 관련된 많은 유형 관련 런타임 문제를 제거합니다.또한 OCaml의 유형 추론 컴파일러는 대부분의 정적 유형 언어에서 필요한 수동 유형 주석의 필요성을 크게 줄여줍니다.예를 들어 변수의 데이터 유형과 함수의 시그니처는 Java 및 C#과 같은 언어에서와 같이 명시적으로 선언할 필요가 없습니다.이는 코드 내의 변수 및 기타 값에 적용되는 연산자 및 기타 함수로부터 추론할 수 있기 때문입니다.OCaml의 유형 시스템을 효과적으로 사용하려면 프로그래머의 정교함이 필요할 수 있지만, 이 분야는 신뢰할 수 있는 고성능 소프트웨어로 보상됩니다.
OCaml은 성능에 중점을 둔다는 점에서 학계의 기원을 가진 다른 언어들과 가장 구별된다.스태틱 타입의 시스템은 런타임 타입의 불일치를 방지하여 동적 타입의 언어의 퍼포먼스에 부담을 주는 런타임 타입과 안전성 체크를 배제하고 어레이 경계 체크가 오프되어 있는 경우나 시리얼라이제이션과 같은 타입의 안전하지 않은 기능을 사용하는 경우를 제외하고 런타임의 안전성을 보증합니다.이것들은 충분히 드물어서 실제로 그것들을 피하는 것이 꽤 가능하다.
유형 검사 오버헤드 외에도 기능 프로그래밍 언어는 일반적으로 funarg 문제와 같은 문제로 인해 효율적인 기계어 코드로 컴파일하기가 어렵습니다.표준 루프, 레지스터 및 명령 최적화와 함께 OCaml의 최적화 컴파일러는 정적 프로그램 분석 방법을 사용하여 값 박싱 및 클로저 할당을 최적화하고, 함수 프로그래밍 구조를 광범위하게 사용하더라도 결과 코드의 성능을 극대화할 수 있습니다.
Xavier Leroy는 "OCaml은 괜찮은 C [4]컴파일러의 성능을 50% 이상 제공합니다."라고 언급했지만 직접적인 비교는 불가능합니다.OCaml 표준 라이브러리의 일부 함수는 다른 언어의 표준 라이브러리의 동등한 함수보다 빠른 알고리즘으로 구현됩니다.예를 들어, OCaml 표준 라이브러리에서 집합 결합의 구현은 OCaml 구현이 출력에서 입력 집합의 일부를 재사용하는 집합의 불변성을 이용하기 때문에 이론적으로 명령어 표준 라이브러리(예를 들어 C++, Java)의 동등한 함수보다 점근적으로 더 빠르다(영속적인 데이터 구조 참조).
특징들
OCaml은 정적 유형 시스템, 유형 추론, 파라미터 다형성, 테일 재귀, 패턴 매칭, 퍼스트 클래스 어휘 클로저, 펑터(파라미터 모듈), 예외 처리 및 증분 생성 자동 가비지 수집을 특징으로 합니다.
OCaml은 범용 언어의 객체 시스템으로 ML 스타일의 유형 추론을 확장한 것으로 알려져 있습니다.이를 통해 선언된 상속(정적으로 입력된 언어에서는 드문 기능)에 관계없이 메서드 시그니처가 호환되는 경우 개체 유형이 호환되는 구조 서브타이핑을 사용할 수 있습니다.
C 및 Fortran 양쪽에 호환되는 형식의 효율적인 수치 배열을 위한 언어 지원을 포함한 C 프리미티브에 링크하기 위한 외부 함수 인터페이스가 제공된다.OCaml은 또한 OCaml에 대한 지식이나 설치가 없는 C 프로그래머에게 OCaml 라이브러리를 배포할 수 있도록 C의 메인 프로그램과 링크할 수 있는 OCaml 함수 라이브러리 생성을 지원합니다.
OCaml 배포에는 다음이 포함됩니다.
- ocamllex 및 ocamlyacc라고 하는 어휘 분석 및 해석 도구
- 오류를 조사하기 위해 뒤로 물러서는 것을 지원하는 디버거
- 문서 생성기
- Profiler – 퍼포먼스 측정
- 많은 범용 라이브러리
네이티브 코드 컴파일러는 Unix, Microsoft Windows 및 Apple macOS를 포함한 많은 플랫폼에서 사용할 수 있습니다.휴대성은 IA-32, X86-64(AMD64), Power, RISC-V, ARM [5]및 ARM64 등의 주요 아키텍처에 대한 네이티브 코드 생성 지원을 통해 실현됩니다.
OCaml 바이트 코드 및 네이티브 코드 프로그램은 프리엠프티브 컨텍스트 스위칭을 사용하여 멀티스레드 스타일로 작성할 수 있습니다.OCaml 런타임시스템의 가비지 콜렉터(현재 사용 가능한 유일한 언어 풀 실장)는 동시성용으로 설계되어 있지 않으며 대칭형 멀티프로세싱은 [6]지원되지 않습니다.동일한 프로세스의 OCaml 스레드는 시간 공유에 의해서만 실행됩니다.그러나 분산 컴퓨팅에는 Functory나 ocamlnet/Plasma 등의 라이브러리가 몇 개 있습니다.OCaml 5.0 릴리스(2022년 5월 현재 개발 중)는 효과 핸들러와 멀티코어 병렬 [7]처리를 통한 동시성을 지원하는 최초의 릴리스가 될 것이다.
개발 환경
2011년 이후 많은 새로운 툴과 라이브러리가 OCaml 개발 환경에 기여하고 있습니다.
- 개발 도구
- 웹 사이트:
- OCaml용 대체 컴파일러:
- Ocsigen 팀이 개발한 js_of_ocaml은 OCaml에서 JavaScript로 최적화된 컴파일러입니다.
- 또한 JavaScript를 대상으로 하는 BuckleScript는 읽기 쉽고 관용적인 JavaScript 출력을 생성하는 데 초점을 맞추고 있습니다.
- ocamlcc는 지원되지 않는 플랫폼의 네이티브 코드 컴파일러를 보완하기 위해 OCaml에서 C로의 컴파일러입니다.
- INRIA에서 개발한 OCamlJava는 OCaml에서 Java Virtual Machine(JVM; Java 가상 머신)으로 컴파일러합니다.
- Lip6가 개발한 OCaPic은 PIC 마이크로컨트롤러용 OCaml 컴파일러입니다.
코드 예시
이 섹션은 어떠한 출처도 인용하지 않습니다.(2013년 5월 (이 및 ) |
OCaml 코드의 스니펫은 최상위 레벨의 REP에 입력하는 것으로, 가장 간단하게 학습할 수 있습니다.이것은 결과 [8]표현 또는 정의된 표현 유형을 유추하여 출력하는 대화형 OCaml 세션입니다.OCaml 최상위 레벨은 OCaml 프로그램을 실행하는 것만으로 시작됩니다.
$ocaml Objective Caml 버전 3.09.0 #
그런 다음 "#" 프롬프트에서 코드를 입력할 수 있습니다.예를 들어, 1+2*3을 계산하려면:
# 1 + 2 * 3; - : int = 7
OCaml은 식 유형을 "int"(기계 정밀도 정수)로 추론하고 결과 "7"을 제공합니다.
안녕 세계
다음 프로그램 "hello.ml":
print_endline '헬로 월드'
는 바이트 코드 실행 파일로 컴파일할 수 있습니다.
$ ocamlc hello.ml - o 안녕하세요
또는 최적화된 네이티브 코드 실행 파일로 컴파일됩니다.
$ ocamlopt hello.ml - o 안녕하세요
실행 완료:
$ . / Hello World !$
ocamlc의 첫 번째 인수인 "hello.ml"은 컴파일할 소스 파일을 지정하고 "-o hello" 플래그는 출력 [9]파일을 지정합니다.
정수 목록 합계
목록은 OCaml의 기본 데이터 유형 중 하나입니다.다음 코드 예제에서는 정수 목록으로 간주되는 하나의 인수(정수)를 받아들이는 재귀 함수 합계를 정의합니다.키워드에 주의해 주세요.rec
이는 함수가 재귀적이라는 것을 나타냅니다.이 함수는 지정된 정수 목록에 대해 반복적으로 반복되며 요소의 합계를 제공합니다.match 문은 C의 스위치 요소와 유사하지만 훨씬 일반적입니다.
허락하다 인식하다 합 정수 = (* 키워드 rec은 '재귀적'을 의미합니다).*) 경기 정수 와 함께 [] -> 0 (* 정수가 비어 있는 경우 0을 산출합니다) [ ] 를 표시합니다.*) 첫번째 :: 쉬다 -> 첫번째 + 합 쉬다;; (* 정수가 비재귀 콜인 경우) 빈 리스트. 첫 번째 리스트가 첫 번째 리스트입니다. 리스트의 요소이며, 나머지는 나머지 요소들의 목록, [ ] 를 클릭합니다.*)
# 합 [1;2;3;4;5];; - : 인트 = 15
또 다른 방법은 목록과 함께 작동하는 표준 접이식 기능을 사용하는 것입니다.
허락하다 합 정수 = 목록..폴드_왼쪽 (재밌어요 어큐뮬레이터 x -> 어큐뮬레이터 + x) 0 정수;;
# 합 [1;2;3;4;5];; - : 인트 = 15
어나니머스 함수는 단순히 + 연산자의 응용 프로그램이기 때문에 다음과 같이 단축할 수 있습니다.
허락하다 합 정수 = 목록..폴드_왼쪽 (+) 0 정수
또한 부분 어플리케이션을 사용하여 list 인수를 생략할 수 있습니다.
허락하다 합 = 목록..폴드_왼쪽 (+) 0
퀵소트
OCaml은 재귀 알고리즘을 간결하게 표현하는데 적합합니다.다음 코드 예는 목록을 오름차순으로 정렬하는 QuickSort와 유사한 알고리즘을 구현하고 있습니다.
허락하다 인식하다 q = 기능. [] -> [] 피벗 :: 쉬다 -> 허락하다 이_less x = x < > 피벗 에 허락하다 왼쪽, 맞다 = 목록..칸막이 이_less 쉬다 에 q 왼쪽 @ [피벗] @ q 맞다
생일 문제
다음 프로그램은 방 안에서 생일이 완전히 일치할 확률이 50% 미만인 최소 인원(생일 문제, 1명의 확률은 365/196(또는 100%), 2명의 확률은 364/196×363/196 등)을 계산합니다(정답 = 23).
허락하다 year_size(년 크기) = 365. 허락하다 인식하다 birthday_filters(생일_생일) 문제 사람 = 허락하다 문제 = (year_size(년 크기) -. 흘러가다 사람) /. year_size(년 크기) *. 문제 에 한다면 문제 < > 0.5 그리고나서 프린트.인쇄물 "응답 = %d\n" (사람+1) 또 다른 birthday_filters(생일_생일) 문제 (사람+1) ;; birthday_filters(생일_생일) 1.0 1
교회 숫자
다음 코드는 자연수(succ)와 추가(add)를 포함하는 교회 인코딩을 정의합니다.교회 숫자n
함수를 받아들이는 고차 함수입니다.f
및 값x
및 적용f
로.x
정확하게n
교회 숫자를 함수 값에서 문자열로 변환하려면 문자열을 추가하는 함수를 전달합니다."S"
그 입력과 일정한 문자열에 대해"0"
.
허락하다 영 f x = x 허락하다 성공하다 n f x = f (n f x) 허락하다 하나. = 성공하다 영 허락하다 두명 = 성공하다 (성공하다 영) 허락하다 더하다 n1 n2 f x = n1 f (n2 f x) 허락하다 스트링 n = n (재밌어요 k -> 'S' ^ k) "0" 허락하다 _ = 스트링 (더하다 (성공하다 두명) 두명)
임의 정밀도 요인 함수(라이브러리)
다양한 라이브러리는 OCaml에서 직접 액세스할 수 있습니다.예를 들어 OCaml에는 임의 정밀도 산술용 내장 라이브러리가 있습니다.요인 함수는 매우 빠르게 증가하므로 기계 정밀도 수치(일반적으로 32비트 또는 64비트)를 빠르게 오버플로합니다.따라서 계수는 임의 정밀도 산술에 적합한 후보입니다.
OCaml에서 Num 모듈(현재는 ZArith 모듈로 대체됨)은 임의 정밀도 산술을 제공하며 다음을 사용하여 실행 중인 최상위 레벨로 로드할 수 있습니다.
# #사용하다 「톱 파인드」;; # #요구하다 "숫자";; # 열다. 숫자;;
그런 다음 임의 정밀도 숫자 연산자를 사용하여 요인 함수를 작성할 수 있습니다.=/, */ 및 -/:
# 허락하다 인식하다 사실 n = 한다면 n =/ 내부 0 그리고나서 내부 1 또 다른 n */ 사실(n -/ 내부 1);; 값 사실 : 숫자.숫자 -> 숫자.숫자 = < >재밌어요>
이 함수는 120과 같이 훨씬 더 큰 요인을 계산할 수 있습니다.
# string_of_num (사실 (내부 120));; - : 스트링 = "6689502913449127057588118054090372586752746333138029810295671352301633 55724496298936687416527198498130815763789321409055253440858940812185989 8481114389650005964960521256960000000000000000000000000000"
삼각형(그래픽)
다음 프로그램은 OpenGL을 사용하여 회전 삼각형을 2D로 렌더링합니다.
허락하다 () = 무시하다 (과식.초기화 시스템.argv); 과식.init Display 모드 ~더블_슬롯데:진실의 (); 무시하다 (과식.create Window(창 ~직함:"OpenGL 데모"); 허락하다 각 t = 10. *. t *. t 에 허락하다 표현하다 () = 클리어.분명한 [ `색. ]; GLMat.load_filename(로드_프로세서) (); GLMat.회전하다 ~각: (각 (시스템.시간을 ())) ~z:1. (); 글로우.시작합니다. `삼각형; 목록..반복하다 글로우.정점 2 [-1., -1.; 0., 1.; 1., -1.]; 글로우.끝 (); 과식.스왑 버퍼 () 에 GLMat.모드 `모델뷰; 과식.display Func ~cb:표현하다; 과식.아이돌 펑크 ~cb:(몇개 과식.재생 후); 과식.메인 루프 ()
OpenGL에 대한 LablGL 바인딩이 필요합니다.그런 다음 프로그램을 바이트 코드로 컴파일할 수 있습니다.
$ ocamlc - I + 라벨GL lablglut.cma lablgl.cma simple.ml - o simple
또는 네이티브 코드:
$ ocamlopt - I + 라벨GL lablglut.cmxa lablgl.cmxa simple.ml - o simple
또는 ocamfind build 명령어를 사용하여
$ ocamlfind opt simple.ml - lablgl . http - linkpkg - o 심플
및 실행:
1파운드당 $.
OCaml에서는 훨씬 더 정교한 고성능 2D 및 3D 그래픽 프로그램을 개발할 수 있습니다.OpenGL과 OCaml을 사용하여 생성된 프로그램을 여러 주요 플랫폼에서 변경하지 않고 컴파일할 수 있습니다.
피보나치 수열
다음 코드는 입력된 숫자 n의 피보나치 시퀀스를 계산합니다.테일 재귀와 패턴 매칭을 사용합니다.
허락하다 파이브 n = 허락하다 인식하다 fib_aux m a b = 경기 m 와 함께 0 -> a _ -> fib_aux (m - 1) b (a + b) 에 fib_aux n 0 1
고차 함수
함수는 함수를 입력 및 반환 함수로 받아들일 수 있습니다.예를 들어 함수 f에 두 번 적용하면 인수 f에 두 번 적용되는 함수가 생성됩니다.
허락하다 두번이라. (f : 'a -> 'a) = 재밌어요 (x : 'a) -> f (f x);; 허락하다 주식회사 (x : 인트) : 인트 = x + 1;; 허락하다 추가 2 = 두번이라. 주식회사;; 허락하다 인크스트 (x : 스트링) : 스트링 = x ^ " " ^ x;; 허락하다 add_str = 두번이라.(인크스트);;
# 추가 2 98;; - : 인트 = 100 # add_str "테스트";; - : 스트링 = "테스트 테스트 테스트"
이 함수는 유형 변수 a를 두 번 사용하여 int->int 함수에만 적용되는 것이 아니라 유형 a에서 자신에 대한 함수 f 매핑에 적용할 수 있음을 나타냅니다.특히 두 번을 자신에게 적용할 수도 있다.
# 허락하다 네 번 f = (두번이라. 두번이라.) f;; 값 네 번 : ('a -> 'a) -> 'a -> 'a = < >재밌어요> # 허락하다 추가 4 = 네 번 주식회사;; 값 추가 4 : 인트 -> 인트 = < >재밌어요> # 추가 4 98;; - : 인트 = 102
파생 언어
MetaOCaml
MetaOCaml은[10] OCaml의 다단계 프로그래밍 확장으로 런타임 중에 새로운 기계 코드를 증분 컴파일할 수 있습니다.상황에 따라서는 다단계 프로그래밍을 사용하여 상당한 속도 향상을 할 수 있습니다. 왜냐하면 처리할 데이터에 대한 보다 자세한 정보는 정기적인 컴파일 시간보다 런타임에 이용할 수 있기 때문입니다.따라서 증분 컴파일러는 많은 조건 체크 등의 케이스를 최적화할 수 있습니다.
예: 컴파일 시 일부 전원이 작동하는 것으로 알려진 경우 x -> x^n
자주 필요하지만 의 가치는n
는 실행 시에만 인식되며 MetaOCaml에서 2단계 전원 기능을 사용할 수 있습니다.
허락하다 인식하다 힘 n x = 한다면 n = 0 그리고나서 .<1> 。 또 다른 한다면 심지어. n 그리고나서 스쿠르 (힘 (n/2) x) 또 다른 .<.~x *. .~(힘 (n - 1) x>>
하자마자n
는 런타임에 알려져 있으며 특수하고 매우 빠른 전원 기능을 만들 수 있습니다.
.<재밌어요 x -> .~(힘 5 .<x>.>
결과는 다음과 같습니다.
재밌어요 x_1 -> (x_1 * 허락하다 y_3 = 허락하다 y_2 = (x_1 * 1) 에 (y_2 * y_2) 에 (y_3 * y_3))
새로운 함수가 자동으로 컴파일 됩니다.
기타 파생 언어
- AtomCaml은 코드의 원자(트랜잭션) 실행을 위한 동기화 프리미티브를 제공합니다.
- Emily(2006)는 OCaml 3.08의 서브셋으로 설계 규칙 검증자를 사용하여 객체 기능 모델의 보안 원칙을 적용합니다.
- F#은 입니다.OCaml 기반의 NET Framework 언어.
- Fresh OCaml을 사용하면 이름과 바인더를 쉽게 조작할 수 있습니다.
- GCaml은 OCaml에 확장다형성을 추가하므로 오버로드 및 타입 세이프 마샬링이 가능합니다.
- JoCaml은 동시 및 분산 프로그램 개발을 위한 구성을 통합합니다.
- OCamlDuce는 XML 표현 및 정규 표현 유형 등의 기능을 사용하여 OCaml을 확장합니다.
- OCamlP3l은 OCaml과 P3L 언어에 기반한 병렬 프로그래밍 시스템입니다.
- Reason은 완전히 별개의 언어는 아니지만 페이스북에서 작성된 OCaml용 대체 OCaml 구문 및 툴 체인입니다.
OCaml로 작성된 소프트웨어
- 0install, 멀티플랫폼 패키지 매니저.
- Coccinelle은 C 프로그램의 소스 코드를 변환하는 유틸리티입니다.
- Coq, 공식 증명 관리 시스템입니다.
- FFTW, 이산 푸리에 변환을 계산하기 위한 라이브러리입니다.여러 개의 C 루틴이 OCaml 프로그램에 의해 생성되었습니다.
genfft
. - Facebook [11]Messenger의 웹 버전입니다.
- Flow는 페이스북에서 작성된 정적 분석기로 JavaScript의 [12]정적 유형을 추론하고 확인합니다.
- Owl Scientific Computing은 과학 및 엔지니어링 컴퓨팅 전용 시스템입니다.
- Frama-C, C 프로그램을 분석하기 위한 프레임워크입니다.
- Gene Web, 무료 오픈 소스 멀티 플랫폼 계보 소프트웨어.
- Facebook에서 만든 Hack 프로그래밍 언어 컴파일러로 정적 타입으로 PHP를 확장합니다.
- Haxe 프로그래밍 언어 컴파일러.
- HOL Light, 정식 교정 보조입니다.
- 유추는 페이스북에서 Java, C, C++, Objective-C용으로 만든 정적 분석기로 iOS 및 Android [13]앱의 버그를 감지하는 데 사용됩니다.
- 복잡한 파생 모델을 모델링하는 시스템인 Lexifi Apropos.
- 순수 OCaml로 작성된 유니커널 프로그래밍 프레임워크인 MirageOS.
- MLdonkey: EDonkey 네트워크에 기반한 피어 투 피어 파일 공유 응용 프로그램입니다.
- Ocsigen, OCaml 웹 프레임워크.
- Opa는 웹 개발을 위한 무료 오픈 소스 프로그래밍 언어입니다.
- pyre-check,[14] Facebook에서 만든 Python용 타입 체커입니다.
- Tezos는 XTZ를 원어민 통화로 사용하는 자기 수정형 스마트 계약 플랫폼입니다.
- Unison은 두 디렉토리 간에 파일을 동기화하기 위한 파일 동기화 프로그램입니다.
- WebAssembly의 참조 인터프리터. WebAssembly는 웹 브라우저 [15]내에서 실행하기 위한 하위 바이트 코드입니다.
- Xen 하이퍼바이저용 턴키 가상화 솔루션인 Xen Cloud Platform(XCP).
사용자
수십 개의 회사가 OCaml을 어느 정도 [16]사용하고 있습니다.주목할 만한 예는 다음과 같습니다.
- 블룸버그 L.P.는 JavaScript를 [17]대상으로 한 OCaml 컴파일러 백엔드인 BuckleScript를 만들었다.
- Citrix Systems. XenServer에서 OCaml을 사용합니다(2018년 중에 Citrix Hypervisor로 브랜드 변경).
- Facebook은 OCaml에서 Flow, Hack, Induce, Pfff, Reason을 개발했습니다.
- 초기 [18]OCaml을 선호하는 언어로 채택한 독점 무역 회사인 Jane Street Capital.
레퍼런스
- ^ "Modules". Retrieved 22 February 2020.
- ^ "OCaml 4.14.0 Release Notes". Retrieved 27 May 2022.
- ^ "A History of OCaml". Retrieved 24 December 2016.
- ^ Linux Weekly 뉴스
- ^ "ocaml/asmcomp at trunk · ocaml/ocaml · GitHub". GitHub. Retrieved 2 May 2015.
- ^ "Archives of the Caml mailing list > Message from Xavier Leroy". Retrieved 2 May 2015.
- ^ "OCaml Multicore Monthly updates".
- ^ "OCaml - The toplevel system or REPL (ocaml)". ocaml.org. Retrieved 2021-05-17.
- ^ "OCaml - Batch compilation (Ocamlc)".
- ^ oleg-at-okmij.org. "BER MetaOCaml". okmij.org.
- ^ "Messenger.com Now 50% Converted to Reason · Reason". reasonml.github.io. Retrieved 2018-02-27.
- ^ "Flow: A Static Type Checker for JavaScript". Flow.
- ^ "Infer static analyzer". Infer.
- ^ "GitHub - facebook/pyre-check: Performant type-checking for python". 9 February 2019 – via GitHub.
- ^ "WebAssembly/spec: WebAssembly specification, reference interpreter, and test suite". World Wide Web Consortium. 5 December 2019. Retrieved 2021-05-14 – via GitHub.
- ^ "Companies using OCaml". OCaml.org. Retrieved 2021-05-14.
- ^ "BuckleScript: The 1.0 release has arrived! Tech at Bloomberg". Tech at Bloomberg. 8 September 2016. Retrieved 21 May 2017.
- ^ Yaron Minsky (1 November 2011). "OCaml for the Masses". Retrieved 2 May 2015.
외부 링크
