Re[8]: Почему не взлетел OCaml?
От: novitk США  
Дата: 02.02.16 21:57
Оценка:
Здравствуйте, monax, Вы писали:

M>Хаскель другой совсем. Насколько я понял, ленивые вычисления в хаскеле ломают людям голову, потому что заставить его создать side-effect сложно. Впрочем, это пока только по отзывам, изучать его пока не довелось.

Если ты хочешь не "ломки головы", а максимальной продуктивности, то я советую остаться на Питоне. Динамика до сих пор рулит, хотя разрыв и сокращается.

M> Но с тех пор прошло много времени, и на скалу нужно заходить по-новой.

Скала — плохой язык. Хаскель лучше и намного, но она лучшее из применимого на практике.
Re[8]: Почему не взлетел OCaml?
От: Кодт Россия  
Дата: 02.02.16 23:15
Оценка: 2 (1)
Здравствуйте, monax, Вы писали:

M>Хаскель другой совсем. Насколько я понял, ленивые вычисления в хаскеле ломают людям голову, потому что заставить его создать side-effect сложно. Впрочем, это пока только по отзывам, изучать его пока не довелось.


Хаскелл тщательно выдерживается в духе чистоты. И является платформой для экспериментов над абстракциями — будь то типы, алгебраические структуры, какие-то ещё идеи. Платформой, в том числе, отвечающей на вопрос: а можно ли всё это потянуть компилятором?
Ленивость или энергичность, тут дело выбора, сделанного единожды. Хаскелл пошёл ленивым путём, ML и идрис — энергичным (причём не наобум, а глубоко завязанно на суть языка).

Перед эклектическими языками у хаскелла именно его стройность является достоинством.


M>Скалу смотрел 4-5 лет назад. Прочитал книгу по скале. Она меня тогда поразила своей крутостью, ну прямо в самое сердце. Даже специальные ключевые слова для описания примесей у них были. А потом я подождал пару недель и попробовал сделать понравившееся в родном питоне. Вот тут на скалу стал смотреть иначе, сдержаннее. А ещё JVM меня тогда отпугнула. Но с тех пор прошло много времени, и на скалу нужно заходить по-новой.


M>F# — это, считай, OCaml. Только они добавили туда null и связали с .net. Вроде как люди приглядываются и даже пользуются, но для меня есть большой недостаток — MS. Т.е. под линухом я это никак не заведу (моно не в счёт, это странное явление), а под линухом я как раз и работаю. Так что для перехода на F# должно произойти что-то неординарное, чтобы я плюнул на все знания в линух-экосистеме и перешёл в дотнет. Тут либо мне нужно будет выполнять задачу, которая вот 100% хорошо ложится на виндовс+дотнет, но совсем не ложится на линух+окамл, либо F# должен дать мне такие дикие преимущества, что без него никак. Но этого не будет, да и окамл — это "в целях повышения образованности", на прод его тащить пока не собирался.


Прикладные языки всегда разрабатываются с оглядкой на среду исполнения.
А среда — это ещё и интерфейсы операционной системы, например.

Если ОС преимущественно на сишных вызовах, то в языке должен быть способ более-менее дёшево — и более-менее целостно, с т.з. языка, — работать с бинарными структурами и примитивными типами. Либо смириться с тем, что переходники будут корявые и неэффективные (например, вручную собирать-разбирать массивы байтов) либо написанные на си. Но тогда модель данных языка должна более-менее дёшево кодироваться на си, чтобы клей "с той стороны" не выглядел столь же ужасно.

Либо, в конце концов, просто наплевать на эффективность. Как это делается хоть в питоне, хоть в хаскелле.

Если среда — ООП в стиле явы или дотнета, то — так или иначе, но нужно, чтобы были классы и методы, совместимые с явой или дотнетом.
Отсюда и null как примитив, и односторонний вывод типов в определённых условиях (иначе ни ООП-полиморфизм, ни перегрузку методов не обеспечить), и дженерики как довольно специфический и узкий способ параметризации типов...
Поэтому — за скалу не скажу, а F# отошёл от идей чистоты ML, повыкидывав из окамла много того, что не вписывалось. А в дальнейшем приобретя многое другое.
Так что говорить, что F# это окамл плюс дорогущий рантайм, — это не совсем так.

А что касается портированных рантаймов, — ну так и ява-приложения запускаются и выглядят одинаково (чужеродно) на всех платформах. Дотнет хотя бы на винде выглядит органично.
Инсталлировать рантайм с каждым приложением сейчас нужды нет: в линуксе вайн и моно в репозиториях валяются, менеджером пакетов по зависимостям подтягиваются.
В отличие от того же окамла, где каждое приложение — это как бизибокс, всё своё прилинковал с собой.

Есть ещё вариант — сделать свой собственный рантайм, возможно, очень компактный. Ну и получим смолток, ещё-одну-какую-нибудь-яву, или вообще луа (вот уж рекордсмен по компактности рантайма). Ах да, — это всё не ФП было. Пример из ФП — это, конечно же, лисп.
А потом всё равно заморочимся по связыванию с внешним миром через биндинги, маршаллинг или добавление в язык изначально несвойственных фич.
Перекуём баги на фичи!
Re[4]: Почему не взлетел OCaml?
От: uncommon Ниоткуда  
Дата: 02.02.16 23:49
Оценка: :))
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>"Автоматический вывод типов при статической типизации" есть в C++ — получается
Автор: Evgeny.Panasyuk
Дата: 07.06.15
именно как на Python'е.


auto надо на let заменить, и будет няшно:
let add = [](let x, let y) ...
Re[5]: Почему не взлетел OCaml?
От: uncommon Ниоткуда  
Дата: 02.02.16 23:52
Оценка:
Здравствуйте, monax, Вы писали:

M>Плюсы же нужно каждый раз просить (auto), чтобы он типы вывел.


Это просто ахрененный аргумент. А в ocaml надо каждый раз let писать.
Re[5]: Почему не взлетел OCaml?
От: Evgeny.Panasyuk Россия  
Дата: 03.02.16 09:11
Оценка:
Здравствуйте, uncommon, Вы писали:

U>auto надо на let заменить, и будет няшно:

U>
U>let add = [](let x, let y) ...
U>


Ветка на тему let
Автор: Evgeny.Panasyuk
Дата: 14.04.15
.
Re: Почему не взлетел OCaml?
От: T4r4sB Россия  
Дата: 03.02.16 09:23
Оценка: +3 :))) :)
Здравствуйте, monax, Вы писали:

M>И вот интересно стало, а почему он не взлетел и не стал одним из мейнстримовых языков?


Потому что сообщество говноедов ценит только языки, похожие на ссишку.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[5]: Почему не взлетел OCaml?
От: Evgeny.Panasyuk Россия  
Дата: 03.02.16 09:37
Оценка:
Здравствуйте, monax, Вы писали:

M>Плюсы же нужно каждый раз просить (auto), чтобы он типы вывел.


Это мелочь если стоит выбор между mainstream языком и экзотикой.
Кстати, в Haskell'е даже let писать не нужно.

M>Ещё интересно было бы сравнить время появления автоматического вывода типов в плюсах и окамле.


Как механизм автоматический вывод типов уже был в ISO C++98, а в компиляторах ещё раньше. Но был доступен для небольшого ряда конструкций. Новые версии соответственно расширили область применимости.
Re[2]: Почему не взлетел OCaml?
От: monax  
Дата: 03.02.16 16:09
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Потому что сообщество говноедов ценит только языки, похожие на ссишку.


Let the holywar begin? Разминайте, хлопцы, пальцы, начинаем холивар?
Re: Почему не взлетел OCaml?
От: VTT http://vtt.to
Дата: 03.02.16 20:11
Оценка:
Есть мнение, что многие лиспо-функциональные языки созданы прежде всего из-за академического интереса.

1) берем / рожаем формализм
2) исследуем закономерности
3) пишем статьи / диссертации
4) ...
5) PROFIT!!!
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Re[8]: Почему не взлетел OCaml?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 03.02.16 20:38
Оценка: +1
Здравствуйте, monax, Вы писали:

M>F# — это, считай, OCaml. Только они добавили туда null и связали с .net. Вроде как люди приглядываются и даже пользуются, но для меня есть большой недостаток — MS. Т.е. под линухом я это никак не заведу (моно не в счёт, это странное явление)


А что в Mono странного? Между прочим, F# тестируется в том числе и на Mono на Linux. И значительная часть пользователей используют его именно на такой платформе.
Re[9]: Почему не взлетел OCaml?
От: Слава  
Дата: 03.02.16 22:06
Оценка: -1
Здравствуйте, nikov, Вы писали:

N>А что в Mono странного? Между прочим, F# тестируется в том числе и на Mono на Linux. И значительная часть пользователей используют его именно на такой платформе.


Да и вообще, при чём тут моно, когда .NET core уже больше года работает на линуксах.
Re: Почему не взлетел OCaml?
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 04.02.16 07:47
Оценка:
Здравствуйте, monax, Вы писали:

M>И вот интересно стало, а почему он не взлетел и не стал одним из мейнстримовых языков?


Как и в эволюционном отборе, нужна ниша, где бы он мог развиваться. Читай отсутствие альтернативы.
Re[3]: Почему не взлетел OCaml?
От: Klapaucius  
Дата: 04.02.16 10:50
Оценка: 89 (2) +1
Здравствуйте, Кодт, Вы писали:

К>Французы — извращенцы, сначала форкнули SML


Ну, не то чтобы они "форкнули" SML. OCaml происходит от диалекта ML-я появившегося до SML и синтаксически больше похож на первые ML-и чем SML, который является объединением Корделлевского VAX ML и Hope.

К>потом начали пихать в него всякие интересные фичи, причём с совершенно эклектичным синтаксисом, причём без оглядки на инфраструктуру и сообщество.


Вот только SML в который фичи тоже пытались пропихивать, но они уперлись в Милнера и застряли — намного мертвее.
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re: Почему не взлетел OCaml?
От: Klapaucius  
Дата: 04.02.16 11:27
Оценка: +2
Здравствуйте, monax, Вы писали:

M>Но при всех этих прекрасных характеристиках в мейнстриме его нет, ну разве что в виде F#, но это совсем недавно. Так почему он не отвоевал своё место под солнцем?


Вообще, у окамла много серьезных недостатков, но у мейнстримовых языков многое или все еще хуже. К примеру, у окамла игрушечный рантайм без SMP, но у популярных динамических языков рантаймы, как правило, еще более убогие и игрушечные.

Думаю, что не стоит искать причину (не)популярности в каких-то свойствах языка. Никаких убедительных свидетельств того, что они как-то связаны мне видеть не приходилось.
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[8]: Почему не взлетел OCaml?
От: dsorokin Россия  
Дата: 04.02.16 13:30
Оценка:
Здравствуйте, monax, Вы писали:

M>Хаскель другой совсем. Насколько я понял, ленивые вычисления в хаскеле ломают людям голову, потому что заставить его создать side-effect сложно. Впрочем, это пока только по отзывам, изучать его пока не довелось.


Побочные эффекты в хаскеле создаются легко. Просто их надо явно прописывать через типы, а это непривычно для многих.

M>F# — это, считай, OCaml. Только они добавили туда null и связали с .net. Вроде как люди приглядываются и даже пользуются, но для меня есть большой недостаток — MS. Т.е. под линухом я это никак не заведу (моно не в счёт, это странное явление), а под линухом я как раз и работаю. Так что для перехода на F# должно произойти что-то неординарное, чтобы я плюнул на все знания в линух-экосистеме и перешёл в дотнет. Тут либо мне нужно будет выполнять задачу, которая вот 100% хорошо ложится на виндовс+дотнет, но совсем не ложится на линух+окамл, либо F# должен дать мне такие дикие преимущества, что без него никак. Но этого не будет, да и окамл — это "в целях повышения образованности", на прод его тащить пока не собирался.


Мне F# как язык нравится даже больше, чем Ocaml. Особенно в первом нравятся sequence expressions и его обобщение computations expressions. Но тоже огорчает завязка на жирный рантайм дотнета.
Re[2]: Почему не взлетел OCaml?
От: monax  
Дата: 05.02.16 09:30
Оценка:
Здравствуйте, Klapaucius, Вы писали:

