Вы видите копию треда, сохраненную 14 февраля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Курс по fp на скале для слоупоков: https://www.coursera.org/course/progfun
Список годноты: https://github.com/lauris/awesome-scala
Презентации летнего ScalaDays: https://www.parleys.com/channel/53a7d269e4b0543940d9e535/presentations?sort=views&state=public
Два недавних форка компилятора, один от тайплевела и второй от баттхертнутого:
https://github.com/typelevel/scala (https://github.com/typelevel/scala/wiki/Differences)
https://github.com/paulp/policy
Завтра ищешь в интернете книжку Programming in Scala. Похуй если ничего не поймешь. Затем идешь на scala-lang.org и изучаешь стандартную библиотеку от корки до корки. Потом зубришь, именно, сука, вызубриваешь конвенцию по написанию скала кода - от EPFL естественно, чтобы от зубов отскакивало. Когда напишешь свой первый клон Twittera, по пути изучив основы дискретного и лямбда исчисления, скачиваешь и изучаешь любой асинхронный скала вебсервер, рекомендую Play!. Как переделаешь твиттер клон, чтобы выдавал по крайней мере 5 тысяч запросов в секунду, можешь идти дальше - тебя ждет увлекательный мир хайлоада. Apache Hadoop и Spark, сверхбыстрые асинхронные key-value хранилища, NoSQL и прочие мира открытого исходного кода приблуды. Отсос хиккующих питонистов / просто неудачников типа годаунов или рубифанбоев, которые едут по несмазанным рельсам по жизни, не заставит себя ждать и уже через пол года ты будешь подворачивать штаны, есть маффины, запивая смузи и любая баба будет течь от упоминания твоего особого взгляда на концептуальный южно-африканский кинематограф.
>>576899
Затем, что синтаксис удобнее.
я начинающая веб макака, пользователь spring фремеворка.
я могу писать на скала вместо жабы?
>пикрел
Имхо на Java лучше и понятнее, т.к. сразу понятно, что он делает. Код на скале выполняет какой-то flat mapping по мапу, это вообще ниачем мне не говорит (на самом деле говорит, но я делаю вид что не шарю функциональную дрисню)...
>я могу писать на скала вместо жабы?
Разумеется! После недели использования скалы ты от жавы блевать будешь.
Плей у него асинхронный.
Хррртьфу в еблет.
Алсо ссу на акку и все прочее говно.
Груви, котлин, кложур - все ссут на скала олигофренов.
Даже создатель языка ссыт на скалаолигофренов.
Мимо жабабог.
Зато пока жава бог уже будет дома ебать няшную тянку, ты будешь ждать пока это говнище скомпилирует последний комит на 5 строк.
> Имхо на асме лучше и понятнее, т.к. сразу понятно, что он делает. Код на джаве вызывает какие-то конструкторы у классов, это вообще ниачем мне не говорит (на самом деле говорит, но я делаю вид что не шарю ооп дрисню)...
Ну, претензии понятны, чо.
Не пизди про фреймворк говноед.
Так и скажи хеловорды на на буте.
Или быстра в студию типы срезов и советов в спринговском аоп.
Запости побольше боевых картинок пидрила б
Один хер от этого sbt говном быть не перестанет и вонючая скала будет собираться в 1000 раз дольше явы
А в чем вообще прикол? Вот даже на втором пике в шапке я понимаю что написано у пердоллера справа, в то время как у пердоллера слева - нечто напоминающее мне о временах ANSI C с макросами. Код же по структуре, скорости, полезности не поменялся, он стал просто короче и непонятнее. Тогда зачем? мимо кресто-макак
Потому что скала это ебучий препроцессор обычной явы.
Ебучий слоупочный препроцессор.
Сахарок ифункциональное говнецо, которые уже есть в груви и яве8.
Скала абсолютно убогое и негужное говнище.
Потому эта сцанина и тормозит как мамка опа перед 3 хачами.
Чем оно лучше кложуры?
Ну лиспосёма, хватит уже.
Иди лови эксепшены в своих лямбдах.
Двачую вопрос. Сейчас пишу на ноде, заинтересовала скала. Хочу выучить, но в чистой жавапараше нет никакого желания ковыряться.
Джава проста как камень, не вижу в ней нечего сложного. А если учитывать как хуево работает скала и какая у неё хуёвая инфраструктура в джавапараше тебе всё-равно надо будет разбираться.
Проиграл с тебя. Реиспользование жава либ бай дизайн же, зачем скала господам переписывать все написное жаба рабами за 20 лет.
Если инфрастукура такая хуевая чтоже жабаебы собирают свои жаба проекты на sbt и пишут тесты на скале.
Да похуй. На джаве с недавних пор тоже можно писать:
orders.stream().flatMap(List::stream).collect(Collectors.toList())
>>577082
Я 2.5 года назад вкатился (был сишарпером), но думаю мне повезло: почему-то написал в резюме что знаю скалу немного, оказался в подходящее время в подходящем месте etc. Перекатиться можно, но думаю будет непросто. Если нет опыта в работе с платформой, нужно знать что-то кроме языка: разбираться в предметной области, или в хадуп-стеке, или в вебе, ну вы понели.
>>576999
Они разные. Для меня Скала лучше тем что:
1) Статическая типизация
2) Не лисп, а значит синтаксис есть и не принято широко использовать макросы.
Можно конечно сказать что это не преимущества, а недостатки. Тогда бери кложуру.
>>576903
Любой язык лучше учить прочитав книжку по нему и написав реальный код, c тестами и всем остальным. Имиджборда подойдет.
>>577082
В скале часто используются джавовые библиотеки и вообще инфраструктура у них похожа, так что ковыряться все равно придется, от проекта зависит насколько часто. Мне лично редко приходится.
>>577146
Эти даунята троллить пытаются. Скала - препроцессор джавы на рефлексиях. Ну ахуеть теперь.
http://twitter.github.io/scala_school/ru/index.html
http://twitter.github.io/effectivescala/index-ru.html
А чем вы билдетесь? SBT? Плагин для грейдла есть? И вот что мне ещё интересно, а когда вы юзаете джавовские либы вы используете стиль джавы? Все эти явные вызовы и прочее? На досуге читаю скалу для нетерпеливых Хорстмэна, очень не нравится синтаксис. Этот вызов методов без скобочек, возможность переопределить любой символ, очень всё это попахивает плюсами.
мимо-джавист
Петух у которого половина фреймворков работает на рантайм аннотациях нам еще пояснять что-то будет.
>очень всё это попахивает плюсами.
А скалка это и есть такой хипстерский плюс-плюс залитый сахарком и сервированный в окружении жвм.
Если метод возвращает pure значение и нигде не мутает стейт, то и скобки не нужны, потому как referential transparency и вместе вызово однохуйствено получено ли значение вызовом метода или это константа. По конвенции скобки оставляют только у side-effect методов типа print().
Билдимся SBT, почти всем довольны. Можно еще maven юзать, про gradle не знаю.
>И вот что мне ещё интересно, а когда вы юзаете джавовские либы вы используете стиль джавы? Все эти явные вызовы и прочее?
Не совсем понял о чем ты. Стиль именования одинаковый же.
>Этот вызов методов без скобочек, возможность переопределить любой символ, очень всё это попахивает плюсами.
У тебя какая-то каша в голове пока. Но впринципе стайлгайд нужен, есть такое.
А если под "вызов без скобочек" ты имелл ввиду вызов без скобок с параметрами, то такой синтаксис используется редко, обычно для построенния DSL или где он добавляет читабельности (где вызов можно прочитать как предложние, привет рабиблядкам).
И вместо Александреску у нас Сабин
Ну смотри пример из Хорстмана, вызов метода to он записывает как 1 to 10, вместо 1.to(10). Так вот, если вы юзаете джава либы как вы пишете?
Всё очень просто. Её просто нет.
Akka 2.4 бинарно совместима с 2.3
Как обычно пишем. Какая разница на каком языке либа написана?
>>577199
Так себе. На уровне исходников есть, бинарной между мажорными релизами нет. Если что-то хотя выкинуть из стандартной либы, сначала помечают deprecated, а в следующей версии удаляют. Btw, я за полный редизайн коллекций, даже если в каких-то специфических кейсах код сломается.
т.е. в проекте можно встретить и такой синтаксис Object getHujnya getGovno и такой Object.getHujnya().getGovno()?
Я видел только чтобы собирали на gradle и писали тесты на groovy.
Мне всегда казалось что set - одно из самых слабых МТС в экосистеме скалы
Ну как напишешь так и будет, лол. Чтобы этого не было, нужен стайлгайд и/или здравый смысл. Рекомендую так: Object.getHujnya.getGovno если эти геттеры не имеют сайд-эффектов.
Работа над проектом где-то в 50 программеров на java, где, собственно, сложно со стилем налажать, жмакай в idea alt+ctrl+L и будет заебись. Так через пол года столько говна была, что ну его нахуй. На проекте, конечно, не было code review, но даже если бы и было, думаю все бы на него забили. И не надо говорить о говно программистах, в больших командах всё равно будет пара говённых. помню как один запихнул тернарный оператор в тернарный оператор который был в тернарном операторе, вместо if-else ветки Как бы не гнали на го, но их gofmt и компилятор, который не собирает сорцы без нормального форматирования это охуенно.
ваша scala переусложнена. слез с нее в 2012
Двачую, а ведь в начале я так восхищался ею. Но чем дальше, тем больше я ее ненавидил.
потому что это ебаный haskell только на JVM. бросайте эту вашу скалу и берите Kotlin. Не ебите мозги зря
В ОП-пике ошибка.
Java:
public Stream<Product> getProducts() {
return orders.flatMap(o -> o.products);
}
Закопай это устаревшее жаваговно туда, откуда выкопал.
Наппример, в Android-разработке он нужен (хоть и не применяется широко), просто потому, что на Андрюше Java 6 (!!!) - очень отсталое дерьмо.
На самом деле джва-код вообще не запустится, что показывает уровень знаний скалахав.
>Работа над проектом где-то в 50 программеров на java
Писался четыре года, сменилось куча народу, и получается так, что ты даже не можешь подойти и сказать: "Чувак, что за говно ты написал?"
Такие нарушения это что-то вроде snake_case в джаве, редко встретишьб и это далеко не самое хуевое что может сделать говенный програмист. Алсо есть http://www.scalastyle.org, но для этого случая его использовать не стоит: если ты пользуешься DSLем, вероятно ты будешь использовать синтаксис object method.
>>577307
>С коллекциями-то что не так? Вроде Мартин там накрутил чтоб все круто было.
Долго рассказывть. Почитай вот это
https://gist.github.com/djspiewak/2ae2570c8856037a7738
Или баттхертнутого посмотри: https://www.youtube.com/watch?v=4jh94gowim0
>>577316
>потому что это ебаный haskell только на JVM.
Haskell на JVM это https://github.com/Frege/frege.
Скала никакого отношения к Хаскелю не имеет. И это не better Java, как Котлин, это отдельный язык.
Я подумал, что одновременно.
> непонятнее.
> мимо кресто-макак
Ну ничего удивительного, для мартышки наука тоже будет непонятнее банана.
Вот и научные работники подтянулись. Какой индекс Хирша имеем, юноша?
Сейчас проверил, например this getClass getClassLoader не компилируется вообще, остутствующие () тоже ошибка компиляции, а лишние () подсвечиваются идеей.
Писать на Scala хоть и не так удобно и продуктивно как на Java, но всё же лучше, чем на Haskell.
А всё потому что в Scala хотя бы есть человеческие var и for.
При беглом осмотре for оказался do-нотацией со странным названием. А с var что не так? Пиши весь код в IO, и радуйся жизни.
> человека
Это твиттер-аккаунт для шуточек про программировние. На него даже Phillip Wadler подписан.
но ведь в каждой шутке доля правды
Ну и т.д. Народ сидит какой-то кондовый; подобного рода толпу я последний раз видел, когда за каким-то хреном зашел на местный кампус Майкрософта. Бухгалтеры какие-то. Ну и в самом деле, кого сейчас интересует джава в наши дни?
Я-то зашел, на самом деле, чтобы объявление сделать, что нанимаем. Но уже жалею.
Вот одна строчка с экрана:
private static final Object PRESENT = new Object()
Кстати, мероприятие происходит на гугловском кампусе, но этот факт в данном случае нерелевантен. Единственно что водят по кампусу под конвоем.
http://ivan-gandhi.livejournal.com/2742298.html#comments
Типичная джява™ же
В джаве есть 2 мира:
1. Энтерпрайз джава - всякая джава EE и прочее дно.
2. Адекватные люди - биг дата, проекты ASF, альтернативные JVM языки и так далее.
Есть код типа такого:
for {
user <- Users.findById(userId)
address <- user.address
toilet <- address.toilet
govno <- toilet.govno
} eat(govno)
Внутри фора - опшны. Все красиво, все работает, няшнота. Но тут приходит злой заказчик и говорит - "Хочу видеть, почему мне приходит мало говна". Кароч, грубо говоря, если какой-то из опшнов - None, то нужно это залогировать. Как это сделать по-человечески, чтоб без развесистых деревьев if-ов и match-ей?
def tryOption[T](opt: Option[T], message: String) = {
if (opt.isEmpty) log.warning(message)
opt
}
...
for {
user <- ...
govno <- tryOption(user.govno, "Govno is in another castle")
}
А андроид ты куда отнес?
> Скалу не знаю, но удивляюсь, почему не понимаю код на ней. Пиздану, что это скала говно, а не я тупой.
Говорю ж, понятно с тобой все.
> Я джавист например, функционалку не знаю.
Пиздец, восьмая джава два года как зарелизена, семерку уже даже не поддерживают — нет, блядь, я, как истинная макака, не буду учить новое в языке, на котором работаю, пока пинка под жопу не получу.
Эти кложи Гафтер пытался впарить народу ещё в 2007-м; в 2008-м народ Гугла голосованием (сфальсифицированным) постановил: "не треба", а Гафтера поставили чинить какую-то кнопку в гугл-календаре; после чего Гафтер сбежал из соцлагеря в империю зла (после Гугла полюбишь и козла); ну и всё заглохло.
Между тем в Атлассиане уже рассекают на скале с аппликативными функторами и категориями Клейсли; в 2015м году, небось, или Хагано вставят в скалу, или мы будем мобильные апликации через когомологии в уме компилировать.
Смешно, короче.
И один с++ плывёт одиноко, как айсберг в океане. Ему чужды эти страсти.
http://ivan-gandhi.livejournal.com/2017963.html
Попросил его на джаве написать String formatAsDollars(double amt) - ну типа чтобы тройки разделять запятыми, и чтобы после точки две цифры, и чтобы округлено.
Смешно было смотреть, как он выдумывал методы по ходу дела; и как он написал amt.toString, потом токенайзером ("примерно") разбил на целую и дробную часть; вставку запятых в целую я пропустил, скучно, а спросил, как он округлять собирается. Ну там превращает строку в массив (магическим образом), и проверяет, если в третьей позиции 5, то увеличит вторую позицию на единицу. А если там цифра 9, спрашиваю. Задумался. Надо, говорит, дополнительную проверку. Про $999.996 я его не стал мучать, спросил про сиквел. Ну там top 20 earners. Стал джойнить таблицы, по номеру соцстраховки. Потом написал сиквел из двух строк. В первой rowcount=20.
Стал его допытывать, а вот если у меня два счета в банке, с одного 20 баксов берем, на другой кладем; как сделать, чтобы не удвоилось и не пропало. Слышал слово "транзакция". Если что, говорит, то rollback надо делать. А если успешно перенесли, то коммит. А как мы узнаем, что хорошо перенесли... ну и т.д.
Спросил, как "интернет работает". Ну тут общая картина у него есть в голове. Если, говорит, страницу успешно прочитали, то код 200. А если не нашли, то 400. Диковато, конечно, видеть человека, который про 404 не знает (ну ладно, ладно, бывают и другие четырехсотки).
Короче, еле вытянул этот час. О блин. Вот такие Раджи засрали весь дискурс... эх.
А так-то человек приятный, общительный. Пока не берется разбить строку на две части.
CCD
http://ivan-gandhi.livejournal.com/3403947.html
Джава код из оппика несет в себе информацию про объект, про коллекцию, про возвращаемый тип.
Код на скале нихуя не несет кроме того что есть коллекция и в ней блять есть обьект.
Эх, жаль джава-код не несет информацию о том, сколько под эти данные выделяется памяти, где конкретно она выделяется и где освобождается, было бы еще удобнее же. А если бы еще знать в какие регистры кладутся переменные — вот это красота была бы!
Ведь без этого получить из набора заказов набор товаров в них — никак нельзя.
Ну мне интересно сколько времени уйдет у человека пишущего на скале чтоб понять что твоя строка делает, и сколько у жабиста на понимание метода.
Ой я забыл, ты же код пиздуешь абы отдать его быстрее и забыть.
Тащемта нисколько ни ушло - так ёбана у нас тут flatMap значит products, наверное, iterable или option значит хуяк хуяк собрали продукты по заказам.
В скала-коде вызов одной-единственной функции, что он делает понятно с первого взгляда любому скалисту и джависту, осилившему лямбды.
нинужно
Выучи скалу, будешь понимать.
Пиздец, весь адекватный мир давно понял, что лишняя инфа о типах не нужна и перешел на вывод типов, и тут обьявляется мамкина макака, сидящая на древней джаве, небось даже еще без дженериков, и говорит, что это говно.
И вот от этого у меня горит. Джава, блядь, неповоротливое говно из-за обратной совместимости, релиз лямбд переносили с 1.7, и ели релизнули в 1.8, что бы вы могли юзать всё и с разу, а всё сообщество забило на это хуй. Пришел в проект где юзают 6 java, 6, блядь, срок поддержки которой закончился 5 лет назад, мало того, все фреймворки, в этом проекте, такой же степени тухлости, это же ебанный ад. И, если честно, я понимаю почему Оракл бугуртить по поводу андроида, мало того что в самом сообществе так сегментация рынка, так ещё и андроид застрял на версии 1.6.
>неповоротливое говно из-за обратной совместимости
И сразу иди нахуй.
>Пришел в проект где юзают 6 java
Это кстати норм, и я так и не понял в чем проблема сменить омг компилятор и писать на 1.7?
>андроид застрял на версии 1.6
Сам с андроида, 1.7 уже доступен. Оракл говножуи судятся с гуглом за все что можно.
Сам поделись опытом на чем и сколько пишешь?
Я боюсь макаки с неповортливым языком имеют тебя и в хвост и в гривы с легкочитаемым и компилируемым кодом.
Ну и добавлю что лучше уж котлин. Джетбренс говна не посоветует, пускай еще годик другой пройдет.
Оракл бугуртит только потому что бабки уходят гуглу, а не им.
Я кстати так и не понял в чем прикол срача, джава везде опенсорсная, еще и говорят что они спиздили апи, что за говно? Тогда уж весь энтерпрайз судили бы.
Пишу на java. Посматриваю в сторону scala и clojure. Дело в том, что поменяю я у себя jdk и что дальше? Закоммичу сорцы которые у других не заработают? И что мне потом, переписывать таргеты на CI, каждого просить прописать ключи javac? Да и хуй бы с ней с java, там спринг версии 3 и все конфиги в xml. Одно радует, я временно на этот проект попал.
Какая замечательная картинка, как нельзя лучше передает суть большинства российских джавистов. Хуже этого днища только 1C'ники.
Какие бабки? Ты о чем? Потому что андроидщики не покупают веблоджик или ораклдб? А может не проходят сертификацию у оракла? Так и в мире бекэнда это уже давно никто не делает.
Переходили с 6 на 7 и далее на 8. Оба раза просто меняли версию jdk в maven. Не знаю что у вас там за проблемы.
Ну типа в андройде не JVM, а своя нестандартная машина. Солнце с майкрософт точно так же судились.
Ну а на кой хуй им тогда судится за опенсорс? Развивайте себе язык раз взялись.
Работал в прошлом году над одним проектом, который на 7 джаве просто падал (на 6 было все норм), какие-то аннотации там не поддерживались. Но там была реально куча говнокода, ни тестов, ни Maven не использовали.
Так и есть, там ещё и проект билдят антом, а зависимости подкладывают руками. На вопрос хули вы так делаете и что это за говно, говорят что и так работает, а проекту скоро уже 9 лет.
Ну тогда понятно, 9 лет это нихуевый срок. Зато ниодно говно на другом языке столько не проживет, понимаешь?
Это только повод, а на деле ораклу просто припекает, что они ничего не имеют с андроида.
Собственно я об этом и говорю.
> На вопрос хули вы так делаете и что это за говно, говорят что и так работает, а проекту скоро уже 9 лет.
Там Visual FoxPro случайно не используется? Кажется, догадываюсь что за проект.
Скаланы, нахуй учить недохаскель на кривой JVM и потом шквариться работой со всяким яванским приматами, вместо того чтоб взять нормальный компилируемый язык типа Rust или Haskell, с нормальным комьюнити? В скале слишком много компромиссов, чтобы брейн-демейдж пипл тоже могли кодить на ней в привычном кобол-стайл, но нахуя это всё? Эти дауны не могут и не хотят развиваться, это как байтоёбы, только хуже. ИТ-комьюнити давно разделено на прогрессивное и тех кто в танке, и объединить их невозможно. Те кто приходят в скалу из джавы хуй ложили на типы, ФП и т.д, для них это просто сахарок чтоб писать чуть меньше бойлерплейта. Вы действительно хотите работать плечом к плечу с такими даунами? Зачем? Гибридоговно не нужно.
Как это ты еще на джаваскрипте не пишешь?
Двачую этого! Деньги, братцы, не главное, главное - опензоурз и поедание собственного грибка вместе с грязью из под ногтей!
тест
──────────────────────── ─────────▄▀▀▀▀▀▀▀▄────── ────────█▒▒▒▒▒▒▒▒▒█───── ───────▄▀▒▒▒▒▒▒▒▒▄▀───── ──────█▒▒▒▒▒▒▒▒▒▒█────── ─────▄▀▒▄▄▄▒▄▄▄▒▒█────── ─────█▒▒─▀─▒─▀─▒▒█──I─── ─────█▒▒▒▒▒▒▒▒▒▒▒█──AM─── ────▄▀▒▒▒▀▄▄▄▀▒▒▒▒▀▀▄─BACK── ──▄▀▒▄▒▄▄▒▒▒▒▒▒▒▒▒▄▒▒▀▄─ ─█▒▒█▒█░░▀▄▒▒▒▒▒▒▒▒█▒▒█─ ─▀▄▀▒▒▒▀▄░░▀▄▒▒▒▒▒▒▒▀▄▀─ ───█▌▌▌▌▌▀▄░░▀▄▌▌▌▌▌█─── ───▀█▌▌▌▌▄▀░░░░█▌▌▌█▀───
Стримы - абстрация для обработки данных, хранить и передавать их нужно в коллекциях.
> для обработки данных
Именно поэтому из любого метода наружу надо по-возможности возвращать стримы вместо конкретных коллекций, ведь на стороне вызова может понадобится дальнейшая обработка.
Представь ситуацию:
yoba2(yoba1(xs).map(..)...).map(...).collect(...)
1) yoba1 и yoba2 возвращают конкретные коллекции
Будет создано 2 лишних промежуточных конкретных коллекции,
и только в самом конце через collect - та что нужна в конечном итоге.
2) yoba1 и yoba2 возвращают стримы
Создано 0 лишних коллекций, и одна нужная в конце.
В этой ситуации работу метода, который возвращает Stream, нужно уместить в методе, из которого он вызывается, и не ебать никому мозг лишними сущностями.
Обычно данные, которые возвращают хорошие методы в вакууме, используются не единожды.
> Стартовали проект и заморозили стек, а через 5-6 лет проапдейтели, не представляю почему люди работают так по 5 лет, никакого фана от работы.
Иди на джаваскрипте попиши, каждую неделю будешь стэк апдейтить. Дохуя "фана", базарю.
>Иди на джаваскрипте попиши, каждую неделю будешь стэк апдейтить
Что за хуйню ты несешь?
мимопишунажаваскрипте
> В этой ситуации работу метода, который возвращает Stream, нужно уместить в методе, из которого он вызывается
Это зависит от того, сколько там работы, как и насколько часто она реюзается. Ты вообще ни на чём больше не писал, да? Во всех остальных языках методы возвращающие стримы (IEnumerable в C#, генераторы в питоне, и тд) повсеместны. Например, тебе надо проитерироваться стриму и распечатать все значения. Только даун станет лепить здесь промежуточную коллекцию, потому что держать все эти элементы в памяти одновременно нинужно. К примеру, нормальная реализация хештаблички должна уметь возвращать стрим ключей или значений, который позволяет пройтись по нему в константной памяти, без промежуточных коллекций. При этом, нормальная реализация хештаблички не выставляет наружу свои кишки и ты "работу метода, который возвращает Stream, нужно уместить в методе, из которого он вызывается" никак не сделаешь, но даже если мог бы, это было бы слишком длинно и непрактично делать каждый раз с нуля.
>Например, тебе надо проитерироваться стриму и распечатать все значения. Только даун станет лепить здесь промежуточную коллекцию, потому что держать все эти элементы в памяти одновременно нинужно.
Если оно тебе блядь нинужно, то оно - промежуточные вычисления, которые выносить в отдельные методы смысла никакого. Откуда вы, пидорасы, наплодились только, я заебался делать ревью кода, состоящего из однострочных методов.
- Что происходит в этом коде?
- А проследуй блядь в 5 разных мест и найди 5 огрызков, покрытых нахуй не нужными unit-тестами, которые можно на месте в 3 строчки уместить.
Ctrl зажал, мышь навёл, вот тебе и информация, щегол, если уж у тебя память как у золотой рыбки.
Для автоматического дерива тайпклассов же очевидно.
В Java нет функционального подхода, в Java имитация функционального подхода, и стримы не имеют ничего общего с теми же листами из Lisp например.
И сразу обоссал этого неосилятора структурного программирования и декомпозиции. Какой ты там ревью делаешь, пидрила? У меня ты бы на джуниора собес не прошел бы, говно.
Да ты бы и сам у себя собеседование не прошел.
Как только ты, школьник, осознаешь, что стрим - это представление результата, а не непосредственно результат, и если твои методы возвращают стримы, то твоя архитектура безнадежно уебищна - продолжим.
Скалапидор разучился читать.
>Scala-тред
>срач джява-индусов
вся суть языка
А это:
> Стримы - абстрация для обработки данных
не ты писал, нет? А итератор - не абстракция для обработки данных? А теперь объясняй, ебанашка, почему, по-твоему, одну "абстракцию" можно передавать туда-сюда, а другую - нет.
Одна абстракция для доступа к данным, вторая - представление данных для удобной обработки, ебанашка.
И да, передавать итераторы в Java смысла никакого.
http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-streaming
Хотя ты же Д'Артаньян энивэй.
Тоже им уже писал этот кусок кода, походу скалисты необучаемые =\
И много программ уже написано на восьмой джяве™? В ведроид уже завезли что-то новее 6?
На сервер-сайде восьмёрку юзают полным ходом. Вот навскидку нагуглилась статистика полугодичной давности:
www.baeldung.com/java-8-spring-4-and-spring-boot-adoption
В ведроиде - уже семёрка, но восьмой ещё и не пахнет.
Я 10-й раз повторяю, что Stream - представление. Там внутри гарантированно есть какая-то коллекция, которую просто сделали collection.stream() в угоду непойми чему. Что мешало бы сделать collection.stream() на месте, передавай они просто ссылку на коллекцию - хуй ее маму знает. В коде ядра Linux можно сотни goto отыскать, нихуя не значит.
Stream - это не представление, там внутри нет коллекции. Стрим может врапать собой функцию или счётчик и на своём шаге наращивать его по какому-то закону и возвращать новое значение, или применять функцию к старому состоянию и возвращать новое. Когда ты делаешь collection.stream() - это близко к тому, как когда ты делаешь collection.iterator(). Стримы коллекций врапают собой новый вид итератора - https://docs.oracle.com/javase/8/docs/api/java/util/Spliterator.html , и позволяют больше всего, да ещё и параллельно. Стримы могут быть потенциально бесконечные:
https://ideone.com/rg5XAq
Когда я писал про стримы ключей и значений мапы, ясен хуй что я предполагал, что там внутри не будет никаких промежуточных коллекций для этих самых ключей и значений - ведь в чём тогда профит по памяти? Юмор жабки в том, что на самом деле, в ней есть эти стримы. Дело в том, что когда ты делаешь keySet - это на самом деле не настоящее множество, реально содержащее ключи, а т.н. вьюха (гугли java collection views) - виртуальная коллекция, которая перегружает все методы Set (а главное - итератор) так, чтобы доступаться к ключам изначальной коллекции. Так что когда делаешь yoba.keySet().stream() - это и есть стрим ключей в константной памяти без промежуточной коллекции.
Нет, скальные - это конкретная структура данных, что-то типа хаскельных ленивых списков, в джаве Stream - это вообще интерфейс:
https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html
В джаве Stream - это костыль, в скале можно просто взять итератор и он будет со всеми мапами и флетмапами.
> Там внутри гарантированно есть какая-то коллекция, которую просто сделали collection.stream() в угоду непойми чему.
Пиздец-пиздец. Какая коллекция внутри у бесконечного стрима? А если я 50-гигабайтную csv-шку парсю как стрим строк, внутри этого стрима по-твоему тоже лист всех строк? А в стриме твитов, котировок или ещё какой риалтаймовой инфы?
Маня, а какоя коллекция по-твоему внутри бесконечного стрима?
- null (that's the most obvious)
- ""
- .length
- 0 (except as a neutral element for addition, in fold)
- 1 (except as a neutral element for multiplication, in fold)
- empty list (except as a neutral element for multiplication, in fold)
- if
- == (especially in Java, where typeless equality kills more kittens than regexes parsing XML)
- goto - I do not know where can one be found though.
Feel free to suggest more
http://ivan-gandhi.livejournal.com/3410468.html
>>580245
Внутри - это внутри метода, который возвращает Stream. Где-то там есть коллекция, которую сделали collection.stream() и вернули представление этой коллекции в виде Stream.
Окей, сунули свои ебла сюда https://docs.oracle.com/javase/8/docs/api/java/util/Spliterator.html и нашли мне что-то вроде add(). Хуюшки? Хуюшки. Единственный способ нарастить количество элементов стрима - flatMap(). Btw, это уже вычисления и все равно у тебя где-то есть коллекция.
>я предполагал, что там внутри не будет никаких промежуточных коллекций для этих самых ключей и значений - ведь в чём тогда профит по памяти
В контексте спора yoba - коллекция, что-то, хранящее данные, не из космоса они у тебя берутся. Передавай саму yoba как будет готова и не еби мозг. Профита со Stream у тебя нет, это гарантированный оверхед, обеспечивающий удобство работы.
>А если я 50-гигабайтную csv-шку парсю как стрим строк, внутри этого стрима по-твоему тоже лист всех строк? А в стриме твитов, котировок или ещё какой риалтаймовой инфы?
Там везде бесконечные стримы, открывай, обрабатывай данные и передавай куда хочешь готовый результат.
То, что ссылками на его бложик ты пытаешься создать себе образ дохуя прогрессивного интеллектуала, понятно. А можешь ли ты объяснить, почему именно всё должно быть именно так, как говорит твой Ганди? Уход от ответа, а также отсутствие ответа приравниваются к моему хую в твоём рту.
В скале объекты либо ещё быстрее умирают, либо ещё дольше живут. А первые достаточно быстро анализируются и чистятся gc.
Так разве gc не в виртуалке сам бегает? От компилятора зависит? В джаве точно есть дефрагменатция при очищении, потому и провисает, зато потом быстрее работает.
Джава считается медленной только самыми упоротыми байтоебами.
Читаешь вступление, переходишь по ссылке, находишь видео, проникаешься, качаешь http://icedtea.classpath.org/hg/shenandoah, радуешься жизни.
Гарбедж коллектор гарбедж коллектору рознь, и не всегда он добавляет существенный оверхед.
Хип в jvm делится на области, так называемые поколения. Объекты создаются в eden space, переживающие первую сборку мусора перемещаются в survivor space. Eden и survivor - части молодого поколения. В молодом поколении работают простые но быстрые сборщики мусора, например даже через тупой подсчёт ссылок. Область под молодое поколение обычно небольшая, по дефолту вроде 2 метра всего, но из-за этого сборка мусора в ней проходит очень быстро и может делаться часто. Большинство объектов убираются ещё в молодом поколении.
Пережившие несколько сборок мусора переносятся в старое поколение. Здесь сборщик запускается гораздо реже, алгоритмы сложнее, и иногда требуется stop-the-world. Чем больше памяти, тем реже здесь происходит сборка мусора, но и тем больше времени она занимает.
Раньше был ещё permgen (постоянное поколение), но в восьмой джаве его убрали.
В скале поощряется иммутабельность, один из плюсов её - то, что большинство объектов быстро умирают, а значит убираются ещё в молодом поколении.
Алсо, в go тоже автоматическая сборка мусора, но вроде его тормозным говном могут назвать только самые упоротые байтоебы.
>>580446
> Там везде бесконечные стримы, открывай, обрабатывай данные и передавай куда хочешь готовый результат.
Ага, в бесконечный список положить и передать его? How interesting.
>>580406
> Внутри - это внутри метода, который возвращает Stream. Где-то там есть коллекция, которую сделали collection.stream() и вернули представление этой коллекции в виде Stream.
Так ты таки ответишь, какая коллекция внутри бесконечного стрима? Или хуй оказался в опасной близости от твоего рта и ты решил слиться?
> Отсутствует add, нельзя нарастить, блабла.
Не позорься, ты вообще не понимаешь как создаются стримы и зачем они нужны.
смотри какой вин на крестах
прикинь че делает?
template<typename T_Fun, typename... T_TupleTypes, std::size_t... T_Indices>
void for_each_two_impl(std::tuple<T_TupleTypes...>& first, const std::tuple<T_TupleTypes...>& second, T_Fun& func, index_sequence<T_Indices...>){
using expander = int[];
(void)expander { 0, ((void)func(std::get<T_Indices>(first), std::get<T_Indices>(second)), 0)... };
}
проходит фор ичем по двум std::tuple(кортежам) и применяет к ним темплейтный объект у которого можно вызвать скобочки (), то есть функтор
а нахуя спросите вы пердолить фор ичем по кортежу в крестах?
а в c++ 14 есть обобщенные лямбды!
и можно например вот так скопировать элементы одного кортежа из элементов у которых есть функции get/set в другой
void copyProperty(std::tuple& to, const std::tuple& another) {
meta::tuple::for_each_two(
to,
from,
[](const auto& toValue, const auto& fromValue) {
toValue.set(fromValue.get());
}
}
если у какого то элемента нет функций get/set или типы кортежей отличаются то это дерьмо просто не соберется,
выдав опиздохуительные ошибки которые после того как тебя уволят будут исправлять месяц
а еще использование string literal templare gcc extension в последних версиях clang роняет сраных компилятор в сраный segmentation fault, по крайней мере на мак оси под Xcode точно
о боже 10 из 10
как накурюсь так кресты просто радуют
мимокрестодебил
смотри какой вин на крестах
прикинь че делает?
template<typename T_Fun, typename... T_TupleTypes, std::size_t... T_Indices>
void for_each_two_impl(std::tuple<T_TupleTypes...>& first, const std::tuple<T_TupleTypes...>& second, T_Fun& func, index_sequence<T_Indices...>){
using expander = int[];
(void)expander { 0, ((void)func(std::get<T_Indices>(first), std::get<T_Indices>(second)), 0)... };
}
проходит фор ичем по двум std::tuple(кортежам) и применяет к ним темплейтный объект у которого можно вызвать скобочки (), то есть функтор
а нахуя спросите вы пердолить фор ичем по кортежу в крестах?
а в c++ 14 есть обобщенные лямбды!
и можно например вот так скопировать элементы одного кортежа из элементов у которых есть функции get/set в другой
void copyProperty(std::tuple& to, const std::tuple& another) {
meta::tuple::for_each_two(
to,
from,
[](const auto& toValue, const auto& fromValue) {
toValue.set(fromValue.get());
}
}
если у какого то элемента нет функций get/set или типы кортежей отличаются то это дерьмо просто не соберется,
выдав опиздохуительные ошибки которые после того как тебя уволят будут исправлять месяц
а еще использование string literal templare gcc extension в последних версиях clang роняет сраных компилятор в сраный segmentation fault, по крайней мере на мак оси под Xcode точно
о боже 10 из 10
как накурюсь так кресты просто радуют
мимокрестодебил
>Ага, в бесконечный список положить и передать его?
.forEach(result -> foo.bar(result)), или у тебя есть какие-то еще способы работать с бесконечными стримами? Или тебе на кой-то хуй обязательно нужно передать стрим, а не работать с ним на месте?
>Так ты таки ответишь, какая коллекция внутри бесконечного стрима?
Хуи из глаз вытащи и перечитай цитирование.
---
Бесконечный стрим относится к конечному как ArrayList к LinkedList, 2 разных вещи с единым интерфейсом. Посмотрите уже в реализацию стримов, блядь, как вы меня заебали.
> Или тебе на кой-то хуй обязательно нужно передать стрим, а не работать с ним на месте?
Необязательно, но бывает. Почему это тебя удивляет? Твоя религия говорит, что это грешновато?
А что твоя религия говорит о случаях, когда нужно несколько разных стримов обработать каждый по-своему, чтоб привести к единому формату, слить вместе и передать дальше для обработки в другой компонент апликейшна? Сохранять в бесконечную коллекцию или передавать по одному элементу?
>>580725
Кажется, я понял: ты хочешь сказать, что бывают стримы без коллекции внутри? А то тут один хуй половину треда доказывает, что, цитирую:
> Там внутри гарантированно есть какая-то коллекция, которую просто сделали collection.stream() в угоду непойми чему.
Вот ведь он долбоеб, да?
>Вот ведь он долбоеб, да?
http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-streaming
Открывай реализацию и там ты увидишь коллекции.
>Твоя религия говорит, что это грешновато?
Моя религия говорит, что Stream - абстрация, для обработки данных, и передавать стримы никуда не надо, с чего этот разговор и начался.
>А что твоя религия говорит о случаях
Что ты мудило, проектирующий архитектуру через жопу, принимая Stream из Java за подобие листов из Lisp.
>Бесконечный стрим относится к конечному как ArrayList к LinkedList, 2 разных вещи с единым интерфейсом.
Кажется, кто-то снова демонстративно не замечает хуй во рту существование бесконечных стримов.
> Открывай реализацию и там ты увидишь коллекции.
Проведу аналогию для особо тугих: посмотри на себя, и ты увидишь человека без мозга. Это, однако, не подтверждает утверждение "У любого человека гарантированно нет мозга".
> Stream - абстрация, для обработки данных,
Вот именно! С хуя ли из этого следует, что их нельзя никуда передавать и все нужно делать в одном методе? Да, блядь, наоборот - обработал в одном месте одним способом, в другом - другим, и т.д., и отдал на обработку ещё дальше. У меня весь проект - обработка данных, мне что, весь проект в одном методе нужно было набыдлокодить? Или на каждом шаге гигабайты данных сохранять в буферную коллекцию просто потому, что какой-то макаке религия не позволяет работать со стримами напрямую?
Я тебе три раза уже написал про бесконечные стримы, пидорас пиздоглазый.
Открывай реализацию конечных стримов.
Для обработки, не для хранения -> не для передачи, ты передаешь представление, это глупо.
Ну охуеть теперь, я должен отчитываться анонимному серому плевку на асфальте. Поссал на тебя.
To summarize, аргументы адекватных людей за передачу стримов:
- стримы потенциально бесконечны, поэтому данные из них нельзя передавать коллекцией;
- стримы ленивы, если конечному консьюмеру понадобится только несколько первых элементов из стрима, в случае передачи коллекций пришлось бы несколько раз обрабатывать большую коллекцию целиком;
- в случае collection.stream() стрим гарантирует неизменяемость оригинальной коллекции, передавать стримы удобно и гигиенично;
- стримы - абстракция для обработки данных независимо от того, в каком виде они хранятся или поступают, поэтому если нужно обрабатывать одни и те же данные в нескольких местах, то передавать их в стримах - логично и правильно.
- как показал опыт Spark и Storm, архитектура, построенная на стримах и подобных им понятиях (RDD в спарке - по сути та же абстракция, что и стрим) позволяет эффективно и удобно обрабатывать большие объемы данных.
Твои аргументы против передачи стримов:
- это глупо, потому что тебе с какого-то хуя кажется что стримы для этого не предназначены.
Блядь, почему он пишет одно, а в его коде такой страшный срач, что репозиторий хочется сжечь нахуй?
Хули ты носишься со своим Spark Streams? Почитай как они реализованы, никакого реального стримминга там нету, а просто микро батчинг.
В Clojure тоже chunked sequences, т.е. по сути микробатчинг.
А всё потому, что так перформанс лучше (мисов по кэшу RAM меньше).
Подозреваю что в Хаскеле ленивые последовательности тоже реализуются кусками иначе они лошары
> Увидел в одном посте слова Спарк и Стрим. Пиздану про микробатчи, авось за умного сойду, похуй что речь вообще про spark streaming вообще не шла.
А о чем шла речь поехавший? Нахуй ты тогда чисто стримминговый Storm приплел со спарком в одном посте если ты не имел ввиду стримы?
пиздуй в прикреплённый
ВРЁТИ intensifies...
Нет у классов, функций и переменных профитов кроме удобства разработки. eax и ebx хватит на всё.
Если беру .typeSignature мне возвращается хуйня типа T1 и T2.
Ну ты же все правильно написал.
map это метод скаловский коллекций, единственный способ использовать его - использовать коллекции скалы, но это извращение, ты скорей себя в жопу выебешь. Можешь попробовать совмещать скала- и джава- файлы в проектах, они отлично уживаются в месте, если хочешь работать с данными через скаловскую коллекцию, а затем передать их джавовской - см http://www.scala-lang.org/api/current/index.html#scala.collection.JavaConversions$
Сигнатуру видел?
>скала
Толян благословляет это тред.
Бамп
> единственный способ использовать его - использовать коллекции скалы
Я как раз имел в виду вызвать скаловский map на скаловской коллекции в джава-коде.
>Я как раз имел в виду вызвать скаловский map на скаловской коллекции в джава-коде.
http://stackoverflow.com/questions/4524868/can-i-use-scala-list-directly-in-java
А зачем, прикрути к проге http://spray.io , потом сделай веб-приложение на ангуляре каком-нибудь, и используй из браузера.
Ох лол, манька, у скала треда и js треда один ОП, так что сам проследуй нахуй.
Там написано как создать лист, но как вызвать на нём map?
Поссал тебе за щёку, сглатывай.
Ты ебанулся, хуесос, как ты собираешься писать браузерное приложение без джяваскрипта?
https://github.com/greencatsoft/scalajs-angular
Почему? Весьма актуален. Реакт с перделками не замена ангуляра, их даже вместе используют.
А я давно говорил, го - это такой пых без динамики.
[CODE]object HelloVector {
def main(args: Array[String]) {
val a = Vector(1, 2, 3)
println(a)
}
}[/CODE]
[CODE]HelloVector.scala:3: error: object Vector is not a value
val a = Vector(1, 2, 3)
^
one error found[/CODE]
На соседней пекарне всё нормально работает и если Vector заменить на scala.collection.immutable.Vector, то тоже всё нормально работает. Но все равно ощущение, что что-то сломано.
Scala compiler version 2.11.7 -- Copyright 2002-2013, LAMP/EPFL
scala и scalac одинаковую ошибку выдают.
В репле scala всё нормально работает.
На юкозе чтоле?
Да.
Троллейбус_из_хлеба.жпг
На скале можно делать все, что и на джаве, так что к твоим услугам swing, javafx, swt — так себе набор, короче.
Есть даже костыль, прикручивающий Qt к джяве.
>swing, javafx, swt, qt
К сожалению, мне это ни о чем не говорит, но я так понял можно. Спасибо.
Высокомерная блядь же.
Я её уже нарисовал у себя в голове! Удали свой комментарий! Фу, как мерзко!
А, это вот когда в розе рисуешь диаграммочки и она тебе генерит некомпилирующийся говнокод уровня зк?
Всяко лучше, чем Scala.
А интероп с джявой - не дали.
Собственно отсюда вопрос: не было ли пропозалов на включение в компейлятор compile only имплист параметров? И почему вообще Одерский сразу не учел что на его системе типов поехавшие сразу начнут решать компайл-тайм ШАРАДЫ. Ведь даже в стандартной либе есть операторы =:=, <:< которые по-сути нужны только в компайл тайме.
Хотя с <:< наверно херовый пример потому что ее все таки есть хоть какой то профит в рантайме:
http://blog.bruchez.name/2015/11/generalized-type-constraints-in-scala.html
Много значений.
В википедии какая-то забытая менеджерская методология находится.
Для многих программистов сейчас "итеративная разаработка" - это REPL.
Ты же понимаешь что речь шла про ограничения и правила в системе типе, которые проверяет компилятор на этапе компиляции? При чем тут JVM причем тут либы без сорсов?
Такая хуйня только есть http://www.scala-lang.org/api/2.12.x/index.html#scala.annotation.compileTimeOnly
Ну смотри, эти самые правила должны быть как-то доступны и если ты хочешь использовать huipizda.jar в своём говнокоде - иначе как конпелятор эти правила проверит? Соответственно, или в аннотации их пихать остаётся, или мапить на джявовые сигнатуры.
Ну хуй его знает как то замапить эти фичи на байткод, но так что это не параметрами функций шароебилось в рантайме. В dotty же превозмогают как-то.
>Годнота, теперь не придётся шквариться об жс.
Лол.
>Полноценен только ассемблер
Вильнули жопой, сэр.
scalafx
Martin Odersky. Programming in Scala - от создателя языка
Еще он ведет курс по функциональному программированию: https://ru.coursera.org/course/progfun
Писать-то можно, гугли scaloid. Но там дофига нюансов, например скала тянет за собой огромную (по меркам андроида) стандартную либу, так что хеллоуворлд занимает 10 метров.
Для сравнения: свифт при надобности поддерживать платформы <9 тащит за собой ~40 мб рантайма. Вывод: не суйте в анус руки, пользуйтесь созданными для этого фаллоимитаторами.
> огромную (по меркам андроида) стандартную либу, так что хеллоуворлд занимает 10 метров.
Прогуард в помощь
пошел нахуй ебанат, вот от куда вы беретесь такие ублюдошные? мартин дал вам охуенную книжку, где все раскладывает по полкам, даже фп поясняет, сядь и осиль лишних несколько сотен страниц, не буду жрать говно как сожрать говно за 24 часа сожрать куда жрадь
у мартина куча нахуй ненужной воды, размазывание очевидных вещей на 800 страниц, он просто ебанутый графоман
у хорстмана - самая суть-выжимка и фп он лучше объясняет, к тому же материал подаётся для программистов, а не для штудентиков с улицы
Двачую. У Хорстмана книга охуенно написана. Всё самое важное изложено, и в удобной форме, даже питономакака поймёт.
> он просто ебанутый графоман
Да он вообще ебанутый, если что. Посмотри его выступления на конференциях.
Stream(Row(
'ColumnName(ce_docs.id,Some(id))': 5 as java.lang.Long,
'ColumnName(ce_docs.title,Some(title))': TestDoc #0 as java.lang.String,
'ColumnName(ce_docs.content,Some(content))': Lorem ipsum . as java.lang.String,
'ColumnName(ce_docs.created,Some(created))': 2015-12-08 as java.sql.Date,
'ColumnName(ce_docs.last_modified,Some(last_modified))': 2015-12-08 as java.sql.Date,
'ColumnName(ce_docs.owners,Some(owners))': {2} as java.sql.Array), ?)
дальше пытаюсь его превратить его в Stream[Document] следующим образом:
def documentResultMapper(res:Stream[Row]) : Stream[Document] = {
res.collect {
case Row(id:Long, title:String, content:String, created:Date, lastModified:Date, owners:java.sql.Array) => new Document(id, title, Some(content), created, lastModified, owners.asInstanceOf[Seq[Long]])
}
}
но нихуя не выходит, что я делаю не так??
И какой стек технологий нужен для полноценной работы Скала мидлу?
у меня практически такой же код для классa User, и все работает (вообще проблема оказалась в content, который может быть пустым, убрал его и все вроде заработало)
Возник другой вопрос: как преобразовать java.sql.Array в Seq[Long]
JavaConverters
Ну ээ, а так?
> .asInstanceOf[Array[Long]].toSeq
По-моему ты изначально делаешь что-то не так
я уже как только не пытался
org.postgresql.jdbc4.Jdbc4Array cannot be cast to [J]
у меня в таблице в одной из колонок храниться массив лонгов, как их правильно получить использую Anorm
Ну ёпта бля
scala> import scala.collection.JavaConverters._; java.util.Arrays.asList(Array[Long](2, 3)).asScala
res1: scala.collection.mutable.Buffer[Array[Long]] = Buffer(Array(2, 3))
и итератор становится хуё-моё
Ну то есть
import scala.collection.JavaConverters._; java.util.Arrays.asList(Array(2, 3): _*).asScala
Ну ты пони
честно говоря нет, все равно cast exception постоянно вылетает
можешь написать плиз метод def cast(o:java.sql.Array) : Seq[Long] = {}
Вангую, у тебя там import java.sql._, который перекрывает скаловский Array
>haskell только на JVM
>это вообще нереально. haskell выебет в стэк JVM.
haskell на jvm есть и называется Frege
Добра тебе, Анон! наконец-то оно заработало
Одеск - это, конечно, хорошо, но стоит какой-нибудь тролляке оставить на тебя негативный отзыв, и тебя забанят навсегда.
Ну не сразу, конечно. Думаю поначалу брать маленькие заказы, набираться опыта, не отказываясь от основной работы на руби.
>>600867
Там больше не отображается средняя оценка профиля. А один плохой отзыв в списке на фоне остальных пятёрок затеряется. Также если заказ небольшой, можно вернуть деньги, тогда отзыва не будет. Если большой, то обычно через неделю-другую понятно, адекватный клиент или нет. Ещё я беру заказы только от европейцев/американцев с историей.
Ну вот скриншот с типичными заказами на скале. Реально за год изучить и вкатиться?
В принципе, я готов поначалу даже крудошлёпствовать на скале. Это, наверное, приятней, чем на рельсах?
Ну по приятности синтаксиса, объёму кода и читабельности примерно одинаково будет, ведь руби динамический, а в скале вывод типов. Меня привлекает именно статическая типизация и null-safety (почему не запилят динамический язык без null'ов? это же несложно)
А в скале есть что-то типа обязательной проверки исключений? Или может можно исключения превращать в значения алгебраического типа, чтобы было почти как в расте/хаскеле?
*Loop
На всякий случай уточню: работа в банке, ДС, фул-тайм, ВО супер-мега-крайне желательно (требование банка), хотя бы 2 года коммерческой разработки, без этого никак.
В тред постараюсь отвечать по мере возможностей, но не ждите, что я буду двачевать капчу с утра до вечера, поэтому если что-то оперативное, пишите на мыло
Стасик
> работа в банке
И сразу нахуй.
> Scala
> отличается от джавы бесполезностью сигнатур для человека, возможностью писать implicit вместо аннотации, и case вместо визитора
> ИННОВАЦИИ, МНОГОМИЛЛИОННЫЕ ГРАНТЫ НА РАЗРАБОТКУ КОМПЛИЯТОРА, 100000 БАГОВ В КОМПИЛЯТОРЕ, ВАКАНСИИ НА ДВАЧЕ
Какая то совсем днищевакансия. Ещё и с кучей ебанутых требований, которые на практике не понадобятся.
Джаваприматы рвутся каждые десять постов.
Чем провинились безработные скальщики, которые не сидят на дваче? Совсем охуели со своими culture fit. Давай, блять, сразу ещё алкогольные, сексуальные, литературные и музыкальные предпочтения в текст вакансии писать?
Ну вот видишь, сначала ты пишешь про вакансии на дваче так, будто это что-то плохое, а когда я аналогичным образом пишу про HH обвиняешь меня в дискриминации.
На 1 Одерского из 10.
Пригоден вполне
У нихзадачи разные.
Поясните за скала?
Для чего его юзают какие-то крупные предприятия и корпорации?
Т.е., если я его выучу и пойду на работу, что я на нём буду писать? И насколько он сложный в освоении?
В бигдате основная её часть различный анализ данных, составление ёба алгоритмов оптимальных для этого, как исторически сложилось. Без образования в этой области - хуй куда попадёшь.
Если раньше не было опыта в программирование - не осилишь ты функциональщину, выучи сначала что полегче.
Из-за всего и сразу. Со стороны ытерпрайза - проверенная годами жявавм, со стороны разработки - мультипарадигменный язык без крайностей как C или Haskell с поддержкой тонн кода на джяве, со стороны конкретного заказчика - баланс между скоростью разработки и кол-вом докупаемого железа.
Если у тебя не хватает опыта и знаний, чтобы претендовать на эту вакансию, это еще не повод, чтобы переходить на личные оскорбления.
Я не хочу видеть здесь рекламу, плевать, какой она носит характер, это как разделение мух и котлет. Это такое же пидорство как и реклама в почтовых ящиках, в метро, на дверях подъезда... Более того, ты нарушаешь автоматичность некоторой условной зоны, зоны свободной от всего ирл и работодателя в частности.
Еще вот о чем подумал, хэдхантеры в области ИТ - самые наглые, самые настырные и самые мерзкие: был когда-то один паблос с мемами на тему программирования "программист лалка" (не уверен), там было всего с десяток постов с шуточками про лисп, скалу, фп и формальные языки и с 50 подписчиков, так вот, даже там, даже там все засрали рекламой, под каждым постом по несколько рекламных объявлений, самых отвратительных, концентрат, кислотная отрыжка всего трудоустройческого дикурса в ит последних лет, от беглого взгляда на который случается интоксикация пэчэнькамы плюшгами упячк и хочица сдохнудь :DD))))))
Это не реклама, кроме того тут каждый четвёртый пост про борщи, отсутвие работы, вкатывание в программирование после 70, походы по собеседованиям и т.п. Поэтому я вполне в тренде.
>>607454
>Тинькофф?
>Олежка деньги жмотит
Интересно, как правильно намекнуть, что это не Тинькофф, чтобы программисты догадались?
Ну так безработные тут круглые сутки сидят, а работающие мимо проходят.
JVM не рассчитана на ФП. Но если писать на Скале в процедурном стиле, то скорость будет как на Яве: http://benchmarksgame.alioth.debian.org/u64q/scala.html
Т.к. в 99% случаев похуй на скорость (вернее проблемы будут, если она будет ниже на порядки, а не в 2-3 раза, которые легко перекрываются любой высокоуровневой оптимизацией, если уж возникла такая проблема), то на Скале можно спокойно херачить в ФП-стиле, скорее всего это никогда не понадобится оптимизировать по крайней мере на низком уровне.
потому что в большом проценте тестов, используются колекции, а колекции в скале говно.
>JVM не рассчитана на ФП.
Да, одним из важнейших принципов в фп является TCO (Tail Call Optimization), а на JVM на данный момент возможен лишь один из двух способов оптимизации, - для хвостовой рекурсии и скала его использует, но по дефолту она не используется из-за того, что скала это просто какой-то тотальный сплошной пиздец, поэтому необходимо добавить аннотацию @tailrec пред ф-ей, которая использует хвостовую рекурсию. Но вот в кложуре есть не только оптимизация хвостовой рекурсии, но и нехвостовой - метод трамплина (создаются дополнительные промежуточные функции для избежания переполнения стек фрейма (хотя вот в фп языка, насколько я знаю, на него нет никаких ограничений)). Но вообще это все обещали завезти вместе с 9 версией, кстати, один из главных разработчиков JVM был одним из тех, кто ебался за TCO еще в 70х, именно он доказал, что по производительности рекурсия не будет значительно уступать итеративному подходу.
Что касается скорости, компилятор скалы никогда не станет быстрым или быстрее, он будет только медленнее, но учитывайте рост производительности машин и да, поебать на скорость, более того, встречал статистику, согласно которой компилятор жабы за 1с. читал 2000 строк, когда компилятор скалы - 500, а теперь учтите, что код на скале может занимать в 2-5 раз меньше кода.
>бред сивой кобылы
хребет исправленной могилы
еблет ленивой хачкилы
сбт ебливой студентилы
багет ефпловской обжектилы
https://en.wikipedia.org/wiki/Continuation-passing_style
Скалка тормозит не из-за отсутвия TCO (из-за отсутвия TCO она может разве что падать в тех местах, где программист ожидает TCO, но не тормозить - вызов со стеком не может быть медленнее всяких трамплинов-хуйплинов), а скорее из-за отсутсвия дефорестации.
TCO - это goto, быстрее некуда. call - это goto плюс поместить в стек адрес возврата плюс push ebp/mov ebp, esp - сохранение фрейма и т. п. Вроде бы фигня, но return из глубокой рекурсии в случае TCO - это простой прыжок, а вот call будет раскручивать стек взад на каждом уровне рекурсии. А в ФП хвостовые вызовы везде, потому что даже циклы реализуются через них.
кукаретик
Нет, при TCO надо фиксить фрейм стека in-place, т.е. переставлять параметры фактически. При рекурсивном вызове - просто сделать push по числу параметров.
структура данных
мимо перекатывающийся в скалу
И да, я подразумеваю, что TCO нужен не столько для оптимизации по скорости, сколько для избавления от риска переполнения стека. В частности, для создания бесконечных коллекций (они же есть в Скале?), но оно может случиться и при простой рекурсии, если функция много объектов на стеке создаёт (или Скала держит в куче то, что можно положить в стек? было бы странно, ведь это часто ещё на этапе компиляции можно определить)
> нет оптимизации хвостовой рекурсии по умолчанию
Нет, и с tairec тормознее, чем без.
>много объектов на стеке создаёт
Какие ещё объекты на стеке? На стеке ссылки, крестовый трендж где-то недалеко.
>функциональном ЯП
Скалка - не функциональный язык.
>Скалка - не функциональный язык.
А какой же тогда? И приведи пример функционального языка, кроме лиспохаскелей.
Есть, но без аннотации у тебя функция, не поддерживающая тсо, скомпилируется в обычную рекурсию, а с аннотацией выдаст ошибку компиляции.
Мань, давай просто примем два следующих факта как данность:
1. Ты не знаешь, как технически реализуется TCO.
2. TCO в общем случае тормознее обычных вызовов с использованием стека.
нет, в F# и скале необъодимо явно указывать
>>609286
>Скалка - не функциональный язык.
скала - мультипарадигмальный пиздец, там функциональные структуры реализуются через ооп, типа аст и функторов
>>609349
>F#
у вас там запилили F*, с тем же ебучим ML-синтаксисом, за то с зависимыми типами, можешь выкинуть свою недопарашу
>2. TCO в общем случае тормознее обычных вызовов с использованием стека.
почему? там же меньше операций выполняется...
А еще был сосед Колька Афонин, хороший малчик. Мы с Колькой трахались в его сарае. В те времена топили же дровами, так что удобное было место сарай, был бы ключ – залез там на антресоли, и делай хоть ты что хошь. Мы там и трахались, и мы и не знали ничего про гомосексуализм, или там что статья такая в УК есть про мужеложство, откуда нам знать? Мне было семь лет, ему восемь. Слова "трахаться" тоже тогда, естественно, не было; свое новое значение это слово приобрело где-то уже после Андропова; я как-то его тогда сразу не ухватил, и спокойно сообщал, что у меня сломан нос, потому что трахнулся об асфальт на своем "старт-шоссе", а Аришка тут прям вся так и вскидывалась и орала мне: "да не употребляй ты это слово!" – а я даже и значения-то нового этого слова не знал. Потом уж постепенно.
Вы скажете – не бывает. А почитайте фидошную эху ru.sex – сколько там душевных рассказов аналогичного плана. Один мальчик в детском саду с одногрупницей так прямо и говорили – пошли, Наташка, ебаться. И пока Наташка не сболтнула воспитательнице – так и жили, в таком возрасте же еще не беременеют. Мальчика, конечно, из детсада выгнали за такие дела. Или возьмите Свидригайлова и его пятилетнюю обольстительницу – до самоубийства довела человека! У меня даже дома в фотоальбоме фотография есть: моя Ульянка стоит на месте смерти Свидригайлова, у пожарки в начале БППС, приставив палец к виску – ну что вы скажете на это? Тоже не бывает?
Как будто что-то плохое.
Унеси нахуй своего Патрушева, воняет хуже сотни советских бабок на весь интернет, а сам как тотальный уебан пишет https://github.com/vpatryshev/Categories/blob/master/src/main/java/Zermelo.java
Там встретил кодес вида:
"A hui actor" must {
"be able to fuck" in {
start(newHuiActMen())
}
И нихуя не понел. Што это?
>Што это?
Каргокультизм скаладетей. Скаладети увидели у хаскеллебогов eDSL-ы, но нихуя не поняли, что это такое и как этим пользоваться. Поэтому построили в своём понимании eDSL из говна и палок. Естественно, ничего общего с настоящими eDSL он не имеет, и никакой семантической нагрузки комбинаторы вроде must и in не несут, но для ритуальных танцев он вполне подходит.
>никакой семантической нагрузки комбинаторы вроде must и in не несут
А в хачкиле какая у них семантическая нагрузка?
This project is currently migrating from old repositories and build and testing tools. Does not even compile yet. Historically, it was first written in Basic, then in Fortran, then in Assembler, then in Java, now in Scala. Long story.
http://ivan-gandhi.livejournal.com/1786981.html
Но когда Андрей Петрович (тм) попросил посмотреть на его программу, которая типа вычисляет предел в категории, я, конечно, завёлся, и мы месяц, наверное, протрахались с этим делом, дойдя до интерактивного построения категории и до расчёта топологий Гротендика; с топологиями Гротендика мы обломились на категории Δ3, где, по моим прикидкам, расчёт займёт три недели на бейсике. Пришлось перекатать на фортран, а операции над множествами - на ассемблер; 4 часа - и топологии расклассифицированы
https://www.reddit.com/r/scala/comments/3ojwif/lex_spoon_initial_input_on_the_scala_collections/cvyl0c5
Тогда почему ты решил, что каменты чтобы в них срать - это какие-то там йоба-комбинаторы, да ещё и из хачкиля?
The implementation looks like this:
case class SingletonOf[T, U <: { type A; type M[_] }](
widen: T { type A = U#A; type M[x] = U#M[x] }
)
object SingletonOf {
implicit def mkSingletonOf[T <: { type A; type M[_] }](implicit
t: T
): SingletonOf[T, t.type] = SingletonOf(t)
}
implicit def unapply[
TC[_[_]],
MA0,
MB0,
U1 <: { type A; type M[_] },
U2 <: { type A; type M[_] }
](implicit
sU1: SingletonOf[Unapply[TC, MA0], U1],
sU2: SingletonOf[Unapply[TC, MB0], U2],
iso: U1#M <~> U2#M
): UnapplyProduct[TC, MA0, MB0] {
type M[x] = U1#M[x]
type A = U1#A
type B = U2#A
} = new UnapplyProduct[TC, MA0, MB0] {
type M[x] = U1#M[x]
type A = U1#A
type B = U2#A
def TC = sU1.widen.TC
def _1(ma: MA0) = sU1.widen(ma)
def _2(mb: MB0) = iso.from(sU2.widen(mb))
}
The implementation looks like this:
case class SingletonOf[T, U <: { type A; type M[_] }](
widen: T { type A = U#A; type M[x] = U#M[x] }
)
object SingletonOf {
implicit def mkSingletonOf[T <: { type A; type M[_] }](implicit
t: T
): SingletonOf[T, t.type] = SingletonOf(t)
}
implicit def unapply[
TC[_[_]],
MA0,
MB0,
U1 <: { type A; type M[_] },
U2 <: { type A; type M[_] }
](implicit
sU1: SingletonOf[Unapply[TC, MA0], U1],
sU2: SingletonOf[Unapply[TC, MB0], U2],
iso: U1#M <~> U2#M
): UnapplyProduct[TC, MA0, MB0] {
type M[x] = U1#M[x]
type A = U1#A
type B = U2#A
} = new UnapplyProduct[TC, MA0, MB0] {
type M[x] = U1#M[x]
type A = U1#A
type B = U2#A
def TC = sU1.widen.TC
def _1(ma: MA0) = sU1.widen(ma)
def _2(mb: MB0) = iso.from(sU2.widen(mb))
}
мда бля пиздец охуеть просто бля пиздец
вообще не ожидал мда пиздец
конечно мда охуеть вообще мда
Highcharts заебись штука, но если нужна пиздатая визуализация - бери d3.js (хотя к ней, наверное, не биндинга на Scala).
Это я написал на коленке генератор обёрток для highcharts из его документации. Таки слегка пофиксил этот ад с типами.
ага, еще и на русском
Однако почему то на хачкеле не пишут реализации процессоров на eDSL.
Примеры обоих видов eDSL перечисленных здесь https://wiki.haskell.org/Embedded_domain_specific_language видел в шкалке.
Например здесь примеры DSL здесь: http://underscore.io/blog/posts/2015/12/21/scalax-interpreters-workshop.html
Твиттеровский Stitch фьюзит множественные запросы к сервисам в один, как же каргоаборигены из твиттера это реализовали без семантической нагрузки комбинаторов непонятно.
>Однако почему то на хачкеле не пишут реализации процессоров на eDSL.
А еще почему-то никто не догадался написать на Хаскелле яблоко и скушать.
>Твиттеровский Stitch фьюзит множественные запросы к сервисам в один, как же каргоаборигены из твиттера это реализовали без семантической нагрузки комбинаторов непонятно.
Ты дебил, да? Я писал конкретно про тот тестовый фреймворк на скале, а не произвольный ДСЛ. И да, нормальная реализация автоматического распараллеливания запросов выглядит так: https://github.com/facebook/Haxl, а в скале её в принципе сделать невозможно, потому что Скала не может в чистоту.
А сказать-то ты что хотел? Что на хачкиле можно было бы заебенить охуительный eDSL для тестов, если б было что тестировать?
Я хотел сказать, что скалодети решили сделать что-то внешне напоминающее eDSL. Получился пикрилейт.
Бампую, слаку мб
твой номер не будет никому виден, если ты ник укажешь.
в политаче давно уже конференцию запилили через тот же телеграм.
Вот каким образом развратник приступил к омерзительной операции. Его окружили четверо скала-петухов: один держал наготове большой ночной горшок, второй взял зажженную свечу и подставил ее поближе к анусу, чтобы было лучше видно происходящее, третий сосал ему член, четвертый, перекинув через руку белоснежное полотенце, целовал главпетуха в губы. Тот, опершись еще на двоих педерастов, поднатужился, и как только появилось невероятное количество дерьма, которое обыкновенно и регулярно выдавал хозяин параши, учитывая страшное количество поглощаемой им портвешка, тот петух, что держал вазу, принялся восхвалять экскременты. "Какое прекрасное скала-дерьмо! - восклицал он. - Ах, господин мой, какое превосходное говно! Как красиво вы испражняетесь".
Когда дифирамбы закончились, педераст, вооруженный салфеткой, языком очистил преддверие ануса, а горшечник подставил содержимое горшка под нос Ганди и опять громогласно восхвалял его. После этого мощная струя мочи ударила в рот сосателю, который тут же проглотил всю жидкость, полотенце завершило то, что не мог сделать язык, и четверо скала-петухов, оставшись без дела, долго сосали поочередно язык, фаллос и задний проход распутника.
А работа есть для этого поделия?
да, в аду, писать целку для вторйо дочери путина (первая проебала)
Реально заебали мудаки, делающие вид, что Скала это такой Хаскель, просто недоделанный.
И ругающие Скалу за это.
А также те, которые хвалят - за то же самое.
И пытаются таки доделать.
Патрушев тот же, например.
Или те, кто делает Scalaz.
Это, блядь, вообще другой язык.
Хотите Хаскель? Ну так и пишите на Хаскеле, кто же вам, блядь, не даёт?
Ну в Хаскеле объективно лучшая система типов вообще (после Агды, разве что, но это тоже хачкель).
Что конкретно тебе не нравится?
Что хуже того, проигрывает джяве по производительности даже при импертивном стиле кода.
https://github.com/kostya/benchmarks/
А с чего вдруг скала В ЛЮБОЙ синтетике сливает яве в 2 и более раза? Даже с аналогичным по факту императивным кодом.
В хаскеле нет наследования, так что его система типов может быть а может и не быть объективно лучше только если кукарекнуть что наследование НИНУЖНО, с чем я впринципе согласен, но что само по себе субъективно.
>>617839
Да не в 2, а сразу в 240 раз. Видел секцию с json? Этот бенчмарк - поделка челика, который не слышал даже о JMH и который не понимает что сравнивает. Ну и код brainfuck.scala конечно порадовал.
https://telegram.me/joinchat/BoA_agWB_Xh7Rm75eumPNw
Наследование тайпклассов это скорее набор ограничений или что-то вроде наследования интерфейсов в джаве. Я имел в виду остутствие наследования реализации и вообще ООП на уровне системы типов.
ассоциативный кластер мультипарадигм
Напиши какое-нибудь веб-приложение, чтобы использовалась только скала, без хтмл и джяваскрипта.
Бекенд на Spray, фронтенд на Scala.js + ScalaTags + Scala.Rx.
ассоциативно-мультипарадигмальную фабрику фасоли
целку дочери путина
здесь функциональные структуры используются как императивные, это глупо и неэффективно, можешь засунуть в очко такие тесты
https://github.com/kostya/benchmarks/blob/master/matmul/matmul.scala
https://github.com/kostya/benchmarks/blob/master/brainfuck/brainfuck.scala
Ну так куда на фон-неймане от императивной параши денешься-то. Всё ФП - только сахарок.
Для меня ФП - это наличие явной модели времени, в противовес говняканью переменных "на месте" с хуй пойми какими последствиями. Это ортогонально вопросу архитекутры.
В смысле производительности это не может быть ортогонально архитектуре, собственно исполняющей всю эту матан алгебру.
> на хачкеле не пишут реализации процессоров на eDSL.
"В проекте системы-на-кристалле (SoC) я был ответственен за оценку микропроцессорного ядра с точки зрения программного обеспечения и за его модель уровня транзакций. Ядро представляло собой современный RISC-процессор с неупорядоченной выдачей команд в стиле DEC Alpha, но с системой команд MIPS. Для увеличения реалистичности оценок быстродействия параллельно разрабатывались модели контроллера памяти и современной динамической памяти. Модель ядра и вышеуказанной периферии с большим количеством параметров управления поведением процессора была выполнена за четыре месяца. Это время включает в себя также месяц на серьезную модификацию ядра процессора, которая потребовалась для внесения архитектурных изменений, предложенных инженерами. Модель выполнялась на языке программирования Haskell."
>оценку микропроцессорного ядра с точки зрения программного обеспечения
>модель уровня транзакций
ЯННП например. Он там pipeline моделировал и тики подкручивал? А где тут про DSL?
object IsHCons1 {
type Aux[L[_], FH[_[_]], FT[_[_]], H0[_], T0[_] <: HList] = IsHCons1[L, FH, FT] { type H[t] = H0[t] ; type T[t] = T0[t] }
def apply[L[_], FH[_[_]], FT[_[_]]](implicit tc: IsHCons1[L, FH, FT]): Aux[L, FH, FT, tc.H, tc.T] = tc
implicit def mkIsHCons1[L[_], FH[_[_]], FT[_[_]]]: IsHCons1[L, FH, FT] = macro IsHCons1Macros.mkIsHCons1Impl[L, FH, FT]
}
Что делать дальше, после того как слушатель познал HList он рассказать все три раза не успевает, отсылая к его воркшопам, видосам и курсам, которые мы все можем приобрести за деньги. Я вообще не против приобрести знания за деньги, но:
Чувак убил годы на то, чтобы люди убивали недели и месяцы чтобы сука сослаться на тип, и понять тип значения в рантайме, ну и при желании что-то там намутить на стадии комплияции (типа узнать размер коллекции), причем для того чтобы это сделать, нужно хорошо так вынести себе мозг, и нахерачить код типа того что я привел выше. Я конечно глубоко не вникал, может этот shapeless на который надо убить тучу времени (и который видимо далеко не самая навороченная библиотека Scala мира) делает что то там еще полезное, но у меня нет слов — люди делают про это какие-то толки на конфах, воркшопы, презы на 56 страниц типа Demystifying Shapeless. И все это зачем? Чтобы выковырять тип значения во время компиляции, братан.
Бебать, да я в 95 программировал на Delpi и у меня все это сразу было. Я ничего не знал про Polymorphic typed λ-calculus, да и сейчас ничего не знаю, но вот цимус в том что и без знаний любой школьник на дельфи, напишет такой HList за 10 минут, и тип в рантайме познает, и сошлется на него, и сравнит и хрен знает что еще. И даже не задумается как все это сделать. Если бы в Delph были макросы, и генерики — я уверен в том, что школьники писали бы точно такие же либы как и вся эта элита пишет на Scala, но только на порядки быстрее, чем эти дяди, и даже не задумывались, о том что им нужны structural refinement types и прочая лабуду (правда что-ли нужны?). Жизнь мне это подтвердила, о чем позже. Да, кстати работал бы этот школьный код в продакшене тоже на порядки быстрее — старая школа в Borland умела делать вещи.
Что делать дальше, после того как слушатель познал HList он рассказать все три раза не успевает, отсылая к его воркшопам, видосам и курсам, которые мы все можем приобрести за деньги. Я вообще не против приобрести знания за деньги, но:
Чувак убил годы на то, чтобы люди убивали недели и месяцы чтобы сука сослаться на тип, и понять тип значения в рантайме, ну и при желании что-то там намутить на стадии комплияции (типа узнать размер коллекции), причем для того чтобы это сделать, нужно хорошо так вынести себе мозг, и нахерачить код типа того что я привел выше. Я конечно глубоко не вникал, может этот shapeless на который надо убить тучу времени (и который видимо далеко не самая навороченная библиотека Scala мира) делает что то там еще полезное, но у меня нет слов — люди делают про это какие-то толки на конфах, воркшопы, презы на 56 страниц типа Demystifying Shapeless. И все это зачем? Чтобы выковырять тип значения во время компиляции, братан.
Бебать, да я в 95 программировал на Delpi и у меня все это сразу было. Я ничего не знал про Polymorphic typed λ-calculus, да и сейчас ничего не знаю, но вот цимус в том что и без знаний любой школьник на дельфи, напишет такой HList за 10 минут, и тип в рантайме познает, и сошлется на него, и сравнит и хрен знает что еще. И даже не задумается как все это сделать. Если бы в Delph были макросы, и генерики — я уверен в том, что школьники писали бы точно такие же либы как и вся эта элита пишет на Scala, но только на порядки быстрее, чем эти дяди, и даже не задумывались, о том что им нужны structural refinement types и прочая лабуду (правда что-ли нужны?). Жизнь мне это подтвердила, о чем позже. Да, кстати работал бы этот школьный код в продакшене тоже на порядки быстрее — старая школа в Borland умела делать вещи.
Мудак
Есть у меня один не очень хороший знакомец (не очень хороший, в том смысле что я не горжусь знакомством с ним). Поразил он меня еще десяток лет назад, рассказав историю о том как будучи студентом написал одной конторке продукт на заказ. Продукт он с другом написал на Кларионе (был такой зверь, но я не настолько стар, чтобы про него что-то рассказать — пронесло меня мимо). Так вот знакомец будучи студентом, сознательно выбрал Кларион, поскольку ему подумалось, что программиста на Кларионе найти будет сложно, и заказчик будет вечно обращаться к товарищам за поддержкой и развитием системы.
Я конечно сказал что это дурдом, и что они сам себя раком поставил, да и забыл эту историю, пока не встретил знакомца в очередной раз, где-то полгода назад. Знакомец рассказал что едет в Бразилию, в командировку. Помогать бразильцам делать очень навроченную систему чего-то там на Scala. Едет он к сожалению один, поскольку для написания столь хитромудрого кода у его соратников не нашлось достаточно интеллекта, но ничего он и один справится. И в конце добавил что очень рад работать с такими умными бразильцами и восхищен их планом. План был простой: писать все на Scala обязательно, и архитектура должна быть такой, чтобы обычному человеку в голову не влезла. Что позволит им захватить маленький, но денежный нишевый рынок в Северной Америке, и жить долго и счастливо, получая ежемесячно чеки за саппорт сложнейшего продукта.
В вопросе выборе языка у мудаков вопрос продуктивности, если и занимает какое то место, то далеко не первое. Но есть и другая крайность.
Уринировал неосилятора.
>Ну вот, нагугливаю я, значит, этот shapeless (а нужны мне type classes)
Взлольнул.
>>625233
>это для илиты, а мы, приземленные практики будем это ваше пользовать?
Да. Или не будем. Я вот на прошлой неделе захотел заюзать LabeledGeneric из shapeless. Все было ок пока я не начал его юзать на наших реальных case class'ах, в которых около 50 полей - одна строчка клмпилировалась 2 минуты. Miles ничего пока не посовотовал, может так и должно быть, лол.
Бред про Делфи комментровать не буду конечно.
>>625234
С++ идеально заходит с таким подходом.
поговорил с копипастой
потому что одно член, другое яйца
Патамушта.
C++ - игрули (именно графический движок и физика), супер-хуйлоад вроде поисковика гугла, частично системщина (потихоньку проталкивают в виде классов с наследованием для си).
Scala - энтерпрайз. Билетики там продавать, быстро баги отлаживать в час ночи как и на жаве. Бигдата и пр. компуктерсайнс - удобно реализовывать всякие ёба-алгоритмы.
Потому что скала - жвм говно как и жява, только для неосиляторов функциональных языков а не плюсов.
Я думал /: == foldLeft, а :\ == foldRight, в programming scala написано так же.
Внезапно до меня дошло, что у операторов, которые заканчиваются на двоеточие, инвертирован порядок. Спасибо, видимо мне просто надо было написать.
Тебе нужно было отвлечься. Мозг решает задачу даже если ты на ней не сфокусирован.
Одерски уже сам покаялся за эти смайлы заместо символьных имён. Зачем жрать говно?
https://telegram.me/joinchat/BoA_agWB_Xh7Rm75eumPNw
>телеграмм
И тут ты такой путешествуешь нахуй. Пили в слаке или скайпе, а в этом говне сам сиди.
Микроблоггер тоже ищет в языке волшебную палочку, которая наконец даст ему возможность хоть что-нибудь создать самому, но не находит, и прыгает с одного языка на другой, с надеждой, что вот он: тот самый язык который ляжет на его ментальную модель, и он сможет творить, но нет, и нет, и нет. И он опять на унылой работе наедине с Perl… Сейчас я заплачу… Но микроблоггер не плачет! Он выходит в социальные сети, и вот уже миру видится гуру функционального программирования, гигант мысли, вершина профессиональной карьеры. И десятки вдохновленных юношей бросают программировать и начинают изучать Haskell (или то, что микроблоггер в данный момент рассматривает как палочку), в надежде стать таким же как он.
Я привел в пример довольно редкие, хотя и не уникальные случаи, дальше я детализировать не буду — тут работы на неделю. Но все отмечу некий обширный класс программистов, характерный адекватным отношением к языку, только потому что он для них по-большому счету не важен. Это те, занятие которых можно с трудом назвать программированием (на собеседованиях они как правило не могут “развернуть” список или на предложение реализовать хэш-таблицу, искренне недоумевают “зачем, она же уже для меня сделана”, особо интересные особи с удивлением спрашивают о том, как это вообще возможно (ведь хеш-таблицы появляются в их языках от создателей с другой планеты — прим. автора.). Эти люди как правило занимаются тем, чтобы собирать из всего что есть вокруг нечто работающее, и получать за это деньги. Такие чуваки относятся к любому молотку спокойно, как к молотку, влияние языка на их производительность минимальна, и многие из них вряд ли задаются этим вопросом. Весь их опыт сборки продуктов из палок и артефактов от других людей показывает что язык в их деятельности совсем не влияет на их продуктивность в сравнении с качеством и возможностями склеиваемых ими кусков.
компилятор скалы, псп, целка второй дочери путина (проебала)
Мы пользуемся slack. У него есть неплохие десктопный (под все ОСи), веб и мобильный клиент. Для регистрации необходима только почта (фейковая тоже подойдет).
Пригласить себя можно здесь:https://invite-me-to-2chpr.herokuapp.com
Если инвайт не пришёл в течении 5 минут, попробуйте другую почту.
А сколько в этом языке специальных операторов?
Сколько влезет от "!" до "|/::!>>|"
твой телефон никто не увидит, если укажешь в профиле никнейм. В остальном телеграм довольно удобная штука.
Слака гораздо удобней и проработанней, плюс создавалась крупной командой, а не питерским наебщиком-недоучкой.
Джява-синьёр моментально конвертится в скала-джуна, ещё и повизгивая от радости, а таких чтоб со скалки прямо начинали, и нет, наверное.
На джяве писал только хелловорлды, а на скале уже достиг уровня сеньора. Вообще скала значительно проще джявы/питона/пхп и других популярных языков, как мне кажется.
загляни в какой-нибудь scalaz или shapeless и посмотри какой-нибудь структурный код, чтоб тайп баунды и все такое, а потом положи руку на сердце и повтори тоже самое
>scalaz или shapeless
Это не скала, а сторонние библиотеки для неё, и для написания крудов уровня пхп их изучение скорее всего никогда не понадобится. Ещё попытка.
Пффф, тогда ты загляни в Vasyasiteadminka.php со смесью пхп сыкуэль шэтэмээль,а потом положи руку на сердце и повтори тоже самое
>scala
не нужно. Это академический проект, с довольно бажным и тормозным компилятором, невозможностью сделать нормальную IDE, переусложненностью, издевательством над JVM и 100%-вероятностью выстрелить себе в ногу на большом проекте. От sbt так и вообще тошнить тянет. Короче Одерски со студентами засрали годную идею, жаль только что Akka на этом говне написана.
Для JVM есть Clojure. Для неизвращенцев есть Kotlin - прекрасно спроектированный язык.
> невозможностью сделать нормальную IDE,
Идея вполне нормальная
> переусложненностью, издевательством над JVM и 100%-вероятностью выстрелить себе в ногу на большом проекте.
Проиграл с неосилятора.
> От лучшей в мире системы сборки так и вообще тошнить тянет.
Лол блять.
> Для неизвращенцев есть Kotlin - прекрасно спроектированное на коленке и мертворожденное говно, не покрывающее и трети возможностей скалы.
И снова в голос
>неосилятора
Кто тут у нас? Прыщеглазый школьничек, прочитавший год назад про монады и теперь дрочащий на scalaz, ковариантность и прочие хрюшечки ?
>Идея вполне нормальная
Расскажи это тем в JB, кому приходилось пилить scala-плаги мне. По секрету, Kotlin появился именно по этой причине, чтобы можно было сделать нормальный статический анализатор кода и при реализации тривиальных рефакторингов не учитывать по 100500 случаев.
>лучшей в мире системы сборки
Блять, это про тот незаконнорожденный костыль, основная задача которого скрыть костыли своей матери-алкоголички? Который меняет API в минорных версиях? Который даже формат меняет в минорных версиях?
Я уже не говорю, что эта хуйня со своим зоопарком типов-промокашек херит к хуям множество интринсиков в HotSpot, то что основная цель изучающих скалу (по собственным наблюдениям) - дрочь на скалу, а не реализация проектов.
Увы, это мерзкое недоподелие заняло свободную нишу нормального языка для JVM, теперь от наследия этого говна в век не избавиться. А так сидел бы Одерски, пилил бы гранты евросоюза и спокойно бы докладывал на конференциях, как очередной ебанутый аспирант ускорил вывод типов на целый блять 1 процент. Но из-за этого пришлось немного изменить API компилятора и в очередной раз пожертвовать совместимостью, но блять - вы только посмотрите - на целый 1% процент.
http://www.scala-sbt.org/0.13/sxr/sbt/logic/Logic.scala.html
а как вам это, ублюдки?! а?! а?!
Вы посмотрите какая красота, вы только поглядите на это! Какие чистые конструкции, аккуратные, Господи Боже мой, Господи Боже мой. Да за каким же хуем я выбрал этот ебанный мавен блядь, это действительно это сука, это проклятие блядь, это сука наказание ебаное блядь! Ой, кошмар
>очередная боль мартышки-неосилятора
Кек. Пока в котлине нет той же системы типов, имплицитов и макросов, он и грязи на сапоге скала-господ не стоит. А как появится - у тебя порвётся очко и от котлина.
>Я уже не говорю, что эта хуйня со своим зоопарком типов-промокашек херит к хуям множество интринсиков в HotSpot
Ну что поделать, оракломартышки не смогли написать нормальную JVM.
Спиздил бы scala-ide уже. Не можешь срать - не мучай жопу.
Да очень просто! Я уже три месяца программирую на Скале, прошел 4 курса и могу написать сайт любой сложности.
>жаль только что Akka на этом говне написана
Кривое говно написано на кривом говне, всё ок, ящитаю.
Если объективно, то берёшь требования к джява-сеньору, заменяешь джява-технологии соответствующими скаловскими и сравниваешь со своими знаниями.
У тебя баг в "заменяешь джява-технологии соответствующими скаловскими". Если скала для спарка-бигдаты - нет аналогов. Если для миграции на неё джява-легаси - не всё можно и есть смысл заменять, не за этим Одерски ночей не спал, делал seamless интеграцию с джявой.
Прочел статью с хабра о нем. Действительно ли стоит внимания? Не сыро?
Вполне нормально уже. На Anko еще посмотри.
Не сможешь после скалы ковырять легаси-говно на шестой джяве, умрёшь от разрыва ануса.
В чём лучше писать на скале? Испытываю тонны жопной боли пытаясь заставить работать Эклипс
мимо-линуксойд/i]
Вы видите копию треда, сохраненную 14 февраля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.