Сохранен 525
https://2ch.hk/pr/res/348165.html
Из-за проблем с продлением домена ARHIVACH.NET, с 13 октября он может перестать функционировать. В связи с этим Архивач временно переходит на использование прежнего домена ARHIVACH.NG.
Напоминаем, что сайт всегда доступен через Tor по адресу arhivachovtj2jrp.onion. Установите Tor Browser для беспрепятственного доступа!

Scala

 Аноним Вск 27 Апр 2014 15:07:06 #1 №348165 
1398596826057.png

В этом треде обсуждаем единственный нормальный язык для JVM.
Собираем хорошие книжки, фреймворки, и отправляем ньюфагов на курсеру https://class.coursera.org/progfun-004 пока идет новый курс

Loading...
Аноним Вск 27 Апр 2014 15:08:59 #2 №348166 

Какой же благородный дон станет писать на досуге на Scala или Clojure? Ведь всякие Scala, Clojure, F#, OCaml и прочие эрзацы нормальных языков програмирования нужны благородным донам только для того, чтобы использовать их работе, где им приходится считаться с мещанскими вкусами остальных работяг-програмистов. поэтому на досуге благородный дон будет пописывать на Хаскелле, Агде или Эпиграмме, и почитывать алгебраическую топологию или теорию категорий. А на Scala и Clojure на досуге пишут только некоторые представители люмпен-пролетариата, котрые подсмотрели это занятие за благородными донами на работе, и думают, что ритуальное копирование поведения благородного класса делает их самих благороднее.

Аноним Вск 27 Апр 2014 16:01:10 #3 №348171 
1398600070458.png

Их там джва.

Аноним Вск 27 Апр 2014 16:03:07  #4 №348173 DELETED

>>348171
А причем здесь р?

Аноним Вск 27 Апр 2014 16:04:31 #5 №348174 

>>348173
При том, что это курс по скале.

Аноним Вск 27 Апр 2014 16:09:46 #6 №348176 

>>348174
А причем здесь скала?

Аноним Вск 27 Апр 2014 16:14:26 #7 №348178 

>>348176
При том, что это скалатред.

Аноним Вск 27 Апр 2014 16:17:47  #8 №348180 DELETED

>>348178
Ну это хуй знает...

Аноним Вск 27 Апр 2014 16:21:21 #9 №348181 

>>348180
Так в заголовке треда написано.

Аноним Вск 27 Апр 2014 17:09:51  #10 №348206 DELETED

>>348181
А если бы там было написано "хуй"?

Аноним Вск 27 Апр 2014 17:56:43 #11 №348218 

>>348166
Какой же благородный дон станет писать на досуге на Haskell или Agda? Ведь всякие Haskell, Agda, Эпиграмм и прочие эрзацы нормальных языков програмирования нужны благородным донам только для того, чтобы использовать их работе, где им приходится считаться с мещанскими вкусами остальных работяг-програмистов. поэтому на досуге благородный дон будет пописывать на Java, C, PHP, и почитывать паттерны проектирования или теорию абстрактных фабрик. А на Haskell и Agda на досуге пишут только некоторые представители люмпен-пролетариата, котрые подсмотрели это занятие за благородными донами на работе, и думают, что ритуальное копирование поведения благородного класса делает их самих благороднее.

Аноним Вск 27 Апр 2014 18:22:04 #12 №348224 

>>348206
Мы бы знали кто такой ОП.

sageАноним Вск 27 Апр 2014 22:35:35 #13 №348303 

>>348218
хуйня, нисмищно братишь((

Аноним Пнд 28 Апр 2014 01:23:22 #14 №348348 

Нет, ну вы только гляньте на этого дибила >>348346. Скалатред висит на первой, а этот кретин засирает доску, создавая новый тред.

Аноним Пнд 28 Апр 2014 02:37:05 #15 №348363 

>>348348
Что ты разбушевался то так?
Алсо, этот курс как-нибудь без иде и прочей шуры-муры пройти? Аж блевать тянет от всей это хуйни.

Аноним Пнд 28 Апр 2014 06:15:11 #16 №348376 

>>348363
Ставь vim, как настоящий петух-даун.

Аноним Пнд 28 Апр 2014 09:02:07 #17 №348388 

>>348363
Вообще-то да. Редактировать можешь в чём угодно. Сабмитить в любом случае будешь из командной строки.

Аноним Пнд 28 Апр 2014 09:41:14 #18 №348402 

>>348165
Реквистирую годной литературы по Scala и всяким Scala-фрэймворкам.
Курсы на Coursera уже прошел

мимо скалаеб-ньюфаг

Аноним Пнд 28 Апр 2014 09:42:16 #19 №348404 

>>348402
actors in scala

sageАноним Пнд 28 Апр 2014 12:32:28 #20 №348426 

>>348363
Необходимо прочесть https://class.coursera.org/progfun-004/wiki/SbtTutorial
Код при этом прекрасно пишется в NPP/Sublime

Аноним Пнд 28 Апр 2014 13:22:07 #21 №348449 

>>348426
>NPP/Sublime
блять какой же ты убогий

Аноним Пнд 28 Апр 2014 13:27:34 #22 №348451 

> Just like "mostly secure," "mostly pure" is wishful thinking. The slightest implicit imperative effect erases all the benefits of purity, just as a single bacterium can infect a sterile wound.
гибридобляди соснулей

Аноним Пнд 28 Апр 2014 14:09:05 #23 №348459 
1398679745867.png

>>348303

Аноним Пнд 28 Апр 2014 14:17:46 #24 №348461 

>>348451
Ну ты же понимаешь, что это ваше чистое говно под названием хачкиль никому не нужно, кроме нескольких умственно-отсталых.

Аноним Пнд 28 Апр 2014 14:31:00 #25 №348468 

>>348461
Оно не чистое. Просто там грязь имеет свою маркировку IO.

Аноним Пнд 28 Апр 2014 19:56:47 #26 №348577 

вверх

Аноним Пнд 28 Апр 2014 21:40:32 #27 №348643 

Объясните, пожалуйста на словах, как решается третья задача со сдачей. Закодировать-то я закодирую сам, но вот мне бы ход решения понять.

sageАноним Пнд 28 Апр 2014 21:41:16 #28 №348644 

>>348643
текст задачи дай

Аноним Пнд 28 Апр 2014 21:44:02 #29 №348646 
1398707042898.png

В вашем посте присутствует слово из спам-листа

Аноним Пнд 28 Апр 2014 21:45:20  #30 №348648 DELETED

>>348646
Наверное degenerate

sageАноним Пнд 28 Апр 2014 21:45:59 #31 №348649 

>>348646
http://en.wikipedia.org/wiki/Generating_function

Аноним Пнд 28 Апр 2014 22:08:44 #32 №348667 

>>348643
Так решается в 10 строк, просто надо понять, как правильно рекурсивно вызывать функцию. подсказка: вызывать ее надо два раза.

sageАноним Пнд 28 Апр 2014 22:12:00 #33 №348671 

>>348667
аа понел
функция фибоначей же
ща попробую
спс)

Аноним Пнд 28 Апр 2014 22:12:20  #34 №348672 DELETED

>>348646
Ну смотри: у тебя есть список номинаций:
(1, 2, 5, 10, 20, 50)
И сумма такая типа 20.
Ты такой начинаешь типа с единички:
1 = 1 - мало, нужно добавить
1 + 1 = 2 - итд
1 * 20 = 20 - то, что нужно, первый способ дать сдачи нашли, запоминаем (у тебя будет вспомогательная функция в которой первым аргументом будешь таскать список списков - список способов дать сдачу, известных на текущий момент. Сперва он пустой).
дальше последнюю единицу убираем, а предпоследнюю заменяем на следующую деноминацию (2)
1 * 18 + 2 = 20 - нашли второй способ
убираем последнюю двойку, заменяем предпоследнюю единицу на двойку.
1 * 17 + 2 = 19 - мало
1 * 17 + 2 + 2 = 21 - двойку добавили, а не единицу, потому что все единицы у нас в начале, чтобы все комбинации проходить только один раз. МНОГО. Поступаем также как в случае с ровно 20, только такую комбинацию не запоминаем.
1 * 17 + 5 и тд

Аноним Пнд 28 Апр 2014 22:18:46 #35 №348674 

>>348671
Не понял твоей иронии, сажа-кун

Аноним Пнд 28 Апр 2014 22:21:04 #36 №348675 
1398709264021.jpg

>>348646
http://ideone.com/AIrsWn

Аноним Пнд 28 Апр 2014 23:24:45 #37 №348718 
1398713085981.png

Скажите, пожалуйста, что это за нахуй такой.
Скармливаю этому sbt проект, пишет, что проблема с кодировкой. Я ничего не перекодировал, каментов на русском в исходниках не писал, UTF-8 полностью должна совпадать с латинско однобайтовой. Ну ладно, хочет юникод, получит юникод, добавляю сигнатурку, запускаю ещё раз, а он снова не понимает. Хотел указать опцию -encoding, а он её не принимает; если указывать, например "-encoding=ANSI" при запуске sbt, то не запускается вообще, если при запуске test, пишет, что таких опци не знает. Кто-нибудь сталктвался с подобной проблемой? Как её решить?

Аноним Пнд 28 Апр 2014 23:33:43 #38 №348726 

>>348718
В чём редактируешь?
https://www.google.com/search?q=remove+utf-8+bom

Аноним Пнд 28 Апр 2014 23:49:57 #39 №348735 
1398714597098.png

Подождите, там что, все тесты хранятся локально? Т.е. я могу подправить их у себя и наебать систему?

Аноним Пнд 28 Апр 2014 23:57:03 #40 №348738 

>>348735
Немного тестов локально, но проверяется всё у них там на серверах.

Аноним Втр 29 Апр 2014 00:03:21 #41 №348741 
1398715401965.png

>>348426
Лектор ета тру прогромист. Косоглазие как у меня. Жми лейк, если скилл променял на зрение :-(

Аноним Втр 29 Апр 2014 01:41:54 #42 №348760 

>>348735
а ты курсы проходишь чтобы систему наебывать?

Аноним Втр 29 Апр 2014 11:53:59 #43 №348840 

А вы обратили внимание, что ведущий говорит с каким-то забавным акцентом?

Аноним Втр 29 Апр 2014 13:10:37  #44 №348872 DELETED

>>348840
Может это от того, что он француз с польской фамилией, а, нэйтив спичер?

Аноним Втр 29 Апр 2014 13:16:44 #45 №348877 

>>348872
Знал я одного туркмена с немецкой фамилией, так он по-русски говорил без малейшего акцента.

Аноним Втр 29 Апр 2014 13:19:06 #46 №348880 

>>348872
Но ведь он немец.

sageАноним Втр 29 Апр 2014 13:21:17 #47 №348883 

у меня знакомый немец а говорит по английски с русским акцентом

Аноним Втр 29 Апр 2014 13:23:14  #48 №348886 DELETED


>>348880
Ну немец так немец

Аноним Втр 29 Апр 2014 14:52:52 #49 №348924 

https://www.coursera.org/course/reactive
А этот курс будет повторён?

Аноним Втр 29 Апр 2014 16:44:04 #50 №348972 
1398775444101.jpg

>>348877
>турникмена

Аноним Втр 29 Апр 2014 17:26:31 #51 №349007 

>>348924
Конечно. Первый был пробным, с кучей багов и не даже не синхронизирован с актуальной версией скалы и акки, хотя и годным.

Аноним Втр 29 Апр 2014 17:40:45 #52 №349019 

>>349007
Что такое акки?

Аноним Втр 29 Апр 2014 17:47:45 #53 №349022 

>>349019
http://akka.io/

Аноним Втр 29 Апр 2014 17:49:51 #54 №349024 

>>349019
Попытка встроить эрланг в скалу

Аноним Втр 29 Апр 2014 17:52:16 #55 №349025 

>>349024
А как, встроили?

Аноним Втр 29 Апр 2014 18:03:14 #56 №349033 

>>349025
В ирлонге под акторов/процессы специально пилили VM и рантайм, а Акка - это hight-level реализация, так что конечно не то, но в целом, норм.

Аноним Втр 29 Апр 2014 18:58:24 #57 №349069 

>>349033
самый смак в том, что акторы в акке более производительны, чем в эрланге. хотя, мб, в эрланге в акторах не так много ограничений

Аноним Втр 29 Апр 2014 21:01:44 #58 №349141 

>>349069
Никогда не сравнивал их производительность, вполне возможно, так как в erlang copy-on-send (у каждого актора свой хип), а в scala shared memory с иммутабельными объектами.

Аноним Втр 29 Апр 2014 21:19:58 #59 №349154 

>>349141
https://incubos.org/posts/2014/04/18/jpoint/
интересная презентация по поводу акки

Аноним Втр 29 Апр 2014 22:05:32 #60 №349171 

>>349069
Ну еще бы бля, это вполне логично вытекает из того, что JVM быстрее как минимум в 10 раз. А на больших объемах данных и во все 100.

Аноним Втр 29 Апр 2014 23:47:34 #61 №349228 

>>349171
>JVM быстрее как минимум в 10 раз
быстрее чего? насколько я знаю, скала и эрланг крутятся на жвм. а то, что эрланг в конечном счете медленнее, чем скала - проблемы самого эрланга

sageАноним Втр 29 Апр 2014 23:50:04 #62 №349232 

>>349228
>Эрланг крутится на жвм
Ты ебанулся?
>>349171
Ну это вообще толстота

Аноним Втр 29 Апр 2014 23:50:20 #63 №349233 

>>349069
Хуйню сказал.
>>349228
>эрланг крутятся на жвм
Хуйню сказал x2 комбо.

Аноним Срд 30 Апр 2014 00:03:34 #64 №349239 

>>349233
предположение основано на презентации чувака с яндекса, смотри линк. тогда тем более возникает вопрос, почему нативный эрланг медлнее скалы на вм?

Аноним Срд 30 Апр 2014 00:07:41 #65 №349243 
1398802061332.jpg

>>349232
>Ну это вообще толстота

Аноним Срд 30 Апр 2014 00:12:49 #66 №349246 

>>349239
Начнем с того, что эрланг тоже на вм, но на другой.
>>349243
Закончим тем, что это бенчмарк-числодробилка, и поведения реальных приложений вроде серверов он не отражает никак (там потоки вообще используются-то?) Я очень рад, что жаба может быстро вычислять пи.

Аноним Срд 30 Апр 2014 00:25:55 #67 №349252 

>>349246
Хуй тебе мудак ебаный, этот бенчмарк вполне ясно отображает скорость стандартных операций с памятью. Таким образом в каких-то изъебистых рейскондишонс-конкуренси-ололо ситуациях будет не меньше вот этой задержки, плюс определенный оверхед. И в ирлонге оверхед будет в сто раз больше, т.к. копирование-хуирование, иммутабельность и т.д., таким образом ирлонг в любом случае просасывает по скорости выполнения, пусть даже его рантайм оптимизирован под какую-то хуйню вроде держания 1000000 соединений.

Аноним Срд 30 Апр 2014 00:45:31 #68 №349263 

>>349246
Мочератор - опущенец и чмо, анус себе забань
Вот тебе тест
>реальных приложений вроде серверов
http://www.techempower.com/benchmarks/#section=data-r6&hw=i7&test=query
Соснул Маня?

Аноним Срд 30 Апр 2014 00:52:31 #69 №349267 

>>349252
Ты список бенчмарков-то видел, ущербный? Мандельброт, пи, симуляция гравитационных орбит - какие нахуй стандартные операции с памятью? Числодробильня в чистом виде.
Смотри, единственный тест, который использует потоки.:
* ирлонг: http://benchmarksgame.alioth.debian.org/u32/benchmark.php?test=threadring&lang=hipe - 11.07 с на 50 миллионов;
* жаба: http://benchmarksgame.alioth.debian.org/u32/benchmark.php?test=threadring&lang=java - 253.80 c (!) на 50 миллионов отсосов.

Аноним Срд 30 Апр 2014 00:58:54 #70 №349268 

>>349267
>Числодробильня в чистом виде
Числа везде дробятся одинаково, разница из-за модели памяти.

>Смотри, единственный тест, который использует потоки.:
Их там каждый второй использует, петушок.
Присмотрись к исходникам http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=knucleotide&lang=java&id=1&data=u64q

Аноним Срд 30 Апр 2014 01:03:12 #71 №349273 

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

Аноним Срд 30 Апр 2014 01:05:50 #72 №349274 

>>349273
Просто у ирлонгопетушка ОТРИЦАНИЕ

Аноним Срд 30 Апр 2014 01:06:54 #73 №349275 

>>349274
Заебал, я не траль, правда не знаю.

!PM1LV2xuog Срд 30 Апр 2014 01:10:46 #74 №349277 

>>349273
соснёт в тестах => может соснуть в деле
не соснёт в тестах => ничего не значит
очевидно же

sageАноним Срд 30 Апр 2014 01:27:11 #75 №349279 
1398806831463.gif

Erlang > моча > говно > скала

Аноним Срд 30 Апр 2014 01:48:23 #76 №349288 

>>349279
Скала > Джява > моча > говно > мочератор > ирланг

sage!A/handsOmE Срд 30 Апр 2014 04:17:21 #77 №349315 

>>349288
>моча > говно
не обоснованно

Аноним Срд 30 Апр 2014 04:58:42 #78 №349321 

>>349267
Что делает этот тест?

Аноним Срд 30 Апр 2014 05:04:14 #79 №349323 

>>349315
Ловите еретика.

Аноним Срд 30 Апр 2014 11:02:50 #80 №349375 

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

Аноним Срд 30 Апр 2014 11:31:03 #81 №349382 

>>349267
Наркоман, этот тест ничего не делает, только лепит потоки. В ерланг используются т.н. green threads, а джява создаёт настоящие, нативные.

Аноним Срд 30 Апр 2014 11:31:15 #82 №349383 

>>349375
>Я ужаснулся от первого же задания, с треугольником паскаля. Вы обратили внимания, как он там выводится?
При выводе треугольника Паскаля проверяется функция вычисления одного элемента. Для вычисления всего треугольника, разумеется, лучше использовать другой алгоритм (в том числе и рекурсивный). И да, оптимизация однократно выполняемого теста, не особо нужная вещь.
>настолько же лютая хуита, рекурсивное вычисление ряда фиббоначи
Учитывая, что единственная цель примера была показать, какая рекурсия хвостовая, а какая - нет, абсолютно нормальный пример.
Преимущество рекурсивных алгоритмов начинает быть заметным с какого-нибудь quicksort, но он плох в качестве примера, ибо не тривиален сам по себе.

Аноним Срд 30 Апр 2014 11:59:12 #83 №349389 

>>349383
Меня на лабах заставили однажды делать итерационную или правильно "итеративную"? версию квиксорта.

sageАноним Срд 30 Апр 2014 14:29:43 #84 №349412 

синтаксис в сцале отвратительный
понравились только имплицитные методы

Аноним Срд 30 Апр 2014 15:50:29 #85 №349428 

>>349412
на вкус и цвет

Аноним Срд 30 Апр 2014 17:35:07 #86 №349457 

>>349375
Оно же для оче ньюфагов.

sageАноним Срд 30 Апр 2014 17:55:02 #87 №349460 

FYI:
тривиальная реализация треугольника паскаля с использованием бесконечномерных банаховых списков факториалов
http://ideone.com/PvS1x3

Аноним Срд 30 Апр 2014 20:23:28 #88 №349500 

>>348672
Напряжно как-то. Лучше SICP почитать.

Аноним Срд 30 Апр 2014 20:36:50 #89 №349504 

>>349500
Курс в принципе на SICP и основан.

Аноним Срд 30 Апр 2014 21:06:54 #90 №349505 

>>349504
Я про алгоритм вообще-то. У меня не получилось додуматься до рекурсивной формулы для размена, пришлось лезть в книгу.

Аноним Срд 30 Апр 2014 21:14:32 #91 №349507 

http://ideone.com/HZ9ZbP
Я думаю, олдфаги обосрутся в ужасе от моего решения. Но я сделал как смог. Получилось 4 рекурсивных вызова, а не 2.

sageАноним Срд 30 Апр 2014 21:34:56 #92 №349512 

>>349507
А что эта хрень делает?

Аноним Срд 30 Апр 2014 23:13:49  #93 №349526 DELETED

>>349500
Это как бы стандартная задача на поиск/перебор. Решишь 10 таких - будешь щелкать как орешки.

Аноним Чтв 01 Май 2014 00:27:01 #94 №349547 

>>349526
Давай еще девять.

Аноним Чтв 01 Май 2014 00:49:02 #95 №349557 

>>349547
http://acm.timus.ru/problemset.aspx?space=1&tag=dynprog

Аноним Чтв 01 Май 2014 01:30:33  #96 №349562 DELETED

>>349547
Еще одна стандартная - решение судоку.

Аноним Чтв 01 Май 2014 11:13:54 #97 №349613 

Почему при наличии рекурсии скала не может вывести тип, в то время, как хаскель, например, может?

Аноним Чтв 01 Май 2014 18:18:07  #98 №349722 DELETED

>>349613
Потому что в скале хуевый вывод типов

Аноним Чтв 01 Май 2014 18:52:41 #99 №349736 

>>349722
Но хаскель же опенсурсен, разработчики скалы могли бы просто посмотреть, как устроен вывод типов в хаскеле.

Аноним Чтв 01 Май 2014 20:13:48 #100 №349755 

>>349613
пример

Аноним Чтв 01 Май 2014 20:48:37 #101 №349765 

>>349755
scala> def sucks(x: Int) = if (x > 1) 2 else sucks(x)
<console>:7: error: recursive method sucks needs result type
def sucks(x: Int) = if (x > 1) 2 else sucks(x)
^

Аноним Чтв 01 Май 2014 20:49:40 #102 №349766 

>>349765
scala> def sucks(x: Int): Int = if (x > 1) 2 else sucks(x)
sucks: (x: Int)Int

Аноним Чтв 01 Май 2014 21:40:13 #103 №349775 

>>349765
>>349766
ну а сам догадываешься? или ты спрашиваешь, чтобы типо выебнуться знанием?

Аноним Чтв 01 Май 2014 21:51:05 #104 №349778 

>>349775
Как я могу выёбываться знанием факта, о котором ведущий чувак на курсере в первом или втором видео сказал?
Но он не сказал о причинах, меня это заинтересовало. Я не догадываюсь.

Аноним Чтв 01 Май 2014 22:08:15 #105 №349789 

>>349613
>при наличии рекурсии скала не может вывести тип
Поясни вот это. Что ты имеешь ввиду?

мимокрок

Аноним Чтв 01 Май 2014 22:15:36 #106 №349791 

>>349789
Вот это >>349765>>349766

Аноним Чтв 01 Май 2014 22:27:11 #107 №349800 

>>349778
ну тогда загугли как скала выводит типы и как хаскель. local\global type inference

Аноним Чтв 01 Май 2014 23:21:25 #108 №349822 

>>349736
Под ООП объекты напиши мне вывод типов.

Аноним Чтв 01 Май 2014 23:25:39 #109 №349825 

>>349791
чё впадлу int написать, да, сучка?

Аноним Птн 02 Май 2014 02:39:29 #110 №349848 

>>349791
Типа тип на явно указывать?

Аноним Птн 02 Май 2014 04:49:58 #111 №349859 

>>349848
Да. В рекурсивных функциях.

Аноним Птн 02 Май 2014 05:37:48 #112 №349861 

Java-бляди sosnooley. Нет стандартного класса Pair.
http://stackoverflow.com/questions/5303539/didnt-java-once-have-a-pair-class

Аноним Птн 02 Май 2014 09:10:12 #113 №349877 

>>349861
в крестах вон дохуя есть стандартного, токо все используют буст\хуюст\кутэ.

Аноним Птн 02 Май 2014 09:16:28 #114 №349879 

>>349877
У меня такой Reflection, что я назвал джаваблядью себя.

Аноним Птн 02 Май 2014 12:22:50 #115 №349896 

>>348675
Решал также, но
1) Внутренняя функция нафиг не нужна
2) Сопоставление образцов на лекциях не объяснялось
http://ideone.com/Coo7cd

