Какой же благородный дон станет писать на досуге на Scala или Clojure? Ведь всякие Scala, Clojure, F#, OCaml и прочие эрзацы нормальных языков програмирования нужны благородным донам только для того, чтобы использовать их работе, где им приходится считаться с мещанскими вкусами остальных работяг-програмистов. поэтому на досуге благородный дон будет пописывать на Хаскелле, Агде или Эпиграмме, и почитывать алгебраическую топологию или теорию категорий. А на Scala и Clojure на досуге пишут только некоторые представители люмпен-пролетариата, котрые подсмотрели это занятие за благородными донами на работе, и думают, что ритуальное копирование поведения благородного класса делает их самих благороднее.
Их там джва.
>>348166
Какой же благородный дон станет писать на досуге на Haskell или Agda? Ведь всякие Haskell, Agda, Эпиграмм и прочие эрзацы нормальных языков програмирования нужны благородным донам только для того, чтобы использовать их работе, где им приходится считаться с мещанскими вкусами остальных работяг-програмистов. поэтому на досуге благородный дон будет пописывать на Java, C, PHP, и почитывать паттерны проектирования или теорию абстрактных фабрик. А на Haskell и Agda на досуге пишут только некоторые представители люмпен-пролетариата, котрые подсмотрели это занятие за благородными донами на работе, и думают, что ритуальное копирование поведения благородного класса делает их самих благороднее.
Нет, ну вы только гляньте на этого дибила >>348346. Скалатред висит на первой, а этот кретин засирает доску, создавая новый тред.
>>348348
Что ты разбушевался то так?
Алсо, этот курс как-нибудь без иде и прочей шуры-муры пройти? Аж блевать тянет от всей это хуйни.
>>348363
Вообще-то да. Редактировать можешь в чём угодно. Сабмитить в любом случае будешь из командной строки.
>>348165
Реквистирую годной литературы по Scala и всяким Scala-фрэймворкам.
Курсы на Coursera уже прошел
мимо скалаеб-ньюфаг
>>348363
Необходимо прочесть https://class.coursera.org/progfun-004/wiki/SbtTutorial
Код при этом прекрасно пишется в NPP/Sublime
> 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.
гибридобляди соснулей
>>348451
Ну ты же понимаешь, что это ваше чистое говно под названием хачкиль никому не нужно, кроме нескольких умственно-отсталых.
>>348461
Оно не чистое. Просто там грязь имеет свою маркировку IO.
вверх
Объясните, пожалуйста на словах, как решается третья задача со сдачей. Закодировать-то я закодирую сам, но вот мне бы ход решения понять.
В вашем посте присутствует слово из спам-листа
>>348643
Так решается в 10 строк, просто надо понять, как правильно рекурсивно вызывать функцию. подсказка: вызывать ее надо два раза.
>>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 и тд
Скажите, пожалуйста, что это за нахуй такой.
Скармливаю этому sbt проект, пишет, что проблема с кодировкой. Я ничего не перекодировал, каментов на русском в исходниках не писал, UTF-8 полностью должна совпадать с латинско однобайтовой. Ну ладно, хочет юникод, получит юникод, добавляю сигнатурку, запускаю ещё раз, а он снова не понимает. Хотел указать опцию -encoding, а он её не принимает; если указывать, например "-encoding=ANSI" при запуске sbt, то не запускается вообще, если при запуске test, пишет, что таких опци не знает. Кто-нибудь сталктвался с подобной проблемой? Как её решить?
>>348718
В чём редактируешь?
https://www.google.com/search?q=remove+utf-8+bom
Подождите, там что, все тесты хранятся локально? Т.е. я могу подправить их у себя и наебать систему?
>>348735
Немного тестов локально, но проверяется всё у них там на серверах.
>>348426
Лектор ета тру прогромист. Косоглазие как у меня. Жми лейк, если скилл променял на зрение :-(
А вы обратили внимание, что ведущий говорит с каким-то забавным акцентом?
>>348840
Может это от того, что он француз с польской фамилией, а, нэйтив спичер?
>>348872
Знал я одного туркмена с немецкой фамилией, так он по-русски говорил без малейшего акцента.
у меня знакомый немец а говорит по английски с русским акцентом
https://www.coursera.org/course/reactive
А этот курс будет повторён?
>>348877
>турникмена
>>348924
Конечно. Первый был пробным, с кучей багов и не даже не синхронизирован с актуальной версией скалы и акки, хотя и годным.
>>349025
В ирлонге под акторов/процессы специально пилили VM и рантайм, а Акка - это hight-level реализация, так что конечно не то, но в целом, норм.
>>349033
самый смак в том, что акторы в акке более производительны, чем в эрланге. хотя, мб, в эрланге в акторах не так много ограничений
>>349069
Никогда не сравнивал их производительность, вполне возможно, так как в erlang copy-on-send (у каждого актора свой хип), а в scala shared memory с иммутабельными объектами.
>>349141
https://incubos.org/posts/2014/04/18/jpoint/
интересная презентация по поводу акки
>>349069
Ну еще бы бля, это вполне логично вытекает из того, что JVM быстрее как минимум в 10 раз. А на больших объемах данных и во все 100.
>>349171
>JVM быстрее как минимум в 10 раз
быстрее чего? насколько я знаю, скала и эрланг крутятся на жвм. а то, что эрланг в конечном счете медленнее, чем скала - проблемы самого эрланга
>>349233
предположение основано на презентации чувака с яндекса, смотри линк. тогда тем более возникает вопрос, почему нативный эрланг медлнее скалы на вм?
>>349232
>Ну это вообще толстота
>>349246
Хуй тебе мудак ебаный, этот бенчмарк вполне ясно отображает скорость стандартных операций с памятью. Таким образом в каких-то изъебистых рейскондишонс-конкуренси-ололо ситуациях будет не меньше вот этой задержки, плюс определенный оверхед. И в ирлонге оверхед будет в сто раз больше, т.к. копирование-хуирование, иммутабельность и т.д., таким образом ирлонг в любом случае просасывает по скорости выполнения, пусть даже его рантайм оптимизирован под какую-то хуйню вроде держания 1000000 соединений.
>>349246
Мочератор - опущенец и чмо, анус себе забань
Вот тебе тест
>реальных приложений вроде серверов
http://www.techempower.com/benchmarks/#section=data-r6&hw=i7&test=query
Соснул Маня?
>>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 миллионов отсосов.
>>349267
>Числодробильня в чистом виде
Числа везде дробятся одинаково, разница из-за модели памяти.
>Смотри, единственный тест, который использует потоки.:
Их там каждый второй использует, петушок.
Присмотрись к исходникам http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=knucleotide&lang=java&id=1&data=u64q
Все кукарекают про то, что синтетические тесты сосут. Поясните ньюфагу, чем отличаются синтетические тесты от реального использования и почему вм, соснувшая в тестах, не соснет в деле.
>>349273
соснёт в тестах => может соснуть в деле
не соснёт в тестах => ничего не значит
очевидно же
Erlang > моча > говно > скала
>>349279
Скала > Джява > моча > говно > мочератор > ирланг
Я ужаснулся от первого же задания, с треугольником паскаля. Вы обратили внимания, как он там выводится? Ряд за рядом. Причём каждый элемент каждого ряда вычисляется вычисляется заново, пробегая по всем рядам вверх до вершины. Это же плохой, негодный способ отрисовки треугольника паскаля, настолько же лютая хуита, как и рекурсивное вычисление ряда фиббоначи. Т.е. для каждого элемента большая часть вычисление проделана на предыдущих шагах, но при каждом последующем шаге мы повторяем все проделанные вычисления снова.
В этом суть ФП? Я не байтоёб, но использование полиномиальных и экспоненциальных алгоритмов там, где всё можно обойтись линейными - это же абсолютный пиздец.
>>349267
Наркоман, этот тест ничего не делает, только лепит потоки. В ерланг используются т.н. green threads, а джява создаёт настоящие, нативные.
>>349375
>Я ужаснулся от первого же задания, с треугольником паскаля. Вы обратили внимания, как он там выводится?
При выводе треугольника Паскаля проверяется функция вычисления одного элемента. Для вычисления всего треугольника, разумеется, лучше использовать другой алгоритм (в том числе и рекурсивный). И да, оптимизация однократно выполняемого теста, не особо нужная вещь.
>настолько же лютая хуита, рекурсивное вычисление ряда фиббоначи
Учитывая, что единственная цель примера была показать, какая рекурсия хвостовая, а какая - нет, абсолютно нормальный пример.
Преимущество рекурсивных алгоритмов начинает быть заметным с какого-нибудь quicksort, но он плох в качестве примера, ибо не тривиален сам по себе.
>>349383
Меня на лабах заставили однажды делать итерационную или правильно "итеративную"? версию квиксорта.
синтаксис в сцале отвратительный
понравились только имплицитные методы
FYI:
тривиальная реализация треугольника паскаля с использованием бесконечномерных банаховых списков факториалов
http://ideone.com/PvS1x3
>>349504
Я про алгоритм вообще-то. У меня не получилось додуматься до рекурсивной формулы для размена, пришлось лезть в книгу.
http://ideone.com/HZ9ZbP
Я думаю, олдфаги обосрутся в ужасе от моего решения. Но я сделал как смог. Получилось 4 рекурсивных вызова, а не 2.
>>349500
Это как бы стандартная задача на поиск/перебор. Решишь 10 таких - будешь щелкать как орешки.
Почему при наличии рекурсии скала не может вывести тип, в то время, как хаскель, например, может?
>>349722
Но хаскель же опенсурсен, разработчики скалы могли бы просто посмотреть, как устроен вывод типов в хаскеле.
>>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)
^
>>349765
scala> def sucks(x: Int): Int = if (x > 1) 2 else sucks(x)
sucks: (x: Int)Int
>>349775
Как я могу выёбываться знанием факта, о котором ведущий чувак на курсере в первом или втором видео сказал?
Но он не сказал о причинах, меня это заинтересовало. Я не догадываюсь.
>>349613
>при наличии рекурсии скала не может вывести тип
Поясни вот это. Что ты имеешь ввиду?
мимокрок
>>349778
ну тогда загугли как скала выводит типы и как хаскель. local\global type inference
Java-бляди sosnooley. Нет стандартного класса Pair.
http://stackoverflow.com/questions/5303539/didnt-java-once-have-a-pair-class
>>349861
в крестах вон дохуя есть стандартного, токо все используют буст\хуюст\кутэ.
>>349877
У меня такой Reflection, что я назвал джаваблядью себя.
>>348675
Решал также, но
1) Внутренняя функция нафиг не нужна
2) Сопоставление образцов на лекциях не объяснялось
http://ideone.com/Coo7cd
>>349722
Можно и так сказать. Правда дело в том что для систем типов с наследованием еще не придуманы алгоритмы полного вывода типов. Не факт что это вообще можно сделать.
>>349877
далеко не все
boost - неудобный, а qt не нужен, если требуется нативный GUI а он требуется почти во всех серьёзных проектах, а если GUI нет, то не нужен вообще
>>349937
Позволь я перефразирую:
boost - не нужен, а qt не нужен, если требуется нативный GUI не нужен, а если GUI нет, то не нужен вообще.
>>348218
Это просто карго-культ какой-то.
А вообще, Scala не нужна, потому что есть Java.
и у меня уже 10/10
а как дела у вас?
алсо, ссу на этого >>350366 петуха.
>>350808
10/10
Но с map помучился, все думал, как изменить входящий сет.
>>350867
>Но с map помучился, все думал, как изменить входящий сет.
никак, потому что тогда нужна обратная функция, а её может не существовать, да и если даже существует — невозможно вычислить её
сегодня мы решаем проблему остановки
на вход: скалопитушок
на выход: вывести '1' если он начнёт в будущем пользоваться полноценными фя, '0' в другом случае
решения на джяватм, COBOL® и тмC# должны сопровождаться детальными отчётами и документацией
buditUzatNormFL :: ScalaPeetooh -> MozhetByt
buditUzatNormFL = const Nyet
main = do
sp <- read <$> getContents
print $ case buditUzatNormFL sp of
Nyet -> 0
Da -> 1
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
>>350927
Бедняга. У тебя даже своего треда нет, да? Ану брысь под шконку и не попадайся господам на глаза
>>350939
не злитесь, господин!
я нашел видео которе вы просили
#lang racket
(define budet-uzat-norm-lisp? (λ (nutyx) 'nyet))
(displayln (case (budet-uzat-norm-lisp? (read-line))
[('nyet) 0]
[('da) 1]))
>>350940
Аноны, что я только что посмотрел? Что это за чудодейственное щелканье мышью и "указание" объектов? Это был C#?
ПХП_макак_испытал_культурный_шок
>>350946
Все это "рисование" объектов, я полагаю, значительно ускоряет работу? Есть что-нибудь в VS для командной разработки?
>>350947
Не знаю, я просто констатировал очевидное
п%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%с%т%ы%л?
п_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_с_т_ы_л?
так читабельней
алсо иди нахуй обезьяна со своим спам листом
>>348303
Зато правда. Из функциональных языков на практике используется разве что Erlang.
>>351031
Интересно. Я думал, что это академический язык, типа хаскеля. И что же они на скале делают в яндексе?
>>351033
довольно забавно, но в селектеле используют хаскелл. инфа легко гуглится
>>351033
Нет, скала это не говно борщехлебное типа хаскелля, это полноценный язык, на котором можно разрабатывать программы, т.к. скала может все то же, что и джява, и сверх этого.
>>351037
Но хаскель же от скалы отличается только тем, что в нём аргументы функции пишутся без скобочек и отделяются пробелом, в то время как в скале они пишутся в скобочках и отделяются запятыми.
Ребят, поясните по хардкору где используется вся эта модная мутотень вроде Go/Scala. Какие реальные проекты вы запилили на этих вундервафлях?
Не видел ни одного реального приложения на haskell.
Это сейчас такая мода упрощения формальных языков вроде Java в сторону скриптовых вроде python/ruby? В чем профиты? Чтобы быстро писать строготипизированные приложения со скоростью написания динамических скриптов?
>>351045
>хаскель
>аргументы
>отделяются пробелом
В хаскеле у функции может быть только 1 аргумент. Также пробел там ничего "разделять" не может, так как он не выполняет функции разделителя (пробельного символа) а является оператором языка - находящееся слева от пробела используется как функция, справа как аргумент. Кстати одного пробела им мало, поэтому там используется их два вида.
>>351051
Зачем ты смешал все в кучу, как тебе теперь отвечать?Или ты считаешь, что хачкель — это что-то уровня руби?
>>351054
>et pitux =
Лоллировал с хаскипидора. Одна из причин что этот парашный язык никогда не будет использоваться в промышлености - то что один и тот же символ может иметь с десяток разных значений, в зависимости от контекста.
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);
}
}
}
>>351061
>elemIndex
Хаскеблядок соснул.
indexOf на два символа короче.
Тем временем, поиск в массиве с помощью Scala делается в 1 выражении
http://ideone.com/er6Bgq
Проиграл со скала-детей, которые не понимают суть проблемы джава компилятора.
ОП, но нахуя ты скале приписал эту проблему? В скале нет джава-литералов бай дефолт, только расширенные типы и имплиситы для совместимости с жаба-говном.
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 минут. На скале такое не реализовать ибо фрактал отсоса.
>>351172
бля, проебал разметку.
Ну и в догонку, в Шлаке нет http://www.haskell.org/haskellwiki/GHC/TypedHoles. Отсос на отсосе.
>>351172
Зачем Теория Категорий в скале?
Нужны тайпклассы (но и с ними ебли хватает)
>>351172
В Idris слишком мало ромбиков, стрелочек, миксфиксов и прочих джентельменских радостей. Ждём Agda 3: Practical Edition.
>>351173
Дырки в стиле агды — это скорее undefined. Только рефайна-то один хуй нет. Пиздец, как этого механизма не хватает после агды.
>>351178
>ромбиков, стрелочек,
Ну их нахуй.
>миксфиксов
К примеру https://groups.google.com/forum/#!topic/idris-lang/CyIazcoIN04
>>351045
Скала это нормальный гибридный язык, где можно использовать и императивный, и функциональный стиль.
Хаскель - чистый функциональный язык, написание императивного кода в нем очень напоминает метод удаления гланд через задний проход.
>>351292
Написал do - и хуячишь императивщину как на бэйсике каком-нибудь, никаких гланд и жопы, всё выглядит естественно и натурально.
>>351294
покажи мне эффективную реализацию quicksort на Haskell и потом покажешь, где там всё натурально и естественно
>>351303
В скале костыли. На курсере чувак на первой неделе рассказал про хвостовую рекурсию, а также показал, как некоторые из алгоритмов можно адаптировать под хвостовую рекурсию, вводя аккумулирующую переменную. На второй неделе он рассказал о новом костыле и показал вложенную функцию, благодаря которой ещё одна задача была подогнана под хвостовую рекурсию. Первые две недели ясно показывают, что ФП состоит не столько из решения непосредственно задачи, сколько из костылей, сводящих естественное и понятное решение к решению с хвостовой рекурсией в ущерб ясности кода.
>>351304
>производительный код состоит не столько из решения непосредственно задачи, сколько из костылей, сводящих естественное и понятное решение к решению с оптимизацией в ущерб ясности кода
поправил тебя
>>351317
Там речь не о производительности, а о том, чтоб стек не наебнулся во время выполнения. Т.е. о банальной работоспособности - либо ты ставишь костыли и получаешь просто рабочий код, либо ты их не ставишь и получаешь стековерфлоу.
>>351317
Сначала у них ФУНКЦИОНАЛЬНОСТЬ ЧИСТОТА ДЕКЛАРАТИВНОСТЬ БЛИЗОСТЬ КОДА К ОПИСАНИЮ АЛГОРИТМА, а потом костыли и отмазки, мол, да я только на полшишечки, один раз не императивщик.
>>351332
А ты когда-нибудь слышал, чтобы сишники кричали, что они не рабы машины и пишут красивый декларативный код, который читается почти как описание алгоритма, который он реализует?
>>351335
Этот ебаный map... Зачем такие сложные задания для сраного введения в фп?
def map(s: Set, f: Int => Int): Set = (x: Int) => exists( s, (y: Int) => f(y) == x )
>>351335
ну код на С тоже можно писать красиво и понятно, не декларативно конечно, а императивно... не в стиле "мне бы бутерброд", а в стиле "сделай мне бутерброд, сучья машинка"
но после оптимизаций там обычно черты алгоритма уже не проглядывают
я вот об чём..
>>351485
ты вообще на какой ответ отвечаешь, лалка? и чем тебе map не угодил?
>>351492
>ты вообще на какой ответ отвечаешь, лалка? и чем тебе map не угодил?
Он походу просто в тред ответил, нажав на последний пост. Под мапом он, судя по всему, подразумевает домашку.
>>351489
Да я сам решил, нафига ж ты в тред решение запостил, лол. Может конечно это я туповат, но мне кажется что первые же задания все-таки дофига сложные.
Кстати, а на предыдущих сессиях они были те же? Немного не верится, что каждый пятый участник их прошел, учитывая что большинство вообще задания не трогает.
>>351492
Пардон, не заметил.
>>351500
>Может конечно это я туповат, но мне кажется что первые же задания все-таки дофига сложные.
Я не думаю, что они сложные. Они просто хитрые, они непривычны с точки зрения классического программирования, но все эти задания укладываются в рамки того, что чувак рассказывал на видео. Тут даже ничего изобретать не надо, просто найти что из того, что он рассказывал нужно подставить в данное место.
>>351500
>Пардон, не заметил.
задай мне тогда свои задания, попробую на лиспе для развлечения зделать
Бумп. У меня одного хуйня в сабах от 3.1?
>>348165
говорят, у вас весело тут
Является ли строка моноидом?
>>352550
да
алсо я уже получил 10/10 за третью неделю, а кто ещё не успел — сасайте
>>352550
Пизда твоей мамаши моноид относительно операции засовывания хуйов
>>352550
Строки с конкатенацией мало того, что образуют моноид, так ещё и свободный - всем моноидам моноид: http://en.wikipedia.org/wiki/Free_monoid.
>>352705
насколько полезно задрочить абстрактную алгебру?
будет круче код писаться?
>>352724
Асбтрактная алгебра для души, а код для поддержания штанов.
>>348165
говорят, у вас весело тут
>>354144
Ну охуеть теперь, у кого не бывает. Лучше бы зарепортил там, пидор. Исправили бы да спасибо сказали.
> class Square extends Square with cococo-cococo
гавнищетм
>>354157
Уже четвёртая итерация курса. Хотели бы исправить, давно бы уже исправили.
>>354881
После нахождения всех списков убрать те у которых длина не четыре?
>>354884
После can используется инфинитив без to
В слове contains -s лишняя
Как использовать Slick в Akka?
Почему ошибка?
>>355591
>пок пок пок
А так работает
>>355603
я вот так хочу
20/20 с первой попытки
учитесь, пока я жив
>>355842
лучше поздно, чем никогда
наконец-то выходные
и снова 10/10 с первого раза
а как дела у вас?
>>361498
все хорошо, братишка. спасибо, что напомнил про scala :3
оо да детка
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))
class Cache[T <: hasId[C]] {...}
val cache = new Cache[Prime]
А что значит + и - в генериках?
БАМП
Кто-нибудь сталкивался с макросами?
>>365186
Как прльзователь — да, но писать их не осилил, в Clojure это проще гораздо...
>>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")
}
"""
}
>>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")
}
>>365872
В чём профит по сравнению с "обычной" сериализацией? Или не обычной, а scala pickling
Кто знает хороший материал по implicits? С примерами и юз кейсами?
>>365947
а) свой велосипед ближе к телу б) пиклинг использует рефлексию в райнтайме, макрос - при компиляии, а значит макрос быстрее. в) дополнительная возможность попердолиться
Как сделать такой код работать http://ideone.com/N8rFHa
>>367709
Указать явно тип C, или, если он тебе на самом деле не нужен, вообще убрать C: http://ideone.com/Sz0suu
>>367799
В том-то и дело, что мне нужны оба типа (и контейнера и его содержимого)
>>367805
Ну что ж, тогда придётся расчехлять борщемагию: http://ideone.com/TGJ6vk
>>348165
http://www.slideshare.net/extempore/keynote-pnw-scala-2013
скала всё. Учите хаскель.
>>367886
50 минут. А слайды пролистать минут 15 максимум.
>>367944
Вся суть этих видео не знал. 10 минут для кококо посмотрите кто я такой и чем занимался, 20 минут на не смешные шутки, 10-15 на слайды, 5 на вопросы.
>>367823
нет практического применения, нет IDE, нет библиотек...
>>368086
Хочу примерно такой код, чтобы работала последняя строчка (предпоследняя работает) http://ideone.com/gxMsl8
Стоит ли изучать скалу, если в моём мухсранске нет контор, которые с ней работают? Знаю Java, понравились лямбды и потоки в восьмёрке, но хотелось бы попробовать какой-нибудь функциональный язык.
И ещё, как у неё с потреблением памяти, настройкой jvm? Можно ли задеплоить нехитрое веб-приложение в 128MB?
>>368687
мало, для ЙВМ нужно минимум 300 мб оперативы + 4 мб за каждую строчку программы для стабильной работы
>>368687
Для нехитрого лучше что-нибудь другое выбрать. А задеплоить можно.
>>368689
>4 мб за каждую строчку
Можно подробней про это?
единственно годный язык наданный момент. годный как самый передовой, самый динамично развивающийся. посмотрите в новыз версия макросы... это нечто. функциональная парадигма.. это не то с чего тут стоить начинать. после жабы.. а до этого после С++.. скала доставила, стал лучше понимать плюсы, больше нелюбить жабу. Пишите на енй. в жопу засуньте питон. если не хватает моджо начинать с с++, а стоит начать именно с этого языка, то скала это единственное что остается. тренд среактивным прогарммированием и кучей плюх идущих из коробкт делает так что и один в поле воин. да, можно писать в одного сложные вещи. никакого боилерплейт кода.. язык силен. ещё... ещё можно посмотреть на Ди и немерл, там сильное метопрограммирование. но скала не хуже. и здесь именно кодить, не зарабатывать лавэ.. не ставьте себе никогда такую цель как деньги, при таких раскладах невохможно сделать ничего. скалу не используют в продакшн.. ну есть да.. тиньков, експн, зоичбнк, и так по мелочи.. это не ентерпрайс пока.. её боятся. т.к. люди которые щас пишут на яве - 99% долбаебов. и очкуют что не вывезут проект на скале.
но для скиллсета маст хэв.равно как и с++, и всё что будет заставлять вас думать.. а не живать сопли с кенгуру, интеграцией, батчем.. и прочим хмл адом..
>функциональная парадигма
л&л
сцалатм есть оопущенство с 1-2 функциональных фич, не более
>>368881
Двачую адеквата. Скала - это ООП с ёба-типами, к ФП она не имеет никакого отношения. Единственный профит от Скалы в том, что махровое быдло в скалу таки не может, поэтому гораздо больше шансов попасть в адекватную команду, чем в случае джавы, например.
>>368910
Если быдло не может в скалу, то значит ты попадешь в команду чсвшных долбоебов, которые ололо осилили новую дилду. Шило на мыло.
>>368916
ЧСВ-шные долбоёбы, которые могут что-то осилить, всяко лучше ЧСВ-шных долбоёбов, которые уже нихуя не могут. Впрочем, et dixisti, ебись с джавистами, если ты хочешь.
>>368881
> функциональных фич
Огласите весь список.
Объясните, чем трейт отличается от абстрактного класса.
В учебнике говорится, что трейт как интерфейс, но может включать определения методов и поля. Но это же тогда получается абстрактный класс.
>>368960
Нахуй абстрактные классы, ебашь всё на трейтах.
без дживээма...
ебаште нахуй буст, или пишите под одну платформу.
один хуй.. либо с++ либо скала.
>>368960
Асбтрактный класс может иметь конструктор, а трейт нет. Абстрактный класс совместис с джавой, а трейт совместим, только если не содержит код реализации.
>>368979
Трейт это как миксины в руби как я понимаю.
мимокрок
можно как-то сделать отдельную реализицаю джинерика для конкретного типа? То есть, скажем, есть class Box[T] { ... }, я хочу сделать отдельную реализцию для Box[Int] { ... }. Так, чтобы при создании new Box[Int] использовалась она, а для других, общая?
>>368285
Да видел я, просто изменение вариантности требует меньше изменений в коде. И, конечно, оно делает не то что задумано, хотя с такой пиздоватой постановкой задачи принимается любое изменение после которого код начинает компилироваться.
>>368687
Зачем тебе скала, крутящаяся на ёбаной JVM? Попробуй хаскель, я серьёзно. Он более чистый, для знакомства с ФП подойдет лучше. Если совсем по-хардкору угорать, бери Idris.
>>369116
Можно изменять поведение класса/метода в зависимости от переденного типа (без рефлексии). Смотри неявные параметры и CanBuildFrom в коллекциях.
>>369215
Это уже эзотерика какая-то. Idris позиционируется для язык общего назначения. Кстати, именно о недостатках языков общего назначения, а не о скале как таковой, говорилось в >>367823. Так что
>скала всё. Учите хаскель.
чушь, хаскель такой же.
>>369225
Никак не поможет. Я отвечал именно на >>367709.
>>369311
Хорошо, убедил, теперь я признаю, что Хаскель такое же дерьмо как Скала.
заебали.всё познается в сравнении.
хаскел... вы ебу дались.. у кого он в продакшине???)))))
есть С, 40% опенсорса на нем, перепроверьте.. че уж.
с++, жаба, скала..
долго рассказывать всё.. но похуй.
системное программирование. на с++ протатипирование проекта пиздарулю, жизнь слишком коротка что бы писать на с++, в одного - это важно.
но на скале в одного можно ебануть внатуре.
на жабе хмл ад. хелловорд от учетной системы не будет отличать почти.. если это JEE. но блять...
кто знает три и больше языков со статистической типизацией... ну скажите, что вам скала не доставляет???
ФП лишь бонус.. он к месту и в С++ и в Скала. с ним удобно. да, это лисп и не хаскел и слава богу. Питон.. зуй сосет, на нем только деплойные скрипты щас пишут))))))
есть Д и Немерл.. не крутил их, не время ещё для них.
но в Скала есть всё. Всё! быстро. удобно.учить её.. хз, я вот не учил её, просто пишу на ней читая стековерфлов.
одна проблема, как и писал выше.. очкуют джависты от неё.. но они и яву то не до большого понимают. я когда после явы открыл для себя АОП, а потом либы нашел для С++ АОПные.. и начал их использовать все охуели))))))))
спрашивают:
что выберешь пистаь хуево и что бы мы понимали и сопровождали код, или охуенно и что бы мы нихуя не поняли?
мнения разошлись, пришлось искать работу.
..а хаскель учить для чегото большего стоит, чем что бы его промить на бордах потом. понимаете???
ну где он хорошо, в каком таком проме вы его пользуете????
но к скале бонусом он ой как нужен
(хаскел)
>>348165
<- скала говна
>>369196
> Смотри неявные параметры и CanBuildFrom в коллекциях.
Можешь какой-нибудь пример привести? А то насколько я понял CanBuildFrom занимается несколько другим делом.
Пишу-на-Scala-за-деньги-кун врывается в тред.
>>369446
Пишу на работе на Скале уже больше 3-х месяцев и вот, что могу сказать: я разочарован.
С одной стороны Скала недостаточна наворочена для борщей (текущие абстракции над JVM и, как частный случай, порезанный type inference), с другой - ещё не готова для интерпрайза.
Последняя моя боль: нерабочий рантайм рефлекшон в 2.10. Ну то есть он как бы есть, но бляха-муха непотокобезопасен от слова совсем. А как, блять, без рефлекшона сделать либу для автоматического маппинга модели в БД - хз. Руками писать маппер - про такое даже в убогом Java мирке забыли уже году в 2001-м.
>>369451
Как следствие - убогие либы для работы с БД.
Вот ты такой модный хипстер хочешь складывать case классы в MongoDB. У тебя там конечно плоская модель со 100500 полями, поэтому вручную маппить модель в DBObject - влом. И ты думаешь, святые рэйбэны, case class это же по сути иммутабельная мапа, значит должно идеально ложиться на Mongo-объекты.
А хуй тебе.
case class это блять кортеж, и чтобы проинспектировать его в виде ключ-значение нужон рефлекшон. Чудненько, а где он? А нет его, он, блять падает с ебическими ошибками при параллельном использовании до Scala 2.11, под которую нихуя библиотек ещё не скомпилено.
От такого рождаются ущербные огрызки вроде этой либы:
https://github.com/novus/salat/
Кто смотрел, как она инспектирует классы в рантайме, тот в цирке не смеётся. Основная идея - а давайте отреверсинжинирим как скаловский компилятор 2.10 производит байткод и напишем свой костыль для рефлекшона по мотивам. Бажный и неподдерживающий львиную долю случаев. Проще сказать, что поддерживает.
Нахуй так жить, пацаны?
>>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)
}
>>369457
Рефлешкон это когда ты лезешь внутрь объекта или класса и смотришь, что там внутри.
Интересно. Как этой фигнёй воспользоваться в не-Play проекте? Если можно, список maven или sbt зависимостей.
>>369464
>Build.scala
object Dependencies {
...
... = "org.reactivemongo" %% "reactivemongo" % "0.10.0"
... = "org.reactivemongo" %% "play2-reactivemongo" % "0.10.2"
}
>>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. С ними что делать?
>>369467
>use traditional way of writing Reads/Writes manually?
>>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 персистится без ручного петушения.
>>369466
Благодарю.
>>369301
Они оба задумывались как языки общего назначения.
А на хаскеле возможно и поприятнее писать, сказать не могу, опыта работы с ним не имею, только в пейперцах код видел да факториалы писал.
>>369451
>недостаточна наворочена для борщей
>порезанный type inference
Вообще не связанные вещи.
А скала как раз таки очень навороченная:
http://apocalisp.wordpress.com/2010/06/08/type-level-programming-in-scala/
https://github.com/milessabin/shapeless
И это только абузы системы типов, что, очевидно, для "борщей" интереснее всего.
>не готова для интерпрайза
Да, есть недоработки, но она так же не готова как и мейнстримные языки. Если у тебя есть какие-то серьёзные инфраструктурные проблемы со скалой в 2014, то ты скорее всего не до конца в чем-то разобрался или не посмотрел все альтернативы.
>>369423
Похожую технику можно применить и для твоих целей. Может быть вечером код напишу.
>>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-костыли. Это не функциональщина, это ода человеческой способности приспособиться к любой хуете и реализовать в ней любимые монадные трансформеры. Жму руку авторам, гвозди бы делать из таких людей.
>>369522
>Если у тебя есть какие-то серьёзные инфраструктурные проблемы со скалой в 2014
Непотокобезопасный runtime reflection в 2.10 это достаточно серьёзная проблема?
>>369527
Разве рефлексия всё ещё не эксперементальная фича?
Как юзать либо скомпилированную под скалу 2.10 в скале 2.11 или обязательно рекомпилить?
>>369584
>обязательно рекомпилить?
Никто не знает, даже Одерски, даже Аллах.
Попробуй, хуле.
>>369557
Её уже используют сторонние либы, потому что без этого вообще некоторые вещи не сделать. Пример:
https://github.com/websudosuk/phantom
Под 2.11 не скомпилена.
>>369423
http://ideone.com/0K54nw
Вот что-то такое я имел в виду.
>>369525
Да, использовал и код видел. Согласен что повсюду ScalaJVM-костыли. Но тут дело в том что Scalaz это не совсем Scala-way чтоле. Не нужно пытаться на писать на скале как на хаскеле, она задумывалась именно как микс ФП и ООП, отсюда и проблемы с выводом типов кстати.
>>369732
Странно упрекать инфрастуктуру скалы в том что кто-то использует эксперементальные фичи. Это же как бы это только плюс, что у тебя есть возможность их использовать. На свой страх и риск конечно же. Если этот вариант не подходит, используй проверенные методы.
>Под 2.11 не скомпилена.
Ты сомневаешься что скомпилят? Если прям срочно нужно, скомпиль сам, будь мужиком блеать.
Какую IDE посоветуете для Scala? Я так понял, выбирать приходится только из плагина eclipse и плагина jetbrains, может я что-то упустил?
>https://class.coursera.org/progfun-004
Как часто они проводят курсы? Просто я уже выбрал Future Sessions, мне отказаться и пройти старый?
>>372314
IDEA сама-по-себе намного приятнее, но вот поддержка сцалы в ней куда хуже, чем в ScalaIDE (плагин для Eclipse).
>>372411
Ну даже не знаю. Перешел на идею год наза, после пары месяцев в эклипсе. Тогда плагин для скалы в ней был лучше, да и вообще как IDE эклипс мне не понравился после MSVS. Как сейчас не знаю, слышал что хорошо улучшили, да и в идеевском плагине нашел очень серьёзные глюки, вплоть подвешивания идеи намертво.
>>372344
Алсо, как быстро они проверяют мои решения? Отправил им Getting Started Assignment, когда ждать ответ? Или проверка у них там ручная, и проверяют только во время идущей сессии, а в остальное время шлют на йух?
сцялатм-кодер Веня нашёл на корпоративном сервере старые инсталляшки Agda и Coq, которые сисадмин просто позабыл удалить. Он установил их себе и стал коммитить в главную ветку тексты, подсмотренные в комментариях у сеньор-девелоперов: «Inductive nat = zero | succ nat», «Theorem A1: forall x: nat, x != succ x», «f {A : Set}». Получалось невпопад, и код переставал компилироваться, поэтому Вене таки удалось обратить на себя внимание сеньоров. Глава QA после первого же неудавшегося билда пояснил происходящее в письме всей группе разработки, потом заскочил в офис к кодеру и окропил бодрой струёй мочи его самого и его компьютер. Другие разработчики тоже последовали его примеру, а потом заблокировали ему доступ в главную ветку, и сцялатм-кодер Веня остался сидеть перед сгоревшим компьютером, без доступа к главной ветке и воняющий мочой сеньоров-CS-ников.
идея норм, лучше чем еклипс, не в скале дело вашпе)).
ч тут ещё писали...
а! сыра для продакшена. блеать, мужики .. я конечно хуй знаю, вы наверно счастливые люди, а мне везет как утопленнику... вот прод на жабе.. называется: Ебать в жопу этот мобильный телефон!!!.. там айбиэмный мажоный сапп... и всякое железо типо: ояебенею.. но ..код, сука.. код писали уёбы.. причем код тех АПИ которое мы пользуем, собственно и наш код от этого жестко воняет. ..переписать бы части, но если бы сказали.. чувак.. выбери любой язык, я бы спп выбрал.. ибо, если нужно волшебство то только на С++ его можно вырубить. .. ява после спп выглядит как шлюха, которую трахнут и бросят. скала после жабы - доставляет. но с++ мерещется навсегда.. хоть это и не гемдев у нас..
или переписать на хранимках..
до эти гуру по тюнингу БД сука миф... нет их. не существует.
конечно может како-нить зуеплет пригнать за сумму с 4мя 0ми ..в уши нассать.. в БД так и останется мертвой. т.ч .и зранимки до определенного обьема данных..
дальше.. дальше какие-то гугло-прихваты(извраты).. либо MPI буста.. типо того
Когда в тесте использую json4s для сериализации объекта, то не завершается Future по отправке сообщения.
Код типа:
val req: String = makeRequest("authorize", Map("login" -> "admin", "password" -> "123"))
client.send(req) // Future timeout, хотя на сервер все приходит.
Если взять сгенерированную строку и отправить напрямую, то все работает. Как это вообще может быть связано, блядь?
>>374365
Такая херня происходит, если конектиться в beforeEach, если в самом тесте, то все нормально. Конекчусь в beforeEach, создаю клиента var client, его потом использую в тесте. В качестве клиент использую netty.
>>374384
Хотя нет. Немного поменяешь код и опять та же хуйня. ЕБАТЬ БЛЯДЬ СУКА ПИЗДЕЦ
>>374385
Короче, я добрался до корня зла. В недрах модуля hookup такой код:
def send(message: OutboundMessage): Future[OperationResult] = {
if (isConnected) {
val f = channel.write(message).toAkkaFuture.future
} else { ...
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
}
}
>>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) чего стоит
Почему companion равен none, если кейс класс определен внутри метода? Это баг или фича? Как обойти? Напрямую конструктор вызвать нельзя, только через компаньона.
>>375851
Изъебнулся в итоге через комбинацию макросов и жабьей рантайм рефлексии, но пиздец, ебал я этой джавы рот.
http://pastebin.com/u3D94HDR
>>375900
Все равно отсос. Если класс объявляется внутри другого класса, то для создания внутреннего класса потребуется передать в его конструктор указатель на объект внешнего. То же и для рефлексии, поэтому там для полноценной рефлексии внутренних классов с доступом к объекту-компаньону сделан отдельный апи, который инициализируется указателем на объект внешнего класса. То же, по-видимому, и с макросами. Это еще куда ни шло, в большинстве случаев это указатель доступен, но самый отсос начинается, когда класс объявлен внутри анонминой функции кода, передаваемой в функцию с вызовом по имени (именно так вызываются тесты в scalatest), потому что тогда создание класса потребуется указатель на эту анонимную функцию, которого нет. Средствами скалы получить такой указатель, как я понял, нет возможности.
http://pastebin.com/58P66wRZ
>>375974
мб ты не знаешь, но в жабе nested static & non-static классы. возможно, ты не совсем понимаешь, что тебе надо
http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
>>375990
Мне надо, чтобы я мог объявляется кейс классы внутри тестов, а не выносить их в одну кучу за пределы тестов.
>>375974
чувак я завтра посмотрю вчера сегодня я никакой
что тебе надо опиши я завтра с утра напишу
>>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
}
}
}
>>376019
Параметрический полиморфизм и ClassTag\TypeTag (или какой-то собственный класс типов, не знаю что тебе нужно от рефлексии) еще не проходили?
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"))
}
}
>>376037
>Предлагаю тебе самому пробовать и заполнить вопросики. Можешь добавить TypeTag, ClassTag, заюзать макросы.
Зачем тебе эти изъёбства с объявлением классов в функциях? Убери их оттуда, сделай один класс, и используй
>Параметрический полиморфизм и ClassTag\TypeTag
чтобы не было Yoba, YobaBoolean, YobaNullabe, а был один Yoba[T].
>>376164
сделай вот так, заменяя первоначальную макру http://pastebin.com/N3ZmLFXd
>>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)) не вызывает ошибки даже в рантайме б) не позволяет объявить йобу с другим количеством полей.
>>376212
подожди, покажи для первоначального кода, что у тебя не работало, не вызывалось в лямбде? или что? потому что у меня всё работает.
>>376251
Хм! А ведь и правда работает. Я просто тестировал твой код не в лямбде, а так просто. В лямбде все действительно работает. Охуенно, спасибо! Сейчас попробую заюзать.
Посоны, как вы запоминаете все эти иероглифы?
http://stackoverflow.com/questions/7888944/scala-punctuation-aka-symbols-and-operators
>>376531
да похуй пиши какие хочешь, если не скомпилиться то ИДЕ поменяет всё
>>376531
Можно ещё своих сколько угодно наделать, ну и использовать не только ascii, а всякие хитровыебанные символы юникода.
>>376549
Вся суть
Какую ORM лучше использовать со скалой? На джяве использовал гибернейт + спринг орм.
>>376567
slick лучший походу, потому что живой.
скала-активрекорд тоже ок, но давно не обновлялся, и только для скалы 2.10
скурл тоже норм
скалалайкждбси для дибилов.
Кто-нибудь может объяснить, что это за ебаная параша (SBT: org.scala-lang:scala-library:2.10.4), которая заменяет все зависимости в модуле на себя каждый раз после перезагрузки идеи?
>>376995
Какого-то хрена вылезла настройка сборки в sbt, хотя проект изначально создавался для maven (видимо из стороннего проекта sbt проекта, который я сначала подключил в виде модуля, а потом убрал). Эта настройка тянула за собой sbt-and-plugins, который тянул за собой сабж, который почему-то считал, что его одного хватит на весь проект. Вообще, в идее у меня постоянно какая-то хуерга с проектами, то ли из-за моих кривых рук, то ли из-за джетбрейнсов.
>>377023
Не используй говноплагины для ИДЕИ и не делай проект руками.
Используй плагин для sbt - sbt-idea, генери проекты с его и только с его помощью. Это к тому же еще и даёт переносимость проекта между ИДЕ при использовании VCS, не все любят именно IDEA.
Я тут понял что лучше кложуры только julia
Скаланы, подскажите, как сделать. Вопрос даже не по скале, а по архитектуре. У меня при старте программы выгружаются из базы всякие объекты, допустим, в класс-хранилище Storage. Потом где-то в самой жопе иерархии акторов создается актор, которому нужно это хранилище. Как передать это хранилище? По цепочке конструкторов убого. Слышал, можно применить каке-патторн. Но все равно получается цепочка, по которой нужно передавать это хранилище. Как быть?
>>377479
1) Передавать через конструкторы нормально, может у тебя просто слишком глубокая иерархия акторов.
2) Можно сделать это хранилище глобальным, применив кейк-паттерн и унаследовав глобальный объект от Storage (и всех остальных сервисов).
3) Если это не подходит (есть ты хочешь разграничить доступ к хранилищу или у тебя их несколько), можно сделать один актор, который будет раздавать хранилища по требованию. Но все равно нужно как-то получить ссылку на него: опять же или через конструктор, или из глобального объекта, либо связываться с ним через ActorSystem.actorSelection (тогда путь к нему должен быть известен заренее, и я не помню точно как оно в кластере работает).
Посоны, полез смотреть scala и akka, но не совсем понял как работает сетевой IO. Кому не лень, дайте листинг такого tcp сервера:
Пакеты делим нулевым байтом;
Получил пакет - отправил его обратно;
Благодарочка.
>>377751
http://pastebin.com/ZBbQbCYy
Ток вместо нулевого байта, я использовал '_' чтобы тестить через неткат
>>377777
>case x if x == ByteString('_') => Some(left, ByteString.empty)
можно удалить
>>377777
Простите за глупые вопросы, но не понимаю, что происходит в SimplisticHandler.
Допустим пришло "11111_22", а потом "222_". В ответ нужно послать "11111" и "22222".
Где хранится "22"?
Много магии, погружение происходит болезненно.
>>377982
создай там структуру хэшмап или масив и там храни
>>377982
>Где хранится "22"?
>def receiveBs(bs: ByteString): Receive = {
в bs. Вот я комменты написал, если что непонятно, то спрашивай. http://pastebin.com/JxLDjiWa
>>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)
}
>>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 возвращает функцию.
>>378185
Потому что
{
case "incr" => context.become(counter(n + 1))
case "get" => sender ! n
}
val pf: PartialFunction[Int, String] = {
case 1 => "1"
case 2 => "2"
case _ => "hui znaet chto"
}
pf(1) // "1"
>>378194
А чем PartialFunction[String, Unit] отличается от String => Unit?
мимо
>>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")
>>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/
>>378263
ага, понял, правильно
def counter(n: Int): PartialFunction[String, Unit] = {
case "a" => n + 1
case "b" => n - 1
}
>>378220
У партиал фанкшон есть метод isDefinedAt(o: Any): Boolean, который говорит тебе, определена ли функция для конкретного агрумента. Потом частичные функции можно компбинировать через orElse: (pf1 orElse pf2)(someShit). Плюс еще дополнительные методы http://www.scala-lang.org/api/current/index.html#scala.PartialFunction
Натоны, хочу пройти курс на курсере, но он закончился 2 месяца назад. Assignment feedback будет работать?
Если я буду писать на скале в парадигме ООП меня закидают какашками?
>>379370
Если будешь игнорировать функциональные принципы и писать джава-код скала синтаксисом, то да.
>>379372
>джава-код скала синтаксисом
Оба выглядят как говно.
В этом треде обсуждаем единственный нормальный язык для JVM.
Собираем хорошие книжки, фреймворки, и отправляем ньюфагов на курсеру https://class.coursera.org/progfun-004 пока идет новый курс