Почему OCaml не "выстрелил"?


#1

Выцепил несколько серий сообщений из телеграма на тему OCaml’а и его популярности в контексте того, что по примерно такой же схеме и шум-поплуярность раста через пару лет пройдут. Может кому интересно полистать будет или есть чем дополнить. :slight_smile:

Alexander:
Вот, вспомнил - ocaml, на старте был вообще огонь язык. Вот это точное зеркало из прошлого раста.

Andrey @ozkriff Lesnikov:
я бы даже окамль одним из родителей раста называл. но он, как минимум, рантаймом толстоват.

и с окамлом, насколько я представляю, была сильная беда что в годы, когда у него реально была какая-то инерция, у него экосистемы никакой не было практической. даже на уровне текущего crates.io . Ну и вечно избегающий успеха хаскель окамлу попортил репутацию.

Alexander:
Ну что вы мешаете всё в кучу, ну зачем про крейта писать, когда в те времена это мало вообще кого интересовало. И кстати что-то вроде крейтса для него было очень давно, но конечно не в таком виде. Это никак не повлияло. У него был огненный сборщик, но его не смотри на мультредовость разнести - это был первый удар по нему.

Andrey @ozkriff Lesnikov:
Точно мало кого интересовало? На сях-плюсах была куча готовых библиотек уже, а тут все самому писать надо было - важный экономический фактор жеж.

Ну т.е. ты уверен что плюсы с нами навсегда и никто никогда их не подвинет из текущих обширных ниш, потому что замены нет. Может и так получится, а будущая смерть раста навсегда отпугнет все попытки “убить плюсы”, но это такое ужасное будущее, что надо прямо сейчас начинать изобретать машину времени, что бы грохнуть страуструпа в молодости. И Айка прихватить между делом.

Alexander:
На окамле было норм библиотек и биндинги простые очень.

Andrey @ozkriff Lesnikov:
Это расходится с моей картиной мира. Может ошибаюсь, не кинешься ссылками на сравнение состояния экосистем до 2000 года? Я так сходу нагуглить не могу ничего более-менее точного.

Alexander:
Я поищу, но тоже хз. Просто у меня он был тогда в проде, я протащил его на один проект, который на плюсах сначала писался, и помню падал постоянно. Особенность окамла была - скорость огромная и гц очень быстрый при этом тоже, те реально заменой плюсов его пророчили тоже. Хотя тогда плюсы были популярнее конечно.

<…> Я сам надеюсь что такого не будет, но просто описал один из сценариев развития. Но вот окамл - хороший пример все же выплыл.


Andrey @ozkriff Lesnikov:
Про экосистему окамла без конкретики рассуждать сложно, а вот вшитиый в язык гц, пускай и очень быстрый, это “сразу нафиг” от 90% плюсовиков, которые даже разбираться дальше не станут. Т.е. это даже не так что бы реальный фактор, скорее рекламно-репутационно-психологический. Положение раста в этом плане меня несколько обнадеживает.

Alexander:
Тогда бенчил окамл и он плюсы обгонял, не говоря о всяких бустах. Он реально был в лиге первых по производительности, как и Раст сейчас. Кстати на нём и игры писать начинали и они не тормозили.

Andrey @ozkriff Lesnikov:
производительность кода и его предсказуемость таки несколько разные вещи. с гц второе обычно сильно страдает. ну и, как сказал, это уже фактический аргумент, который не факт что на эмоциональном уровне плюсовикам убедителен будет)

а что за игры с ядром на окамле кинешься ссылками? я не в теме.

Alexander:
Это было я боюсь вспомнить сколько денег назад, 10-12 минимум!
Я знаю что оно как бы теоретичечки так, но практически окамл имел очень интересный сборщик.


@larhat:
у окамла с предсказуемостью всё ок

Andrey @ozkriff Lesnikov:
кинешься ликбезом на тему?

Ну и в целом, если кто знает хорошие ссылки на тему “почему ocaml не ‘выстрелил’?” тоже киньтесь почитать, пожалуйста.

@larhat:
да в реал ворлд окамле хотя бы –
гц простой у окамла достаточно и компилятор тоже весьма тупой и генерит понятный асм

Andrey @ozkriff Lesnikov:
ссылки попозже почитаю детально, но по беглому просмотру чего-то принципиально решающего проблемы встраивания ocaml библиотек в неродное окружение и меньшей (по сравнению с RAII всякими) предсказуемости не увидел.


@freecoder:
Я не знаю OCaml, но предположу, что он просто опередил свое время. Не попал в тренд. А Rust, я думаю, попадает.

У OCaml синтаксис более академический, и на мой взгляд еще менее понятный, чем растовский. Без острой необходимости в повышении производительности и переходить со всяких Java не понятно, зачем.

  • еще нужно знать, что там в OCaml с модульной системой. Насколько легко создавать “кирпичи” и потом из них что-то складывать. Где-то начиная с 2000-х это одно из решающих свойств, я считаю.