Аноним Птн 02 Май 2014 15:47:31 #116 №349927 

>>349722
Можно и так сказать. Правда дело в том что для систем типов с наследованием еще не придуманы алгоритмы полного вывода типов. Не факт что это вообще можно сделать.

Аноним Птн 02 Май 2014 16:47:10 #117 №349937 

>>349877
далеко не все
boost - неудобный, а qt не нужен, если требуется нативный GUI а он требуется почти во всех серьёзных проектах, а если GUI нет, то не нужен вообще

Аноним Птн 02 Май 2014 20:33:14 #118 №349980 

>>349937
ну так пары так же нужны

Аноним Суб 03 Май 2014 22:19:49 #119 №350308 

>>349980
Да и программирование не нужно.

Аноним Суб 03 Май 2014 22:22:56 #120 №350309 

>>349937
Позволь я перефразирую:
boost - не нужен, а qt не нужен, если требуется нативный GUI не нужен, а если GUI нет, то не нужен вообще.

sageАноним Вск 04 Май 2014 02:35:32 #121 №350366 

>>348218
Это просто карго-культ какой-то.
А вообще, Scala не нужна, потому что есть Java.

вышла вторая неделя на курсе Аноним Пнд 05 Май 2014 22:32:31 #122 №350808 

и у меня уже 10/10
а как дела у вас?

алсо, ссу на этого >>350366 петуха.

Аноним Втр 06 Май 2014 00:35:29 #123 №350867 

>>350808
10/10
Но с map помучился, все думал, как изменить входящий сет.

Аноним Втр 06 Май 2014 01:04:44 #124 №350882 

>>350867
>Но с map помучился, все думал, как изменить входящий сет.
никак, потому что тогда нужна обратная функция, а её может не существовать, да и если даже существует — невозможно вычислить её

sageOLIMPIADKA Аноним Втр 06 Май 2014 02:46:22 #125 №350927 
1399329982187.png

сегодня мы решаем проблему остановки
на вход: скалопитушок
на выход: вывести '1' если он начнёт в будущем пользоваться полноценными фя, '0' в другом случае

решения на джяватм, COBOL® и тмC# должны сопровождаться детальными отчётами и документацией

sageАноним Втр 06 Май 2014 02:52:28  #126 №350928 DELETED

>>350927
Какаю тебе в рот.

Аноним Втр 06 Май 2014 02:54:49 #127 №350930 

>>350927

buditUzatNormFL :: ScalaPeetooh -> MozhetByt
buditUzatNormFL = const Nyet

main = do
sp <- read <$> getContents
print $ case buditUzatNormFL sp of
Nyet -> 0
Da -> 1
Аноним Втр 06 Май 2014 02:56:32  #128 №350931 DELETED

>>350930
Проиграл.

sageOLIMPIADKA Аноним Втр 06 Май 2014 02:58:59 #129 №350932 

>>350928
а может лучше какао

sageАноним Втр 06 Май 2014 03:06:56  #130 №350934 DELETED

>>350932
Какао-каки-какао, йе-йе!

sageАноним Втр 06 Май 2014 03:22:28 #131 №350938 

>>350930

class TestPeetooha petooh where
buditUzatNormFL :: petooh → MozhetByt

instance TestPeetooha ScalaPeetooh where
buditUzatNormFL = const Nyet

main = do
sp :: ScalaPeetooh ← read <$> getContents
print $ case buditUzatNormFL sp of
Nyet → 0
Da → 1
Аноним Втр 06 Май 2014 03:26:48 #132 №350939 

>>350927
Бедняга. У тебя даже своего треда нет, да? Ану брысь под шконку и не попадайся господам на глаза

sageАноним Втр 06 Май 2014 03:29:18 #133 №350940 

>>350939
не злитесь, господин!
я нашел видео которе вы просили

sageАноним Втр 06 Май 2014 03:33:34  #134 №350942 DELETED


#lang racket

