Недавно "в целях повышения образованности" взялся за изучение OCaml. Язык очень понравился, прямо такой хитрый и умный питон с компиляцией. И вот интересно стало, а почему он не взлетел и не стал одним из мейнстримовых языков? Чисто функциональным его не назовёшь, императивное программирование в нём есть, при этом порядок вычислений в нём прямой, а не ленивый, т.е. всегда можно предсказать, в каком порядке будут выполняться команды. Вывод типов — просто замечательная идея. Но при всех этих прекрасных характеристиках в мейнстриме его нет, ну разве что в виде F#, но это совсем недавно. Так почему он не отвоевал своё место под солнцем?
Здравствуйте, LaptevVV, Вы писали:
LVV>Опередил свое время?
Не знаю. LISP вот он опередил время, не было мощной техники для выполнения динамического кода. А вот OCaml очень прагматичен. И опять же повторю, у него не чисто функциональная парадигма, возможность писать императивный код у него есть.
Он же зарождался на вашей памяти, может помните что-то из событий того времени?
LVV>>Опередил свое время? M>Не знаю. LISP вот он опередил время, не было мощной техники для выполнения динамического кода. А вот OCaml очень прагматичен. И опять же повторю, у него не чисто функциональная парадигма, возможность писать императивный код у него есть. M>Он же зарождался на вашей памяти, может помните что-то из событий того времени?
Ну, 85 год — рождение...
Мы слыхали только о нем. А потом начался Горбачев и стало не до интересных дел в программировании...
Про ML я узнал много позже из биографии Вирта.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, monax, Вы писали:
M>Недавно "в целях повышения образованности" взялся за изучение OCaml.
Думаю что основная причина – он никому не нужен. Он не привносит ничего особого, при этом довольно сложен и (в стародавние времена, может что-то уже и изменилось) однопоточен. Единственное где он вроде как обоснованно прижился – прототипы/первые версии компиляторов.
Здравствуйте, kaa.python, Вы писали:
KP> Он не привносит ничего особого, при этом довольно сложен и (в стародавние времена, может что-то уже и изменилось) однопоточен. Единственное где он вроде как обоснованно прижился – прототипы/первые версии компиляторов.
Автоматический вывод типов при статической типизации — это очень неплохо. По сути, пишешь на нём, как на питоне, а он сам за тебя типы ищет. Сложность — возможно, мне сложно сказать, как бы я на него отреагировал лет пять назад, а сейчас у меня уже хватает опыта, чтобы брать любой язык и просто изучать его. Однопоточность не порок, что успешно доказано питоном. Есть огромное пространство задач, в которых многопоточность не является необходимостью. А параллельная обработка данных на уровне процессов в окамле возможна.
Мне пока только бедность стандартной библиотеки кажется весомым аргументом, но уже давно есть Core.
Здравствуйте, monax, Вы писали:
M>Недавно "в целях повышения образованности" взялся за изучение OCaml. Язык очень понравился, прямо такой хитрый и умный питон с компиляцией. И вот интересно стало, а почему он не взлетел и не стал одним из мейнстримовых языков? Чисто функциональным его не назовёшь, императивное программирование в нём есть, при этом порядок вычислений в нём прямой, а не ленивый, т.е. всегда можно предсказать, в каком порядке будут выполняться команды. Вывод типов — просто замечательная идея. Но при всех этих прекрасных характеристиках в мейнстриме его нет, ну разве что в виде F#, но это совсем недавно. Так почему он не отвоевал своё место под солнцем?
Здравствуйте, monax, Вы писали:
M>Автоматический вывод типов при статической типизации — это очень неплохо. По сути, пишешь на нём, как на питоне, а он сам за тебя типы ищет.
"Автоматический вывод типов при статической типизации" есть в C++ — получается
Здравствуйте, LaptevVV, Вы писали:
LVV>Опередил свое время?
Не опередил, а отвлёкся.
Французы — извращенцы, сначала форкнули SML, потом начали пихать в него всякие интересные фичи, причём с совершенно эклектичным синтаксисом, причём без оглядки на инфраструктуру и сообщество.
Если поискать язык со схожим уровнем разнопарадигменности и эклектики, — то, пожалуй, это С++. Но за С++ стоит долгая история и большущее сообщество сишников и плюсовиков.
Если другие ML, — F#, за которым стоит микрософт и совместимость с прочим дотнетом.
А прикольная говорящая лягушка никому особо не нужна.
open Core.Std;;
let add x y =
x + y
;;
let sub x y =
x - y
;;
let apply f l =
f(l)
;;
let () =
printf "%d\n" (apply apply apply add 1 2);
printf "%d\n" (apply apply sub 11 2);
;;
Плюсы же нужно каждый раз просить (auto), чтобы он типы вывел. Ещё интересно было бы сравнить время появления автоматического вывода типов в плюсах и окамле.
Здравствуйте, Кодт, Вы писали:
К>Не опередил, а отвлёкся. К>Французы — извращенцы, сначала форкнули SML, потом начали пихать в него всякие интересные фичи, причём с совершенно эклектичным синтаксисом, причём без оглядки на инфраструктуру и сообщество.
Здравствуйте, monax, Вы писали:
M>Недавно "в целях повышения образованности" взялся за изучение OCaml. Язык очень понравился, прямо такой хитрый и умный питон с компиляцией. И вот интересно стало, а почему он не взлетел и не стал одним из мейнстримовых языков? Чисто функциональным его не назовёшь, императивное программирование в нём есть, при этом порядок вычислений в нём прямой, а не ленивый, т.е. всегда можно предсказать, в каком порядке будут выполняться команды. Вывод типов — просто замечательная идея. Но при всех этих прекрасных характеристиках в мейнстриме его нет, ну разве что в виде F#, но это совсем недавно. Так почему он не отвоевал своё место под солнцем?
Ну, скажем так, я бы не стал использовать OCaml в промышленном коде по следующим причинам:
1. У него недостаточно развитая экосистема
2. Нет внятных гарантий стабильности языка. Следующая версия компилятора может перестать компилировать существующий код
3. Если Inria бросит им заниматься, язык умрет
Здравствуйте, novitk, Вы писали:
N>Не есть, а появился 20 лет спустя. Вопрос, как я понимаю, про "тогда",
Именно. Т.е. не почему он сейчас не взлетает, тут понятно, его обогнали по ряду параметров (сообщество, экосистема), и его никто не толкает.
N>сейчас OCaml совсем не нужен.
Нужен. Такие как OCaml, LISP, Haskell — это ж кладезь мудрости для программистов. Из этих языков постоянно что-то вытаскивают в мейнстримовые, от чего последние становятся лучше.
Здравствуйте, monax, Вы писали:
M>Плюсы же нужно каждый раз просить (auto), чтобы он типы вывел.
Чем это принципиально отличается от необходимости писать let?
Здравствуйте, monax, Вы писали:
N>>сейчас OCaml совсем не нужен.
M>Нужен. Такие как OCaml, LISP, Haskell — это ж кладезь мудрости для программистов. Из этих языков постоянно что-то вытаскивают в мейнстримовые, от чего последние становятся лучше.
Ключевое слово "сейчас".
В 96-ом был нужен, сейчас нет. Сейчас с ним возиться смысла нет, лучше сразу взять Хаскель или Скалу/Ф#.
Здравствуйте, monax, Вы писали:
К>>Французы — извращенцы, сначала форкнули SML, потом начали пихать в него всякие интересные фичи, причём с совершенно эклектичным синтаксисом, причём без оглядки на инфраструктуру и сообщество. M>Например?
Например, синтаксис модулей, объектов и полиморфных вариантов. Как будто три разных команды придумывали.
Здравствуйте, DarkEld3r, Вы писали:
DE>Здравствуйте, monax, Вы писали:
M>>Плюсы же нужно каждый раз просить (auto), чтобы он типы вывел. DE>Чем это принципиально отличается от необходимости писать let?
По ссылке от Evgeny.Panasyuk гораздо больше auto, чем у меня let. Да и разные это вещи в принципе, если уж на то пошло.
Здравствуйте, novitk, Вы писали:
N>Здравствуйте, monax, Вы писали:
N>>>сейчас OCaml совсем не нужен.
M>>Нужен. Такие как OCaml, LISP, Haskell — это ж кладезь мудрости для программистов. Из этих языков постоянно что-то вытаскивают в мейнстримовые, от чего последние становятся лучше.
N>Ключевое слово "сейчас". N>В 96-ом был нужен, сейчас нет. Сейчас с ним возиться смысла нет, лучше сразу взять Хаскель или Скалу/Ф#.
Хаскель другой совсем. Насколько я понял, ленивые вычисления в хаскеле ломают людям голову, потому что заставить его создать side-effect сложно. Впрочем, это пока только по отзывам, изучать его пока не довелось.
Скалу смотрел 4-5 лет назад. Прочитал книгу по скале. Она меня тогда поразила своей крутостью, ну прямо в самое сердце. Даже специальные ключевые слова для описания примесей у них были. А потом я подождал пару недель и попробовал сделать понравившееся в родном питоне. Вот тут на скалу стал смотреть иначе, сдержаннее. А ещё JVM меня тогда отпугнула. Но с тех пор прошло много времени, и на скалу нужно заходить по-новой.
F# — это, считай, OCaml. Только они добавили туда null и связали с .net. Вроде как люди приглядываются и даже пользуются, но для меня есть большой недостаток — MS. Т.е. под линухом я это никак не заведу (моно не в счёт, это странное явление), а под линухом я как раз и работаю. Так что для перехода на F# должно произойти что-то неординарное, чтобы я плюнул на все знания в линух-экосистеме и перешёл в дотнет. Тут либо мне нужно будет выполнять задачу, которая вот 100% хорошо ложится на виндовс+дотнет, но совсем не ложится на линух+окамл, либо F# должен дать мне такие дикие преимущества, что без него никак. Но этого не будет, да и окамл — это "в целях повышения образованности", на прод его тащить пока не собирался.