Здравствуйте, monax, Вы писали:
M>Недавно "в целях повышения образованности" взялся за изучение OCaml. Язык очень понравился, прямо такой хитрый и умный питон с компиляцией. И вот интересно стало, а почему он не взлетел и не стал одним из мейнстримовых языков?
Потому что программисты делятся на:
1) "С++ (или Java) — наше все, все остальное нинужно. у нас даже вывод типов есть. и алгебраики в бусте."
2) "я тупой, все что сложнее JS или Питона — заумь, наркомания и нинужно. Вот Го это круто, он простой, к тому же от гугла"
3) "ФП! Функторы! Монады! Комонады! Когомологии! Предпучки! Топосы! Гомотопии... ой, где это я? Не, грязный ML это недостаточно монадично."
Здравствуйте, Кодт, Вы писали:
К>Французы — извращенцы, сначала форкнули 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
Здравствуйте, monax, Вы писали:
M>Автоматический вывод типов при статической типизации — это очень неплохо. По сути, пишешь на нём, как на питоне, а он сам за тебя типы ищет.
"Автоматический вывод типов при статической типизации" есть в C++ — получается
Здравствуйте, monax, Вы писали:
M>До рантайма я ещё не добрался. А что с ним не так?
Основной недостаток не поддерживает SMP, одновременно может выполнятся только один поток.
То есть все что связано с потоками работает (тот же модуль Thread), но так как будто выполняется
на однопроцессорном и одноядерном компьютере.
Такой же недостаток есть скажем у питона с его GIL, или у nodejs.
Выход использовать вместо потоков процессы.
Второй большой недостаток ограниченность многих типов например max_int для 32 бит
всего лишь 1073741823, один бит данных забирает теговая система для GC. Еще сильнее
ограничения в размерах для массивов Sys.max_array_length всего лишь 4194303.
Все это конечно уже мало значимо для 64 бит, но для 32 это заметный недостаток.
Третий недостаток, который сильно повлиял на популярность по моему, это ориентированность
на unix образные системы, windows скорее по остаточному принципу, хотя в последнее
время с этим получше.
Здравствуйте, monax, Вы писали:
M>Недавно "в целях повышения образованности" взялся за изучение OCaml. Язык очень понравился, прямо такой хитрый и умный питон с компиляцией. И вот интересно стало, а почему он не взлетел и не стал одним из мейнстримовых языков? Чисто функциональным его не назовёшь, императивное программирование в нём есть, при этом порядок вычислений в нём прямой, а не ленивый, т.е. всегда можно предсказать, в каком порядке будут выполняться команды. Вывод типов — просто замечательная идея. Но при всех этих прекрасных характеристиках в мейнстриме его нет, ну разве что в виде F#, но это совсем недавно. Так почему он не отвоевал своё место под солнцем?
Здравствуйте, FR, Вы писали:
FR>На OCaml кстати тоже очень легко писать, и потом читать код. Может и с питоном в этом посоревноваться. FR>Я вот летом с Nim (http://nim-lang.org/) поигрался, хоть и корявый и сырой пока язык, но по моему FR>продуктивность на нем не хуже питона.
Вот из-за Nim'a я c OCaml'ом и связался. Лето-осень вокруг нима поднялся шум. Меня заинтересовало, что за зверь. Прочитал мануал, потыкал язык. Но потом подумал, что не хочу возиться с чем-то сырым, да ещё и с непонятными целями, а OCaml уже достаточно стар, вылизан, имеет свою историю и принадлежит к семейству ML, которое меня давно интересует. А когда стал читать Программирование на языке OCaml, то нашёл для себя много интересного.
Недавно "в целях повышения образованности" взялся за изучение OCaml. Язык очень понравился, прямо такой хитрый и умный питон с компиляцией. И вот интересно стало, а почему он не взлетел и не стал одним из мейнстримовых языков? Чисто функциональным его не назовёшь, императивное программирование в нём есть, при этом порядок вычислений в нём прямой, а не ленивый, т.е. всегда можно предсказать, в каком порядке будут выполняться команды. Вывод типов — просто замечательная идея. Но при всех этих прекрасных характеристиках в мейнстриме его нет, ну разве что в виде F#, но это совсем недавно. Так почему он не отвоевал своё место под солнцем?
Здравствуйте, LaptevVV, Вы писали:
LVV>Опередил свое время?
Не опередил, а отвлёкся.
Французы — извращенцы, сначала форкнули SML, потом начали пихать в него всякие интересные фичи, причём с совершенно эклектичным синтаксисом, причём без оглядки на инфраструктуру и сообщество.
Если поискать язык со схожим уровнем разнопарадигменности и эклектики, — то, пожалуй, это С++. Но за С++ стоит долгая история и большущее сообщество сишников и плюсовиков.
Если другие ML, — F#, за которым стоит микрософт и совместимость с прочим дотнетом.
А прикольная говорящая лягушка никому особо не нужна.
Здравствуйте, monax, Вы писали:
M>Плюсы же нужно каждый раз просить (auto), чтобы он типы вывел.
Чем это принципиально отличается от необходимости писать let?
Здравствуйте, DarkEld3r, Вы писали:
DE>Здравствуйте, monax, Вы писали:
M>>Плюсы же нужно каждый раз просить (auto), чтобы он типы вывел. DE>Чем это принципиально отличается от необходимости писать let?
По ссылке от Evgeny.Panasyuk гораздо больше auto, чем у меня let. Да и разные это вещи в принципе, если уж на то пошло.
Здравствуйте, 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
Здравствуйте, nikov, Вы писали:
N>А что в Mono странного?
Тормознут он и гюкав. Причем глюки порой годами не лечатся, а иногда возрождаются после того как были вылечены. В прочем, если писать только под него, то проблема не столь остра.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, monax, Вы писали:
M>Хаскель другой совсем. Насколько я понял, ленивые вычисления в хаскеле ломают людям голову, потому что заставить его создать side-effect сложно. Впрочем, это пока только по отзывам, изучать его пока не довелось.
Хаскелл тщательно выдерживается в духе чистоты. И является платформой для экспериментов над абстракциями — будь то типы, алгебраические структуры, какие-то ещё идеи. Платформой, в том числе, отвечающей на вопрос: а можно ли всё это потянуть компилятором?
Ленивость или энергичность, тут дело выбора, сделанного единожды. Хаскелл пошёл ленивым путём, ML и идрис — энергичным (причём не наобум, а глубоко завязанно на суть языка).
Перед эклектическими языками у хаскелла именно его стройность является достоинством.
M>Скалу смотрел 4-5 лет назад. Прочитал книгу по скале. Она меня тогда поразила своей крутостью, ну прямо в самое сердце. Даже специальные ключевые слова для описания примесей у них были. А потом я подождал пару недель и попробовал сделать понравившееся в родном питоне. Вот тут на скалу стал смотреть иначе, сдержаннее. А ещё JVM меня тогда отпугнула. Но с тех пор прошло много времени, и на скалу нужно заходить по-новой.
M>F# — это, считай, OCaml. Только они добавили туда null и связали с .net. Вроде как люди приглядываются и даже пользуются, но для меня есть большой недостаток — MS. Т.е. под линухом я это никак не заведу (моно не в счёт, это странное явление), а под линухом я как раз и работаю. Так что для перехода на F# должно произойти что-то неординарное, чтобы я плюнул на все знания в линух-экосистеме и перешёл в дотнет. Тут либо мне нужно будет выполнять задачу, которая вот 100% хорошо ложится на виндовс+дотнет, но совсем не ложится на линух+окамл, либо F# должен дать мне такие дикие преимущества, что без него никак. Но этого не будет, да и окамл — это "в целях повышения образованности", на прод его тащить пока не собирался.
Прикладные языки всегда разрабатываются с оглядкой на среду исполнения.
А среда — это ещё и интерфейсы операционной системы, например.
Если ОС преимущественно на сишных вызовах, то в языке должен быть способ более-менее дёшево — и более-менее целостно, с т.з. языка, — работать с бинарными структурами и примитивными типами. Либо смириться с тем, что переходники будут корявые и неэффективные (например, вручную собирать-разбирать массивы байтов) либо написанные на си. Но тогда модель данных языка должна более-менее дёшево кодироваться на си, чтобы клей "с той стороны" не выглядел столь же ужасно.
Либо, в конце концов, просто наплевать на эффективность. Как это делается хоть в питоне, хоть в хаскелле.
Если среда — ООП в стиле явы или дотнета, то — так или иначе, но нужно, чтобы были классы и методы, совместимые с явой или дотнетом.
Отсюда и null как примитив, и односторонний вывод типов в определённых условиях (иначе ни ООП-полиморфизм, ни перегрузку методов не обеспечить), и дженерики как довольно специфический и узкий способ параметризации типов...
Поэтому — за скалу не скажу, а F# отошёл от идей чистоты ML, повыкидывав из окамла много того, что не вписывалось. А в дальнейшем приобретя многое другое.
Так что говорить, что F# это окамл плюс дорогущий рантайм, — это не совсем так.
А что касается портированных рантаймов, — ну так и ява-приложения запускаются и выглядят одинаково (чужеродно) на всех платформах. Дотнет хотя бы на винде выглядит органично.
Инсталлировать рантайм с каждым приложением сейчас нужды нет: в линуксе вайн и моно в репозиториях валяются, менеджером пакетов по зависимостям подтягиваются.
В отличие от того же окамла, где каждое приложение — это как бизибокс, всё своё прилинковал с собой.
Есть ещё вариант — сделать свой собственный рантайм, возможно, очень компактный. Ну и получим смолток, ещё-одну-какую-нибудь-яву, или вообще луа (вот уж рекордсмен по компактности рантайма). Ах да, — это всё не ФП было. Пример из ФП — это, конечно же, лисп.
А потом всё равно заморочимся по связыванию с внешним миром через биндинги, маршаллинг или добавление в язык изначально несвойственных фич.
Здравствуйте, DarkEld3r, Вы писали:
DE>В том же хаскеле, с его тотальным выводом типов, у не локальных функций типы всё-таки указывают явно и в таком случае разницы нет.
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), чтобы он типы вывел. Ещё интересно было бы сравнить время появления автоматического вывода типов в плюсах и окамле.
Здравствуйте, monax, Вы писали:
M>F# — это, считай, OCaml. Только они добавили туда null и связали с .net. Вроде как люди приглядываются и даже пользуются, но для меня есть большой недостаток — MS. Т.е. под линухом я это никак не заведу (моно не в счёт, это странное явление)
А что в Mono странного? Между прочим, F# тестируется в том числе и на Mono на Linux. И значительная часть пользователей используют его именно на такой платформе.
Здравствуйте, nikov, Вы писали:
N>А что в Mono странного? Между прочим, F# тестируется в том числе и на Mono на Linux. И значительная часть пользователей используют его именно на такой платформе.
Да и вообще, при чём тут моно, когда .NET core уже больше года работает на линуксах.
Здравствуйте, Кодт, Вы писали:
К>Если поискать язык со схожим уровнем разнопарадигменности и эклектики, — то, пожалуй, это С++. Но за С++ стоит долгая история и большущее сообщество сишников и плюсовиков.
AT&T за ним стоит. И это главное.
К>Если другие ML, — F#, за которым стоит микрософт и совместимость с прочим дотнетом.
F# — это как раз потомок ОКамла. А вот ОКамл уже потомок МЛ-я.
К>А прикольная говорящая лягушка никому особо не нужна.
Я бы по остерегся делать столь смелые заявления.
Думаю, что при должном пиаре и поддержке большой компании он мог бы занять весомую долю рынка, в свое время. Но варился он в научной среде и за ее пределами был попросту незнаком.
Из явных проблем усложняющих его изучение можно выделить разве что безскобочную нотацию в угоду каррирования (как в стиле Хаскеля). Это многих заставляет тупить при его изучении.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, DarkEld3r, Вы писали:
DE>Хоть по существу и согласен, но всё-таки поспорю.
Зачетная фраза!
DE>В том же хаскеле, с его тотальным выводом типов, у не локальных функций типы всё-таки указывают явно и в таком случае разницы нет. :ямбды выглядят аккуратнее, это да.
Дык локальных функций (включая лямбды) в разы больше. А то что в С++ их нет — это огромный недостаток.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, DarkEld3r, Вы писали:
DE>В том же хаскеле, с его тотальным выводом типов, у не локальных функций типы всё-таки указывают явно и в таком случае разницы нет.
Да, в хаскеле указывают типы и там, где их можно вывести (как правильно подмечено в соседнем ответе — это можно сделать не везде). Но "можно указывать" и "нельзя не указывать" — это не одно и то же. На самом деле это настолько различные варианты, насколько вообще возможно.
Например, при выводе типов, можно писать "от композиции", т.е. сначала скомбинировать комбинаторы, а потом посмотреть какой будет тип (и, закончив эксперименты с кодом, вставить сигнатуру при желании).
'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
Здравствуйте, monax, Вы писали:
M>...Но при всех этих прекрасных характеристиках в мейнстриме его нет, ну разве что в виде F#, но это совсем недавно. Так почему он не отвоевал своё место под солнцем?
почему симула и смолток не популярны? разве ооп — плохая идея?
почему модула не в мейнстриме? неужели программисты не понимают преимуществ модульности?
почему ада не используется нынче? как вообще можно обойтись без исключений и параллельности, не говоря уж о type traits?
наконец, что не так с идеями структурного программирования паскаля и алгола?
как ни крути, из всех этих языков f# — второй после паскаля, которому удалось хотя бы относительно выйти в люди
Здравствуйте, LaptevVV, Вы писали:
LVV>Опередил свое время?
Не знаю. LISP вот он опередил время, не было мощной техники для выполнения динамического кода. А вот OCaml очень прагматичен. И опять же повторю, у него не чисто функциональная парадигма, возможность писать императивный код у него есть.
Он же зарождался на вашей памяти, может помните что-то из событий того времени?
LVV>>Опередил свое время? M>Не знаю. LISP вот он опередил время, не было мощной техники для выполнения динамического кода. А вот OCaml очень прагматичен. И опять же повторю, у него не чисто функциональная парадигма, возможность писать императивный код у него есть. M>Он же зарождался на вашей памяти, может помните что-то из событий того времени?
Ну, 85 год — рождение...
Мы слыхали только о нем. А потом начался Горбачев и стало не до интересных дел в программировании...
Про ML я узнал много позже из биографии Вирта.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, monax, Вы писали:
M>Недавно "в целях повышения образованности" взялся за изучение OCaml.
Думаю что основная причина – он никому не нужен. Он не привносит ничего особого, при этом довольно сложен и (в стародавние времена, может что-то уже и изменилось) однопоточен. Единственное где он вроде как обоснованно прижился – прототипы/первые версии компиляторов.
Здравствуйте, kaa.python, Вы писали:
KP> Он не привносит ничего особого, при этом довольно сложен и (в стародавние времена, может что-то уже и изменилось) однопоточен. Единственное где он вроде как обоснованно прижился – прототипы/первые версии компиляторов.
Автоматический вывод типов при статической типизации — это очень неплохо. По сути, пишешь на нём, как на питоне, а он сам за тебя типы ищет. Сложность — возможно, мне сложно сказать, как бы я на него отреагировал лет пять назад, а сейчас у меня уже хватает опыта, чтобы брать любой язык и просто изучать его. Однопоточность не порок, что успешно доказано питоном. Есть огромное пространство задач, в которых многопоточность не является необходимостью. А параллельная обработка данных на уровне процессов в окамле возможна.
Мне пока только бедность стандартной библиотеки кажется весомым аргументом, но уже давно есть Core.
Здравствуйте, monax, Вы писали:
M>Недавно "в целях повышения образованности" взялся за изучение OCaml. Язык очень понравился, прямо такой хитрый и умный питон с компиляцией. И вот интересно стало, а почему он не взлетел и не стал одним из мейнстримовых языков? Чисто функциональным его не назовёшь, императивное программирование в нём есть, при этом порядок вычислений в нём прямой, а не ленивый, т.е. всегда можно предсказать, в каком порядке будут выполняться команды. Вывод типов — просто замечательная идея. Но при всех этих прекрасных характеристиках в мейнстриме его нет, ну разве что в виде F#, но это совсем недавно. Так почему он не отвоевал своё место под солнцем?
Здравствуйте, Кодт, Вы писали:
К>Не опередил, а отвлёкся. К>Французы — извращенцы, сначала форкнули SML, потом начали пихать в него всякие интересные фичи, причём с совершенно эклектичным синтаксисом, причём без оглядки на инфраструктуру и сообщество.
Здравствуйте, monax, Вы писали:
M>Недавно "в целях повышения образованности" взялся за изучение OCaml. Язык очень понравился, прямо такой хитрый и умный питон с компиляцией. И вот интересно стало, а почему он не взлетел и не стал одним из мейнстримовых языков? Чисто функциональным его не назовёшь, императивное программирование в нём есть, при этом порядок вычислений в нём прямой, а не ленивый, т.е. всегда можно предсказать, в каком порядке будут выполняться команды. Вывод типов — просто замечательная идея. Но при всех этих прекрасных характеристиках в мейнстриме его нет, ну разве что в виде F#, но это совсем недавно. Так почему он не отвоевал своё место под солнцем?
Ну, скажем так, я бы не стал использовать OCaml в промышленном коде по следующим причинам:
1. У него недостаточно развитая экосистема
2. Нет внятных гарантий стабильности языка. Следующая версия компилятора может перестать компилировать существующий код
3. Если Inria бросит им заниматься, язык умрет
Здравствуйте, novitk, Вы писали:
N>Не есть, а появился 20 лет спустя. Вопрос, как я понимаю, про "тогда",
Именно. Т.е. не почему он сейчас не взлетает, тут понятно, его обогнали по ряду параметров (сообщество, экосистема), и его никто не толкает.
N>сейчас OCaml совсем не нужен.
Нужен. Такие как OCaml, LISP, Haskell — это ж кладезь мудрости для программистов. Из этих языков постоянно что-то вытаскивают в мейнстримовые, от чего последние становятся лучше.
Здравствуйте, monax, Вы писали:
N>>сейчас OCaml совсем не нужен.
M>Нужен. Такие как OCaml, LISP, Haskell — это ж кладезь мудрости для программистов. Из этих языков постоянно что-то вытаскивают в мейнстримовые, от чего последние становятся лучше.
Ключевое слово "сейчас".
В 96-ом был нужен, сейчас нет. Сейчас с ним возиться смысла нет, лучше сразу взять Хаскель или Скалу/Ф#.
Здравствуйте, monax, Вы писали:
К>>Французы — извращенцы, сначала форкнули SML, потом начали пихать в него всякие интересные фичи, причём с совершенно эклектичным синтаксисом, причём без оглядки на инфраструктуру и сообщество. M>Например?
Например, синтаксис модулей, объектов и полиморфных вариантов. Как будто три разных команды придумывали.
Здравствуйте, 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# должен дать мне такие дикие преимущества, что без него никак. Но этого не будет, да и окамл — это "в целях повышения образованности", на прод его тащить пока не собирался.
Здравствуйте, monax, Вы писали:
M>Хаскель другой совсем. Насколько я понял, ленивые вычисления в хаскеле ломают людям голову, потому что заставить его создать side-effect сложно. Впрочем, это пока только по отзывам, изучать его пока не довелось.
Если ты хочешь не "ломки головы", а максимальной продуктивности, то я советую остаться на Питоне. Динамика до сих пор рулит, хотя разрыв и сокращается.
M> Но с тех пор прошло много времени, и на скалу нужно заходить по-новой.
Скала — плохой язык. Хаскель лучше и намного, но она лучшее из применимого на практике.
Здравствуйте, monax, Вы писали:
M>Плюсы же нужно каждый раз просить (auto), чтобы он типы вывел.
Это мелочь если стоит выбор между mainstream языком и экзотикой.
Кстати, в Haskell'е даже let писать не нужно.
M>Ещё интересно было бы сравнить время появления автоматического вывода типов в плюсах и окамле.
Как механизм автоматический вывод типов уже был в ISO C++98, а в компиляторах ещё раньше. Но был доступен для небольшого ряда конструкций. Новые версии соответственно расширили область применимости.
Здравствуйте, monax, Вы писали:
M>Хаскель другой совсем. Насколько я понял, ленивые вычисления в хаскеле ломают людям голову, потому что заставить его создать side-effect сложно. Впрочем, это пока только по отзывам, изучать его пока не довелось.
Побочные эффекты в хаскеле создаются легко. Просто их надо явно прописывать через типы, а это непривычно для многих.
M>F# — это, считай, OCaml. Только они добавили туда null и связали с .net. Вроде как люди приглядываются и даже пользуются, но для меня есть большой недостаток — MS. Т.е. под линухом я это никак не заведу (моно не в счёт, это странное явление), а под линухом я как раз и работаю. Так что для перехода на F# должно произойти что-то неординарное, чтобы я плюнул на все знания в линух-экосистеме и перешёл в дотнет. Тут либо мне нужно будет выполнять задачу, которая вот 100% хорошо ложится на виндовс+дотнет, но совсем не ложится на линух+окамл, либо F# должен дать мне такие дикие преимущества, что без него никак. Но этого не будет, да и окамл — это "в целях повышения образованности", на прод его тащить пока не собирался.
Мне F# как язык нравится даже больше, чем Ocaml. Особенно в первом нравятся sequence expressions и его обобщение computations expressions. Но тоже огорчает завязка на жирный рантайм дотнета.
Здравствуйте, Klapaucius, Вы писали:
K>Вообще, у окамла много серьезных недостатков, но у мейнстримовых языков многое или все еще хуже. К примеру, у окамла игрушечный рантайм без SMP, но у популярных динамических языков рантаймы, как правило, еще более убогие и игрушечные.
До рантайма я ещё не добрался. А что с ним не так?
M>F# — это, считай, OCaml. Только они добавили туда null и связали с .net. Вроде как люди приглядываются и даже пользуются, но для меня есть большой недостаток — MS. Т.е. под линухом я это никак не заведу (моно не в счёт, это странное явление), а под линухом я как раз и работаю. Так что для перехода на F# должно произойти что-то неординарное, чтобы я плюнул на все знания в линух-экосистеме и перешёл в дотнет. Тут либо мне нужно будет выполнять задачу, которая вот 100% хорошо ложится на виндовс+дотнет, но совсем не ложится на линух+окамл, либо F# должен дать мне такие дикие преимущества, что без него никак. Но этого не будет, да и окамл — это "в целях повышения образованности", на прод его тащить пока не собирался.
Здравствуйте, novitk, Вы писали:
N>Если ты хочешь не "ломки головы", а максимальной продуктивности, то я советую остаться на Питоне. Динамика до сих пор рулит, хотя разрыв и сокращается.
На OCaml кстати тоже очень легко писать, и потом читать код. Может и с питоном в этом посоревноваться.
Я вот летом с Nim (http://nim-lang.org/) поигрался, хоть и корявый и сырой пока язык, но по моему
продуктивность на нем не хуже питона.
Здравствуйте, FR, Вы писали:
FR>Такой же недостаток есть скажем у питона с его GIL, или у nodejs. FR>Выход использовать вместо потоков процессы.
Питон показал, что это несмертельный недостаток. Есть и плюсы и минусы у такого решения.
FR>Второй большой недостаток ограниченность многих типов например max_int для 32 бит FR>всего лишь 1073741823, один бит данных забирает теговая система для GC.
Вот про это не знал.
FR>Третий недостаток, который сильно повлиял на популярность по моему, это ориентированность FR>на unix образные системы, windows скорее по остаточному принципу, хотя в последнее FR>время с этим получше.
Это они зря. Несмотря на то, что я живу в *nix, игнорировать виндовс — потеря популярности.
FR>Ну и плюс очень бедная стандартная библиотека. Это немного исправляется библиотекой FR>http://batteries.forge.ocamlcore.org/
Здравствуйте, monax, Вы писали:
M>Вот из-за Nim'a я c OCaml'ом и связался. Лето-осень вокруг нима поднялся шум. Меня заинтересовало, что за зверь. Прочитал мануал, потыкал язык. Но потом подумал, что не хочу возиться с чем-то сырым, да ещё и с непонятными целями, а OCaml уже достаточно стар, вылизан, имеет свою историю и принадлежит к семейству ML, которое меня давно интересует. А когда стал читать Программирование на языке OCaml, то нашёл для себя много интересного.
M>Это они зря. Несмотря на то, что я живу в *nix, игнорировать виндовс — потеря популярности.
Ну они полностью не игнорировали, я например и начал изучать и использовал под windows,
но если под linux ocaml очень легко установить и использовать, в стандартных репозиториях
куча доступных библиотек, то под windows все что выходило за стандартный инсталлятор было
проблемно, сейчас вроде уже попроще.
FR>>Ну и плюс очень бедная стандартная библиотека. Это немного исправляется библиотекой FR>>http://batteries.forge.ocamlcore.org/
M>А Core, которая заменяет стандартную библиотеку?
Core как-то мимо меня прошло, я начал с ExtLib, который плавно перерос в батарейки.
Здравствуйте, FR, Вы писали:
FR>Интересно даже книжка на русском вышла, раньше только тут http://shamil.free.fr/comp/ocaml/ перевод был.
Это перевод https://realworldocaml.org/. Авторы как раз разработали Core, вокруг неё и книга крутится. Впрочем, большинство вещей без особых заморочек переписывается на стандартной библиотеке. Вчера вот там же читал про Async.
Здравствуйте, FR, Вы писали:
FR>На OCaml кстати тоже очень легко писать, и потом читать код. Может и с питоном в этом посоревноваться. FR>Я вот летом с Nim (http://nim-lang.org/) поигрался, хоть и корявый и сырой пока язык, но по моему FR>продуктивность на нем не хуже питона.
Я тоже так думал, а потом месяцев 6 назад жизнь заставила перейти с Питона на Скалу. По моей оценки сейчас, когда я полностью освоился, прототипирование все равно идет раза в два медленней. Скала правда тоже кривовата, но хотя бы более менее отлажена. Возможно инструментарий подтянут и настанет счастье, но пока вот так.
Здравствуйте, D. Mon, Вы писали:
DM>Потому что программисты делятся на: DM>1) "С++ (или Java) — наше все, все остальное нинужно. у нас даже вывод типов есть. и алгебраики в бусте." DM>2) "я тупой, все что сложнее JS или Питона — заумь, наркомания и нинужно. Вот Го это круто, он простой, к тому же от гугла" DM>3) "ФП! Функторы! Монады! Комонады! Когомологии! Предпучки! Топосы! Гомотопии... ой, где это я? Не, грязный ML это недостаточно монадично."
Беби:
Мне ужасно везет на женатых, первый раз влюбилась в женатого, потом шесть лет встречалась с женатым , месяц назад познакомилась с парнем, понравился.....женатый, может у меня карма дурная, что они на меня слетаются, как мухи
Нанни:
упс, о беби , беби
Свайн:
Опережая посты, краткое содержание темы.
1. Аффтор плять.
2. Мужики — плядуны.
3. Сцука разрушает чужие семьи.
4. Добейся хоть одного.
5. Это развод.
6. Куда смотрят жены.
7. Всякий разный флуд на посторонние темы.
8. Разные страшилки про детей.
От себя, обозначиваю пункты 1, 2 и 7
Now perhaps it is clear why I have been working frantically to learn OCaml for the last couple of months; several of Facebook’s compilers are written in OCaml, and so I’m going to need to have a working knowledge of that language very quickly.
Now perhaps it is clear why I have been working frantically to learn OCaml for the last couple of months; several of Facebook’s compilers are written in OCaml, and so I’m going to need to have a working knowledge of that language very quickly.
Про то, что в фейсбуке есть компиляторы на OCaml я знал. Ещё Haxe на нём же написан. Ну т.е. для написания компиляторов, видимо, он хорошо подходит.
Здравствуйте, monax, Вы писали:
M>Плюсы же нужно каждый раз просить (auto), чтобы он типы вывел. Ещё интересно было бы сравнить время появления автоматического вывода типов в плюсах и окамле.
Вывод типов появился в ML-е. ОКамл, F#, Scala, Nemerle и от части даже C# унаследовали эту фичу от него.
ОКамл — это по сути и есть сращивание ML-я и ООП в стиле утиной типизации.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Pzz, Вы писали:
Pzz>Ну, скажем так, я бы не стал использовать OCaml в промышленном коде по следующим причинам: Pzz>1. У него недостаточно развитая экосистема Pzz>2. Нет внятных гарантий стабильности языка. Следующая версия компилятора может перестать компилировать существующий код Pzz>3. Если Inria бросит им заниматься, язык умрет
Нет слов! Ну, так займись языком и он не умрет. Это любой язык можно забраковать просто потому что его автор не большая шишка в Майкрософт или Гугле.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, monax, Вы писали:
M>Нужен. Такие как OCaml, LISP, Haskell — это ж кладезь мудрости для программистов. Из этих языков постоянно что-то вытаскивают в мейнстримовые, от чего последние становятся лучше.
Совсем недавно (всего 15 лет назад) не вытаскивали ничего. А о OCaml, LISP и Haskell разве что слышали.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>У параметров не надо писать let. А в ФЯ именно параметры занимают основной объем в коде.
Хоть по существу и согласен, но всё-таки поспорю. В том же хаскеле, с его тотальным выводом типов, у не локальных функций типы всё-таки указывают явно и в таком случае разницы нет. :ямбды выглядят аккуратнее, это да.
Здравствуйте, Klapaucius, Вы писали:
K> Но "можно указывать" и "нельзя не указывать" — это не одно и то же.
Естественно. Справедливости ради, вариант "нельзя не указывать" тоже имеет определённые "преимущества" — не будет соблазна забить на указание типов и код (наверное) читать будет проще.
K> На самом деле это настолько различные варианты, насколько вообще возможно.
Да ладно? Есть ещё вариант "нельзя указывать".
Здравствуйте, monax, Вы писали:
M>Недавно "в целях повышения образованности" взялся за изучение OCaml. Язык очень понравился, прямо такой хитрый и умный питон с компиляцией. И вот интересно стало, а почему он не взлетел и не стал одним из мейнстримовых языков? Чисто функциональным его не назовёшь, императивное программирование в нём есть, при этом порядок вычислений в нём прямой, а не ленивый, т.е. всегда можно предсказать, в каком порядке будут выполняться команды. Вывод типов — просто замечательная идея. Но при всех этих прекрасных характеристиках в мейнстриме его нет, ну разве что в виде F#, но это совсем недавно. Так почему он не отвоевал своё место под солнцем?
M>Недавно "в целях повышения образованности" взялся за изучение OCaml. Язык очень понравился, прямо такой хитрый и умный питон с компиляцией. И вот интересно стало, а почему он не взлетел и не стал одним из мейнстримовых языков?
Некоторые его любят, но стрёмноватый синтаксис, непонятно зачем нужные разнонаправленные фичи,
фейлы рантайма (подрезанный бит), так и не сделанная SMP, ну и главное, чисто франзцуская
извращённость. А правильным питоном является хаскель.