Программирование


Ответить в тред Ответить в тред

<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
391 19 150

OCaml thread /ocaml/ Аноним 24/05/18 Чтв 20:40:43 11962601
OCamlLogo.svg.png (61Кб, 2000x549)
2000x549
Мультипарадигменный язык общего назначения.

Чтиво: https://realworldocaml.org, хотя многие пишут, что OCaml from the Very Beginning намного лучше.
Работа: например, контора под названием ahrefs вроде бы с украинскими корнями, офисы в Сан-Франциско и Сингапуре.
Аноним 24/05/18 Чтв 21:13:38 11962962
>>1196260 (OP)
Вроде же был где-то верблюдотред. Утонул что ли?
Аноним 24/05/18 Чтв 21:30:06 11963093
не нужон, ведь есть ф#
/thread
Аноним 24/05/18 Чтв 21:45:24 11963174
>>1196309
Как раз проприетарная пораша не нужна.
Аноним 24/05/18 Чтв 21:53:30 11963205
Аноним 24/05/18 Чтв 21:58:53 11963226
>>1196320
Я не тралю. Серьезно, какого хуя я должен зависеть от конторы, которая по своему желанию развивает язык и инфраструктуру? Посмотри на ту же Джаву, как там годами проталкивают фичи, которые уже давно везде есть.
Аноним 24/05/18 Чтв 23:35:36 11963597
>>1196260 (OP)
JS-макака ИТТ. Познакомился с языком в общих чертах ковыряя bucklescript, вкатился легко из-за знания SML. Люблю язык за паттерн матчинг, type inference и exhaustivenes check. Теперь пишу либы на OCaml и транспайлю в JS, брат жив, зависимость есть.
Аноним 25/05/18 Птн 00:11:45 11963778
>>1196260 (OP)
Подписался.
GIL до сих пор не выпилили?
Аноним 25/05/18 Птн 01:11:23 11964109
>>1196359
>пишу либы на OCaml и транспайлю в JS
Пили кулстори. Для себя или нет? Как в контору протащил? Лид не бугуртит?
Аноним 25/05/18 Птн 01:12:02 119641110
>>1196377
Вроде выпилили почтискороочень скоро

Еще вроде недавно добавили sequence api, как в кложе.
Аноним 26/05/18 Суб 23:47:19 119741811
>>1196309
Кто его вообще в реальности юзает-то?
Аноним 27/05/18 Вск 02:45:14 119749312
Аноним 27/05/18 Вск 15:14:47 119770513
Аноним 27/05/18 Вск 15:28:30 119771414
>>1197418
Французы всякие в рисечах своих. Ользо, на верблюде написан компилятор языка Haxe тоже французы пилят в основном.
Аноним 27/05/18 Вск 15:41:28 119772615
>>1197714
Так я не про верблюд, а про решетку.
Аноним 27/05/18 Вск 17:05:39 119779416
>>1197714
Не понимаю, почему он слабо распространен в индустрии. Поддерживает разные парадигмы, компилируется в быстрый код, вывод типов и куча других полезных вещей. Но код пишут на ебучей Джаве все равно.
Аноним 27/05/18 Вск 17:26:08 119781117
>>1197794
Маркетинг же. Джава была создана, чтобы переманить армию крестомакак на сановский стек.
Аноним 27/05/18 Вск 17:39:09 119782118
>>1197811
Я сам вынужден, к сожалению, на Джаве программировать, потому что на ней дохуя работы. Но сейчас изучаю верблюда и охуеваю, насколько он более продвинут. Джава - дно ебаное, новые фичи добавляют раз в 10 лет, вывода типов нормального нет, пишешь хуеву гору строчек, для чего в других языках надо написать одну-две.
Аноним 27/05/18 Вск 17:56:58 119783619
>>1197821
Ну, по сравнению с крестами она была в свое время прорывом. При том, что common lisp и smalltalk уже вовсю были в 80-ые, да.
Аноним 27/05/18 Вск 18:17:22 119785120
>>1197836
А с чем связана низкая популярность OCaml? Только в маркетинге дело? Или макаки слишком тупы, чтобы его осилить?
Аноним 27/05/18 Вск 18:21:12 119785621
>>1196410
Для себя конечно. Я пока еще работаю не в вебе.
Аноним 27/05/18 Вск 18:58:46 119788522
>>1197851
Ну я же вроде написал: >>1197811 - армию си-макак нужно было пересадить на кресты, потом на джаву, потом сисярпы всякие и заверте... Из-за этого в мейнстриме все с опозданием на четверть века идет.
Аноним 27/05/18 Вск 19:29:52 119790023
>>1197885
Какие перспективы у сабжа?
Аноним 27/05/18 Вск 20:25:19 119792824
>>1197900
Ну, последнее время динамика у него хорошая, вон даже фейсбук в него вложился со своим ризоном. Но мейнстримом он в ближайшие годы конечно не станет. Как минимум ознакомиться до уровня "могу читать код" однозначно стоит.
Аноним 28/05/18 Пнд 00:46:21 119808325
>>1197900
Фейсбук готовит большой камбек для OCaml, скоро увидим.
На джаваскрипт фронте весьма вероятно обойдет Elm, Purescript и ClojureScript по популярности.
Аноним 28/05/18 Пнд 00:53:11 119808726
>>1198083
>Elm, Purescript и ClojureScript
Они в сумме хотя бы десятую часть популярности react|angular|vue набирают?
Аноним 28/05/18 Пнд 01:22:31 119809627
Несколько раз пытался просто ради интереса начинать учить, но так и не понял зачем он нужен, при наличии Haskell, Scala, Rust, Erlang.
Аноним 28/05/18 Пнд 04:09:24 119811328
>>1198087
Они все используют реакт, кроме Elm
Аноним 28/05/18 Пнд 05:07:49 119811929
Аноним 28/05/18 Пнд 05:45:19 119812230
>>1198119
Вряд ли кто-то реально верит что это конкурент TS. Цель скорее быть номером 3, после JS и TS
Аноним 28/05/18 Пнд 15:12:03 119829531
15218225208681.png (50Кб, 753x661)
753x661
>>1198087
>Они в сумме хотя бы десятую часть популярности react|angular|vue набирают?
Аноним 28/05/18 Пнд 21:59:44 119851332
>>1198122
>Вряд ли кто-то реально верит что это конкурент TS.
По возможностям TS значительно уступает Elm.
Аноним 28/05/18 Пнд 23:06:33 119855433
>>1198513
У Elm только йоба-фп и крутая система типов.
А TS - это инфраструктура (definitely-typed, vscode) + поддержка от M$ + простота в освоении (можно импортить нетипизированный js) + охват аудитории (от тех, кому просто нужен intellisence до людей, заморачивающимися над типами - strictNullChecks, всякие типы-обертки Pick, Exclude и т.д.). Фактически это лесенка из нескольких языков от "просто js" до языка js-подобного с неплохой типизацией.
Аноним 28/05/18 Пнд 23:07:19 119855534
>>1198554
короче, рыночек порешал
Аноним 28/05/18 Пнд 23:14:55 119855735
>>1198083
>>1198122
стартовые позиции так себе - фактически reason привязан к одному фреймворку, пусть и самому популярному пока - но это может рано или поздно измениться, также они конкурируют с собственным flow - т.е. в результате кто-то, очевидно, заглохнет.
Аноним 29/05/18 Втр 20:09:33 119903536
https://ahrefs.com/de/jobs/reasonml-developer

>Our frontend is implemented mostly in React.js with some ReasonML. As such, proficiency in ReasonML is very much appreciated, otherwise a strong inclination to intensively learn ReasonML in the short term will be required. Knowledge of other functional languages (OCaml, F#, Haskell, Scala, etc) or concepts will be helpful. (If you’d rather prefer working with functional language on the server-side, consider our OCaml position).

>Remote
>Singapore, modern office in CBD
>USA, San Francisco downtown

>Competitive salary oh boy...
Аноним 29/05/18 Втр 21:06:15 119909437
>>1198557
Он не привязан к фреймворку, просто у них один создатель. В любом случае это единственный нужный фреймворк.
Аноним 29/05/18 Втр 21:07:29 119909638
>>1199035
Пиксель перфект верстка - сразу нахуй.
Аноним 29/05/18 Втр 21:08:14 119909739
>>1199094
В чем прикол ReasonML? Какие отличия принципиальные от того же Elm?
Аноним 29/05/18 Втр 21:13:30 119910340
>>1199097
>В чем прикол ReasonML?
Окамл с нескучным синтаксисом же.
Аноним 29/05/18 Втр 21:18:10 119910641
Смысл от этого поделия на фронте? Типы выводить? Они там нафиг не нужны. У него есть киллерфичи как репл у кложаскрипта?
Аноним 29/05/18 Втр 21:21:21 119910942
>>1199097

1. Изи интероп
2. Интуитивный маппинг модуля к модулю (дает возможность смешивать с JS и мигрировать по одному файлу)
3. Практичная нечистота.
4. Язык широкого применения (доступны server-side, системное программирование, компиляция в JS и машинный код).
5. ML модули
6. Быстрейший компилятор
Аноним 29/05/18 Втр 21:24:45 119911243
>>1199109
>3. Практичная нечистота.
Вот тут поясни. Типа, Хаскель чистый, и там трудно изъебываться со структурами данных и алгоритмами?
Аноним 29/05/18 Втр 21:27:39 119911644
>>1199106
Каким образом это киллер фича? У любого функционального языка есть REPL. Но в типизованных языках куда веселее и более "киллер фича" — это игры с тайпчекером.
Аноним 29/05/18 Втр 21:30:20 119911845
>>1199116
>У любого функционального языка есть REPL.
Блять, да даже в жабу репл завезли нахуя только, непонятно.
Аноним 29/05/18 Втр 21:30:38 119911946
>>1199112
Иметь нечистую реализацию за чистым интерфейсом — одна из киллер фич ML языков, Scala и друзей.
Аноним 29/05/18 Втр 22:18:17 119913147
>>1199116
Твоя киллер фича не нужна на фронте, я спросил именно про фронт. И такого же пиздатого репла, как кложы я не видел ни у одного языка.
Аноним 29/05/18 Втр 22:42:56 119914148
>>1199131
>И такого же пиздатого репла, как кложы я не видел ни у одного языка.
Что там такого пиздатого? Расскажи, я просто не в курсе.
Аноним 29/05/18 Втр 23:21:20 119915749
>>1199131
Это Clojure не предлагает достаточно над JS, чтобы менять шило на мыло, а типы нужны.
Аноним 29/05/18 Втр 23:29:23 119916150
>>1199106
>Смысл от этого поделия на фронте?
Действительно, не очень большой, если сравнить с кложей, но это гораздо лучше тех же тайпскриптов и прочих франкенштейнов. Да и окамл норм, чем больше у него платформ - тем лучше.

>>1199109
>1. Изи интероп
))
Аноним 29/05/18 Втр 23:31:19 119916251
>>1199116
>>1199118
This is not the REPL you are looking for. Нормального репла в языках ML-семейства нет и не может быть в принципе, потому что модель выполнения не та. Настоящий репл подразумевает возможность подключиться к работающей программе и изменить любую часть ее состояния вживую. Сейчас просто все стали называть реплом любую хуйню, куда можно выражения вводить.
Аноним 29/05/18 Втр 23:32:24 119916352
>>1199119
Чистота\нечистота в типах никак не отражается, так что никакой киллер фичи тут нет, не выдумывай хуйни, анон. Во все функциональных языках "нечистая реализация за чистым интерфейсом", Капитан Очевидность гарантирует это.
Аноним 29/05/18 Втр 23:42:08 119916553
>>1199162
Не выдумывай хуйни. Тебе REPL расшифровать по буквам?
Аноним 29/05/18 Втр 23:42:46 119916754
>>1199161
>гораздо лучше тех же тайпскриптов
Ваши доказательства?
Аноним 29/05/18 Втр 23:57:19 119917355
Аноним 30/05/18 Срд 00:35:29 119919256
Аноним 30/05/18 Срд 11:43:16 119931357
>>1197836
Она никогда не была прорывом, тоже писал на ней и двачую - это дно ебаное. Новые и нужные фичи добавляются медленно и в каком-то адовейше убогом виде, один functional interface или постоянный .equals вместо нормального оператора сравнения, чего стоят. Блядь, да она в 95 году появилась, после пистона, ровесник руби, как вообще можно было выпустить такое говно.
Аноним 30/05/18 Срд 15:52:32 119944858
Аноним 30/05/18 Срд 16:04:08 119945159
>>1199448
Не нашел ничего о твоих маняфантазиях про НАСТОЯЩИЙ РЕПЛ. Соси хуй, обосрыш.
Аноним 30/05/18 Срд 16:23:33 119946360
Аноним 30/05/18 Срд 18:16:52 119952361
>>1196260 (OP)
есть ли кстати хоть какой-нибудь редактор, где окамль можно дебажить брейкпоинтами?
смог нагуглить только
https://github.com/hackwaly/vscode-ocaml
но пока еще не пробовал, но судя по всему не очень удобно в больших проектах.
Да и от использования в больших проектах останавливает отсутствие мультиядерности.
Есть конечно
https://github.com/ocamllabs/ocaml-multicore
но интересно заработает ли вообще с ним ocamlldebug
Аноним 30/05/18 Срд 18:54:32 119954062
>>1199523
>есть ли кстати хоть какой-нибудь редактор, где окамль можно дебажить брейкпоинтами?
Эм... Emacs. Ты так спрашиваешь, будто существует что-то еще.
Аноним 30/05/18 Срд 18:55:06 119954263
>>1199523
Ты не поверишь, но emacs
Аноним 30/05/18 Срд 20:22:48 119961564
>>1199540
А в виме что-нибудь есть?
Аноним 30/05/18 Срд 20:49:25 119964265
>>1199615
В виме обычно все намного хуже с расширениями.
Аноним 30/05/18 Срд 22:25:17 119971966
>>1199615
Просто поставь spacemacs, и у тебя будет искаропки готовый вим внутри имакса со всеми хоткеями первого и всеми расширениями второго.
Аноним 30/05/18 Срд 23:17:03 119973467
>>1199542
>>1199540
>emacs
На секунду задумался, но посмотрел какой сегодня год и вспомнил сколько стоит час моего времени для заказчиков.
Видимо все таки f# на .net core единственный легитимный выбор. И мультиядерность есть.
Аноним 31/05/18 Чтв 00:25:54 119976368
>>1199734
>сколько стоит час моего времени для заказчиков
и сколько же? надеюсь, уже больше чем у стареющей шлюхи в русском мухосранске
Аноним 31/05/18 Чтв 01:35:03 119979969
>>1199734
Эм, тебе же постом выше написали, как называется настроенный искаропки имакс. Или под временем ты имел в виду изучение вимовских кейбиндингов?
Аноним 31/05/18 Чтв 09:39:30 119986070
>>1199799
Лол, кейбиндинги не нужно изучать, они должны въедаться в пальцы на бессознательном уровне. Вешаешь перед глазами распечатанный на A4 cheatsheet и вперёд пользоваться.
Аноним 31/05/18 Чтв 18:27:29 120007071
>>1199860
Зачем ты мне-то это написал? Постом не промазал?
Аноним 31/05/18 Чтв 20:02:53 120013772
Аноним 02/06/18 Суб 02:03:07 120117473
bump
Аноним 12/06/18 Втр 21:51:07 120863274
>>1196260 (OP)
В чем преимущества по сравнению с Хаскелем?
Аноним 12/06/18 Втр 22:10:56 120864775
>>1208632
Предсказуемое поведение в рантайме, нет подводных камней из-за ленивости.
Аноним 12/06/18 Втр 22:44:42 120867276
>>1208647
А ленивость прям уж так эффективна? Ведь нихуя не понятно, что вычисляется, а что нет.
Аноним 12/06/18 Втр 22:55:50 120868377
>>1208672
Я говорю: нет ленивости, следовательно нет вызванных ею подводных камней.