(define budet-uzat-norm-lisp? (λ (nutyx) 'nyet))
(displayln (case (budet-uzat-norm-lisp? (read-line))
[('nyet) 0]
[('da) 1]))

Аноним Втр 06 Май 2014 03:59:59 #135 №350943 

>>350940
Это ты типа вайпаешь тред говном?

Аноним Втр 06 Май 2014 04:46:15 #136 №350945 

>>350940
Аноны, что я только что посмотрел? Что это за чудодейственное щелканье мышью и "указание" объектов? Это был C#?

ПХП_макак_испытал_культурный_шок

Аноним Втр 06 Май 2014 04:47:32  #137 №350946 DELETED

>>350945
Да

Аноним Втр 06 Май 2014 04:54:57 #138 №350947 

>>350946
Все это "рисование" объектов, я полагаю, значительно ускоряет работу? Есть что-нибудь в VS для командной разработки?

Аноним Втр 06 Май 2014 05:04:55  #139 №350949 DELETED

>>350947
Не знаю, я просто констатировал очевидное

Аноним Втр 06 Май 2014 10:43:19 #140 №350975 

п%o%ч%е%м%y э%т%o%м%y п%е%т%y%ш%к%y т%a%к б%o%м%б%и%т, ч%т%o o%н п%р%и%ш%ё%л с%р%a%т%ь в т%р%е%д к S%c%a%l%aT%M-г%o%с%п%o%д%a%м? м%o%ж%е%т б%ы%т%ь, е%г%o н%a%д%o з%a%б%a%н%и%т%ь, ч%т%o%б%ы o%н o%т%д%o%х%н%y%л и o%с%т%ы%л?

Аноним Втр 06 Май 2014 10:45:03 #141 №350976 

п_o_ч_е_м_y э_т_o_м_y п_е_т_y_ш_к_y т_a_к б_o_м_б_и_т, ч_т_o o_н п_р_и_ш_ё_л с_р_a_т_ь в т_р_е_д к S_c_a_l_aT_M-г_o_с_п_o_д_a_м? м_o_ж_е_т б_ы_т_ь, е_г_o н_a_д_o з_a_б_a_н_и_т_ь, ч_т_o_б_ы o_н o_т_д_o_х_н_y_л и o_с_т_ы_л?

так читабельней
алсо иди нахуй обезьяна со своим спам листом

Аноним Втр 06 Май 2014 14:21:56 #142 №351019 

>>348303
Зато правда. Из функциональных языков на практике используется разве что Erlang.

Аноним Втр 06 Май 2014 14:52:23 #143 №351026 

>>351019
расскажи об этом ребятам из яндекса

Аноним Втр 06 Май 2014 14:58:19 #144 №351028 

>>351026
А они что используют?

Аноним Втр 06 Май 2014 15:04:53 #145 №351031 

>>351028
scala

Аноним Втр 06 Май 2014 15:06:26 #146 №351032 

>>351028
https://incubos.org/

Аноним Втр 06 Май 2014 15:07:25 #147 №351033 

>>351031
Интересно. Я думал, что это академический язык, типа хаскеля. И что же они на скале делают в яндексе?

Аноним Втр 06 Май 2014 15:19:22 #148 №351035 

>>351033
линк в 351028

Аноним Втр 06 Май 2014 15:20:48 #149 №351036 

>>351033
довольно забавно, но в селектеле используют хаскелл. инфа легко гуглится

Аноним Втр 06 Май 2014 15:24:12 #150 №351037 

>>351033
Нет, скала это не говно борщехлебное типа хаскелля, это полноценный язык, на котором можно разрабатывать программы, т.к. скала может все то же, что и джява, и сверх этого.

Аноним Втр 06 Май 2014 15:48:51 #151 №351045 

>>351037
Но хаскель же от скалы отличается только тем, что в нём аргументы функции пишутся без скобочек и отделяются пробелом, в то время как в скале они пишутся в скобочках и отделяются запятыми.

Аноним Втр 06 Май 2014 15:59:19 #152 №351050 

>>350943
вайп уровня /pr/

Аноним Втр 06 Май 2014 16:02:52 #153 №351051 

Ребят, поясните по хардкору где используется вся эта модная мутотень вроде Go/Scala. Какие реальные проекты вы запилили на этих вундервафлях?

Не видел ни одного реального приложения на haskell.

Это сейчас такая мода упрощения формальных языков вроде Java в сторону скриптовых вроде python/ruby? В чем профиты? Чтобы быстро писать строготипизированные приложения со скоростью написания динамических скриптов?

sageАноним Втр 06 Май 2014 16:03:52 #154 №351052 

>>351045
>хаскель
>аргументы
>отделяются пробелом
В хаскеле у функции может быть только 1 аргумент. Также пробел там ничего "разделять" не может, так как он не выполняет функции разделителя (пробельного символа) а является оператором языка - находящееся слева от пробела используется как функция, справа как аргумент. Кстати одного пробела им мало, поэтому там используется их два вида.

Аноним Втр 06 Май 2014 16:05:24 #155 №351053 

>>351051
Зачем ты смешал все в кучу, как тебе теперь отвечать?Или ты считаешь, что хачкель — это что-то уровня руби?

sageАноним Втр 06 Май 2014 16:06:52 #156 №351054 

>>351052
let pitux = 351052

sageАноним Втр 06 Май 2014 16:10:50 #157 №351058 

>>351054
>et pitux =
Лоллировал с хаскипидора. Одна из причин что этот парашный язык никогда не будет использоваться в промышлености - то что один и тот же символ может иметь с десяток разных значений, в зависимости от контекста.

sageнайти элемент в массиве Аноним Втр 06 Май 2014 16:18:51 #158 №351061 

the programming language:
elemIndex

джяватм & сцалатм:


static int najtiElementVMassive(Object massiv,Object element){
if(massiv instanceof int[]) {
for(int i=0; i<((int[])massiv).length; ++i)
if(((int[])massiv)[i]==(int)element)
return i;
} else if(massiv instanceof byte[]) {
for(int i=0; i<((byte[])massiv).length; ++i)
if(((byte[])massiv)[i]==(byte)element)
return i;
} else if(massiv instanceof boolean[]) {
for(int i=0; i<((boolean[])massiv).length; ++i)
if(((boolean[])massiv)[i]==(boolean)element)
return i;
} else if(massiv instanceof char[]) {
for(int i=0; i<((char[])massiv).length; ++i)
if(((char[])massiv)[i]==(char)element)
return i;
} else if(massiv instanceof float[]) {
for(int i=0; i<((float[])massiv).length; ++i)
if(((float[])massiv)[i]==(float)element)
return i;
} else if(massiv instanceof double[]) {
for(int i=0; i<((double[])massiv).length; ++i)
if(((double[])massiv)[i]==(double)element)
return i;
} else if(massiv instanceof short[]) {
for(int i=0; i<((short[])massiv).length; ++i)
if(((short[])massiv)[i]==(short)element)
return i;
} else if(massiv instanceof long[]) {
for(int i=0; i<((long[])massiv).length; ++i)
if(((long[])massiv)[i]==(long)element)
return i;
} else {
try {
for(int i=0; i<((Object[])massiv).length; ++i)
if(sravnitMassivi(((Object[])massiv)[i],element))
return i;
} catch (Exception e) {
for(int i=0; i<((Object[])massiv).length; ++i)
if((((Object[])massiv)[i]).equals(element))
return i;
}
}

return -1;
}


static boolean sravnitMassivi(Object massiv1,Object massiv2) {
try {
if((((Object[])massiv1)).length!=(((Object[])massiv2)).length) return false;
boolean ravni=true;
for(int i=0; i<(((Object[])massiv1)).length; ++i)
ravni=ravni&&sravnitMassivi((((Object[])massiv1))[i],(((Object[])massiv2))[i]);
return ravni;
} catch (Exception e) {
if(massiv1 instanceof int[]) {
return Arrays.equals((int[])massiv1,(int[])massiv2);
} else if(massiv1 instanceof byte[]) {
return Arrays.equals((byte[])massiv1,(byte[])massiv2);
} else if(massiv1 instanceof boolean[]) {
return Arrays.equals((boolean[])massiv1,(boolean[])massiv2);
} else if(massiv1 instanceof char[]) {
return Arrays.equals((char[])massiv1,(char[])massiv2);
} else if(massiv1 instanceof float[]) {
return Arrays.equals((float[])massiv1,(float[])massiv2);
} else if(massiv1 instanceof double[]) {
return Arrays.equals((double[])massiv1,(double[])massiv2);
} else if(massiv1 instanceof short[]) {
return Arrays.equals((short[])massiv1,(short[])massiv2);
} else if(massiv1 instanceof long[]) {
return Arrays.equals((long[])massiv1,(long[])massiv2);
} else {
return massiv1.equals(massiv2);
}
}
}
Аноним Втр 06 Май 2014 16:47:00 #159 №351073 

>>351058
Щито?! Ты ебанутый что ли?

Аноним Втр 06 Май 2014 16:57:57 #160 №351078 

>>351061
дебил, что ли?
в Scala это делается в 1 строчку

Аноним Втр 06 Май 2014 18:53:43 #161 №351114 
1399388023986.png

>>351061

Аноним Втр 06 Май 2014 19:27:35 #162 №351126 

>>351033
Cкалапетухи - это жабамакаки нехт левела.

Аноним Втр 06 Май 2014 21:09:21 #163 №351154 

>>351061
А не пиздишь ли ты, петушок?

Аноним Втр 06 Май 2014 21:29:29 #164 №351161 

>>351061
>elemIndex
Хаскеблядок соснул.
indexOf на два символа короче.

Аноним Втр 06 Май 2014 21:34:30 #165 №351162 

Тем временем, поиск в массиве с помощью Scala делается в 1 выражении

http://ideone.com/er6Bgq

Аноним Втр 06 Май 2014 22:18:18 #166 №351172 
1399400298007.gif

Проиграл со скала-детей, которые не понимают суть проблемы джава компилятора.
ОП, но нахуя ты скале приписал эту проблему? В скале нет джава-литералов бай дефолт, только расширенные типы и имплиситы для совместимости с жаба-говном.


object Main extends App {
val array = List[Any]("String", 5, 'c')
println(s"indexOf: ${array.indexOf('c')}") // indexOf: 2
}
{/code]

>>351161
>Хаскеблядок соснул.
>indexOf на два символа короче
Шкала-ребенок не знает, что аналог indexOf в хачкиле является метод "!!", а elemIndex возвращает Option[Int] (Maybe Int), который более функциАнальный: None (Nothing) при пустом результате и Some (Just) при положительном.
Шкала-питухам, которые сравнивают божественный хачкиль со скало-подделкой, нужно ознакомиться с проектами https://github.com/scalaz/scalaz и https://github.com/milessabin/shapeless, написать закрытыми глазами реализацию базовых вещей из ТК и почувствовать боль из-за:
* огромного количества имплиситов
* неявный матчинг имплиситов и ебля с print'ом при сборке для дебага
* неявный лифтинг ненужного имплисита (как в spray и преобразование типов из UrlEncodedForm и MultipartForm, etc)
* нечитаемый код, когда речь идет о попытке писать как на haskell

Изучая скалу 2 года назад, я был рад ее возможностям, но при погружении в ТК, скалка больше походила на плюсы, нежели на ФЯП. Пришлось изучать хачкель, чтобы использовать без боли scalaz/shapeless/spray, но хачкель оказался намного лучше, чем скалапараша. Но и хакель сосет, если брать идрис, который может и в FFI, и в LLVM/JS/Java. Реализовать строгий, типобезопасный DSL типа LINQ на Idris - дело 5 минут. На скале такое не реализовать ибо фрактал отсоса.
Аноним Втр 06 Май 2014 22:21:53 #167 №351173 

>>351172
бля, проебал разметку.

Ну и в догонку, в Шлаке нет http://www.haskell.org/haskellwiki/GHC/TypedHoles. Отсос на отсосе.

Аноним Втр 06 Май 2014 22:24:12 #168 №351174 

>>351172
НИНУЖНО

Аноним Втр 06 Май 2014 22:29:40  #169 №351176 DELETED

>>351172
Зачем Теория Категорий в скале?
Нужны тайпклассы (но и с ними ебли хватает)

!!zunHIrSt Втр 06 Май 2014 22:38:14 #170 №351178 

>>351172
В Idris слишком мало ромбиков, стрелочек, миксфиксов и прочих джентельменских радостей. Ждём Agda 3: Practical Edition.

Аноним Срд 07 Май 2014 00:10:56 #171 №351202 

>>351173
Дырки в стиле агды — это скорее undefined. Только рефайна-то один хуй нет. Пиздец, как этого механизма не хватает после агды.

Аноним Срд 07 Май 2014 00:14:02 #172 №351204 

>>351178
>ромбиков, стрелочек,
Ну их нахуй.
>миксфиксов
К примеру https://groups.google.com/forum/#!topic/idris-lang/CyIazcoIN04

Аноним Срд 07 Май 2014 10:53:46 #173 №351292 

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

Аноним Срд 07 Май 2014 11:13:48 #174 №351294 

>>351292
Написал do - и хуячишь императивщину как на бэйсике каком-нибудь, никаких гланд и жопы, всё выглядит естественно и натурально.

Аноним Срд 07 Май 2014 11:19:28 #175 №351297 

>>351294
покажи мне эффективную реализацию quicksort на Haskell и потом покажешь, где там всё натурально и естественно

Аноним Срд 07 Май 2014 11:30:26 #176 №351303 

>>351294
>>351292
Ну и нахуй это надо, если ФЯП - круто, а императивщина - от лукавого? Нахуй эти костыли?

Аноним Срд 07 Май 2014 11:41:50 #177 №351304 

>>351303
В скале костыли. На курсере чувак на первой неделе рассказал про хвостовую рекурсию, а также показал, как некоторые из алгоритмов можно адаптировать под хвостовую рекурсию, вводя аккумулирующую переменную. На второй неделе он рассказал о новом костыле и показал вложенную функцию, благодаря которой ещё одна задача была подогнана под хвостовую рекурсию. Первые две недели ясно показывают, что ФП состоит не столько из решения непосредственно задачи, сколько из костылей, сводящих естественное и понятное решение к решению с хвостовой рекурсией в ущерб ясности кода.

Аноним Срд 07 Май 2014 12:35:30 #178 №351317 

>>351304
>производительный код состоит не столько из решения непосредственно задачи, сколько из костылей, сводящих естественное и понятное решение к решению с оптимизацией в ущерб ясности кода
поправил тебя

Аноним Срд 07 Май 2014 12:52:38 #179 №351319 

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

Аноним Срд 07 Май 2014 13:17:26 #180 №351326 

>>351317
Сначала у них ФУНКЦИОНАЛЬНОСТЬ ЧИСТОТА ДЕКЛАРАТИВНОСТЬ БЛИЗОСТЬ КОДА К ОПИСАНИЮ АЛГОРИТМА, а потом костыли и отмазки, мол, да я только на полшишечки, один раз не императивщик.

Аноним Срд 07 Май 2014 13:40:40 #181 №351332 

>>351319
да я в курсе, что такое хвостовая рекурсия
просто неясно выразился, так-то на маленьких данных и без хвостовой рекурсии код будет работать

>>351326
вообще-то, я имел в виду любое программирование
ты когда-нибудь видел код на С со всякими оптимизациями?

Аноним Срд 07 Май 2014 14:12:13 #182 №351335 

>>351332
А ты когда-нибудь слышал, чтобы сишники кричали, что они не рабы машины и пишут красивый декларативный код, который читается почти как описание алгоритма, который он реализует?

Аноним Срд 07 Май 2014 21:36:36 #183 №351485 

>>351335
Этот ебаный map... Зачем такие сложные задания для сраного введения в фп?

Аноним Срд 07 Май 2014 21:52:49 #184 №351489 

>>351485


def map(s: Set, f: Int => Int): Set = (x: Int) => exists( s, (y: Int) => f(y) == x )

>сложные задания
>решение в одну строчку на основе материала, приведённого в видео
Чувак, иди на питонокурс запишись, он для тебя сойдёт.
Аноним Срд 07 Май 2014 21:53:42 #185 №351492 

>>351335
ну код на С тоже можно писать красиво и понятно, не декларативно конечно, а императивно... не в стиле "мне бы бутерброд", а в стиле "сделай мне бутерброд, сучья машинка"
но после оптимизаций там обычно черты алгоритма уже не проглядывают
я вот об чём..

>>351485
ты вообще на какой ответ отвечаешь, лалка? и чем тебе map не угодил?

Аноним Срд 07 Май 2014 21:57:34 #186 №351493 

>>351492
>ты вообще на какой ответ отвечаешь, лалка? и чем тебе map не угодил?
Он походу просто в тред ответил, нажав на последний пост. Под мапом он, судя по всему, подразумевает домашку.

Аноним Срд 07 Май 2014 22:22:15 #187 №351500 

>>351489
Да я сам решил, нафига ж ты в тред решение запостил, лол. Может конечно это я туповат, но мне кажется что первые же задания все-таки дофига сложные.
Кстати, а на предыдущих сессиях они были те же? Немного не верится, что каждый пятый участник их прошел, учитывая что большинство вообще задания не трогает.
>>351492
Пардон, не заметил.

Аноним Срд 07 Май 2014 22:32:44 #188 №351504 

>>351500
>Может конечно это я туповат, но мне кажется что первые же задания все-таки дофига сложные.
Я не думаю, что они сложные. Они просто хитрые, они непривычны с точки зрения классического программирования, но все эти задания укладываются в рамки того, что чувак рассказывал на видео. Тут даже ничего изобретать не надо, просто найти что из того, что он рассказывал нужно подставить в данное место.

Аноним Срд 07 Май 2014 22:52:29 #189 №351509 

>>351500
>Пардон, не заметил.
задай мне тогда свои задания, попробую на лиспе для развлечения зделать

Аноним Срд 07 Май 2014 22:56:14 #190 №351512 

>>351485
ебать ты тугой

Аноним Вск 11 Май 2014 22:16:03 #191 №352496 

Бумп. У меня одного хуйня в сабах от 3.1?

Аноним Вск 11 Май 2014 22:17:22 #192 №352497 

>>352496
Ты глухой, штоле?

Аноним Пнд 12 Май 2014 03:21:03 #193 №352548 
1399850463845.png

>>348165
говорят, у вас весело тут

Аноним Пнд 12 Май 2014 04:09:15 #194 №352550 

Является ли строка моноидом?

ОП Пнд 12 Май 2014 18:41:21 #195 №352674 
1399905681211.png

>>352550
да

алсо я уже получил 10/10 за третью неделю, а кто ещё не успел — сасайте

Аноним Пнд 12 Май 2014 18:49:15  #196 №352676 DELETED

>>352550
Пизда твоей мамаши моноид относительно операции засовывания хуйов

!!zunHIrSt Пнд 12 Май 2014 20:51:01 #197 №352705 

>>352550
Строки с конкатенацией мало того, что образуют моноид, так ещё и свободный - всем моноидам моноид: http://en.wikipedia.org/wiki/Free_monoid.

Аноним Пнд 12 Май 2014 21:53:00 #198 №352724 

>>352705
насколько полезно задрочить абстрактную алгебру?
будет круче код писаться?

Аноним Пнд 12 Май 2014 22:58:02  #199 №352736 DELETED

>>352724
Асбтрактная алгебра для души, а код для поддержания штанов.

Аноним Втр 13 Май 2014 04:18:29 #200 №352789 
1399940309875.png

>>348165
говорят, у вас весело тут

Аноним Вск 18 Май 2014 22:41:48 #201 №354144 
1400438508545.png
Аноним Вск 18 Май 2014 23:03:03 #202 №354157 

>>354144
Ну охуеть теперь, у кого не бывает. Лучше бы зарепортил там, пидор. Исправили бы да спасибо сказали.

sageАноним Вск 18 Май 2014 23:10:44 #203 №354163 

> class Square extends Square with cococo-cococo
гавнищетм

Аноним Вск 18 Май 2014 23:20:08 #204 №354165 

>>354157
Уже четвёртая итерация курса. Хотели бы исправить, давно бы уже исправили.

Аноним Срд 21 Май 2014 13:18:21 #205 №354881 

>>348672
Котоны, пишу из вопрос-треда. А как можно решить подобную задачу, таким образом, чтоб она выдала мне все списки размена, с обозначенным количеством монет как я описал здесь >>354871 ?

Аноним Срд 21 Май 2014 13:28:13 #206 №354884 

>>354144
Что не так? Могут ведь.

Аноним Срд 21 Май 2014 13:40:27  #207 №354892 DELETED

>>354881
После нахождения всех списков убрать те у которых длина не четыре?

Аноним Срд 21 Май 2014 13:42:09  #208 №354894 DELETED

>>354884
После can используется инфинитив без to
В слове contains -s лишняя

Аноним Срд 21 Май 2014 14:21:37 #209 №354900 

>>354894
А, вы об этом. Но ведь всем похуй.

Аноним Чтв 22 Май 2014 18:53:48 #210 №355257 

Как использовать Slick в Akka?

Аноним Птн 23 Май 2014 20:24:41 #211 №355590 
1400862281341.png

Почему ошибка?

sageАноним Птн 23 Май 2014 20:26:38 #212 №355591 

>>355590
скобку забыл
уёбищный синтаксис..

Аноним Птн 23 Май 2014 20:37:29 #213 №355593 
1400863049599.png

>>355591
>пок пок пок
А так работает

sageАноним Птн 23 Май 2014 20:44:48 #214 №355597 

>>355593
молодец
отличный солюшен

Аноним Птн 23 Май 2014 20:52:30 #215 №355603 

>>355597
саси пидераст

sageАноним Птн 23 Май 2014 20:54:51 #216 №355604 
1400864091475.gif

>>355603
я вот так хочу

весело тут у вас Аноним Вск 25 Май 2014 12:28:14 #217 №355842 
1401006494437.png

20/20 с первой попытки
учитесь, пока я жив

Аноним Втр 03 Июн 2014 01:53:41 #218 №358738 
1401746021552.png

>>355842
лучше поздно, чем никогда

анаграммы йоу нигга Аноним Суб 14 Июн 2014 13:40:40 #219 №361498 
1402738840383.png

наконец-то выходные
и снова 10/10 с первого раза
а как дела у вас?

Аноним Суб 14 Июн 2014 22:35:44 #220 №361636 
1402770944582.png

>>361498
все хорошо, братишка. спасибо, что напомнил про scala :3

оо да детка Аноним Вск 15 Июн 2014 05:05:52 #221 №361673 
1402794352177.png

оо да детка

Аноним Вск 15 Июн 2014 11:18:53 #222 №361687 

>>361673
>05:05:52
няш, ты хоть спать иногда ложись

оо да детка Аноним Вск 15 Июн 2014 16:47:35 #223 №361760 

>>361687
ну я поспал потом
problem, officer?

Аноним Вск 15 Июн 2014 19:55:53 #224 №361860 


trait hasId[C] {
val id: C
}

class Cache[T <: hasId[C], C] {

var cache = Map[C, T]()

def put(obj: T) =
cache += (obj.id -> obj)
}

case class Prime(id: Long, v: Long) extends hasId[Long]


val cache = new Cache[Prime, Long]
cache.put(Prime(0, 2))
cache.put(Prime(1, 3))


Скаланы, поясните, может ли избавить от второго параметра С в джинерике? Зачем мне его указывать явно, если я и так наследую от hasId[Long]? Хочу что-то вроде

class Cache[T <: hasId[C]] {...}
val cache = new Cache[Prime]

Аноним Вск 15 Июн 2014 20:31:51 #225 №361871 

>>361860
>+=
не канонично

Аноним Вск 15 Июн 2014 20:48:15 #226 №361881 

А что значит + и - в генериках?

Аноним Вск 15 Июн 2014 22:15:05 #227 №361903 

>>361881
http://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science)

Аноним Пнд 16 Июн 2014 15:56:01 #228 №362029 

>>361860
Сделал в итоге


trait hasId {
val id: Any
}


но осадок остался.
Аноним Пнд 16 Июн 2014 22:18:12 #229 №362125 

>>362029
ты о чём вообще, наркомант?

Аноним Срд 25 Июн 2014 14:07:18 #230 №364519 
1403690838263.jpg

БАМП

Аноним Птн 27 Июн 2014 16:54:52 #231 №365186 

Кто-нибудь сталкивался с макросами?

Аноним Суб 28 Июн 2014 11:57:32 #232 №365391 

>>365186
Как прльзователь — да, но писать их не осилил, в Clojure это проще гораздо...

Аноним Вск 29 Июн 2014 04:36:07 #233 №365659 

>>365391
В 2.11 годнота, с квазикавычками стало намного проще. Вот, например, макрос, конвертирующий список в case class:



def listToCaseClassImpl[ClassType: c.WeakTypeTag](c: Context)(lst: c.Expr[List[Any]]) = {

import c.universe._

val tpe = weakTypeOf[ClassType]
val decls = tpe.decls
val ctor = decls.collectFirst
{ case m: MethodSymbol if m.isPrimaryConstructor => m}.get
val params = ctor.paramLists.head
val companion = tpe.typeSymbol.companion

val typs = params.map(p => p.typeSignature)
val vals = (1 to typs.length).map(x => TermName(s"v$x"))
val patt = vals.zip(typs).map{case (v, t) => pq"$v: $t"}

q"""
$lst match {
case List(..$patt) => $companion(..$vals)
case _ => throw new Exception("Wrong input list")
}
"""
}
Аноним Вск 29 Июн 2014 22:32:34 #234 №365863 

>>365659
Пример использования?

Аноним Вск 29 Июн 2014 22:48:55 #235 №365868 

>>365391
можешь у меня спросить ответы

Аноним Вск 29 Июн 2014 23:14:50 #236 №365872 

>>365863
Из sql базы берешь строку и мапишь на case class. Макрос раскрывается в что-нибудь вроде


row match {
case List(id: v1, v2: String, v3: Int) => User(v1, v2, v3)
case _ => throw new Exception("Wrong input list")
}

Аноним Пнд 30 Июн 2014 10:59:00 #237 №365947 

>>365872
В чём профит по сравнению с "обычной" сериализацией? Или не обычной, а scala pickling

Аноним Пнд 30 Июн 2014 15:12:11 #238 №366014 

Кто знает хороший материал по implicits? С примерами и юз кейсами?

Аноним Пнд 30 Июн 2014 16:08:11 #239 №366038 

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

Аноним Пнд 30 Июн 2014 16:13:43 #240 №366040 

>>366014
Гугл, очевидно.

Аноним Пнд 30 Июн 2014 19:02:48 #241 №366090 

>>366014
Тайпклассы

Аноним Вск 06 Июл 2014 01:33:34 #242 №367709 

Как сделать такой код работать http://ideone.com/N8rFHa

!!zunHIrSt Вск 06 Июл 2014 03:57:29 #243 №367799 

>>367709
Указать явно тип C, или, если он тебе на самом деле не нужен, вообще убрать C: http://ideone.com/Sz0suu

Аноним Вск 06 Июл 2014 04:17:31 #244 №367805 

>>367799
В том-то и дело, что мне нужны оба типа (и контейнера и его содержимого)

!!zunHIrSt Вск 06 Июл 2014 05:23:13 #245 №367818 

>>367805
Ну что ж, тогда придётся расчехлять борщемагию: http://ideone.com/TGJ6vk

Аноним Вск 06 Июл 2014 06:22:49 #246 №367823 

>>348165
http://www.slideshare.net/extempore/keynote-pnw-scala-2013
скала всё. Учите хаскель.

Аноним Вск 06 Июл 2014 15:38:38 #247 №367886 

>>367823
Дал бы все видео тогда уж

Аноним Вск 06 Июл 2014 15:46:21 #248 №367889 

>>367818
Борщемагия сработала! Спасибо

Аноним Вск 06 Июл 2014 19:00:16 #249 №367944 

>>367886
50 минут. А слайды пролистать минут 15 максимум.

Аноним Вск 06 Июл 2014 19:20:43 #250 №367949 

>>367944
Вся суть этих видео не знал. 10 минут для кококо посмотрите кто я такой и чем занимался, 20 минут на не смешные шутки, 10-15 на слайды, 5 на вопросы.

Аноним Пнд 07 Июл 2014 02:30:32 #251 №368080 

>>367823
нет практического применения, нет IDE, нет библиотек...

Аноним Пнд 07 Июл 2014 03:01:58 #252 №368086 

>>367709
Что за пиздец ты понаписал, уважаемый?

Аноним Пнд 07 Июл 2014 14:48:24 #253 №368184 

>>368086
Хочу примерно такой код, чтобы работала последняя строчка (предпоследняя работает) http://ideone.com/gxMsl8

Аноним Пнд 07 Июл 2014 18:40:32 #254 №368268 

>>367709
Тип С должен быть контравариантным.

Аноним Пнд 07 Июл 2014 18:42:01 #255 №368270 

>>368268
Не С, а Q.
бысторфикс

Аноним Пнд 07 Июл 2014 19:26:01 #256 №368285 

>>368268>>368270
Проблему уже давно решили (>>367818). И она не в вариантности, а в отсутствии автоматического вывода типа C компилятором (потому что он не встречается в списке параметров).

Аноним Втр 08 Июл 2014 19:42:00 #257 №368687 

Стоит ли изучать скалу, если в моём мухсранске нет контор, которые с ней работают? Знаю Java, понравились лямбды и потоки в восьмёрке, но хотелось бы попробовать какой-нибудь функциональный язык.
И ещё, как у неё с потреблением памяти, настройкой jvm? Можно ли задеплоить нехитрое веб-приложение в 128MB?

sageАноним Втр 08 Июл 2014 19:46:24 #258 №368689 

>>368687
мало, для ЙВМ нужно минимум 300 мб оперативы + 4 мб за каждую строчку программы для стабильной работы

Аноним Срд 09 Июл 2014 00:17:10 #259 №368872 

>>368687
Для нехитрого лучше что-нибудь другое выбрать. А задеплоить можно.

Аноним Срд 09 Июл 2014 00:26:48 #260 №368874 

>>368689
>4 мб за каждую строчку
Можно подробней про это?

sageАноним Срд 09 Июл 2014 00:50:51 #261 №368876 

>>350927
бамп ;D

Аноним Срд 09 Июл 2014 01:09:52 #262 №368879 

единственно годный язык наданный момент. годный как самый передовой, самый динамично развивающийся. посмотрите в новыз версия макросы... это нечто. функциональная парадигма.. это не то с чего тут стоить начинать. после жабы.. а до этого после С++.. скала доставила, стал лучше понимать плюсы, больше нелюбить жабу. Пишите на енй. в жопу засуньте питон. если не хватает моджо начинать с с++, а стоит начать именно с этого языка, то скала это единственное что остается. тренд среактивным прогарммированием и кучей плюх идущих из коробкт делает так что и один в поле воин. да, можно писать в одного сложные вещи. никакого боилерплейт кода.. язык силен. ещё... ещё можно посмотреть на Ди и немерл, там сильное метопрограммирование. но скала не хуже. и здесь именно кодить, не зарабатывать лавэ.. не ставьте себе никогда такую цель как деньги, при таких раскладах невохможно сделать ничего. скалу не используют в продакшн.. ну есть да.. тиньков, експн, зоичбнк, и так по мелочи.. это не ентерпрайс пока.. её боятся. т.к. люди которые щас пишут на яве - 99% долбаебов. и очкуют что не вывезут проект на скале.
но для скиллсета маст хэв.равно как и с++, и всё что будет заставлять вас думать.. а не живать сопли с кенгуру, интеграцией, батчем.. и прочим хмл адом..

sageАноним Срд 09 Июл 2014 01:13:02 #263 №368881 

>функциональная парадигма
л&л
сцалатм есть оопущенство с 1-2 функциональных фич, не более

sageАноним Срд 09 Июл 2014 01:56:52 #264 №368895 

>>368879
Все что на jvm годным не может быть. Никогда.

Аноним Срд 09 Июл 2014 02:07:50 #265 №368899 

>>368881
>>368895
Ух как раскукарекался.

Аноним Срд 09 Июл 2014 02:08:19 #266 №368900 

>>368879
Двачую адеквата

Аноним Срд 09 Июл 2014 02:44:17 #267 №368910 

>>368881
Двачую адеквата. Скала - это ООП с ёба-типами, к ФП она не имеет никакого отношения. Единственный профит от Скалы в том, что махровое быдло в скалу таки не может, поэтому гораздо больше шансов попасть в адекватную команду, чем в случае джавы, например.

sageАноним Срд 09 Июл 2014 03:00:02 #268 №368916 

>>368910
Если быдло не может в скалу, то значит ты попадешь в команду чсвшных долбоебов, которые ололо осилили новую дилду. Шило на мыло.

Аноним Срд 09 Июл 2014 03:19:42 #269 №368924 

>>368916
ЧСВ-шные долбоёбы, которые могут что-то осилить, всяко лучше ЧСВ-шных долбоёбов, которые уже нихуя не могут. Впрочем, et dixisti, ебись с джавистами, если ты хочешь.

Аноним Срд 09 Июл 2014 05:11:45 #270 №368932 
1404868305239.gif

>>368881
> функциональных фич
Огласите весь список.

Аноним Срд 09 Июл 2014 11:44:43 #271 №368960 

Объясните, чем трейт отличается от абстрактного класса.
В учебнике говорится, что трейт как интерфейс, но может включать определения методов и поля. Но это же тогда получается абстрактный класс.

Аноним Срд 09 Июл 2014 11:51:22 #272 №368962 

>>368960
Нахуй абстрактные классы, ебашь всё на трейтах.

Аноним Срд 09 Июл 2014 12:58:45 #273 №368968 

без дживээма...
ебаште нахуй буст, или пишите под одну платформу.

один хуй.. либо с++ либо скала.

Аноним Срд 09 Июл 2014 13:52:04 #274 №368979 

>>368960
Асбтрактный класс может иметь конструктор, а трейт нет. Абстрактный класс совместис с джавой, а трейт совместим, только если не содержит код реализации.

Аноним Срд 09 Июл 2014 14:59:54 #275 №368997 

>>368979
Трейт это как миксины в руби как я понимаю.

мимокрок

Аноним Срд 09 Июл 2014 15:15:37 #276 №369003 

>>368997
Да, но с парочкой небольших нюансов.

Аноним Чтв 10 Июл 2014 00:42:40 #277 №369116 

можно как-то сделать отдельную реализицаю джинерика для конкретного типа? То есть, скажем, есть class Box[T] { ... }, я хочу сделать отдельную реализцию для Box[Int] { ... }. Так, чтобы при создании new Box[Int] использовалась она, а для других, общая?

Аноним Чтв 10 Июл 2014 03:20:49 #278 №369131 

>>369116
это тебе не крестовый шаблон.

Аноним Чтв 10 Июл 2014 13:12:12 #279 №369196 

>>368285
Да видел я, просто изменение вариантности требует меньше изменений в коде. И, конечно, оно делает не то что задумано, хотя с такой пиздоватой постановкой задачи принимается любое изменение после которого код начинает компилироваться.
>>368687
Зачем тебе скала, крутящаяся на ёбаной JVM? Попробуй хаскель, я серьёзно. Он более чистый, для знакомства с ФП подойдет лучше. Если совсем по-хардкору угорать, бери Idris.
>>369116
Можно изменять поведение класса/метода в зависимости от переденного типа (без рефлексии). Смотри неявные параметры и CanBuildFrom в коллекциях.

Аноним Чтв 10 Июл 2014 14:35:45 #280 №369215 

>>369196
> Если совсем по-хардкору угорать
бери Unlambda

Аноним Чтв 10 Июл 2014 15:29:30 #281 №369225 

>>369196
>пиздоватой постановкой задачи
Вот я нормально описал >>368184 Не понял как поможет изменение вариативности

Аноним Чтв 10 Июл 2014 17:47:21 #282 №369260 

>>369215
Это уже эзотерика какая-то. Idris позиционируется для язык общего назначения. Кстати, именно о недостатках языков общего назначения, а не о скале как таковой, говорилось в >>367823. Так что
>скала всё. Учите хаскель.
чушь, хаскель такой же.
>>369225
Никак не поможет. Я отвечал именно на >>367709.

Аноним Чтв 10 Июл 2014 20:08:12 #283 №369301 

>>369260
>чушь, хаскель такой же.
Обоснуй.

Аноним Чтв 10 Июл 2014 20:48:51 #284 №369311 

>>369301
От обоснуя слышу!

Аноним Чтв 10 Июл 2014 21:56:18 #285 №369332 

>>369311
Хорошо, убедил, теперь я признаю, что Хаскель такое же дерьмо как Скала.

Аноним Чтв 10 Июл 2014 23:39:03 #286 №369358 

заебали.всё познается в сравнении.
хаскел... вы ебу дались.. у кого он в продакшине???)))))
есть С, 40% опенсорса на нем, перепроверьте.. че уж.
с++, жаба, скала..
долго рассказывать всё.. но похуй.
системное программирование. на с++ протатипирование проекта пиздарулю, жизнь слишком коротка что бы писать на с++, в одного - это важно.
но на скале в одного можно ебануть внатуре.
на жабе хмл ад. хелловорд от учетной системы не будет отличать почти.. если это JEE. но блять...
кто знает три и больше языков со статистической типизацией... ну скажите, что вам скала не доставляет???
ФП лишь бонус.. он к месту и в С++ и в Скала. с ним удобно. да, это лисп и не хаскел и слава богу. Питон.. зуй сосет, на нем только деплойные скрипты щас пишут))))))
есть Д и Немерл.. не крутил их, не время ещё для них.
но в Скала есть всё. Всё! быстро. удобно.учить её.. хз, я вот не учил её, просто пишу на ней читая стековерфлов.
одна проблема, как и писал выше.. очкуют джависты от неё.. но они и яву то не до большого понимают. я когда после явы открыл для себя АОП, а потом либы нашел для С++ АОПные.. и начал их использовать все охуели))))))))

