Это копия, сохраненная 16 сентября 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Лучшая книга по Скале: 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
Презентации летнего ScalaDays: https://www.parleys.com/channel/53a7d269e4b0543940d9e535/presentations?sort=views&state=public
Два недавних форка компилятора, один от тайплевела и второй от баттхертнутого:
https://github.com/typelevel/scala (https://github.com/typelevel/scala/wiki/Differences)
https://github.com/paulp/policy
Завтра ищешь в интернете книжку Programming in Scala. Похуй если ничего не поймешь. Затем идешь на scala-lang.org и изучаешь стандартную библиотеку от корки до корки. Потом зубришь, именно, сука, вызубриваешь конвенцию по написанию скала кода - от EPFL естественно, чтобы от зубов отскакивало. Когда напишешь свой первый клон Twittera, по пути изучив основы дискретного и лямбда исчисления, скачиваешь и изучаешь любой асинхронный скала вебсервер, рекомендую Play!. Как переделаешь твиттер клон, чтобы выдавал по крайней мере 5 тысяч запросов в секунду, можешь идти дальше - тебя ждет увлекательный мир хайлоада. Apache Hadoop и Spark, сверхбыстрые асинхронные key-value хранилища, NoSQL и прочие мира открытого исходного кода приблуды. Отсос хиккующих питонистов / просто неудачников типа годаунов или рубифанбоев, сосут по жизни, не заставит себя ждать и уже через пол года ты будешь подворачивать штаны, есть маффины, запивая смузи и любая баба будет течь от упоминания твоей зарплаты.
Конечно, зависит от задачи. Очень многое на Haskell делается красиво и тривиально. Но когда начинается ввод/вывод и обработка ошибок Haskell почти ни чего не дает, по сравнению с распространенными языками.
Вообще думаю все митапы по умолчанию говно.
Говорят Хаскель на порядок проще из-за отсутствия ебучего наследования и костылей JVM это так?
Так а ещё что спрашивают? Хочу сразу как минимум на мидла перакится, на скале ток много для спарка писал.
Часто ли тащат в прод cats/scalaz ? Можно ли жить без них
Ну ахуеть это что получается язык не состоятельный без сторонней билиотеки?
- Нормальная хвостовая рекурсия
- Нормальный вывод типов
- Нормальный синтаксис вызова функций
- Нет разделения на функции/методы
- ???
- Сотни их
Согласен
ну хуй знает
scala
Хочу вкатиться с чего начинать?
Толсто
Представляю баттхёрт олдскульных джавапидоров. Если даже шарпоёбы воняли про ненужность на весь интернет при добавлении подобной фичи.
тред о лучшем языке программирования, мимоподписался
работаю скала-трейни-почтиджун
учу акку, слик, скалатест, всем доволен
В NYC в Июне еду
когда искал на фрилансе, то их оказалось таки есть. Причем больше чем я думал. Но в итоге ушел в стартап и теперь пишу на ноде (
Я юзал akka-http, довольно удобно для написания контроллера. Ну и конечно же akka-actors для написания многопоточных программ
для проверки гипотез все равно быстрее python юзать и либы там заебись. Иногда уже проверенную гипотезу реализуют на Java, чтобы быстрее работало. А так в Scala для ML большого смысла нету
Спасибо, анон, я примерно это и предполагал. Тогда вопрос #2:
со всей этой бигдатой, хадупами, спарками и прочим можно работать как на джаве, так и на скале. Ощутим ли выигрыш по времени при работе на скале, или если знаешь джаву то смысла вкатываться в скалу (для МЛ/ЕТЛ) нет?
я просто быдлоджавер, пишущий e-commerce. Конечно понимаю о существовании различных распределенных нагруженных приложений. Но супер-примеров использования реальных асинхронных штук, кроме мб чата, представить не могу)
Вот такие курсы, например, хотел бы прослушать:
http://mit.spbau.ru/courses/IntroductionToProgrammingLanguages
http://mit.spbau.ru/courses/fp
http://mit.spbau.ru/courses/modelchecking
А матрёшку кто-нить юзает, а?
* Собирается через SBT
Делаешь в идее поиск по действиям (у меня ctrl+shift+a), пишешь sbt, в открывшейся панели жмешь кнопочку с двумя синими стрелочками. Еще когда build.sbt меняешь, вверху файла должна появляться желтая полоса с опциями refresh project, enable auto-import и еще че-то.
Помогло, благодарствую
Не особо важно, главное - че за работа. Большинство джава-вакансий - это какое-нибудь нудное говно типа интернет-магазинов, крудошлепства в банках и т д, но если сможешь найти приличную работу на джаве (например, будет варик в бигдату вкатиться), то устраивайся.
Как-то слишком круто. Наукой я интересуюсь, но боюсь я для нее туповат. Я как-то в бакалавриате пытался придумать новый численный метод для вычисления одной фигни и ничего придумать не смог. Публикаций у меня нет и не предвидится, работаю на обычной энтерпрайз-работе (ну не совсем обычной, конечно, все-таки на скале немного особенные люди пишут). Я хотел поступать в магистратуру, чтобы за 2 года у меня либо появились научные интересы, либо чтоб я понял, что мне это не надо.
Если в дс живешь, то реально. Скала-джуны бывают, хоть это и редкость.
Автор доки в 22 года закончил мфти и уже тимлидом работал. Не представляю, чтобы люди аналогичного уровня успешности на дваче сидели.
Еще автор писал, что хватает людей, которые пришли после работы в сфере и есть даже те, кому за 35
>>152186
Публикации не обязательны. Как я понял - главное в красках в резюме рассписать чем занимался и написать хорошее мотивационное письмо, зачем тебе все это надо. Так же, по словам автора, перед поступлением можно и не знать тему своей будущей диссертации и определится в первый год
На дваче сидят очень успешные люди, но ридонли, это факт. Жалко, что они не пишут.
1) Неоднократно натыкался на заявление что у Scala меньше memory footprint по сравнению с джава, но никто не поясняет за счёт чего это достигается. JVM как я понимаю одна и та же, gc тоже наверное работает одинаково, откуда улучшение? За счёт использования lazy?
2) Моё джавовское мировоззрение напрягает работа с коллекциями и сам факт того, что коллекции иммутабельны, вопрос такой, когда я делаю так:
result :+= el
на случай если проябался с синтаксисом -- хотел показать добавление элемента в конец коллекции
происходит ли полное копирование коллекции? Сложность такой операции по времени и памяти какая будет?
2) списки там связанные, поэтому элемент просто добавляется в конец. да создается новый объект список, но перекопирования старых элементов не происходит
Нет, не происходит. Так как коллекции иммутабельны, общая часть может быть расшарена между всеми "версиями" это коллекции. Представь, например, что у тебя есть иммутабельный список А из 100 элементов, и ты делаешь на его основе 10 новых списков Б_1..Б_10, каждый из которых добавляет один новый элемент к первоначальному списку. У тебя будет 10 списков длины 101, но память будет использована не для 101*10 элементов, а только для 10 новых элементов (по одному от каждого списка Б_1..Б_10), в то время как сто общих элементов будут расшарены между всеми списками: каждый из списков Б_n будет содержать новый элемент и ссылку на список А. Поскольку данные иммутабельны, все эти операции гарантированно корректны.
В реальных структурах данных конкретная стратегия расшаривания зависит от реализации. Обычно структура делится на небольшие чанки, внутри которых изменения копируются (ибо так быстрее), и шарятся уже эти чанки. Сложность по времени обычно логарифмическая, но что-то вроде log_32(n), то есть "effectively constant time". Подробнее о реализации и расшаривании можешь гуглить по запросу "persistent data structures".
>> 1) Неоднократно натыкался на заявление что у Scala меньше memory footprint по сравнению с джава, но никто не поясняет за счёт чего это достигается. JVM как я понимаю одна и та же, gc тоже наверное работает одинаково, откуда улучшение? За счёт использования lazy?
Возможно из-за lazy (если его аквтивно используют) он и меньше, но как по мне, у Scala должен быть больше memory footprint. Во-первых, она не самый эффективный Bytecode даёт, так как мы в нём натягиваем сову на глобус, пытаясь выразить сложные scala концепции в терминах java классов и объектов. Плюс функциональщина достаточно активно срёт в память. Недавно как раз смотрел запись конференции, где чувак показывал как типичный код с фолдом списка на скалке умудряется срать в память со скоростью полгигабайта в секунду. В следствии этого во время фолда просыпается GC и код работает раза в три медленнее, чем его итеративный аналог. А всё сраный боксинг/анбоксинг
>код с фолдом списка на скалке умудряется срать в память со скоростью полгигабайта в секунду
>А всё сраный боксинг/анбоксинг
Пикрелейтед. Открой свое сердце свету трансдьюсеров, брат!
Я тоже в прошлом быдлоджавер. А про многопоточность могу в сказать, что не обязательно руками выделять отдельный поток на обработку каких данных, можно просто засовывать отельные части процессов в фьючи (например дейстия с бд), которые будут рабтать асинхронно, что ОЧЕНЬ актуально, если принимать во внимание, что в современных пк упор делаться на многопроцессорность
>можно просто засовывать отельные части процессов в фьючи
ИЧСХ, для этого даже Скала не нужна, лол.
CompletableFuture, конечно
И акку можно и из джавы юзать, что многие и делают.
>не нужна
нужна, поверь нужна
щас поясю почему
- неизменяемость (иммьютбл переменные и коллекции), очень помогает при работе в многопоточности, легче писать тесты и да и вообще читать код легче
- паттерн матчинг. Ну это просто охуенно, это даже не свитч на максималках, это намного круче
- краткость. Вот за что ругают яву, за то хвалят скалу
- полная поддержка фп. тут даже рассписывать не буду
- строягая типизация при той же краткости, и да типы дженекиков при компиляции не стираются, как в яве)
- охуенные стандартные либы
да и вообще жаба ОЧЕНЬ много потеряла в погоне за совместимостю, после скалы будешь смотреть на неё как на ассеблер после плюсов
> вообще жаба ОЧЕНЬ много потеряла в погоне за совместимостю
Люто удваиваю.
миможабокотлиносэр
>понял что не расписал и половины перимуществ
Я, как-бы, в курсе, лол.
И насчёт минусов тоже.
Я не имел в виду, "скала не нужна", я имел в виду, "скала не нужна, чтобы ...".
Ты, кстати, на работе на чём пишешь, и какого рода проекты? Это я к тому, что скала - вещь в себе, и с джавой (на деле) интегрируется не особо.
Работаю в геймдеве, проект на акке + кэтс, для бд - слик. Также работаю удалённо над проектом-сайтиком, там плей + бутстрап
>>154342
- монады
- неизменяемость
- функции как переменные
- функции высшего порядка
- алгоритмические структуры данных
- нормальная поддержка рекурсии
хотя дать определение фп достаточно сложно, в отличии от ооп
Кресты но это не точно.
Я где-то слышал, что ООП - то что в крестах (из Симулы). В смолтолке - не ООП, а объектное программирование (объектная система в смысле позднего связывния, вот ото вот всё).
>не ООП, а объектное программирование
>не объектно-ориентированное программирование, а объектное программирование
>хотя дать определение фп достаточно сложно, в отличии от ооп
>алгоритмические структуры данных
Алгебраические типы данных.
>неизменяемость
Иммутабельность.
Оттенок смысла немножко другой.
Вообще, не надо ничего переводить на русский.
Нужно использовать терминологию как есть, по возможности.
Читал ли ты книжку Functional Programming in Scala (изд. Manning)?
Это одна из лучших книг по фп вообще, я бы советовал. И задания обязательно прорешать.
Ответы есть, репозиторий на гитхабе.
Есть ещё Functional Programming in Java, тоже Manning.
Тоже охуенная вещь.
Написана в совершенно другом стиле - более практическом.
Автор (намеренно) не употребляет слово "монада" в основной части книги, например, и в послесловии объясняет, почему.
> инхеритенс
Лол.
Наследование.
Это как раз тот случай, когда надо переводить
Насчёт ООП - он тебя просто троллит.
>Это как раз тот случай, когда надо переводить
та да, просто русский мне не родной
>>154508
>Читал ли ты книжку Functional Programming in Scala (изд. Manning)?
к сожелению ещё не читал, уже скачана, но не читал
да и только 3 месяца, как на скале, прочитал только ессеншиал скала, скала для нетерпеливых (на русском) и 200 страниц програминг ин скала одерского
В FP in Scala самой скалы по минимуму.
Т.е. предварительное знание языка желательно, но не обязательно. Ну, это авторы так пишут. На самом деле, конечно, просто с нуля ловить там нечего. Но, в дебри языка они не лезут, только в типы, разве что.
Книга небольшая, язык (английский) - простой. Но, времени на чтение (с решением задач) надо много, может быть, даже и год (судя по тому, что народ пишет). Т.е. надо делать это вдумчиво и не спеша.
"Скала для нетерпеливых" - очень годная книга, перевод я, правда, не видел.
Одерского можно читать вечно, лол.
Народ на форумах пишет, что терпения не хватает.
>ооп - это полиморфизм
Сильное заявление. То есть тайпклассы - это ооп?
>инхеритенс
Сильное заявление. То есть ооп-языки без наследования - не ооп? Алсо, "предпочитайте композицию наследованию", вот это все... ооп-гуру, выходит, тоже не ооп?
>инкапсуляция и абстракция
Точно, анон, ведь без ооп абстракций не бывает! Ой, подожди. Нет, что-то не сходится.
Для объектно-ориентированное программирование - это, внезапно, программирование, ориентированное на объекты. А объекты - это такие штуки, у которых есть внутреннее состояние, которое можно шатать сообщениями.
Но к "ООП" это не имеет никакого отношения. ООП - это просто маркетинговый буллшит без строгих\инженерных оснований, под которым каждый понимает то, что ему хочется.
Если что, это все к
>хотя дать определение фп достаточно сложно, в отличии от ооп
>и да типы дженекиков при компиляции не стираются, как в яве)
Ты что-то попутал. У тебя код собирается в байткод jvm, который о типе дженериков вообще представления не имеет. Ну нет на его уровне такой концепции. Не веришь - javap в помощь
А вообще я это за тебя сделаю, возьмём примитивный дженерик
class S[A](opt: A) {
def get:A = opt
}
Компиляем, юзаем javap -c -v и получаем
public A get();
descriptor: ()Ljava/lang/Object;
flags: ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
0: aload_0
1: getfield #16 // Field opt:Ljava/lang/Object;
4: areturn
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this LS;
LineNumberTable:
line 2: 0
Signature: #28 // ()TA;
public S(A);
descriptor: (Ljava/lang/Object;)V
flags: ACC_PUBLIC
Code:
stack=2, locals=2, args_size=2
0: aload_0
1: aload_1
2: putfield #16 // Field opt:Ljava/lang/Object; <- внимание
5: aload_0
6: invokespecial #23 // Method java/lang/Object."<init>":()V
9: return
LocalVariableTable:
Start Length Slot Name Signature
0 10 0 this LS;
0 10 1 opt Ljava/lang/Object; <- описание нашего поля
LineNumberTable:
line 1: 0
line 5: 5
line 1: 9
Signature: #29 // (TA;)V
MethodParameters:
Name Flags
opt final
Как бы можно заметить, что класс компилируется единожды и вся работа с полем идёт как с Ljava/lang/Object;
Дальше пишем:
val s = new S[Int](3)
val a = s.get
println(a + 3)
Снова javap -c -v и получаем
0: aload_0
1: new #75 // class S
4: dup
5: iconst_3
6: invokestatic #81 // Method scala/runtime/BoxesRunTime.boxToInteger:(I)Ljava/lang/Integer;
9: invokespecial #84 // Method S."<init>":(Ljava/lang/Object;)V
12: putfield #69 // Field s:LS;
15: aload_0
16: aload_0
17: invokevirtual #86 // Method s:()LS;
20: invokevirtual #90 // Method S.get:()Ljava/lang/Object;
23: invokestatic #94 // Method scala/runtime/BoxesRunTime.unboxToInt:(Ljava/lang/Object;)I
26: putfield #72 // Field a:I
29: getstatic #99 // Field scala/Predef$.MODULE$:Lscala/Predef$;
32: aload_0
33: invokevirtual #101 // Method a:()I
36: iconst_3
37: iadd
38: invokestatic #81 // Method scala/runtime/BoxesRunTime.boxToInteger:(I)Ljava/lang/Integer;
41: invokevirtual #104 // Method scala/Predef$.println:(Ljava/lang/Object;)V
44: return
И снова видим, что в байткоде у нас опять сначала int боксится (6:) и засовывается в дженерик как Object(9), а затем из дженерика выдёргивается именно Object (20:) а уже потом анбоксится в int (23:). Как можешь заметить, отдельной реализации дженерика, заточеного под Int тут не генерируется.
Тоже самое и со String
val s = new S[String]("3")
val a = s.get
println(a.length)
0: aload_0
1: new #75 // class S
4: dup
5: ldc #77 // String 3
7: invokespecial #80 // Method S."<init>":(Ljava/lang/Object;)V
10: putfield #69 // Field s:LS;
13: aload_0
14: aload_0
15: invokevirtual #82 // Method s:()LS;
18: invokevirtual #86 // Method S.get:()Ljava/lang/Object;
21: checkcast #88 // class java/lang/String
24: putfield #72 // Field a:Ljava/lang/String;
27: getstatic #93 // Field scala/Predef$.MODULE$:Lscala/Predef$;
30: aload_0
31: invokevirtual #95 // Method a:()Ljava/lang/String;
34: invokevirtual #99 // Method java/lang/String.length:()I
37: invokestatic #105 // Method scala/runtime/BoxesRunTime.boxToInteger:(I)Ljava/lang/Integer;
40: invokevirtual #108 // Method scala/Predef$.println:(Ljava/lang/Object;)V
43: return
Опять суём String как Object, как Object же достаём (18:), потом чекаем, String ли это (21:) и только затем уже работает с этим объектом как со строкой
То есть на уровне байткода, как можно убедиться дженерики в Scala аналогичные дженерикам из Java, тот есть нихуя их там нет, есть лишь объекты оперирующие рефами на Object.
>и да типы дженекиков при компиляции не стираются, как в яве)
Ты что-то попутал. У тебя код собирается в байткод jvm, который о типе дженериков вообще представления не имеет. Ну нет на его уровне такой концепции. Не веришь - javap в помощь
А вообще я это за тебя сделаю, возьмём примитивный дженерик
class S[A](opt: A) {
def get:A = opt
}
Компиляем, юзаем javap -c -v и получаем
public A get();
descriptor: ()Ljava/lang/Object;
flags: ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
0: aload_0
1: getfield #16 // Field opt:Ljava/lang/Object;
4: areturn
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this LS;
LineNumberTable:
line 2: 0
Signature: #28 // ()TA;
public S(A);
descriptor: (Ljava/lang/Object;)V
flags: ACC_PUBLIC
Code:
stack=2, locals=2, args_size=2
0: aload_0
1: aload_1
2: putfield #16 // Field opt:Ljava/lang/Object; <- внимание
5: aload_0
6: invokespecial #23 // Method java/lang/Object."<init>":()V
9: return
LocalVariableTable:
Start Length Slot Name Signature
0 10 0 this LS;
0 10 1 opt Ljava/lang/Object; <- описание нашего поля
LineNumberTable:
line 1: 0
line 5: 5
line 1: 9
Signature: #29 // (TA;)V
MethodParameters:
Name Flags
opt final
Как бы можно заметить, что класс компилируется единожды и вся работа с полем идёт как с Ljava/lang/Object;
Дальше пишем:
val s = new S[Int](3)
val a = s.get
println(a + 3)
Снова javap -c -v и получаем
0: aload_0
1: new #75 // class S
4: dup
5: iconst_3
6: invokestatic #81 // Method scala/runtime/BoxesRunTime.boxToInteger:(I)Ljava/lang/Integer;
9: invokespecial #84 // Method S."<init>":(Ljava/lang/Object;)V
12: putfield #69 // Field s:LS;
15: aload_0
16: aload_0
17: invokevirtual #86 // Method s:()LS;
20: invokevirtual #90 // Method S.get:()Ljava/lang/Object;
23: invokestatic #94 // Method scala/runtime/BoxesRunTime.unboxToInt:(Ljava/lang/Object;)I
26: putfield #72 // Field a:I
29: getstatic #99 // Field scala/Predef$.MODULE$:Lscala/Predef$;
32: aload_0
33: invokevirtual #101 // Method a:()I
36: iconst_3
37: iadd
38: invokestatic #81 // Method scala/runtime/BoxesRunTime.boxToInteger:(I)Ljava/lang/Integer;
41: invokevirtual #104 // Method scala/Predef$.println:(Ljava/lang/Object;)V
44: return
И снова видим, что в байткоде у нас опять сначала int боксится (6:) и засовывается в дженерик как Object(9), а затем из дженерика выдёргивается именно Object (20:) а уже потом анбоксится в int (23:). Как можешь заметить, отдельной реализации дженерика, заточеного под Int тут не генерируется.
Тоже самое и со String
val s = new S[String]("3")
val a = s.get
println(a.length)
0: aload_0
1: new #75 // class S
4: dup
5: ldc #77 // String 3
7: invokespecial #80 // Method S."<init>":(Ljava/lang/Object;)V
10: putfield #69 // Field s:LS;
13: aload_0
14: aload_0
15: invokevirtual #82 // Method s:()LS;
18: invokevirtual #86 // Method S.get:()Ljava/lang/Object;
21: checkcast #88 // class java/lang/String
24: putfield #72 // Field a:Ljava/lang/String;
27: getstatic #93 // Field scala/Predef$.MODULE$:Lscala/Predef$;
30: aload_0
31: invokevirtual #95 // Method a:()Ljava/lang/String;
34: invokevirtual #99 // Method java/lang/String.length:()I
37: invokestatic #105 // Method scala/runtime/BoxesRunTime.boxToInteger:(I)Ljava/lang/Integer;
40: invokevirtual #108 // Method scala/Predef$.println:(Ljava/lang/Object;)V
43: return
Опять суём String как Object, как Object же достаём (18:), потом чекаем, String ли это (21:) и только затем уже работает с этим объектом как со строкой
То есть на уровне байткода, как можно убедиться дженерики в Scala аналогичные дженерикам из Java, тот есть нихуя их там нет, есть лишь объекты оперирующие рефами на Object.
Ну и зачем ты это высрал сюда?
Ты, блять, кончай тут умничать.
Здесь тебе не тут.
В скале используется специальный костыль, который сохраняет информацию о типах, только и всего.
Там целое кино с рефлексией в скале, заебёшься делать.
Но, тем не менее, информация о типах - сохраняется.
Ещё раз, для особо одарённых - она не "не стирается",
она специально сохраняется, в специальном объекте, и обеспечивает это компилятор скалы, если его хорошо попросить
>Scala
Ненужное говно без задач, язык для быдла, пародия на ФП.
>Haskell
Топовый язык для элиты, подходит для абсолютно любых задач, тру ФП.
>>В скале используется специальный костыль, который сохраняет информацию о типах, только и всего.
>>Там целое кино с рефлексией в скале, заебёшься делать. Но, тем не менее, информация о типах - сохраняется.
Как бы фича ради фичи. В рантайме это никак не помогает, так как JVM похуй. JITу она не поможет сгенерировать более эффективный код (а она могла бы помочь, банально со старта девиртуализовать некоторые вызовы, да удалить лишние кастчеки). Да блин, даже сама scalac всё равно генерирует код с кастчеками и прочим дерьмом. При разбработке же нормальные IDE сами прекрасно могут вывести все типы и проверить их соответствие.
>>Там целое кино с рефлексией в скале, заебёшься делать.
Как бы этим в нормальной разработке особо никто заниматься не будет. Нужно это всё трём с половиной теоретикам. Да кукаретикам, чтобы список "достоинств" скалы раздувать.
Информацию о дженериках в полях, аргументах и результатов методов можно и в джава коде достать. А вот имея на руках объект класса с дженериком узнать его дженерик нельзя. Покажи мне код, который сделает это на скале, хотя бы с костылями.
>При разбработке же нормальные IDE сами прекрасно могут вывести все типы и проверить их соответствие.
Это делает компилятор.
То, что мы тут обсуждаем нужно _только_ для рефлексии.
>>154917
Можно.
https://medium.com/@sinisalouc/overcoming-type-erasure-in-scala-8f2422070d20
https://docs.scala-lang.org/overviews/reflection/typetags-manifests.html
Перечитай там ещё раз. Написать метод, который принимает List[Any] и возвращает то, что там на самом деле - нельзя. А дженерики классов, полей, аргументов и результатов функций так же доступны в джаве.
>List[Any]
>то, что там на самом деле
Там Any, блядь, или ты чего-то другого хотел?
Ты вообще как-то не так всё это понимаешь (судя по твоему пассажу про IDE).
Извини, у меня сегодня нет настроения нести свет просвещения в массы.
Погоди, а если я в метод передал List[Huita], он тоже внезапно Any?
Я имел в виду, что лисп вообще и кложура в частности, не подходит на роль промышленного языка общего назначения.
Нормальному человеку просто тяжело писать на голом AST.
И, особенно, читать.
Плюс вот эти вот тучи функций на каждый пук - их заебёшься запоминать. Плюс динамика ещё. И макросы.
Ну и так далее. Очень большой оверхед с очень скромным результатом.
Короче - это просто нишевый DSL.
Скала - тоже та ещё хуета, из говна и палок, между нами говоря.
Я выучил её уже давно, и до вполне приличного уровня.
Но, в реале так и не применил ни разу.
Это вещь в себе. А у меня нет таких проектов.
И это очень сложный язык - слишком много языка в языке.
Это плохо для промышленной разработки.
Умственные способности разработчиков тут ни при чём,
это другое.
Вот, просто навскидку:
https://stackoverflow.com/questions/8000903/what-are-all-the-uses-of-an-underscore-in-scala
https://www.slideshare.net/normation/scala-dreaded
И это ещё довольно простая тема, с которой у меня лично нет никаких проблем.
Такие дела.
Я имел в виду, что лисп вообще и кложура в частности, не подходит на роль промышленного языка общего назначения.
Нормальному человеку просто тяжело писать на голом AST.
И, особенно, читать.
Плюс вот эти вот тучи функций на каждый пук - их заебёшься запоминать. Плюс динамика ещё. И макросы.
Ну и так далее. Очень большой оверхед с очень скромным результатом.
Короче - это просто нишевый DSL.
Скала - тоже та ещё хуета, из говна и палок, между нами говоря.
Я выучил её уже давно, и до вполне приличного уровня.
Но, в реале так и не применил ни разу.
Это вещь в себе. А у меня нет таких проектов.
И это очень сложный язык - слишком много языка в языке.
Это плохо для промышленной разработки.
Умственные способности разработчиков тут ни при чём,
это другое.
Вот, просто навскидку:
https://stackoverflow.com/questions/8000903/what-are-all-the-uses-of-an-underscore-in-scala
https://www.slideshare.net/normation/scala-dreaded
И это ещё довольно простая тема, с которой у меня лично нет никаких проблем.
Такие дела.
Анон, извини конечно, но ты совершенно не разбираешься в вещах, о которых пытаешься рассуждать. В частности, ты либо не понимаешь значения, либо просто некорректно используешь слова "AST" и "DSL". Ну, то есть продолжать обсуждение этой темы на данный момент смысла явно нет.
Юноша, если вам хочется приключений - это нормально.
Пользуйтесь кложурой и скалой, хуже вам не станет.
Не догоните, так согреетесь.
Я же говорил о промышленной разработке. Когда программа живёт в несколько раз дольше железа, например.
Ну, и полезно помнить, что по этому поводу сказал Дейкстра:
The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague.
Это именно то, что никак не может взять в толк модная хипстота, хлебающая смузи в кофешопах.
Анон, повторю еще раз, что из описанных выше высказываний следует твоя некомпетентность в обсуждаемых вопросах, а потому я не вижу смысла продолжать о чем-то говорить - мне это неинтересно. Твой пост ко мне не имеет никакого отношения, а "юношами" ты лучше пацанов у себя во дворе называй.
Дружище, расслабься, всё нормально.
И всё в порядке с Clojure, на самом деле.
Я довольно давно ею занимаюсь (для развлечения). И довольно неплохо знаю.
Но, применить в реальных проектах (за деньги) так и не получилось. И это меня огорчает.
> Я выучил её уже давно, и до вполне приличного уровня.
> Но, в реале так и не применил ни разу.
Чет проиграл. Не взяли на работу на скале и теперь рассказываешь, что скала не нужна, найс.
> И это очень сложный язык
С точки зрения долбоебов, строгающих сайты, - безусловно. С точки зрения нормальных людей, которые умеют читать книги и документацию, а не только копировать портянки со stackoverflow, - крайне удобный и понятный язык.
>>155129
> he avoids clever tricks like the plague
Напомню, что тайпклассы, монады, зависимые типы и другие концепции, которые используются в скале, но которых нет во многих других языках - это не tricks, а общепринятые концепции, описанные в куче книг и статей. Если для тебя это tricks, то я тебе советую в универе отучиться, а потом постить в треде для нормальных людей.
>Не взяли на работу на скале
Всё немножко не так.
В данный момент я сам обеспечиваю себя работой.
И сам решаю, что и на чём будет написано.
В процессе принятия решений - принимаю в расчёт соображения типа тех, которые высказывал старина Эджер.
Как показывает практика - не зря.
На самом деле, довольно много людей получает удовольствие от программирования на скале, но, при этом, не использует её в продакшн.
И да, я бы хотел, чтобы меня "взяли на работу" писать на скале.
Но, не представляю, кто бы это мог быть.
> И да, я бы хотел, чтобы меня "взяли на работу" писать на скале.
> Но, не представляю, кто бы это мог быть.
В дс переезжай.
И идти в тинькофф писать крудодрисню для сайта? Охуенное предложение.
Ну ладно. Просто тогда странно слышать от тебя (factually incorrect) фразы вроде "кложа - это дсл", ну а как выглядит аст можно посмотреть, например, тут: https://github.com/clojure/tools.analyzer
Вдвойне странно слышать рассуждения о синтаксисе в контексте "промышленной разработки". На срок завершения проекта и на количество багов никак не влияет то, пишешь ты f x, f(x) или (f x). Это как раз и есть то самое хипстерство и смузихлебство - "нинравица!1". Подобные вещи нужно оценивать прагматично (объективные профиты дает? дает), а не с точки зрения нравится\не нравится. Да и привыкает к любому из этих вариантов человек максимум за 2 вечера.
Далее, что там было... Тучи функций - опять же, это какая-то хипстота. Если человек собирается писать на языкнейм, то он должен не изобретать велосипеды на каждый чих, а разобраться в стандартной библиотеке. В случае кложи это означает, что ему нужно выучить все функции в core. Просто берешь и учишь, тут нет ничего сложного (на худой конец - под рукой всегда есть читшит). В случае с джавой или скалой ему пришлось бы делать ровно то же самое - только эти функции были бы раскиданы по множеству условных "неймспейсов".
Нытье про динамику в 2018 году вообще странно слышать. Статическая типизация необходима в проектах-монолитах хотя тот же линукс вон как-то пишут на void* - и ничего; но там хуман ресоурсы, конечно, специфические, а у нас тут, типа, облака, сети, микросервисы, привет.
Ну и не лишним, наверное, будет упомянуть, что "лисп вообще" как бы и был в течение некоторого немаленького промежутка времени одним из основных языков "промышленного программирования общего назначения".
Короче, я полностью согласен с утверждением "Кложура - язык не для всех".
Но не по тем причинам, по каким ты думаешь.
>factually incorrect
Не нужно всё понимать тупо буквально.
Есть метафоры, гиперболы, аллегории и прочая хуйня.
>AST
Ну, концептуально, синтаксис лиспа - это и есть голое AST. Потому, что синтаксиса, как такового, просто нет.
То, что на самом деле это не совсем так, это ничего не меняет в том смысле, в каком я употребил это сравнение.
>DSL
Написание любой программы на лиспе сводится, по сути, к написанию DSL для конкретной задачи.
Или ты будешь с этим спорить?
Ну так вот, лисп - homoiconic.
DSL для написания DSL, лол.
>метафоры, гиперболы, аллегории
>концептуально
>на самом деле это не совсем так
Угумс.
>синтаксис лиспа - это и есть голое AST.
То есть (f (g x) (h y)) - аст, а f(g(x) h(y)) - уже не аст? Занятненько.
>Потому, что синтаксиса, как такового, просто нет.
Есть. Бнф тебе написать или сам напишешь? Про ридер макросы дать почитать? Вообще, весьма надоела уже эта байка, которую бездумно повторяют, совершенно не задумываясь о значении того, что говорят. К вопросу о хипстерах-смузихлебах, угу.
>То, что на самом деле это не совсем так, это ничего не меняет
Так может тогда попросту не стоит употреблять такие хуевые сравнения, тем более на техническом хоть и для аниме-девочек форуме?
>Написание любой программы на лиспе сводится, по сути, к написанию DSL для конкретной задачи.
Ерунда. Даже хуже: это утверждение не несет вообще никакого смысла. Опять же, на язык просятся хипстеры-смузихлебы.
>DSL для написания DSL
A.k.a. "язык программирования общего назначения".
Все-таки зря ответил.
Кстати, подтверждаю. После Идриса впечатления от Скалы - полная инфернальная дрисня. если это кого-то здесь вообще интересует
В России есть по ней работа? А фриланс?
что натолкнуло перейти с руби на скалу?
Мимоджавер, очень сожалею, что пишу веб на компилирцемом языке
Ты и тут уже со своими фантазиями отметился, лол.
Может ты как-то не так компилируешь?
Вот я пишу энтерпрайзный "веб" на джаве, компиляции даже не замечаю. А выгоды от статической типизации и всего, что с этим связано - очень даже. А также - охуенные выгоды от всей инфраструктуры java.
Если мне нужна динамика - использую Groovy. Раньше использовал JRuby, но отказался от него разлюбил, лол.
Если _суровая_ статическая типизация тебя не пугает, то давай.
Скала - это статический язык, годно имитирующий динамику.
Но, чтобы понимать, как это всё работает, а не просто тупо писать магический код, придётся постараться.
>>157387
>с рубей на кложу вроде логичнее перекатываться
Если ты хипстер, то да.
Задрочив руби до потери пульса, они перекинулись на кложуру.
А так - руби и скала - довольно похожи (на уровне запаха кода или типа того).
И некоторые серьёзные руби-бобры таки перекатились на скалу.
Например, Дэвид Поллак, автор книги Beginning Scala.
Он в начале книги очень живописно описывает свой баттхёрт в начале изучения скалы.
> Если ты хипстер, то да.
> Задрочив руби до потери пульса, они перекинулись на кложуру.
Свят-свят, все бородатые смузипидоры на гироскутерах съебали в ноду, в кложе они нахуй даром никому не нужны.
>Если ты хипстер, то да.
Как там в 2012?
>А так - руби и скала - довольно похожи
Ну, учитывая, что руби - это лишп без скобочек и по-японски, лол... нутыпонел. Хотя так-то это про любой оопфп гибрид сказать можно.
>И некоторые серьёзные руби-бобры таки перекатились на скалу.
Я и не спорю. Скала - тоже хорошо. Но СЛОЖНА и НЕНУЖНА!!1
Да ну не то чтобы я конкретно перекатываюсь, даже наоборот. Просто решил пополнить слегка коллекцию скиллов чтобы потом на собесах выебоны кидать
Так благотворно на него подействовал живительный скала-баттхёрт.
>Matz: Ruby is a language designed in the following steps: take a simple lisp language (like one prior to CL). remove macros, s-expression. add simple object system (much simpler than CLOS). add blocks, inspired by higher order functions. * add methods found in Smalltalk.
Ну, это уже к Матцу, не ко мне.
я и еще парочка таких же дебилов хотя бы джава тред расшевелили, а то последние месяца три он в тотальном упадке
+1
>Собираюсь вкатиться в Scala и Clojure
>Посоветуйте какой-нибудь курс по Java
Ну охуеть.
Я так и не понял: тебе нужно про устройство jvm что-то? Или ты хочешь сначала вкатиться в тырпрайс на джаве? Или тебе просто сертификаты нужны?
Сертификаты у оракла, гугли. В джаву через thinking in java и доки можно вкатываться.
> Я так и не понял: тебе нужно про устройство jvm что-то
Ну смотри, я на жабе сейчас даже хелло ворлд не смогу написать, но хочу писать на скале. Мне же ведь нужно хотя бы примерно понимать, на чём скала построена, как в случае чего тюнить jvm, чё у неё вообще внутри и так далее.
> Или ты хочешь сначала вкатиться в тырпрайс на джаве? Или тебе просто сертификаты нужны?
тырпрайс и сертификаты (а я имел в виду что-то вроде курсеровских) - это на крайний случай, чтобы можно было на апвёрке с раджешами конкурировать.
> В джаву через thinking in java и доки можно вкатываться.
Ок заебись, уже хорошо, но хотелось бы именно курс с заданиями.
>курс с заданиями.
Ну, на курсере вроде алгоритмы от принстона на джаве, но это курс про алгоритмы, а не про джаву, разумеется. Но тащем-то почему бы и нет. Там же проходи интро ту фанкшнл програмин от одерски.
> Ну, на курсере вроде алгоритмы от принстона на джаве, но это курс про алгоритмы, а не про джаву, разумеется.
Ок, а чисто про джаву и её экосистему есть?
Я не уверен, что среди джавистов особенно популярны видосики. Читай документацию.
> Мне же ведь нужно хотя бы примерно понимать, на чём скала построена, как в случае чего тюнить jvm, чё у неё вообще внутри и так далее.
Можно почитать jvm specifiсation, еще на всяких хабрах и реддитах периодически постят что-нибудь про то, как тюнить жвм, на чем писать бенчмарки и т. д.
Вообще начинай сразу со скалы, джаву выучишь в процессе, там учить нехуй (если говорить о самом языке, а не о jvm).
В экосистеме джавы очень много древнего индусского говна типа сервлетов, спрингов, и т д, где у авторов библиотек вместо мозга AbstractSingletonProxyFactoryBean. Тебя из экосистемы джавы должны интересовать только java se и jvm. Туторилы по классам из java se есть на сайте оракла + сорцы этих классов читай, полезное занятие.
>> Мне же ведь нужно хотя бы примерно понимать, на чём скала построена, как в случае чего тюнить jvm, чё у неё вообще внутри и так далее.
Если любишь видосики то:
https://www.youtube.com/watch?v=1XV88X3ugiM
https://www.youtube.com/watch?v=-fcj6EL9rc4
https://www.youtube.com/watch?v=iGRfyhE02lA
https://www.youtube.com/watch?v=iB2N8aqwtxc
https://www.youtube.com/watch?v=oYu3HuIYDhI
Если сразу хочется чего по-жёстче, то
https://docs.oracle.com/javase/specs/jvms/se10/jvms10.pdf
> Ок заебись, уже хорошо, но хотелось бы именно курс с заданиями.
hexlet.io (я лично не пробовал но вдруг тебе надо НА РУССКОМ)
udacity
да там платно, но более эффективное обучние. ты гораздо больше денег-времени потратишь читая книжки.
> вдруг тебе надо НА РУССКОМ
Не, мне как раз-таки надо наоборот.
> да там платно, но более эффективное обучние. ты гораздо больше денег-времени потратишь читая книжки.
Согласен. Скажи, какой конкретно курс по яве порекомендуешь для продолжающего? Как-то странно мне будет после нескольких лет зарабатывания денег питоном снова слушать объяснения того, что такое условия и for лупы.
https://www.youtube.com/watch?v=fLsTPHDWoF0
Нет, просто дородная рязанская бабища. Видел ее в видосиках с кложетусовок.
Там же написано:
>Born into an aristocratic Russian-German family
>aristocratic Russian-German family
А Рязань - нет.
autism intensifies
загрузить инфу с нескольких тысяч пронумерованных АПИ эндпоинтов (api/page/1; api/page/2 и т.д) и положить в файл в порядке нумерации, при этом (по возмжности) не держа в памяти все ответы АПИ.
Основная проблема, заключается в том, что мне нужно загружать данные параллельно, но обрабатывать их я хочу последовательно.
Я создаю стек с Future и потом по мере готовности заливаю резалты в файл, т.е как только future result оказывается в файле, future убирается со стека и может быть очищено gc. Тем не менее, меня не покидает мысль что это какой-то не Scala-way, как минимум потому что я использую mutable data structures. Я пытался приладить к этой задаче стримы, но что-то каждый раз получается немного не то. Как бы решал эту задачу функциональщик, в какую сторону смотреть?
А как ты собираешься эффективно класть в файл твои респонсы в порядке нумерации, если в память они не влазят, а очередность их прихода не определена?
Параллельно запрашивай ендпоинты и сри данные в отдельную БД, которая нормально дружит с конкурентностью (то есть всякие sqlite мимо). Обязательно индексируй номер страницы api или по какому порядку ты захочешь записывать данные, чтобы при селектах не делать фулл скан каждый раз.
Как закончишь выгрузку в БД - выгружай оттуда данные в нужном тебе порядке и записывай куда надо хоть последовательно, хоть на голове.
Складывай в какую-нибудь легкую базу, а оттуда по крону сливай в упорядоченный файлик, например. У тебя же нет жестких ограничений по времени?
Можно загружать данные батчами - паралелльно делать 50 запросов, по заполнению батча, сортировать его в памяти, писать в файл и поехали со следующим батчем.
Ну тебе же все равно придется потом джойнить и сортировать батчи в отдельном процессе.
Зачем? То, что я предложил - работа для одного функционального чейна.
> джойнить и сортировать батчи в отдельном процессе
Конкурентно заполняется буфер энного размера. По заполнению буффера, буфер сортируется и высирается в файл. Повторить до окончания.
Допустим, тебе пришли данные: 42, 0, 1, в таком порядке. В какое место в итоговом файле ты запишешь 42, когда получишь его?
Возможно, я овергенерализирую задачу, и тебе на самом деле параллелизация нужна только внутри чанков, а сами чанки линейные - так?
>Допустим, тебе пришли данные: 42, 0, 1, в таком порядке. В какое место в итоговом файле ты запишешь 42, когда получишь его?
Сяду на хуи, мать на колени посажу.
> Конкурентно заполняется буфер энного размера. По заполнению буффера, буфер сортируется и высирается в файл.
Обычно просят опыт и на других языках, если не получается, то просись на скалишный проект на работе, только будь готов, что твой прежний опыт работы на других языках мало чего значит
>олучается, то просись на скалишный проект на работе, только будь готов, что твой прежний опыт работы на других языках мало чего значит
Я бы с радостью попросился на скалишный проект на работе, да только у нас скала не используется вообще, за ненадобностью
Я хз как там у вас принято, но в Минске практически все вакансии требуют 1-3 года опыта и отличное знание огромного стека технологий, вот только на проверку оказывается что готовы и собаку взять. Рассылай просто резюме туда-сюда да и всё. Валить вникуда не очень идея с точки зрения карьеры, коммерческого опыта от сидения на жопе дома точно не появится.
>>137321 (OP)
Вопрос по скале к мудрым анонам:
Осваиваю play framework (2) с ebeans, в попытках избежать тонн боилерплейта хочу написать единственный CRUD контроллер, который будет работать со всеми моими моделями:
> class GeneralCRUDController[T <: Model with HasId]
Дальше делаю вот так:
> def delete(id: Long) = Action {implicit request: Request[AnyContent] =>
> val c = Ebean.delete(classOf[T], id)
> Ok("success")
> }
и получаю
> class type required but T found.
да, я не оч понимаю дженерики
нагуглил что это можно обойти через ClassTag и runtimeClass,
но тогда используется рефлекшен и теряется смысл типизации, возрастает сложность дебага, скорее всего снижается скорость работы, да и просто я не люблю рефлекшен
Как мне выходить из этой ситуации? Может мой подход изначально неверен?
Доп. вопрос, как я понимаю в play framework 1 был коробочный CRUD. Во втором коробочного CRUD-а нету. Есть ли какая-нибудь адекватная замена, чтобы прямо прописал 2-3 конфига по мануалу и всё работает как по-волшебству?
Я хз как там у вас принято, но в Минске практически все вакансии требуют 1-3 года опыта и отличное знание огромного стека технологий, вот только на проверку оказывается что готовы и собаку взять. Рассылай просто резюме туда-сюда да и всё. Валить вникуда не очень идея с точки зрения карьеры, коммерческого опыта от сидения на жопе дома точно не появится.
>>137321 (OP)
Вопрос по скале к мудрым анонам:
Осваиваю play framework (2) с ebeans, в попытках избежать тонн боилерплейта хочу написать единственный CRUD контроллер, который будет работать со всеми моими моделями:
> class GeneralCRUDController[T <: Model with HasId]
Дальше делаю вот так:
> def delete(id: Long) = Action {implicit request: Request[AnyContent] =>
> val c = Ebean.delete(classOf[T], id)
> Ok("success")
> }
и получаю
> class type required but T found.
да, я не оч понимаю дженерики
нагуглил что это можно обойти через ClassTag и runtimeClass,
но тогда используется рефлекшен и теряется смысл типизации, возрастает сложность дебага, скорее всего снижается скорость работы, да и просто я не люблю рефлекшен
Как мне выходить из этой ситуации? Может мой подход изначально неверен?
Доп. вопрос, как я понимаю в play framework 1 был коробочный CRUD. Во втором коробочного CRUD-а нету. Есть ли какая-нибудь адекватная замена, чтобы прямо прописал 2-3 конфига по мануалу и всё работает как по-волшебству?
Не понял, а как ты без рефлекшна собрался диспатчиться по неизвестному типу объекта? Или как этот Ebean.delete(classOf[T] ...) должен работать?
мимо
Пилишь что-то на скале для себя, в резюме пишешь, что использовал скалу на работе, что ты как маленький?
F-bound polymorphism спасает, ебанько. Не надо кукарекать тут про type erasure
Алсо, их сайт документации (я так понимаю, он на этом фреймворке и сделан) у меня безбожно тормозит. Каждый клик по любому линку вызывает раздражающее мигание всей страницы.
Нет.
>reinvented
на самом деле нет, там значительные отличия. гвт\ваадин\зкос это генерелки жс кода.
королев же отправляет на сервер только дифы(то что изменилось) и жс он не генерит из-за чего клиент получается очень маленьким по объему + т.к. нет никаких скрытых полей мы получаем безопасность из коробки(никто не выгрузит в жсоне твои данные просто потому что лень править дто)
https://fomkin.org/ этот? у меня он хорошо работает, но из-за специфики работы этой либы такое может быть, попробуй померить пинг до него, думаю если не больше 100 должно быть ок всё.
Стоп, я был неправ и полную хуйню сказал, извиняюсь.
Я кликнул на их апидоки и даже не посмотрел, что они на жавадок.ио, так что disregard that. Алсо, если это не очередной гвт, тогда интересно. Завтра читну их пдфку, если не лень - распиши пока вкратце, как именно оно работает. Ты имеешь в виду, что жс-код у них фиксированный, с сервера прилетает только наполнение, по которому он генерит страницу? Я подобный подход видел у кложурцов, там один чувак именно так генерил спа из описания на edn edn - это более лучший жсон, если что и хуков в логику. Но у него эта шняга была внутренней и не опенсорсной, как я понял. Если тут та же идея - это прикольно.
>>193001
ну да там своя либа для генрации хтмл из скала-кода + при каком либо запросе изменений с фронта от сервера уходит не вся страничка, а только то, что поменялось. Всё это общается через вебсокеты.
Незнаю почему ты так категоричен, там в эту простыню достаточно много функционала запихано(и никто не мешает делать универсальными и переиспользывать компоненты).
Попробуй представить каким был бы код если делать все это классическим крудапи + вебпетушение с жсом.
Ну вот пример из доков (на Java):
> Ebean.delete(Order.class, 12);
Т.е передаётся класс и айдишник. Я пытаюсь сделать тоже самое, но на скале и с дженериком, т.к не хочу писать много бойлерплейта. Моя попытка:
> class A[T] ....
> def foo(id: Int) = { ...
> Ebean.delete(classOf[T], id)
Рефлекшен разумеется есть, но он, как я понимаю, спрятан внутри Ebean, что меня целиком устраивает. В своём коде я рефлекшена иметь не хочу, а в библиотечном не против.
>>189462
И всё же, как правильно крудошлёпить в этой вашей скале (желательно на Play 2)?
Чтобы создать подобие админки мне нужно на каждую таблицу из БД делать по дао и контроллеру? Это выглядит как-то очень уж монструозно.
Если тебе нужно где-то взять класс, чтобы засунуть в такую либу, ты уже так и так связался с рефлекшном, расслабься. Чем тебя не устраивают тайптеги или что там у вас в вашей скале? Такой дженерик можно и на обычной джаве разрулить, через подклассы с указанием конкретного типа.
мимоджавист
Во-во, да еще и считать не умеет.
Расскажите аноны, как вкатывались? Что читали, что кодили?
Я вкатывался с жабы, читал хортсмана, но чтобы норм кодить очень желательно прочитать essential scala + programming in scala одерского. Ну а так мне немного повезло, нашёл вакансию, где брали без опыта работы на скале. На работе можно сказать и научился
Хуи сосешь?
Не рекомендую с курсов начинать. Пиши как на better java первое время, а дальше само зайдёт
Ну и https://gist.github.com/d1egoaz/2180cbbf7d373a0c5575f9a62466e5e1
под better java ты имеешь в виду без функциональщины?
>https://gist.github.com/d1egoaz/2180cbbf7d373a0c5575f9a62466e5e1
Хорош, спасибо
Нахуя?
Отвечаю не за 5 лет, а за 5 месяцев:
return -- да, удобно использовать как выход из функции если функция дохера большая.
while -- нет, но он и в других языках на которых доводилось писать не очень уж часто используется, гораздо реже for var -- да, иногда удобнее сделать мутабельную переменную (что возможно связано с тем, что у меня на скале небольшой опыт, может со временем пройдёт), а ещё сталкивался с Ebean ORM, которая требует объявлять поля как var.
Более интересный вопрос подобного плана: зачем нужна конструкция for (seq) yield {action} ? Разве её нельзя во всех случаях заменить на seq.map(action), или seq.filter(...).map(action)?
Перехватывая эстафетную палочку, задаю свой вопрос:
Кто-нибудь пробовал Scala.js? Как ощущения?
Пилю свой прожект, очень не хочу писать фронт на жабаскрипте, поковырял Scala.js, выглядит вроде норм, но в туториале они предлагают складывать html файлы в корневую папку и делать в них дебильные пути к скриптам, вроде: ../target/scala/... Класть html в target тоже по смыслу не подходит. Эта ситуация мне совсем не нравится. Как потом эту чушь двигать на продакшен? Руками копировать файлы куда-то? Запихивать выборочно директории в докер контейнер?
Не слышал, чтобы кто-то вообще использовал scala.js в продакшне. Если хочешь нормальный язык на клиенте - бери кложескрипт (или ризон, если хочется чуть больше приключений).
>складывать html файлы в корневую папку и делать в них дебильные пути к скриптам, вроде: ../target/scala/...
А чо, ты в сбт не можешь прописать какой тебе нужно путь для жс-выхлопа компайлера? Не вижу ничего криминального в том, чтобы хуярить дев-билды в public/js (на прод-билде оно все подтирается). Ну то есть типа КОНЦЕПТУАЛЬНО более лучше было бы держать в public только условный app.js, в который в зависимости от билда либо вхуяриваются пути к дев-коду в ../target/, либо пихается минимизированный прод-код, но на практике-то никакой разницы нет, так что не вижу смысла об этом задумываться вообще.
мимо
Очень редко.
var - пару раз в тестах для инициализации состояния, иногда в акторах и в итерторе-адапторе для какой-то джавовой структуры.
while - тоже для интеропа с джавой, стрим там прочитать и все такое.
return - раньше использовал как guard, то есть для кода вида if (cond) return value в начале функции, сейчас перешел на if/else if - проще скаластайлом проверять.
>>211891
>зачем нужна конструкция for (seq) yield {action} ? Разве её нельзя во всех случаях заменить на seq.map(action), или seq.filter(...).map(action)?
Заменить можно, но for-comprehensions нужны в основном для соединения двух и более монадических операций (без них пришлось бы писть портянки вложенных flatMap-ов) и было бы странно не иметь for для одной операции имея его для нескольких. Я сам всегда использую map/filter/foreach вместо for если получается и всегда for нужно писaть flatMap два раза.
>Кто-нибудь пробовал Scala.js? Как ощущения?
Пробовал, написал на scalajs-react простой UI для системы мониторинга. До этого (и после) никогда не работал с фронтендом, так что сравнивать мне не с чем. Могу только сказать что на Scala.js можно писать сложные приложения и есть даже какая-никакая экосистема.
Проблемы с путями наверняка можно пофиксить правильными настройками sbt.
>return -- да, удобно использовать как выход из функции если функция дохера большая.
я хоть на скале всего полгода, но если тебе нужен return, значит ты неправильно построил свою ф-цию
У меня лично на работе строго функциональный стиль, ни одного вара, вайла, ретёрна за всю работу
на java же платят больше, а гемора меньше, да.
> но если тебе нужен return
Мимокрокодил
Вы что ли аргументы по ссылку передаете или как? Почему return нельзя?
Он наверное имел в виду, что ретурн прерывает исполнение функции, из-за чего у нее возникает больше одного execution path'а или как это правильно назвать, что не очень-то функционально и обычно использовалось в языках с разделением на statements и expressions.
Мне кажется, функциональщики страдают фанатизмом, как, например, рьяные фанаты ООП. Усложнять код ради концепции - гиболое дело.
Эм, так суть описанного как раз в том, чтобы НЕ усложнять код множественными точками возврата.
Блять, я подумал, а вы правы.
Да, я перекатился в джавку с нулём опыта на яве и вообще ничего не зная про. JVM
Тьфу ты, в скалку
Ну подожди. Как это "любая макака знает"? Нужно хорошо учить, как в Яндексе.
Ты про это сахарное говнище? Хз, даже ява лучше.
Но ведь гоудауны просто унизят и обоссут скалиста, как дело коснётся конкаренси и распределённых систем. Он будет забитый, сидя в углу обосссаный, дрожащими ручонками ковырят свою Акку, рыдая кричать "а... аа.. а увас генериков нет даже! у... у нас продвинутая система типо...". Но не успеет закончить, так как поймает смачный пендаль в ебальник, и будет наблюдать как его любимую Акку ебет божетсвенный CSP гошечки, не оставляя ей никаких шансов.
Тем более можно писать и на goвне в функциональном стиле, просто без таких изъебов как в скуле.
Ну не надо этого... ну серьёзно, скалоёб взгляни правде в лицо, твое поделие работает поверх JVM, а это дно. У вас, блядь, даже либы по работе с БД блокирующие (привет jdbc) о чём тут говорить вообще.
А ПОЧЕМУ ТВИТТЕР ПЕРЕВЕЛ НА СКАЛУ?????????????????????77777777777777
В тред заходит эарланго-господин и запускает 10к процессов по обоссыванию го-дебила.
Эликсиро-господин поглаживает бороду, сидя в антикафе, и респектует.
На второй гифке в конце противно выливается пивас.
Однозначно да. Джава-бэкграунд является плюсом из-за твоей потенциальной возможности поковыряться в кишках какого-нибудь легаси проекта. Но сейчас скала ― это полностью самостоятельный язык со своей экосистемой. Знание джавы уже несколько лет не обязательно для скалистов.
потом 10к раз отсасывает на реальных задачах, где действительно нужен большой конкаренси и распределённая структура. потому-что эликсиром пользуется толлько руби-хипсторы. ладно дадим шанс эликсиро-господам вынуть хуй из рта:
даже у жвм-старья есть hazelcast, kafka, ignite. Годауны размахивают consul, etcd, nsq, groupcache, NATS (пытается ссать на кафку, но пока мимом). Что есть у эликсиродебилов? нихуя, только рэббит, но он на эрланге, так так нормальный челвоек такой хуйнеё как эликсир обмазываться не будет.
Это реальность, назови примеры известных решений в области распределённых систем на эликсире.
>даже у жвм-старья
Братишка ну ты долбоеб сравнивать устоявшуюся популярную платформу, которая старше тебя и язык, который появился 7 лет назад.
Усложню вопрос. Есть вообще реальный шанс найти работу на Scala без опыта в промышленной разработке? Или лучше всё-таки начать с какого-нибудь Python или Java?
>Ты в курсе, что еликсир - это нескучный синтаксис для ерланга, да?
В курсе. И что в эриксоне эрланг за сраные сервисные сообщения железок отвечал и весь хайлоуд там был только в мифах и головах нонешних некрохипстушков - тоже.
В смысле, эрланг отвечал за "пару байт переслать когда абонент поднял трубку, и еще пару - когда бросил". Такую одноклеточную парашу эрланж да, тянул.
Весь хуйлоуд эрланга - это выдумки хипстопетушков.
Ты ебанулся? Если жвм старше тебя, то ты школьник ебаный (в любом случае еще опарыш), оно 1995 года.
Школьникам 95 года уже по 23 года, они уже помидорками работают.
Про WhatsApp который целиком на эрланге и у которого овердохуя серверов ты не слышал?
У LoL мессейджинг на ерланге. Jabberd на ерланге. Алсо, https://en.wikipedia.org/wiki/Erlang_(programming_language)#Usage
Хорошь соскакивать, так про любую закрытую херню можно сказать, а мол в корпорации X это работает на Y. Это всё хуйня и не имеет возможности верификации. Давай рассуждать логически, если язык/платформа збс для чего либо, то на ней будут достойные открытые проекты, на эрланге нет нихуя кроме кролика. Это наводит на мысль, что анон прав по поводу "хуйлоуд эрланга - это выдумки хипстопетушков".
>consul, etcd, nsq, groupcache, NATS
Я правильно понимаю, что главное достижение годебилов это написание распределенного key-value хранилища и message broker?
>то на ней будут достойные открытые проекты, на эрланге нет нихуя кроме кролика
Про OTP слышал?
Чтобы ещё навернуть? Про SICP и Кормена даже не упоминаю.
И как попрактиковаться?
На собственном опыте проверено, что есть.
Но тут важный момент, где ты живёшь. Если ДС или ДС2, то куча компаний хайрит джуниоров. Причём джунов рассматривают как с минимальным опытом в других областях, так и без. Если в мухосрани, то извините.
Мониторь hh, линкедин, сообщества скалистов в телеграме (там вся движуха).
Scala with Cats, Effective Akka, Scala High Performance Programming.
Для практики можешь решать задачки с exercism.io. А можешь написать движок для блога. А можешь поконтрибьютить простенькие таски в проекты на гитхабе.
>ряя нет нихуя фреймворков опенсорса
>>есть
>ряяя а где проекты на этих ваших фреймворках опенсорсных
>>вот
>ряяяяя а откуда ты знаешь что он именно на нем а ты код видел
>>пикрелейтед
Спасибо тебе анон! Ты меня убедил попробовать. Я сам из мухосрани, но морально готов перебраться в ДСы джуном ради нормальной интересной работы, да и небольшая денежная подушка безопасности есть на первое время, чтоб с голодухи не помереть.
У них львиная для профита благодаря кассандре вместо бд. Т.е. все эти ваши хайлоады на себя берёт банальная жаба. А писать в неё можешь хоть на js.
Не, я вообще мимо проходил и ничего против ерланга не имею (вообще никакого мнения о нём не имею). Но конкретно у дискорда дела именно так.
Вот только почему-то в статье самого дискорда о том, как они заскейлились на 5 млн онлайна, нет ни слова о кассандре (зато много слов о переписывании сишных библиотек на эликсире, вообще охуеть). Даже не знаю, кому верить: анону с зекача или команде discord.
мимо
https://blog.discordapp.com/how-discord-stores-billions-of-messages-7fa6ec7ee4c7
Вот про хранение, например.
Круто, но где тут тезис "Т.е. все эти ваши хайлоады на себя берёт банальная жаба. А писать в неё можешь хоть на js."?
Я, в свою очередь, про эту статью говорил, если что: https://blog.discordapp.com/scaling-elixir-f9b8e1e7c29b
Что тебя спрашивали когда устраивался?
Что вообще требуют от джунов (или как там начинающий называется) по скале?
Вот, например реальное положение дел в дискорде
https://discordapp.com/jobs?team=engineering
в явном виде ищут только крестовиков, а этот ваш уеликсир только упоминается среди остальных языков для бека на равне с пистоном, гошкой и скалой. Таки ерланг/еликсир не нужен.
Хороший у них блог, бтв. Приятно почитать.
>Working with a modern tech stack built on GCE with Elixir/Erlang, Python, Go, Cassandra, Redis, Elasticsearch, and a hint of C++ where appropriate.
Я понял: ты сектант, тебе бесполезно пытаться приводить рациональные аргументы. Давай закончим, тем более что это оффтоп.
У меня почти все собеседования (и самое первое, и последующие на более высокие грейды) быстро переходили в неформальное общение о том, кто я такой, откуда взялся, как пришёл в скала-мирок.
Молодым и зелёным если и будут давать задачки, то, скорее всего, примерно такого уровня: scastie.scala-lang.org/MvUJjYaZQm202EIGNath0A.
Но помимо понимания синтаксиса и стандартной библиотеки, тебе понадобится ещё и представление об экосистеме. В итоге джуну надо знать:
синтаксис
асинхронная модель (как пользоваться scala.concurrent.Future)
библиотека коллекций (map, filter, foldLeft и прочие базовые методы)
инструментарий (IDEA, sbt, git)
что-нибудь про базы данных (хотя бы в чём отличие SQL от NoSQL)
крайне желательна акка (что такое акторы, и зачем они нужны. что такое стримы, и зачем они нужны)
Лучший способ получить эти знания ― написать небольшой CRUD в качестве пет-прожекта. Например, движок для блога или примитивную CRM для воображаемой кафешки.
>>214318
А ты рисковый. Учти, что цены на жильё в ДС очень быстро сожрут твою подушку безопасности.
Разметка поехала
Спасибо за такой развёрнутый ответ.
>кто я такой, откуда взялся
Вот тут я обосрусь 100%, ведь мягко говоря не студентик уже...
>задачки, то, скорее всего, примерно такого уровня
Функцию написать, я правильно понял? Сколько времени даётся на такое? Интернетами можно пользоваться?
>scala.concurrent.Future
Нагуглил. Пойду читать.
>IDEA, sbt, git
IntelliJ? Я накатил эклипс, хз что там знать то можно, всё понятно по контексту. Что-то уровня "знания ворда", лол.
>что-нибудь про базы данных
>акка
Есть что почитать про это? Всё что я гуглил это либо поверхностное, либо бесконечная кроличья нора, от которой можно словить шизу.
Да, написать реализацию. Интернеты для такого не нужны, достаточно ноутбука с IDE, и никто не будет стоять над тобой с таймером. Время выполнения этих задачек джуном, которое устроит меня: nestedMap — 3 минуты, traverse — 10 минут, partition — 15 минут. Если человек тупит дольше, поинтересуюсь, как у него дела, и дальше будем уже вслух обсуждать задачу.
> Я накатил эклипс
Откуда же вы лезете? Даже на официальном сайте скалы предлагают IDEA поставить.
Про акторы и асинхронщину читай https://github.com/anton-k/ru-neophyte-guide-to-scala. Про БД — просто начни с ними работать и подгугливай документацию в процессе. Потом уже придёт понимание, что изучать полноценно.
Слушай, а почему бы не взять Spring Boot, к нему добавить Spring data и прочее. Получится же быстрее и понятнее. Зачем тебе эта Scala, ммм?
>Даже на официальном сайте скалы предлагают IDEA поставить.
Много ли среди скалистов вимо\имаксоебов?
Ясно.
>Откуда же вы лезете?
Ну не стукай, выбрал первое что выдал гугл.
>Про БД — просто начни с ними работать
>работать
Тригернулся.
Я просто малость аутист, мне не хватает фантазии придумать что с этими бд вообще делать. Создать, добавить элемент, убрать... Всё нахуй. Лан надо будет накатить SQL и подрочиться.
Ещё раз спасибо.
>Откуда же вы лезете? Даже на официальном сайте скалы предлагают IDEA поставить.
А я тебе скажу откуда. На курсере Одерски демонстрирует всё в Eclipse. Я попробовал пойти против системы и поставил себе чистую sbt. С наскока нихрена не разобрался в ней и решил, чтоб время не терять, качнуть голый компилятор. Где можно вменяемые доки найти по sbt, а не эту херню с хеллоуворлдом вместо создания проекта?
Сейчас занят в java ee.
Какие подводные и стоит ли?
Послезавтра собедесование - к чему готовится? кроме анального порева
Есть книжка SBT in Action.
Вполне годная.
>чистую sbt
И почему в женском роде? Это же "инструмент".
>На курсере Одерски демонстрирует всё в Eclipse.
Это курс по фп?
Ему лет триста уже, тренд поменялся давно.
Эклипс заебал уже даже самых упоротых ебанатов, лол.
Нормальные же люди им и вовсе никогда не пользовались, ибо просто невозможно же.
>scastie.scala-lang.org/MvUJjYaZQm202EIGNath0A
Это ты писал?
Что ещё за nestedMap, лол?
Лифтинг отменили уже?
Этот курс - пространное введение в Скалу с лёгким уклоном в ФП.
Там и про ООП куча, и т.п.
А по ФП - не так и много.
Например, чтение книжки Functional Programming in Scala (и решение задач, обязательно) будет гораздо более полезно.
Есть гитхаб с задачам, хинтами и ответами.
Это вообще одно из лучших введений в ФП как таковое.
При этом знание Скалы требуется на самом начальном уровне.
Авторы пишут, что можно вообще с нуля, но это, конечно, перебор.
Я представляю как будет тормозить приложение написанное на Scala, когда GC будет работать нонстоп.
Для полных нубасов без промышленного опыта курс будет полезным? Скажем, сначала накатить его, а потом Functional Programming in Scala?
Ну что ты нервичаешь? Мы же с тобой понимаем, что для скорости нужна Java, а не Scala.
Да, будет.
Есть ещё книжка фолиант Одерского - Programming in Scala. Надо искать 3-е издание, где версия 2.12.
Ну и другой литературы полно.
Вообще, я бы посоветовал Scala For The Impatient (2-е издание).
Минимум воды, широкий охват тем, читается легко.
А за тонкими подробностями - к фолианту Одерского.
Даже на русском есть (Scala для нетерпеливых, перевод 1-го издания), но сам я перевод не видел, по качеству ничего сказать не могу.
>Какие подводные
Имплиситы.
>стоит ли?
Конечно стоит - кругозор шире, зарплата больше, молодежней-современней.
>Послезавтра собедесование - к чему готовится?
Ну ты скалу-то уже знаешь? Деревья повращал? Мы ж не телепаты, хуй знает, что у тебя за вакансия и какой у тебя уровень.
>Ну ты скалу-то уже знаешь?
Нет, нихуя не знаю.
Для меня это пафосное название как и все околоджавное больше ассоциируется с чем-то промышленным и даже с ML.
>Конечно стоит - кругозор шире, зарплата больше, молодежней-современней.
А это точно не гавно на палках/попытка сделать на жвм хоть что то стоящее?
То ли дело взять Spring 5, а там Netty и такой-то перформанс. Это тебе не Finagle какой-нибудь или Akka Http, да.
Сейчас бы пытаться сделать вид, что netty - медленный энтерпрайз, а вот в акке сила.
Наоборот же! Netty быстр, а вот Akka Http не очень.
Вообще-то, сетевая часть в акке сделана на netty.
Это, если отвлечься от того факта, что спринг не нужен, например.
It’s that time of year! Pride 2018. In honor of all of us Scalamaris that are advocates of or identify with the LGBT community–we have a little bit of Scala love for you.
Ну Netty из Akka давно уже выпилили. Сам понимаешь, что это черевато добавлять в зависимости библиотеку, которую по сути поддерживает один человек.
А Spring можно и к Scala прикрутить. Как ты без IoC будешь жить, а?
Стоит заметить, что спринг давно уже не только IoC, его корфичами являются и weblux/mvv, и aop, и всякие integration-security, да и без бута/клауда его используют всё меньше (что на понимании макаками-кодерами сказывается крайне негативно).
Про нетти сказал как отрезал. А ещё у него новые мажорные версии не выходили десять лет, а пятую ветку забросили после второй альфы.
Согласен. Spring - это такой уанстопшоп, где есть все необходимое для разработки приложения. Если взять Scala, то можно долго куковать в поисках альтернативных библиотек и фреймворков.
Очевидно макаками-кодерами я называю нерадивых пользователей Spring Boot, у тебя wishful thinking сработал.
>при чём тут спринг
Думаю он подразумевал что-то вроде "можно хоть спринг использовать", но это мои домыслы.
Как причем? Берешь Java + Spring и ваяешь свой стартуп. А Scala не нужна по сути.
> Scala ни нужна
Анончики, а можно простыми словами и без троллирования, какие у Scala преимущества по сравнению с Java? Чтоб вот можно было, например, другану-профану за пивасом пояснить, почему я решил упороться Scala. Ведь сейчас под JVM есть и Kotlin, и Clojure и, даже, Groovy.
Скала по отношению к джаве - это как сиплюсплюс по отношению к си. Можно наворотить такого, что голову себе сломаешь, но если использовать как "си с классами", то преимущества очевидны.
Ебать Акку под спарком збс.
Для всего остального котлин лучше, иначе есть шанс быть неявно выебанным неявным хуем невяного пидора в неявных обстоятельства.
> Можно наворотить такого, что голову себе сломаешь
Вот это, между прочим, объективный минус с точки зрения языка - любой в меру своей испорченности может нахуячить так, что хуй проссышь нормально даже сам спустя пару месяцев.
Но как бы и на джаве, и на любойязыкнейм можно наворотить в меру своей испорченности. Тут суть не в этом, а в том, что скалу можно использовать просто как более лучшую джаву. Мне кажется для объяснений под пивас это самое то.
>едь сейчас под JVM есть и Kotlin, и Clojure и, даже, Groovy.
А ещё jRuby, Jython, и до ебеней матери всякого разного прочего.
Какие преимущества?
Никаких.
Это просто другой язык.
Какие могут быть преимущества у тёплого перед мягким?
Можно делать фп, например.
Акка там, хуякка, вот это вот всё.
Это преимущества?
А просто как беттер-джава - очень сомнительно, т.к. язык _гораздо_ сложнее.
Плюс - несовместимая развесистая иерархия коллекций и т.п.
Скала это не беттер-что-то, это вещь в себе.
Беттер - это котлин, хотя, я бы не стал его юзать в этом качестве - очень мутный язык, с весьма мутным будущим.
>Плюс - несовместимая развесистая иерархия коллекций и т.п.
Так стд коллекции один хуй говно же.
Нет. Джава сильно ограничивает. Котлин меньше. Скала вообще нет.
>Так стд коллекции один хуй говно же.
В скале или в джаве?
А потом, это не имеет значения.
Проблема именно в том, что скала без родных коллекций - хуйня.
А джава - без своих.
И, в итоге, на каждый пук надо юзать встроенные конверторы, которые красивые, конечно, но совсем не бесплатные.
Если покопаться в интернетах (англоязычных), то можно увидеть, что про скалу как беттер-джаву пишут, в основном, ньюфаги, которые скалу только вчера увидели.
Опытные бобры пишут совсем другое, уже не такое интересное, лол.
Да, я.
В чём проблема с нестедмапом? Это задача, которую можно реализовать через лифтинг f в общем случае, и через xs.map(_.map(f)) в частном. Если кандидат начнёт рассказывать про lift, это ему только в плюс пойдёт.
Но вообще, это задумывалось как элементарная задачка для джуна на знание самых простых операций над стандартными коллекциями. Условно, чтобы понять, что человек не путает map и flatMap.
>В скале или в джаве?
Второе.
>И, в итоге, на каждый пук надо юзать встроенные конверторы
А вот в кложе такой проблемы нет, кстати. ^_^
>Опытные бобры пишут совсем другое, уже не такое интересное, лол.
Тут не буду возражать, я не бобер.
А ты сам из личного опыта говоришь? Ну, конкретно по части того, что "никаких" преимуществ. Тот факт, что это разные языки, нам ведь не мешает их сравнивать и оценивать целесообразность их применения для какой-то данной задачи. Ты согласишься с тем, что скала в целом более высокоуровневая и более типобезопасная, чем джава?
Я не говорил, что нет преимуществ.
Я сказал, что не нужно сравнивать разные вещи.
И там и там недостатки (в большинстве случаев) являются продолжением достоинств. А за достоинства приходится платить определённую цену.
Закон сохранения никто не отменял.
>Ты согласишься с тем, что скала в целом более высокоуровневая и более типобезопасная, чем джава?
Да. Есть куча ценных фишек, свяаных с типизацией, которых нет в джаве.
Но, это не бесплатно.
Язык значительно сложнее. Порог вхождения в разы выше.
Код трудно воспринимать при беглом просмотре. И т.д.
Кто не понимает, о чём я - почитайте исходники библиотеки коллекций, например.
И можно (иногда) нахуевертить такого, что будет компилироваться, но не будет работать (я имею в виду ошибки применения типов). В джаве такое невозможно, например.
Инструментальная поддержка, опять же, несравнимая совершенно. Хотя, за последние годы поддержка скалы улучшилась в разы.
Вообще, это сложная тема, которая далеко выходит за границы обсуждения на аиб.
Стоит ли скала того, чтобы её изучить до приличного уровня?
Будет ли это полезно для профессиональног роста, даже если ты не будешь писать на ней фуллтайм?
- Однозначно.
Ну не котлин же, в самом деле, лол.
Значит ли это, что джава не нужна, и все чёткие пацаны должны перекатиться на скалу?
- Ни в коем случае.
Я не говорил, что нет преимуществ.
Я сказал, что не нужно сравнивать разные вещи.
И там и там недостатки (в большинстве случаев) являются продолжением достоинств. А за достоинства приходится платить определённую цену.
Закон сохранения никто не отменял.
>Ты согласишься с тем, что скала в целом более высокоуровневая и более типобезопасная, чем джава?
Да. Есть куча ценных фишек, свяаных с типизацией, которых нет в джаве.
Но, это не бесплатно.
Язык значительно сложнее. Порог вхождения в разы выше.
Код трудно воспринимать при беглом просмотре. И т.д.
Кто не понимает, о чём я - почитайте исходники библиотеки коллекций, например.
И можно (иногда) нахуевертить такого, что будет компилироваться, но не будет работать (я имею в виду ошибки применения типов). В джаве такое невозможно, например.
Инструментальная поддержка, опять же, несравнимая совершенно. Хотя, за последние годы поддержка скалы улучшилась в разы.
Вообще, это сложная тема, которая далеко выходит за границы обсуждения на аиб.
Стоит ли скала того, чтобы её изучить до приличного уровня?
Будет ли это полезно для профессиональног роста, даже если ты не будешь писать на ней фуллтайм?
- Однозначно.
Ну не котлин же, в самом деле, лол.
Значит ли это, что джава не нужна, и все чёткие пацаны должны перекатиться на скалу?
- Ни в коем случае.
Я в целом со всем согласен, про ненужность скалы я и не говорил, и все остальное ты написал по делу.
Разве что
>И можно (иногда) нахуевертить такого, что будет компилироваться, но не будет работать (я имею в виду ошибки применения типов). В джаве такое невозможно, например.
- https://hackernoon.com/java-is-unsound-28c84cb2b3f
А в целом - да, анон, все так, я с тобой согласен.
>xs.map(_.map(f))
Я примерно так и сделал
def nestedMap[A, B](xs: List[Option[A]])(f: A => B): List[Option] =
{
def wew (x: Option[A]) = x match
{case None => None
case Some(s) => Some (f(s))
}
xs.map(wew)
}
А потом пошёл читать про футуры.
Теперь ещё и про лифт читать буду.
Проверка на None делается внутри map(). В это и смысл.
Футуры - это хорошо.
Лифт - хули про него читать?
Это функция, которая "поднимает" другую функцию, работающую со значением типа A, чтобы она работала а с определённым контейнером, содержащим значение типа A.
Т.е. (A => A) => ([A] => [A])
Т.е. лифтованная функция внутри себя вызывает map(f).
Вот тут можно потрогать пример:
https://scastie.scala-lang.org/mrYmm1ZiRZaNMeVVlClAQw
Деньги вперед.
ну тащемта можно показать и более общий пример через функторы:
https://scastie.scala-lang.org/dSj8uomlReeSpliZyLeg2A
def transformInt(x: Int, f: Int => Int) : Int = {
f(x)
}
Но что бы вместо единственного входного параметра x: Int
были, например 2 строки s1:String, s2:String,
и к ним двоим тоже применялась какая-нибудь функция
>Но когда начинается ввод/вывод и обработка ошибок Haskell почти ни чего не дает, по сравнению с распространенными языками.
Я утверждаю, что ты просто не знаешь, как в современном ФП делается ввод/вывод и обработка ошибок. Показывать тебе как это делается на Хаскеле, конечно, бесполезно, но хоть Скалу попробуй осилить http://degoes.net/articles/modern-fp вроде специально для брейндамагнутых джавой язык делался.
лол, ну держи:
def transformStrings(s1: String, s2: String, f: (String, String) => String): String = f(s1, s2)
Это же map получается, или reduce?
Не понятно из твоего поста.
"и к ним двоим тоже применялась какая-нибудь функция" - это несколько расплывчато, лол.
На вход надо подавать 1 аргумент - коллекцию.
Можно сделать доп. вариант для Option (который, сука, не коллекция, почему-то).
Да, это так. И дело не только в наследовании, а в том, что в Хаскеле мухи таки отделены от котлет.
Например, в Хаскеле есть "обычные" алгебраические типы данных и есть генерализованные АДТ. В Скале нет ни того, ни другого это делается через ебучие костыли вроде sealed trait .. и это вроде как АДТ, но одновременно при паттерн-матчинге может эмулировать некоторые свойства ГАДТ, но с некоторыми ограничениями. В чем конкретно заключаются "некоторые ограничения" - хуй проссышь, просто в какой-то момент ты на них внезапно натыкаешься и у тебя начинается жопаболь.
Type-level programming, higher-kinded types, type-level macros - всё это в Скале эмулируется, но с кучей бойлерплейта, без macro paradise практически ни одна функциональная библиотека на Скале не обходится. Да что уж там, даже тайпкласс или фукнцию с экзистенциальным типом на Скале написать - это проблема, тот же cats использует simulacrum и kind-projector для этого.
Вывод типов - ебанутейший, вплоть до того, что функциоальных либах меняют порядок аргументов в функциях, чтобы типы выводились (охуеть дизайнерское решение - выводилка типов тебе диктует в каком порядке должны быть аргументы).
Ебучий аппликативный порядок плохо сочетается с рекурсией во всех функциональных либах trampolining на каждом шаге вручную, чтобы это хоть как-то работало (слава б-гу он уже там прописан, поэтому используя либу о нём можно не думать, но исходники из-за подобных вещей хрен разберешь).
В общем, чтобы писать программы в функциональном стиле на Скале, надо её обвесить тоннами костылей, за которыми сути не видно. Надо знать, как все эти костыли работают, там макросы, плугины компилятора, надо знать зачем они все нужны. Поэтому в целом Хаскель гораздо проще и понятнее. На Скале всё это говно можно использовать когда ты уже всё знаешь из Хаскеля и еще знаешь специфичные заёбы Скалы. На Хаскеле можно учиться программировать.
То, что в Скале - это элементы фп.
Которые местами весьма полезны.
А попытки _использовать_ Скалу как функциональный язык (scalaz и прочая хуйня) - это именно попытки натянуть сову на глобус и подрочить вприсядку.
И за использование такой хуйни в продакшн надо пожизненно разжаловать в сторожа.
Лучше уж Kotlin использовать. Зачем эти сложности?
Дело в том, что современный "продакшн" - это и есть дрочба вприсядку толп полуграмотных ОО-дебилов. Поэтому соверменные программы - это самое ненадёжное из когда-либо созданного человечеством, при этом по самым неэффективным технологиям. Единственное, что в Скале есть хорошего, это те самые "элементы фп.", но они там настолько убогие, что для написания полноценных функциональных программ приходится тащить с собой кучу костылей.
Что же касается применения фп "местами", так тут можно выделить три стадии развития кодописца:
0. ОО-макак. Считает, что ФП не нужно, лямбды - сложная непонятная хуйня, пишет на Джаве, хотя когда в Джаву 8 завозят таки лямбды начинает делать вид, что про ненужность говорил кто-то другой и переходит на 1-ю сдадию.
1. Недофпшник. Нахватался по верхам на сайтах типа хабра, знает, что такое лямбда, умеет пользоваться функцией map. На этом его знание фп заканчивается, никаких декомпозиционных паттернов поциент не знает, про монады читал только в скалаблогах, там же прочитал про scalaz, но не знает, зачем это нужно. Пишет на мультипарадигменном говне обычные императивные программы с функцией map и лямбдами, с умным видом говоря, что использует фп "по месту".
3. Программист. Полностью знаком с парадигмой ФП, пишет на Скале в таком https://github.com/slamdata/quasar стиле, охуевает с полудурков на дваче, которые рассказывают, что на Хаскеле сложно работать с сайдэффектами, что cats или scalaz нельзя использовать в продакшене и прочих охуенных историй, которые тут генерирует недообразованная студентота, чтобы как-то оправдать свою недообразованность.
ФП-блядь носится по треду с разорванной сракой, спешите видеть.
Это reduce.
Точнее - foldLeft() для списка строк.
Это если тебе нужно общее решение для любого к-ва элементов.
https://stackoverflow.com/questions/1446419/how-do-you-know-when-to-use-fold-left-and-when-to-use-fold-right
https://en.wikipedia.org/wiki/Fold_(higher-order_function)
Зачем мне выбирать, если мне и так платят за ФП, причем существенно больше, чем всяким быдлокодерам которые кукарекают про ненужность ФП.
>>219014
Так ты радостью зашёл поделиться?
Это правильно.
И мы за тебя рады.
>что функциоальных либах меняют порядок аргументов в функциях, чтобы типы выводились
мимо-динамикодрисня-господин
Сочувствую тебе, братан.
https://users.scala-lang.org/t/scala-pride-t-shirts-for-charity-fundraiser-1-week-left/2928
Похоже на провокацию котлинопидоров ребят из Jet Brains.
Вакансий в России больше на скале. Но там часто идет как дополнение к джаве. Неотъемлемо ли одно от другого?
Хотелось бы ответов от тех, кто работает или работал с обоими языками.
На скале ты можешь писать что угодно.
А не эрланге?
>java
Нравится это тебе или нет, но это - промышленный стандарт. И так будет ещё много-много лет. До твоей пенсии, как минимум.
>На скале ты можешь писать что угодно.
...кроме десктопа, фронтенда и легких серверов.
>Нравится это тебе или нет, но это - промышленный стандарт. И так будет ещё много-много лет.
Ага, особенно вон с такими-то новостями https://www.oracle.com/corporate/pressrelease/java-se-subscription-offering-062118.html
>До твоей пенсии, как минимум.
так пенсии ж отменили yoba.png
Но ведь и десктоп, и фронтенд на скале пишут (в том числе в РФ). Не сказал бы, что мне это нравится, но это имеет место быть. Что ты под лёгкими серверами подразумеваешь, мне непонятно. Круды что ли?
>>220140
Скала не дополнение к джаве. В вакансиях их обычно пишут рядом, если уже есть большой кусок джава-энтерпрайза, а новые проекты пишутся на скале. В легаси-код программистам тоже иногда приходится залезать, поэтому в требованиях упомянают джяву.
Желательно энтерпрайз.
Желательно в Росии.
я постигаю акку, читаю туториал с офф сайта и не могу понять такую базовую вещь:
в нормальном коде, дерево акторов создаётся в начале работы программы и остаётся более-менее неизменным, или же некоторые акторы-дети постоянно создаются и удаляются в результате обработки сообщений родителем?
Более конкретный пример: я хочу обрабатывать запросы к СУБД, конечно же параллельно. У меня есть актор А который принимает запрос и:
1) Создаёт актора Б, который выполняет запрос, обрабатывает и возвращает результат. Затем удаляет актора Б.
2) Имеет готовый пул акторов Б, и просто роутит задачу одному из них (я видел, есть класс Роутера и несколько стратегий роутинга сообщений).
Какая из этих стратегий лучше? Если вторая, то как правильно выбрать размер пула? Если таких пулов несколько, каждый раз думать, насколько велик должен быть пул?
Дополнительный вопрос:
давеча ГО-анон писал что jdbc не асинхронно, и поэтому скала говно. Насколько правомерно это умозаключение? Я нашёл вот это:
https://github.com/mauricio/postgresql-async
(хотя в README: This is not supposed to be a JDBC replacement)
Получится ли использовать эту либу в связке с АККА ?
В райфе на митапе недавно какой-то насквозь матановый доклад рассказывали, который 95% нормальных людей вообще не поняло. Но сам доклад родился из использования Акки, так что вероятно используется.
>jdbc не асинхронно
В смысле, требует поддержания соединения?
Так это не JDBC.
Точнее - да, JDBC, но потому, что это абстракция для _любой_ БД, большинство из которых не асинхронны.
Хочешь асинхронности - вводи лишний слой (поближе к физической БД), который будет обслуживать твои запросы асинхронно, а с БД работать через пул соединений.
Собственно, на Акке его и можно сделать (наверное, я не большой спец по ней).
Свежо предание, лол.
Понятно, что где-то всё это используется (или может использоваться) ирл, только интернеты об этом молчат, в основном.
Делаем сервис для отображения рекламы в играх (в том числе AR, VR), на скале пишется сервер для фиксирования просмотра, статистики, операции с баблом, непосредственно отображения рекламы на юнити на шарпах, работаем на шведов
Это охуенно, но "энтерпрайз" - это немножко другое - торговля, промышленность, банки, государственные системы.
Но, в принципе, понятно, зачем вам Акка.
А БД какая?
В Akka in Action рекомендуют вообще всё в памяти держать, при остановке системы сливать в хранилище, при старте - загружать.
Вы как делаете?
С помощью Слика, но мы ещё юзаем ДинамоДБ
>>225062
>но "энтерпрайз" - это немножко другое - торговля, промышленность, банки, государственные системы
ок, значит я неправильно понимал
>А БД какая?
основная Постргрес, для статистики ДинамоДБ
>В Akka in Action рекомендуют вообще всё в памяти держать
у нас с-ма всего раз запускается, а данных супердохуя
>Вы как делаете
Держим в бд, но конечно же есть и кэшированные данные, но их немного
Странный вопрос. Акка почти везде в ынтырпрайзе. У нас вот тоже. Хотя плюёмся от неё очень сильно. Вот например akka-streams потихоньку на fs2 меняем
> Какого рода энтерпрайз?
> Какого рода проекты?
Биллинг. Больше сказать не могу, коллеги тоже сидят, не хочу задеанониться, лол
> Зачем Акка?
Event Sourcing. Взяли Akka-Cluster, получилось неплохо. Сейчас ещё лучше, ибо код на сырых акторах я уже не помню когда писал в последний раз.
> Почему плюётесь?
Future. Но тащемто уже скрыли всё что можно за семи слоями абстракций и везде (почти) Monix
Потому что писали на скале.
А если серьёзно, то хз. Это прям как-то даже странно. Да и не только же кластер нужен нам был -- стримы и персистенс тоже.
Это потому, что ночь уже.
Выбрасываешь скалу, берешь джаву, спринг, базу там какую-нибудь, инмеймори дата грид, хазелкаст там, инфиниспан там вот и все.
плагин какой-то был
Ну у меня на немощном ноуте IDEA +- работала, но на линухе; а на винде, да, тормоза неебические.
Попробуй убунту + идеа, мб заканает, потому что я лично не представляю, как кодить на скале не в идее; поиск юзеджов (для акторов вещь просто необходимая), подсветка передачи имплиситов.
Если не идея, то не могу ничего посоветовать, сори
Вроде для Eclipse что-то было.
Блин, придется попердолить, деваться некуда. Выглядит вкусно.
Я параллельно с курсом читал SICP. Одерски оттуда все задачи подергал. Порой объяснение материала в SICP изложено намного лучше чем в курсе.
Есть же всякие entry-level книжки для тех кто решил освоить функциональную парадигму.
Я бы не сказал, что конкретно данный курс является лучшим источником информации по теме.
Если тебе охота именно Scala освоить для каких-то своих проектов, то лучше взгляни на этот гайд - https://gist.github.com/d1egoaz/2180cbbf7d373a0c5575f9a62466e5e1. А курсы оставь на потом. Их польза крайне сомнительна, к сожалению. Лучше пролистать пару книг и начать писать небольшой проект используя полученные знания.
А проходя данный курс ты будешь неделю думать как решить задачу с разменом монет или полиномы высчитывать ФУНКЦИОНАЛЬНО!
Решай больше задачек. Смотри чужие решения после того, как написал свое.
У скалы кстати есть свой аналог http://www.4clojure.com/problems ?
>>228471
Двачую кроме последней части. Перед тем, как писать петпроект, тебе все равно надо научиться составлять алгоритмы. Кому-то нравится видео, кому-то - книжки. Без разницы в принципе, но курс тебя еще будет подгонять сроками, плюс там есть форум, где можно задавать ответы.
Я кстати помнится вот такую хуйню нашёл когда-то
http://www.otstavnov.com/Odersky_Scala_lecture-notes.html
Может тебе пригодится.
Я понимаю, скорее всего вопрос платиновый. Но я так уже попадал с Питоном. Все советуют The Byte of Python, но это полное говно, а не книга, и я лишь потратил время. Более менее полезной была Think Python, и то, только из-за наличия упражнений. В итоге, всё перешло в изучение Лутца, где много воды, но расписано всё обстоятельно. Правда, один хер, работу джуном я на Питоне найти не могу. Похоже, я слишком старый для этого дерьма. Вот такой вот я вкатывальщик-неудачник, да. В общем, проще - не всегда лучше, потому что остается много непонятной магии в работе. А я так не могу. Меня это раздражает сильно.
Impatient + FP in Scala (скала там почти с нуля).
Можно параллельно.
Фолиант - для тонких подробностей.
>Scala for the Impatient?
Я дропнул. Не помню почему. Хоть и на русском было, но что-то мне не зашло. Очень много воды.
>по поводу толстой книги Одерского?
Вот этой?
https://www.artima.com/pins1ed/index.html
Мне нормас зашло.
В любом случае придётся прочитать всё тоже самое, но в разных вариантах.
С задачками я вот это читал
http://aperiodic.net/phil/scala/s-99/
>работу джуном я на Питоне найти не могу
На скале тем более не найдёшь. Открой хх, там требуются только сеньёры на 200 тысяч, ньюфаги никому не нужны.
>Хоть и на русском было, но что-то мне не зашло
Лол.
Не читайте до обеда советских газет.
Читать надо по английски.
И второе издание.
Фолиант - третье.
Всё есть в интернетах.
И хуй знает, где ты там воду нашёл.
Книга очень плотно написана.
Русский перевод, правда, не видел.
Не удивлюсь, если насрали, как обычно.
Дело не в русике, а в постоянных авторских "а вот в крестах вот так, в яве так...". Да мне похуй как там, пиши по делу. И ебанутая подача, то расписывает простейшую хуйню, а через страницу даёт пример, чтобы понять который надо ещё пару страниц гуглить.
Русик я упомянул, чтобы подчеркнуть, что даже учитывая разницу в языках (русик то родной, пинг от глаз до мозга меньше) книга на английском зашла легче.
>"а вот в крестах вот так, в яве так...". Да мне похуй как там
Скала - очень сложный язык.
Не понимая, почему нечто сделано именно так, а не иначе - можно просто не понять вообще ничего.
Книга написана очень хорошо и лишнего там нет ничего, всё строго по делу.
И, далеко не каждая книга, а особенно по такому не особо популярному языку, выдерживает второе издание вскоре после первого.
И да, эта книга для тех, кто уже умеет программировать. Т.е. это не учебник по программированию.
И скала - очень плохой кандидат на роль первого языка.
Спасибо!
>>228865
>На скале тем более не найдёшь. Открой хх, там требуются только сеньёры на 200 тысяч, ньюфаги никому не нужны.
Ньюфаги в принципе никому не нужны. Интересно, откуда при такой политике сеньоры берутся. А мне уже без разницы на каком языке я не смогу работу найти. Мне недавно отказали в интервью на трейни-вакансию, в которой требовали знание хоть какого-то языка. Скалу хотя бы интересно учить.
>>228896
>Скала - очень сложный язык.
Скала - интересный язык. Он создан для людей, которые сначала думают, а потом делают. Если с думалкой слабо, то есть JS, Python, Ruby и PHP. Там можно говнокодить даже с дырой в голове.
>Скала - интересный язык
Вот вот.
Только поэтому и учу, а то бы дальше маняме смотрел, б листал и лес фармил.
>Скала - очень сложный язык.
>Скала - интересный язык.
>Если с думалкой слабо то есть JS, Python, Ruby и PHP
Ты, вообще, понял, по какому поводу я это написал (про "сложный")?
И кому?
Попробуй, перечитай.
Или ты привык слушать себя, в основном?
Возможно, в этом причина твоих проблем с поиском работы.
Алсо, с каких пор питон и руби стали языками для слабоумных, лол?
Многие рубисты, например, люто надрачивают на скалу, тот же Поллак (разработчик Lift).
>>228902
>Почему?
В смысле?
Спроси у Одерского.
Или ты имеешь в виду, с чего я это взял?
Потом поймёшь, если продолжишь учить.
Чисто для примера - почитай исходники библиотеки коллекций.
Если хоть что-то там поймёшь - отпишись обязательно, лол.
>Или ты привык слушать себя, в основном?
>Возможно, в этом причина твоих проблем с поиском работы.
Ты чего злой такой? Основные причины - отсутствие профильного опыта и возраст. Причем, вторая причина ключевая, насколько я могу судить.
>Алсо, с каких пор питон и руби стали языками для слабоумных, лол?
Я написал, что даже имея дырку в голове, на них можно успешно говнокодить. То есть язык не так требователен к квалификации пользователя.
>В смысле?
Уже который раз слышу, что сложна, но так и не могу понять почему.
Такое чувство, что это какой-то налёт элитарности, чтобы отпугнуть ньюфагов.
Ну матан, вся хуйня. Но погромирование само по себе подразумевает матан, разве нет?
Я не спец в этом вашем программировании, но мне что-то подсказывает, что для клепания форм, например, матан не нужен.
Нет там никакого матана.
Просто язык сложный, потому, что очень много всего в нём.
Просто для примера:
https://stackoverflow.com/questions/8000903/what-are-all-the-uses-of-an-underscore-in-scala
>чтобы отпугнуть ньюфагов
Чтобы предупредить, лол.
И чтобы человек не думал, что это он тупой, например.
>очень много всего в нём
Это ж плюс, разве нет? Широкий выбор инструментов это здорово.
К тому же никто не заставляет всем этим пользоваться. Я вот читал про всю эту ковариативность, и прочую еботню с типами, например, но что-то мне подсказывает используется это очень редко.
Про подчёркивание - это наоборот упрощение, когда не нужно переменные лишний раз создавать, ебанул _ да и всё. Как символ, который подразумевает что-то очевидное, типо местоимения.
Очень во многом вижу вот этот подход, хз как выразиться, для ленивого человека. Может поначалу это и кажется сложным и нихуя непонятным, но когда один раз поймёшь, то уже не захочешь возвращаться обратно.
Огромный простор для того, чтобы лишний раз не писать новый код, а переиспользовать уже имеющийся.
Правда в продакшене это никому не нужно. Проще и дешевле взять Java или Kotlin и в случае необходимости использовать какую-нибудь Akka (хотя реализация акторов на Java вроде имелась).
Пока найдешь программиста на Scala, который не фигачит одни монады - контора успеет обанкротиться.
>Проще и дешевле взять Java или Kotlin
Есть и обратный момент. Если взяли всё таки Scala, то там вероятно не просто и не дёшево.
>который не фигачит одни монады
Как что-то плохое. Неужели формошлёп, который потеет услышав что-то про лямбды, будет предпочтительней?
Зачем такие сложности, когда можно взять стандартный спринговый стек и не обосраться в продкшене?
Да, скала хайп немножко поутих в последние пару лет.
Причина, видимо, в том, что сложность языка "не окупается". И параллельный успех (блядского) котлина свидетельствует о том же.
> скала хайп немножко поутих
И заебись, меньше вкатывальщиков-джунов, готовых работать за 300 баксов, которые демпингуют зп. А работа будет и так.
Мне далеко за тридцать. И я ощутил в полной мере, как "никогда не поздно вкатываться". Честно говоря, не ожидал такого. Думал, айтишники - ребята прогрессивные.
Отсутствие опыта, конечно, тоже оказывает влияние. Но я ж и не претендую на синьорскую позицию. Я настроился на среднюю джунскую зарплату уже... В общем, немного у меня энтузиазм подисчерпался. Решил вот посмотреть на Скалу.
Я смотрю, олдфагов тут несколько больше, чем принято считать, лол.
Российские айтишники - не прогрессивные.
Угадай почему.
Да, никогда не поздно.
Просто чем позже, тем сложнее.
Уже считаешь себя умным, и это сильно мешает умнеть на самом деле.
Скала - интересный язык.
Но, если ты хочешь найти работу, и ты уже не мальчик - учи джаву. Изучение скалы может в этом сильно помочь, но потом.
Варианты - 1С, PHP.
Это не подъёбка.
JS - слишком молодёжно, мне кажется. Но, тоже вариант.
Вообще, ориентируйся на то, что тебе хотелось бы _создавать_.
Потому, что язык (языки) - это просто инструмент.
И без мотивации на создание конкретных вещей он бесполезен.
Не все так плохо, братунь. На прошлой работе, примерно год назад, взяли двух вкатывальщиков-джунов рубистами, одному было 33, другому 36. Оба прошли испытательный и остались.
не ссы. Просто приходи и говори: "Даров, я тут сделал то и то, научился тому и закрываю вот это. Накиньте двадцатку."
Если посылают -- спрашивай, что тебе необходимо сделать, чтобы получить прибавку, ведь ты хочешь получать больше.
Всё это на личном опыте, если работодатель адекватный -- накинет, или скажет что подкачать. Если нет, то беги нахуй. Скалист без работы не останется долго.
я рили хз, я всё на личном опыте говорю. У меня был супер ахуенный манагер и говорил он так: "С компании надо забирать всё" и постоянно давал мне прибавку, когда я просил.
Не будь терпилой -- требуй, проси, доказывай, что ты заслуживаешь больше. Если нет, то сваливай.
Но быть мудаком, который приходит и говорит: "У меня тут оффер, делайте прибавку или я сваливаю" не стоит.
>Да хуйня эйчарская. Хотят superstar, но сойдет и обезьяна, которая функтор от моноида отличить в силах
Ну не знаю. В Тинькове сильно по скале гоняют, ууух!
Дело в том, что контроффера у меня нет. Да и это как-то на саботаж очень похоже.
Наверное я просто не очень ценный сотрудник и нужно довольствоваться тем что имеешь.
Повезло тебе с менеджером. Мой менеджер только спрашивает "Ну че, сколько там еще осталось?!".
я другой анон который и начал спраишвать про это вот все, ситуация - месяцев 8 назад устроился джуном, при этом до этого на скале не прогая вообще. И, если в начале я бывало тупил и тд в плане делания всего как на каком-нибудь питоне, а не в фп стиле и все такое, то постепенно стал намного лучше, делаю все сам и с минимумом незначительных замечаний. Но как-то все равно хз, мб я многого хочу и все такое
не ссы анончик, подойти сегодня к манагеру и поговори с ним, потом отпишись здесь. Что плохого то случиться может? Да нихуя, ровным счётом.
Что хоть пишете на скале?
>сойдет и обезьяна, которая функтор от моноида отличить в силах
И часто в работе нужны понятие функтора и моноида?
Да
Это совсем не сложные понятия, на самом деле.
Функтор, например, это любая хуйня, которая реализует map().
Гуглю хх, там даже джунов нет, не то что стажёров. Всем подавай сразу сеньёров с опытом и стаком на страницу.
В то же время на Java вакансии есть, берут вообще всех, буквально "основы ооп" в требованиях. Может стоит влезть в джаву, а потом уже перекатываться?
Хотя с другой стороны, откуда то ведь берутся эти сеньоры...
Олдфаг-кун, это опять ты?
Ну вот смотри.
Есть такая книжка Functional Programming In Scala.
https://scanlibs.com/functional-programming-in-scala/
Знания скалы там почти не требуется.
Всё, что нужно, объясняют в процессе.
Используется ограниченное подмножество языка, без заморочек, которых в скале полно.
Попробуй, прочитай и _прорешай_ задания в этой книге. Там есть хинты, и даже есть ответы.
Если ты поймёшь, о чём эта книга, зачем вообще всё это нужно, если сможешь решать 1 главу за 7-10 дней (в среднем) и решить все - ты молодец. И смело можешь претендовать на работу, почёт и уважение.
Но, я что-то сомневаюсь.
Поэтому, я бы предложил тебе выбрать джаву, а к скале вернуться попозже.
Нет, я не тот питонист.
Дело не в книжках. А в последующем устройстве.
Прочту я её, не прочту, что-то мне подсказывает работодателю похуй.
Хуй с горы без опыта работы? Мы вам перезвоним.
>Олдфаг-кун, это опять ты?
Неа. Это другой анон. Я вот писал >>229624
Но за наводку на книгу спасибо. Вообще, мне дико доставило именно решение заданий в курсе Одерского. Так что книжечку буду читать для собственного развития.
А вообще, мне сегодня ВНЕЗАПНО позвонили и пригласили на собеседование. Что-то там с Питоном и данными я как раз собирался удариться в ML библиотеки. Завтра пойду побеседую.
>>230220
Я задавал аналогичный вопрос в треде и мне неплохо на него ответили здесь >>229194
Могу предположить, что в России-матушке не так много компаний, которые используют Scala вообще, и как основной язык разработки в частности. Это такое экспериментальное направление скорее. Да и Scala завязана на JVM и интегрируется с Java. Поэтому последнюю желательно таки знать.
Чувак, если ты можешь читать такие книги (и понимать прочитанное), твоему работодателю не будет похуй, поверь мне.
Другое дело, что чтобы смочь, надо уже иметь изрядно этого самого опыта, лол.
Или быть гением, но гении сюда не пишут.
>для собственного развития
Это одна из лучших книг по ФП для начинающих.
Независимо от языка.
Плюс, в отличие от хаскеля, например, тут используется практичный jvm-язык. И весьма многое можно с минимальными изменениями реализовать на джаве.
>твоему работодателю не будет похуй
Вот хз, хз.
>>230225
>в России-матушке не так много компаний, которые используют Scala вообще
Внезапно, они есть.
Но нужны серьёзные ребятки с опытом в 2-3 года на 300 тысяч в секунду.
А, похуй, буду читать этот толмуд и мониторить периодически хх. Не взлетит так в джаву вкачусь. Нет.
Я вкатывался. Не имел вообще никакого опыта на JVM, кроме немного кложуры. В прошлом гавнокодил на питоне.
работал стажёром, имея опыт стажировки на яве + пет проджект на спринге (мвс + дата), но это вроде как не просилось; требовали знаний ооп + фп + бд
Разнесли как дворовую шпану.
Я юзаю, что интересует?
Сбертех, но тинькофф получше
Exante, Revolut.
>>230433
Контора хоть и крупная, но мутная какая-то. Вообще, собеседование проходило странно: меня пытались напугать сложными задачами, которые они решают, но при этом уровень моей компетенции не проверяли совсем. На мои вопросы об используемом стеке прямо так и не ответили.
олдфаг-недопитонист
да на самом деле почте в любом технологичном банке есть скалка: райф, сбер, тинька. Насчёт альфы не уверен.
Ещё куча более мелких мест есть. Не так много как на джаве, но всё равно есть
Вбросил бы свою контору, но не хочу деанона.
А вообще, пойми, что, даже если в вакансии написано, что компания ищет сеньора, тебе ничего не мешает написать им и узнать про джуновские позиции. Часто джунов ищут пассивно и не публикуют вакансии для них.
унижение какое!
В основном приходится иметь дело с медленной компиляцией, нечитаемым кодом и постоянными тормозами приложения из-за того, что GC работает как сумасшедший пытаясь вычистить весь мусор, который приложение на Scala генерит каждую секунду.
>нечитаемым кодом
то что ты не умеешь его читать, это означает, только то, что ты не умеешь его читать
Скала тем и прекрасна, что можно писать очень лаконичные и выразительные конструкции, которые выглядят как built-in
>медленной компиляцией
это да, но для сервака это неважно
> постоянными тормозами
не замечал
>то что ты не умеешь его читать, это означает, только то, что ты не умеешь его читать
У Скалы объективно очень хуёвый синтаксис. К нему можно привыкнуть, как к Лиспу, или как к запаху носков в казарме, но чем-то хорошим он от этого не становится.
>У Скалы объективно очень хуёвый синтаксис
Ахуенные истории.жпег
Если вот это сложно, то остаётся только 1с с его ВЫЧЕСТЬ ПРМН ПРИБАВИТЬ НАЛОГ и в таком духе.
Небольшие трудности могут вызвать только всякие имплиситы, вот выше анон _+_ подобные записи считал сложными.
Ну и с типизацией надо разбираться, если ты хочешь использовать это всё на полную катушку.
К слову, у скалы же из хаскеля ноги растут? Я как-то читал статью в интернетах, там автор ебанат, он в одной статье давал ссылку на другую, и вот у меня ушло минут 5 прежде чем я сообразил, что та другая использует примеры на хастлере.
Все верно. Намного быстрее и главное дешевле написать все на Java. Хорошо что есть уже обкатанный Спринг и сопутсвующие библиотеки. Пока будешь подбирать стек на скале, у тебя деньги кончатся в конторе. Нужно же чтобы библиотеки были написаны на скала и все было функциональненько!
>Если вот это сложно
Ездить на велосипеде с квадратными колёсами не сложно, просто неудобно.
>>233870
Нет, я предпочитаю нормальные языки программирования.
>>233934
С Джавой сравнивать не корректно, потому что Джава менее выразительна, соответственно и синтаксис для неё придумать проще, но если уж на то пошло, там он лучше.
Начну с себя:
@dirinle
Scala 7/10
Akka Actors 8/10
Akka Http 6/10
Play2 3/10
Slick 9/10
Я, например, постоянно спотыкаюсь об плэй, так как только недавно с ним работаю
Cats для петухов, конечно scalaz!
Я ждал этого ответа, спасибо.
работу, быстрофикс.
Логично!
Для скорости нужен го, раст или плюсы. Ты забыл что-ли, что джява работает на JVM? Которая в принципе сосёт на реальных задачах, и написать на ней что-то быстрое, особенно когда дела касается асинхронщины адски сложно. Просто не ебать мозги и взять гошку.
Да ты погугли! Ты же не гуглил!
Один из самых известных программистов на Clojure!
Потому что очень много скала-макак, готовых писать за 200 баксов. Короче демпинг зп норм программистов.
потому что на ней легко писать программы с хорошим дизайном. Тру программисты не боятся сложностей, поэтому пишут на спринге или го!
спринг божественен!
Этот график - полнейшая хуйня.
И, хорошо ещё, если это просто троллинг.
А если те, кто делает эти "исследования", сами в это верят, то это пиздец.
Не особо. Всё относительно - относительно ocaml или clojure её таки используют. Относительно Java, JS или C# - вообще нахуй никому не нужна, забытое поделие.
Конечно школьнику с сосача виднее, чем одной из самых известных analyst фирм. Съеби в /b.
>Hieronymus Bosch “A visual guide to the Scala language” oil on oak panels, 1490-1510.
>The left panel shows the functional features, the main one describes the type system, and the right the object oriented parts.
Purescript. И научись сначала ставить и добиваться решения по одной задаче за раз.
всегда лолирую с джс дурачков, которые говорят "фп немного знаю". Фп это не map, filter, reduce.
https://gist.github.com/d1egoaz/2180cbbf7d373a0c5575f9a62466e5e1 -- добро пожаловать.
Забавно, аноны в треде советовали как раз всё с точностью до наоборот: толстую книгу Одерски и красную по ФП.
дык красную книгу там и советуют, только чуть попозже
Так Скала - это не ФП. Скала - это Джава с лямбдами + пара костыльных паттернов на макросах имплицитах, которыми пытаются имитировать ФП. Если хорошо в этих костылях разобраться и попердолиться пару вечеров, то можно написать целую монаду, например.
Когда твои познания в ФП немного перевалять за map и пару статей на хабре, а опыт программирования на скале - за пару заданий из кук-буков, ты поймёшь, как они связаны. А пока просто учись и не выёбывайся.
ты будешь дальше выебываться или может ответишь на вопрос? Как связаны монады, макросы и ФП? ФП не может существовать без макросов и монад?
1. проприетарный (де факто)
2. проёбаны GADT-ы, нigher-kinded polymorphism и многое другое. И этого никогда не будет, потому что 1 и на любой вопрос отвечают "это сложно сделать в дудке без костылей".
Вообще, в плане функциональности языки можно разделить так:
0. Эксперементальные языки, вроде Idris, Agda и т.п. Делают НЁХ, но, к сожалению, она не всегда пригодна для практического применения. Например, в Агде нельзя задать функтор для стрелки (морфизма внутри языка), и прочие нежданчики всплывают, про которые никто не знает, потому что никто на этих языках не программирует. Я уж не говорю про отсутсвие экосистемы.
1. Haskell - делают нормально, огромный набор рабочих паттернов для решения практических задач, про язык всё известно, нормальная экосистема. Есть определенные ограничения и косяки, но они тоже, как правило, известны.
2. Scala - пытаются делать то же, что и в Haskell, но по причине родовой травмы, получается только на костылях и в инвалидной коляске. У особо умных личностей путём героических сражений с собственным инструментом и преодоления созданных им трудностей всё же получается что-то сделать (тот же cats или scalaz), но не пытайтесь повторять это дома, может оказаться опасно для мозга. К сожалению, все эти сложности не получается до конца изолировать даже на уровне библиотеки, поэтому даже воспользовавшись чем-либо готовым, вы всё равно рискуете хапнуть говна и повторить геройские подвиги сражения с языком, хотя, справедливости ради, уже в более лайтовой форме, чем авторы либ.
3. F# - онально огорожены и, как я уже писал выше, даже не пытаются делать то, что не поддерживается самой платформой .net. В итоге застряли на полиморфизме ранга-1, причем 13 лет назад, в течение которых все нововведения в язык сводились к синтаксическому сахарку и частным свистелкам-перделкам, которые, по идее, в любом нормальном языке могут быть реализованы на уровне макросов или, в крайнем случае, плагинов компилятора. inb4 MIT-лицензия и наличие mono не особо позволяют шарпу стать "открытым", это все равно, что говорить, что windows-only-говно не онально огорожено потому что есть wine
1. проприетарный (де факто)
2. проёбаны GADT-ы, нigher-kinded polymorphism и многое другое. И этого никогда не будет, потому что 1 и на любой вопрос отвечают "это сложно сделать в дудке без костылей".
Вообще, в плане функциональности языки можно разделить так:
0. Эксперементальные языки, вроде Idris, Agda и т.п. Делают НЁХ, но, к сожалению, она не всегда пригодна для практического применения. Например, в Агде нельзя задать функтор для стрелки (морфизма внутри языка), и прочие нежданчики всплывают, про которые никто не знает, потому что никто на этих языках не программирует. Я уж не говорю про отсутсвие экосистемы.
1. Haskell - делают нормально, огромный набор рабочих паттернов для решения практических задач, про язык всё известно, нормальная экосистема. Есть определенные ограничения и косяки, но они тоже, как правило, известны.
2. Scala - пытаются делать то же, что и в Haskell, но по причине родовой травмы, получается только на костылях и в инвалидной коляске. У особо умных личностей путём героических сражений с собственным инструментом и преодоления созданных им трудностей всё же получается что-то сделать (тот же cats или scalaz), но не пытайтесь повторять это дома, может оказаться опасно для мозга. К сожалению, все эти сложности не получается до конца изолировать даже на уровне библиотеки, поэтому даже воспользовавшись чем-либо готовым, вы всё равно рискуете хапнуть говна и повторить геройские подвиги сражения с языком, хотя, справедливости ради, уже в более лайтовой форме, чем авторы либ.
3. F# - онально огорожены и, как я уже писал выше, даже не пытаются делать то, что не поддерживается самой платформой .net. В итоге застряли на полиморфизме ранга-1, причем 13 лет назад, в течение которых все нововведения в язык сводились к синтаксическому сахарку и частным свистелкам-перделкам, которые, по идее, в любом нормальном языке могут быть реализованы на уровне макросов или, в крайнем случае, плагинов компилятора. inb4 MIT-лицензия и наличие mono не особо позволяют шарпу стать "открытым", это все равно, что говорить, что windows-only-говно не онально огорожено потому что есть wine
Содержательно. Спасибо.
Ну и да - будут ли с этого профиты? Получится ли это монетизировать в будущем?
Чтобы в будущем получать уже 300, например
>Haskell крут.
>Scala пытается быть такой же крутой.
Тогда почему вакансий Scala тысячи, а у Haskell десятки?
Haskell слишком крут. Очевидно же.
Такое же нинужно как и скала, тащемта.
1. Делаю обычный хеллоуворлд
2. scalac hello.scala
3. java Hello дает Error: Could not find or load main class Test
Да не поможет тебе бамп, скала нинужна, она умирает. Убогий тулинг, мешанина концепций, язык просто как куча разношёрстного барахла, да еще и на JVM.
Вон буружуи уже какие разговоры заводят:
https://www.quora.com/Is-Scala-a-dying-programing-language
Я не поверю, что человек который смог в монады будет кормить настолько жирного зелёного.
Что это за маня-фантазии? Сам рисовал? Открой репорт гитхаба, скала уже менее популярна, чем шелл-скрипты.
https://octoverse.github.com/
На коболе знаешь какие зп охуительные? Когда технология загибается, спеца найти становится сложнее и рынок готов предлагать большие зп, лишь кто-то был готов обмазываться и поддерживать уже накатанное.
Так ты работать собрался или на анонимных форумах для девочек анимешниц усираться?
Вот именно - работать, для второго есть скала.
Смотрю как надо сделать. Решаю сделать тоже самое, но с блекджеком с потоками. А хули нет?
В пятницу сделал, все выходные пробухал.
Щас посмотрел, что я сделал и обосрался. Всего пару дней прошло, а я уже забыл что и как я делал, пришлось 5 минут смотреть в экран, чтобы вспомнить.
НУЖЕН ПЕРЕКАТ
НУЖЕН ПЕРЕКАТ
НУЖЕН ПЕРЕКАТ
НУЖЕН ПЕРЕКАТ
НУЖЕН ПЕРЕКАТ
НУЖЕН ПЕРЕКАТ
инбифо: сам делай перекат
Это копия, сохраненная 16 сентября 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.