OCaml (о-ка-ем-ель, англ. Objective Caml) — одна із реалізацій мови програмування Caml. Розширює базові можливості мови Caml об'єктно-орієнтованими можливостями.
Objective Caml | |
---|---|
Парадигма | : імперативна, функціональна, об'єктно-орієнтована |
Дата появи | 1996 |
Творці | d і d |
Розробник | INRIA |
Останній реліз | 4.06 (3 листопада 2017 ) |
Система типізації | вивід типів, статична, строга типізація і d |
Діалекти | |
Під впливом від | , Standard ML |
Мова реалізації | Objective Caml і C |
Операційна система | Cross-platform |
Ліцензія | Q Public License (компілятор) LGPL (бібліотека) |
Звичайні розширення файлів | .ml або .mli |
Вебсайт | http://caml.inria.fr/ |
|
До набору інструментів OCaml належить інтерактивний інтерпретатор, компілятор в байт-коди, та оптимізувальний компілятор у машинні коди. OCaml має велику стандартну бібліотеку, яка робить його прийнятним для багатьох застосувань, аналогічним застосуванням Python або Perl, та потужні конструкції модульного та об'єктно-орієнтованого програмування, які роблять його прийнятним для розробки великих систем.
OCaml є наступником . Скорочення 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 World
Наступна програма 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, , MetaPRL[недоступне посилання], )
- (, C Code Analyzer [ 9 жовтня 2006 у Wayback Machine.], Astre'e [ 11 квітня 2004 у Wayback Machine.], RopasWork[недоступне посилання з червня 2019])
- Розробка компіляторів (компілятор OCaml, Felix [ 21 листопада 2006 у Wayback Machine.], MTASC, haXe, )
Зноски
Посилання
- Домашня сторінка [ 16 лютого 2011 у Wayback Machine.](англ.)
- Підручник для початківців [ 9 серпня 2006 у Wayback Machine.](англ.)
- Останній зареєстрований проект на SourceForge на Ocaml[недоступне посилання з лютого 2019]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
OCaml o ka em el angl Objective Caml odna iz realizacij movi programuvannya Caml Rozshiryuye bazovi mozhlivosti movi Caml ob yektno oriyentovanimi mozhlivostyami Objective CamlParadigma imperativna funkcionalna ob yektno oriyentovanaData poyavi 1996Tvorci d i dRozrobnik INRIAOstannij reliz 4 06 3 listopada 2017 6 rokiv tomu 2017 11 03 Sistema tipizaciyi vivid tipiv statichna stroga tipizaciya i dDialektiPid vplivom vid Standard MLMova realizaciyi Objective Caml i COperacijna sistema Cross platformLicenziya Q Public License kompilyator LGPL biblioteka Zvichajni rozshirennya fajliv ml abo mliVebsajt http caml inria fr Mediafajli u Vikishovishi Do naboru instrumentiv OCaml nalezhit interaktivnij interpretator kompilyator v bajt kodi ta optimizuvalnij kompilyator u mashinni kodi OCaml maye veliku standartnu biblioteku yaka robit jogo prijnyatnim dlya bagatoh zastosuvan analogichnim zastosuvannyam Python abo Perl ta potuzhni konstrukciyi modulnogo ta ob yektno oriyentovanogo programuvannya yaki roblyat jogo prijnyatnim dlya rozrobki velikih sistem OCaml ye nastupnikom Skorochennya CAML oznachaye Categorical Abstract Machine Language hocha OCaml ne vikoristovuye cej abstraktnij avtomat FilosofiyaOCaml ob yednuye funkcionalnij imperativnij ta ob yektno oriyentovanij stili programuvannya pid dahom ML podibnoyi sistemi tipiv Statichna sistema tipiv OCaml usuvaye velikij klas pomilok programuvannya yaki mozhut viklikati problemi pid chas vikonannya programi Odnak vona takozh primushuye programista vrahovuvati obmezhennya sistemi tipiv sho mozhe potrebuvati velikoyi uvagi Kompilyator z vivedennyam tipiv znachnoyu miroyu zmenshuye potrebu v ruchnomu poznachenni tipiv napriklad tip danih zminnih ta pidpisi funkcij yak pravilo vkazuvati ne treba na vidminu vid movi programuvannya Java Tim ne mensh efektivne vikoristannya sistemi tipiv OCaml mozhe vimagati pevnoyi gnuchkosti z boku rozrobnika OsoblivostiDo osoblivostej OCaml nalezhit statichna sistema tipiv vivedennya tipiv hvostova rekursiya zamikannya pershogo rivnya z pidtrimkoyu v leksici movi funktori parametrizovani moduli obrobka vinyatkiv ta avtomatichne pribirannya pam yati Prikladi koduNajkrashij sposib vivchennya vihidnih tekstiv program na OCaml ye obrobka interpretatorom v rezhimi verhnogo rivnya Cej rezhim ye inetraktivnim seansom roboti z interpretatorom OCaml yakij vidobrazhaye vivedeni tipi rezultativ abo vvedenih viraziv Interpretator v rezhimi verhnogo rivnya zapuskayetsya programoyu ocaml ocaml Objective Caml version 3 09 0 Pislya cogo mozhna vvoditi kod v ryadku zapitu yakij pochinayetsya na Napriklad dlya obchislennya 1 2 3 1 2 3 int 7 OCaml robit visnovok sho tip virazu maye buti int mashinne cile ta vivodit rezultat 7 Hello World Nastupna programa hello ml print endline Hello world mozhe buti skompilovana v bajt kodi ocamlc hello ml o hello ta vikonana hello Hello world Algoritm Evklida Rekursivna funkciya dlya obchislennya najbilshogo spilnogo dililnika za algoritmom Evklida matime viglyad 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 Gra Vgadaj chislo OCaml poziciyuyetsya yak mova zagalnogo priznachennya tomu na nij mozhna pisati programi ne tilki z naukovimi cilyami let secret Random int 100 in let rec wait print string Vasha propoziciya analyze read int and analyze input if input secret then print string Pravilno Vi vgadali n else if input lt secret then print and wait Ni zanadto malenke n else print and wait Ni zanadto velike n and print and wait x print string x wait in print and wait Zaproshuyemo do gri Vgadaj chislo napisanoyi na OCaml Ya tilki sho zagadav chislo u mezhah 0 100 i tobi treba postaratis jogo vidgadati Shasti n ZastosuvannyaOCaml ye movoyu programuvannya zagalnogo priznachennya odnak do najvidomishih yiyi zastosuvan nalezhat Komp yuterni nauki Dovedennya teorem Coq MetaPRL nedostupne posilannya C Code Analyzer 9 zhovtnya 2006 u Wayback Machine Astre e 11 kvitnya 2004 u Wayback Machine RopasWork nedostupne posilannya z chervnya 2019 Rozrobka kompilyatoriv kompilyator OCaml Felix 21 listopada 2006 u Wayback Machine MTASC haXe Znoskihttp caml inria fr ocaml release en htmlPosilannyaDomashnya storinka 16 lyutogo 2011 u Wayback Machine angl Pidruchnik dlya pochatkivciv 9 serpnya 2006 u Wayback Machine angl Ostannij zareyestrovanij proekt na SourceForge na Ocaml nedostupne posilannya z lyutogo 2019