спрашивают:
что выберешь пистаь хуево и что бы мы понимали и сопровождали код, или охуенно и что бы мы нихуя не поняли?

мнения разошлись, пришлось искать работу.
..а хаскель учить для чегото большего стоит, чем что бы его промить на бордах потом. понимаете???
ну где он хорошо, в каком таком проме вы его пользуете????

Аноним Чтв 10 Июл 2014 23:41:16 #287 №369360 

но к скале бонусом он ой как нужен
(хаскел)

sagesomewhat related Аноним Чтв 10 Июл 2014 23:55:11 #288 №369369 
1405022111868.jpg

>>348165
<- скала говна

Аноним Птн 11 Июл 2014 04:06:10 #289 №369423 

>>369196
> Смотри неявные параметры и CanBuildFrom в коллекциях.
Можешь какой-нибудь пример привести? А то насколько я понял CanBuildFrom занимается несколько другим делом.

Аноним Птн 11 Июл 2014 11:33:22 #290 №369446 
1405064002877.jpg

Пишу-на-Scala-за-деньги-кун врывается в тред.

Аноним Птн 11 Июл 2014 11:57:49 #291 №369451 
1405065469952.jpg

>>369446

Пишу на работе на Скале уже больше 3-х месяцев и вот, что могу сказать: я разочарован.
С одной стороны Скала недостаточна наворочена для борщей (текущие абстракции над JVM и, как частный случай, порезанный type inference), с другой - ещё не готова для интерпрайза.
Последняя моя боль: нерабочий рантайм рефлекшон в 2.10. Ну то есть он как бы есть, но бляха-муха непотокобезопасен от слова совсем. А как, блять, без рефлекшона сделать либу для автоматического маппинга модели в БД - хз. Руками писать маппер - про такое даже в убогом Java мирке забыли уже году в 2001-м.

Аноним Птн 11 Июл 2014 12:07:15 #292 №369454 
1405066035523.jpg

>>369451

Как следствие - убогие либы для работы с БД.
Вот ты такой модный хипстер хочешь складывать case классы в MongoDB. У тебя там конечно плоская модель со 100500 полями, поэтому вручную маппить модель в DBObject - влом. И ты думаешь, святые рэйбэны, case class это же по сути иммутабельная мапа, значит должно идеально ложиться на Mongo-объекты.
А хуй тебе.
case class это блять кортеж, и чтобы проинспектировать его в виде ключ-значение нужон рефлекшон. Чудненько, а где он? А нет его, он, блять падает с ебическими ошибками при параллельном использовании до Scala 2.11, под которую нихуя библиотек ещё не скомпилено.
От такого рождаются ущербные огрызки вроде этой либы:

https://github.com/novus/salat/

Кто смотрел, как она инспектирует классы в рантайме, тот в цирке не смеётся. Основная идея - а давайте отреверсинжинирим как скаловский компилятор 2.10 производит байткод и напишем свой костыль для рефлекшона по мотивам. Бажный и неподдерживающий львиную долю случаев. Проще сказать, что поддерживает.

Нахуй так жить, пацаны?

Аноним Птн 11 Июл 2014 12:53:53 #293 №369457 
1405068833123.jpg

>>369454
Кореш, я пришел в тред из гуманитарного мира и не знаю, что такое reflection и не понимаю, о чем ты пишешь, но:
> складывать case классы в MongoDB

case class Credentials(login: String, agent: String)
object Credentials {
import play.api.libs.json.Json
implicit val rR = Json.reads[Relation]
implicit val rW = Json.writes[Relation]
}

object AgentAdminRelation {
def db = ReactiveMongoPlugin.db
def relationColl = db.collection[JSONCollection]("relations")
def add(relation: Credentials) = relationColl.insert(relation)
}

Аноним Птн 11 Июл 2014 13:09:48 #294 №369464 

>>369457

Рефлешкон это когда ты лезешь внутрь объекта или класса и смотришь, что там внутри.

Интересно. Как этой фигнёй воспользоваться в не-Play проекте? Если можно, список maven или sbt зависимостей.

Аноним Птн 11 Июл 2014 13:17:17 #295 №369465 

>>369464
http://mandubian.com/2013/02/21/play-json-stand-alone/

Аноним Птн 11 Июл 2014 13:18:37 #296 №369466 

>>369464
>Build.scala

object Dependencies {
...
... = "org.reactivemongo" %% "reactivemongo" % "0.10.0"
... = "org.reactivemongo" %% "play2-reactivemongo" % "0.10.2"
}

Аноним Птн 11 Июл 2014 13:18:37 #297 №369467 

>>369457

Судя по докам это работает через макросы 2.10. Хорошо, почти идеально. Но:

Json Macros are known to accept Option/Seq/List/Set & Map[String, _]. For other generic types, test and if not working, use traditional way of writing Reads/Writes manually.

У меня в case class'ах есть поля scala enum-ы, java enum-ы и просто POJO. С ними что делать?

Аноним Птн 11 Июл 2014 13:21:37 #298 №369468 
1405070497375.jpg

>>369467
>use traditional way of writing Reads/Writes manually?