K>Вообще, у окамла много серьезных недостатков, но у мейнстримовых языков многое или все еще хуже. К примеру, у окамла игрушечный рантайм без SMP, но у популярных динамических языков рантаймы, как правило, еще более убогие и игрушечные.


До рантайма я ещё не добрался. А что с ним не так?
Re[3]: Почему не взлетел OCaml?
От: FR  
Дата: 06.02.16 10:06
Оценка: 54 (2)
Здравствуйте, monax, Вы писали:

M>До рантайма я ещё не добрался. А что с ним не так?


Основной недостаток не поддерживает SMP, одновременно может выполнятся только один поток.
То есть все что связано с потоками работает (тот же модуль Thread), но так как будто выполняется
на однопроцессорном и одноядерном компьютере.
Такой же недостаток есть скажем у питона с его GIL, или у nodejs.
Выход использовать вместо потоков процессы.

Второй большой недостаток ограниченность многих типов например max_int для 32 бит
всего лишь 1073741823, один бит данных забирает теговая система для GC. Еще сильнее
ограничения в размерах для массивов Sys.max_array_length всего лишь 4194303.
Все это конечно уже мало значимо для 64 бит, но для 32 это заметный недостаток.

Третий недостаток, который сильно повлиял на популярность по моему, это ориентированность
на unix образные системы, windows скорее по остаточному принципу, хотя в последнее
время с этим получше.

Ну и плюс очень бедная стандартная библиотека. Это немного исправляется библиотекой
http://batteries.forge.ocamlcore.org/
Отредактировано 06.02.2016 10:14 FR . Предыдущая версия .
Re[2]: Почему не взлетел OCaml?
От: FR  
Дата: 06.02.16 10:59
Оценка: 3 (1)
Здравствуйте, Pzz, Вы писали:

Pzz>3. Если Inria бросит им заниматься, язык умрет


Раньше да так и было, сейчас уже нет, основном язык тянет OCamlPro
Re[8]: Почему не взлетел OCaml?
От: FR  
Дата: 06.02.16 11:10
Оценка:
Здравствуйте, monax, Вы писали:


M>F# — это, считай, OCaml. Только они добавили туда null и связали с .net. Вроде как люди приглядываются и даже пользуются, но для меня есть большой недостаток — MS. Т.е. под линухом я это никак не заведу (моно не в счёт, это странное явление), а под линухом я как раз и работаю. Так что для перехода на F# должно произойти что-то неординарное, чтобы я плюнул на все знания в линух-экосистеме и перешёл в дотнет. Тут либо мне нужно будет выполнять задачу, которая вот 100% хорошо ложится на виндовс+дотнет, но совсем не ложится на линух+окамл, либо F# должен дать мне такие дикие преимущества, что без него никак. Но этого не будет, да и окамл — это "в целях повышения образованности", на прод его тащить пока не собирался.



F# уже прилично отошел от OCaml'а хотя все еще возможно писать совместимый код.
У F# есть несколько плюсов, главное более приятный синтаксис с отступами
https://msdn.microsoft.com/ru-ru/library/dd233199.aspx
Встроенные монады (Computation Expressions) https://msdn.microsoft.com/ru-ru/library/dd233182.aspx
Active Patterns https://msdn.microsoft.com/ru-ru/library/dd233248.aspx
Ну и плюс море сахара над классами и объектами (которые так еще и не перетащили в C#),
хотя объектная система OCaml'а конечно намного интереснее.
Re[9]: Почему не взлетел OCaml?
От: FR  
Дата: 06.02.16 11:15
Оценка:
Здравствуйте, novitk, Вы писали:

N>Если ты хочешь не "ломки головы", а максимальной продуктивности, то я советую остаться на Питоне. Динамика до сих пор рулит, хотя разрыв и сокращается.


На OCaml кстати тоже очень легко писать, и потом читать код. Может и с питоном в этом посоревноваться.
Я вот летом с Nim (http://nim-lang.org/) поигрался, хоть и корявый и сырой пока язык, но по моему
продуктивность на нем не хуже питона.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.