- OCaml
-
Objective Caml Семантика: мультипарадигменный: функциональный, объектно-ориентированный, императивный
Автор(ы): Релиз: Типизация данных: Диалекты: Испытал влияние: Standard ML, Caml Light
Сайт: OCaml — современный объектно-ориентированный язык функционального программирования общего назначения, который был разработан с учётом безопасности исполнения и надёжности программ. Этот язык имеет высокую степень выразительности, что позволяет его легко выучить и использовать. Язык CaML поддерживает функциональную, императивную и объектно-ориентированную парадигмы программирования. Был разработан в 1985 году во французском институте INRIA, который занимается исследованиями в области информатики. Самый распространённый в практической работе диалект языка ML.
Инструментарий OCaml включает в себя интерпретатор, компилятор в байткод и оптимизирующий компилятор в машинный код, превосходящий по своим параметрам аналогичные компиляторы C/C++ для многих задач, особенно связанных с синтаксическим анализом и т. п.
На языке OCaml, в частности, написан рендеринг формул Википедии, использующих тег <math>, файлообменный клиент 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
и запущена:
$ ./hello Hello World! $
Вычисление суммы элементов списка
Список является одним из основных типов данных в 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
Литература
Для улучшения этой статьи по информационным технологиям желательно?: - Дополнить статью (статья слишком короткая либо содержит лишь словарное определение).
- Найти и оформить в виде сносок ссылки на авторитетные источники, подтверждающие написанное.
- Проставив сноски, внести более точные указания на источники.
Основные языки программирования (сравнение • IDE • история • хронология) Используемые
в разработкеАда • APL • Язык ассемблера • ActionScript • ABAP/4 • AutoIt • AWK • Бейсик • Си • Кобол • C++ • C# • Cω • Clarion • Clojure • ColdFusion • Common Lisp • D • dBase • Delphi • Eiffel • Erlang • Euphoria • F# • Форт • Фортран • Gambas • Go • Groovy • HAL/S • Haskell • Icon • Java • JavaScript • Limbo • Lua • Модула-3 • Object Pascal • Objective-C • OCaml • Oz • Parser • Паскаль • Компонентный Паскаль • Perl • PHP • PowerBASIC • Python • ПЛ/1 • Пролог • Ruby • Scala • Scheme • Smalltalk • SQL • PL/SQL • Tcl • Vala • Visual Basic (.NET)
Академические IEC 61131-3 Instruction List • ST • FBD • Ladder Diagram (LD) • SFC
Прочие Эзотерические Визуальные Категории:- Языки программирования по алфавиту
- Объектно-ориентированные языки программирования
- Языки программирования семейства ML
- Свободные компиляторы и интерпретаторы
Wikimedia Foundation. 2010.