Аноним Птн 11 Июл 2014 14:42:24 #299 №369485 
1405075344291.png

>>369468
>use traditional way of writing Reads/Writes manually

Это же нихрена не смешно. Вот какого вида структуры мне нужно пихать в Монго:

val loanInfo = LoanInfo(
lineNumber = 42L,
loanBalance = LoanBalance(
originalLoanAmount = "10.00",
currentPandIPaymentAmt = "10.01",
unpaidPrincipalBalance = "10.02",
pAndIPaymentAmount = "10.03",
interestRate = "10.04"
),
loanSchedule = LoanSchedule(
pAndICalcPaymentPeriod = "",
interestCalcBasisDaysInYear = "201",
closingDate = "22/02/2022",
firstPaymentDueDate = "04/04/2030",
nextPaymentDueDate = "15/07/2021",
nextPmtDate = "18/12/2020",
maturityDate = "19/12/2023"
),
rawData = "really raw data",
loanNumber = "loan-numbr",
dealId = "deal-42",
dealScheduleId = "deal-schedule-42",
originatorLoanNumber = "orig-loan-nmbr",
prevServicerLoanNumber = "prev-servcr-loan-numbr",
debtCategory = "impromptu",
debtType = "unbearable",
amortizationType = "none",
term = "300",
balloon = "big and red",
investorLoanNumber = "investr-loan-numbr",
investorCode = "invstr",
investorPool = "swimming",
boardingFile = new BoardingFile, //TODO: is this field really needed?
errors = List(
new BoardingError()
.setId("error 1 ID")
.setDealScheduleId("deal-schedule-42")
.setOriginatedInBoardingFileId("file 1 ID")
.setFixedInBoardingFileId("file 2 ID")
.setLoanNumber("loan-numbr")
.setErrorField("error field 1")
.setLineNumber(42)
.setErrorType(ErrorType.FIELD_TOO_LONG)
.setErrorMessageTokens("shoop", "da", "whoop")
.setOriginalValue("original value")
.setCorrectedValue("corrected value")
.setFileType(BoardingFile.Type.M_FILE),
new BoardingError()
.setId("error 2 ID")
.setDealScheduleId("deal-schedule-42")
.setOriginatedInBoardingFileId("file 1 ID")
.setFixedInBoardingFileId("file 2 ID")
.setLoanNumber("loan-numbr")
.setErrorField("error field 2")
.setLineNumber(42)
.setErrorType(ErrorType.FIELD_TOO_SHORT)
.setErrorMessageTokens("ding", "dong")
.setOriginalValue("valeur originale")
.setCorrectedValue("valeur correcte")
.setFileType(BoardingFile.Type.B_FILE)),
borrowers = List(
new Borrower() {
setFirstName("John")
setMiddleName("Robert")
setLastName("Doe")
setSuffix("Dr.")
setSsn("4188")
setFico("32")
setDateOfBirth("22/02/1989")
setDateOfDeath("22/02/2100")
setNationality("Zimbabwe")
setEmailAddress("[email protected]")
setMailingAddress(new Address() {
setMailingAddressLine1("SUITE 5A-1204")
setMailingAddressLine2("799 E DRAGRAM")
setCity("TUCSON")
setState("AZ")
setZip("85705")
setCounty("County?")
})
setPhoneNumbers(List(
new Phone() {
setType(Phone.Type.HOME)
setNumber("+1-541-754-3010")
},
new Phone() {
setType(Phone.Type.WORK)
setNumber("+49-89-636-48018")
}))
}))

Аналогичная структура на Java с помощью Spring Data Mongo персистится без ручного петушения.

Аноним Птн 11 Июл 2014 14:46:48 #300 №369487 
1405075608421.jpg

>>369466

Благодарю.

Аноним Птн 11 Июл 2014 16:06:29 #301 №369522 

>>369301
Они оба задумывались как языки общего назначения.
А на хаскеле возможно и поприятнее писать, сказать не могу, опыта работы с ним не имею, только в пейперцах код видел да факториалы писал.
>>369451
>недостаточна наворочена для борщей
>порезанный type inference
Вообще не связанные вещи.
А скала как раз таки очень навороченная:
http://apocalisp.wordpress.com/2010/06/08/type-level-programming-in-scala/
https://github.com/milessabin/shapeless
И это только абузы системы типов, что, очевидно, для "борщей" интереснее всего.
>не готова для интерпрайза
Да, есть недоработки, но она так же не готова как и мейнстримные языки. Если у тебя есть какие-то серьёзные инфраструктурные проблемы со скалой в 2014, то ты скорее всего не до конца в чем-то разобрался или не посмотрел все альтернативы.
>>369423
Похожую технику можно применить и для твоих целей. Может быть вечером код напишу.

Аноним Птн 11 Июл 2014 16:23:00 #302 №369525 

>>369522
>А скала как раз таки очень навороченная

Говорят да.
Ты scalaz использовал? Я использовал и вот это мне сильно мешало:
http://stackoverflow.com/questions/3689407/disadvantages-of-scala-type-system-versus-haskell
The big difference is that Scala doesn't have Hindley-Milner global type inference and instead uses a form of local type inference, requiring you to specify types for method parameters and the return type for overloaded or recursive functions.

Настолько, что высокоуровневый код превращается в говно и рулетку типа "угадай где компилятор заставит тебя написать тайп-параметр, а где - выведет автоматом".

Видел исходники scalaz? Нечитаемая параша и Scala-костыли. Это не функциональщина, это ода человеческой способности приспособиться к любой хуете и реализовать в ней любимые монадные трансформеры. Жму руку авторам, гвозди бы делать из таких людей.

Аноним Птн 11 Июл 2014 16:27:20 #303 №369527 

>>369522
>Если у тебя есть какие-то серьёзные инфраструктурные проблемы со скалой в 2014

Непотокобезопасный runtime reflection в 2.10 это достаточно серьёзная проблема?

Аноним Птн 11 Июл 2014 19:15:35 #304 №369557 

>>369527
Разве рефлексия всё ещё не эксперементальная фича?

Аноним Птн 11 Июл 2014 19:47:15 #305 №369569 

>>369527
в 2.11 починили

Аноним Птн 11 Июл 2014 20:19:09 #306 №369584 

Как юзать либо скомпилированную под скалу 2.10 в скале 2.11 или обязательно рекомпилить?

Аноним Суб 12 Июл 2014 12:06:46 #307 №369731 
1405152406511.jpg

>>369584
>обязательно рекомпилить?

Никто не знает, даже Одерски, даже Аллах.
Попробуй, хуле.

Аноним Суб 12 Июл 2014 12:10:17 #308 №369732 

>>369557

Её уже используют сторонние либы, потому что без этого вообще некоторые вещи не сделать. Пример:

https://github.com/websudosuk/phantom

Под 2.11 не скомпилена.

Аноним Пнд 14 Июл 2014 13:33:25 #309 №370171 

>>369423
http://ideone.com/0K54nw
Вот что-то такое я имел в виду.
>>369525
Да, использовал и код видел. Согласен что повсюду ScalaJVM-костыли. Но тут дело в том что Scalaz это не совсем Scala-way чтоле. Не нужно пытаться на писать на скале как на хаскеле, она задумывалась именно как микс ФП и ООП, отсюда и проблемы с выводом типов кстати.
>>369732
Странно упрекать инфрастуктуру скалы в том что кто-то использует эксперементальные фичи. Это же как бы это только плюс, что у тебя есть возможность их использовать. На свой страх и риск конечно же. Если этот вариант не подходит, используй проверенные методы.
>Под 2.11 не скомпилена.
Ты сомневаешься что скомпилят? Если прям срочно нужно, скомпиль сам, будь мужиком блеать.

Аноним Срд 23 Июл 2014 16:46:22 #310 №372314 

Какую IDE посоветуете для Scala? Я так понял, выбирать приходится только из плагина eclipse и плагина jetbrains, может я что-то упустил?

Аноним Срд 23 Июл 2014 17:16:34 #311 №372323 

>>372314
> плагина jetbrains

Аноним Срд 23 Июл 2014 18:14:47 #312 №372344 

>https://class.coursera.org/progfun-004

Как часто они проводят курсы? Просто я уже выбрал Future Sessions, мне отказаться и пройти старый?

Аноним Срд 23 Июл 2014 18:59:15 #313 №372366 

>>372344
Раз в год примерно. Да.

sageАноним Срд 23 Июл 2014 20:55:18 #314 №372411 

>>372314
IDEA сама-по-себе намного приятнее, но вот поддержка сцалы в ней куда хуже, чем в ScalaIDE (плагин для Eclipse).

Аноним Чтв 24 Июл 2014 00:11:21 #315 №372475 

>>372411
Ну даже не знаю. Перешел на идею год наза, после пары месяцев в эклипсе. Тогда плагин для скалы в ней был лучше, да и вообще как IDE эклипс мне не понравился после MSVS. Как сейчас не знаю, слышал что хорошо улучшили, да и в идеевском плагине нашел очень серьёзные глюки, вплоть подвешивания идеи намертво.

Аноним Чтв 24 Июл 2014 18:33:40 #316 №372679 

>>372344

Алсо, как быстро они проверяют мои решения? Отправил им Getting Started Assignment, когда ждать ответ? Или проверка у них там ручная, и проверяют только во время идущей сессии, а в остальное время шлют на йух?

sageАноним Птн 25 Июл 2014 06:07:17 #317 №372881 

сцялатм-кодер Веня нашёл на корпоративном сервере старые инсталляшки Agda и Coq, которые сисадмин просто позабыл удалить. Он установил их себе и стал коммитить в главную ветку тексты, подсмотренные в комментариях у сеньор-девелоперов: «Inductive nat = zero | succ nat», «Theorem A1: forall x: nat, x != succ x», «f {A : Set}». Получалось невпопад, и код переставал компилироваться, поэтому Вене таки удалось обратить на себя внимание сеньоров. Глава QA после первого же неудавшегося билда пояснил происходящее в письме всей группе разработки, потом заскочил в офис к кодеру и окропил бодрой струёй мочи его самого и его компьютер. Другие разработчики тоже последовали его примеру, а потом заблокировали ему доступ в главную ветку, и сцялатм-кодер Веня остался сидеть перед сгоревшим компьютером, без доступа к главной ветке и воняющий мочой сеньоров-CS-ников.

Аноним Пнд 28 Июл 2014 00:23:12 #318 №373620 

идея норм, лучше чем еклипс, не в скале дело вашпе)).
ч тут ещё писали...
а! сыра для продакшена. блеать, мужики .. я конечно хуй знаю, вы наверно счастливые люди, а мне везет как утопленнику... вот прод на жабе.. называется: Ебать в жопу этот мобильный телефон!!!.. там айбиэмный мажоный сапп... и всякое железо типо: ояебенею.. но ..код, сука.. код писали уёбы.. причем код тех АПИ которое мы пользуем, собственно и наш код от этого жестко воняет. ..переписать бы части, но если бы сказали.. чувак.. выбери любой язык, я бы спп выбрал.. ибо, если нужно волшебство то только на С++ его можно вырубить. .. ява после спп выглядит как шлюха, которую трахнут и бросят. скала после жабы - доставляет. но с++ мерещется навсегда.. хоть это и не гемдев у нас..

Аноним Пнд 28 Июл 2014 00:28:00 #319 №373621 

или переписать на хранимках..
до эти гуру по тюнингу БД сука миф... нет их. не существует.
конечно может како-нить зуеплет пригнать за сумму с 4мя 0ми ..в уши нассать.. в БД так и останется мертвой. т.ч .и зранимки до определенного обьема данных..
дальше.. дальше какие-то гугло-прихваты(извраты).. либо MPI буста.. типо того

сука блядь пиздец Аноним Срд 30 Июл 2014 23:42:40 #320 №374357 

Когда в тесте использую json4s для сериализации объекта, то не завершается Future по отправке сообщения.

Код типа:

val req: String = makeRequest("authorize", Map("login" -> "admin", "password" -> "123"))
client.send(req) // Future timeout, хотя на сервер все приходит.

Если взять сгенерированную строку и отправить напрямую, то все работает. Как это вообще может быть связано, блядь?

Аноним Чтв 31 Июл 2014 00:35:29 #321 №374365 

>>374357
Без полного кода ничего сказать нельзя

Аноним Чтв 31 Июл 2014 02:05:57 #322 №374384 

>>374365
Такая херня происходит, если конектиться в beforeEach, если в самом тесте, то все нормально. Конекчусь в beforeEach, создаю клиента var client, его потом использую в тесте. В качестве клиент использую netty.

Аноним Чтв 31 Июл 2014 02:10:46 #323 №374385 

>>374384
Хотя нет. Немного поменяешь код и опять та же хуйня. ЕБАТЬ БЛЯДЬ СУКА ПИЗДЕЦ

Аноним Чтв 31 Июл 2014 03:03:50 #324 №374394 

>>374385
Короче, я добрался до корня зла. В недрах модуля hookup такой код:


def send(message: OutboundMessage): Future[OperationResult] = {
if (isConnected) {
val f = channel.write(message).toAkkaFuture.future
} else { ...


toAkkaFuture:


implicit def channelFutureToAkkaFuture(fut: ChannelFuture) = new {

def toAkkaFuture(implicit context: ExecutionContext): Promise[OperationResult] = {
val res = Promise[OperationResult]()
fut.addListener(new ChannelFutureListener { // это уже методы netty
def operationComplete(future: ChannelFuture) {
if (future.isSuccess) {
res.success(Success)
} else if (fut.isCancelled) {
res.success(Cancelled)
} else {
res.failure(future.getCause)
}
}
})
res
}
}


Так вот. Несмотря на то, что в toAkkaFuture этот Promise завершается, future.isComplete остается false. Такое ощущение, что завершается он в отдельном треде, чего быть не должно, но какого хуя? Как такое может получиться? Почему так получается, когда я начинаю использовать json4s, который вообще потоки не использует?
sageАноним Чтв 31 Июл 2014 19:37:27 #325 №374540 

>>374394
Этот hookup оказался лютой парашей. Оцените хотя бы метод connect: https://github.com/backchatio/hookup/blob/master/src/main/scala/io/backchat/hookup/client.scala#L195

Один val t = Await.result(af, 5 seconds) чего стоит

#scala #macros #reflection Аноним Втр 05 Авг 2014 22:18:38 #326 №375823 
1407262718907.png

Почему companion равен none, если кейс класс определен внутри метода? Это баг или фича? Как обойти? Напрямую конструктор вызвать нельзя, только через компаньона.

Аноним Втр 05 Авг 2014 23:16:23 #327 №375839 

>>375823
макрос покажи

Аноним Втр 05 Авг 2014 23:52:47 #328 №375851 

>>375839
http://pastebin.com/Gmxgn9Zi

Аноним Срд 06 Авг 2014 05:29:46 #329 №375900 

>>375851
Изъебнулся в итоге через комбинацию макросов и жабьей рантайм рефлексии, но пиздец, ебал я этой джавы рот.
http://pastebin.com/u3D94HDR

Аноним Срд 06 Авг 2014 16:56:54 #330 №375974 

>>375900
Все равно отсос. Если класс объявляется внутри другого класса, то для создания внутреннего класса потребуется передать в его конструктор указатель на объект внешнего. То же и для рефлексии, поэтому там для полноценной рефлексии внутренних классов с доступом к объекту-компаньону сделан отдельный апи, который инициализируется указателем на объект внешнего класса. То же, по-видимому, и с макросами. Это еще куда ни шло, в большинстве случаев это указатель доступен, но самый отсос начинается, когда класс объявлен внутри анонминой функции кода, передаваемой в функцию с вызовом по имени (именно так вызываются тесты в scalatest), потому что тогда создание класса потребуется указатель на эту анонимную функцию, которого нет. Средствами скалы получить такой указатель, как я понял, нет возможности.

http://pastebin.com/58P66wRZ

Аноним Срд 06 Авг 2014 17:24:38 #331 №375990 

>>375974
мб ты не знаешь, но в жабе nested static & non-static классы. возможно, ты не совсем понимаешь, что тебе надо

http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

Аноним Срд 06 Авг 2014 17:35:54 #332 №375994 

>>375990
Мне надо, чтобы я мог объявляется кейс классы внутри тестов, а не выносить их в одну кучу за пределы тестов.

Аноним Срд 06 Авг 2014 18:22:02 #333 №376006 

>>375974
чувак я завтра посмотрю вчера сегодня я никакой
что тебе надо опиши я завтра с утра напишу

Аноним Срд 06 Авг 2014 19:18:05 #334 №376019 

>>376006
Мне надо, чтобы можно было делать вот так:


class TestOrm extends WordSpecLike {
"ORM" must {
"select" in {
case class Yoba(id: Int, color: String)
orm.select[Yoba]() // тут рефлексия над Yoba
}
"support boolean" in {
case class Yoba(id: Int, butthurt: Boolean)
orm.select[Yoba]() // тут рефлексия над Yoba
}
"support nullable" in {
case class Yoba(id: Int, text: Option[String])
orm.select[Yoba]() // тут рефлексия над Yoba
}
}
}


Пока что ради рефлексии приходится выносить всех йоб в отдельный объект и тогда будет либо Yoba, YobaBoolean, YobaNullabe, либо test1.Yoba, test2.Yoba, test3.Yoba, оба вариант говно.
Аноним Срд 06 Авг 2014 20:37:14 #335 №376034 

>>376019
Параметрический полиморфизм и ClassTag\TypeTag (или какой-то собственный класс типов, не знаю что тебе нужно от рефлексии) еще не проходили?

Аноним Срд 06 Авг 2014 20:52:33 #336 №376037 

>>376034


object TestRefl {
def instantiate[T](args: Any*): T = ???
def run(f: => Unit) = f
}

object Run extends App {
import TestRefl._

run {
case class Yoba(size: Int, color: String)
assert(instantiate[Yoba](10, "yellow") == Yoba(10, "yellow"))
}
}


Предлагаю тебе самому пробовать и заполнить вопросики. Можешь добавить TypeTag, ClassTag, заюзать макросы.
Аноним Срд 06 Авг 2014 21:32:16 #337 №376057 

>>376019
методы добавить чтоле?

Аноним Срд 06 Авг 2014 22:07:05 #338 №376063 

>>376057
Не. Вот суть проблемы >>376037. ORM-ка должна динамически создавать экземпляры кейс класса. Но пока я наткнулся на некоторые ограничения, если объявлять кейс классы внутри анонимных функций (какими являются тесты в scalatest). Ограничения я описал здесь >>375974

Аноним Срд 06 Авг 2014 23:20:32 #339 №376074 

>>376063
хорошо, теперь понятно, завтра посмотрю

Аноним Чтв 07 Авг 2014 12:52:38 #340 №376164 

>>376037
>Предлагаю тебе самому пробовать и заполнить вопросики. Можешь добавить TypeTag, ClassTag, заюзать макросы.
Зачем тебе эти изъёбства с объявлением классов в функциях? Убери их оттуда, сделай один класс, и используй
>Параметрический полиморфизм и ClassTag\TypeTag
чтобы не было Yoba, YobaBoolean, YobaNullabe, а был один Yoba[T].

Аноним Чтв 07 Авг 2014 15:18:05 #341 №376192 

>>376164
сделай вот так, заменяя первоначальную макру http://pastebin.com/N3ZmLFXd

Аноним Чтв 07 Авг 2014 16:16:56 #342 №376212 

>>376192
Ожидаемо не работает. Конструктор таким наивным способом не вызвать.
Error:(12, 27) not found: value misc.TestPickling.Yoba
TestMacro.method[Yoba].map(List(1, 2))
^
>>376164
Как вариант, но придется а) дополнительно трахаться с удаляемым типом, иначе TestMacro.method[Yoba[String]].map(List(1, 2)) не вызывает ошибки даже в рантайме б) не позволяет объявить йобу с другим количеством полей.

