OCaml | это... Что такое OCaml? (original) (raw)
Objective Caml
![]() |
|
---|---|
Семантика: | мультипарадигменный: функциональный, объектно-ориентированный, императивный |
Автор(ы): | INRIA |
Релиз: | 4.00.1 (5 октября 2012) |
Типизация данных: | строгая, статическая |
Диалекты: | F#, JoCaml, MetaOCaml, OcamlP3l |
Испытал влияние: | Standard ML, Caml Light |
Сайт: | caml.inria.fr |
OCaml — современный объектно-ориентированный язык функционального программирования общего назначения, который был разработан с учётом безопасности исполнения и надёжности программ. Этот язык имеет высокую степень выразительности, что позволяет его легко выучить и использовать. Язык CaML поддерживает функциональную, императивную и объектно-ориентированную парадигмы программирования. Был разработан в 1985 году во французском институте INRIA, который занимается исследованиями в области информатики. Самый распространённый в практической работе диалект языка ML.
Инструментарий OCaml включает в себя интерпретатор, компилятор в байткод и оптимизирующий компилятор в машинный код, превосходящий по своим параметрам аналогичные компиляторы C/C++ для многих задач, особенно связанных с синтаксическим анализом и т. п.
На языке OCaml, в частности, написан рендеринг формул Википедии, использующих тег , файлообменный клиент MLDonkey, стек управления гипервизором Xen xapi (является частью Xen Server/Xen Cloud Platform), язык программирования HaXe.
К достоинствам языка относят:
- строгую типизацию;
- развитую систему модулей;
- автоматическую сборку мусора;
- эффективность;
- кроссплатформенность.
Содержание
Примеры исходного текста на OCaml
Запуск интерпретатора OCaml
Для запуска интерпретатора языка OCaml необходимо в консоли ввести следующую команду:
$ ocaml Objective Caml version 3.09.0 #
Теперь можно вводить различные выражения, которые интерпретатор будет считывать, вычислять и выводить результат на экран:
1 + 2 * 3;;
- : int = 7
Hello world
Следующая программа "hello.ml":
print_endline "Hello World!"
может быть скомпилирована либо в байт-код:
$ ocamlc hello.ml -o hello
либо в оптимизированный нативный код:
$ ocamlopt hello.ml -o hello
и запущена:
Вычисление суммы элементов списка
Список является одним из основных типов данных в OCaml. Следующий пример кода определяет рекурсивную (обратите внимание на ключевое слово rec) функцию, которая перебирает элементы данного списка и возвращает их сумму.
let rec sum xs = match xs with | [] -> 0 | x :: xs' -> x + sum xs'
sum [1;2;3;4;5];;
- : int = 15
Другой способ подсчета суммы заключается в использовании функции свёртки:
let sum xs = List.fold_left (+) 0 xs
sum [1;2;3;4;5];;
- : int = 15
Быстрая сортировка
В следующем примере приведен алгоритм быстрой сортировки, который сортирует список в порядке возрастания:
let rec qsort = function | [] -> [] | pivot :: rest -> let is_less x = x < pivot in let left, right = List.partition is_less rest in qsort left @ [pivot] @ qsort right
Последовательность Фибоначчи
let rec fib_aux n a b = match n with | 0 -> a | _ -> fib_aux (n - 1) (a + b) a let fib n = fib_aux n 0 1
Примечания
Ссылки
- Официальный сайт языка OCaml (англ.)
- Сайт OCaml Community (англ.)
- Сайт Gerd Stolpmann’a, посвященный OCaml (англ.)
- Перевод документации на русский язык
- Перевод на русский язык книги Oreilly DAOC