OCaml
![]() |
|
| Семантика: |
мультипарадигменный: функциональный, объектно-ориентированный, императивный |
|---|---|
| Автор(ы): | |
| Релиз: | |
| Типизация данных: | |
| Диалекты: | |
| Испытал влияние: | |
| Сайт: | |
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 |
| Прочие | |
| Эзотерические | |
| Визуальные | |
