Здравствуйте, monax, Вы писали:
M>Хаскель другой совсем. Насколько я понял, ленивые вычисления в хаскеле ломают людям голову, потому что заставить его создать side-effect сложно. Впрочем, это пока только по отзывам, изучать его пока не довелось.
Если ты хочешь не "ломки головы", а максимальной продуктивности, то я советую остаться на Питоне. Динамика до сих пор рулит, хотя разрыв и сокращается.
M> Но с тех пор прошло много времени, и на скалу нужно заходить по-новой.
Скала — плохой язык. Хаскель лучше и намного, но она лучшее из применимого на практике.
Здравствуйте, monax, Вы писали:
M>Хаскель другой совсем. Насколько я понял, ленивые вычисления в хаскеле ломают людям голову, потому что заставить его создать side-effect сложно. Впрочем, это пока только по отзывам, изучать его пока не довелось.
Хаскелл тщательно выдерживается в духе чистоты. И является платформой для экспериментов над абстракциями — будь то типы, алгебраические структуры, какие-то ещё идеи. Платформой, в том числе, отвечающей на вопрос: а можно ли всё это потянуть компилятором?
Ленивость или энергичность, тут дело выбора, сделанного единожды. Хаскелл пошёл ленивым путём, ML и идрис — энергичным (причём не наобум, а глубоко завязанно на суть языка).
Перед эклектическими языками у хаскелла именно его стройность является достоинством.
M>Скалу смотрел 4-5 лет назад. Прочитал книгу по скале. Она меня тогда поразила своей крутостью, ну прямо в самое сердце. Даже специальные ключевые слова для описания примесей у них были. А потом я подождал пару недель и попробовал сделать понравившееся в родном питоне. Вот тут на скалу стал смотреть иначе, сдержаннее. А ещё JVM меня тогда отпугнула. Но с тех пор прошло много времени, и на скалу нужно заходить по-новой.
M>F# — это, считай, OCaml. Только они добавили туда null и связали с .net. Вроде как люди приглядываются и даже пользуются, но для меня есть большой недостаток — MS. Т.е. под линухом я это никак не заведу (моно не в счёт, это странное явление), а под линухом я как раз и работаю. Так что для перехода на F# должно произойти что-то неординарное, чтобы я плюнул на все знания в линух-экосистеме и перешёл в дотнет. Тут либо мне нужно будет выполнять задачу, которая вот 100% хорошо ложится на виндовс+дотнет, но совсем не ложится на линух+окамл, либо F# должен дать мне такие дикие преимущества, что без него никак. Но этого не будет, да и окамл — это "в целях повышения образованности", на прод его тащить пока не собирался.
Прикладные языки всегда разрабатываются с оглядкой на среду исполнения.
А среда — это ещё и интерфейсы операционной системы, например.
Если ОС преимущественно на сишных вызовах, то в языке должен быть способ более-менее дёшево — и более-менее целостно, с т.з. языка, — работать с бинарными структурами и примитивными типами. Либо смириться с тем, что переходники будут корявые и неэффективные (например, вручную собирать-разбирать массивы байтов) либо написанные на си. Но тогда модель данных языка должна более-менее дёшево кодироваться на си, чтобы клей "с той стороны" не выглядел столь же ужасно.
Либо, в конце концов, просто наплевать на эффективность. Как это делается хоть в питоне, хоть в хаскелле.
Если среда — ООП в стиле явы или дотнета, то — так или иначе, но нужно, чтобы были классы и методы, совместимые с явой или дотнетом.
Отсюда и null как примитив, и односторонний вывод типов в определённых условиях (иначе ни ООП-полиморфизм, ни перегрузку методов не обеспечить), и дженерики как довольно специфический и узкий способ параметризации типов...
Поэтому — за скалу не скажу, а F# отошёл от идей чистоты ML, повыкидывав из окамла много того, что не вписывалось. А в дальнейшем приобретя многое другое.
Так что говорить, что F# это окамл плюс дорогущий рантайм, — это не совсем так.
А что касается портированных рантаймов, — ну так и ява-приложения запускаются и выглядят одинаково (чужеродно) на всех платформах. Дотнет хотя бы на винде выглядит органично.
Инсталлировать рантайм с каждым приложением сейчас нужды нет: в линуксе вайн и моно в репозиториях валяются, менеджером пакетов по зависимостям подтягиваются.
В отличие от того же окамла, где каждое приложение — это как бизибокс, всё своё прилинковал с собой.
Есть ещё вариант — сделать свой собственный рантайм, возможно, очень компактный. Ну и получим смолток, ещё-одну-какую-нибудь-яву, или вообще луа (вот уж рекордсмен по компактности рантайма). Ах да, — это всё не ФП было. Пример из ФП — это, конечно же, лисп.
А потом всё равно заморочимся по связыванию с внешним миром через биндинги, маршаллинг или добавление в язык изначально несвойственных фич.
Здравствуйте, monax, Вы писали:
M>Плюсы же нужно каждый раз просить (auto), чтобы он типы вывел.
Это мелочь если стоит выбор между mainstream языком и экзотикой.
Кстати, в Haskell'е даже let писать не нужно.
M>Ещё интересно было бы сравнить время появления автоматического вывода типов в плюсах и окамле.
Как механизм автоматический вывод типов уже был в ISO C++98, а в компиляторах ещё раньше. Но был доступен для небольшого ряда конструкций. Новые версии соответственно расширили область применимости.
Здравствуйте, monax, Вы писали:
M>F# — это, считай, OCaml. Только они добавили туда null и связали с .net. Вроде как люди приглядываются и даже пользуются, но для меня есть большой недостаток — MS. Т.е. под линухом я это никак не заведу (моно не в счёт, это странное явление)
А что в Mono странного? Между прочим, F# тестируется в том числе и на Mono на Linux. И значительная часть пользователей используют его именно на такой платформе.
Здравствуйте, nikov, Вы писали:
N>А что в Mono странного? Между прочим, F# тестируется в том числе и на Mono на Linux. И значительная часть пользователей используют его именно на такой платформе.
Да и вообще, при чём тут моно, когда .NET core уже больше года работает на линуксах.
Здравствуйте, Кодт, Вы писали:
К>Французы — извращенцы, сначала форкнули 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>Но при всех этих прекрасных характеристиках в мейнстриме его нет, ну разве что в виде 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
Здравствуйте, monax, Вы писали:
M>Хаскель другой совсем. Насколько я понял, ленивые вычисления в хаскеле ломают людям голову, потому что заставить его создать side-effect сложно. Впрочем, это пока только по отзывам, изучать его пока не довелось.
Побочные эффекты в хаскеле создаются легко. Просто их надо явно прописывать через типы, а это непривычно для многих.
M>F# — это, считай, OCaml. Только они добавили туда null и связали с .net. Вроде как люди приглядываются и даже пользуются, но для меня есть большой недостаток — MS. Т.е. под линухом я это никак не заведу (моно не в счёт, это странное явление), а под линухом я как раз и работаю. Так что для перехода на F# должно произойти что-то неординарное, чтобы я плюнул на все знания в линух-экосистеме и перешёл в дотнет. Тут либо мне нужно будет выполнять задачу, которая вот 100% хорошо ложится на виндовс+дотнет, но совсем не ложится на линух+окамл, либо F# должен дать мне такие дикие преимущества, что без него никак. Но этого не будет, да и окамл — это "в целях повышения образованности", на прод его тащить пока не собирался.
Мне F# как язык нравится даже больше, чем Ocaml. Особенно в первом нравятся sequence expressions и его обобщение computations expressions. Но тоже огорчает завязка на жирный рантайм дотнета.
Здравствуйте, Klapaucius, Вы писали:
K>Вообще, у окамла много серьезных недостатков, но у мейнстримовых языков многое или все еще хуже. К примеру, у окамла игрушечный рантайм без SMP, но у популярных динамических языков рантаймы, как правило, еще более убогие и игрушечные.
До рантайма я ещё не добрался. А что с ним не так?
Здравствуйте, monax, Вы писали:
M>До рантайма я ещё не добрался. А что с ним не так?
Основной недостаток не поддерживает SMP, одновременно может выполнятся только один поток.
То есть все что связано с потоками работает (тот же модуль Thread), но так как будто выполняется
на однопроцессорном и одноядерном компьютере.
Такой же недостаток есть скажем у питона с его GIL, или у nodejs.
Выход использовать вместо потоков процессы.
Второй большой недостаток ограниченность многих типов например max_int для 32 бит
всего лишь 1073741823, один бит данных забирает теговая система для GC. Еще сильнее
ограничения в размерах для массивов Sys.max_array_length всего лишь 4194303.
Все это конечно уже мало значимо для 64 бит, но для 32 это заметный недостаток.
Третий недостаток, который сильно повлиял на популярность по моему, это ориентированность
на unix образные системы, windows скорее по остаточному принципу, хотя в последнее
время с этим получше.
M>F# — это, считай, OCaml. Только они добавили туда null и связали с .net. Вроде как люди приглядываются и даже пользуются, но для меня есть большой недостаток — MS. Т.е. под линухом я это никак не заведу (моно не в счёт, это странное явление), а под линухом я как раз и работаю. Так что для перехода на F# должно произойти что-то неординарное, чтобы я плюнул на все знания в линух-экосистеме и перешёл в дотнет. Тут либо мне нужно будет выполнять задачу, которая вот 100% хорошо ложится на виндовс+дотнет, но совсем не ложится на линух+окамл, либо F# должен дать мне такие дикие преимущества, что без него никак. Но этого не будет, да и окамл — это "в целях повышения образованности", на прод его тащить пока не собирался.
Здравствуйте, novitk, Вы писали:
N>Если ты хочешь не "ломки головы", а максимальной продуктивности, то я советую остаться на Питоне. Динамика до сих пор рулит, хотя разрыв и сокращается.
На OCaml кстати тоже очень легко писать, и потом читать код. Может и с питоном в этом посоревноваться.
Я вот летом с Nim (http://nim-lang.org/) поигрался, хоть и корявый и сырой пока язык, но по моему
продуктивность на нем не хуже питона.