Аноним Чтв 07 Авг 2014 19:04:08 #343 №376251 

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

Аноним Чтв 07 Авг 2014 19:18:22 #344 №376252 

>>376251
Хм! А ведь и правда работает. Я просто тестировал твой код не в лямбде, а так просто. В лямбде все действительно работает. Охуенно, спасибо! Сейчас попробую заюзать.

Аноним Птн 08 Авг 2014 20:40:16 #345 №376531 

Посоны, как вы запоминаете все эти иероглифы?
http://stackoverflow.com/questions/7888944/scala-punctuation-aka-symbols-and-operators

Аноним Птн 08 Авг 2014 21:47:36 #346 №376545 

>>376531
да похуй пиши какие хочешь, если не скомпилиться то ИДЕ поменяет всё

Аноним Птн 08 Авг 2014 22:04:41 #347 №376549 
1407521081279.png

>>376531
Можно ещё своих сколько угодно наделать, ну и использовать не только ascii, а всякие хитровыебанные символы юникода.

Аноним Птн 08 Авг 2014 22:42:39 #348 №376557 
1407523359991.png

>>376549
Вся суть

Аноним Птн 08 Авг 2014 23:40:16 #349 №376567 

Какую ORM лучше использовать со скалой? На джяве использовал гибернейт + спринг орм.

Аноним Суб 09 Авг 2014 00:33:31 #350 №376574 

>>376567
slick лучший походу, потому что живой.
скала-активрекорд тоже ок, но давно не обновлялся, и только для скалы 2.10
скурл тоже норм
скалалайкждбси для дибилов.

Аноним Суб 09 Авг 2014 16:21:09 #351 №376667 

>>376531
Изи. В нормальных библиотеках в символьных названиях операторов есть система. Попиши 2 недели на скале и удивишься как просто это запоминать.
>>376557
Это вообще-то не оператор, а обычный синтаксис для лямбд.

Аноним Суб 09 Авг 2014 16:33:54 #352 №376671 

>>376574
http://manuel.bernhardt.io/2014/02/04/a-quick-tour-of-relational-database-access-with-scala/

Аноним Суб 09 Авг 2014 16:36:12 #353 №376672 

>>376574
>slick

Но это же не ОРМ.

Аноним Суб 09 Авг 2014 20:24:20 #354 №376721 

>>376671
>>376574
Ок, спасибо. Тогда ещё вопрос: что использовать для жсона и декларативного кэширования (вместо spring+ehcache)?

Аноним Суб 09 Авг 2014 22:14:20 #355 №376746 

>>376672
не далеко ушёл, и очень удобен.

>>376721
для жэйсона используй json4s,
для кэширование экэш продолжай использовать


Аноним Вск 10 Авг 2014 00:16:15 #356 №376776 
1407615375490.png

Кто-нибудь может объяснить, что это за ебаная параша (SBT: org.scala-lang:scala-library:2.10.4), которая заменяет все зависимости в модуле на себя каждый раз после перезагрузки идеи?

sageАноним Вск 10 Авг 2014 01:06:02 #357 №376788 

>>376776
Всё, разобрался

Аноним Вск 10 Авг 2014 21:21:52 #358 №376995 

>>376788
Что же это?

Аноним Вск 10 Авг 2014 22:53:34 #359 №377023 

>>376995
Какого-то хрена вылезла настройка сборки в sbt, хотя проект изначально создавался для maven (видимо из стороннего проекта sbt проекта, который я сначала подключил в виде модуля, а потом убрал). Эта настройка тянула за собой sbt-and-plugins, который тянул за собой сабж, который почему-то считал, что его одного хватит на весь проект. Вообще, в идее у меня постоянно какая-то хуерга с проектами, то ли из-за моих кривых рук, то ли из-за джетбрейнсов.

Аноним Пнд 11 Авг 2014 11:47:45 #360 №377070 

>>377023
Не используй говноплагины для ИДЕИ и не делай проект руками.
Используй плагин для sbt - sbt-idea, генери проекты с его и только с его помощью. Это к тому же еще и даёт переносимость проекта между ИДЕ при использовании VCS, не все любят именно IDEA.

Аноним Пнд 11 Авг 2014 12:10:57 #361 №377075 

Я тут понял что лучше кложуры только julia

Аноним Пнд 11 Авг 2014 19:41:51 #362 №377182 

>>377075
И что в них хорошего?

Аноним Втр 12 Авг 2014 20:32:53 #363 №377479 

Скаланы, подскажите, как сделать. Вопрос даже не по скале, а по архитектуре. У меня при старте программы выгружаются из базы всякие объекты, допустим, в класс-хранилище Storage. Потом где-то в самой жопе иерархии акторов создается актор, которому нужно это хранилище. Как передать это хранилище? По цепочке конструкторов убого. Слышал, можно применить каке-патторн. Но все равно получается цепочка, по которой нужно передавать это хранилище. Как быть?

Аноним Срд 13 Авг 2014 10:32:29 #364 №377609 

>>377479
так и делай, это называется депенси инжекшн

Аноним Срд 13 Авг 2014 11:53:53 #365 №377626 

>>377479
1) Передавать через конструкторы нормально, может у тебя просто слишком глубокая иерархия акторов.
2) Можно сделать это хранилище глобальным, применив кейк-паттерн и унаследовав глобальный объект от Storage (и всех остальных сервисов).
3) Если это не подходит (есть ты хочешь разграничить доступ к хранилищу или у тебя их несколько), можно сделать один актор, который будет раздавать хранилища по требованию. Но все равно нужно как-то получить ссылку на него: опять же или через конструктор, или из глобального объекта, либо связываться с ним через ActorSystem.actorSelection (тогда путь к нему должен быть известен заренее, и я не помню точно как оно в кластере работает).

Аноним Срд 13 Авг 2014 19:40:09 #366 №377751 

Посоны, полез смотреть scala и akka, но не совсем понял как работает сетевой IO. Кому не лень, дайте листинг такого tcp сервера:
Пакеты делим нулевым байтом;
Получил пакет - отправил его обратно;

Благодарочка.

Аноним Срд 13 Авг 2014 22:00:51 #367 №377777 

>>377751
http://pastebin.com/ZBbQbCYy
Ток вместо нулевого байта, я использовал '_' чтобы тестить через неткат

Аноним Чтв 14 Авг 2014 00:30:00 #368 №377811 

>>377777
>case x if x == ByteString('_') => Some(left, ByteString.empty)
можно удалить

Аноним Чтв 14 Авг 2014 15:42:54 #369 №377982 

>>377777
Простите за глупые вопросы, но не понимаю, что происходит в SimplisticHandler.

Допустим пришло "11111_22", а потом "222_". В ответ нужно послать "11111" и "22222".

Где хранится "22"?

Много магии, погружение происходит болезненно.

Аноним Чтв 14 Авг 2014 15:48:11 #370 №377984 

>>377982
создай там структуру хэшмап или масив и там храни

Аноним Чтв 14 Авг 2014 16:12:37 #371 №377992 

>>377982
>Где хранится "22"?
>def receiveBs(bs: ByteString): Receive = {
в bs. Вот я комменты написал, если что непонятно, то спрашивай. http://pastebin.com/JxLDjiWa

Аноним Чтв 14 Авг 2014 17:56:04 #372 №378016 

>>377982
пример с context.become:


// код с мутабельным значением
class Counter extends Actor {
var count = 0
def receive = {
case "incr" => count += 1
case "get" => sender ! count
}
}

// аналогичный код с context.become
class Counter extends Actor {
def counter(n: Int) = {
case "incr" => context.become(counter(n + 1))
case "get" => sender ! n
}
def receive = counter(0)
}


По запросу incr увеличивается счетчик, по запросу get отдает значение
Аноним Чтв 14 Авг 2014 18:57:31 #373 №378044 

>>377982
http://doc.akka.io/docs/akka/current/scala/io-tcp.html

Аноним Чтв 14 Авг 2014 20:12:42 #374 №378078 

>>377992
>>378016
>>378044

Спасибо.

Правильно я понял, что:

def receiveBs(bs: ByteString): Receive
Возвращает замыкание, которое хранит ссылку на bs?

context.become() переопределяет поведение receive?

Аноним Чтв 14 Авг 2014 20:27:30 #375 №378082 

>>378078
Да, именно так

Аноним Птн 15 Авг 2014 01:48:34 #376 №378185 

>>378016

class Counter extends Actor {
def counter(n: Int) = {
case "incr" => context.become(counter(n + 1))
case "get" => sender ! n
}
def receive = counter(0)
}

Не понимаю, почему counter возвращает функцию.

Аноним Птн 15 Авг 2014 02:17:22 #377 №378194 

>>378185
Потому что


{
case "incr" => context.become(counter(n + 1))
case "get" => sender ! n
}

это частичная функция, которая принимает единственный аргумент строку и возвращает ничего. В типах скалы это PartialFunction[String, Unit]. Аргумент сразу отправляется в паттерн-матчинг. То есть counter возвращает функцию, которую актор потом использует для обработки входящих данных. Можно создавать свои:

val pf: PartialFunction[Int, String] = {
case 1 => "1"
case 2 => "2"
case _ => "hui znaet chto"
}

pf(1) // "1"


Очень полезная вещь. http://www.scala-lang.org/api/current/scala/PartialFunction.html
Аноним Птн 15 Авг 2014 06:14:30 #378 №378220 

>>378194
А чем PartialFunction[String, Unit] отличается от String => Unit?
мимо

Аноним Птн 15 Авг 2014 09:03:14 #379 №378228 

>>378220
Можно делать как-то так

val pf: PartialFunction[Int, String] = {
case 1 => "1"
case 2 => "2"
}

List(1,2,3,4,5,4,3,2,1) collect pf // List("1", "2", "2", "1")
Аноним Птн 15 Авг 2014 11:46:18 #380 №378263 

>>378194
Автоматический вывод типа сильно замедляет чтение.

Пробую скормить REPL конструкцию типа

def counter(n: Int) = {
case "a" => n + 1
case "b" => n - 1
}

получаю ошибку error: missing parameter type for expanded function

Кстати, онлайн REPL для Scala - http://www.simplyscala.com/

Аноним Птн 15 Авг 2014 13:37:29 #381 №378282 

>>378263

ага, понял, правильно

def counter(n: Int): PartialFunction[String, Unit] = {
case "a" => n + 1
case "b" => n - 1
}

Аноним Птн 15 Авг 2014 16:16:12 #382 №378340 

>>378220
У партиал фанкшон есть метод isDefinedAt(o: Any): Boolean, который говорит тебе, определена ли функция для конкретного агрумента. Потом частичные функции можно компбинировать через orElse: (pf1 orElse pf2)(someShit). Плюс еще дополнительные методы http://www.scala-lang.org/api/current/index.html#scala.PartialFunction

Аноним Вск 17 Авг 2014 23:11:01 #383 №379040 

Натоны, хочу пройти курс на курсере, но он закончился 2 месяца назад. Assignment feedback будет работать?

Аноним Пнд 18 Авг 2014 04:12:48 #384 №379109 

>>379040
Boodet.

Аноним Пнд 18 Авг 2014 22:47:07 #385 №379370 

Если я буду писать на скале в парадигме ООП меня закидают какашками?

Аноним Пнд 18 Авг 2014 22:52:45 #386 №379372 

>>379370
Если будешь игнорировать функциональные принципы и писать джава-код скала синтаксисом, то да.

sageАноним Пнд 18 Авг 2014 22:55:59 #387 №379374 

>>379372
>джава-код скала синтаксисом
Оба выглядят как говно.

Аноним Пнд 18 Авг 2014 22:58:43 #388 №379375 

>>379374
Речь не об этом

Аноним 28/08/14 Чтв 18:21:21 #389 №382234 
бумп
Аноним 03/09/14 Срд 21:18:06 #390 №383881 
>>377479
>>377626
Наверное уже не актуально, но http://scaldi.org/.
Аноним 04/09/14 Чтв 01:00:04 #391 №383939 
Кто-нибудь пользовался этой парашей? http://dispatch.databinder.net/Dispatch.html
Почему она создает по 9000 тредов на каждый запрос и не завершает их?
Аноним 04/09/14 Чтв 01:05:15 #392 №383940 
>>383939
Хотя, как всегда, нашел ответ после того, как спросил https://github.com/dispatch/reboot/issues/53
Аноним 04/09/14 Чтв 19:39:36 #393 №384105 
>>383881
Годнота, спасибо
Аноним 07/09/14 Вск 00:53:16 #394 №384815 
Посоны поясните для решения каких задач применяется эта ваша Scala? Хочется попрактиковаться на чем-то, для чего её использование будет уместным и оправданым
Аноним 07/09/14 Вск 15:38:34 #395 №384974 
>>384815
Область применения идентична джавовой: от создания сайтиков до решений для созданиря и управления облаками и NLP библиотек. Короче, пиши что хочешь.
Аноним 07/09/14 Вск 16:05:48 #396 №384984 
>>384974
>NLP библиотек
Нафиг-нафиг. Нахуярят абстрактных синглтонов абстрактных фабрик, а это потом тормозит. Когда у тебя на обработке пару сотен тысяч текстовых файлов, один лишний вызов метода (к тому же виртуально) - это ад, блядь, и израиль. Еще любят на стрингах всё фигачить, хотя что мешает взять тот же CharSequence?
Аноним 07/09/14 Вск 16:54:44 #397 №384991 
>>384984
Лишние вызовы методов - это хуйня и микрооптимизации, которые для жабы в этой области находятся далеко за горизонтом событий, потому что нет даже самых базовые вещей, которые здесь нужны повсеместно, вроде гарантированной стековой аллокации пользовательских типов, и гарантированного незабоксенного представления записей в массивах этих типов.
Аноним 07/09/14 Вск 16:58:05 #398 №384992 
>>384991
>это хуйня и микрооптимизации
Опять эксперты подтянулись. Остальное-то на массивах заделано.
Аноним 07/09/14 Вск 23:42:35 #399 №385098 
>>384984
Джава не обязывает тебя ничего хуярить, числодробительные алгоритмы на ней можно довольно эффективно писать. Вот он >>384991 в принципе прав, но это не отменяет факт наличия NLP-либ и проектов типа Lucene на джаве.


Аноним 15/09/14 Пнд 21:38:29 #400 №386873 
На курсере, кстати, начался опять курс scala
Аноним 15/09/14 Пнд 22:33:20 #401 №386894 
>>386873
Twitter на Java перешел, из Typesafe уходят основатели. Расходимся.
Аноним 15/09/14 Пнд 22:38:23 #402 №386898 
>>386894
Какаие ваши доказательства?
Аноним 15/09/14 Пнд 22:48:58 #403 №386901 
>>386898
инсайдер )))))
Аноним 15/09/14 Пнд 23:43:09 #404 №386914 
>>386894
а вот это вы не врите
Аноним 16/09/14 Втр 10:36:42 #405 №387004 
>>386914
>>386898
Про уход основателей и форки:

https://github.com/paulp/policy/blob/master/README.md
- это основной контрибьютор в Скалу по количеству коммитов (легко проверить здесь https://github.com/scala/scala/graphs/contributors )
А вот ещё один форк:
http://typelevel.org/blog/2014/09/02/typelevel-scala.html

Про твиттор новость уже бородатая, сейчас это не аргумент, потому что в те времена инфраструктура скалы была более сырая чем сейчас.
Аноним 16/09/14 Втр 10:57:32 #406 №387007 
>>387004
Ушел Paul Phillips потому что не нашел взаимопонимания по поводу компромисов в разработке и развитии языка с другими основателями. Ну бывает, ничего страшного.
Всем кстати советую посмотреть его выступления. Грамотно критикует скалу, вам бы поучиться.
>А вот ещё один форк:http://typelevel.org/blog/2014/09/02/typelevel-scala.html
Как будто что-то плохое. Плюс они собираются сохранять совместимость.
>Про твиттор новость уже бородатая
Что за новость-то?

Аноним 16/09/14 Втр 11:20:11 #407 №387015 
14108520110750.png
так то
Аноним 16/09/14 Втр 12:16:37 #408 №387029 
>>387007
>Paul Phillips
>an extensive sbt-driven build system
>(reluctantly) brought partest back from separate repository, minor improvements
>deletion of lots of the worst and/or least necessary code
>deletion of tons of useless and unmaintained compiler log messages
>eliminated scala-reflect jar (I intend to eliminate the entire useless scala-reflect layer)
>eliminated asm fork in favor of standard asm dependency[]
>trailing commas! I think that's the only "feature".

Ну и нахуя для этого плодить еще 1 версию скалы? Или он надеется, что тайпсейф увидит, как стало хорошо и прибежит с извинениями. Алсо, он рефлексиюшку хочет удалить, что ли? Вообще, он производит впечатление чсвшного обмудка.
Аноним 16/09/14 Втр 12:24:39 #409 №387032 
>>387029
>Вообще, он производит впечатление чсвшного обмудка.
Как и 99% скала коммьюнити
sageАноним 16/09/14 Втр 12:41:50 #410 №387037 
Отсос скалафорсеров ИТТ. Язык распадается еще не зародившись.
Аноним 16/09/14 Втр 22:55:23 #411 №387181 
>>387037
единственный адекватный пост в этом треде: вся скала - это один большой форс
Аноним 16/09/14 Втр 23:07:40 #412 №387182 
Если сервак линуксовый, то полнотекстовой поиск это одна команда. Находишь на нужной странице уникальное слово, которое точно шаблон, и запускаешь из корня
find / -exec grep uniqWord -H -n {} \;

Результатом будут файлы и строки в этих файлах, содержащие uniqWord
Аноним 16/09/14 Втр 23:45:12 #413 №387195 
>>387029
>>387007
>>387004
скалу стоило форкнуть только изза уёбищных колекций, их там делают вроде студенты тупоголовые так что лучше уже спринговый ServletCookieValueMethodArgumentResolver чем sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] with Product with GenericTraversableTemplate[A, List] with LinearSeqOptimized[A, List[A]] with java.io.Serializable от которого стынет кровь.