В теории ленивые вычисления объективно лучше и мощнее энергичных, но на практике лучше иметь энергичные вычисления по дефолту и ленивые там, где ты явно этого запрашиваешь (например, ленивые стандартные коллекции точно должны быть).
Аноним 13/06/18 Срд 09:12:14 120884878
>>1208632
Простота. Большинство языка очень просто для того, чтобы начать на нем писать и понять любому человеку сходу.
Некоторые продвинутые фишки конечно имеются, но они опциональны и избегаются по умолчанию.
Аноним 13/06/18 Срд 10:54:47 120887879
>>1208848
Почему тогда пишут на богомерзкой жабе?
Аноним 13/06/18 Срд 16:13:44 120911480
>>1208878
Потому что в маркетинг джавы корпорациями вбухано больше денег.
Аноним 20/06/18 Срд 13:48:16 121364781
268full-jc-dent[...].jpg (36Кб, 268x268)
268x268
БАМП
Аноним 20/06/18 Срд 15:31:42 121370982
>>1213647
Мультикор допилили?
Аноним 23/06/18 Суб 12:45:21 121569283
Хаскель офигенен, но пороговый вход в Окамл ниже, а глубина потенциального погружения почти такая же. + почитайте статью pusher о gc Хаскеля - им пришлось зассать и перейти на go
Аноним 23/06/18 Суб 19:45:28 121594184
What makes OCaml special is that it occupies a sweet spot in the space of programming language designs. It provides a combination of efficiency, expressiveness and practicality that is matched by no other language. That is in large part because OCaml is an elegant combination of a few key language features that have been developed over the last 40 years.
...
Some of you will know and love all of these features, and for others they will be largely new, but most of you will have seen some of them in other languages that you've used. As we'll demonstrate over the course of this book, there is something transformative about having them all together and able to interact in a single language. Despite their importance, these ideas have made only limited inroads into mainstream languages, and when they do arrive there, like first-class functions in C# or parametric polymorphism in Java, it's typically in a limited and awkward form. The only languages that completely embody these ideas are statically typed, functional programming languages like OCaml, F#, Haskell, Scala, and Standard ML.
...
The compiler has a straightforward compilation strategy that produces performant code without requiring heavy optimization and without the complexities of dynamic just-in-time (JIT) compilation. This, along with OCaml's strict evaluation model, makes runtime behavior easy to predict. The garbage collector is incremental, letting you avoid large garbage collection (GC)-related pauses, and precise, meaning it will collect all unreferenced data (unlike many reference-counting collectors), and the runtime is simple and highly portable.

https://v1.realworldocaml.org/v1/en/html/prologue.html#why-ocaml
Аноним 28/06/18 Чтв 21:08:22 121912585
>>1215941
>The garbage collector is incremental, letting you avoid large garbage collection (GC)-related pauses, and precise, meaning it will collect all unreferenced data (unlike many reference-counting collectors), and the runtime is simple and highly portable.
То есть он компилирует в нативный код, и там при этом есть сборщик мусора?

>garbage collector is incremental
Поясните, чем такой сборщик отличает от того, что в Джаве.
28/06/18 Чтв 22:30:48 121918886
Аноним 09/07/18 Пнд 23:33:27 122533287
>>1219188
То есть в Окамл сборщик мусора как бы встроен в каждую программу?
Аноним 09/07/18 Пнд 23:56:49 122534788
>>1225332
Эм, ну да, типа того.
Аноним 10/07/18 Втр 23:06:57 122586689
Есть какие-нибудь годные плагины для Эклипса или Идеи? Вим, емакс не предлагайте, ну их нахуй, вот честно, заебался дрочить разные эзотерические кнопочки, нихуя не прикольно. Пробовал ставить Атом, но сразу же охуел от его убогости. Где код-то писать?
Аноним 10/07/18 Втр 23:13:23 122586890
да, лол
Аноним 11/07/18 Срд 01:04:01 122590291
>>1225866
>Где код-то писать?
Хз, я один раз лет 10 назад настроил имакс и с тех пор ни разу не задавался таким вопросом
Аноним 11/07/18 Срд 09:52:17 122597592
>>1225866
>Вим, емакс не предлагайте
Предлагаю тебе выбросить компьютер нахуй и не кодировать никогда больше.
Аноним 11/07/18 Срд 09:55:24 122597693
Аноним 11/07/18 Срд 14:27:56 122609994
>>1225975
>Предлагаю тебе выбросить компьютер нахуй и не кодировать никогда больше.
Тричую, две самых топовых IDE точнее, топовый текстовый редактор и топовую IDE не осилить - это дно полное.
Аноним 11/07/18 Срд 18:45:12 122621695
>>1226099
>>1225976
>>1225975
В зк любой пиздеть горазд. А на деле вы сидите в Эклипсе/Идее/ВижуалСтудии, а вим используете для правки конфигов на сервере, когда припрет. Пиздоболы хуевы.
Аноним 11/07/18 Срд 18:52:12 122621996
>>1226216
Сцука, под языки, на которых я пишу, нет готовых IDE. С чего ты вообще взял, что тебе пиздят? Ты думаешь, раз ты не умеешь пользоваться блядь текстовым редактором, то никто не умеет?
Аноним 11/07/18 Срд 19:10:09 122623597
>>1226219
Как это все выучить? Ты серьезно дрочил все эти комбинации клавиш и конфиги, чтобы скомпилить хелло ворлд на Окамл?
Аноним 11/07/18 Срд 19:18:12 122623898
2018-07-11-1917[...].png (17Кб, 668x366)
668x366
Аноним 11/07/18 Срд 19:19:09 122624099
>>1226235
Это не нужно учить, это въедается в мышечную память. Ты же не "учишь" велосипед?
Аноним 11/07/18 Срд 19:19:37 1226241100
Аноним 11/07/18 Срд 19:21:05 1226244101
Аноним 11/07/18 Срд 19:21:34 1226245102
>>1226240
>Это не нужно учить, это въедается в мышечную память.
Как? Я пробовал в Идее ставить вим-режим, через полчаса охуевания отключил его, все было пиздец как медленно.
Аноним 11/07/18 Срд 19:24:59 1226248103
изображение.png (162Кб, 585x367)
585x367
>>1226235
>Как это все выучить?
Аноним 11/07/18 Срд 19:26:13 1226249104
>>1226245
А ты не пробовал потратить на обучение работе за компьютером больше получаса?
Аноним 11/07/18 Срд 19:27:37 1226251105
>>1226216
АХАХАХАХАХАА
Блядь, хипстерки уже настолько отупели что не способны открыть встроенный туториал в emacs
Аноним 11/07/18 Срд 19:28:40 1226253106
b1cb6ae94e6c349[...].jpg (39Кб, 400x420)
400x420
>>1226248
Ещё раз, учить не надо, просто начинаешь использовать. Что забываешь - смотришь в чит-шите, может быть полезно его напечатать и повесить за монитором. Чит-шит, я надеюсь, без нашей помощи нагуглишь но если что - обращайся
Аноним 11/07/18 Срд 19:33:01 1226256107
>>1226253
Сколько надо времени, чтобы выйти на нормальную продуктивность?
Аноним 11/07/18 Срд 20:43:00 1226313108
>>1226245
Хуй знает, я зашел в вим, прошел вимтутор, через те же полчаса-час основные комбинации в руках уже были но сейчас я уже все забыл, потому что я ненавижу вим, но если хочешь вим, то ставь хотя бы спейсмакс, сам по себе вим унылое говно. Ну и это в любом случае лучше, чем постоянно тратить время на потягушечки к стрелочкам и выделение кода мышкой, не?
11/07/18 Срд 21:31:22 1226328109
>>1226313
А по емакс что посоветуешь? Или туториалы дрочить?
Аноним 11/07/18 Срд 21:33:28 1226329110
>>1226328
По емаксу вместе с туториалом ещё и мануал курить надо. Приятного прочтения!
Аноним 11/07/18 Срд 21:53:15 1226336111
>>1226256
У меня на то, чтобы перекатиться с vim на spacemacs, ушло недели две-три. А на то, чтобы освоить vim, несколько месяцев азаза
Аноним 11/07/18 Срд 22:02:51 1226341112
>>1226328
Да хуй знает, я помню в свое время Алекса Отта почитывал, ну и Xah Lee. А так - хз, вроде все сейчас просто ставят спейсмакс и все, у них там все доки свои есть.
Аноним 14/07/18 Суб 22:00:52 1228331113
Вижу, что потихоньку появляются вакансии по ReasonML. Заебок, наверное буду вкатываться, сейчас учу сам OCaml.
Аноним 18/07/18 Срд 17:47:36 1230516114
>>1226341
Да, сейчас есть спейсмакс. Там тебе и настроено все и на все случаи жизни, и документация есть.
Аноним 26/07/18 Чтв 18:46:28 1235584115
Мне вот кажется, в Хаскелле поудобнее все сделано, ну то есть там пишешь map или fold и все, а тут надо дергать List.* постоянно.
Аноним 02/08/18 Чтв 21:50:02 1239827116
Читаю Real World Ocaml, там используется Окамл старой версии, половина кода не компилится. Нашел Real World Ocaml версия 2, она в стадии беты сейчас. Может, кому-то будет полезно.
Аноним 03/08/18 Птн 17:27:19 1240311117
>>1239827
Где нашел-то? Вкидывай, хуль.
Аноним 03/08/18 Птн 20:12:43 1240424118
Аноним 20/08/18 Пнд 20:32:15 1249850119
Какой профит от такой функции: let compose f g = fun x -> f (g x)
Где это применяется и зачем?
Аноним 20/08/18 Пнд 22:18:19 1249890120
>>1249850
Композиция, фундаментальная операция над функциями. Вот числа можно же складывать? Вот и функции можно. Можешь написать map (fun x -> f (g x)) xs, а можешь написать map (f . g) xs - красивше ведь, не так ли?
Аноним 21/08/18 Втр 17:57:32 1250388121
>>1249890
>map (f . g) xs - красивше ведь, не так ли?
Красивше, только точка в Окамл не работает. Как вариант, можно такого уродца использовать: List.map (f x |> g |> h) xs.
Аноним 21/08/18 Втр 17:59:34 1250390122
>>1250388
>List.map (f x |> g |> h) xs
List.map (function x -> f x |> g |> h) xs
fix
Аноним 22/08/18 Срд 17:37:37 1251033123
>>1250388
Только пайпы - это про другое, к композиции функций они не имеют отношения.
Аноним 22/08/18 Срд 19:02:12 1251070124
>>1251033
Ну а как правильно делать композицию? И почему пайпы - это другое?
Аноним 22/08/18 Срд 21:00:19 1251120125
>>1251070
>И почему пайпы - это другое?
Эм, ну потому что пайпы - это применение функции к аргументу, а не композиция двух функций.

