Objective Caml
Objective Caml | |
---|---|
Парадигма | мультипарадигмна: імперативна, функціональна, об'єктно-орієнтована |
Дата появи | 1996 |
Творці | Xavier Leroyd і Damien Doligezd |
Розробник | INRIA |
Останній реліз | 4.06[1] (3 листопада 2017 ) |
Система типізації | вивід типів, статична, строга типізація і Структурна типізація |
Діалекти | JoCaml |
Під впливом від | Caml Light, Standard ML |
Мова реалізації | Objective Caml і C |
Операційна система | Cross-platform |
Ліцензія | Q Public License (компілятор) LGPL (бібліотека) |
Звичайні розширення файлів | .ml або .mli |
Вебсайт | http://caml.inria.fr/ |
OCaml (о-ка-ем-ель, англ. Objective Caml) — одна із реалізацій мови програмування Caml. Розширює базові можливості мови Caml об'єктно-орієнтованими можливостями.
До набору інструментів OCaml належить інтерактивний інтерпретатор, компілятор в байт-коди, та оптимізувальний компілятор у машинні коди. OCaml має велику стандартну бібліотеку, яка робить його прийнятним для багатьох застосувань, аналогічним застосуванням Python або Perl, та потужні конструкції модульного та об'єктно-орієнтованого програмування, які роблять його прийнятним для розробки великих систем.
OCaml є наступником Caml Light. Скорочення CAML означає Categorical Abstract Machine Language, хоча OCaml не використовує цей абстрактний автомат.
OCaml об'єднує функціональний, імперативний та об'єктно-орієнтований стилі програмування під дахом ML-подібної системи типів.
Статична система типів OCaml усуває великий клас помилок програмування, які можуть викликати проблеми під час виконання програми. Однак, вона також примушує програміста враховувати обмеження системи типів, що може потребувати великої уваги. Компілятор з виведенням типів значною мірою зменшує потребу в ручному позначенні типів (наприклад, тип даних змінних та підписи функцій, як правило, вказувати не треба на відміну від мови програмування Java). Тим не менш, ефективне використання системи типів OCaml може вимагати певної гнучкості з боку розробника.
До особливостей OCaml належить статична система типів, виведення типів, параметричний поліморфізм, хвостова рекурсія, замикання першого рівня з підтримкою в лексиці мови, функтори (параметризовані модулі), обробка винятків, та автоматичне прибирання пам'яті.
Найкращий спосіб вивчення вихідних текстів програм на OCaml є обробка інтерпретатором в режимі «верхнього рівня». Цей режим є інетрактивним сеансом роботи з інтерпретатором OCaml, який відображає виведені типи результатів або введених виразів. Інтерпретатор в режимі «верхнього рівня» запускається програмою ocaml:
$ ocaml Objective Caml version 3.09.0 #
Після цього, можна вводити код в рядку запиту, який починається на «#». Наприклад, для обчислення 1+2·3:
# 1 + 2 * 3;; - : int = 7
OCaml робить висновок, що тип виразу має бути int (машинне ціле) та виводить результат 7.
Наступна програма hello.ml:
print_endline "Hello world!";;
може бути скомпільована в байт-коди:
$ ocamlc hello.ml -o hello
та виконана:
$ ./hello Hello world! $
Рекурсивна функція для обчислення найбільшого спільного ділильника за алгоритмом Евкліда матиме вигляд:
let rec gcd a b =
if b=1 then 1 else
let rest = a mod b in
if rest = 0 then b else gcd b rest;;
OCaml позиціюється як мова загального призначення, тому на ній можна писати програми не тільки з науковими цілями.
let secret = Random.int 100 in
let rec wait () =
print_string "Ваша пропозиція: ";
analyze (read_int ())
and analyze input =
if input = secret then print_string "Правильно! Ви вгадали.\n"
else if input < secret
then print_and_wait "Ні, занадто маленьке\n"
else print_and_wait "Ні, занадто велике\n"
and print_and_wait x = print_string x; wait ()
in
print_and_wait "
Запрошуємо до гри \"Вгадай число\", написаної на OCaml!
Я тільки що загадав число у межах [0..100]
і тобі треба постаратись його відгадати. Щасти!\n" ;;
OCaml є мовою програмування загального призначення, однак, до найвідоміших її застосувань належать:
- Доведення теорем (Coq, HOL Light, MetaPRL[недоступне посилання], Darwin)
- Аналіз програм (CIL, C Code Analyzer [Архівовано 9 жовтня 2006 у Wayback Machine.], Astre'e [Архівовано 11 квітня 2004 у Wayback Machine.], RopasWork[недоступне посилання з червня 2019])
- Розробка компіляторів (компілятор OCaml, Felix [Архівовано 21 листопада 2006 у Wayback Machine.], MTASC, haXe, Opa)
- Домашня сторінка [Архівовано 16 лютого 2011 у Wayback Machine.](англ.)
- Підручник для початківців [Архівовано 9 серпня 2006 у Wayback Machine.](англ.)
- Останній зареєстрований проєкт на SourceForge на Ocaml[недоступне посилання з лютого 2019]
- Мови програмування
- Функціональні мови програмування
- Імперативні мови програмування
- Сімейство мов програмування ML
- Статично-типізовані мови програмування
- Вільні компілятори та інтерпретатори
- Багатоплатформне вільне програмне забезпечення
- Мови програмування зі співставленням з шаблоном
- Статті з прикладами коду мовою OCaml