LINUX.ORG.RU

Scala или Elixir?

 


0

2

Если бы вы были студентом, чтобы вы сейчас начали изучать в качестве первого функционального языка? Эти два я выбрал из-за среды и библиотек, у одного языка на java, у другого на erlang.

Deleted

Они оба же нифига толком не функциональные. И то и другое не годится. Бери http://learnyouahaskell.com/ (можно найти сканы этой книги бумажной на русском) и учи Haskell, не прогадаешь, потом проблем ни с чем не будет.

unclechu ()
Последнее исправление: unclechu (всего исправлений: 1)
Ответ на: комментарий от unclechu

Ога, язык академический, функционально типами обмазываться научились лет пять назад, до этого дальше do нотации в IO уйти не могли, тулинг мертвый.

Deleted ()
Ответ на: комментарий от Deleted

какая функциональщина нужна?

Практичная. Ну вот в если книге написано, что «язык функциональный», то наверное такой. Почему эти два? Они широко используются, наверное из-за этого.

Python уже изучал, не нравится и функциональщины там нет.

Deleted ()
Ответ на: комментарий от Deleted

Ты это мне будешь рассказывать? Я профессионально на Haskell уже несколько лет пишу, решаю задачи самого разного толка из разных предметных областей, соотношения практичности (производительность, экономность до памяти, etc.) и уровня абстракций - лучшего я пока не видел.

функционально типами обмазываться научились лет пять назад

Этим что хотел сказать? Перефразируешь?

тулинг мертвый

Последний LTS-снапшот вышел вчера.

до этого дальше do нотации в IO

Тоже не понятно что хотел сказать. do-нотация никак к IO не привязана, она для любых монад, будь то IO, Maybe, List или любая твоя собственная.

unclechu ()

Если б студентом - то Хаскель. Там все необходимые концепции и понятия. Потом любой язык с этими наворотами будет даваться легко.

solom ()
Ответ на: комментарий от anonymous

Но Scala по-моему немного мертва

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

Dred ★★★★★ ()
Ответ на: комментарий от Deleted

Функциональщина которую тебе продают со scala\haskell\idris это скорее type oriented functional programming, где тебе придется обмазываться HoTT и становится штангистом. Функциональщина уровня lisp\python\js - просто функциональщина писать опердени на которой можное без ловкого жонглирования матаном.

функциональщины там нет

толсто зелено.

Deleted ()

Бери Haskell, он убирает весь лишний мусор из головы. Весь язык построен просто, без костыльных конструкций для экзотического синтаксиса, как в большинстве языков. В основе функции, есть синтаксис для инфиксных функций (когда пишется не

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

unclechu ()
Ответ на: комментарий от unclechu

Ты это мне будешь рассказывать?

Какой-то ты токсичный.

Этим что хотел сказать? Перефразируешь?

Подвезли хотя бы зависимые типы.

Последний LTS-снапшот вышел вчера.

GHC + батарейки != тулинг.

Тоже не понятно что хотел сказать. do-нотация никак к IO не привязана, она для любых монад, будь то IO, Maybe, List или любая твоя собственная.

Лет пять назад весь хаскель код выглядел как будто бы пограммист запихал в do все что мог. Чо там сейчас - не знаю, но вроде уже не так стремно, но до выразительности какого-нибудь scalaz-zio еще писать и писать.

Deleted ()
Ответ на: комментарий от Deleted

Сказать честно, не горю желанием, изучать всякие монады и прочую фигню как теории категорий. Хочу писать как на java или С++ и при этом иметь на уровне языка патерн-матчинг, case классы, коллекции, иммутабельность, ленивость и всякие акторы распределенные по сети, как пример.

Deleted ()
Ответ на: комментарий от Deleted

Хочу писать как на java или С++ и при этом иметь на уровне языка патерн-матчинг, case классы, коллекции, иммутабельность, ленивость и всякие акторы распределенные по сети, как пример.

Rust.

Ну разве что с ленивостью совсем нет, AFAIK. Ну и насколько actix готов для «акторов распределенных по сети» — это отдельный вопрос (сам я просто не в курсе).

eao197 ★★★★★ ()
Ответ на: комментарий от Deleted

Если решил выучить Elixir, то попутно придется выучить и хтоничный Erlang такие дела. Хотя со Скалой таже история - без Жавы тоже ловить вроде особо нечего.

anonymous ()
Ответ на: комментарий от Deleted

Вот ты и сломался, не нужна тебе функциональщина. Бери то на что вакансий больше и учи.

Сказать честно, не горю желанием, изучать всякие монады и прочую фигню как теории категорий.

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

Deleted ()
Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: комментарий от unclechu

Они оба же нифига толком не функциональные.

Спору нет, но может ему не нравится в чистый функциональный Haskell, мне вот тоже не нравится программирование в монадах. Вот программирование в функциональном стиле с мапиками, редусиками, фильтриками - то что привлекает. Ещё есть F# и Swift. Жаль из Ocaml не смогли сделать универсальный инструмент коим стал Golang.

Cergoo ()
Ответ на: комментарий от Deleted

Да, зав-типов в Haskell сейчас из самого важного не хватает, по крайней мере есть костыли вроде singletons, это всяко лучше, чем незрелый для практического применения Idris, другого чего-то лучше просто не представлено, так что Haskell тут со своими singletons пока лучшее, что у нас есть. Но, в конце-концов, мы ведь прекрасно понимаем, что зав-типы для новичка в ФП - это слишком большой груз для неокрепшего мозга, это уже скорее вершина развития.

unclechu ()
Ответ на: комментарий от anonymous

Для работы с JVM придется выучить JMM в любом случае и понимать во что там твой scala код компилится. Дальше можно делать вид что java не существует, но это до первого null на интеропе с джавовой либой.

Deleted ()
Ответ на: комментарий от Deleted

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

unclechu ()
Ответ на: комментарий от anonymous

без Жавы тоже ловить вроде особо нечего.

А я читал, что ее специально развивают, чтобы не писать на голой java, т.к. ее использование увеличивает производительность труда прмерно в 3 раза, при гораздо более надежном коде. Т.е. она будет новый промышленный стандарт, как С++ сейчас вытеснил С практически везде.

Deleted ()
Ответ на: комментарий от unclechu

Чувствую, что все проблемы вылезут на уровне библиотек. Чтобы их правильно использовать нужно знать язык и всю кухню на профессиональном уровне.

Deleted ()

чтобы вы сейчас начали изучать

Ровно то же, что и начал изучать когда был «студентом» — мне кажется я не ошибся выбрав Clojure

oxo ()

Во-первых нет строгого определения что такое ФП. Одним достаточно иммутабельности, другие хотят типов данных, монад, ленивость и прочее.

Насчет скалы и эликсира - со скалой я мало знаком, скажу про эликсир.

Эликсир очень хороший, но есть большое НО - у него очень много всяких «фишек» которые к ФП не относятся никак. Что-то в наследство от Эрланга (процессы, модули), что-то свое (переприсваивание переменных, макросы). То есть язык хороший, веселый, практичный(!), но если хочешь именно с головой в чисто ФП где минимум всяких левых наворотов - как уже посоветовали - хаскель.

loz ★★★★★ ()
Последнее исправление: loz (всего исправлений: 2)
Ответ на: комментарий от Hertz

У Racket очень жирный рантайм, у меня на старте на hello world съело более 150МиБ, а когда я запустил DrRacket, это IDE для него, написанную на нём же, - так там 600-800МиБ, пока ещё ничего не сделал, и пока оно работает видно как десятки мегабайт туда-сюда выделяются, высвобождаются. Так что это скорее игрушечный язык (из-за экосистемы), в то время как Haskell рантайм (ghc) разве что в эмбеддед не пихается, а в остальном очень скромный по сравнению с конкурентами.

unclechu ()
Ответ на: комментарий от Deleted

Ты считаешь это не касается в равной степени других языков? Как раз для простых вещей есть понятные туториалы, есть для того же веба библиотеки очень простые, возможно лишённые некоторых бенефитов вроде валидации корректности хэндлеров на этапе компиляции (которая невозможна в большинстве языков технически), но понятные самым «зелёным». На Haskell можно писать по-разному, на начальных этапах вполне себе можно писать внешне как на петоне каком-нибудь. Можешь для начала поиграться с каким-нибудь простым фреймворком вроде этого: https://www.stackage.org/lts-13.15/package/scotty-0.11.3

unclechu ()
Ответ на: комментарий от Aber

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

UPD: И самое грустное, - постоянно быть окружённым ещё более интеллектуально неразвитыми особями, когда никто не может подтолкнуть тебя к развитию, дать тебе что-то качественно новое для толчка, путь к стагнации. Если бы я мог вернуться в давнее прошлое и сказать что-то себе в виде совета для развития в профессии, - я бы сказал: «немедленно прочитай про Haskell и начинай изучать, невзирая ни на трудности, ни на фейлы, - продолжать». Если бы мне ещё тогда была открыта эта «истина», - я бы сейчас был на несколько голов выше себя сегодняшнего.

unclechu ()
Последнее исправление: unclechu (всего исправлений: 1)
Ответ на: комментарий от unclechu

Я читал исходники drracket, жутковато у него в нутрях, сам использую emacs. DrRacket запускаю только когда future-visualizer надо запустить. Скрипты на нём милое дело писать, но в прод я предпочту кложуру.

Hertz ★★★★★ ()
Ответ на: комментарий от unclechu

Я профессионально на Haskell уже несколько лет пишу, решаю задачи самого разного толка из разных предметных областей

как хаскелем вывесить wss, полученный json провалидировать, толкнуть в кафку, там пайплайн из пятка воркеров (и где-то map-reduce) и обратно в сокет толкнуть ответ?

Rastafarra ★★★ ()

Если бы вы были студентом, чтобы вы сейчас начали изучать в качестве первого функционального языка?

Сначала Haskell. Так лучше сформируется картина мира. И кстати, в некоторых западных странах Haskell заметно популярнее, чем у нас, например, в Англии.

По Haskell есть хорошая книга Курта «Get programming with Haskell». Ее перевели на русский.

Ну, а потом можно изучить и Scala, и все остальное. У студентов обычно до фига свободного времени.

dave ★★★★★ ()
Ответ на: комментарий от Rastafarra

1. https://hackage.haskell.org/package/websockets

2. Просто валидацию описываешь прямо в инстансе FromJSON (см. https://hackage.haskell.org/package/aeson ), только что тебе нужно валидировать? Если просто соответствие полям и их типам, то тебе ничего не нужно писать/валидировать, просто дерайвишь стандартный (из Generic-а) FromJSON для своего рекорда и оно само всё провалидирует и куда нужно разложит;

3. С кафкой работать лично не доводилось, так что тут советовать не буду ничего;

4. С воркерами проблем нет, всё прекрасно параллелится, можешь вот взглянуть на https://hackage.haskell.org/package/async для примера (берёшь mapConcurrently и мапнул массив с IO параллельно, с отдельными запросам куда-то там наружу, и вообще, что захочется, результат вернул в монадке хэндлера, какие проблемы?).

unclechu ()
Ответ на: комментарий от unclechu

3. С кафкой работать лично не доводилось

профессионализм так и прет.

С воркерами проблем нет, всё прекрасно параллелится

проффесионализм^2

как это шкалить на пять машин? это же на 10? как это шкалить по требованию? как этим читать-писать s3?

Rastafarra ★★★ ()