>Ну а как правильно делать композицию?
Не понял вопроса. Между compose f g и f . g никакой разницы нет, просто синтаксис разный (я в хаскель-синтаксисе написал). В окамле ты тоже можешь писать так же, если очень хочется: let (.) f g = ..., нутыпонел.

Алсо, рекомендую тебе взять и почитать какую-нибудь книжку по фп, чтобы с основами разобраться, ты сейчас немного плаваешь как мне кажется.
Аноним 22/08/18 Срд 21:18:24 1251128126
>>1251120
>какую-нибудь книжку по фп
Да я Окамл только недавно начал изучать, до самих концепций еще не дошел. Что посоветуешь почитать?
Аноним 22/08/18 Срд 21:27:19 1251136127
>>1251120
Короче, я понял, в чем разница.

# let ( << ) f g x = f (g x) ;;
val ( << ) : ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b = <fun>

# let ( |> ) x f = f x ;;
val ( |> ) : 'a -> ('a -> 'b) -> 'b = <fun>
Аноним 23/08/18 Чтв 20:06:11 1251608128
>>1251128
>Что посоветуешь почитать?
хтдп

Конкретно по окамлу и для ньюфагов не знаю (точнее знаю одну охуенную книжку, но она на французском, лол). Можешь какой-нибудь think ocaml навернуть наверное но лучше хтдп, а потом real world ocaml

>>1251136
Ну я и говорю, ага:
>пайпы - это применение функции к аргументу, а не композиция двух функций.
Аноним 23/08/18 Чтв 21:01:44 1251639129
Аноним 26/08/18 Вск 03:38:16 1252776130
>>1251639
Охуенный типаж, я таким всегда на лицо кончаю, и им нравится. Думаю, эта не исключение.
Аноним 02/09/18 Вск 22:37:13 1257532131
>>1251608
>точнее знаю одну охуенную книжку, но она на французском, лол
Что за книжка?
Аноним 02/09/18 Вск 23:30:57 1257608132
Аноним 03/09/18 Пнд 13:35:05 1257856133
Аноним 03/09/18 Пнд 16:39:21 1257978134
Аноним 03/09/18 Пнд 16:54:07 1257997135
350px-MoneyStoN[...].png (122Кб, 350x151)
350x151
Аноним 01/10/18 Пнд 07:06:18 1272641136
let _ = bump "pr/1196220"
Аноним 01/10/18 Пнд 18:05:40 1272886137
>>1272641
>"pr/1196220"
Нетипизированное говно, как тебе не стыдно такое писать?
Аноним 03/10/18 Срд 23:33:00 1274210138
Пишем функцию let summ x y = x + y
Самец выводит тип int -> int -> int
Как быть, если я хочу использовать float?
Аноним 03/10/18 Срд 23:47:11 1274213139
Аноним 03/10/18 Срд 23:52:44 1274214140
Аноним 04/10/18 Чтв 00:16:58 1274216141
Аноним 08/10/18 Пнд 13:58:07 1276376142
>>1274216
Перегрузки не завезли?
Аноним 08/10/18 Пнд 17:00:54 1276446143
>>1276376
Специальный полиморфизм. Говорите правильно.
Аноним 12/10/18 Птн 12:12:28 1278041144
>>1196260 (OP)
А почему бы нам не пообсуждать type inference? На первый взгляд очень удобная вещь, после которой смотришь на языки где нужно самому устанавливать типы как на говно, но, наверняка, должны быть какие-то минусы о которых я не знаю. Итак, плюсы и минусы type inference го.
Аноним 12/10/18 Птн 14:34:25 1278082145
>>1278041
Минусы в том, что любые более-менее сложные системы типов суть undecidable, то есть для них не существует алгоритма вывода типов. В итоге у тебя может для простых случаев он и работает, а вот когда ты что-то написал и сам не уверен, то ли ты написал, оно перестает работать. Поэтому всегда есть дилемма: сохранить простоту системы типов, чтобы была выводимость, или добавить фич (т.е. увеличить количество типизирующихся программ), но потерять выводимость.

Ну и плюс типы все равно желательно писать для функций, просто в качестве документации.
Аноним 13/10/18 Суб 00:07:57 1278391146
>>1196260 (OP)
>или добавить фич (т.е. увеличить количество часов на разгребание трехметровых шоблонов в цэпэпэшном стиле)
Аноним 15/10/18 Пнд 05:36:10 1279216147
Аноним 15/10/18 Пнд 13:06:42 1279392148
Аноним 15/10/18 Пнд 15:52:37 1279503149
>>1279216
Сore - это и есть стандартная библиотека. There is no standard library.
Аноним 15/10/18 Пнд 18:00:30 1279553150
>>1226216
Сижу в vs code c vim модом.
Аноним 15/10/18 Пнд 18:19:19 1279566151
>>1279553
Каково это - программировать с анальным зондом господина в заднице?
Аноним 15/10/18 Пнд 19:04:20 1279589152
Аноним 16/10/18 Втр 05:13:27 1279812153
>>1279503
Нихуя она не стандартная, личное поделие Jane Street.
Аноним 16/10/18 Втр 05:13:59 1279813154
>>1279589
Пердоля, зачем ты порвался?
Аноним 16/10/18 Втр 16:04:29 1279989155
>>1279812
Jane Street - единственная (коммерческая) компания, которая поддерживает сабж. Это как говорить "личное поделие оракла" про джава-релейтед стафф. Де-факто это стандартная библиотека, есть еще всякие батарейки, но нахуй они ненужны.
Аноним 16/10/18 Втр 16:05:00 1279990156
Аноним 18/10/18 Чтв 19:26:45 1281165157
о
Аноним 19/10/18 Птн 07:05:03 1281293158
Аноним 19/10/18 Птн 15:35:31 1281409159
Аноним 20/10/18 Суб 20:06:45 1281903160
Screenshot from[...].png (93Кб, 1398x686)
1398x686
>>1196359
Двачую, интероп очень легкодоступный.
Аноним 21/10/18 Вск 22:23:07 1282479161
27978serialexpe[...].jpg (129Кб, 1920x1080)
1920x1080
>>1196309
Функторов нет, GADT нет, объектов нормальных нет, сырого полиморфизма нет, первоклассных модулей нет, эффектов нет, уноси свой фрешетка из моего лампового треда.
Аноним 21/10/18 Вск 22:27:20 1282480162
>>1197794
>почему он слабо распространен в индустрии

Почему слабо? У пейсбука штук пять крупных проектов на окамле, еще на нем пишут в janestreet, airbus, citrix, lexifi, блумберг, дассо, чуваки из tezos.

мимо пишу на окамле за дошираки
Аноним 21/10/18 Вск 22:35:19 1282488163
>>1199523
>есть ли кстати хоть какой-нибудь редактор, где окамль можно дебажить брейкпоинтами?

Любой с поддержкой DWARF?

>>1279989
>Jane Street - единственная (коммерческая) компания

Нет, достаточно открыть пулл реквесты и посмотреть, кто и откуда коммитит в компилятор.

>Де-факто это стандартная библиотека, есть еще всякие батарейки, но нахуй они ненужны.

Стандартная библиотека у окамла довольно годная и поставляется с компилятором. Нашлепки, вроде Base, Containers, Batteries и Core -- это все ныне не очень нужно, на самом деле.
Аноним 22/10/18 Пнд 05:17:09 1282547164
>>1282488
>Нашлепки, вроде Base, Containers, Batteries и Core -- это все ныне не очень нужно, на самом деле.
Что почитать по стандарной либе, кроме офф доков? Пока читаю только эту книгу (https://caml.inria.fr/pub/docs/oreilly-book/ocaml-ora-book.pdf), но она старая.
Аноним 22/10/18 Пнд 08:53:16 1282574165
Ocaml.png (1338Кб, 3000x2250)
3000x2250
Аноним 22/10/18 Пнд 16:01:09 1282713166
>>1282488
Иммутабельные хэшмапы завезли уже?
Аноним 22/10/18 Пнд 19:13:15 1282858167
>>1282547
>Что почитать по стандарной либе, кроме офф доков? Пока читаю только эту книгу (https://caml.inria.fr/pub/docs/oreilly-book/ocaml-ora-book.pdf), но она старая.

Зачем по ней что-то читать? Она маленькая, в ней только типы данных, awkward squad (эфемероны, слабые указатели), да кое какие интерфейсы к GC, OC, буферам в сишной и фортрановской компановке и профайлингу. Для остального берешь нужную либу из opam.

http://caml.inria.fr/pub/docs/manual-ocaml/stdlib.html

Можешь читать стандартные доки, они в принципе исчерпывающие.

>>1282713
Нет, конечно, есть нормальный персистентный Map и мутабильный Hashtbl.
Аноним 22/10/18 Пнд 20:11:23 1282905168
>>1282480
>пишу на окамле
>за дошираки
Неплохо устроился, буржуй.
Аноним 22/10/18 Пнд 20:43:27 1282938169
Аноним 22/10/18 Пнд 20:44:48 1282939170
Аноним 28/10/18 Вск 15:22:35 1285891171
Говорят Facebook хайпит ReasonML, который по-сути OCaml
Аноним 28/10/18 Вск 17:45:36 1285976172
>>1285891
Не пойму, неужели синтаксис Окамла такая неизучаемая вещь, что для этого нужно изобретать свой велосипед с семиколонами?
Аноним 28/10/18 Вск 20:15:53 1286063173
>>1285976
Это для того чтобы быдлоджаваскриптеров не так сильно отпугивало.

Фрилансю на окамле уже третий год для финансового стартапа. Платят ок, брат жив. Давеча босс прибегат, глаз дурной -- был, мол на Facebook meetup все про ReasonML говорят, наколбась демку на нем тыжеможешь.

Иду сюда https://reasonml.github.io/en/try влево вниз пишу OCaml -- слева вверху ReasonML генерится. Синтаксис тошнотворный (может и с непривычки просто) но вроде все работает. Что главное -- сразу во фронте. Занятно.
Аноним 28/10/18 Вск 20:21:30 1286065174
>>1285976
Там много кривого говна (типа двойных семиколонов такая-то ирония, кек, что ты называешь ризон велосипедом с семиколонами), так что смысл в этом с одной стороны есть, а с другой - не сказать, чтоб особо лучше получилось, кек
Аноним 28/10/18 Вск 20:35:20 1286084175
>>1286063
>Фрилансю на окамле уже третий год для финансового стартапа. Платят ок, брат жив.
Как вкатился? Что почитать посоветуешь? Сейчас курю Real World Ocamal, но как-то тяжело идет.
Аноним 28/10/18 Вск 21:54:06 1286126176
>>1286084
> Как вкатился?
Окамл выучил в универе -- на диплом надо было огромные символьные расчеты делать -- посоветовали глянуть.
Потом фрилансил на жаба/питон/жабаскрипт. По приколу вставил в профайле OCaml -- желающие нашлись быстро.

> Что почитать посоветуешь?

Я помню, что прочитал первую главу ocaml-refman и пошел сразу код писать. Вторая глава про модули с функторами -- тоже нужна, когда уже много наколбасил и надо организовывать. Объекты в OCaml практически не нужны -- третью главу сразу пропускаешь. Четвертая глава всяческие синтаксические плюшки полезные.

Также я очень проперся от Unix system programming in OCaml.
https://ocaml.github.io/ocamlunix/
Но это если ты в низкоурвневых юниксах ковырялся.

Если любишь онлайн курсы, то вот всем рекомендую:

https://www.fun-mooc.fr/courses/course-v1:parisdiderot+56002+session03/about

> Сейчас курю Real World Ocamal
Мне вообще не понравилась. По-мне главный минус что они пихают Core JaneStreetовский.
Аноним 28/10/18 Вск 21:56:17 1286128177
>>1286065
Двойные семиколоны они же только чтоб реплу сказать что ты кончил, не? В коде не нужны.
Аноним 28/10/18 Вск 22:40:22 1286144178
>>1286065
>Там много кривого говна (типа двойных семиколонов

В OCaml нет двойных семиколонов, они нужны реплу для того, чтоб указать, что ввод закончен.
Аноним 29/10/18 Пнд 05:19:32 1286237179
Аноним 29/10/18 Пнд 19:17:49 1286545180
Аноним 29/10/18 Пнд 19:32:30 1286557181
Аноним 29/10/18 Пнд 22:02:51 1286652182
>>1286063
>Фрилансю на окамле уже третий год для финансового стартапа.
Скажи, из какой страны стартап если не деанон, конечно.
Аноним 30/10/18 Втр 00:52:20 1286751183
Аноним 01/11/18 Чтв 01:49:00 1287909184
>>1286126
>По-мне главный минус что они пихают Core JaneStreetовский.
Мейлчую. Я из-за этого говна helloworld сконпелировать не мог три дня.
Аноним 02/11/18 Птн 22:26:14 1289031185
Верблюдики, а может кто внятно за ppx объяснить? Пишу иногда на нем, но дальше основ языка не надо было. А всякие гуру обмазываются ppx и, поговаривают, пахнуть вкусно. Что такое вообще?
Аноним 04/11/18 Вск 12:37:15 1289575186
>>1289031
Местная замена макросам. Трансляторы AST -> AST. Добавляют разный сахарок, легковесная замена для старого camlp4 препроцессора.

Лучше с ними не увлекаться, использовать только то, что реально нужно, например ppx_deriving/ppx_type_conv с плагинами для вывода функций для типа (аналог хаскилевского derive).
Аноним 04/11/18 Вск 12:37:58 1289576187
>>1289575
К слову о макросах есть еще metaocaml, когда-нибудь его вольют в транк.
Аноним 04/11/18 Вск 17:19:48 1289690188
>>1289576
Ага, как и modular implicits
Аноним 05/11/18 Пнд 13:56:48 1290053189
>>1289690
>modular implicits

Иплиситы будут очень нескоро, ибо очень серьезные изменения (привет HKT и Dependent types и, как следствие, undecidable inference). metaocaml -- очень маленький патч поверх ванильного окамла, который может быть легко смерджен в любой момент, просто Олег еще не уверен, что это окончательный вариант.
Аноним 05/11/18 Пнд 14:58:14 1290090190
>>1290053
А ты умный...
Чем GADT от депендет тайпов отличается?
Аноним 05/11/18 Пнд 18:15:19 1290179191
>>1290090
Это проверка или ты сам не знаешь?
Аноним 05/11/18 Пнд 19:08:22 1290209192
>>1290090
> Чем GADT от депендет тайпов отличается?

GADT не имеют никакого отношения к зависимым типам. Зависимые типы стирают границу между типом и значением, тип в ЯП с зависимыми типами -- то же значение, а значение -- тот же тип. GADT -- это просто relaxed версия алгебраических типов, позволяющая в произвольной форме задавать зависимость типа и его параметров от конструктора.

За счет этой свободы можно получить некоторые возможности из языков с зависимыми типами, в частности доказательство теорем с помощью соотношения Карри-Говарда. Классический пример -- коммутативность сложения:

type z = Z
type 'a s = S : 'a -> 'a s

type (_,_,_) add =
| Add_base : (z, 'a, 'a) add
| Add_step : ('n, 'm, 'q) add -> ('n s, 'm, 'q s) add
type (_,_) eq = Refl : ('a,'a) eq

let theorem_add_comm : type n m p q. (n, m, p) add -> (m, n, q) add -> (p, q) eq = fun _Hnm _Hmn -> ...
Аноним 05/11/18 Пнд 19:10:44 1290211193
Аноним 05/11/18 Пнд 19:23:34 1290224194
>>1290209
Как оценивается выразительная сила типов окамла с GADT и (отдельно) с модулями?
Аноним 07/11/18 Срд 17:47:25 1291276195
07/11/18 Срд 17:48:38 1291277196
>>1291276
Ocaml 4.07, естественно
Аноним 08/11/18 Чтв 12:43:39 1291695197
08/11/18 Чтв 19:42:50 1291878198
>>1291695
Спасибо, но это только для топлевела. Что мне нужно линкануть? И где вообще почитать про это все?
Аноним 09/11/18 Птн 00:04:38 1292024199
Аноним 10/11/18 Суб 18:00:10 1292974200
Есть у кого OCaml from the Very Beginning?
Или где искать знает кто?

Аноним 10/11/18 Суб 19:27:38 1293064201
Аноним 11/11/18 Вск 12:45:16 1293458202
Аноним 14/11/18 Срд 13:16:45 1295338203
Какие киллер-фичи у ocaml по сравнению с rust?
Аноним 14/11/18 Срд 16:14:36 1295419204
>>1295338
> Сравниваю жопу с пальцем
Держи в курсе
Аноним 14/11/18 Срд 19:06:44 1295524205
>>1295338
На окамле можно писать ДСЛи.
Аноним 14/11/18 Срд 20:30:20 1295557206
>>1295338
Система модулей одна из лучших вообще.
Аноним 14/11/18 Срд 20:34:22 1295559207
>>1295524
> На окамле можно писать ДСЛи.
На расте, в целом, тоже, наверное. Деревья из сумтайпов, паттерн матчинг, что еще нужно?

>>1295557
> Система модулей одна из лучших вообще.
Вот это двачую. Модули функторы хороши

Аноним 14/11/18 Срд 21:17:28 1295580208
>>1295578

Треда по ФП нет, задам тута тоже
Аноним 14/11/18 Срд 21:43:39 1295587209
>>1295580
Ну в окамле много чего мутабельного есть. Да хоть тот-же Hashtbl:

type piece = King | Queen | Dvacher;;
type board = ((char * int), piece) Hashtbl.t;;
let b : board = Hashtbl.create 64;;
Hashtbl.add b ('e',2) Dvacher;;

Так как ты только вкатываешься -- пока так делай. Попривыкнешь, начинай в континуейшены, монады, в окамле Lwt, потихоньку
Аноним 15/11/18 Чтв 00:29:18 1295642210
>>1295559
Я здесь мимо, но хочу задать вопрос любителям окамла. Чем эти ваши модули принципиально лучше объектов (на примере Scala)? Есть ли какие-то преимущества кроме несколько менее тупящего вывода типов (в скала всю малину Any портит). Можно ли делать вычисления на уровне типов с ними? (Как в скале с path-dependent types, которые дают функциональность очень похожую на type families в хацкеле)
Аноним 15/11/18 Чтв 02:21:20 1295668211
Аноним 15/11/18 Чтв 08:48:35 1295738212
Какая библиотека для создания текстовых UI на OCaml сейчас считается наилучшей?
Аноним 15/11/18 Чтв 11:50:04 1295789213
Аноним 15/11/18 Чтв 13:30:08 1295841214
>>1295789
Текстовый UI, а не CLI, тупица. Notty же
Аноним 15/11/18 Чтв 19:25:45 1295962215
>>1295587
Можно простой пример, как в монады оборачивать?
Аноним 15/11/18 Чтв 21:04:30 1296012216
Аноним 17/11/18 Суб 17:21:18 1296775217
wallhaven-41793.png (3976Кб, 1920x1080)
1920x1080
Аноним 06/12/18 Чтв 11:30:02 1306845218
13083103943647.gif (970Кб, 500x362)
500x362
Бля, а где Haskell-тред?
Пару лет назад учил его, сейчас заинтересовался что там нового, узнал про Haskell 2020.
Чё там, надеюсь собираются дропать обратную совместимость в стандартной библиотеке и исправлять недочёты в иерархии классов?
Аноним 06/12/18 Чтв 20:11:18 1307108219
>>1306845
Создай свой хаскель тред. Но зачем, прими OCaml как своего спасителя от лени.
Аноним 06/12/18 Чтв 23:51:25 1307215220
>>1306845
>Чё там, надеюсь собираются дропать обратную совместимость в стандартной библиотеке и исправлять недочёты в иерархии классов?

А кастомную прелюдь запрещает юзать кто?
Аноним 06/01/19 Вск 20:46:04 1321882221
Блядь хороший язык, хотел вкатиться в хаскель но набрёл на fun-mooc, прохожу его сейчас, хорошо зделали. Бросил кложу из-за него вернусь.
Я сейчас поставил емакс и какие-то рекомендованые пакеты через opam install.
Какой у вас воркфлоу и какие инструменты? Я пока для хелловорлдов своих использую dune для сборки и запуска юнит-тестов (уёбки закрыли задачи на курсе, а пройти хочется), emacs для редактирования. Из емакса подбрасываю в utop если надо.
В принципе норм, но хотелось бы чтобы ворнинги/ошибки в файле на лету обновляло.
Дебаггер ещё не пробовал.
Аноним 07/01/19 Пнд 18:08:47 1322333222
>>1321882
dune двачую, а так использую VS Code вместо IDE.
Аноним 10/01/19 Чтв 22:16:05 1324566223
>>1196317
F# не зависит от MS. Он давно уже опенсорс. Его пилит Fsharp Foundation.
Аноним 10/01/19 Чтв 22:17:36 1324570224
>>1197726
У него довольно мощное русскоязычное сообщество в Телеграме, и вообще в СНГ.
Аноним 10/01/19 Чтв 22:19:55 1324575225
Аноним 10/01/19 Чтв 22:52:32 1324639226
Аноним 11/01/19 Птн 05:51:58 1324744227
>>1324575
Это перевод или он так убого пишет?
Аноним 11/01/19 Птн 09:40:45 1324798228
>>1324744
Он отлично пишет. Это один из лучших русскоязычных преподавателей. Окамл как и Лисп для думающих, C++ и прочий мейнстрим для широких масс. Поэтому Окамл непопулярен, ты же об этом спросил, вот тебе ответ.
Аноним 11/01/19 Птн 13:04:35 1324893229
>>1324566
А дотнет уже опенсорс?
Аноним 11/01/19 Птн 13:13:49 1324896230
>>1324798
Я про манеру изложения говорил, неестественно как-то пишет.
Аноним 11/01/19 Птн 13:21:59 1324901231
>>1324893
Да. По крайней мере .NET Core точно. Ну и вся сопутствующая инфраструктура, компиляторы и библиотеки.
Аноним 11/01/19 Птн 13:26:30 1324904232
>>1324896
По мне наоборот, стиль повествовательный. Лучше многих статей на хабре. Где в основном Я, Я, Я... Да еще и подстраиваются под публику, чтобы минусов не получить. Жалкое зрелище. Анатолий Левенчук пишет как бы от третьего лица.
Аноним 11/01/19 Птн 13:30:40 1324909233
Аноним 11/01/19 Птн 16:00:06 1325030234
>>1324798
Он утверждает, что никто не хочет учиться, мол простых путей не бывает и сложные инструменты требуют длительного изучения. По его логике получается C++ > Ocaml, ибо кресты имеющие кучу нюансов нужно учить очень долго, достаточно даже сравнить синтаксис, человек с нулевыми знаниями программирования скорее предпочтет Ocaml нежели С++.
Аноним 11/01/19 Птн 16:48:57 1325067235
>>1325030
Ни разу. Мы видим как люди предпочитают что угодно, но только не Окамл, Хаскель, Лисп, и т.п. Эти языки заставляют думать, а этого делать никто не хочет. Проще пойти по накатанной, взять C++, установить IDE, создать переменную, написать цикл, создать класс. Это уже инструмент для широких масс. Все уже расписано, решено, нужно просто копировать, то есть НЕ ДУМАТЬ. В Лиспе, Хаскелле все по другому. Они не ограничивают. Поэтому приходится думать.
Аноним 11/01/19 Птн 18:15:50 1325116236
>>1325067
>Проще пойти по накатанной, взять C++, установить IDE, создать переменную, написать цикл, создать класс. Это уже инструмент для широких масс.
Это для человека знакомого с этими концепциями это знакомый путь, для человека знакомого только с ФП "накатанная" своя, но абсолютно такая же знакомая и привычная для него лично. Что отличает второго от первого, почему второй "думает", а первый ленится?
Аноним 11/01/19 Птн 18:56:26 1325133237
>>1325030
>человек с нулевыми знаниями программирования скорее предпочтет Ocaml нежели С++.
Он предпочтет то, что ему посоветует знакомый опытный програмист, или очередной топ-10 языков. А вероятность иметь знакомого плюсиста, выше, чем борщехлёба по очевидным причинам.

>для человека знакомого только с ФП
Таких почти нет. Подавляющее большинство программистов начинают с императивопетушни. И те, кто предпочитают ФП, уже имеют в своем арсенале "накатанное" ИП.
Аноним 11/01/19 Птн 20:08:27 1325173238
[Alienmelon] Er[...].gif (3377Кб, 960x640)
960x640
>>1324575
Интересно что Интеллектуальные Скрипачи про Rust думают.
С одной стороны много непривычных концептов которые нужно изучать и растотред заполнен хейтом от C++-инвалидов которым всё это НИНУЖНА.
С другой стороны заточенность под низкоуровневый пердолинг, под "архитектуру фон Неймана", а это сразу не стильно и не по-интеллектуальному.
Аноним 12/01/19 Суб 01:01:21 1325296239
>>1295642

>Чем эти ваши модули принципиально лучше объектов (на примере Scala)?

Надо подробно расписать? Кому-нибудь еще интересно?
Аноним 12/01/19 Суб 03:01:18 1325324240
>>1325296
Если сделаешь, то заранее спасибо тебе большое, анон. Читать пейперы достаточно трудновато все же
Аноним 12/01/19 Суб 11:13:04 1325400241
>>1325116
Не бывает людей знакомых только с ФП. Изучая программирование по любому столкнешься с мейнстримом вначале.
Аноним 12/01/19 Суб 11:15:54 1325405242
>>1325173
>С другой стороны заточенность под низкоуровневый пердолинг, под "архитектуру фон Неймана"
Как это понять? Rust поддерживает ФП.
Аноним 12/01/19 Суб 11:30:03 1325408243
>>1325400
Начинал со SICP и Scheme, сейчас Scala/Haskell. Ну и где твоя правда теперь?
(Хотя, ИХМО, Scala с Haskell и есть мейнстрим, но ты же так не считаешь)
Аноним 12/01/19 Суб 12:03:22 1325422244
Есть ли в окамле тайпклассы или наследование? Если нет, то какой вид полиморфизма там есть, чтобы писать generic функции?

Есть ли в окамле нормальный мультитрединг?

Есть ли нормальная экосистема с кучей либ и тулов? IDE завезли?
Аноним 12/01/19 Суб 12:16:11 1325428245
>>1325422
>Есть ли в окамле тайпклассы или наследование?
Есть мощный механизм модулей. Есть наследование (и множественное) в системе объектов. Тайпклассов нет. Возможно через пару лет будут implicits, как в scala.

>Есть ли в окамле нормальный мультитрединг?
Сейчас есть с GIL. Многим достаточно. Скоро будет multicore.

>Есть ли нормальная экосистема с кучей либ и тулов?
define нормальная. Для кого-то текущая ситуация более чем нормальная. Если хочешь лепить вебапликухи, как привык в других языках, то будет мало.

>IDE завезли?
Есть merlin. Плагинов для редакторов хватает.
Аноним 12/01/19 Суб 14:23:35 1325478246
anime.jpg (102Кб, 1152x2048)
1152x2048
js_of_ocaml кто-то использует?
Я зашёл на первую ссылку - сайт ocsigen, там куча TODO, нерабочие ссылки и всё такое. Создаётся впечатление, что это какое-то сырое говно.
Я хотел бы просто готовый проект который всё это собирает и я бы мог понажимать в браузере, желательно без Reasonml парашного синтаксиса.
Аноним 12/01/19 Суб 14:42:38 1325492247
Аноним 12/01/19 Суб 16:11:22 1325527248
>>1325067
Ну хуй знает, я вот научился писать на Х-е, теперь в других языках приходится подолгу думать, как бы изъебнуться, чтобы обойти ограниченную выразительность. И вообще, писать на языках без хорошей, строгой типизации - это большой труд и уныние. Но это мейнстрим, этому учат в школах и университетах, это спрашивают эйчары на собеседованиях, а людям не хочется идти к успеху окольными путями.
Аноним 12/01/19 Суб 16:30:16 1325533249
>>1325478
Сейчас популярны ReasonML который над BuckleScript который отпочковался от js_of_ocaml. А ocsigen подзаброшен да.
Аноним 12/01/19 Суб 16:55:29 1325542250
>>1324575
Подпекло немного с этих энтраев. Что плохого в том, чтобы делать что-то промежуточное, доступное для масс и позволяющее перейти на ступенку выше малой кровью? Неудевительно, что разработчики не хотят рисковать своим временем, изучая сложные вещи по советам незнакомых людей из интернетов. Это же деньги, вопрос выживания. Не надо делать проще ЛИБО сложнее, надо делать проще И сложнее, в разных вариациях, для разной аудитории.
Аноним 12/01/19 Суб 17:39:29 1325570251
>>1325542
Ты можешь жить в ограничениях, это твой выбор. Я выбираю свободу действий. Писать на том, что нравится. Что мощнее и удобнее.
Аноним 12/01/19 Суб 17:46:28 1325577252
>>1325570
Я тоже выбираю свободу и пишу на хаскелле, могу себе позволить. И всё-таки, что плохого в промежуточных вариантах?
Аноним 12/01/19 Суб 17:50:04 1325581253
>>1325422
>Есть ли в окамле тайпклассы или наследование? Если нет, то какой вид полиморфизма там есть, чтобы писать generic функции?
Там есть параметрический полиморфизм, модули и GADTs. Этого более чем достаточно для очень обобщенного полиморфизма.
По крайней мере, если ты просто пишешь бизнес-логику или свою имиджборду.
мимо scala/haskell-фаг
Аноним 12/01/19 Суб 18:05:14 1325587254
>>1325542
Проблема не в инструментах, а в том, как эти инструменты принято использовать. То же ООП можно готовить правильно: делать объекты с изысканным вкусом декомпозиции, полиморфизма и интерфейсов. А можно готовить так же, как и большинство - хуячить императивную лапшу, приправленную объектным соусом. Первое сложнее, поэтому мало кто так делает.
Аноним 12/01/19 Суб 18:08:40 1325589255
>>1325577
>пишу на хаскелле, могу себе позволить
классическая мамка с борщем, не так ли?
Аноним 12/01/19 Суб 18:10:18 1325594256
>>1325587
>То же ООП можно готовить правильно
А еще можно встретить розового единорога
Аноним 12/01/19 Суб 18:12:25 1325595257
>>1324798
>Это один из лучших русскоязычных преподавателей.
Который продает занятия по танцам за 30000 рублей?
Аноним 12/01/19 Суб 18:19:03 1325598258
>>1325587
Ага. И потом ты просто поймешь, что единственный способ правильно писать ООП - это начинать делать все иимутабельным. По-максимуму с использованием дженериков, где тебе уже придется явно словари прокидывать типо Equitable<T> или Ordering<T> (условно). С композицией вместо наследования. С эмуляцей (G)ADT и инкапсуляцей ручного паттерн матчинга в визиторах.

ТЕПЕРЬ ОСТАЛСЯ ОДИН ВОПРОС
Нахуя ты вообще брался за ООП если на этом этапе ты просто занимаешься работой комплиятора нормального функционального языка?
Аноним 12/01/19 Суб 18:19:30 1325599259
>>1197851
>А с чем связана низкая популярность OCaml?
Есть хаскель, который лучше во всем.
>Или макаки слишком тупы, чтобы его осилить?
Это никогда не бывает причиной.
Аноним 12/01/19 Суб 18:22:34 1325601260
>>1197851
> А с чем связана низкая популярность OCaml?
Есть языки которые в зависимости от целей ТУПО лучше. Хочешь просто функциональщины в вебе - Haskell. Хочешь нереального количества библиотек - Scala. Хочешь функционально и быстро? Rust
> Или макаки слишком тупы, чтобы его осилить?
C++ сложнее любого прувера, одна он популярен.
Аноним 12/01/19 Суб 18:24:28 1325602261
>>1325598
В твоем нормальном функциональном языке чтобы обыкновенный гетерогенный список сделать требуется куча бойлерплейта.
Паттерн матчинг так вообще не альтернатива визитору, это ебаный свитч.
Аноним 12/01/19 Суб 18:26:46 1325603262
>>1325587
> То же ООП можно готовить правильно
Как у Егорки Бугаенко?
Аноним 12/01/19 Суб 18:44:48 1325614263
>>1325602
> В твоем нормальном функциональном языке чтобы обыкновенный гетерогенный список сделать требуется куча бойлерплейта.

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

{-#LANGUAGE GADTs#-}
data Shows where
ToShow :: Show a => a -> Shows

instance Show Shows where
show (ToShow a) = show a

shows = [ToShow 1, ToShow "hello"]

а еще в хацкеле есть Dynamic, но его я не пытался никогда использовать

Если ты говоришь про compile-time гетерогенный список, то да. Есть геморрой. Но это уже совсем другая конструкция относительно гетерогенного списка, как его понимают в диначески-типизированных языках.

> Паттерн матчинг так вообще не альтернатива визитору, это ебаный свитч
> Represent an operation to be performed on elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates.
(цитата из GoF)

Тебе не кажется, что ADT - по какой-то магической причине имеют ровно те же преимущества и недостатки, что и визитор. Подумай, может они реально являются представлением одного и того же?







Аноним 12/01/19 Суб 18:48:12 1325616264
>>1325602
>В твоем нормальном функциональном языке чтобы обыкновенный гетерогенный список сделать требуется куча бойлерплейта.
ЛПП.
[CODE]
{-# LANGUAGE
UnicodeSyntax
, DataKinds
, TypeOperators
, GADTs
#-}

module HList where

data HList xs where
HNil ∷ HList '[]
(:#) ∷ a → HList as → HList (a ': as)

infixr 6 :#

-- >>> :t 1 :# 'b' :# True :# HNil
-- 1 :# 'b' :# True :# HNil ∷ HList '[Int, Char, Bool]
[/CODE]
>Паттерн матчинг так вообще не альтернатива визитору, это ебаный свитч.
Про это вообще промолчу.
Аноним 12/01/19 Суб 18:56:50 1325617265
>>1325598
>делать все иимутабельным
>С композицией вместо наследования.
Это какие-то крайности. Иметь состояние тоже нужно и в объектах это хорошо реализуется. Наследование тоже годится, когда нужны дефолтные реализации конкретной функциональности.

>По-максимуму с использованием дженериков
Ну так это есть параметрический полиморфизм в статических ООП языках. Почти весь реюз кода на этом основандолжен быть.

>С эмуляцей (G)ADT
Объекты сами по себе можно рассматривать как декартово произведение. Тип-сумму не завезли, да, но обычно Object | null и перегрузки вполне хватает для практических задач.

>инкапсуляцей ручного паттерн матчинга в визиторах.
Чем перегрузка в той же Жабе хуже паттерн матчинга? Однохуйственно же. В динамикодристне, конечно же убого выглядит цепочка ифов.

>>1325603
Как вариант, да.
Аноним 12/01/19 Суб 18:57:18 1325618266
>>1325589
Да, и ещё тот факт, что я учу функциональщину со школы, а не посередь карьеры.
Аноним 12/01/19 Суб 18:59:20 1325621267
>>1325614
>Если ты под гетерогенным списком подразумеваешь просто тупую хуйню как в типичной Java, то нихуя
Ну да, GADT-синтаксис выглядит симпатичнее экзистенциальных типов, хотя все равно нужно смотреть, не обосрались ли где-то.

>Тебе не кажется, что ADT - по какой-то магической причине имеют ровно те же преимущества и недостатки, что и визитор. Подумай, может они реально являются представлением одного и того же?
Визитор позволяет добавлять новые сущности без перекомпиляции, а ADT, будучи свичом, нет.
Аноним 12/01/19 Суб 19:03:55 1325622268
>>1325602
>требуется куча бойлерплейта
Импортировать библиотеку с гетерогенными списками тебе куча бойлерплейта? Нихуя ты барин зажрался.
Аноним 12/01/19 Суб 19:05:55 1325625269
>>1325617
Я не буду с тобой спорить, ибо ты прав по каждому пункту. Но мне кажется что ты пропустил основной смысл моего поста. А заключался он в том, что хороший ООП-дизайн - это и есть свое переизобретение функциональщины in disguise
Аноним 12/01/19 Суб 19:08:05 1325626270
>>1325617
> Тип-сумму не завезли
Завезли. Только оно называется "наследование"
Аноним 12/01/19 Суб 19:09:21 1325627271
>>1325625
Нет. Это best practices из функциональщины с возможностью от них отступить, когда надо. Функциональщина же слишком категорична
Лучший подход в, прости господи, Rust. Жалко только в остальном он говно
Аноним 12/01/19 Суб 19:09:51 1325628272
>>1325587
Не понимаю, зачем ты мне отвечаешь. Я пишу про посты из жж. В постах из жж разговор про хорошие (функциональные) языки против плохих (прочих). С твоим тезисом я (почти) согласен, но как он связан с моим вопросом - не понимаю.
Аноним 12/01/19 Суб 19:10:27 1325629273
>>1325626
Взять наименьшего общего предка - это не сумма, если что.
Аноним 12/01/19 Суб 19:11:22 1325630274
>>1325627
> с возможностью от них отступить, когда надо
Вот именно из этого пункта и рождается хуевый ооп дизайн. И успешно процветает в любой большой системе, пока ее не перепишут
Аноним 12/01/19 Суб 19:13:55 1325635275
>>1325630
Хуевый функциональный дизайн рождается намного проще: его нет, потому что борщ закончился, а мама выпиздила на улицу.
Аноним 12/01/19 Суб 19:14:10 1325636276
>>1325629
Может я запутался, но я вижу это так:
Наследование + дженерики = открытые GADTs.

Тип-сумма является частным случаем второго, а следовательно и частым случаем первого
Аноним 12/01/19 Суб 19:14:29 1325637277
>>1325599
>Есть хаскель, который лучше во всем.
Очевидное неверное утверждение.
Аноним 12/01/19 Суб 19:14:42 1325638278
>>1325635
Чо ты в этом треде делаешь?
Аноним 12/01/19 Суб 19:17:19 1325639279
>>1325637
Можно уточнить: среди тех, кто в принципе решил взять ФП.
Он слишком компромиссный и не особо развивается энтузиастами из-за этого
Аноним 12/01/19 Суб 19:19:10 1325640280
>>1325639
> Он слишком компромиссный
Слабо понимаю о чем ты. Можно пример?
Аноним 12/01/19 Суб 19:32:25 1325653281
>>1325639
>среди тех, кто в принципе решил взять ФП.
Сначала ты говоришь про языки, а потом про людей, которые их используют. Надо разделять язык и пользователей.

>Он слишком компромиссный и не особо развивается энтузиастами из-за этого
Слишком компромиссный, это когда в нем вывод типом не ломают новой фичей, как это бывает в хаскеле? Перед тем, как что-то добавить в OCaml это сначала 10 раз обдумают и протестируют, чтобы нигде ничего не сломалось. За счет этого можно компилировать код, написанный 15 лет назад. С хаскелем это не работает.
Аноним 12/01/19 Суб 19:37:33 1325657282
>>1325636
>открытые GADTs
>Тип-сумма является частным случаем
Так нет же, сумма - "закрытый" тип.
Аноним 12/01/19 Суб 19:44:27 1325661283
>>1325657
Единственное чем отличаются закрытые типы отличаются открытых (являясь частым случаем), это тем, что для них типы можно автоматически выводить и pattern-match может включать exhaustiveness check.

Когда я увидел это:
> Тип-сумму не завезли
Я подумал про принципиальную выразимость.
Короче я имел ввиду, что сделать Either<A, B> в Java не предсталвляет никакой проблемы именно из-за наследования.
Аноним 12/01/19 Суб 19:46:04 1325663284
>>1325661
В добавку. Наследование как раз и можно рассматривать как тип-сумму с бесконечным числом конструкторов
Аноним 12/01/19 Суб 21:56:37 1325734285
>>1325625
Уловил, конечно жи. Это не переизобретение функциональщины. Грамотный подход к проектированию программы в любой парадигме сводится к одинаковым вещам, только называемых по-разному. В любом ЯП можно легко нахуевертить говна, потому что говно, как правило, не в инструментах, а в головах.

>>1325628
>но как он связан с моим вопросом - не понимаю.
Твой вопрос:
>Что плохого в том, чтобы делать что-то промежуточное, доступное для масс и позволяющее перейти на ступенку выше малой кровью?
Перевожу свой ответ: необходимости в чем-то промежуточном нет. В доступных массам инструментах есть всё необходимое. Массы могут изучать всё это в свободное от работы время, повышая свою квалификацию, но все равно этого не делают.

>>1325626
Да, Object + instance_of + cast такая себе тип-сумма.
Аноним 12/01/19 Суб 22:15:11 1325746286
>>1325734
> Да, Object + instance_of + cast такая себе тип-сумма.
В Scala оно так и реализовано, но никто же не будет утверждать, что это не функциональный язык
Аноним 13/01/19 Вск 00:00:12 1325786287
>Чем перегрузка в той же Жабе хуже паттерн матчинга? Однохуйственно же
Не понел, как можно в жабе сэмулировать паттерн матчинг перегрузкой?
Если мне приходит Option, к примеру, сделать два метода handle(Nothing x) и handle(Some x)?
Аноним 13/01/19 Вск 08:23:44 1325856288
>>1325478
>Я зашёл на первую ссылку - сайт ocsigen, там куча TODO, нерабочие ссылки и всё такое.
Все там рабочее. Некоторые примеры не открываются без прокси. Видимо роскомнадзор.
Аноним 13/01/19 Вск 08:57:58 1325862289
>>1325734
>Грамотный подход к проектированию программы в любой парадигме сводится к одинаковым вещам, только называемых по-разному.
Вот только в ФП это лучше реализовано и является твоими инструментами изначально, а не как в ООП где нужно городить паттерны, чтобы работало нормально. Тот анон пока прав, "хороший ООП-дизайн - это и есть свое переизобретение функциональщины", твой "аргумент" ничего не доказывает.
Аноним 13/01/19 Вск 09:02:57 1325863290
>>1325786
Я на жабе не программиовал и мне тоже интересно. Как, например, хранить список опций без некого интерфейса Option? Если все хранится в виде Option, то в какой-то момент все это дело надо кастовать обратно в Some, и None перед тем как вызывать handle (см. пост на который отвечаю), но тогда какой это паттерн матчинг, если это только проверка на exhaustiveness?
Аноним 13/01/19 Вск 09:27:00 1325864291
>>1325863
>как хранить список опций
пехаешь все в глобальный экзепляр соотв структуры и все
напридумывают всякой хуйни а потом ебуцца с этим
Аноним 13/01/19 Вск 09:43:40 1325870292
>>1325856
Там банально в ссылках (на гитхаб) закрывающиеся скобки есть и они не открываются кликом.
Если у них на сайте такой беспорядок, я лучше подумаю прежде чем инвестировать своё свободное время в их технологию.
Аноним 13/01/19 Вск 09:53:24 1325872293
>>1325870
Твое поведение - наглядная демонстрация того, что IT это ебаная мода.

В первую очередь надо идти и смотреть код, что там внутри и нет ли там говна, а не как у них сайт работает. А то привыкли, что у популярных фреймворков и библиотек отличный маркетинг с красивыми лендингами и похуй что там внутри, а потом все тормозит и разваливается.
Аноним 13/01/19 Вск 10:07:09 1325878294
>>1325864
Не понял, приведи пример.
Аноним 13/01/19 Вск 10:59:32 1325886295
>>1325872
Не передёргивай, дело не в красивых лендингах а банально в серьёзности подхода. Я, блять, когда своим факториалам ридми делаю такого не допускаю. Я могу в кложе написать что-то вроде `lein new figwheel hello-world` и у меня сразу поднимется проект который я могу потрогать.
Посмотри теперь https://ocsigen.org/js_of_ocaml/3.1.0/manual/overview.
Всё что мне предлагается это начать качать какие-то пакеты и что-то ими собирать, я даже не ебу какая должна быть структура проекта, как мне включить готовый js к проекту, вот это всё.
Issue ни гитхабе про ошибки на сайте у них с сентября 2018 висят.
>В первую очередь надо идти и смотреть код, что там внутри и нет ли там говна
Откуда мне знать, есть ли говно в коде если я на окамле только прошёл 3 недели онлайн-курса?

>>1325863
Пока джава сеньоры отдыхают, решил сам что-то написать:
https://pastebin.com/Myd3GZaq

Я ожидал, что у перегруженных функций будет late binding, т.е. я смогу вызывать getOrElse на тип Option, имея две реализации одну для Some, а другую для None, но нихуя.

Если я правильно всё понял, то в джаве придётся или эмулировать руками теги для нормальной читаемости и проверять их руками (собственно, оно сейчас в джаве так и есть: isPresent() в optional), или опускаться до instanceof. А без destructuring нужно будет ещё и руками выковырывать поля.

Аноним 13/01/19 Вск 14:21:11 1325970296
>>1325786
>в ООП где нужно городить паттерны, чтобы работало нормально.
Да не нужны никакие паттерны, это всё костыли для слабоумных. Объекты, наследование, интерфейсы, перегрузка, дженерики/темплейты - этого достаточно. И не надо ебаться с монадными трансформерами и лифтами, чтобы скомбинировать побочные эффекты.

>>1325786
Да с паттерн матчингом я погорячился. Всё-таки перегрузка это всего-лишь Ad-hoc полиморфизм.
Описанный случай, отлавливаемый на этапе компиляции, в жабе реализуется при помощи Object + Exception:
https://ideone.com/Bz5fHh
Аноним 13/01/19 Вск 14:30:45 1325972297
>>1325970
неа
достаточно структур, указателей на функции, void* и макросов
Аноним 13/01/19 Вск 14:31:58 1325974298
>>1325878
у тебя есть глобальная структура, поля в которой - параметры
и все
точка
Аноним 13/01/19 Вск 15:07:41 1325982299
>>1325972
нихуя
достаточно регистров общего назначения и стека
Аноним 13/01/19 Вск 17:13:30 1326023300
>>1325970
Нет, это даёт такую проверку только в случае Option<T>. А что, если у тебя с десяток подтипов (конструкторов типа-суммы)? Делать десяток разных checked exceptions?
А ваще checked exceptions считаются большим моветоном в современной Java, ибо использовать их в лямдах - это супер геморрой, и они не композируются каким-то тривиальным способом
Визитор как раз и даёт проверку заполнения на этапе компиляции, однако именно в случае Option разумнее использовать что-то простое типо getOrElse()
Аноним 13/01/19 Вск 18:06:37 1326053301
>>1325870
Экосистема OCaml одна из лучших. Скорее всего ты что то делаешь не так. Давай ссылки, посмотрим где что не работает.
Аноним 13/01/19 Вск 18:09:18 1326056302
>>1325886
В окамле мощная экосистема. Opam круче чем Lein. В нем намного больше возможностей. Лучше все автоматизировано. Возможно ты не умеешь им пользоваться.
Аноним 13/01/19 Вск 18:11:05 1326057303
>>1325886
>Всё что мне предлагается это начать качать какие-то пакеты и что-то ими собирать, я даже не ебу какая должна быть структура проекта, как мне включить готовый js к проекту, вот это всё.
Opam сам все компилит. Читай доку внимательней.
13/01/19 Вск 18:50:59 1326076304
>>1325974
>Перефразировл уже написанное
Впрочем, что я ожидал от мелкобуквы.
Аноним 13/01/19 Вск 19:36:49 1326099305
smartman.png (326Кб, 600x590)
600x590
>>1326057
>>1326056
>>1326053
Мне надо было сделать юнит-тесты для обычного окамла (потому что в вышенаписанном курсе закрыли проверку и я решил напилить свою).
Я потратил в сумме примерно день, копаясь в каких-то перстарелых и уже неактуальных страницах, чтобы выяснить что сейчас все пользуются dune, выяснить как там включать библиотеки (чтобы установить ounit нужно написать opam install ounit, чтобы воспользоваться им нужно написать Open OUnit. Чтобы включить его в dune проект нужно использовать oUnit). Всё это с непонятными ошибками компиляции итд (с хуя бы я что-то понимал 2 дня назад вкатившись в язык).
Если бы был просто пример настроенного проекта в котором всё это есть, никаких проблем бы вообще не было.
Сейчас ты мне предлагаешь потратить ещё время на то чтобы изучить весь тулинг вокруг js_of_ocaml и чтобы наконец мне удалось что-то запустить и попробовать. Нахуй оно мне? Я не хочу инвестировать время в изучение инфраструктуры языка, которым я ещё не знаю хочу я пользоваться или нет.
Чтобы быть юзер-френдли для вкатывающихся (если такая цель есть), нужно предоставить всё настроенное и отконфигурированное, едущее без всякой лишней хуйни. Кому понравится, потом будет постепенно разбираться.

Я лучше или reason накачу, или куда-то ещё вкачусь, а знания фич окамла останутся для общей эрудиции, пока он не повзрослеет.
Аноним 13/01/19 Вск 19:59:34 1326117306
>>1326099
>с хуя бы я что-то понимал 2 дня назад вкатившись в язык
Любую экосистему придется осваивать. В Окамле много всего автоматизировано. В других экосистемах будешь делать руками, и тратить больше времени на изучение и использование.

>>1326099
>Сейчас ты мне предлагаешь потратить ещё время на то чтобы изучить весь тулинг вокруг js_of_ocaml и чтобы наконец мне удалось что-то запустить и попробовать.
Ты что то путаешь. Я тебе вообще ничего не предлагаю. А вообще, без труда не выловишь и рыбку из пруда. Не получится изучить новый язык не потратив время.

>>1326099
>Я не хочу инвестировать время в изучение инфраструктуры языка, которым я ещё не знаю хочу я пользоваться или нет.
Не изучай. Что ты оправдываешься то.

>>1326099
>Чтобы быть юзер-френдли для вкатывающихся (если такая цель есть), нужно предоставить всё настроенное и отконфигурированное, едущее без всякой лишней хуйни.
В Окамле с этим все впорядке. Минимум ручного труда. Все делается через одну команду.

>>1326099
>Я лучше или reason накачу, или куда-то ещё вкачусь, а знания фич окамла останутся для общей эрудиции, пока он не повзрослеет.
Одолжение мне не делай. Мне вообще все равно чем ты будешь заниматься. Смешно то, что какой то новичек называет Окамл незрелым. Экосистема Окамла более продвинутая чем в больше языков. Просто ты неопытен, не понимаешь как что работает. Твои истерики из-за того что некоторые вещи устроены не так как ты себе представляешь, выглядят смешно. Я понимаю если бы ты имел опыт использования 10 разных языков, и сказал бы что в них сделано лучше. А так, твое мнение не объективно.
Аноним 13/01/19 Вск 20:13:58 1326140307
Илитариев полон тред. Так почему же не используют ocaml? Очевидно же, потому что все тупые и ленивые. Nuff said
Аноним 13/01/19 Вск 21:56:54 1326234308
>>1326140
Это не ты тот самый персонаж, что влетает в любой тред и начинает постить про мамкин борщ?
Аноним 13/01/19 Вск 21:58:42 1326236309
>>1326234
Нет, я залётный хаскеллист.
Аноним 13/01/19 Вск 22:03:39 1326242310
>>1326236
Так это же и есть тред для обсуждения haskell, чувствуй себя как дома
Аноним 14/01/19 Пнд 02:16:22 1326391311
>>1326234
Ты про какой пост? И приведи пример постов персонажа.
Аноним 14/01/19 Пнд 08:58:16 1326464312
>>1326140
Его не используют почти также, как и не используют хаскель.
Аноним 14/01/19 Пнд 09:36:54 1326472313
>>1326464
Не согласен, но допустим. Что с того?
Аноним 14/01/19 Пнд 10:56:36 1326491314
>>1326472
Непонятно в чем суть твоего сообщения. Замени ocaml на haskell и суть останется такая же. Не вижу смысла в пустом трепе, который замыливает интересные обсуждения.
Аноним 14/01/19 Пнд 11:01:27 1326493315
>>1326464
Потому что это инструмент не для широких масс. Широкие массы выбирают ширпотреб, инструменты широкого потребления, - C/C++, Java, PHP, Python, etc. И гордятся тем, что их инструмент имеет широкое потребление. Это же глупость. Самые дорогие вещи, самые качественные - эксклюзивные, а не ширпотреб.

К примеру обувь ручной работы дороже, качественней, не используется широкими массами.
Аноним 14/01/19 Пнд 11:44:17 1326514316
>>1326117
Согласен, что это смешно, но это моё впечатление, которое сложилось при чтении документации в первых ссылках из гугла.
Я не говорю, что язык плохой и экосистема незрелая, я говорю что это не подано в доступном виде для мимокрокодилов.
Если мнение мимокрокодилов мейнтейнеров языка и экосистемы не интересует (нет необходимости в популяризации), то претензий вообще никаких.

>Я тебе вообще ничего не предлагаю.
А потом
>А вообще, без труда не выловишь и рыбку из пруда.
лол.

Есть fundamental transferable knowledge. Будучи средней руки быдлокодером, изучая окамл как язык я узнаю про алгебраические типы данных, destructuring, вывод типов и прочее. Эти знания я могу взять с собой в другие языки, сэмулировать эти фичи если они мне нужны, лучше понимать весь объём доступных инструментов.
Есть знания экосистемы, тулинга и вот этого всего, которые мне за пределами окамла никак не пригодятся. Я хочу поиграться с окамлом и инвестировать максимум из своего времени в знания из №1 и минимум в №2.

Я вкатываюсь в надежде зайти на сайт, создать готовый проект в котором всё работает и сразу начать экспериментировать. Вместо этого я вижу кучу билд систем: jbuild, opam build, dune, между которыми я каким-то образом должен выбрать лучшую, сделать сам проект. Это всё идёт в категорию №2, и инвестировать сюда своё свободное время я не хочу.
Аноним 14/01/19 Пнд 16:20:37 1326615317
>>1326491
Пустой трёп - это называть тупостью и ленью нежелание инвестировать в изучение чего-то непонятного и не имеющего очевидных профитов, в том и суть. Что можно сделать с окамлом или хаскелем, чтобы профиты стали очевидны и всё стало понятно - это интересное обсуждение.
Аноним 14/01/19 Пнд 16:21:53 1326617318
>>1326493
Вот, кстати, хрестоматийный пример пустого трёпа.
Аноним 14/01/19 Пнд 17:54:31 1326656319
>>1326514
>Будучи средней руки быдлокодером, изучая окамл как язык я узнаю про алгебраические типы данных, destructuring, вывод типов и прочее.
Тебе тогда не окамл нужен а скала/хаскелл например
Мимо
Аноним 14/01/19 Пнд 20:43:09 1326730320
>>1326514
Не надо учить ocaml: единственное, чему он тебя научит - фрустрировать от этой твоей java/js/php или чем ты там деньги делаешь
Аноним 14/01/19 Пнд 21:03:12 1326733321
>>1326730
Моё знакомство со scala описал прямо, теперь не могу смотреть на свой стек как на что-то полноценное.
Аноним 14/01/19 Пнд 22:14:13 1326806322
>>1326617
Пользуйся ширпотребом. Никто же не против. Зачем ты вообще лезешь в экслюзив, если не готов принимать те жертвы, которые они требуют.
Аноним 15/01/19 Втр 06:55:39 1326983323
Аноним 15/01/19 Втр 09:02:43 1327002324
>>1326806
Нет, спасибо, я буду пользоваться тем, что мне удобно.
Аноним 15/01/19 Втр 14:22:37 1327144325
>>1326983
Потому что больше документации и курсов, рассусоливающих знания именно первого рода.
Потому что тот же хаскелл - стандарт для всяких статей по ФП-фичам, по крайней мере в русскоязычном сегменте практически всё либо на нем либо на скале, да и в англоязычном полно.
Аноним 21/01/19 Пнд 15:50:14 1331768326
Бамп топовому треду.
Аноним 21/01/19 Пнд 19:59:16 1332006327
Screenshot from[...].png (127Кб, 1865x1050)
1865x1050
Помогите, ЧЯНТД? В out_channel все пишется, но при попытке считать из или закрыть in_channel, сразу выдает Unix.EBADF?
Аноним 27/01/19 Вск 19:18:09 1336230328
>>1332006
Не вникал, но ";" в networking.ml подозрительная.
Аноним 27/01/19 Вск 21:40:54 1336367329
Аноним 28/01/19 Пнд 05:30:49 1336519330
>>1336367
Спасибо за помощь. Я вообще думаю, что in_channel закрывать не нужно. Почему у меня не получилось считать я так и не понял, в переписанном варианте у меня все заработало.
Еще разобрался как работает Lwt_main.run, на пике у меня проеб при котором не будет нового accept'а пока не закончится сессия текущего клиента.
Написал что-то вроде:
let client = Lwt_main.run (sock >>= accept) in
Lwt.async (process client)
28/01/19 Пнд 05:37:02 1336520331
>>1336519
Вот я пиздоглазый, таки заметил, что ic тоже закрывают. Попробую сделать с with_connection.
Аноним 28/01/19 Пнд 13:57:15 1336641332
>>1325982
нихуя
достаточно nand и чясики
Аноним 28/01/19 Пнд 13:58:05 1336642333
>>1336641
нихуя
достаточно CMOS транзистора
Аноним 28/01/19 Пнд 13:58:58 1336644334
>>1336642
нихуя
достаточно u,d кварков и электронов
Аноним 28/01/19 Пнд 13:59:50 1336646335
>>1336644
заебал на дваче сидеть, физик йобаный
Аноним 05/02/19 Втр 20:20:09 1342467336
>>1196260 (OP)
Анон, помогай. Читаю Ярона Мински и ко про вкат в окамл. В примерах кода юзается модули Core, Time. У меня такая шляпа выходит:
# open Time;;
Error: Unbound module Time

# open Core.Std;;
Error: Unbound module Core

Откуда эти модули брать? Они там советуют запускать utop в качестве калькулятора, я запускаю ocaml.

окамл ставил из арчлинуксового репозитория.
Аноним 05/02/19 Втр 20:33:12 1342470337
>>1342467
Вопрос снят, я слепошарый идиотчитайте внимательно введение.
Аноним 05/02/19 Втр 21:53:22 1342503338
Аноним 08/02/19 Птн 07:52:05 1343776339
>>1342467
>Core
Меня одного воротит от этой хуиты? Бросил читать книгу из-за этого.
Аноним 11/02/19 Пнд 07:25:21 1345458340
Я тут это... в хаскель ухожу, остановите меня пока не позно. Если жизнь в окамле без тайп-классов?
Аноним 11/02/19 Пнд 11:33:29 1345537341
>>1325653
>Перед тем, как что-то добавить в OCaml это сначала 10 раз обдумают и протестируют, чтобы нигде ничего не сломалось. За счет этого можно компилировать код, написанный 15 лет назад

По ссылке из оп-поста https://realworldocaml.org:

>Version 1
>The original version of the book, as published in 2013. Note that many of the examples don't work with the latest versions of the libraries and tools involved.
Аноним 24/02/19 Вск 13:23:02 1353848342
>>1345458
>Если жизнь в окамле без тайп-классов?

Есть.
Аноним 24/02/19 Вск 13:46:22 1353856343
>>1345458
Православные модули вместо парашных тайп-классов - это же главное преимущество окемла, ты чего.
Аноним 25/02/19 Пнд 06:03:32 1354573344
>>1353856
Каждый раз писать Hui.foo, Pizda.foo и для каждого типа делать модуль заебывает. pizda_foo, hui_foo ни чем не лучше.
Аноним 25/02/19 Пнд 08:45:33 1354598345
>>1354573
>Каждый раз писать Hui.foo

open Module
let open Module in
Module.( ... )
Аноним 25/02/19 Пнд 09:32:56 1354610346
>>1354598
Проблема остается когда нужно использовать оба foo в одном контексте.
Аноним 25/02/19 Пнд 21:39:58 1355130347
>>1354610

Разве это проблема?

Если у тебя пересечение по названиям (что не так уж часто бывает), то лучше явно указывать откуда `foo`.
Аноним 26/02/19 Втр 05:36:54 1355405348
>>1355130
Пример с foo, пожалуй, слишком абстрактен. Возьмем print и его реализацию в окамле как print_тип. Ведь print это абстрактная функция, которая в идеале может принимать любой тип поддерживающий соответсвующий интерфейс. Зачем мне писать Pizda.print и Hui.print, когда можно написать print и дать возможность компилятору сделать свою работу?
Еще мне не нравится, что в окамле есть ad-hoc полиморфизм для оператора сравнения, но нет такого же для операций над числами. Так же минусом идет невозможность переопределить поведение оператора сравнения.
Аноним 26/02/19 Втр 10:24:02 1355499349
>>1355405

>Ведь print это абстрактная функция, которая в идеале может принимать любой тип поддерживающий соответсвующий интерфейс.

Здесь ты несешь знание о print откуда-то извне, из своего бэкграунда, потому что в окамле нет функции print. Есть print_string, print_int и другие примитивы. Нет здесь функции, которая поддерживает соответствующий интерфейс, потому что и интерфейса нет.

Ты путаешь, потому что в операторе сравнения

val (=) : 'a -> 'a -> bool

нет ad-hoc полиморфизма, это параметрический полиморфизм. Не определена функция `=` для каких-то конкретных типов `int` или `string`, она определена для всех типов.

Можно было бы с таким же успехом определить

val print : 'a -> unit

Вот только ты ничего не знаешь об `'a`, как его печатать?

Если сильно хочется, то можно воспользоваться ppx расширением: https://github.com/ocaml-ppx/ppx_deriving
И вот тогда компилятор (а точнее плагин) будет явно выполнять свою работу, позволяя превращать любой помеченный тип в строку.

Возникает вопрос: "а че, даже до ad-hoc полиморфизма тогда не додумались?" Додумались, но осознанно отказались, потому что это сильно осложняет язык. В хаскеле для этого пришлось потратить много времени на рисерч и построение системы тайп классов. Вместо этого создатели ocaml решили вложить усилия в другие направления (модули, объекты, gc, etc) и это логично, потому что зачем дублировать исследования, которые в то время проводились в хаскеле? Это же академические языки и никто тогда не думал, что через 20 лет на форумах их будут сравнивать и писать "фу, говно язык, даже feature_name нет". Такой вот дизайн чойс.

Есть движение в сторону добавления ad-hoc полиморфизма и для этого придумали modular implicits (https://arxiv.org/pdf/1512.01895.pdf), которые повторяют механизм имплиситов в Scala. Но это work in progress.
Аноним 26/02/19 Втр 10:27:26 1355501350
>>1355499
>зачем дублировать исследования, которые в то время проводились в хаскеле
Действительно. Могли бы присоединиться к исследованиям.
Аноним 26/02/19 Втр 13:06:34 1355592351
>>1355499
>через 20 лет на форумах их будут сравнивать и писать "фу, говно язык, даже feature_name нет"
В итоге окамл соснул у хаскеля.
Аноним 26/02/19 Втр 13:30:59 1355619352
>>1355501
>>1355592

Эх, вот и какой толк тут писать что-то полезное, если публика, уровня школьников, понять не может pros/cons разных решений и живет понятиями популярности, а то, что окамл по многим фронтам затыкает хаскель, видимо невдомек.
Аноним 26/02/19 Втр 18:03:45 1355825353
>>1355499
Годно расписал. За модули и двор стреляю в упор! Притом интересно, что сейчас именно тайпклассы (ну и прочие вариации на ту же тему, которые решают expression problem) стали дефолтной само-собой-разумеющейся фичей для всех языков. Интересно, произойдет ли в дальнейшем откат к чему-то более модульному, потому что все-таки неочевидные импорты в конечном итоге до добра не доводят.
Аноним 26/02/19 Втр 20:48:57 1355902354
>>1355499
>val (=) : 'a -> 'a -> bool
>параметрический полиморфизм
Извините, я не говорю на OCaml. А что будет, если туда стрелочный тип подставить? Функции тоже сравнит? Как это вообще для всех типов работает?
Аноним 26/02/19 Втр 21:26:58 1355920355
>>1355902
>Exception: Invalid_argument "compare: functional value".

А могли бы по указателям сравнивать, например. (мимо)
Аноним 26/02/19 Втр 22:11:39 1355952356
>>1355902

Функции -- это такие же значения, но ocaml основан на полиморфном лямбда исчислении, в котором для них не определена эквивалентность. Чтобы это работало и для функций, необходимы зависимые типы уровня HoTT (univalence axiom).

Во время компиляции это не отлавливается, потому что сложно: https://caml.inria.fr/mantis/view.php?id=4201 Поэтому ошибка в рантайме.

>>1355920
Есть сравнение по указателям через `==`. Просто `=` сравнивает структурно.
Аноним 26/02/19 Втр 22:30:51 1355961357
>>1355952
>Чтобы это работало и для функций, необходимы зависимые типы уровня HoTT (univalence axiom).
Не понял, а унивалентность тут чем поможет? Не будет же компилятор сам изоморфизмы выводить. Или будет?

Ну и, стало быть, не для всех типов определена эквивалентность. И не такой уж этот ваш полиморфизм параметрический.
Аноним 27/02/19 Срд 05:13:34 1356094358
>>1355619
Туда ли ты зашел, петушок?
Аноним 27/02/19 Срд 05:59:27 1356096359
>>1356094

Брысь.

>>1355961

>Ну и, стало быть, не для всех типов определена эквивалентность. И не такой уж этот ваш полиморфизм параметрический.

Нет, здесь все честно. В окамле импредикативный полиморфизм и `'a` означает `forall 'a` и поэтому код `id = id` и `id id id = id id id` компилируется (где `id = fun x -> x`), вплоть до рекурсивных типов. То есть `= : 'a -> 'a -> bool` определена для всех _типов_, но не на всех _значениях_.

Стоит добавить, что в core language окамла все типы имеют kind ``. Прямой поддержки higher kinded types в core language нет, только через модули.

>Не понял, а унивалентность тут чем поможет? Не будет же компилятор сам изоморфизмы выводить. Или будет?

Ошибка вылазит в рантайме, потому что структурно (intensionally) в общем случае мы не можем определить равны ли две произвольные функции.

Обычно для эквивалентности функций принимается определение, что для всех аргументов одинаковые значения (extensionally equal).

Пример: f x = 2
(x+5), g x = 2*x + 10.

Две функции extensionally equal, но не intensionally. Термы разные, а результаты возвращают одинаковые.

Extensional equality - это judgement. То есть это мета-правило над языком. Чтобы стало понятнее, стоит открыть спеку какой-нибудь теории типов и посмотреть на typing rules - они все judgements и они описывают язык (в нашем случае язык программирования).

Чтобы выразить утверждение об эквивалентности функций в самом языке необходима propositional equality. То есть нужен способ сказать на уровне типов, что две функции принимают одинаковое значение. Для этого вводится identity type (индуктивный зависимый тип), который по парадигме propositions as types выражает эту propositional equality. Таким образом мы встраиваем в язык extensional equality. Вот так она выражается внутри самого языка:

_ ≈ _ ∷ forall A B. (A -> B) -> (A -> B) -> (A -> Type)
f ≈ g ≡ forall x. Id(f x, g x)

Из того, что judgements удовлетворяют computational equality (это как раз про редукцию термов, то есть вычисляя 2+2 мы получаем 4), они и propositionally equal. Знание, что на мета-уровне 2+2 редуцируется до 4, дает возможность выразить внутри самого языка на уровне типов этот факт - `Id(2+2, 4)`. Тип Id(a, a) строится с помощью конструктора refl. Таким образом с помощью computational equality мы тип `Id(2+2, 4)` приводим к виду `Id(4, 4)`, который разумеется населен `refl`.

Обратное не работает в общем случае. Можно добавить judgement, что если `Id(a,a')` населен (существует терм этого типа), то `a = a'` на уровне judgement. Из этого следует, что:

f ≈ g -> f = g

То есть мы получаем functional extensionality внутри языка и вроде все становится клево. К сожалению, это превращает теорию типов в экстенсиональную и ломает тайпчекинг. Так работают пруверы семейства PRL: nuPRL, RedPRL, etc.

Что происходит в HoTT:

Привычные identity types заменяются на paths и вводится понятие эквивалентности `≃` - это функция A -> B с полезными о себе доказательствами. Тогда можно сформулировать утверждение, что если A = B (то есть Id(A, B), а именно существует path из A в B), то A эквивалентен B.

A = B -> (A ≃ B)

Сама аксиома унивалентности говорит, что:

A = B ≃ (A ≃ B)

То есть равенство эквивалентно эквивалентности. Из этого как следствие вытекает function extensionality, возможность говорить об эквивалентности функций внутри языка, сохраняя тайпчекинг.
Аноним 27/02/19 Срд 08:54:27 1356117360
>>1356096
Не знаю, меня всё равно коробит. Параметрический полиморфизм подразумевает, что функция с переменными для типов в сигнатуре будет работать для всех типов вне зависимости от этих типов. То есть, с функцией id понятно - ей всё равно, какой тип у аргумента, в её теле эта информация не используется. А сравнение на структурное равенство ну никак не может игнорировать тип, потому что для разных типов разное. А когда для разных типов разное определение, это ad hoc .
>Прямой поддержки higher kinded types в core language нет
Прекрасно, а это тут вообще каким боком?
>Две функции extensionally equal, но не intensionally
Протестую. При нормализации они обе дают один и тот же терм, стало быть, имеет место definitional equality.
>Чтобы стало понятнее
Спасибо, мне и так вроде понятно. Непонятно другое: как же именно, всё-таки унивалентность поможет компилятору сравнивать функции? Унивалентность позволяет свести вопрос о тождестве к вопросу об эквивалентности, значит, видимо, компилятор будет вынужден доказывать эквивалентность. Не то чтобы я был готов доказать, но интуиция подсказывает, что это невозможно.
Аноним 27/02/19 Срд 08:58:34 1356121361
>>1356117
А нет, не протестую, там помимо нормализации ещё коммутативность нужна.
Аноним 27/02/19 Срд 09:01:44 1356123362
>>1356121
И даже ассоциативность. Да, это я не подумал.
Аноним 27/02/19 Срд 11:26:46 1356161363
>>1356123
Наверное, ты дистрибутивность имел ввиду. Но мне с моей маленькой колокольни не понятно, что мешает добавить в язык возможность описания законов, а компилятор научить эти законы применять, чтобы сравнивать разные, но эквивалентные термы?
Скажем, полностью раскрыть скобки в выражении, отсортировать аргументы коммутативных операторов, вычислить константы, поприменять альфа-эквивалентность. В том же примере:
f y = 2(y+5) -> 2y + 2x5 -> 2y + 10 -> 2a + 10
g x = 2x + 10 -> 2a + 10
Аноним 27/02/19 Срд 12:12:16 1356179364
>>1356117

Да, ты прав. Именно `=` - ad-hoc. Подумал и понял, что сильно тупанул. Извиняюсь.

>Прекрасно, а это тут вообще каким боком?
Хотел какую-то мысль дальше написать, но забыл удалить.

>как же именно, всё-таки унивалентность поможет компилятору сравнивать функции

Она ему никак не поможет, она просто дает _возможность_ это выразить.

>компилятор будет вынужден доказывать эквивалентность

Доказывать - значит строить терм какого-то типа. С зависимыми типами вывод типов (и термов) не работает до конца. Так что да, в общем случае это невозможно. Надо делать самому руками.

>>1356161

Так оно и происходит в агде, где часто можно выводить термы для типов и для такой простой арифметики это сработает, но не в общем случае.
Аноним 27/02/19 Срд 12:58:49 1356194365
>>1356179
>для такой простой арифметики
Это же типичные алгебраические преобразования.

>но не в общем случае.
Кажется, что в большом количестве практических случаев это должно сработать. Программист сейчас вынужден в блокнотике доказывать корректность реализации, скажем функтора. Причем, это тупое сравнения структур термов после всех преобразований.
Аноним 27/02/19 Срд 19:49:42 1356367366
>>1355952
>Во время компиляции это не отлавливается, потому что сложно:
А с тайпклассами было бы просто.

>код `id = id` и `id id id = id id id` компилируется
>определена для всех _типов_, но не на всех _значениях_.
Не понимаю, какой толк от того, что он компилируется, если на всех значениях функциональных типов он гарантированно падает в рантайме.

У тебя блог есть? Запости свои посты в блог, чтобы гуглилось, анон.
Аноним 27/02/19 Срд 19:52:01 1356370367
>>1356179
>Именно `=` - ad-hoc. Подумал и понял,
А, ок, тогда disregard предыдущий пост, я suck cocks.
Аноним 27/02/19 Срд 20:04:43 1356375368
>>1356370
>я suck cocks
Только вышел из яой-треда, и тут опять.
Аноним 27/02/19 Срд 20:30:56 1356398369
>>1356367

>А с тайпклассами было бы просто.

Не все так просто. Почему-то люди на форумах думают, что раз в одном языке какая-то фича выстрелила, то ее легко притащить в другой и там все будет заебись, забывая, что консистентность системы типов может пойти по пизде. Если бы все было так просто, то так бы давно сделали.
Аноним 28/02/19 Чтв 05:19:30 1356547370
caml.jpg (257Кб, 1598x1094)
1598x1094
Лол. Пока в Окамл-треде идет обсуждение господ, в хаскель-треде решают лабы.
Так держать, верблюды.
Аноним 28/02/19 Чтв 07:40:25 1356554371
>>1356547
В этих тредах сидят ровно одни и те же люди. И не "решают лабы", а один поехавший вторую неделю одну и ту же задачку мусолит.
Аноним 01/03/19 Птн 07:14:41 1357044372
>>1356194
Солверы-то есть, не проблема. Проблема в том, что нужен нормальный язык для доказательств, из которого можно нормально экстрактить рабочий код. Языки для доказательств нынче более-менее терпимые, а с экстракцией проблемы. Ну можно какой-нибудь Liquid Haskell взять, там поверх хаскеля навешиваются сигма-типы (или вроде того), решаются модел-чекером автоматически.
Аноним 01/03/19 Птн 09:53:18 1357073373
Уважаемые товарищи эмельщики. Когда же будут алгебраические эффекты?
Аноним 01/03/19 Птн 10:11:01 1357078374
>>1197418
Почему-то почти никто, хотя язык то норм. Вполне можно было бы гонять вместо монструозной скалы. Но есть замкнутый круг - не используют так как экосистема бедная, либ мало.. .а либ мало потому-что не используют.
Аноним 01/03/19 Птн 10:19:49 1357079375
>>1357078
Скала взлетела, потому что под JVM не было аналога C#. А под дот нет был, называется C#. Если бы C# оставался в версии 1.0 до 2014 года, но при этом был бы C#, то F# бы взлетел, естественно, за неимением альтернатив.
Аноним 01/03/19 Птн 17:21:02 1357262376
>>1357078
Я думал он из-за еботни с интеропом не взлетел
Аноним 02/03/19 Суб 13:40:26 1357703377
>>1357073
>алгебраические эффекты

Через год-два.
Аноним 02/03/19 Суб 13:41:14 1357705378
>>1357078
>Но есть замкнутый круг - не используют так как экосистема бедная, либ мало

Много либ, экосистема богатая.
Аноним 10/03/19 Вск 20:55:38 1362175379
sub-buzz-19102-[...].png (1104Кб, 623x849)
623x849
>>1196260 (OP)
Он живой вообще? На нём же почти нихера не пишут, вакансий ничтожно мало, известных проектов, активно развивающихся тоже мало... какие-то автоматизированный системы подпорки жабаскрипт костылей в духе Flow, bucklescript и ReasonML, и в общем-то всё.
Аноним 13/03/19 Срд 22:02:23 1363681380
Аноним 13/03/19 Срд 22:47:25 1363859381
>>1362175
чтобы постдокам во франции было о чем статьи писать
ну ты, бля, как маленький, глупые вопросы задаешь
Аноним 29/03/19 Птн 23:21:39 1372125382
Подкиньте идею мелкого десктопного аппа на камле так чтобы это не выглядело чисто выебоном по приколу на камле напесал))
Аноним 16/04/19 Втр 13:17:55 1382225383
Не тонем
Аноним 16/04/19 Втр 17:03:57 1382337384
>>1372125
Каталог индивидуалок для любителей продажной любви. Нужно хранить фотографии, телефоны и отзывы о шлюшках и вести историю для каждой инди.
Аноним 17/04/19 Срд 02:35:25 1382581385
1
Аноним 17/04/19 Срд 21:31:46 1383076386
>>1382337
А на OCaml потому что у каждой будет монада!
Аноним 18/04/19 Чтв 10:18:47 1383246387
>>1383076
Возможно, вы имели в виду: манда
Аноним 18/04/19 Чтв 22:17:22 1383727388
14328104461450.jpg (4Кб, 251x251)
251x251
Аноним 22/04/19 Пнд 23:33:40 1387036389
>>1383727
Хуле бы и нет то?
Lwt например - монада на самом деле нет, но всем похуй.
Аноним 24/04/19 Срд 14:06:34 1387778390
>>1362175
Я пишу за зарплату. Facebook пишет, janestreet, dassault, lexify, tezos foundation, citrix, дохуя кто.
Аноним 24/04/19 Срд 18:40:34 1387919391
>>1387778
А чо там у ситрикса на сабже?
Аноним 24/04/19 Срд 20:08:49 1387990392
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов