Это копия, сохраненная 21 мая 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Лучшая книга по Скале: http://www.ozon.ru/context/detail/id/31921731/
Учебник по Скале на русском: http://twitter.github.io/scala_school/ru/index.html
Второй учебник по Скале на русском: http://twitter.github.io/effectivescala/index-ru.html
Курс по fp на Скале для слоупоков: https://www.coursera.org/course/progfun
Список годноты: https://github.com/lauris/awesome-scala
Скала за пределами JVM: https://github.com/scala-native/scala-native
Два недавних форка компилятора, один от тайплевела и второй от баттхертнутого:
https://github.com/typelevel/scala (https://github.com/typelevel/scala/wiki/Differences)
https://github.com/paulp/policy
>Лучшая книга по Скале: http://www.ozon.ru/context/detail/id/31921731/
Лучшая книга для жавадаунов
>Учебник по Скале на русском: http://twitter.github.io/scala_school/ru/index.html
Хуевый учебник, https://github.com/anton-k/ru-neophyte-guide-to-scala этот лучше, хотя хуй его знает.
Наскальные балбесы, поясняйте чем Скала лучше Котлина как академический язык, и лучше Джавы как язык практический для бизнеса и тырпрайза.
Котлин - кастрированное хипстерское говно для школьников. Даже чистая жава лучше.
Мал по малу вкусности находятся. Например
inline fun Logger.debug(s: () -> String) {
if (isDebugEnabled) debug(s.invoke())
}
Метод расширения (который инлайнится кстати), принимающий лямбду, позволяет писать:
logger.debug { "Customer + " customer.getId() + " has just ordered " + order.expensiveComputation() }
При этом логирование будет выполняться, только если уровень логгера подходящий и аргументы вычислятся лениво.
Тем что имеет больше возможностей, и имеет в 999999999999 раз более обширную инфраструктуру чем жидбрейнское поделие?
>>767550
Но ведь это синтаксис из скалы, да и @inline там есть. А ещё есть -Xelide-below который может вырезать ассерты и логгинг при конпеляции.
Ну синтаксис, вроде, совсем не решающий аргумент, конечно если это не пиздоглазие как у Раста.
В скале пугает, когда ебанутые, которым фирма не разрешила писать на хаскеле, тащат скалаз и творят свои мутные дела. Т.е. им вроде дали неплохой язык, но они умудряются подгадить, не используя идиоматичные решения, и не подавляя маня-позывы.
>Ну синтаксис, вроде, совсем не решающий аргумент
Ну, в смысле, не синтаксис, а конкретно эта конструкция
def huita(s: ⇒ String)
huita { ... }
А ещё PartialFunction так же передаётся.
>Ну синтаксис, вроде, совсем не решающий аргумент, конечно если это не пиздоглазие как у Раста.
1) Удобство любого синтаксиса – дело привычки, я так же плевался с раста первые пол года знакомства с ним;
2) У скалы он куда "бохаче", в плохом смысле.
>>767593
Потому что компилятор скалы написан на скале)) ну вы понели)))
>компилятор скалы написан на скале)) ну вы понели)))
Ты не поверишь, но компилятор хачкеля написан на хачкеле, а компилятор C на C (хотя давно уже на крестах :(), но ни один из них не тупит над факториалом столько времени.
Типа, у скалы не только компилятор тормозной?
Одна история охуительнее другой.
>>767596
Нет, манька, вот поэтому
https://wiki.scala-lang.org/display/SIW/Overview+of+Compiler+Phases
>Одна история охуительнее другой.
Да, это так, я спиздел про три минуты. На самом деле, я просто не дождался окончания компиляции.
Олсо, когда запускал репл, уже начал думать, что это какой-то баг в жвм или еще где, так как запускался он минуты две, минимум (потом я пошел курить, вернулся и о, чудо!). Последующие запуски, даже на прогретой жвм, были нихуя не быстрее.
>Нет, манька, вот поэтому
Теперь поясни чому хаскель компилируется быстрее - может у него компилятор малофункциональнее?
Возьми да почитай вводные на оффсайтах котлина и скалы, там даже макака поймет что к чему, аноны щас тебе как обычно тонны предвзятой хуиты понастрочат(хуле, от явы навык хорошо развит).
>>767524
Сразу видно маняхейтера. Котлин это просто улучшеная жава, добавляет кучу синтаксического сахара, который на ява ждут уже 20 лет и который реально помогает, спасая от простынок текста.
> чем Скала лучше Котлина как академический язык
Думаю, тебе парни из JB с вертушки бы пояснили, что Котлин - не академический язык.
> и лучше Джавы как язык практический для бизнеса и тырпрайза.
Тем, что делает код короче и читабельнее и реализует разнообразные бест практисес непосредственно в языке.
Скала такая охуенная, что я не могу на ней писать. Только заглядываю в документацию, как обканчиваю монитор, иду курить, а затем без сил падаю спать.
Внезапно поддвачну, сейм шит.
Этот форс такой охуенный, что я не могу его не форсить. Только заглядываю в сосач, как обканчиваю монитор, иду форсить форс, а затем без сил падаю спать.
ну если ты не осилил хуле тогда своё рыло здесь заставляешь кукарекать?
>Скала имеет мозговыносящую систему типов
не понял это как?
>что нет другого языка, в котором ООП было бы адекватно статически типизировано.
define адекватно, а ваще ето кек канешна
>околодинамический цирк с конями в скале остался "для совместимости"
это какой?
Котлин хуйня и с задачами. Ceylon неплох, но не будет популярен все равно из-за инерции.
>>768437
Вот никто и не осилил. Кроме десятка ее разработчиков. http://yz.mit.edu/wp/true-scala-complexity/
Я вообще удивляюсь, как подобным предыдущему анону позволено иметь своё мнение и голосовать в частности. Давно пора ввести интеллектуальный ценз на мыслеизъявление. IQ меньше 100? - вон из интернетов! В крайнем случае - анально огородить какой-то аналог двача где оним бы могли морозить на тему
>взяться за ФП всерьез
>Котлин хуйня и с задачами.
список задач, про покпок тюринк полнота можешь не кукарекать.
>Вот никто и не осилил
define осилил. ты понимаеш что ты даун?
Котлину может повезти на Андроиде, если Гугл сжалится и подмахнет. И если товарищи прекратят велосипедить с anko (там есть хорошие вещи, но многие пытаются заменить лишь одним красивым кодом то, что сейчас имеет отличную инструментальную поддержку).
Пример того, что подобные субчики могут сделать в открытом поле (если не присматривать за ними):
>WTF is /:? Why do I need to consult a periodic table to make HTTP requests? http://www.flotsam.nl/dispatch-periodic-table.html
> anko (там есть хорошие вещи, но многие пытаются заменить лишь одним красивым кодом то, что сейчас имеет отличную инструментальную поддержку)
Можно пример таких вещей, имеющих отличную инструментальную поддержку?
Обкуриваемся функторами и ябём друг друга в монады.
и java.lang.NullPointerException)
недобавлены зависимости к проекту.
> We are a big scala shop at Expedia and it's concerning that Martin is more interested in Dotty.
> Scala 2.12 is late, and not having easy java8 interoperability is becoming more and more of an issue.
> I love the language but it is becoming harder to recommend it for new things due to the ambiguous roadmap
Наверное потому что глупо требовать 3-6 лет опыта на скале?
Параллельное программирование еще скучней + один из двух лекторов имеет максимально неприятный акцент
>он конечно пиздец нереально скучный
Я смотрю на 1.5, понижая до 1.25, когда перестаю понимать.
Желающие пообщаться, велкам.
https://telegram.me/joinchat/BoA_agWB_Xh7Rm75eumPNw
А я почитываю https://www.manning.com/books/functional-programming-in-scala
Пока ток до 4 главы дошел, но честно сделал все упражнения и очень даже годно!
Расскажите, какой способ обработки ошибок вы предпочитаете? Исключения, Option или что-то еще?
На растянутый анус только в плоском дизайне похоже.
Try (именно который с большой буквы), который контейнер
Можно Either, но это когда ты в месте ошибки знаешь что куда класть (Left И Right)
Я тащу Try и уже там где это по смыслу подходит его разворачиваю.
А почему должна?
Вот тебе немного новостей из 2016: ваш Фюрер таки признал что Скала некорректна, переписывает её заново, но когда будет релиз - хуй знает.
>>799451
пеар анрилейтед параши
у меня на работе скала, мудак
https://github.com/spring-projects/spring-scala
Пример Go показывает, что люди готовы обрастать код ебанутыми фичами ради скорости и писать вообще без типов.
Вот когда будет релиз, тогда и начну учить вашу скакалку для биг даты, а пока на D посижу.
и да и нет
зачем джулия, если есть кложурь?
Это тот язык, в котором из-за религиозных соображений/фундаментальных законов запретительного характера разрабы не могут REPL запилить? См. (переопределение функций/типов здесь https://github.com/JuliaLang/julia/issues/6786 и далее по переоткрываемым задачам).
Спасибо, не надо
Из новых языков-убийц, вспоминается похожий конфуз еще у раста, в котором разрабы не осилили TCO.
А для бигдаты по твоему пойдёт? У скалы вон с релизами проблемы. А кроме неё вроде больше ничего и нет.
Кинь ссылку на курс. Они там всё переделали и теперь старая работать перестала.
>У скалы вон с релизами проблемы
Что это означает? Ты имеешь в виду что 2.12 еще не вышла? Ну так я тебе сообщу что например спарк до 2.0 по дефолту билдится под 2.10(!), после будет под 2.11. А когда он появится в дистрибутивах клаудеры, не говоря уже о хортонворкс, вообще не известно. Может осенью, а может и в следующем году.
>>805640
>Что конпелятор скалы некорректен, если точнее
Что это означает? Что значит корректный компилятор?
>>805323
Обычно нет, если либа не написана специально для интероперабельности с джавой. Очень легко проебать и использовать такую фичу скалы которую очень трудно выразить в джаве.
>жава
>бигдата
Насмешил. Это инструмент для клепания CRMок макаками, но никак не для бигдаты.
Маня, все основные биг-дата тулы написаны на джяве и естественно она хорошо с ними интегрируется. То что скала это ололо бигдата-язык - это просто следствие того, что она работает на той же платформе, на которой джява-мужи уже всё написали.
Смотря какие задачи решать. У нас обычно модель пилят на питоне, а для прода все процессы перепиливают на джаву. Но мы hdp используем, на православном спарке наверняка удобнее и быстрее использовать скалу с её радующими глаз конструкциями, похожими сами знаете на что (_+_)
Ну кукарекали же что у скалы слишком тормозной и сложный конпелятор, вот Мартин и решил переделать. А он написал так, будто переделывают с нуля весь язык.
Там немалая часть - Java-код и апишки на оба языка (+ пихтон и R), плюс он юзает хадуповские либы. Hadoop - на джаве, Storm - на джаве, Druid -на джаве, Samza - опять же, значительная часть - джава код.
То что на Scala типа ололо бигдата - просто результат использования уже написанного джява-кода. Твой вскукарек ничего не отменяет.
И что? Использование готового - это хорошо, не зачем плодить велосипеды. С другой стороны скала позволяет значительно эффективнее использовать уже написанный код, элегантнее, проще, эффективнее и с большими возможностями.
Так-то оно так. Я это всё к тому, что Scala - не какой-то ёба-язык монополист биг-даты, а один из языков, на котором ей можно заниматься. Вообще все адекватные бигдата тулы рано или поздно заведут SDK под десяток языков и писать можно будет хоть на питоне, хоть на джаваскрипте. Потому что в бигдате важнее сами тулсеты, чем прослойка.
>Java-код
Костыли для джявамартых?
>плюс он юзает хадуповские либы
Для совместимости с хадуповскими легаси-говнами джявамартых, ну да
>То что на Scala типа ололо бигдата - просто результат использования уже написанного джява-кода
Нет, мартышка, результат превосходства скалы над говноджявой. Иначе бы все жрали хадуп.
Ты не понял. Они нужны не для для каких-то там мартыханских школобигдатеров, а например, чтоб унижать индусов в их собственном JDK.
Вот тут пруверщики доказали что TIMSORT который используется в джяве, пердоне и ондроеде - некорректный алгоритм.
http://envisage-project.eu/proving-android-java-and-python-sorting-algorithm-is-broken-and-how-to-fix-it/
А нахуя её в сам язык завозить? чтобы как в свифте можно было переменные и функции смайликами именовать?
>что понятия
Ты по ссылке вообще переходил? Там конкретный issue. Я воспроизводил этот баг у себя с помощью их программы. В джяве оно падало даже 67 млн. элементов. Или это ты так за обсер своих jvm анальных господ копротивляешься?
>петухи на параше
Лол, эта боль жвм-мартышки.
>чёткие пацаны с прувером формально доказали некорректность тимсорта, которым, кстати, все так гордились
>пок-пок всем похуй, не то что я такой-то бигдата отчёт для тёти Груни вчера выгрузил
лел
>>809024
То есть вершина достижений агда-петушни это проверять сортировки? Никакой работающей программы они сделать не в состоянии? Лол.
Да, по сравнению с достижениями мартышек из твоей веб-студии это конечно очень слабо. Ты вообще как, за компьютер сайнсом следишь, алгоритмы там, вычисления, верификации, системы типов. Или так, только отчётики выгружаешь и спарк программируешь?
>Ты вообще как, за борщехлеб сайнсом следишь, олимпиадки там, вычисления факториалов, верификации хелловорлдов, монадки
Что простите?
Хули не в джава треде? Ведь теперь там можно даже найти элемент в массиве и благодаря стараниям борщехлёбов отсортировать массив без ошибки.
>с помощью их программы
В этом и суть. Сколько лет оно работало, но тут оказывается, что на одном наборе данных оно может упасть. То есть, фиксить надо, фикс хороший, но не настолько. Но, поскольку у функци-анальщиков других достижений нет, вот они и бегают размахивая руками. А вот если бы они вместо написания статеек о том, как в функци-анальщине всё хорошо, и как императивному программированию скоро-скоро придёт самый настоящий вендекапец, занимались чем-то полезным, то всем было бы намного лучше.
можно ли как либо с одного метода достать переменную которую этот метод не возвращает?
вот пример кода
http://pastebin.com/EagWLMSW
надо достать строку с метода, и использовать её в другом методе
http://pastebin.com/EagWLMSW
>>сорян, инет пинганул
[code lang="scala"]ws.url(URL).post(POST).map{ request =>
val parts = request.body.split(",")
val sessionKey = someResult
val sessionValue = someString
(sessionKey, sessionValue)
}[/code]
Не?
Или Ok((sessionKey, sessionValue))
А для того, чтобы хэловорлд на скале компилировалась по 5 минут буквально?
Кстати, в идее стала доступна опция создания проект на Dotty, идея сама тащить последний снапшот. И оно предсказуемо работает раза в 3 медленнее текущего компилятора.
>А для того, чтобы хэловорлд на скале компилировалась по 5 минут буквально?
Что, получается Бреслав правду что-ли говорил :) ?
Я только на java/kotlin/C# разрабатываю на clojure еще через плагин хеловорды :3 писал.
fStr.onComplete {
case Success(str) => println(str)
case Failure(exc) => println(exc.getMessage)
}
Без блокировки не получится, а с ней теряется весь смысл асинхронности. Правильно будет так: future.map(string => frame.put(string)) или future map frame.put.
Результат - Future[Frame].
Искал. И первые 10 страниц кроме йоба гигантов вроде спарка и плея да рисёрчей нихуя нет.
И что же в ней такого "окодемичного" что сильно отличает её от других языков?
Чем скакался лучше Джулии?
Такой вид паралельности с общими данными там реализован разве что в виде пары конкурентных коллекций, так что да – в этой области от сосёт (отличается?) у юли.
Тоже кстати жду ответа от петуха выше – что в скале такого академичного?
Ну тогда я лучше Юльку буду учить как академический язык, нахуй мне скакалка сдалась.
Какие 10 страниц? С какими фильтрами? Такое впечателние что тебе нужны не проект найти, а попиздеть про их отсутствие.
А вообще опенсорс работает по другому:
1) У тебя есть проблема
2) Есть опенсорс либа котороая решает твою проблему, но не до конца
3) Ты допиливаешь либу и делаешь пулл реквест
4) ???????
5) PROFIT
ну и вообще по функциональщине
отличаются ли чем-то задачки (сортировки лол) на собеседах у функционалистов от быдло-имперетивщиков?
На собеседованиях вообще врядли будут спрашивать про функциональщине если в вакансии прямо не написано про шизу вроде шэйплесов – в проде её избегают во имя поддерживаемости.
На большинстве скала вакансий что я видел требуют знания ява стека + пары инструментов и фреймворков из мира скалы.
то есть будут спрашивать по джаве штоль? треды-шмреды?
по фреймворкам тоже какие вопросы? типа что такое экшон в плей? ето же хуета
или че попизже?
>функциональщине
>шэйплес
Как вы заебали пиздеть о том в чем не разбираетесь, уёбища.
>>817990
Предметная область имеет значение. Мы например вообще по кодированию задачек не давали, в основном вопросы то бекенду - базы, конкарренси, CAP теорема etc. Ну и общие вопросы по програмированию вроде "что НЕ нравится в скале?" и про простые структуры данных. Обычно если человек отвечает на такие вопросы, непосредственно с кодированием он справится.
Я бы еще давал задачу "напиши мне функцию reverse(List[T]) в функциональном стиле": могут разные интересные вопросы возникнуть.
На первой работе связанной со скалой собеседование строилось на отличиях скалы от джавы, какие у неё преимущества и недостатки, как там с функциональными фичами/ОО паттернами.
звучит как не очень сложный собесед, хотя я чушок - сходу бы вот так лист функционально бы не развернул
Первый собес отсеивает процентов 80-90 кандидатов. reverse не давали писать потому что нормальные джависты нам тоже подходили. Btw, развернуть связный список in-place (с мутабельныйми нодами) намного сложнее чем просто записать элементы одного списка в другой в обратном порядке (что я и имел в виде под функциональныйм разворотом списка).
Сколько дашь, столько и будет отжирать.
http://stackoverflow.com/questions/14763079/what-are-the-xms-and-xmx-parameters-when-starting-jvms
Тебе может и 128mb хватит, кто знает что там у тебя за логика.
Стоковый VisualVM запусти, там профайлер показывает красивый график с потреблением памяти.
Ничего серьёзного, 6 моделей и небольшой xml-rpc интерфейс на коленке с вебмордой чтобы искать по истории в irc каналах зарегистрированного юзера, писалось тоже for fun.
>>818575
>VisualVM
Не знал о таком, спасибо, помониторю.
Подтверждаю. Нужна чистка в рядах.
Нефиг жопой читать.
Vala - это копия шарпа поверх gobject. К тому же кроссплатформенность там во много номинальная.
Так-так, товарищи, тут кто-то пиздит.
Storm - говно, и написан он на Clojure, Samza - его мертворожденная копия с минимумом изменений.
А на Scala есть божественный Spark, который рвет всех и Storm с Samza (Spark Streaming), и Hadoop.
Функционально - это с рекурсией и конструкцие листа на обратном ходу из последнего элемента?
>и Hadoop
Ты дебил? Спарк и Хадуп разные задачи решают.
>Spark, который рвет всех и Storm
Лол, даунёнок не понимает разницу между stream-processing и micro-batching.
Судя по тому, что для тебя вся бигдата сводится к Спарку - ты просто восторженный школьник с дивана.
присоединяюсь
>Самый простой лаконичный и очевидный
Переебал тебе свёрткой с вертухи прямо в щи
Кстати, напомни какую лучше использовать, правую или левую?
>Переебал тебе свёрткой с вертухи прямо в щи
Это да. Я вообще какую-то хуйню в этом комменте написал, о чем-то другом думал наверное.
>Кстати, напомни какую лучше использовать, правую или левую?
Какую нужно, лол. Если оперция ассоциативна, то лучше не выёбываться и использовать левую, правая может быть не хвосторекурсивна stackoverflow привести на некоторых структурах данных (на списках все будет ок).
Кстати, кто-то сталкивался с не хвосторекурсивной левой сверткой? Ну например какой-нибудь бесконечный список [.. 0]?
Алсо, пишут, что там синтаксис такой:
> libraryDependencies += groupID % artifactID % version % configuration
Че за группы? Че за артифакты? Че вообще гуглить надо?
Поделитесь соображениями, что с рынком вакансий по скале в мск?
смотрю, последние года три, одни и те же конторы ищут людей, и хуй кого набирают, мне тоже дохуя где отболтили, где-то сам по фишке сливал собесы, т.к. обстановка ч т писос какая не прикольная.
везде одна ситуация: дико задроченные чуваки собеседуют для самоутверждения, но не набирают, а некоторых слишком круто осаживаю, и жалею, они не виноваты, но блять не умеют в нормальные коммуникации.
смотрю так же на джин например, 8 из 10 - релокация из ДС. т е работы тут как бы и нет для скалиста адекватного, не адепта-евангелиста, а когда ты и в код умеешь и знаешь как дела делаются. хз, Минск гораздо более праздничный, конторы крутые, бодрые не ссученные.
Как вы думаете, что тут за хуйня со скала-разработкой происходит?
С твоей формой изложения мыслей тебе в пхп-тред. Неудивительно, что тебя никуда не берут.
>Минск гораздо более праздничный
Чем Москва? Не поверю. Бывал в Минске, по сравнению с Киевом унылое место. Да-да, майдан, генотьба, скачут, всем весело.
> Ну например какой-нибудь бесконечный список [.. 0]?
Does not compute. Ты не сможешь оторвать такому списку голову, её нет
Да, головы нет. Точнее её невозможно получить, как и развернуть бусконечный список. Зато есть хвост и последний элемент. Ну не важно, вопрос не про это был.
>Есть хвост
Ты понимаешь, что концептуально, то что ты описал -- это всё тот же обычный бесконечный список в котором tail ты назвал head, a head - tail?
>tail ты назвал head
У их типы разные. tail остаётся tail (тоже бесконечный список), head нет, но есть last.
Сейчас заканчиваю cs50 и хочу выбрать дальнейшее развитие, интересуют более или менее современные и активно развивающиеся технологии с применением в вебе и больших данных, поэтому выбор пал на скалу. Все правильно?
Поясните, зачем нужны форки компилятора?
Сам язык java тебе мало чем пригодится, скорее навредит. А вот экосистема тебе пригодится, ну и понимание что там и как в jvm твориться, и почему вся функциональщина в scala -- это не больше чем набор костылей сахарок. А веб и бигдату абсолютно нормально пилить и на java, python и на всем, чем тебе хочется. Тут скорее нужно понять, чего тебе хочется.
>не умеющее в java 8
А нахуя оно надо?
>он тормозное говно
Ну, это не исправить, тут дело не столько в самом компиляторе...
Я то как раз перекатился из java в scala, потому что мне на jvm не хватало тех абстракций, которые предоставляет scala. А то, что функциональщина в scala -- это всего лишь сахарок, ты этого не замечаешь? Там же отовсюду торчит прибитые гвоздями к jvm куски. Ещё и система типов в scala оставляет желать лучшего. Но, для новоприбывших бойцов, может быть и не нужна jvm и вся эта возня с экосистемой java.
>>822977
>>822977
Спасибо за ответ, а как тогда учить, то-есть в книгах по скале рассказывается о
> экосистема тебе пригодится, ну и понимание что там и как в jvm твориться
Или это отдельно гуглить и читать?
>А нахуя оно надо?
Чтоб рантайм бодрей исполнял, ясное дело.
>тут дело не столько в самом компиляторе
Что он не может в параллельность - тоже дело не в нём, да?
>Синтаксический сахар
Как же меня заебала эта идиома. Со всех сторон слышен этот кукарек. Ты совершенно не понимаешь сути синтаксического сахара.
>Торчат прибитые к jvm куски
Как это понимать? Куски чего? Чем прибитые? Постишь - как в лужу пердишь
В любом учебнике по scalа будут описаны некоторые подводные камни jvm. Не стоит этим заморачиваться, пока не столкнешься.
>>823567
> Как же меня заебала эта идиома. Со всех сторон слышен этот кукарек. Ты совершенно не понимаешь сути синтаксического сахара
Я то его понимаю. Любой более-менее читаемый функциональный код, можно переписать в императивном стиле, но что это даст? На scala, как и на groovy? очень удобно делать dsl, и после них, абсолютно не хочется делать некоторые вещи на java. Но я одного не понял, почему тебя так задевает то, что я назвал функциональщину в scala -- сахаром?
>Как это понимать? Куски чего? Чем прибитые? Постишь - как в лужу пердишь
Ок, скажи мне, как скала ушла от jmm? Или может scala научилась не затирать знания о генериках в рантайме? Или может scala привнесла что-то фундаментально новое в jvm?
Ты меня конечно прости, но мне кажется ты просто диванный специалист, который не пишет\писал код на scala за деньги.
Некоторые твои тезисы верны, с некоторыми я не согласен. Но я совершенно не понимаю, что ты хочешь ими сказать, и главное зачем.
> Любой более-менее читаемый функциональный код можно переписать в императивном стиле
Любой более-менее читаемый код на тьюринг-полном языке можно переписать на другом тьюринг-полном языке.
>я назвал функциональщину в scala -- сахаром
Ты употребляешь термин "Синтаксический сахар" некорректно. Как это вижу я: если ты средствами языка можешь определить достаточно похожую конструкцию, то введение такой конструкции в язык - синтаксический сахар. Циклы в lisp - синтаксический сахар. В Java - насущная необходимость к синтаксическому сахару отношения не имеющая
>Синтаксический сахар:
>Это может быть любой элемент синтаксиса, который даёт программисту альтернативный способ записи уже имеющейся в языке синтаксической конструкции, и при этом является более удобным, или более кратким, или похожим на другой распространённый способ записи, или помогает писать программы в хорошем стиле.
Dependency Types, например, в скала - синтаксический сахар над какой-то из синтаксических форм java? Тогда давай, показывай как это делаетсяв джаве.
С твоим подходом можно любой язык назвать синтаксическим сахаром над машинными кодами. Это корректное, но совершенно бесполезное определение синтаксического сахара.
>ты просто диванный специалист, который не пишет\писал код на scala за деньги.
За такие "аргументы" в приличном обществе принято сразу нахуй послать.
>>824358
Какие можно предоставить пруфы этого на анонимином форуме?
Хуй знает, где мой договор, и вообще есть ли он, я как частный предприниматель оформлен. В любом случае, думаю что вероятность наличия в договоре слова Scala мала, там будет что-то вроде "разработка програмного обеспечения". Я могу ошибаться, конечно. Покажи свой договор как пример.
Хотел поинтересоваться как правильно писать файлы в ZipOutputStream. Я беру прямые ссылки на удаленные файлы и пишу их через BufferedInputStream в поток архива. Брат не умер, работает нормально, но иногда всё наёбывается причем на одном и том же месте и мне дропается поврежденный архив. Проверял неоднократно, все ссылки рабочие, если по отдельности писать, то норм, но бывает, что какие-то два соседние файлы не могут записаться и все дропается нахуй, уже заебало. Че мне делать, как быть? В большинстве случаев работает нормально, но на большом множестве файлов может случится такая хуета.
>>823234
Ты не понимаешь, что такое функциональное программирование. Скала функциональный язык, в ней реализованы некоторые функциональные структуры, которые используются на постоянной основе вроде монадических типов - Future, Optional, Try и тд, дефолтная иммутабельность, объекты первого класса - ты можно обращаться ко всему как кобъектам, дёргать-туда-сюда, передавать аргументом в функции, функторы, паттерн матчинг, уебищная библиотека коллекций, которые вообщем-то поддерживают все функции высшего порядка. В скале нет ленивости и есть только локальная типизация, нет ADT и зависимых типов, но и первое и второе можно реализовать, то есть это несовсем из коробки, но оно есть. Синтаксический сахар - это всякие дешевые приколы с инфиксной формой записи, щас посмотрел что это в интернете, какой-то ебанат указал на case class, в хаскеле такие классы по дефолту, и реализуются они почти так же внутри, я только зашел, а меня уже заебали этим тупым пиздежом не о чем, какие-то ебанаты просто обдрачивают слова и смакуют. Идите нахуй.
заработало, видимо, создавались entry с одинаковым именем, дублировались ссылки
охуеть, качает 2,8гб зип и ничего не сломано
Поддержу анона выше - в плюсах есть и Future, и Optional и даже лямбдочки (sic! kek), это теперь тоже ФП язык?
идите на хуй, те, кто не понял или дохуя умный, вас сюда никто не звал.
На, сука! Лови свою функциональщину на С++..
struct sequence_tag {};
struct pointer_tag {};
template< class X >
X category( ... );
template< class S >
auto category( const S& s ) -> decltype( std::begin(s), sequence_tag() );
template< class Ptr >
auto category( const Ptr& p ) -> decltype( *p, p==nullptr, pointer_tag() );
std::unique_ptr<int> p( new int(5) );
auto f = []( int x ) { return -x; };
std::unique_ptr<int> q = fmap( f, p );
-- реальная дич
наблюдаю только школоту неодупляющую, либо дохуя умных которые могут тут С++ и Скалу на раз оценить, и сказать что и там и там что-то есть, оба языка одинаковы, идите на хуй все..
так вот, я вас жду таких дохуя умных на собес, и готовьтесь получше, особенно если решите проводить сквозные аналогии в ФП между языками.. буду жестко наказывать вас анально, при джунах, что бы пример был перед глазами, что бы 100 подумали прежде чем говорить.
всем добра!
идите на хуй, те, кто не понял или дохуя умный, вас сюда никто не звал.
На, сука! Лови свою функциональщину на С++..
struct sequence_tag {};
struct pointer_tag {};
template< class X >
X category( ... );
template< class S >
auto category( const S& s ) -> decltype( std::begin(s), sequence_tag() );
template< class Ptr >
auto category( const Ptr& p ) -> decltype( *p, p==nullptr, pointer_tag() );
std::unique_ptr<int> p( new int(5) );
auto f = []( int x ) { return -x; };
std::unique_ptr<int> q = fmap( f, p );
-- реальная дич
наблюдаю только школоту неодупляющую, либо дохуя умных которые могут тут С++ и Скалу на раз оценить, и сказать что и там и там что-то есть, оба языка одинаковы, идите на хуй все..
так вот, я вас жду таких дохуя умных на собес, и готовьтесь получше, особенно если решите проводить сквозные аналогии в ФП между языками.. буду жестко наказывать вас анально, при джунах, что бы пример был перед глазами, что бы 100 подумали прежде чем говорить.
всем добра!
half)xtandcfANUSgm^!VailPUNCTUMc|dKom
Потому что скала настолько всем неинтересна, что тред можно нахуй удалять.
Короче, написал функцию, которая принмает набор байтов и считает количество появлений каждого байта в этом наборе.
http://pastebin.com/yyYPkZDp
Но проблема в том, что не осиливает большой объем данных.
Как пофиксить?
По поводу >>841902 - обрати внимание, там в принципе могут обрабатываться файлы гигабайтных размеров, и никакой подчеркиваю: никакой ебли с аккумуляторами.
Насчет этого, кстати, скала не хаскелл и не sml, в самой идеологии языка закладывается что in small, на уровне тела функций /их отдельных мест допустимы императивные циклы и var. Так что не еби мозги хвостовой рекурсией.
Ну вон там выше свёрткой и на не борщехлебской жабе. Вообще было бы интересно послушать кукареканье борщевиков. А они, как назло, притихли.
Твой код это пиздец. Ты понимаешь при каждом remainingBytes.tail и accumElems :+ (...) у тебя создаётся новый массив? И чем дальше, тем больше эти массивы становятся и тем больше элементов приходится копировать.
Наивное функциональное решение, вообще без заморочек с производительностью, может быть таким: seq.groupBy(identity).mapValues(_.size).
Я нормальный бенчмарк не проводил, но на моей машине обработка 100000 элеметнов занимает <100ms в худшем случае (все элементы разные) и 1-2 секунды для 1000000 разных элементов. Ты че считаешь байты, а не инты, значит максимум разных элементов у тебя может быть 256. На таких данных наивный алгоритм обрабатывает 100000 элементов з 9ms, а 1000000 - <100ms.
То есть твои пикчи по несколько метров возможно сможет осилить. Проверить это просто - нужно написть одну (1) строчку кода, а не 20 с tailrec и условиями.
Если данных больше - нужны стримы кончено. Завтра, если не лень будет, сделаю на scalaz-streams и сравню с джавовыми стримами.
Если еще больше - welcome to Spark.
>>841915
>Так что не еби мозги хвостовой рекурсией
Только если работаешь с мутабельными данными и без них не выходит выразить алгоритм или добиться приемлимой производительности.
>Свёрткой
>Простыня текста
>Ни одного упоминания fold в любой форме.
Зачем проникающие в этот тред кукаретики назрюкивают свой кукарек совершенно не понимая того, о чем нахрюкивают?
что думаешь о cats?
Вот из новостей
>Из других направлений я бы отметил API для пакетной обработки данных (Vector API). В современных процессорах есть векторные расширения (SSE и AVX на x86, NEON на ARM), содержащие инструкции для пакетной обработки данных (SIMD инструкции). На текущий момент JVM умеет делать автоматическую векторизацию кода при динамической компиляции, но это не покрывает всех интересных случаев. Идет работа над специализированным API, дающим возможность явно описывать операции пакетной обработки над данными.
Там была вонь про автоматическое распаралеливание кода, а вместо одной (из нескольки) ссылок с пруфом тот C++-питух скинул линк на доку про векторизацию в LLVM, после чего его выгнали нахуй из треда с визгами "КОКОКО ЖВМ ВСЁ УМЕЕТ".
Пощекотал хуем за языком любителю сокращателей ссылок.
Ок гляну
>>844125
Говно по "аналагу" с говном? Ебать ты говен.
>Скаланы, как у скалы отношения с machine learning и big data?
Ну, apache'вский Spark написан и использует скалу.
Джуна вряд ли. Обычно средняя скала вакансия подразумевает, что опыт у тебя хоть какой-то есть, если не скале, то хотя бы на яве или другом языке. Ну и знание самой явы, jvm и стандартной библиотеки явы необходимы, потому что они точно понадобятся. Знание сервлетов и jdbc, скорее всего тоже понадобятся. Но вот насчет необходимости всяких древних JavaEE технологий я бы не был так уверен.
Мне, например, предлагали скала вакансии, хотя у меня основной опыт в сфере .net технологий. И собеседования на эти вакансии я проходил, несмотря на то, что особо глубоко в экосистему явы я никогда не погружался, хотя саму яву и jvm я знаю более-менее хорошо.
Спасибо, ну тогда буду параллельно учить, чтобы при первой возможности перекатиться.
Угораздило меня со студенческой скамьи нырнуть в Скалу всей головой, устроившись в одну фирму джуниором. Теперь как "свежий мозг" возглавляю рефакторинг, ебашу проект на ScalaZ, но при этом кушаю много-много кактусов, связанных зачастую с требованиями к окружению (Websphere + JVM 1.6 и ниипет). Пытался искать новую работу, ибо уже тошнит от одиночества, похуизма и чуть выше чем студенческой зарплаты, но АХ и УВЫ - нихуя. 99% HR-бабищ, которые доебывали меня по телефону, пытались мне впихивать какие-то джава-вакансии (зачастую на тему BigData). Хотя я четко всем говорил, что джава-опыта у меня нет, один хуй пытались пихнуть. Соснул крупных хуев на нескольких собеседованиях, где задавались в основном джава-вопросы. Лишь пару фирм было более-менее, но они нашли кандидата получше - немудрено, я сижу и сохну мозгами в своей конторке. Уже ничерта там не осталось из основ, все сплошная практика и готовность варить свои велосипеды.
Короче, анон, я уже почти год в профессиональной депрессии и совершенно не понимаю, что мне делать. Есть ли вообще жизнь на Скале? Куда идти дальше?
Хуёво как-то искал, тот же тинькфф безостановочно хантит. Ну ещё как вариант – поговорить с начальством на счёт зарплаты прежде чем искать новую работу.
Кстати, уже вышла 2.12 RC1, из фич – java 8, новый оптимизатор, по синтаксису только SAM-типы.
Может быть и хуево. Я искал пассивно: кинул резюмеху на хх и ждал звонков. Просмотров была тьма тьмущая, звонков не сильно меньше. Но все по джава-хуите какой-то, да и к тому же названивали агентства.
Про Тинькофф знаю, собеседовался у них. Вроде бы интересный вариант с одной стороны, с другой стороны мне немного не понравилась их атмосфера, которая довольно типичная для банка. Там все постоянно с горящей жопой и на иголках. Все вот эти АГИЛЕ, "каждую неделю релиз no matter what", спринты и прочее говно. Я туда пришел и сразу понял, что эти чуваки ищут упоротых энтузиастов, которые готовы сидеть с 10 до 19, выжимая из каждой клетки своего тела всю возможную энергию, которые готовы работать даже просто за идею. А меня в конторе разбаловали свободным графиком, похуизмом и всем таким вот. За последний год едва вспомню, когда я досидел 8-часовой рабочий день до конца. Сделал несколько фич, чувствую что заебался/устал, или пробки начнутся вот-вот - съебываю домой. Никогда не ездил в час пик.
Короч, они мне тестовые задания дали, а я через пару дней в отпуск уходил. Конечно же, я положил хуй и сообщил им об этом. До сих пор в раздумьях, впрочем. Чтобы туда нормально устроиться, мне придется хорошенько напрячь очко и вботать многое, что я когда-то знал и использовал, но порядком подзабыл. А то последние полгода я только и делаю, что веду БОЙ, а не спокойную разработку, со Spray-ем.
Короче, это реал проф депрессия с сопутствующей апатией. Всю жду, когда меня шарахнет молния, и я начну пилить какой-нибудь сайд-проект, который вскрутит мне голову и заставит многое выучить/вспомнить.
Куда перекатываться? Зачем перекатываться? Ты думаешь использование скалы тебя волшебным образом избавит от необходимости думать? Потому что если думать, прежде чем говнокодить, то и жаба прокатит.
Seriously?
http://pastebin.com/yyYPkZDp
http://pastebin.com/2kqdpMRU
Не устаю повторять - разруха она не в сортирах, а в головах.
Конкретно тебе - нет.
че у тинькова задают на тестовое?
А вопрос у меня один:
Есть какой-то Yoba-веб-фреймворк для скалы чтобы прям вообще макет бэк-энда за день собрать можно было и масштабировать до бесконечности? Ну типа рельсы и прочая ересь скриптопараши но только под скалу.
Play Framework 2
>макет бэк-энда за день собрать можно было и масштабировать до бесконечности
Пишешь стейтлесс апи и масштабируешь по горизонтали.
Можешь спрей попробовать, если только апи будешь писать.
Не дай бог!
Пусть хотя бы эко-система скалы была в форме и явно ленивые говнокодеры выбраковывались.
Чем head отличается от last? Кроме названия, и того, что ты соответствующий ему элемент справа рисуешь.
> скаланы че спрашивают на собседованиях на скальные вакансии?
А такие есть?
>>818317
>что НЕ нравится в скале?"
Что на такое обычно отвечают?
Практикой и чтением гугла/документации/чужого кода
>А такие есть?
Гуглить разучился?
>Что на такое обычно отвечают?
Да разное, кто про отсутсвие общего стайл гайда, кто про убогий вывод типов, кому-то коллекции не нравятся, етц. У скалы полно недостатков и этот вопрос как раз хорошо показывает опыт работы с языком.
>>852629
Ничем. Такая вот абстракция.
Бамп вопросику
Я бы вообще посоветовал F#, но тут уже дело вкуса — статика или динамика. Из реальных аргументов — кол-во библиотек и стабильность языка — на стороне скалы.
> стабильность языка — на стороне скалы
Толсто, там блядь компилятор через раз зависает, 100500 багов в трекере.
> Толсто, там блядь компилятор через раз зависает,
Ни разу не было
> 100500 багов в трекере.
Это значит что язык активно используют и улучшают
Хз что у тебя там падает, но всё что я слышал и читал об опыте с юлей — пока что очень сыро и память течёт из все дыр.
>Тоже кстати жду ответа от петуха выше – что в скале такого академичного?
Система типов. И это нихуя не плюс.
Он наверное имеет в виду что за ситемой типов в скале есть DoT (Dependent Object Types) Calculus. Не понимаю почему это не плюс. Это позволяет формально рассуждать о системе типов и улучшать её в dotty например.
Когда редактирую views/index.scala.html например, соответствующий scala файл (target/scala-2.11/twirl/main/views/html/index.template.scala) не обновляется
Использую Жидею со Скала плагином
Приходится делать из командной строки activator clean; activator compile.
Есть какие-нибудь советы?
https://invite-me-to-2chpr.herokuapp.com/
Ладно, тогда буду вкатываться сразу на мидла
называется, зашел скалу поучить.
спека в виде html файлов,
ченжлог забронзовел вообще, что добавили в 2.11 догадывайся как хочешь
http://scala-lang.org/files/archive/spec/2.12/15-changelog.html
что с нами стало, мартин?
Зайди на гитхаб и посмотри ченджлог в описании релиза, чо как маленький.
Алсо, зашёл на сайт, прям на странице загрузки компилятора есть ссылка "чо нового" http://www.scala-lang.org/news/2.12.0
Я использую. У меня на акке написано простое REST-апи. Сам тоже ньюфаг, вкатился в скалу недавно после 6 лет джавы, местами нравится, местами нет.
А у меня микросервис для сбора статистики, основная же часть на Django с REST-фреймворком, а гуй на ScalaJS/React. Так вот, перейти с динамики на скалу (как в моем случае) - это как с бейсика/1С на нормальный ЯП.
Подходит ли акка для выполнения long running tasks? Гугл говорит, что актор должен отрабатывать как можно быстрее и придется что-то городить с пулами.
Use case такой - пуляю таску на "кластер", она там выполняется от нескольких секунд до нескольких часов и возвращает результат.
Что предложите?
кастомный контекст\или таску в отдельном экзекутор сервисе
class MyActor extends Actor {
implciit val ec = CachedThreadPool(10)
def receive = {
case task: LongRunningTask =>
MyCustomEC.run(task) pipeTo sender
}
}
object MyCustimEC {
def run(task: LRT)(implicit ec: ExecitionContext) = {
// your code here
}
}
нету, кроме что не использовать плэй, сейчас пишут микросервисы, а вся статика в СПА, которая отдаётся нгинксом
Lightbend очевидно же
никак иди нахуй отсюда
>актор должен отрабатывать как можно быстрее
This, как и в любом асинхронном фреймворке, блокировать Event Loop надолго нельзя.
>Подходит ли акка для выполнения long running tasks
Пускай таск отдельным процессом или тредом, и организуй передачу сообщений, все будет ништяк.
Не аккаёб, нуб скорее.
кидай
тикль
Т.е. в таком случае акка будет эдаким message broker?
Если у меня producer может несколько единиц/десятков/сотен задач в секунду выдавать, то можно как-то его заблочить?
Все скалаёбы используют, мне особенно вот эта няшка понравилась http://doc.akka.io/docs/akka/2.4/scala/stream/stream-graphs.html
>Если у меня producer может несколько единиц/десятков/сотен задач в секунду выдавать, то можно как-то его заблочить?
да, это бэкпрэша называется, смотри любые стримы, как простой это аковские, как провереные продакшеном - апач флинк
На чем хочешь на том и пишешь, пиздос вопросик.
Akka HTTP
уже не тормозит?
Акка хттп это и есть спрей
берёшь такой набираешь в гугле блять и используешь, сука вы все тут тупые нахуй.
> а вся статика в СПА
В рот ебал ваши СПА. Вместо того чтобы отдать простую страничку текста - сперва скачай 10 мегов каких-то ебнутых скриптов, затем подожди еще полчаса, пока неторопливый мобильный браузер со скрипом провернет в себе шестерни джаваскриптовой хипстопараши. При этом смартфон держать надо в варежках для сварщиков, иначе можно ожог руки получить, ибо кочегарит во всю мощь, переваривая все эти флюксы-редуксы-хуюксы.
И ради чего это все? Почему нельзя просто страничку сгенерированную отдать? Тьфу блядь.
А потом еще ебутся с тем что гугл видите ли их сайт не индексирует как следует, так как его робот не хочет / не может как следует обработать ваши скрипты.
Тогда у него вообще будет груда говна вместо интернета
Что тебе кроме доки и исходников нужно?
Угу, и что я там увижу на сайте написанном по принципу
> а вся статика в СПА, которая отдаётся нгинксом
? Пустую страницу?
>Имеешь опыт разработки на Haskell от 5 лет
Борщехлебы соснули, лол. Представляете, как у этих ебанашек подгорит, когда им везде будет отказ?
За такие вакансии (если бы это был не фотошоп) можно было бы устраивать бои хаскеллистов, ведь их много, а вакансия одна раз в год. Ну и чтобы они там пиздили друг друга клавиатурами и рвали глотки, последний оставшийся на ногах получал бы работу.
Не хачкеллист ни разу, из экзотики знаком только поверхостно с окамлом.
Ты их и не можешь иметь, тк не понимаешь даже о чём речь, после явы и паскаль хорош своими типами, лол.
Просто сходи посмотри как адт в скале там реализуются, гуарды пма в рантайме падают (лел), как банальный энум пишется, максимально оверинжинирнутые средства разграничения полиморфизма (хотя такое больше нигде и не выразить).
Короче, она очень мощная — но с очень странными прибомбасами и косяками.
>адт в скале реализуются
Нормально реализуются. Через трейт описывающий тип и несколько наследующих его case классов. Весьма похоже на хачкель, хоть и немного более многословно
>enun
Не то чтобы они нужны в скале, но чем плохо?
http://www.scala-lang.org/api/current/scala/Enumeration.html
Есть учебник по нейронным сетям на скале? Англ подойдёт.
>Нормально реализуются. Через трейт описывающий тип и несколько наследующих его case классов.
/0
>Весьма похоже на хачкель
/0
> хоть и немного более многословно
>немного
/0
>нинужна
Ну да, ты какую нибудь фсм обычную без подобного средстав очень красиво напишешь. Не начинай песню жава и го индусов.
>но чем плохо?
Может то, что они:
1) Генерируются В РАНТАЙМЕ (как и еще добрая половина ТИПОБЕЗОБАСНОЙ системы типы скалы);
2) Нужно писать буквально в 6 раз больше как и с адт.
>/0
Что сказать то этим хотел?
>Нужно писать буквально в 6 раз больше
Ты выражаешь частную концепцию в терминах более общей. В хаскелле атд -- встроеная часть синтаксиса. В скале -- нечто, что можно реализовать при помощи трейтов и классов. Это ты ещё имплементацию тайпкласов не видел, лол. Здесь то всё хотя бы очевидно, хоть и многословно.
Если тебя это пугает — пиздуй учить спринги и прочее, что требуют при устройстве на работу, а не языки.
>Насколько плох/хорош c# с точки зрения функциональности и удобства использования по сравнению со скалой?
Функциональность/0.
Удобство — относительно жавы 8/10, относительно скалы 2/10.
В любом случае, если ты только вкатываешься в программирование — скалу выше уровня "нескучной жавы" не осилишь.
Не, так-то я уже работаю год джава девом, сейчас хочу сделать вклад в будущее, поэтому надо понять, можно ли ставить на скалу или по крайней мере, на ее идеологию и фишки, которые вроде как начинает перекатывать джава. Гетц во всяком случае наобещал уже угадывание типов, кейс классы и паттерн матчинг.
>Гетц во всяком случае наобещал уже угадывание типов, кейс классы и паттерн матчинг.
..которых уже гарантированно не будет как минимум в девятке, ещё всего-то лет 6-8 подождать осталось. При том, что это даже не пятая часть её фич, лол.
>сделать вклад в будущее
Ты это так мусолишь, будто прям дохуя времени и сил инвестировать надо. Лишними новые концепции не будут в любом случае.
Чем он лучше скалы?
>гуарды пма в рантайме падают (лел)
Ты имеешь в виду тотальность или что? В хаскеле тоже можно писать не тотальные функции.
>как банальный энум пишется
Энум не имеет отношение к системе типов, это просто класс и стандартной библотеки. Лучше исользовать джавовый энумы или либу Enumeratum.
У системы типов скалы есть реальные проблемы: http://io.livecode.ch/learn/namin/unsound
Возможно они будут пофикшены с развитием DoT в dotty и scala 3.
>>881837
Писал почти все работы в универе и полтора года на работе на шарпе, сейчас уже 4 года на скале, на джаве сам почти не писал.
Могу сказать что вернуться к шарпу будет больно. Как и к джаве, даже к восьмой. Дело не только в языках, а в библиотеках, что собственно связано, потому что более мощный язык позволяет создавать более мощные библиотеки и с их помощью писать более читаемый и, если нужно, более абстрактный код.
Хотя шарп удобнее джавы (как минимум был, с появлением восьмой джавы разрыв очень сократился), я бы не советовал переходить на него. Причина проста: на джаве чаще пишется серьёзный бэкенд. То есть у тебя есть больше возможностей работать в местах где ты узнаешь много про разные хранилища данных, конкарренси, асинхронные фреймворки etc. Я не говорю что на шарпе это не пишут, просто реже. Посмотри сам по вакансиям.
Btw, http://www.itjobswatch.co.uk - интересный пример. Найди там данные по шарпу, джаве, скале и хаскелю и сделай выводы.
Рассказывай
<kzlm.
Можно просто писать код и исполнять его, без всяких созданий говно SBT-проектов? Я, блядь, просто поиграться хочу, а не ентерпрайз приложение писать. Сука. Час потратишь, слушал несколько разных индусов чтобы только понять, как запускать код из Idea, так нихуя и не получилось, хотя под конец как мартышка действия повторял. Сука, бомбит.
REPL в скале есть, так что просто набирай в консоли "scala" и получай доступ к интерпретатору.
Лол, ты действительно предлагаешь кодить без подсветки и автоподбора или траллишь?
>>886153
Как сделать его экзист, блядь? Плагин sdk установлен. Я заебался, даже гугл не помогает.
мимопестонистсменившийверу
>Лол, ты действительно предлагаешь кодить без подсветки и автоподбора или траллишь?
Во-первых, если тебе просто поиграться, то автоподбор тебе не слишком нужен, да и подсветка тоже, хотя она есть в любом нормальном текстовом редакторе.
Во-вторых, в repl'e скалы 2.12 есть подсветка и автодополнение.
В-третьих, судя по проблеме, у тебя хромают навыки обращения с ПК.
>если поиграться
Если хочу разобраться, но чисто из образовательных целей? Я читаю книжку по скале и кончаю радугой. Нужно просто понять, как это настроить, а дальше пойдёт проще.
>в repl'e скалы есть подсветка
В любом случае там нужно построчно вводить. Это не удобно, если хочешь написать что-то на 200 строк кода, нпрм.
>хромают навыки обращения с пк
И что делать?
Делаешь SBT проект, а в нем создаешь себе scala worksheet. И играешься с ним сколько влезет
Спс, но я просто вместо класса обжект создал и заработало.
Мне больше интересно, как ты разобрался во всём этом? Есть какой-то учебник/сайт или есть рилейтид опыт из явы и поэтому понятно всё?
В чём разница между worksheet/ scala script, чем они отличаются от файлов классов/объектов, как именно применяется SBT и что это вообще всё такое.
SBT -- эдакий Maven для Scala проектов. Только вместо xml описания -- DSL на самой scala.
>worksheet
Продолжение идеи REPL. Каждое выражение вычисляется и отображается интерактивно. Фактически используется за тем же, за чем и REPL
>Script
Не знаю, не трогал
>>886543
Через жопную боль. Особенно припекало от ИДЕИ, которая крашилась из-за недостатка оперативки. Как выяснилось, я забыл выделить swap.
Двачую. Писать на Scala на Play! - то же самое что писать на жабе на Play!, разве что паттерн-матичинг немного помогает.
>то же самое что писать на жабе на Play!
Так говоришь будто что-то плохое. Вполне няшный веб-фреймворк.
У нас Play+Java как раз. Говорят, кошерно только на Scala для него писать. Что сразу заметил:
- другая парадигма, много всего осознавать, не самая пологая learning curve;
- везде пишут "расслабьтесь, скалу учить не надо". Но sbt — это описание билда на гребаной скале. Если ты ее не знаешь, что файл сложно читать, я уже не говорю менять. Это в противовес няшному декларативному Maven с xml, где конфиг по аналогии поправит даже ребенок;
- стек довольно редкий + завязка на Lightbend
https://telegram.me/joinchat/BoA_aj9lle-bI9Id-jcE3A
Ну пиздец. XML ты значит смог выучить, а DSL с джаваподобным синтаксисом не осилил.
XML интуитивно понятен же.
XML не надо "учить" он декларативный. Там домохозяйка расскажет, что происходит. И посмотри на .sbt в противовес со всеми этими :=, <<+, +<<, <<=, whatever. Я не говорю, что это нельзя освоить. Я говорю, что это лишний геморрой и дополнительное время.
>У нас Play+Java как раз. Говорят, кошерно только на Scala для него писать
Смотря какая версия фреймворка. Первая более заточена под джаву, вторая - под скалу. Я свои проекты делаю на джаве на 1.4.х и мне норм. Хотя поскольку начал сейчас скалу осваивать - думаю вкатиться во вторую версию и поглядеть что-как там.
>>887082
Безотносительно SBT, в функциональных языках все просто помешались на придумывании DSL на каждый чих.
Самый цирк - это DSL для html или xml (такое мне попадалось). Блядь, вы ебнутые что ли? html и xml это УЖЕ DSL фактически, зачем придумывать еще один слой поверх них?
В итоге приходится учить кучу ненужной хуиты.
Потому что (html (body хуй)) для многих читается и набирается проще, чем <html><body>хуй</body></html>
SBT — уродливая говнина уровня перла, а не жавоподобный синтаксис.
Вот серьёзно, я хз как люди пользуются этими сбт/мавенами/ант, когда есть божественный грейдл.
Для большинства проектов все что нужно - это уметь скачивать зависимости, компилировать проект и собирать всякие джары-вары-хуяры. В таком случае что грейдл, что мавен, что сбт однохуйственны.
Почитай вот про свободные аппликативные функторы и стрелки.
Анон, у тебя не печет от синтаксиса скалы после хаскеля?
Адово печет, даже учитывая что от хаскеля я узнал только какие-то самые основы.
>>889671
> и возможность переехать на скалу
А что значит "переехать"? У тебя есть вакансия со скалой, на которую тебя готовы взять? Ну тогда чего бы не попробовать.
На скале вакансий мало, но они есть. Язык интересный в целом, хоть и переусложненный.
Печёт но не сильно. Я так и не понял например, как в хаскеле нормально работать с разными зависимостями, к примеру. Если есть несколько пакетов с процедурами имена которых совпадают, начинается веселье и пиздец с квалифицированными импортами и лапшой кода
Куда сильнее печёт от каличного автоматического вывода типов. Ну оно то и понятно, скальная система типов несколько более "свободная"
>сли есть несколько пакетов с процедурами имена которых совпадают, начинается веселье и пиздец с квалифицированными импортами и лапшой кода
А в каком языке это не так?
Пробовать стоит однозначно, ты ничего практически не теряешь. Ну может будешь хуже в спринге каком-то разбираться, но дрочить на фреймворки - быть дауном.
Профиты:
- язык на котором можно почти без боли писать и, что важнее, который можно без боли читать
- обычно более компетентные команды
- в среднем выше зп - пруф я давал выше >>882149
А что ты сделал? Темплейт с макроида то пробовал собрать?
То же что и для вкотывания в любой другой язык ничего.
Скачали любую книжку и вкатились.
>>892084
Ага, ахуенно, только вот рантайм 50мб на мобилках тебя опечалит. Если не хочешь измазываться монадами и заниматься прочими приседаниями на типах и прочем - то она тебе даст только более краткий синтаксис. Для такого лучше взять какой нибудь котлин.
Вкатится поможет шапка.
На какие деньги можно рассчитывать в МСК при выборе скала-вакансии (будет ли эта цифра выше/ниже для джава вариантов)? Охотно ли берут людей с аналогичным опытом, или стоит еще прокачаться в джаве год-два?
На hh нашел, что скалисты нужны тинькоффу и яндексу. Есть ли отзывы по ним, а также другие известные работодатели на примете?
Прочитал джве книжки предварительно посмотрев курсы на coursera. Как теперь начать писать на скале за деньги?
Получить где-то опыт (опенсорс/фриланс пойдёт чтоб подзабить портфолио), подзубрить что там спрашивают на собеседованиях по скале и в уелом, подтянуть енгришь и пиздовать собеседоваться. Ещё есть вариант походить познакомится с людьми на конференциях/митапах — больше всего хайрят через знакомых.
>>897146
Моя имхота — когда будешь уверенно тянуть на мидла (относительно своих более опытных комрадов измеряется такое), если среднеджун не стоит сильно рыпаться.
В среднем та же самая цифра, зависит от вилки конкретного региона и компании (зарплаты в целом-то только так и варьируются а не по языку).
Яндексы с тиньковыми — просто большие компании с большими штатами и, соответственно, текучкой. Так вакансий куча, но они мелькают и их трудно заметить если не мониторить (опять же, я выше уже писал — большая часть хайринга кадров производится через знакомых).
Фриланс, хуячь вебприложения на фуллстек-скале.
Так я работу сменить хочу именно из-за того, что ощущаю, что уровень в плане технологий выше коллег и ловить в конторе уже нечего, либо меня просто не хотят прокачивать. Поэтому адекватную оценку дать себе сложно. Вопрос только в "джава или скала". Конечно, похожу по собеседованиям, посмотрю, где больше предложат и на условия труда. Но я с бОльшим удовольствием повозился бы в скале.
Значит, в крупные конторы через формы обратной связи на сайтах не стоит подавать заявки, а лучше найти человека с интересуемой фирмы и черкануть на почту?
Нет, просто чирканув на почту ты наврятли чего-то вообще добьёшься (вот сам представь — тебе пишет незнакомый хуй из интернетов тебе пишет на почту, просит протолкнуть под жопу эйчарке).
Знакомятся люди явно не так, лол.
Окай.. а можешь подсказать еще, в реальных скала-проектах код читабельный для среднего разработчика? Или часто используют спец. либы для хард функционального программирования, к примеру, scalaz?
"Обычный скала проект" зависит только от команды которой пишется. Где-то как в мире плюсов используют очень ограниченное кол-во фич и даже травят линтеры на нарушителей, где-то и округлые котята на монадах.
От размера команды зависит, скорее всего. Трудно представить себе даже человек 10 тайплевел-джедаев за одним проектом.
Ну, проекту-то не обязательно быть монолитным. А морду для взаимодействия можно и без джихада императивщине написать.
Кароч, смотря какая роль - пользователя всей этой магии (которая под капотом, наверное, всех популярных библиотек), либо кортим-разработчика. Если у каждого разработчика прикладного кода свой собственный dsl over scala, и метапрограммирование на shapeless, это как-то стремно.
и нифига не понимаю, для чего нужен этот Semigroup, и по какому правилу он вычисляется (в гугле нифига). Подскажите?
Кинуть ссылку на вики - все-равно что нахуй послать. Может ты сам не шаришь?
Я и не шарю. Помню только, что полугруппа - что-то из дискретки. А тебе зачем?
Для саморазвития. После появления в джаве лямбд, на гитхабе развелись проекты (к примеру, functionaljava), предоставляющие скаловский способ работы с данными. Там, в том числе, и эта структура есть. Видать, что-то важное, раз даже в джаву попытались мигрировать.
Все типовики порешал, илита?
>>902729
>>902734
С манадами то уже разобрались, почаны? Или не нужно? Или не рассказали как монады связаны с полугруппами?
>Моноид
>Полугруппа с единицей
>Снабжаешь ебаную полугруппу одним ебаным нейтральным элементом и получается блядский моноид
Что ещё спизданешь, мудило?
Давай лучше за NoSQL перетрем. Чому его так форсят? Я postgres всю жизнь использую (over slick как в склаебы заделался), а монгу ни одного повода изучить не было. Все ли так я делаю?
Потому же, почему подворачивают штаны или отращивают бороду, лел. Использовать нереляционные БД там где можно использовать реляционные --- долбоебизм чистой воды
Примерно так и думал. Вот у меня есть проект, где классически в БД лежат всякие сущности, и их отношения (а мордой джанга выступает). Но, вместе с тем, есть и сервис со сбором событий (и хитрой аналитикой в отчетах) на акке, где журнал весь такой из себя схеммалесс, но ссылающийся на вышеупомянутые сущности. Так вот, мне не впадлу написать миграцию, если журналирование требует каких-то изменений. Ну и понятно, что со временем, нагрузка таки может возрасти, и всю эту аналитику из отдельной схемы БД придется переносить в какое-то новомодное хранилище с шардингом, но бай дефолт монгу сувать туда я не стал.
Ты сидишь в скала треде, и вспомнил о монго, но не кассандра+айроспайк. Думаю ты зашел не в тот тред.
А же говорил, что пишу гуй на scalajs и асинхронщину на AkkaHTTP/Slick (иначе фигачил бы на торнадо), причем год только как подсел. Экосистемы не знаю, да. Зато вот от тебя, няша, узнал полезное.
http://www.lihaoyi.com/post/ImplicitDesignPatternsinScala.html
Имплиситы какое-то невероятное говнище. Экономится пара лишних символов (ну охуеть, теперь вместо того чтобы в каждый метод передавать контекст, или, что еще лучше, один раз передать его в конструктор объекта, мы заведем новую фичу языка), зато код делается некопируемым. Нельзя просто взять, скопировать кусок когда из документации или стековерфлоу и чтобы он заработал. Так как внезапно откуда-то нужно взять кучу имплиситов, которые могут еще и внезапно нетривиально создаваться.
Короче наравне с перегрузкой операторов это квинтэссенция подхода "ты никогда не угадаешь что делает этот код просто глядя на него, пока сука не сходишь в IDE по всем методам, операторам и вообще всему окружению"
В статье как раз описано, для чего это делается. Если так бугуртишь, и сравнивай на джавке строки через equals, там такого "говнища" не завезено.
ровные посоны пишут в ide, посмотреть значения имплиситов - одна кнопка. расширяемость языка - бесценна
>и сравнивай на джавке строки через equals
А я так и делаю. Скала мне нравится многими вещами, но все-таки этот язык содержит очень много способов сделать код абсолютно непонятным и нечитаемым. И если перегрузка операторов - вещь в целом полезная (и холиварная) и способна повысить читаемость и понятность кода, то имплиситы - какая-то невнятная поебень, нужная только чтобы сэкономить пару символов. Впрочем учитывая что многие адепты скалы обожают абсолютно ложное утверждение что "короткий код = понятный код" то ничего удивительного.
>нельзя просто взять, скопировать кусок когда из документации или стековерфлоу и чтобы он заработал.
Пиздец какой-то. А так вообще можно? И внутренние импорты в проекте не помешают?
>нужная только чтобы сэкономить пару символов.
Пиздос. Даже обьяснять лень
>И внутренние импорты в проекте не помешают?
Импорты стандартных классов IDE сама проставит. А вот всякие нетривиальные имплиситы - хуйз.
>>903959
>>903977
Неглубоки, но пока что я не видел ни одного использования имплисит параметров (я именно про них, имплисит преобразования в целом я нахожу полезными) которое нельзя было бы сделать добавлением пары символов и явной передаче аргумента.
Вот и прочитай про статью про тайпклассы, там, например, разобран JSON сериализатор, расширяемый через ваш любимый Open/Closed принцип. Что за порода, им принесешь информацию на блюдечке, а они вместо чтения начинают, нытье про ненужно.
Поддерживаю твою сорону, но не поддерживаю твою аргументацию.
Немного джуночувств.
Вот такое я оче не люблю:
[CODE]def sosi(implicit name: String) = "Sosi " + name
......sovsem drugoy fayl....
implicit val n = "Scalahater"
............mnogo strok.........
sosi
[/CODE]
Хотя такая вот нравиттся:
[CODE]class Pidor(val name: String)
object Pidor {
implicit val pidor: Pidor = new Pidor("Scalahater")
}
......sovsem drugoy fayl....
def sosi(implicit pidor: Pidor) = "Sosi " + pidor.name[/CODE]
объясните пожалуйста, как исправить эту ошибку? я создаю в intellij idea проект maven, потом нажимаю на "create from archetype", и выбираю scala, и у меня даже не получается запустить этот шаблонный проект. Объясните, в чём дело пожалуйста.
Обновить JUnit, очевидно же.
Такое не работает implicit def toB[A, B](a: Option[A])(implicit conv: A => B): Option = a.map(conv(_))
Об их прошлом опыте работы на Java. Как правило, большом опыте. Или вообще переучивают имеющихся в штате.
Scala Junior - редкость.
Значит, всех сразу же делают скала-мидлами? ) Чтоб мотивировать переход. Или сеньорами, чего уж там.
С JS прыгнул на Scala, на Java до этого почти не кодил не считая пару сложных хеловордов. Ну в целом конечно только умные джависты идут на скалу, а тормоза остаются в жабе, факт.
Нет, Scala язык не самый просто для новичка, да, ты можешь писать на нём как Java, только нахуй тебе тогда учить Scala, обычно скалу выбирают как раз из-за его богатых возможностей функциональной парадигмы, а это определенные правила и стиль программирования, которые во-первых накладывают ограничения при программировании (за переменную линейкой бы у меня на работе ебнули по рукам), ну и императивный стиль почему-то для большинства легче
Ну просто я реально не понимаю. Вот задача. Есть теоретический (!) скала синьор с пятилетним опытом и джава синьор с таким же опытом, только-только изучивший скалу. Как каждого из них называть, если будут работать в одной команде над скала-проектом?
Если проект на монадах и котятах — синьером будет только опытный скалист-фпшник. Иначе — похуй абсолютно, такая же жава, с чуть менее вербозным синтаксисом.
Скала синьора называй папой, джава синьора можешь называть шляпой, тетей шлюхой, гребнем, хуйлушей.
Двачую этого мопса.
О! Это scala.js? Поясни, как с ним дела обстоят, жив ещё? Чо там с интеропом, либами? Как пишется вообще на нём?
Т.е. var вы вообще не юзаете и если нужны сортоф while цикл(как пример) пишете функцию с хвостовой?
Мне кажется что это какой-то хуевый scalatags.
C scala.js все нормально. В меру популярный для сложных интерфейсов.
>>909919
Иди на курсеру проходить proglang. Все поймешь.
Это тот же скалатагс импорченный через префикс
Если тебе просто хочется уметь во всякие эти списки-деревья-сортировки то читни какого-нибудь Кормена "Алгоритмы построение и анализ", это классика, это знать надо.
Вообще реализовывать тебе вряд ли что-то придется самому, если ты только не дохуя хайлоад будешь делать (что вряд ли в ближайшем будущем) или науку пилить. Хватит краткого перечня основных алгоритмов и структур данных и основ анализа сложности чтобы понимать хуле у тебя удаление из ArrayList так долго работает. Главное знать ключевые слова, по которым потом гуглятся детали
а почему тебе не хватает просто имплицитного преобразования из A в B?
Такая штука вполне работает: http://pastebin.com/MagUGi9k
Передаем Option[A] туда, где нужен Option и A преобразуется в B
Ды как-то не преобразуется, братан.
Нужна диспечеризация по типу. Для одного типа аргумента один метод, для второго -- другой. Не через instanceOf же чекать?
Что за хуйня и почему я с ней до сих пор не столкнулся?
Паттернматчинг. Кстати, если диспетчеризация нужна по типу параметра дженерика (как у тебя List[Int], List[String]), наткнешься на жвмопроблемы, кури тайптеги
Ну и как ты собрался через паттерн матчинг проверять тип?
Вот, кстати что пишут пацаны
http://stackoverflow.com/questions/3307427/scala-double-definition-2-methods-have-the-same-type-erasure
Ну а я че тебе написал про жвм-проблемы, ебана
А вообще, ты бы книгу прочитал, что-ли. Скала хуево осваивается методом тыка без целостной картины в головушке.
Во-первых, кто "ты"? Нас здесь двое как минимум. Во-вторых, с чего ты взял что я не читал книг?
Просто такая:
case y: List[Int] => ???
конструкция как-то мимо меня прошла
Я третий. Про книги не я писал, но как бы основное применение паттернматчинга в других языках, откуда он пришел, именно в том чтобы матчить типы и адт, а не для обычного свитча на стероидах. Так что пиздуй читать про моноидные функторы, йопт
>матчить типы
В этом вашем хаскеле такой хуйни нету, например. А, и да, в скале это не работает
>с чего ты взял что я не читал книг?
>не знать про матч по типу
>не знать про тайп эрейже
Хуй знает. Наверное, от то, что абсолютно не понимаешь, что делаешь.
>В этом вашем хаскеле такой хуйни нету, например
Ты очень хуйово смортишь, причем везде. зануда мод: скала от эмэлей синтаксиса написалась, не от хачкеля
>в скале это не работает
А тут ты не та то валишь.
>>914540
Ладно, я соснул. Не понимаю, правда, как из этого абзаца можно сделать такие далеко идущие выводы. Может книжка хуёвая? Рассказывайте, что за годноту читали
>Scala in Depth
Не знаю, может и хуевая. Я изучал по "Scala для нетерпеливых", там последовательно разложены аспекты языка, и примерно указано, где какие подводные камни.
Она намного проще, и значительно менее подробная.
>Ты очень хуйово смортишь, причем везде
А где это в хаскиле паттерн-матчинг по типу? Или в окамле? Или в смл? Или в фешарпе? Я вот что-то не припоминаю. Ты же не имеешь в виду ручное теггирование через адт?
Юзай тайпклассы
object Main extends App {
trait Joiner[T] {
def join(list: List[T]): T
}
object Joiner {
def apply[T: Joiner](list: List[T]) = implicitly[Joiner[T]].join(list)
implicit val intJoiner: Joiner[Int] = (list: List[Int]) => 1
implicit val strJoiner: Joiner[String] = (list: List[String]) => "str"
}
println(Joiner(List(123)))
println(Joiner(List("")))
}
А я еще вот такой трюк использовал: http://stackoverflow.com/questions/34745066/dummyimplicits-is-this-used-and-how
Оно то можно конечно воспользоваться хаком, но тайпклассы - стандартный паттерн в ФП и в scala юзается почти везде.
Так что рекомендую освоить и использовать его: http://danielwestheide.com/blog/2013/02/06/the-neophytes-guide-to-scala-part-12-type-classes.html
Да я в курсе про тайпклассы, просто дал еще один вариант. Есть разные ситуации, возможно DummyImplicit в какой-то будет лучше.
Хочу написать функцию которая принимает два аргумента одного и того же класса, что-то вычисляет и возвращает результат, который является обьектом этого же класса
def compute(a: T, b: T): T = ...
Что бы она произвела вычисления у класса T должны быть методы +, -, , : Double
Знаю, что можно сделать интерфейс с этими методами и задать T <: Interface или через implicit обьект ComputeOps[T] с методами add(a: T, b: T) и тд, но этот метод мне не оч нравится, потому, что и так громоздкое выражение внутри функции превратится в совсем пиздец, если вместо a + b придется писать fooOps.add(a, b).
Мне нравится следующая идея: если я хочу использовать compute для некоторого класса Foo, то мне надо "довесить" необходимые методы используя implicit class не засоряя основное определение Foo, и внутри compute просто писать a + b * a.... и тд.
Можно ли так сделать, и если да, то как? Это вообще норм идея, или глупость?
То, что ты описал, похоже на тайпклассы + pimp my library:
object Main extends App {
trait Add[A] {
def add(a: A, b: A): A
}
implicit class AddOps[A](a: A)(implicit n: Add[A]) {
def |+|(b: A): A = n.add(a, b)
}
object Add {
implicit val addForDouble: Add[Double] = (a, b) => a + b
}
def compute[A: Add](a: A, b: A): A = a |+| b
println(compute(1.0, 2.0))
}
Метод специально назвал |+| вместо +, чтобы было видно, что он добавлен через имплиситы
Ты заебал уже со своими тайпклассами, Анон. Выучил тайпклассы - теперь во все щели протаскиваешь?
Они без Антона торчат из всех щелей например. Печет от тайпклассов - возможно, ты используешь не тот яп
Спасибо, оч помог!
Скаланы, а вот меня интесует вопрос по структуре проекта. Директории, куда тесты, сырсы и прочее.
Про генераторы прожектов типа скалатра хуиты я знаю, но вот все эти Джава лайк подходы: директория/ещё директория/100 уровней вниз/Опача.scala меня не очень радуют. Я понимаю, что это вкусовщина всё, и можно делать как хочешь, но есть ли другой, альтернативный и популярный подход?
Нету. И самое веселое, что тот же sbt из коробки поддерживает именно жява-стайл. Ну а чо ты хотел, она на жвм крутится, со всем вытекающим говном, вроде нпе, стирания типов и вот этого вот.
>директория/ещё директория/100 уровней вниз/Опача.scala
>директория/ещё директория
src/(main|test|it)/(scala|java|resources) - это нормально, что тут еще можно придумать
>100 уровней вниз
А это уже на твоё усморение. Не хочешь под каждый пакет делать директорию - не делай. Другое дело что когда у тебя 100 пакетов, с соответствующей иерархией в файловой системе как-то удобнее. Ну и я не знаю как IDE дружат с неиерархичным представлением, в смысле рефакторинга например.
как-то так def findAndUpdate(value: Long): Future[Option[Model]] // value - значение которое надо установить в field, Option[Model] - потому что в базе может не оказаться сущностей с field = None
обновить - значит изменить и записать изменение в базу
Ну, чот такое.
val itm = query.filter(_.field.isEmpty)
val optVal = Some(value)
for {
optModel <- itm.result.headOption
_ <- itm.map(_.field).take(1).update(optVal) if optModel.nonEmpty
} yield optModel.map(_.copy(field = optVal))q
Без q в конце.
Не получится.
Начни читать про 2.12.
Там не такие сильные изменения что прям все ПИЗДЕЦ ВСЕ ГОРИТ ПЕРЕПИСЫВАЙ ЧИСТИ ВИЛКОЙ. Если тебе не завтра на собеседование йоба-перформанс-инжинер — вообще не парься.
Весь код с 2.11 у меня переконпелировался под 2.12 без изменений, так что полагаю нихуя особо не поменяли.
Хули ты в Скалу лезешь, если даже такой простой вопрос нагуглить не можешь? Ты же с таким проглотом отсосешь, что позавидует даже самая опытная колумбийская шлюха.
https://www.google.com.ua/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8&client=ubuntu#q=scala+style+guide
Теперь закрой тред и никогда сюда больше не возвращайся
>>926972
>.com.ua
Но я просил что-то на усмотрение анонов, а не ссылку на гугл. Обоссал тебя в общем.
Во-первых, интеропабельностью с жявой.
Во-вторых, в нормальных языках трейты не позволяют хранить вообще никакого реализационного кода, в скале все же уступили перед напором энтерпрайз-макакенов.
В-третьих, несмотря на второй пунки, в трейтах все полностью иммутабельно.
Отличие в том, что в плюсах можно наследовать любую залупу от любого спидозного хуя и это никак нормально не разграничивается в отличие от скалы (ну это про систему типов в целом в общем-то).
Тем что абстрактный класс совместим с джявой, имеет конструктор, и можно наследоваться только от одного абс-го класса.
>>929715
>Во-вторых, в нормальных языках трейты не позволяют хранить вообще никакого реализационного кода
Как раз в этом их фишка по сравнению с интерфейсами (в джяве потому и спиздили её).
>В-третьих, несмотря на второй пунки, в трейтах все полностью иммутабельно.
trait Govno {
var mocha = ""
mocha = "blevota"
}
Кароче, забей хуй на все сказанное, абстрактными классами не пользуются ни в Java, ни в Scala - тебе нужны интерфейсы и агрегация.
Да нет, это в скале они просто реализованы в угоду хуяк-хуяк, а не хачкелю.
Про трейты, очевидно, имелось в виду что нельзя менять их если унаследоваться от них.
import scala.language.higherKinds
trait Proxiable {
def source: String
}
trait Proxy[+T <: Proxiable] {
def source: String
}
case class Data(source: String) extends Proxiable
case class Stuff[+P[PP <: Proxiable] <: Proxy[PP]](content: P[Data])
Компилятор выдаёт
sandbox/test.scala:9: error: kinds of the type arguments (Proxy[PP]) do not conform to the expected kinds of the type parameters (type P) in class Stuff.
Proxy[PP]'s type parameters do not match type P's expected parameters:
trait Proxy has one type parameter, but type P has one
case class Stuff[+P[PP <: Proxiable] <: Proxy[PP]](content: P[Data])
^
one error found
Что я делаю не так?
Илита интернетов, чего ты хотел?
Это комменты из прошлого, а я из будущего.
> Ага, ахуенно, только вот рантайм 50мб на мобилках тебя опечалит
Без какого-нибудь proguard максимум 2-2.5 мб выйдет. А с ним и подавно меньше. Не стоит об этом вообще беспокоиться.
Куда большая проблема — система сборки. SBT не подойдёт, поскольку плагин андроида завязан на Gradle очень сильно и сделать что-то сложное просто не получится (всякие сложные работы с манифестами и прочее, что могут использовать сторонние библиотеки). Есть всего один плагин для скалы под андроид, сделанный энтузиастом, но он на него забил походу, так что придётся заморочиться. И со временем плагин может устареть настолько, что с ним нельзя уже будет работать, если никто не возьмётся за его поддержку.
import java.util.Date
trait TDate
trait TT[A1,T1]
trait TTFactory[F,G] {
def create(f: F) : TT[F,G]
def sample: F
}
object Impls {
// If the c1 is declared before c2, it compiles fine
// or if the implicit's result type is specified explicitly
implicit def c2(s: Date)/ : TT[Date, TDate] / = c1.create(s)
implicit val c1 = new TTFactory[Date,TDate] {
def create(v: Date): TT[Date,TDate] = sys.error("")
def sample = new Date
}
}
Что не так с этим кодом?
Можешь на Твиттеры видных деятелей Скалы подписаться для начала, они разную интересную фигню репостят.
Heather Miller няшная чет.
> жду таких дохуя умных на собес
>буду жестко наказывать вас анально, при джунах
вся суть этих ваших собесов
унизить всех вокруг, чтобы возвысится
понабирают в команду самовлюбленных онанистов и вместо работы все нюхают собственный пердеж
Какие цели преследуют разработчики Scala пиля Native ?
>>958909
Доплню ответ - когда компилятор начинает выебываться с выводом типов, можно попытаться разбить список параметров на несколько:
val list = List(-2,-3,-3,-4,-5)
def minBy[A, B: Ordering](list: List[A])(f: A => B): A = list minBy f
println(minBy(list)(x => math.abs(x)))
Все равно ведь указан тип при частичном применении. Я думаю, что анон искал способ с полным выводом типов
Походу. Я тестил на версии 2.11.8
Берёшь шпринг, пишешь энтерпрайзные бобы на скале, в чём проблема?
Я знаю, что есть такая функция если ты заметил, моя реализация немного пизданутая. Всё потому что я не собираюсь это использовать, я просто хочу понять чому нужно явное указание типа в моем примере и почему нельзя без него обойтись
Да кому он нахуй нужен.
У нас на работе есть микро проект на спринге и скале.
Но вообще использовать джавовую инфраструктуру со скалой не имеет смысла, так же как и использовать скалу как джаву++, только дополнительных проблем отгребешь. Либо преезжай полностью, либо не выёбывайся и пиши на джаве.
http://doc.akka.io/docs/akka-http/current/scala/http/introduction.html#using-akka-http
, через консоль билдится нормально, а в идее почему-то подчеркивает красным
> complete(HttpEntity...
> expected: ToResponseMarshallable, actual: HttpEntity.Strict
Решил понять, как оно конвертируется в ToResponseMarshallable, и не смог. Думал там какие-то имплиситы подрублены, через которые конвертируется. Что я пытался сделать:
1) Запустил activator console, импортнул все, что в коде, прописал :implicits, написало
> No implicits have been imported other than those in Predef.
2) В sbt прописал scalacOptions += "-Xlog-implicits", при конпеляции выдало
> [info] .../hello-akka-http/src/main/scala/com/example/WebServer.scala:22: server.this.RoutingLog.fromActorContext is not a valid implicit value for akka.http.scaladsl.server.RoutingLog because:
> [info] hasMatchingSymbol reported error: could not find implicit value for parameter ac: akka.actor.ActorContext
> [info] val bindingFuture = Http().bindAndHandle(route, "localhost", 8080)(materializer)
Как все-таки HttpEntity превращается в ToResponseMarshallable?
В активе только php, delphi/pascal, ruby. Стоит скала того? А то куча статей о миграции на Го (а с го на хаскель)
>в активе только php
И выбираешь ты между лебедем, раком и щукой. Бери Go, остальное ты не осилишь, да и не надо тебе оно.
Причём здесь осилю-неосилю. Мне нужен эффективный инструмент, который поможет обрабатывать большие массивы данных. И не заебусь ли я потом (через год-два) разработчика искать для поддержки?
При том, что ты не осилишь и инструмент этот у тебя в руках окажется неэффективным. Заебешься со всеми тремя вариантами.
Почему что?
Это копия, сохраненная 21 мая 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.