что в скале реально нужно это
1. скала <-> джава интеграция
2. нормальная система сборки вместо сбт, хотел тут чтото в ней поменять заебался лазить по коду узнавать откуда что растёт.
Аноним 16/09/14 Втр 23:58:50 #414 №387198 
>>387195
Если тупоголовые студенты делают коллекции, которые ты не можешь осилить, значит ты в лучшем случае вогнутоголовый, а то и совсем безголовый.
sageАноним 17/09/14 Срд 01:26:20 #415 №387210 
>>387198
>КОКОКО ЕСЛИ МНЕ НЕ НРАВИТСЯ ГОВНО ЗНАЧИТ Я НЕОСИЛЯТОР
Аноним 17/09/14 Срд 10:30:14 #416 №387236 
>>387198
мальчик, я разве сказал что их не осилил?
Аноним 17/09/14 Срд 12:47:57 #417 №387255 
>>387029
Да ему много чего не нравится, от коллекций (http://www.youtube.com/watch?v=uiJycy6dFSQ), до реализации компилятора. Мне вообще кажется что он из скалы собирается хаскель сделать. Может он и прав в чем-то, но очевидно что с тайпсейфом ему не по пути, они стараются приостановить развитие скалы как языка и уделить больше внимания маркетингу и платформе.
>>387037
>>387181
Семён Семёныч, залогинтесь.
>>387195
>скалу стоило форкнуть только изза уёбищных колекций
Нахуя форкать если можно просто либу написать?
И что тебя не устраивает в коллекциях как пользователя? То что Филипс рассказывает на видео выше конечно занимательно, но обычно не является проблемой на практике.
Покажи годно сделанные коллекции чтоле и обоснуй их преимущество перед скаловскими.
>скала <-> джава интеграция
Можно поподробнее?
>нормальная система сборки вместо сбт
Например? Maven? Gradle? Новый костыль?
>что в скале реально нужно это
Думаю в тайпсейфе это понимают лучше чем где-либо.
http://typesafe.com/blog/scala-212-road-map

Аноним 17/09/14 Срд 14:44:45 #418 №387277 
14109506853910.png
>>387255
Лезет скалу критиковать, а сам футболку погладить не может. Все с ним ясно. Пустышка.
Аноним 17/09/14 Срд 15:21:13 #419 №387282 
14109528735270.png
Одерски одобряет
Аноним 17/09/14 Срд 15:30:38 #420 №387284 
>>387198
Запутывать гораздо проще чем распутывать. Поиграй с клубком ниток - поймёшь.
Аноним 17/09/14 Срд 15:36:45 #421 №387287 
>>387255
> Мне вообще кажется что он из скалы собирается хаскель сделать.
А почему бы не использовать Хаскель? Или желание натянуть презерватив на глобус слишком велико?
sageАноним 17/09/14 Срд 15:50:44 #422 №387289 
>>387287
Потому что ему только кажется
Аноним 17/09/14 Срд 16:00:08 #423 №387291 
>>387255
>Покажи годно сделанные коллекции чтоле и обоснуй их преимущество перед скаловскими.
Библиотека сиквенсов в Clojure, например. Преимуществ много:
1. Параллельные/непараллельные - это не тип коллекции, а тип операции. Любую операцию можно сделать параллельно или не параллельно над одной и той же коллекцией.
2. Нет отдельного понятия стримов и операций над стримами - каждая операция потенциально ленивая, если коллекция это поддерживает.
3. Все операции применимы к джавовским коллекциям, джавовским строками и ко всему, что реализует интерфейс ISeq.
4. Трансдьюсеры - можно скомбинировать функцию из операций над коллекциями, и потом применять её в разных контекстах, в том числе пропускать через неё всё что приходит через SCPшный канал.
5. Каждая функция перегружена дополнительными опциональными аргументами, благодаря чему она становится гораздо удобнее. Например, сравни поведение http://clojuredocs.org/clojure_core/clojure.core/map или http://clojuredocs.org/clojure_core/clojure.core/partition со скаловскими аналогами.
а почему всё это нельзя сделать в Скале? Ответ простой: статическая типизация мешает
Аноним 17/09/14 Срд 16:57:57 #424 №387328 
>>387291
>1. Параллельные/непараллельные - это не тип коллекции
>2. Нет отдельного понятия стримов и операций над стримами - каждая операция потенциально ленивая
Тебе чтоле впадло .par и .view написать?
И любая коллекция станет ленивой и парралельной.
>3. Все операции применимы к джавовским коллекциям, джавовским строками и ко всему, что реализует интерфейс ISeq.
К строкам и в скале применимо, а вот коллекции конвертить нужно, это да.
>4. Трансдьюсеры
Не знаю что это, дома посмотрю подробнее.
>5. Например, сравни поведение
http://clojuredocs.org/clojure_core/clojure.core/map
Это как бы разные map. В скале map - фунция класса типов функтор, с сигнатурой (A => B) => F[A] => F, она определена так не только для последовательностей. На этом классе типов, и на некоторых других много чего построено, нельзя просто взять и поменять сигнатуру.
Кложуровский map (для 3 коллекций) можно сэмулировать так:
c1 zip c2 zip c3 map { case (((a1, a2), a3)) => ??? }
Не слишком удобно, но с другой стороны мне это ни разу не пригодилось. А можно свои map2, map3, map4 написать.
http://clojuredocs.org/clojure_core/clojure.core/partition
В скале эта фунция называется sliding. Только параметра pad нет. Ну что ж, придется потратить минуту и свой экстеншн метод написать.
Эти "недочёты" как-то не дают права называть библиотеку коллекций скалы уёбищной. Говори тогда уж что статическая типизация уёбищная.
>>387289
Может и не хочет, хуй его знает.



Аноним 17/09/14 Срд 17:27:39 #425 №387334 
>>387291
> Нет отдельного понятия стримов и операций над стримами
Это минус. А что, если я хочу чтоб map мне прямо хуяк и сходу обработанную коллекцию того же типа вернул, безо всяких стримов/итераторов, которые на каждый элемент требуют вызовов next, hasNext и т.д.
Аноним 17/09/14 Срд 17:41:42 #426 №387336 
> http://clojuredocs.org/clojure_core/clojure.core/map
Динамопарашные перегрузочки для невстречающихся кейзов, ну охуеть, блять, преимущество. Человеку, который уже всё попробовал, понятно, что джавовский синтаксис и хотя бы её типизация - это гораздо более удобные и полезные на практике вещи, чем эти хачетрюкачества. Но даже если хотеть такой поебени, нужно делать по-человечески - превращать в тупли через zip, а потом по-честному нормальным map'ом распаковывать.
Аноним 18/09/14 Чтв 21:06:54 #427 №387703 
Какие есть годные туториалы по shapeless, как его использовать на практике, а не только для борщеудовольствия?
Аноним 18/09/14 Чтв 21:13:10 #428 №387707 
>>387703
конвертировал ихний лист в переменные (распаковка)
Аноним 18/09/14 Чтв 22:11:55 #429 №387727 
Вот у меня есть допустим
val fs = (IntMapper.map, StringMapper.map, BooleanMapper.map)
val vs = List("10", "aaa", "1")

Как мне сделать что-то вроде f.zip(ts).map((f, v) => f(v)) чтобы получилось тупля со значениями (10, "aaa", true)?
Аноним 18/09/14 Чтв 22:12:57 #430 №387728 
>>387727
>fs.zip(vs).map((f, v) => f(v))
fix. Конечно, через shapeless или еще что-то.
Аноним 18/09/14 Чтв 22:47:00 #431 №387736 
>>387728
Можно так: http://eed3si9n.com/learning-scalaz/Applicative.html#Zip+Lists
Довольно громоздко (это как бы не дефолтное поведения функтора List, дефолтное - каждая функция к каждому применяется к каждому аргументу), если тебе это часто раз нужно, то лучше обертку над этими тэгами написать, а на один раз пиши с zip и map и не парься.
Аноним 18/09/14 Чтв 23:04:57 #432 №387740 
>>387736
Что-то я не понял, как мне это применить. У меня функции разного типа (String => Int, String => String, String => Boolean), поэтому они в в кортеже и на выходе нужен котреж.
Аноним 18/09/14 Чтв 23:34:41 #433 №387745 
>>387727
Короче сгенерил простыню имплиситов и забыл http://pastebin.com/LMNHNNet
Аноним 19/09/14 Птн 22:25:19 #434 №388040 
>>387745
Может проще было shapeless взять?
Аноним 19/09/14 Птн 22:33:02 #435 №388044 
>>388040
То, что не проще это точно. Написание генератора заняло 10 минут после двух часов безрезультатных поисков способа применить шейплес. Если знаешь, как это сделать, то выкладывай.
Аноним 21/09/14 Вск 03:24:36 #436 №388387 
>>387727
А для чего тебе это?
Какой-то RPC, типа JSON?
Аноним 21/09/14 Вск 12:32:53 #437 №388422 
>>388387
Почти. Понадобилось парсить конфиг из XML
http://ideone.com/dYs4vx
Аноним 21/09/14 Вск 12:49:48 #438 №388430 
>>388422
>flatMap в конце конечно-же и обернуть Request в Some
Аноним 22/09/14 Пнд 10:38:30 #439 №388663 
>>387328
>Не знаю что это, дома посмотрю подробнее.
http://www.youtube.com/watch?v=6mTbuzafcII
Аноним 22/09/14 Пнд 10:42:34 #440 №388664 
>>388663
Разоблачили этого жулика уже. Нинужно.
http://thedeemon.livejournal.com/87320.html
Аноним 22/09/14 Пнд 11:10:41 #441 №388667 
>>355257
Имлиситом подставляешь и используешь, болезненный.
Аноним 22/09/14 Пнд 13:19:41 #442 №388719 
>>387740
Да, здесь Applicative не поможет, невнимательно прочитал пост.
Нужны HList'ы из shapless (гетерогенные списки тобишь, могут конвертиться в туплы и обратно).
[code]
val x = (10, "str", true)
val f = ((i: Int) => 1.33 i,
(s: String) => s.length,
(b: Boolean) => "(" + b + ")")
val y: (Double, Int, String) = HList(f) zipApply HList(x) tupled
[/code]
Тип y указывать не обязательно, он выводится, просто для наглядности написал.
>>388664
>>388663
Хорошо иметь два мнения, но руки пока еще не дошли до трансдьюсеров.
Аноним 22/09/14 Пнд 13:23:28 #443 №388721 
>>388719
Пиздец разметке.
http://pastebin.com/B8xtjjKK
Аноним 22/09/14 Пнд 16:39:56 #444 №388779 
>>388721
Опять не то. Мне надо передавать список строк, а не кортеж произвольных данных. Должно быть что-то вроде:

val funcs = (/3 функции разного ттипа/)
val dataList = List("1", "blah", "GET")
funcs.zipWithIndex.map((i,f) => f(dataList(i)))
Аноним 22/09/14 Пнд 18:03:02 #445 №388808 
>>388779
У тебя funcs какой тип имеет? И что будет если в списке недостаточно элементов?
Это все как-то небезопасно выглядит. Используй кореж строк и можно будет проверять соответствие количества функций и аргуметов.
Аноним 22/09/14 Пнд 19:04:35 #446 №388834 
>>388808
Никакого особого типа, просто кортеж функций. Список строк я получаю из функции, которая достает нужные мне параметры из XML. Функция типа readValues(xml, List("name", "email", "id")). Если недостаточно строк, то можно кидать эксепшон или возвращать None или левый Either, код с zipWithIndex это только для примера.
Аноним 23/09/14 Втр 00:18:10 #447 №388997 
>>388834
Ну что тебе сказать, я думаю что ни scalaz, ни shapeless в таких вешах тебе не помогут, это не задача для системы типов скалы. Ты используешь думаешь о списке как о коллекции с известным количеством значений, что некорректно.
Можно конечно сделать костыли на макросах или нагенеренных имплицитах, но они небезопасны. Скорее всего, правильно будет переписать функцию readValues, сделав ей сигнатуру (xml, HList) => Try[HList], ну и HList'ы одинаковой длины конечно и только строками типизированные. Тогда можно будет использовать zipApply с кортежем функций.
Аноним 23/09/14 Втр 01:08:31 #448 №389012 
>>388997
Такую простенькую сигнатуру, как я понимаю, хуй задашь. Потому что на самом деле это будет (xml, HList[String::String::String::String::String::String::String]) => Try[HList[Int::Boolean::String::Huy::Pizda::Cherv::Pidor]]
Аноним 23/09/14 Втр 15:34:21 #449 №389115 
>>388664
Топ лел.
Самое интересное, что по-настоящему прошаренные хаскелисты, на блогпосты которых он ссылается, признают полезность трансдьюсеров и также признают, что полностью подобрать сигнатуру типов у них пока не получается.
А этот хуй сначала хвастается своими поверхностными знаниями по теоркату (в комментах его поправляют), а потом говорит что трансдьюсеры ему НИНРАВЯТСЯ, но не указывает ни на одну конкретную проблему.

Впрочем, бугурт борщеедов от трансдьюсеров вполне объясним: идея действительно полезная и лежит на поверхности, но они за несколько десятков лет до неё не дошли, потому что теоркат об неё ЛОМАЕТСЯ
Аноним 23/09/14 Втр 19:17:59 #450 №389190 
>>389115
идея простая зачем там "сложный теократ" ? Какой теократ сложный? Где там написано про нинравится?
Аноним 23/09/14 Втр 22:07:17 #451 №389252 
>>389012
Да, блять, не удалось мне HList'ы так типизировать средствами shapeless, может просмотрел что-то, может либа не предоставляет такой возможности. Реализовывать сам это не полез, уже не уверен что это можно сделать в принципе.
Зато можно сделать так, используя тип Sized, проверяющий длину в компайл-тайм:
http://pastebin.com/Y0NL4DcD
Но, сука, я не нашел как список фиксированной длины преобразовать в HList (а это уж точно можно сделать безопасно, не знаю почему этого нет в библиотеке), пришлось напидарасить имплицитов.
Если что эти имлициты не тоже самое, что твои, ибо они безопасны, имеют обобщенное назначение и вообще затыкают дыру в библиотеке, лол.
А еще, если не будет лениво, завтра задам вопром на stackoverflow.

Аноним 24/09/14 Срд 03:35:27 #452 №389336 
>>389252
Спасибо, завтра поразбираюсь. Объясни пока, что ты подразумеваешь под безопасностью и почему твое решение безопаснее моих исплиситов?
Аноним 24/09/14 Срд 11:09:47 #453 №389374 
>>389252
Сам выдвинул тезис, сам с ним поспорил. День прошёл не зря.
Аноним 24/09/14 Срд 11:53:45 #454 №389380 
>>389336
В этом контексте под безопасностью я имею в виду что в функцию нельзя передать данные, на которых она завалится. В твои имплиситы можно передать список неподходящей длины и экстрактор зафейлится. Это можно пофиксить перехватывая исключение и возвращая Option, но как по мне удобнее все заморочки с несуществующими значениям перенести в readAttributes (они и так там есть), а применять функции уже с гараниями возможности применения.
У меня там ошибка копипаста кстати, в _0SizedToHList метод toHList должен просто HNil возвращать. Можешь попробовать макрос написать чтобы таких ошибок не возникало и вообще все генерилось автоматически.
>>389374
Не зря конечно, разобрался в некоторых юзкейсах shapeless.
припеканус от sbt Аноним 24/09/14 Срд 20:05:50 #455 №389596 
14115747500110.png
Блядь, как передать агрументы джяве через кастомный конфиг для теста?
Аноним 24/09/14 Срд 21:37:55 #456 №389689 
14115802752160.png
>>389596
Короче, вот так надо было.
Аноним 25/09/14 Чтв 14:47:09 #457 №389932 
Ей, скалаебы, смотрите что я вам принес.

scala> List(1, 2, 3) + "4"
res0: String = List(1, 2, 3)4
Аноним 25/09/14 Чтв 16:20:40 #458 №389951 
>>389932
Scala - новый javascript, только с радостями многочасовых компиляций
Аноним 25/09/14 Чтв 17:13:56 #459 №389968 
>>389951
Я то думал, такая-то система типов, а это пиздец какой-то. Подозреваю эти ваши имплициты виноваты в этом всем.
Аноним 25/09/14 Чтв 17:31:55 #460 №389975 
>>389932
Нахуй проследуй
sageАноним 26/09/14 Птн 01:09:07 #461 №390106 
>>389932
>>389951
>>389968
Вытек из треда.
Аноним 26/09/14 Птн 01:15:17 #462 №390109 
>>390106
Есть что сказать, или сразу засчитывать?
sageАноним 26/09/14 Птн 02:13:40 #463 №390124 
>>389975
>>390106
Что, петушки, рушится ваш манямирок?
Аноним 26/09/14 Птн 11:31:17 #464 №390181 
>>389968
Да, они самые. А в чем проблема-то? Все же статически проверяется системой типов.
Аноним 26/09/14 Птн 13:36:04 #465 №390212 
14117241641680.jpg
>>389968
https://github.com/scala/scala/blob/v2.11.2/src/library/scala/Predef.scala#L275
https://issues.scala-lang.org/browse/SI-194
Аноним 26/09/14 Птн 13:54:46 #466 №390214 
>>390181
В том что я не хочу складывать теплое с мягким и получать какой-то пиздец, а получить ошибку компиляции.
Аноним 26/09/14 Птн 15:02:30 #467 №390229 
>>390214
Сделаешь типизацию строже, придет другой петушок, будет кукарекать, что неудобно конкатенировать.
Аноним 26/09/14 Птн 15:05:44 #468 №390230 
>>390229
А нехуй конкатенировать строку с листом. Даже пхп начинает ворчать когда его заставляют это сделать.
sageАноним 26/09/14 Птн 16:47:29 #469 №390249 
>>390230
наверное потому что строка своего рода тоже лист, но у скалапетухов все через жопу
Аноним 26/09/14 Птн 17:03:13 #470 №390254 
>>390249
Нет, потому что какой-то умник считает что
[code]
implicit final class any2stringadd[A](private val self: A) extends AnyVal {
def +(other: String): String = String.valueOf(self) + other
}
[/code]
хорошая идея.
Аноним 26/09/14 Птн 17:47:31 #471 №390258 
>>390254
и этот умник мартин
Аноним 26/09/14 Птн 19:15:35 #472 №390276 
>>390249
Через ++ листы нормально объединяются со строками, проблема именно в +

scala> List('a', 'b', 'c') ++ "def"
res0: List[Char] = List(a, b, c, d, e, f)

scala> List('a', 'b', 'c') + "def"
res1: String = List(a, b, c)def
Аноним 27/09/14 Суб 15:54:13 #473 №390498 
>>389932
Это очевидное и предсказуемое поведение. Что по-твоему должно происходить?
Аноним 27/09/14 Суб 16:05:18 #474 №390501 
Студентота-борщехлеб врывается с вопросами. Раньше писал на c++ и c#, недавно попровал скалу и решил, что это заебись.

Насколько она востребована?

Правильно ли я понимаю, что мне нужно вкатиться в джаву, чтобы писать на скале?

Посоветуйте книг с упором на особенности языка и устройство jvm, а не на ооп и паттерны. Пока что на джаве писал только домашки из курса Седжвика по алгоритмам.
Аноним 27/09/14 Суб 16:22:12 #475 №390510 
>>390501
http://www.amazon.com/Scala-Cookbook-Object-Oriented-Functional-Programming/dp/1449339611/
http://www.amazon.com/dp/0137142528/
jsl
jvm spec
Аноним 27/09/14 Суб 17:38:44 #476 №390538 
>>389932
И что тебе не нравится?

scala> List(1,2,3).toString + "4"
res0: String = List(1, 2, 3)4
Аноним 27/09/14 Суб 17:41:41 #477 №390539 
>>390254
Почему нет? Это реализация Java-поведения средствами Scala.
Аноним 27/09/14 Суб 19:17:27 #478 №390582 
>>390538
Скалаебы все такие тупые, или только ты?
Аноним 27/09/14 Суб 19:22:54 #479 №390586 
>>390582
Нет, я тоже тупой
другой скалаеб
Аноним 27/09/14 Суб 19:25:42 #480 №390588 
>>390582
Отличная фича, а ты просто завидуешь.
Аноним 29/09/14 Пнд 22:38:43 #481 №391265 
14120159238810.gif
Анон, помоги нубу со вторым assignment'ом. Как написать exists через forall? Я даже понял ебаный map, а эту хуйню вообще не могу.
Во избежание вопросов, forall: http://pastebin.com/LhgYbKzB
Аноним 29/09/14 Пнд 23:26:49 #482 №391292 
>>391265
Лалка. Подумай еще, решение очень простое и следует из логики.
Аноним 29/09/14 Пнд 23:34:27 #483 №391296 
>>391265
if s.exists(!p) return false
return true

if s.forall(!p) false
true
Аноним 29/09/14 Пнд 23:37:56 #484 №391297 
scala> val l = List()
l: List[Nothing] = List()

scala> l.forall(q => true)
res0: Boolean = true

scala> l.forall(q => false)
res1: Boolean = true

scala> l.exists(q => true)
res2: Boolean = false

scala> l.exists(q => false)
res3: Boolean = false
Аноним 29/09/14 Пнд 23:49:46 #485 №391302 
14120201868210.gif
>>391296
>>391297
Блджад. Спасибо.
>>391292
Само собой, что простое. Иногда бывает, что самое очевидное в голове и не возникает.
Аноним 30/09/14 Втр 18:13:41 #486 №391473 
Почему spray может передавать поток только одному клиенту одновременно? Кто-нибудь сталкивался?
То есть вот эта фиговина работает только для одного клиента, у второго стрим начнется, только когда он закончится у первого.
https://github.com/spray/spray/blob/master/examples/spray-routing/on-spray-can/src/main/scala/spray/examples/DemoService.scala#L48
Аноним 30/09/14 Втр 19:29:32 #487 №391497 
>>391473
Более того, если запустить 4-5 разных стримов, то спрей вообще перестает обрабатывать запросы, пока не закончится один из стримов или клиент не закроет соединение с ним. Пробовал ставить FixedThreadPool и CachedThreadPool.
Аноним 30/09/14 Втр 20:53:07 #488 №391530 
>>391497
Лол, оно ж "масштабируемое" из коробки.
Аноним 30/09/14 Втр 22:50:07 #489 №391590 
После этой вашей coursera можно найти работу за еду хотя бы?
Аноним 30/09/14 Втр 23:36:02 #490 №391618 
>>391590
лол нет
Аноним 01/10/14 Срд 00:14:43 #491 №391624 
>>391590
Немного не тот язык где нужны джуны.
Аноним 01/10/14 Срд 23:38:37 #492 №391828 
>>391590
после лекций от твиттера можно
Аноним 01/10/14 Срд 23:39:24 #493 №391829 
>>391473
spray + akka и нет проблем
Аноним 02/10/14 Чтв 00:14:53 #494 №391832 
>>391828
Ты про scala school и effective scala?
Аноним 02/10/14 Чтв 20:43:10 #495 №392065 
http://softserve.ua/vacancies/open-vacancies/scala-software-engineer/
Аноним 02/10/14 Чтв 20:49:38 #496 №392069 
14122685783620.png
>>392065
>Good communication skills;
Аноним 02/10/14 Чтв 21:00:51 #497 №392072 
14122692511170.png
>>392069
>Україна
Аноним 05/10/14 Вск 04:22:30 #498 №392660 
14124685505630.png
>>391497
Лол, оказалось, что это лимит хрома.
Аноним 06/10/14 Пнд 03:49:02 #499 №392973 
14125529424100.png
Я кончил и закурил
sageАноним 06/10/14 Пнд 14:15:38 #500 №393071 
>>392973
> 2014
> scala
Аноним 06/10/14 Пнд 14:18:02 #501 №393073 
>>393071
Матушку твою приходовал
Аноним 07/10/14 Втр 02:48:23 #502 №393322 
>>392973
Откуда скриншот?
Аноним 07/10/14 Втр 12:30:52 #503 №393379 
>>393322
https://www.parleys.com/play/53a7d2c6e4b0543940d9e54b/chapter2/about
Аноним 08/10/14 Срд 12:37:52 #504 №393630 
Расскажите, какие либы используете для сериализации JSON и protobuf?
Аноним 08/10/14 Срд 12:52:27 #505 №393632 
>>393630
json4s
Аноним 08/10/14 Срд 14:34:27 #506 №393645 
>>393630
Да, кстати, этот вопрос довольно интересный. Раньше я, поскольку приходилось делать REST-API, использовал spray и spray-json соответственно (он кстати зело медленный). Аналогично поступал с play framework (мало работал). Недавно поработал с json4s - не слишком понравилось, может быть еще не разобрался с API, но какое-то оно запутанное. Еще хотел на argonaut посмотреть, чуваки из typelevel говна не сделают.
Аноним 08/10/14 Срд 18:05:16 #507 №393692 
>>393645
Json4s примечателен тем, что позволяет имплицитами модульно задавать стратегии десериализации в Scala объекты. Например, вбросить в скоуп манглер, который переименовывает snake_case в lowerCamelCase.
Аноним 08/10/14 Срд 20:56:48 #508 №393747 
> val n: Byte = '\n'
> n: Byte = 10

Подскажите, как здесь Char превращается в Byte?
Аноним 08/10/14 Срд 21:48:02 #509 №393779 
>>393747
implicitly
Аноним 08/10/14 Срд 21:49:58 #510 №393780 
14127905986920.png
>>393779
Нету
Аноним 08/10/14 Срд 22:03:41 #511 №393783 
>>393747
Наверное, это работает на уровне литералов. По тому же принципу, по которому 123 может интерпретироваться как Byte, Int, Long, и 'x' может интерпретироваться как Char, Byte, Int, и т.д.
Аноним 09/10/14 Чтв 00:27:10 #512 №393821 
>>393747
Как же вы уже заебали, сука. Нахуй й вы приходите в Scala-тред без оглядки на Java. Вся эта хуйня пришла из нее. И это не плохо и не хорошо, просто так есть.
Можешь попробовать тут - http://www.javarepl.com/console.html
>java> Byte b = '\n';
>java.lang.Byte b = 10
Аноним 09/10/14 Чтв 00:32:34 #513 №393828 
>>393779
How about NO?
scala> val n: Char = '\n'
n: Char =


scala> val b: Byte = n
<console>:8: error: type mismatch;
found : Char
required: Byte
val b: Byte = n
Аноним 09/10/14 Чтв 00:37:04 #514 №393831 
Постойте, поцоны, так что же это, в Скале делать нехуй, если перед этим не писал на Джява?
Аноним 09/10/14 Чтв 00:38:57 #515 №393834 
>>393831
Не обязательно, просто придется учить 2 языка сразу. Иначе в твоем понимании технологии будет много черных пятен.
Аноним 09/10/14 Чтв 07:22:14 #516 №393882 
>>393821
Не нервничай, мы же здесь просвещаемся. И спасибо.
Аноним 09/10/14 Чтв 10:53:23 #517 №393892 
>>393834
Саму Java учит не обязательно (но желательно, часто нужно организовать взаимодействие с Java кодом или предоставить Java-API), часть библиотеки и рантайма - придеться.
Аноним 09/10/14 Чтв 19:05:49 #518 №393999 
Что там за драма в тайплевел? Кого-то ссаными тряпками выгнали. Даже няша Сабин пишет, как он рад, что они наконец избавились от него.
Аноним 09/10/14 Чтв 19:17:15 #519 №394002 
>>393999
Откуда инфа, где Сабин пишет?
Аноним 09/10/14 Чтв 19:32:27 #520 №394009 
>>394002
В свиторе
https://twitter.com/travisbrown/status/519886062223491073
Аноним 09/10/14 Чтв 20:15:11 #521 №394016 
>>393999
Насколько я понял, это о Tony Morris, изначальном авторе scalaz. Просто он батхёртнутый и немного поехавший. Судя по тому, что пишут о его буйствованиях в чатике #scala, может публично общаться в стиле бордовых илиткопаст о уринальном окроплении быдлокодеров.
Аноним 09/10/14 Чтв 21:05:47 #522 №394035 
Котятки, а как прикрутить протобаф к TCP IO акки? Когда там уже запилят тулзы для разбора протокола как в нетти?
Аноним 09/10/14 Чтв 23:43:14 #523 №394090 
>>394016
Ну выгонять-то за что?
Аноним 10/10/14 Птн 17:13:24 #524 №394270 
Хаскелобог рассуждает о скалке:
- If you take any two of the random extensions that have been thrown into scala and try to use them together, they typically don't play nice. e.g. Implicits and subtyping don't play nice together.
- Type inference works right up until you write anything that needs it. If you go to write any sort of tricky recursive function, you know, where inference would be useful, then it stops working.
- Due to type erasure, its easy to refine a type in a case expression / pattern match to get something that is a lie.
- Free theorems aren't.
- Since you can pass any dictionary anywhere to any implicit you can't rely on the canonicity of anything. If you make a Map or Set using an ordering, you can't be sure you'll get the same ordering back when you come to do a lookup later. This means you can't safely do hedge unions/merges in their containers. It also means that much of scalaz is lying to itself and hoping you'll pass back the same dictionary every time.
- The container types they do have have weird ad hoc overloadings. e.g. Map is treated as an iterable container of pairs, but this means you can't write code that is parametric in the Traversable container type that can do anything sensible. It is one of those solutions that seems like it might be a nice idea unless you've had experience programming with more principled classes like Foldable/Traversable.
- You wind up with code that looks like myMap.map(...).toMap all over the place due to CanBuildFrom inference woes.
- Monads have to pay for an extra map at the end of any comprehension, because of the way the for { } sugar works.
- You have type lambdas. Yay, right? But now you can't just talk about Functor (StateT s IO). Its Functor[({type F[X] = StateT[S,IO,X]})#F], and you have to hand plumb it to something like return, because it basically can't infer any of that, once you start dealing with transformers ever. The instance isn't directly in scope. 12.pure[({type F[X] = StateT[S,IO,X]})#F] isn't terribly concise. It can't figure out it should use the inference rule to define the implicit for StateT[S,M,_] from the one for M[_] because of the increased flexibility that nobody uses.
- In this mindset and in the same vein as the CanBuildFrom issue, things like Either don't have the biased flatMap you'd expect, somehow encouraging you to use other tools, just in case you wanted to bind on the Left. So you don't write generic monadic code over the Either monad, but rather are constantly chaining foo.right.flatMap(... .right.flatMap(....)) ensuring you can't use the sugar without turning to something like scalaz to fill it in. Basically almost the entire original motivation for all the type lambda craziness came down to being able to write classes like Functor have have several instances for different arguments, but because they are so hard to use nobody does it, making the feature hardly pay its way, as it makes things like unification, and path dependent type checking harder and sometimes impossible, but the language specification requires them to do it!
- You don't have any notion of a kind system and can only talk about fully saturated types, monad transformers are hell to write. It is easier for me to use the fact that every Comonad gives rise to a monad transformer to intuitively describe how to manually plumb a semimonoidal Comonad through my parser to carry extra state than to work with a monad transformer!
- I've been able to get the compiler to build classes that it thinks are fully instantiated, but which still have abstract methods in them.
- Tail-call optimization is only performed for self-tail calls, where you do not do polymorphic recursion.
- Monads are toys due to the aforementioned restriction. (>>=) is called flatMap. Any chain of monadic binds is going to be a series of non-self tailcalls. A function calls flatMap which calls a function, which calls flatMap... This means that non-trivial operations in even the identity monad, like using a Haskell style traverse for a monad over an arbitrary container blows the stack after a few thousand entries.
- We can fix this, and have in scalaz by adapting apfelmus' operational monad to get a trampoline that moves us off the stack to the heap, hiding the problem, but at a 50x slowdown, as the JIT no longer knows how to help.
- We can also fix it by passing imperative state around, and maybe getting scala to pass the state for me using implicits and hoping I don't accidentally use a lazy val. Guess which one is the only viable solution I know at scale? The code winds up less than 1/2 the size and 3x faster than the identity monad version. If scala was the only language I had to think in, I'd think functional programming was a bad idea that didn't scale, too.
- for yield sugar is a very simple expansion, but that means it has all sorts of rules about what you can't define locally inside of it, e.g. you can't stop and def a function, lazy val, etc. without nesting another for yield block.
- You wind up with issues like SI-3295(https://issues.scala-lang.org/browse/SI-3295) where out of a desire to not "confuse the computation model", it was decided that it was better to you know, just crash when someone folded a reasonably large list than fix the issue.. until it finally affected scalac itself. I've been told this has been relatively recently fixed.
- No first-class universal quantification means that quantifier tricks like ST s, or automatic differentiation without infinitesimal confusion are basically impossible.
`def test = diff(new FF[Id,Id,Double] {
def apply[S[_]](x: AD[S, Double])(implicit mode: Mode[S, Double]): AD[S, Double]
= cos(x)
})`
is a poor substitute for
`test = diff cos`

... but it runs on the JVM.
Аноним 10/10/14 Птн 19:02:14 #525 №394311 
https://2ch.hk/pr/res/394310.html перекат
comments powered by Disqus

Отзывы и предложения