Andrey @ozkriff Lesnikov:
модули о окамла точно божественные. навороченней растовых.

@freecoder:
Значит придерживаюсь пока старой позиции: опередил свое время + взрывной синтаксис. С последним можно было бы и смириться, если бы не первое (то есть если бы не отсутствие острой практической необходимости брать что-то вне тогдашнего мейнстрима).Значит придерживаюс
Теперь постепенно OCaml перетащат в Rust )

Andrey @ozkriff Lesnikov:
Так-то изначальный дизайн Раста и правда наамного ближе к окамлу был, чем к теперяшнему расту.

https://www.youtube.com/watch?v=79PSagCD_AY

@freecoder:
Нужен был мост, переходный вариант от Си. Им и стал Rust :slight_smile:


@savant_d:
ML-языки очень долго оставались игрушкой для чучоных и дальше их среды не выходили. Конкретно с окамлом проблема ещё в том, что они его только последние пару лет начали учить нормальной многопоточности, чтобы потоки работали параллельно, что ставило крест на применении в чём-то многоядерном. Плюс некоторая непривычность языка и ломающие мозг модули, хотя по раскумару кажется прикольной штукой

плюс у окамла родовая травма в виде отдельных операндов для операций с плавающей точкой. Ну и рантайм который надо за собой таскать.

А так, лично мне знакомство с окамлом сильно упростило вкатывание в концепт раста
тому что ноги растут из одних идей, к расту ещё прикрутили бороучекер и оторвали модули и объекты

объекты не особо жалко, они и в окамле сбоку бантик ИМХО


#2

Резюмирую проблемы OCaml:

  1. Отсутствие нормальной многопоточности.
  2. Наличие GC (пусть и производительного).
  3. Непривычный “академический” синтаксис.
  4. Мощная, но сложная система модулей.
  5. “Родовая травма в виде отдельных операндов для операций с плавающей точкой”, что бы это ни значило.
  6. Просто не попал в мейнстрим.

#3

На всякий случай скажу что OCaml таки жив и на нём есть очень крутые проекты, активно развивающиеся. Например Haxe - компилятор и кросскомпилятор с мощным статическим анализом.


#4

Тут, конечно, надо учитывать что термины вроде “язык выстрелил”, “язык жив”, “убийца плюсов” и т.п. очень-очень размытые (т.е. у каждого в голове отличающееся определение есть). :slight_smile:

Мой контекст всего понадерганного из чатов выше: сможет ли раст когда-нибудь добраться до уровня популярности того же свифта (хоть по гуглтрендам) за счет каннибализации плюсовиков. Вроде как, OCaml в конце 90х и начале 2000х претендовал на подобное, но не сложилось. Почему так и какие выводы можно из этого сделать про Раст?


#5

На мой взляд, пример Окалма говорит о том, что какой бы ЯП ни был “хорошим” (субъективно конечно), он вряд ли выживет без поддержки “некоторого производителя” (бизнеса) в какой то момент/период.
Но с другой стороны “поддержка произ-ля” тоже не означает успешность языка в бизнесе и у коммьюнити, сколько “денег не вливай”.


#6
  1. Многопоточность тогда была вообще не на слуху, сейчас её уже завезли, но яне особо в курсе текущей ситуации. Основная претензия к ocaml при завозе многопоточности была как раз в том, что gc с ней немного не в ладах был, но вроде исправляли. Я к тому, что врядли какой-то важный аргумент на тот момент.
  2. Наличие GC это не только минус, но и плюс, на ocaml можно было легко писать бизнес-логику, что на раст затруднительно, при этом он всё же был очень быстрым для требовательных вещей, помню, что иногда он в бенчмарках и плюсы обгонял.
  3. окамл имеет ML синтаксис, котором уже много лет и который расплылся по многим языкам и даже привычен для тех кто писал на паскале (а тогда было много) + он довольно простой.
  4. в модулях ocaml’а не было ничего сложного, были так называемые функторы (модули параметрические), но их знание было необязательным.
  5. это даже не травма, а довольно удобно было, а вот с print была проблема - для этого был довольно сложный хак.

#7

Хм, а тут поясни. У паскаля-модулы-оберона прям “классический” алголовский синтаксис, как он с ML-синтаксисом связан? Грамматики, вроде бы, вообще разные. Мне в голову только приходит что некоторые ключевые слова пересекаются.


#8

Промелькнуло в /r/rust:

и там, кроме кучи коментов, есть ссылка на точку зрения с другой стороны забора:


#9

Я признаться не особо в истории синтаксисов ориентируюсь, но вот: http://www.cs.uccs.edu/~qyi/UTSA-classes/cs3723/slides/ML.pdf

На вид выглядит, как pascal + функциональщина и получился ML. Я pascal особо не помню, но метров с 5ти на экране вполне похож на ML :slight_smile: