Это копия, сохраненная 30 июня 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Лучшая книга по Скале: http://www.ozon.ru/context/detail/id/31921731/
Учебник по Скале на русском: http://twitter.github.io/scala_school/ru/index.html
Второй учебник по Скале на русском: http://twitter.github.io/effectivescala/index-ru.html
Курс по fp на Скале для слоупоков: https://www.coursera.org/course/progfun
Список годноты: https://github.com/lauris/awesome-scala
Презентации летнего ScalaDays: https://www.parleys.com/channel/53a7d269e4b0543940d9e535/presentations?sort=views&state=public
Два недавних форка компилятора, один от тайплевела и второй от баттхертнутого:
https://github.com/typelevel/scala (https://github.com/typelevel/scala/wiki/Differences)
https://github.com/paulp/policy
Завтра ищешь в интернете книжку Programming in Scala. Похуй если ничего не поймешь. Затем идешь на scala-lang.org и изучаешь стандартную библиотеку от корки до корки. Потом зубришь, именно, сука, вызубриваешь конвенцию по написанию скала кода - от EPFL естественно, чтобы от зубов отскакивало. Когда напишешь свой первый клон Twittera, по пути изучив основы дискретного и лямбда исчисления, скачиваешь и изучаешь любой асинхронный скала вебсервер, рекомендую Play!. Как переделаешь твиттер клон, чтобы выдавал по крайней мере 5 тысяч запросов в секунду, можешь идти дальше - тебя ждет увлекательный мир хайлоада. Apache Hadoop и Spark, сверхбыстрые асинхронные key-value хранилища, NoSQL и прочие мира открытого исходного кода приблуды. Отсос хиккующих питонистов / просто неудачников типа годаунов или рубифанбоев, сосут по жизни, не заставит себя ждать и уже через пол года ты будешь подворачивать штаны, есть маффины, запивая смузи и любая баба будет течь от упоминания твоей зарплаты.
Хаскель вообще простой язык, разве что комьюнити любит играть в алгебраистов.
А у скалистов принято городить сложности ради сложностей.
Потому что скала изначально язык от студентиков для студентиков, которым нравится ласкать себе анус о 9000 перегруженных операторов и СУПИР систему типов.
Нормально вкатываются в скалу после хоть какого-то опыта в нормальном статически типизированном ЯП или опытом в ФП.
Также вангую в тебе очередного вкатывальщика без вышки (иначе не задавал бы такие вопросы), так что ты просто нихуя не поймёшь, когда начнёшь "учить" скалу по книжке.
Можна.
Продемонстрируй нам свой интеллект, недебил.
Но скала проще чем джява и тем более C++, если бы я знал про её существование то вкатился бы сразу в неё.
Крутой язык, много платят, есть спрос на рынке.
>Уехал писать на Scala в Новую Зеландию пару месяцев назад.
>Для этого отказался от оффера в Нидерландах.
Кек, дебил.
Я был морально не готов платить 48% налогов после 30 лет и учить странный полунемецкий язык.
Тем, что позволяет намесить говна в жопе больше, чем C++.
> типовыводилки и нескольких паблик классов в одном файле
На такую толстоту даже отвечать не буду
>48%
Три года кенисмигрантских льгот, а там и с офшором бы что сообразил. Ходи теперь вниз головой хуле.
Да ну нахуй, хочу получать нормальную зп и не ебаться с оффшорами (прям призрак рашы ей богу) :)
Тут заебато. Правда сено во рту у всех (последствие разведения овец), поэтому даже местные свой акцент не понимают.
Ну да, скажи что implicit'ы и higher-kinded типы с аппликативными функторами - это очень просто. Или val и var? Наверное, проще. Но только дебил будет это сравнивать с Java говоря, что Java сложнее.
Так что там проще-то?
Наоборот, всё правильно сделал. Евросовок - говно ебаное, а Новая Зеландия, наверное, последнее нормальное место на земле.
Приложения на этой либе
>Ну да, скажи что implicit'ы и higher-kinded типы с аппликативными функторами - это очень просто
Благодаря всем этим "сложным" вещам, на скале приложение, требовавшее до этого тысячи бойлерплейта и AbstractSingletonProxyFactoryBean, пишется в 3.5 строчки, именно поэтому скала проще.
Проще ровно до того момента, когда что-то ломается. Не понимая, как это работает - ты продолжаешь писать на Java, полагая что пишешь на Scala.
А если ты понимаешь как это работает, то нихуя не проще. Проще - накатать бойлерплейт и не знать проблем с неправильно отсортированными implicit конвертерами.
Да и это не проще, это - короче. Просто - это когда думать почти не нужно. Берешь код и копипастишь, с небольшими правками для себя. Когда этим обезьяны заниматься могут.
да, я дебил. это другое
Твитор клон, его и на пыхе сделать можна?
бля, запостил раньше времени. Внимание, вопрос почтенной публике:
Есть ли какой-то (каноничный) способ короткой записи лямбд вида v => v, или v => True, или v => False, ну типа тех, которые вроде нейтрального элемента в теории групп.
Спасибо
ага, так
Из динамикодрисни, очевидно же.
Злые вы, сразу нубу гвоздь в мозжечок вбиваете этим вашим шейплесс
http://stackoverflow.com/a/3508555
А что мешает просто в язык добавить type MyType = A | B | C ?
То, что это, блядь, скала. Слишком просто - значит неинтересно.
Добавят в dotty.
Пока идиоматично сделать sealed trait и case classы. Если хочется повыёбываться, сделай как >>637625 предложил. Если выёбываться хочется сильно, а компилировать код долго, то юзай shapless (>>637597) или сам это реализуй: http://milessabin.com/blog/2011/06/09/scala-union-types-curry-howard.
Вот, только хотел написать, что вроде планируют запилить. Даж в ссаном тайпскрипте есть.
В Scala.js такая хуйня есть, попробуй оттуда выдрать
Это нельзя сделать на JVM, в scala.js это тип-интринсик компилятора и работает толко за счет того, что все типы стираются в js.Any
А тип листа в жвм не стирается? По сути это всего лишь сахар для конпелятора, типа чтоб СТАТИЧНЕНЬКО, а так-то можно сделать List[Any] и потом хуярить match/case.
Мы о разных вещах говорим, тут и спора никакого нет. Union-types в ванильной скале хорошо реализуются обертками или боксингом с паттерн-матчингом по забоксеным значениям (case/instanceof), не вопрос. Другое дело, что в js любые значения по определению являются union-types. Для того, чтобы можно было передавать функциям при интеропе типизированные объекты, не имеющие общего предка кроме js.Any, и сохранить тайпчеки на стороне scala-кода, не указывая js.Any как тип параметра, ввели такой костыль, который просто стирается.
Ну, для двух типов есть Either, а так sum type будут вводить в 2.12 вроде
Представься, мразь.
Что значит много? Я только на ней и пишу хуй знает, много или нет например, а кто-то вообще не использует.
Если ты про индустрию, а не админов локалхоста, то чуть больше, чем на Хачкиле, скажем так.
In April 2009, Twitter announced that it had switched large portions of its backend from Ruby to Scala and intended to convert the rest.[79]
Gilt uses Scala and Play Framework.[80]
Foursquare uses Scala and Lift.[81]
SpinGo uses Scala and Akka.[82]
Coursera uses Scala and Play Framework.[83]
The Guardian newspaper's high-traffic website guardian.co.uk[84] announced in April 2011 that it was switching from Java to Scala,[85][86]
The New York Times revealed in 2014 that its internal content management system Blackbeard is built using Scala, Akka and Play.[87]
The Huffington Post newspaper started to employ Scala as part of its contents delivery system Athena in 2013.[88]
Swiss bank UBS approved Scala for general production usage.[89]
The BitGold platform was built entirely on Scala and Play Framework.[90]
LinkedIn uses the Scalatra microframework to power its Signal API.[91]
Meetup uses Unfiltered toolkit for real-time APIs.[92]
Remember the Milk uses Unfiltered toolkit, Scala and Akka for public API and real time updates.[93]
Verizon seeking to make "a next generation framework" using Scala.[94]
In April 2009, Twitter announced that it had switched large portions of its backend from Ruby to Scala and intended to convert the rest.[79]
Gilt uses Scala and Play Framework.[80]
Foursquare uses Scala and Lift.[81]
SpinGo uses Scala and Akka.[82]
Coursera uses Scala and Play Framework.[83]
The Guardian newspaper's high-traffic website guardian.co.uk[84] announced in April 2011 that it was switching from Java to Scala,[85][86]
The New York Times revealed in 2014 that its internal content management system Blackbeard is built using Scala, Akka and Play.[87]
The Huffington Post newspaper started to employ Scala as part of its contents delivery system Athena in 2013.[88]
Swiss bank UBS approved Scala for general production usage.[89]
The BitGold platform was built entirely on Scala and Play Framework.[90]
LinkedIn uses the Scalatra microframework to power its Signal API.[91]
Meetup uses Unfiltered toolkit for real-time APIs.[92]
Remember the Milk uses Unfiltered toolkit, Scala and Akka for public API and real time updates.[93]
Verizon seeking to make "a next generation framework" using Scala.[94]
Ну хачкиль это совсем до свидания
Но у Руби же плохо с производительностью и ее используют больше для прототипов. Скала такая же?
Нет. Первое тоже нет.
Относительно явы скала тоже проигрывает в производительности, так что в какой-то степени.
>Идиоматик скала
И чо? Тебе на жабе идиоматичные индусы без плетки такого напишут. Императивный джавалайк код, проложенный, в нужных местах, работает со сравнимым быстродействием, что тебе еще нужно, смерд?
И вообще иди нахуй, синтетический.
>>650041
>Императивный джавалайк код, проложенный, в нужных местах, работает со сравнимым быстродействием, что тебе еще нужно, смерд?
Проложенный в нужных местах через JNI C++-код в Java проекте работает со сравнимым быстродействием, что тебе еще нужно, смерд?
Проложенный в нужных местах С код в C++ проекте работает со сравнимым быстродействием, что тебе еще нужно, смерд?
Проложенные в нужных местах ассемблерные вставки в С коде работают со сравнимым быстродействием, что тебе еще нужно, смерд?
Сам понял тупость сказанного? "Идеоматик" средства языка - это именно средства предоставляемые языком, а не его прародителем.
В любой задаче всегда удобно использовать средства языка, и всем приматам пишущим на скале как и на других высокоуровенных языках абсолютно похуй, будет их функция работать на 2 мс быстрее. Не им же в конце-то концов банк по 3 недели после НГ деньги переводит.
Проложенный в нужных местах через JNI C++-код в Java проекте работает со сравнимым быстродействием, что тебе еще нужно, смерд?
Залупа на воротник. Выигрыш если и есть, то мизерный. Про Си с асмом расскажешь посонам у падика.
>на других высокоуровенных языках абсолютно похуй, будет их функция работать на 2 мс быстрее
Естественно, на абстрактные миллисекунды на реальном проекте всем похуй. Есть требования - с определенным набором данных код должен успевать отработать за определенное время. Идиоматичный код отрабатывает (а он отрабатывает в 99% случаев) за нужное время — заебись, нет — начинаем искать боттлнеки, и что-то менять.
Он еще и на зоне сидел, если не врет:
> Ну и взяли меня наконец. Литература там, то да се. "Зияющие Высоты", "Архипелаг", тут же и фотопленка моего изготовления - статья готова. Им-то нужен был Револьт - но на Револьта никто не показывал. Да и не Револьт вовсе мне книжки давал, без него хватало народу. Книгоношу нашу, Маргариту, тоже, конечно, схватили; на нее в Питере настучали. А на меня - по месту жительства, в Сыктывкаре. Одно время, в начале 90-х, модно было расспрашивать, а кто конкретно стучал? А зачем это вам, чтобы чувствовать себя на высоте, как бы встать рядом с теми, кто сидел, и пальцем показывать на предателей?
> Так вы хотите знать, кто предал? Да ведь вы и предали-с. Вы продали меня за относительно уютную квартирку, за стабильную получку два раза в месяц, за возможность видеть своих детей каждый вечер и отправить их летом в пионерлагерь, за обыкновенную свою жизнь - вы и продали. Вы молчали, когда нас арестовали, когда на собраниях про нас выдумывали всякую гадость, когда вас спрашивали о характере знакомства, а вы говорили, что после окончания ВУЗа ничего обо мне не слышали. Вы и предали. А кто еще? Урнышев? Что Урнышев мог предать, если он был по другую сторону невидимой баррикады? А предали - вы. И меня, и себя.
> Да ладно, дело прошлое. После почти года тюрьмы меня отправили в ссылку в Качканар, Свердловской области. Конечно, времена другие; жена со мной развелась, просто потому что я ей всю жизнь испортил. Папа-коммунист тут был ни при чем, не больно-то она к нему прислушивалась. Просто. Я только о себе и думал, а о семье не думал - вот в чем моя проблема. Семья, конечно, моего поступка не забыла, и дочь меня так и ненавидит до сих пор. Ну, это как бы положено, эдипов комплекс, я же тоже своего папу мента ненавидел лет так до тридцати с лишним.
> Математикой в Качканаре я как-то не занимался. Не совсем понятно, почему - время-то было, работал истопником, сиди всю ночь да строй свои коммутативные диаграммы. А нет, не тянуло. Может, конечно, Людка отвлекала от высоких тем. С Людкой не до математики было - у нее рот не закрывался, и все ей смешно. Почему я Людку оставил в Качканаре, почему ее с собой не взял? Думал, наверное, так: нельзя зверка из заповедника в город везти, заболеет зверок в городе и умрет. Демагогия на самом деле. Просто не к лицу, признался бы уж прямо.
http://patryshev.com/literatura/volum2/istoria_zisni.html
Он еще и на зоне сидел, если не врет:
> Ну и взяли меня наконец. Литература там, то да се. "Зияющие Высоты", "Архипелаг", тут же и фотопленка моего изготовления - статья готова. Им-то нужен был Револьт - но на Револьта никто не показывал. Да и не Револьт вовсе мне книжки давал, без него хватало народу. Книгоношу нашу, Маргариту, тоже, конечно, схватили; на нее в Питере настучали. А на меня - по месту жительства, в Сыктывкаре. Одно время, в начале 90-х, модно было расспрашивать, а кто конкретно стучал? А зачем это вам, чтобы чувствовать себя на высоте, как бы встать рядом с теми, кто сидел, и пальцем показывать на предателей?
> Так вы хотите знать, кто предал? Да ведь вы и предали-с. Вы продали меня за относительно уютную квартирку, за стабильную получку два раза в месяц, за возможность видеть своих детей каждый вечер и отправить их летом в пионерлагерь, за обыкновенную свою жизнь - вы и продали. Вы молчали, когда нас арестовали, когда на собраниях про нас выдумывали всякую гадость, когда вас спрашивали о характере знакомства, а вы говорили, что после окончания ВУЗа ничего обо мне не слышали. Вы и предали. А кто еще? Урнышев? Что Урнышев мог предать, если он был по другую сторону невидимой баррикады? А предали - вы. И меня, и себя.
> Да ладно, дело прошлое. После почти года тюрьмы меня отправили в ссылку в Качканар, Свердловской области. Конечно, времена другие; жена со мной развелась, просто потому что я ей всю жизнь испортил. Папа-коммунист тут был ни при чем, не больно-то она к нему прислушивалась. Просто. Я только о себе и думал, а о семье не думал - вот в чем моя проблема. Семья, конечно, моего поступка не забыла, и дочь меня так и ненавидит до сих пор. Ну, это как бы положено, эдипов комплекс, я же тоже своего папу мента ненавидел лет так до тридцати с лишним.
> Математикой в Качканаре я как-то не занимался. Не совсем понятно, почему - время-то было, работал истопником, сиди всю ночь да строй свои коммутативные диаграммы. А нет, не тянуло. Может, конечно, Людка отвлекала от высоких тем. С Людкой не до математики было - у нее рот не закрывался, и все ей смешно. Почему я Людку оставил в Качканаре, почему ее с собой не взял? Думал, наверное, так: нельзя зверка из заповедника в город везти, заболеет зверок в городе и умрет. Демагогия на самом деле. Просто не к лицу, признался бы уж прямо.
http://patryshev.com/literatura/volum2/istoria_zisni.html
>Залупа на воротник.
Мамаше твоей тупой.
>Выигрыш если и есть, то мизерный.
Гуглу расскажи, который на этом мизере миллионы экономит где-то бумажка с их исследованиями лежит. Хотя, тебе с твоей задрюпанной шаражкой, конечно похуй, лишь бы трактор завёлся.
>Про Си с асмом расскажешь посонам у падика.
Ну так это сравнение, дефектное. Хотя твой мозг даже си не потянул бы.
>за определенное время. Идиоматичный код отрабатывает (а он отрабатывает в 99% случаев) за нужное время — заебись, нет — начинаем искать боттлнеки, и что-то менять.
>за определенное время
Что и требовалось доказать, ведь мы как никак изначально говорили что это медленное дерьмище. Если уж возникает ботлнек на продакшен серверах (а у всяких банков на хорошее железо деньги есть) - такой язык дефакто медленное дерьмо.
>Гуглу расскажи
Мамкин максималист? Про принцип Паретто слышал?
В банке не работал, а под программно-аппаратные изделия писал, да, пример оттуда.
>Мамкин максималист?
Конечно. Ещё и технофашист.
>Про принцип Паретто слышал?
Конеш. Только учитывая разную специфику проектов он варьируется в них так же, как и звучит.
Вот и хорошо, ты сам признал, что выигрыш имеет место в корпорациях масштаба гугла. Интересное наблюдение, и скорее всего, бесполезное.
Если на других яп один алгоритм реализованный идиоматичными средствами будет ощутимо быстрее - да, медленное дерьмо и %название_яп% становятся почти синонимами.
Эээ, нет, я признал что я не терплю говна, а не то что это справедливо только к гуглу. На большей эффективности (в плане перформанса) могут выиграть не только гиганты, но и стартапы, и даже дядя-вася написавший %шареваренэйм% менее требовательным к железу.
Недавно на медиуме мелькала статья о челике, который писал что-то там о экономии на железе своего бомжестартапа благодаря C++. Аналогичных истории о том же Go - жёпой жуй.
>Если на других яп один алгоритм реализованный идиоматичными средствами будет ощутимо быстрее
То такую реализацию никто не будет использовать. Как, например, никто не будет писать рекурсивные реализации сортировок, хотя это красиво и напрямую мапится в математическое определение.
>экономии на железе своего бомжестартапа благодаря C++
Отлично, у чела было свободное время, которое он сконвертировал в вертикальную масштабируемость своего стартапа. Ты ведь понимаешь, что вначале он упрется в производительность бомжежелезки, а затем в производительность одной ноды, любой доступной в настоящее время конфигурации? При условии роста нагрузки, естественно.
Я бы скорее взял такую шкалу: скриптота - vm - нэйтив код. Внутри одного уровня производительность критично не различается (речь здесь не идет про маргинальщину), бери что удобнее.
>а затем в производительность одной ноды, любой доступной в настоящее время конфигурации
А ещё я понимаю что если стартап взлетит и появится нагрузка каждая доступная в данный момент нода будет использоваться эффективнее.
>>650123
>То такую реализацию никто не будет использовать.
Нуу.. На раби с питоном тоже пишут и крупные сервисы (хотя там дело именно в скорости разработки). Так что зависимость популярности от производительности сомнительна.
>А ещё я понимаю что если стартап взлетит и появится нагрузка каждая доступная в данный момент нода будет использоваться эффективнее.
Где-то на этом моменте у стартапа возникают интересные вопросы с деплой автомейшн, сопровождением, набором кадров. И скорее всего просёр по экономике из-за завязки на маргинальщину.
>уу.. На раби с питоном тоже пишут и крупные сервисы
Руби, Питон, пхп.. Львиная доля запросов дальше мемкеша не пройдет.
>Руби, Питон, пхп.. Львиная доля запросов дальше мемкеша не пройдет.
Значит докупятся ещё 5-6 серверов, чо.
>>650147
> возникают интересные вопросы с деплой автомейшн
Какие?
>сопровождением, набором кадров
Скажи ещё что на скале больше людей пишут, или что у неё приток больше. Если относить по размерам к какому нибудь рынку Java/C# - она ещё большая маргинальщина, чем даже C стандарта 89 года.
>она ещё большая маргинальщина, чем даже C стандарта 89 года.
Смешно же. Прямо сейчас можно взять хипстора, который будет поначалу писать как на джабе с сахарком. Спец, который будет писать на под веб на Си, притом писать непадучий безопасный код - я хз, где брать такого единорога.
>Прямо сейчас можно взять хипстора, который будет поначалу писать как на джабе с сахарком.
Не, хипсторов и прочую поеботу я бы не рискнул допускать до функционального языка. А писать на скале как на яве не получится никак. Здесь шутка про ++ и + и их типобезопасность, нытьё про хвостовую рекурсию и кучу прочего.
>Спец, который будет писать на под веб на Си, притом писать непадучий безопасный код - я хз, где брать такого единорога.
Кроме C подойдёт и любой C++ программист.
Именно парочку спецов найти вполне можно, а дальше сгодятся и макаки которые будут коммитить только через кодревью, как и везде.
Я хуею с такого сравнения. А ничего, что в Java сортируется массив, а в "Idiomatic Scala" — односвязный список?
Отлично. В обоих случаях имеем одного-двух рокстаров и отряд мартышек.
>будут коммитить только через кодревью
Человеческий фактор же, однажды очередная мартышка закоммитит очередной null pointer dereference, срыв стека и т.п.
Однажды мартышка закомитит
val chlen_lenght = List('1', '2')
val hui = "5" + chlen_lenght
И получит еботню в виде 5list(1,2).
Или ещё где-то видел такую вещь, что .toSet возвращал нормальный результат, а .toSet() - Boolean.
Господи, да любое взаимодействие с явакодом требует кучи преобразований структур данных и не редко вызывает NPE.
Это так, к слову о человеческом факторе. Скала - не ява, и мартыханов с легким сердцем на неё сажать не получится.
Отсюда преимущество: приходя на проект на скале, ты скорее всего будешь работать с умными людьми, а не тупыми макаками.
Уже видел несколько проектов, которые начинали на скале именно потому, что она работает как фильтр от обезьян.
Вот каким образом развратник приступил к омерзительной операции. Его окружили четверо скала-петухов: один держал наготове большой ночной горшок, второй взял зажженную свечу и подставил ее поближе к анусу, чтобы было лучше видно происходящее, третий сосал ему член, четвертый, перекинув через руку белоснежное полотенце, целовал Ганди в губы. Тот, опершись еще на двоих педерастов, поднатужился, и как только появилось невероятное количество дерьма, которое обыкновенно и регулярно выдавал хозяин параши, учитывая страшное количество поглощаемого им борща, тот петух, что держал горшок, принялся восхвалять экскременты. «Какое прекрасное скала-дерьмо! — восклицал он. — Ах, господин мой, какое превосходное говно! Как красиво вы испражняетесь». Когда дифирамбы закончились, педераст, вооруженный салфеткой, языком очистил преддверие ануса, а горшечник подставил содержимое горшка под нос Ганди и опять громогласно восхвалял его. После этого мощная струя мочи ударила в рот сосателю, который тут же проглотил всю жидкость, полотенце завершило то, что не мог сделать язык, и четверо скала-петухов, оставшись без дела, долго сосали поочередно язык, фаллос и задний проход распутника.
(Автор этого поста был забанен. Помянем.)
Высрался, уебок? Полегчало тебе? Нет? Попробуй в следующий раз поударяться головой о стену.
Ну теперь буду знать как объяснять дырки в других языках, лол.
Забавно серишь и обмазывешься, братишка. В /b/ или /po/ тебе были бы рады.
>5list(1,2)
Это не проблема, на самом деле. В haxe то же самое - на выходе получается строка, и тайпчекер начинает ругаться.
И ради того чтобы больше мартых вспороло себе живот они оператором ++ складывают содержимое листа в строку.
То, что в хаксе есть то же самое - не значит что это не проблема, лол. Это проблема скрещивания java-like паттерна с перегрузкой операторов (которые, чтобы одерску выебали, не ограничены вообще никак).
Оно просто не сконперируется, тебе же ответили.
Кстати, в Scala нет перегрузки операторов.
Промазал? Промазал.
> Однажды мартышка закомитит
> val chlen_lenght = List('1', '2')
> val hui = "5" + chlen_lenght
> И получит еботню в виде 5list(1,2).
А что он должен был получить по-твоему? Ошибку конпеляции? Но ведь тогда мартышкам будет больно, строки не посклеивать(((
Именно ошибку конпиляции и получит. val hui не пролезет в сигнатуру метода zalupa.chlenomer: Int
А если это String то пролезет. Я бы всё-таки запретил складывать строки с хуйнёй, для этого есть s"${huita}"
А если String, то значит это не ошибка, а так задумано.
Я бы тоже конкатенацию запретил.
Если это String, то туда не пролезет List("5", '1', '2'). И я надеюсь, что в скалке можно задавать строки обеими кавычками, иначе вообще хуй знает, что автор этого кода хотел сделать.
Поясните за совместимость.
Как скала компилируется?
а) Scala --> Java byte code
б) Scala --> Java --> Java byte code
Предстоит работать с узкоспециализированным фреймворком под JVM, про поддержку Скалы ничего не известно. Может оказаться так, что я не смогу Скалу использовать?
Скалу использовать сможешь в любом случае. Временами будет неудобно, когда из джавы нужно дергать скала-код и наоборот, в основном из-за преобразований типов.
По обещаниям это типобезопасный язык - такой хуйни быть не должно.
На практике - http://ideone.com/NQDUXH
>>651148
Если нету офф. поддержки - лучше не еби мозги и не примешивай скалу (разве что только в местах не связанных с фреймворком). Работать с чем-то явным кроме стандартной библиотеки достаточно больно - уродливые конструкции и постоянные перегоны типов, убивающие нахуй производительность и память, NPE и прочая поебота.
Из самой явы - а если фреймворк чисто явный без неё не обойтись - использовать код скалы просто пиздец как больно, см. гугл.
А ты как хотел. В первом случае неявное приведение к String, во втором — расширение строки на Seq. В реальном коде от такого можно огрести только если слепо полагаться на вывод типов и не продумывать интерфейсы. За программирование без проектирование интерфейсов принято бить канделябром.
>По обещаниям это типобезопасный язык - такой хуйни быть не должно.
Ты в List[Any] что угодно запихнуть можешь, о какой типобезопасности речь идет?
>Работать с чем-то явным кроме стандартной библиотеки достаточно больно - уродливые конструкции и постоянные перегоны типов, убивающие нахуй производительность и память, NPE и прочая поебота
Какие уродливые конструкции? Зачем перегонять типы, можно просто джавовые использовать? Про NPE вообще пушка, как будто в джаве их не будет. В скале хотя бы null'ы из библиотеки можно в Option'ы завернуть. Обёртки и для перегонов типов актуальны, кстати, тут нужно на влияние на производительность смотреть.
В общем, в 2016-ом единственная причина не использовать Скалу - недостаток программистов и/или неуверенность в них.
Я не >>651180, но иди-ка ты нахуй.
Сам-то пробовал мешать скалу с джавой или писать на скале под джавовый фреймворк?
Очень блядь охуенно удобно передавать List[Int] в джавовый метод, ожидающий Collection[Integer]:
ololo.setIds(ids.map(_.asInstanceOf[Integer]).asJava)
А особенно я люблю, когда нужно передать лямбду.
Щас ты, конечно, предложишь обмазаться имплиситами с головы до ног, на что я тебя обозву червем-пидором и пошлю еще дальше нахуй, потому что сам в таком коде разбирайся, сука.
>На практике
Теперь создай функцию, которая принимает List[Char] (или это String у вас?), и попробуй передать в неё "lol" + kek.
>Щас ты, конечно, предложишь обмазаться имплиситами с головы до ног
Нет, не предложу, я же не даун.
Предложу:
1) Сделать так чтобы значение ids имело тип Collection[Integer]
2) Вынести преобразование типов в обёртки, то есть метод setIds принимал List[Int] + null'ы туда же
Или еще что-то зависящее от конкретного случая.
> А особенно я люблю, когда нужно передать лямбду.
Жди 2.12
> Щас ты, конечно, предложишь обмазаться имплиситами с головы до ног, на что я тебя обозву червем-пидором и пошлю еще дальше нахуй, потому что сам в таком коде разбирайся, сука.
Неосилятор закукарекал.
Scala - это когда здравый смысл подсказывает, что можно использовать продвинутый язык, но опыт в энтерпрайзе подсказывает, что "серьёзный" язык должен обязатель быть с привкусом говна.
Scala - это когда когда в промышленных библиотеках эмулируются наиболее сложные паттерны Хаскеля посредством ональных трюков, при том что даже в самом Хаскелле, заточенном под эти паттерны, они считаются сложными и применяются ограниченно и с крайней осторожность в библиотеках с тегом experimental.
Scala - это способ выебнуться, "потому что можем!" Похуй, насколько сложно этим пользоваться, насколько не подходит это языку, но ведь можем же! В лечении зубов через ональное отверстие Скала на первом месте.
Scala - это фанбои, которые открыли для себя тайпчекер и теперь тайпчекают, скажем, диррективы в спрее (где всё равно практически невозможно ошибиться, а война с тайчекером - там боль на ровном месте), но при этом пишут безтиповую акку.
Scala - это когда паттерны динамического языка засовывают в статический (акка), в результате программист вынужден пидорасить классы для входящих и исходящих сообщений, которые нигде не используются. Ну т.е. взяли всё худшее из динамических языков (отсутсвие типизации), смешали со всем худшим из статических языков (необходимость явно описывать типы), получилась типичная библиотека Scala.
Scala - это безумное время компиляции, и безумный расход памяти при исполнении. И еще - Scala это один из немногих языков, где как нехуй делать получить null pointer exception, при том, что null-ов в Скале вроде как нет. Ну просто из-за особенностей порядка инициализации полей.
Scala - это когда eDSL-ем на порядок сложнее пользоваться, чем самим языком, для которого этот eDSL построен (см. slick). Scala, это когда язык с менее продвинутой системой типов (C# LINQ) делает всё то же самое существенно удобнее, чем более "продвинутая" Скала.
Scala - это когда надо освоить Хаскель на продвинутом уровне, чтобы программировать на Скале. Scala - это когда у высококлассных хаскеллитов есть шанс разобраться во всех её изъёбствах опираясь на свой бекграунд, а вот как поступать быть обычному программиту, который всю жизнь на Джеве программировал, с этим криптохаскелем, совершенно не понятно, и скалафанбоев, похоже, не ебёт.
Вот это и есть Скала, это вот всё.
Scala - это когда здравый смысл подсказывает, что можно использовать продвинутый язык, но опыт в энтерпрайзе подсказывает, что "серьёзный" язык должен обязатель быть с привкусом говна.
Scala - это когда когда в промышленных библиотеках эмулируются наиболее сложные паттерны Хаскеля посредством ональных трюков, при том что даже в самом Хаскелле, заточенном под эти паттерны, они считаются сложными и применяются ограниченно и с крайней осторожность в библиотеках с тегом experimental.
Scala - это способ выебнуться, "потому что можем!" Похуй, насколько сложно этим пользоваться, насколько не подходит это языку, но ведь можем же! В лечении зубов через ональное отверстие Скала на первом месте.
Scala - это фанбои, которые открыли для себя тайпчекер и теперь тайпчекают, скажем, диррективы в спрее (где всё равно практически невозможно ошибиться, а война с тайчекером - там боль на ровном месте), но при этом пишут безтиповую акку.
Scala - это когда паттерны динамического языка засовывают в статический (акка), в результате программист вынужден пидорасить классы для входящих и исходящих сообщений, которые нигде не используются. Ну т.е. взяли всё худшее из динамических языков (отсутсвие типизации), смешали со всем худшим из статических языков (необходимость явно описывать типы), получилась типичная библиотека Scala.
Scala - это безумное время компиляции, и безумный расход памяти при исполнении. И еще - Scala это один из немногих языков, где как нехуй делать получить null pointer exception, при том, что null-ов в Скале вроде как нет. Ну просто из-за особенностей порядка инициализации полей.
Scala - это когда eDSL-ем на порядок сложнее пользоваться, чем самим языком, для которого этот eDSL построен (см. slick). Scala, это когда язык с менее продвинутой системой типов (C# LINQ) делает всё то же самое существенно удобнее, чем более "продвинутая" Скала.
Scala - это когда надо освоить Хаскель на продвинутом уровне, чтобы программировать на Скале. Scala - это когда у высококлассных хаскеллитов есть шанс разобраться во всех её изъёбствах опираясь на свой бекграунд, а вот как поступать быть обычному программиту, который всю жизнь на Джеве программировал, с этим криптохаскелем, совершенно не понятно, и скалафанбоев, похоже, не ебёт.
Вот это и есть Скала, это вот всё.
> боль неосилятора
Кек.
> акка
Для кого akka-streams сделали? А ну пошёл говно чистить
>а вот как поступать быть обычному программиту, который всю жизнь на Джеве программировал, с этим криптохаскелем, совершенно не понятно,
Манямирок, вкатился в скалу почти без опыта в джяве.
Akka-streams - это тот случай, когда akka-долбоёбы героически решают созданную ими же проблему отсутсвия back-pressure и отсутсвия типизации посредством написания могущественного фреймворка над лучезарным фреймворком. Короче, сами создали проблему, сами её и порешали спустя три года, "яичко испечет да сам и облупит." Охуенные самодостаточные программисты.
Лол, опущенное чмо с петушиной аватаркой продолжает копротивляться.
*ни дня
правда ли что с появлением java 8 смысл существования скалы уничтожился?
то что появился функционализм в жаве8 разве не убивает ли жанр конкурентов жавы на этом поприще(котлины, скалы)?
или в чем тогда смысл скалы(искренне был уверен что это такая ФП-джава и все)
>то что появился функционализм в жаве8 разве не убивает ли жанр конкурентов жавы на этом поприще(котлины, скалы)?
Эмм... Нет. Там появились лямдочки, всё, жява уже функциональный язык. Лел.
Это другой язык, который с явой объединяет платформа.
>или в чем тогда смысл скалы(
Как и любого функционального языка - если у тебя есть ахуенная команда сеньёров помидоров - делать быстро ахуенные продукты (как это получилось у Тинькофф-а). Если у тебя её нету - делать нерабочее говно, которое никогда не выйдет в продакшен и дрочить на свою самооценку за мамкиным борщём.
спасибо! ухожу греть борщ
Не убивает, чуть-чуть ранит только.
http://fsharpforfunandprofit.com/posts/is-your-language-unreasonable/
>>660935
Два чаю.
Я походу недостаточно понятно объяснил, извиняюсь. Если я правильно понимаю, для того чтобы IntelliJ IDEA смог зафиксировать брейкпоинт, нужно чтобы он этот файл скомпилил. Но в моем случае это не возможно, так как долбаная cms компилит все skala файлы сама и собирает их в один jar файл, который потом и юзает. Сам я никак собрать этот файл не могу, так как в него собирается овер дофига skala файлов разбросанных по всему проекту.
Сейчас поймал себя на мысли что за 3 года работы со скалой пользовался дебаггером раз 10 наверное, в основном когда с рефлексией что-то делал. Прочитай код, пойми его и поменяй. Зачем сразу в дебаггер лезть? Работаем методом тыка?
> долбаная cms
Ну запусти её из под IDE в дебагере. Или сделай хуйню вроде https://stackoverflow.com/questions/21114066/attach-intellij-idea-debugger-to-a-running-java-process
На ведре позитивно, но пока 2.5 конторы юзают его для продакшена, на бэкенде нахуй никому не уперлось.
Хороший кетчуп, мясо им поливаю, вкусно.
1 контора
Сначала котлин заинтересовал, есть несколько вещей, которые выглядят приятнее чем в скале, но когда попробовал - разочаровался. Имхо, основной недостаток - это отсутствие паттерн-матчинга, а из этого уже вытекают хуита вместо опшнов, бесполезные дата-классы и костыльная "деструктуризация" и т.д.
Ну и плюс недоделанные коллекции, местами ебнутый синтаксис (делегация через by не читается вообще, а костыль с ее использованием для ленивости - всем костылям костыль), слишком много новых ключевых слов для простых вещей.
Единственное применение, которое я вижу котлину сейчас - это андроид, пока его не перевели на OpenJDK (то есть через пару лет и в этой нише котлин будет не нужен).
На сервер-сайде же уже полным ходом юзают восьмую джаву, при том многие индусы и ее лямбды восприняли в штыки как что-то слишком сложное, так что котлину с его "типа лучшая джава"-ориентацией ничего не светит. Те же, кого джава реально не устраивает, уже перешли на скалу и смотрят на котлин с недоумением.
> пока его не перевели на OpenJDK
Ты правда думаешь что Java 8,9,... будет лучше котлина?
Уже давно кто хотел перешли на retrolambda и все равно это жалкая тень котлина.
Тем более 99% девайсов не обновятся до нового андроида, а их нужно поддерживать.
> Ты правда думаешь что Java 8,9,... будет лучше котлина?
Не лучше, но для большинства - достаточно.
> Тем более 99% девайсов не обновятся до нового андроида, а их нужно поддерживать.
Ну да, не обновятся. Просто отомрут за пару лет так же, как умерли девайсы на 2.х, в которых у Стринга были не все методы. Гугл может даже просто добавить поддержку java8 в компиляторе, не меняя формат байт-кода, и добавить compatibility library с новыми классами, как когда-то сделал с фрагментами, тогда счастье восьмерки снизойдет даже на Jelly Bean.
> Ты правда думаешь что Java 8,9,... будет лучше Scala?
Не лучше, но для большинства - достаточно.
/тред
Нет. Ниша тех, кому недостаточно, как раз занята скалой. А вот котлин опоздал.
Двачую этого. Индусы и в жяве лябды в штыки восприняли - ведь СЛОЖНА. Ни о какой пересекающейся области речи идти и не может.
Тричую, нафиг нам совместимость с жабой, еще зашкваримся об нее.
Лучше все проекты/библиотеки с нуля перепишем.
Как ты мог заметить, петух, совместимость де-факто только в одну сторону, чтобы можно было безболезненно забрать библиотеки с джявы и выкинуть её нахуй.
Откуда вообще взялся пиздёж про то что программирование связано с математикой?
И чем оно сложнее?
То есть мне понятно где можно использовать Джаву (тырпрайз, андроид, бекенд), пхп, руби, питон. А вот скалу где?
Суть вопроса такова. Если примеров для использования slick в play хоть завались и ничего сложного в этом в принципе нет, то что касается SLICK EXTENSIONS, в частности com.typesafe.slick.driver.oracle.OracleDriver то здесь начинаются проблемы. Может кто-то поделиться годным мануалом по эксплуатации или хотя бы указать направление в котором копать.
Заранее спасибо.
Ну наверно надо вписать что-то вроде
import slick.driver.OracleDriver.api._
А дальше писать ту же хуйню что и для других баз
Боюсь, что нет. Как минимум TableQuery не получится проинициализировать. И описание таблицы не сделаешь, т.к. нет типичныхметодов, как для открытых драйверов бд.
На данный момент закостылил объектом с java методами и необходимой обёрткой, но всё же хотелось бы иметь гомогенную механику работы с бд.
Их вроде делают опенсорсом, наверно тогда же будет и документация http://slick.typesafe.com/news/2016/02/01/slick-extensions-licensing-change.html
После прочтения этого http://blog.higher-order.com/assets/scalaio.pdf и этого https://apocalisp.wordpress.com/2011/12/19/towards-an-effect-system-in-scala-part-2-io-monad/ вроде сложил в голове определённую картинку. Но всё равно не покидает стойкое ощущение того, что за всеми красивыми словами типа "Separation of I/O code from logic" и "Algebraic reasoning" на деле не стоит нихуя и мне просто предлагают бесплатно попердолиться с обмазыванием всего Real World кода в IO.
Ну и опять же, на реализации в виде
class IO[A](run: () => A)
ещё все понятно, типа все потенциально грязные действия делать отложенными и запаковывать в IO контейнер, пробрасывая их наверх. В идеале main - единственное место где будет выполнено unsafePerformIO, где все эти экшоны и будут запущенны. Ну это в теории. А на практике непонятно как скалац разрулит все эти отложенные экшоны по требованию и вообще непонятно нахуй это всё надо.
Ещё более я охуел, когда увидел реализацию типа
class IO[A] (run: RealWorld => (A, RealWorld))
это что они предлагают RealWorld везде таскать с собой, как с линейными/афиными типами? ЭТож тупо неудобно нахуй.
А потом же они чуть дальше пишут, что мол так то оно всё хуйня и бенефтов нет, но вот если заюзать свободные манадки и дальше ещё более запутанный пиздец.
В общем, есть тут те кто активно юзают IO монаду в скале чтоб пояснить мне долбоёбу с вертушки в щи как это всё говно по уму делается и так ли вообще эта IO монада нужна?
Мартин старался
Нет смысла использовать IO в скале. Основная причина в том что тебе придётся весь библиотечный код (что на джаве написанный, что на скале) обмазывать обертками, чтобы понимать где возращается T, а где IO[T]. По той же причине scalaz Task мало где используется, но там хотя бы можно написать преобразования из Task во Future и наоборот.
Еще одна причина в том что если у тебя много действий в IO у тебя из-за вложенных flatMap'ов переполнится стекэто может случиться и с любой другой монадой, но в IO/ST проблема более вероятна. Разруливается trampolining'ом, но это очевидно не эффективно.
Третья причина - чистый IO это не scala-way. Не нужно делать из скалы хаскель или джаву или еще какой язык. Хочешь побыть пуристом - просто используй Хаскель, там вся инфраструктура под это заточена.
>>686114
Скала на порядок проще C++ как по стандарту, так и по использованию, а использование библиотек проще чем кажется.
От кейворда вся польза в том, что аргументы для распределений называются lambd вместо lambda. Когда нужна функция с замыканием, все равно приходится писать def.
Собственно паста:
http://pastebin.com/gK6YpvSd
Откуда вкатываешься? Где это еще до сих пор не знают об автоформаттере?
{
case s => Future(s)
case _ => Future("Error")
} - это лол. Эррора не будет никогда, ведь на s заматчится что угодно. flatMap и map здесь лучше заменяить на for comprehension, станет сразу понятнее что здесь происходит.
Переменные f, q, s, i = очень, блядь, информативные имена.
class smsApi - хули имя класса с маленькой?
Почему getState растянул на три строки? def getState(arg: String) = ""
Вместо try { ... } catch { вернуть волшебную константу } лучше использовать Try и матчить Success/Failure.
if (map.contains(value)) { doSomething(map(value))} else {...} - тоже не scala way. Лучше map.get(value).map(blabla).getOrElse(...)
Гугли цикл статей "Neophytes guide to scala", там описывается как избежать ровно таких костылей, как у тебя.
Вкатываюсь из скриптоты. Опыта чуть больше двух недель. Курс нагуглил. Полуркаю. Спасибо.
Я бы написал нечто вроде такого (пример не скомпилится): http://pastebin.com/K1nw23KG.
Что не так:
- ты используешь DI, но руками соаздешь инстанс smsApi (нужно инжектать через конструктор контроллера)
- имя класса с маленькой буквы smsApi (вспомни/почитай жаба код конвеншн)
- фабрика не нужна, т.к. список экшнов можно описать через роуты и замапить на соответствующие методы контроллера
- парсинг json-a в модель делается через BodyParsers: https://www.playframework.com/documentation/2.5.x/ScalaBodyParsers. Примерно так:
def modelParser[M](implicit r: Reads[M]) =
parse.using[M] { implicit request =>
val errorParser = parse.error[M](Future.successful(BadRequest("")))
request.contentType.map(_.toLowerCase) match {
case Some("text/json") | Some("application/json") =>
jsonParser[M]
case _ =>
logger.warn(s"Couldn't parse request. Invalid content type. " +
s"Request: $request. Headers: ${request.headers}")
errorParser
}
}
- бесполезный кусок кода, который ничего не делает:
val q = f.flatMap {
case s => Future(s)
case _ => Future("Error")
}
- invalidReq. Вместо этой функции нужно заимплементить кастомный ErrorHandler: https://www.playframework.com/documentation/2.5.x/ScalaErrorHandling
Я бы написал нечто вроде такого (пример не скомпилится): http://pastebin.com/K1nw23KG.
Что не так:
- ты используешь DI, но руками соаздешь инстанс smsApi (нужно инжектать через конструктор контроллера)
- имя класса с маленькой буквы smsApi (вспомни/почитай жаба код конвеншн)
- фабрика не нужна, т.к. список экшнов можно описать через роуты и замапить на соответствующие методы контроллера
- парсинг json-a в модель делается через BodyParsers: https://www.playframework.com/documentation/2.5.x/ScalaBodyParsers. Примерно так:
def modelParser[M](implicit r: Reads[M]) =
parse.using[M] { implicit request =>
val errorParser = parse.error[M](Future.successful(BadRequest("")))
request.contentType.map(_.toLowerCase) match {
case Some("text/json") | Some("application/json") =>
jsonParser[M]
case _ =>
logger.warn(s"Couldn't parse request. Invalid content type. " +
s"Request: $request. Headers: ${request.headers}")
errorParser
}
}
- бесполезный кусок кода, который ничего не делает:
val q = f.flatMap {
case s => Future(s)
case _ => Future("Error")
}
- invalidReq. Вместо этой функции нужно заимплементить кастомный ErrorHandler: https://www.playframework.com/documentation/2.5.x/ScalaErrorHandling
Блядь, распидорасило код и ссылки. Надеюсь, суть уловишь:
http://pastebin.com/K1nw23KG
https://www.playframework.com/documentation/2.5.x/ScalaBodyParsers
Спасибо, и это пораскуриваю.
>- фабрика не нужна, т.к. список экшнов можно описать через роуты и замапить на соответствующие методы контроллера
Ещё вот такой вопрос. Если я предполагаю что действий будет достаточно много, а условие таково, что они завёрнуты в json как лучше поступить? Просто я предполагаю, что если у меня роуты представлены точкой входа для api в контроллере, то не придётся писать портянку разных роутов на все случаи жизни. Я не утверждаю, что так верно, просто интересно.
Тебе все равно где-то придется мапить строковое название экшна на некоторый метод. Либо через роуты, либо фабрикой как у тебя. Я бы предпочел это делать через роуты и убрал название экшна из json-а.
Если у твоего приложения единая точка входа, и туда шлются все запросы и нет возможности на это повлиять, то можно изъебнуться с Play Http фильтрами и редиректить запрос на нужный роут. Можно поставить какой-нибудь прокси сервер, который будет парсить json и, в зависимости от экшна, слать запросы на нужные роуты.
Фактически я переписываю на scala приложение, которое писалось ранее. Идея была в том, что существует несколько приложений, которые общаются друг с другом и с клиентом по унифицированному RFC JSON, как средство доставки используется HTTP и WS(там где нужна дуплексная связь). Они висят в разных контроллерах как независимые приложения. На каждый контроллер свои маршруты: маршруты которые генерируют на выходе html для авторизованного и не авторизованного пользователя и маршруты которые используются для RFC JSON собственно, так же, для авторизованного и не авторизованного пользователя. В целом такой подход вроде бы больше всего похож на микросервисы. Возможно этим объяснится такой странный подход.
Понятно. Я почему-то подумал, что ты в качестве обучения разрабатываешь какое-то новое приложение и нет жестких ограничений по протоколам. В твоем случае можно и фабрику оставить или использовать один из перечисленных выше приемов (или придумать что-то новое).
В принципе можно сказать, что и для обучения. Т.к. до тех пор, пока я не буду уверенно себя чувствовать в scala и вообще понимать что происходит, ни о каком переезде на прод речь безусловно не идёт. То, на чём я писал себя исчерпало, да и возможность сейчас есть переползать сюда. Ещё раз спасибо за ответы.
https://scala.epfl.ch/
На курсах Одерского
Одерский вот здесь рассказывает когда какой подход применять: https://www.youtube.com/watch?v=kkTFx3-duc8
Есть классные статьи именно об идиоматичном использовании скалы "Neophtyte's guide to scala".
Вот статья вроде выглядит полезной, но я ее пока не читал: http://www.lihaoyi.com/post/StrategicScalaStylePrincipleofLeastPower.html
Проиграл. Внимание, серьезный вопрос - shapeless - это такой местный троллинг нубов? он ведь вроде как если не предан анафеме анонами из числа создателей компилятора, то, как минимум, сильно нерекомендован
С чего бы им предавать его анафеме? shapeless - просто пример впихания в скалу не совсем впихуемого. HList - просто типобезопасный список произвольной длины. Скала такое не умеет искаробки, вот и изъёбывался профессор джва года, целое паблисити себе сделал на такой-то хуите. Ну и наговнокодил в процессе ояебу.
Типобезопасный гетерогенный список произвольной длины.
Нет, не анафеме, просто весьма авторитетные деятели часто пишут - сто раз подумайте, прежде чем начать использовать эту ъуйту.
Типобезопасный гетерогенный список произвольной фиксированной длины.
>>689281
>профессор
Кто это? Разве Miles Sabin профессор?
>>689290
Слишком мощная штука, см. >>688813
>http://www.lihaoyi.com/post/StrategicScalaStylePrincipleofLeastPower.html
Почему бы не сделать C++ по затратам времени на компиляцию из жвм язычка.
Стоит ли вообще скачивать и запускать это поделие (перекатился с эклипса на идею около 3-х лет назад) ?
Попробуй и узнаешь
работает кое-как на самом деле но идею не щупал
Я и использую. Просто подумал, раз Scala IDE официально поддерживалась тайпсейфом, то они могли сделать неплохую бесплатную IDE.
А по поводу IDEA - JetBrains охуел. Не успел приобрести подписку на 15 версию и попользоваться 3 месяца, как выпускается 2016 версия и будьте добры приобрести новую подписку.
> Не успел приобрести подписку на 15 версию и попользоваться 3 месяца, как выпускается 2016 версия и будьте добры приобрести новую подписку.
Всё правильно сделали, тупого гойского лоха грех не наебать.
Для вас уже весь джетбрейнс покрякали вплоть до крякнутого локального сервера, а вы все ноете
Ташемта подписка от 15 работает на 16. Через год только, если зажать 50 баксов, придётся крякнуть откатиться на 15.
Кстати, а стоит ли обновляться если я использую 0.идея.ланьюс.ком? Эту хуйню не пофиксили?
Вся суть местных – ломать бесплатный продукт за тим-фичи которыми всё равно не будешь пользоваться.
И да – идея по сравнению с эклипсом сосёт как по возможностям работы с кодом, скорости работы и багам в indelij-евском скалаплагине, как эклипс сосёт по ущербности своего гуя.
>тим-фичи
Типа database плагина, да
>багам в indelij-евском скалаплагине
Тут его автор пробегал, говорит, скала говно, он бы лучше котлин пилил. Но, видимо, не дали, поэтому ненавидит свою работу и старается нассать клиентам в суп как может.
> Вся суть местных – ломать бесплатный продукт за тим-фичи которыми всё равно не будешь пользоваться.
Жалкие самоутешения пользующегося огрызком.
Они же из питерских, этим все отдают деньги.
[code lang="scala"]
object Demo {
def map[A, B](xs: List[A], f: A => B): List =
for (x <- xs) yield f(x)
def flatMap[A, B](xs: List[A], f: A => List): List =
for (x <- xs; y <- f(x)) yield y
def filter[A](xs: List[A], p: A => Boolean): List[A] =
for (x <- xs if p(x)) yield x
}
[/code]
почему flatMap возращает список, а не список списков?
Ну наверно потому что в этом суть префикса flat?
Упоролся? В книжке приведен эквивалентный код для map flatMap filter, чтоб нубам не было нипонятно шо це за магия такая.
>Тут его автор пробегал
>JetBrains
>сосач
Ага, а военачеры уверены, что к ним забегает Рогозин и иногда Димон. ебаные накроманы-аутисты
Так над ним рандомный макак работает, ебанашка.
А здеся и следы разных знаменитостей бывали, ничего удивительного в этом нету.
> рандомный макак
> макак
Ага, макак писал парсер языка, хитровыебанней крестов по синтаксису и семантике, макак писал плагин, который разбирает цепочки map filter fold и прочего, и адекватно предлагает упрощенные варианты выражений. И вообще статический анализ в нем очень нехуевый. Макак. Не думаю, что даже единицы из зекача так живут.
Ты так говоришь, будто осиливший Ахо уже никогда не зайдёт на зекач даже просто чтоб кого-нибудь обоссать и самовыразиться. и да, хуле там синтаксис, парсер и AST уже есть в родном конпеляторе
Типа, нуб лучше понимает for comprehension, чем map flatMap filter? Да ну нахуй.
for comprehension можно объяснить на пальцах, и далее, используя этот концепт, показывать более сложные сущности.
Немец же, ебан
Однострочные лямбды на пидоне, молодец, умница, а теперь иди нахуй.
Нет, выбрал в списке вариантов просто scala(там было и сбт), странно что доки вроде как прикреплены к скала сдк(если отредактировать зависимость scala sdk в идее), а идея все равно хуй показывает инлайн документацию.
Сейчас создал sbt проджект, нихуя ваша симпл тул засрала папку с проектом. Но сейчас доки показывает и вообще походу тула весь scala sdk еще выкачала, похуй что у меня уже установлено.
Есть идеи че б написать что б на практике навыки применить:
Там знак вопроса конце потерялся.
Кластер метапарадигм
Знаю только питон и джаваскрипт.
Были бы за плечами лиспохаскелеокамлы, или хотя бы мозгоплавящее говно вроде плюсов - освоил бы. А так за выходные ты разве что статическую типизацию потыкаешь.
Синтаксис освоишь, учи, пробуй.
test(thing: Openable)
Openable - трейт.
Есть классы Book и Door реализующие этот трейт.
Как в методе проверить, не Book ли thing.
Вкатываюсь с шарпа, заметил отсутствие опретатора is.
Паттернматчингом
Если тупо в одном ифе проверить, то thing.isInstanceOf[Book]
Для более общих вещей таки паттерн-матчинг предпочтительнее.
http://pastebin.ru/PbjfoN51
Подскажи более грамотное решение анон.
Спасибо анон, в самую суть.
И хуле такого? У меня несколько одногруппников работают в джетбрейнс, один из них котлин делает. Основной пропихиватель котлина, Андрей Бреслав, был учителем в моей школе. Мир тесен. Вполне могут двачевать.
Далеко не все знают про двачи, а тем более, заходят. Ждать, что твой школьный учитель заходит в /зк/ - что ждать Димона в /вм/-е
Спасибо, Анон, теперь я знаю, что в сторону Котлина можно не смотреть.
>несколько одногруппников работают в джетбрейнс, один из них котлин делает
>Основной пропихиватель котлина, Андрей Бреслав, был учителем в моей школе
Один из этих пидоров форсит своё поделие на весь зекач. Передай обоим, что они заебали.
Нет, это я >>711286
И я вроде бы много раз говорил что работаю Android разработчиком, а JB не занимаются мобилками.
>e.xhr.response
Вот здесь scalajs.dom.raw.js.Any
>@ScalaJSDefined
>trait Any extends scala.AnyRef
Его я и пытаюсь как-то деструктуризировать.
Можно, но ко мне уже приходит десериализованное значение внутри AjaxException (типа js.Any)
Ну боя, там же в документации написано, что это может быть String, ArrayBuffer или Blob, в зависимости от того что указано в responseType.
Очевидно у тебя String и тебе нужна библиотека uPickle от китайца, чтобы собрать из жсона кейс класс.
Да, лоханулся, там обычная строка, думал какая-то магия json уже распарсила за меня.
>Нужна библиотека uPickle от китайца
Именно ей пользуюсь.
Всем спасибо.
Нет (хотя хуесосыч из последнего выпуска девзена который работает с Одерски говорит что такой сайд проект есть и им занимается какой-то хохлюн).
Потому это и сайд проект, который делает левый челик, а не сам Одерски с командой. По тому что помню из подкаста - говорилось что просто будет классно иметь такую возможность и где нибудь юзать скалу на десктопе, не больше.
Скорее вопрос надо ставить "Можно ли компилировать байткод в натив?".
Называется это Ahead of Time компиляция, на картинке актуальные проекты.
Компилировал в RoboVM код на Java/Kotlin в нативные консольные приложения OS X.
Блядь, что? RoboVM может компилить в десктоп? Я думал только iOS/Android. А под винду может?
Gcj вроде закрыли.
На сколько я знаю только в iOS и Mac OS X консольные приложения (может и в Swing можно, но я не пробовал).
Там прям в RoboVM Studio есть такой шаблон, видимо для тестирования сделали.
Кстати в Java 9 обещали сделать "Java Native".
Так что через пару десятков лет, это будет "из коробки".
Почему бест JVM, почему не Kotlin и почему не сама Java
>почему не сама Java
Неудобный огрызок, расчитанный на тупых макак, не умеющих в языки посложнее. Чистая жава - это как пхп.
>почему не Kotlin
Новомодная хипстерская игрушка без задач, о которой не вспомнят через пару лет.
Как и скала собственно.
Суровый климат викингов?
Фанфик на тему хаселла - вот что есть скала.
Скала полноценно заменяет джяву даже и без функциональщины, а вот хачкиль няшную как-то неоче.
Нет, спасибо - я лучше котлин выберу и подожду пока хачкиль подтянется.
Нидерланды это гейропа, а не ламповый остров в жопе мира.
Все, что робит унутре жвм-песочницы - безусловно. Но жабка еще может лезть наружу через FFI/JNI. И еще эммитить байткод в рантайме. Все совсем не однозначно.
Ну так сначала стоит сделать для "песочного" кода, а потом думать о костылях для остальной хуйни.
Scala is famous in part for having one of the richest type systems of all mainstream programming languages today. Despite its reputation, Scala’s type system remains one of the most under-documented and jargon-heavy aspects of Scala.
This talk will turn the academese into English, providing an example-rich tour of Scala’s type system, covering all the things that make people call it “powerful”. This talk isn’t about showcasing a bunch of challenging little logical puzzles with types; on the contrary, this talk is about showing practical uses of Scala’s type system, making it work for you and your users. We’ll see how we can use it to improve usability by reducing boilerplate, meanwhile keeping code type-safe. We’ll touch on the practical parts of Scala’s type system, all through examples.
Получится. Поэтому вместо функции которая принимает наследника, можно использовать функцию которая принимает предка, но не наоборот: вызывающий код сможет дать всю необходимую инфу, вся она есть у наследника, который в свою очереь есть у вызывающей стороны. Это и есть контрвариантность.
Спасибо анон, теперь дошло
Ты про себя что ли?
Функторы и монады вызывают неприятные ощущения пониже спины. Вначале. Потом приятные.
Но ведь это в другом треде любят заинжектить монаду в функтор.
Ведь кто программирует на скале?
Вариант 1: В аутсорс парашу уровня люксофта стали чаще заходить запросы на проект на скале и менеджеришки смекнули натаскать пару своих индусов на это дело, чтоб не упускать заказы. Берут самую опытную явамакаку, говорят "Раджешь, пришло твоё время". Тот садиться и за две недели проходит интенсивный курс по книге "скала для жабадебилов" хорстмана. И начинает писать. Пишет он на скале как на яве с синтакс сахаром. Нахуй это всё надо, когда есть такой-то говноподсластитеть как котлин, нипанятна, но в целом все довольны.
Вариант 2: Хаскелист в надежде всё же найти работу с дрожащими от нервов губами изучает скалу. Устраивается он или нет в конечном итоге не важно. Важно что его это всё не устраивает, ведь он же познавший высшие истины пурист алгебраист, а тут какое-то императивное сайдэффектное непотребство. И начинает он натаскивать в проекты всякие скалазы, писать свои едсли делая из скелы новый хаскель. Выходит всё конечно уёбищно, с кучей синтаксического шума, никому кто не в теме не понятно, но заато теперь как в цацкиле.
Вариант 3: Чел решил что он понял что имел в виду Одерски, посмотрев курсеру и прочитав книжечку от сэнсея. Уверовал, что ему дано стать мастером парадигмального дуализма. Вот только вышло наоборот и в результате он стал смешивать худшие стороны вместо лучших.
Смогут ли эти трое работать в одной команде, поддерживать друг за другом код не разбив друг другу ёбычи? Маловероятно. Понимаете о чём я говорю? Это пиздец. Чтобы программировать на этом говне так как надо, нужно быть избранным, брать лучшее в разных местах и объединять в одном. Ну нахуй. Желание доказать, что можно смешать разные парадигмы в одной, получив удобный инструмент, а не громоздкое говно - это то ради чего всё это создавалось. И нихуя не вышло.
Ведь кто программирует на скале?
Вариант 1: В аутсорс парашу уровня люксофта стали чаще заходить запросы на проект на скале и менеджеришки смекнули натаскать пару своих индусов на это дело, чтоб не упускать заказы. Берут самую опытную явамакаку, говорят "Раджешь, пришло твоё время". Тот садиться и за две недели проходит интенсивный курс по книге "скала для жабадебилов" хорстмана. И начинает писать. Пишет он на скале как на яве с синтакс сахаром. Нахуй это всё надо, когда есть такой-то говноподсластитеть как котлин, нипанятна, но в целом все довольны.
Вариант 2: Хаскелист в надежде всё же найти работу с дрожащими от нервов губами изучает скалу. Устраивается он или нет в конечном итоге не важно. Важно что его это всё не устраивает, ведь он же познавший высшие истины пурист алгебраист, а тут какое-то императивное сайдэффектное непотребство. И начинает он натаскивать в проекты всякие скалазы, писать свои едсли делая из скелы новый хаскель. Выходит всё конечно уёбищно, с кучей синтаксического шума, никому кто не в теме не понятно, но заато теперь как в цацкиле.
Вариант 3: Чел решил что он понял что имел в виду Одерски, посмотрев курсеру и прочитав книжечку от сэнсея. Уверовал, что ему дано стать мастером парадигмального дуализма. Вот только вышло наоборот и в результате он стал смешивать худшие стороны вместо лучших.
Смогут ли эти трое работать в одной команде, поддерживать друг за другом код не разбив друг другу ёбычи? Маловероятно. Понимаете о чём я говорю? Это пиздец. Чтобы программировать на этом говне так как надо, нужно быть избранным, брать лучшее в разных местах и объединять в одном. Ну нахуй. Желание доказать, что можно смешать разные парадигмы в одной, получив удобный инструмент, а не громоздкое говно - это то ради чего всё это создавалось. И нихуя не вышло.
Так-то да, во многом прав. Только
>вышло наоборот и в результате он стал смешивать худшие стороны вместо лучших.
>И нихуя не вышло
слишком пессимистичный взгляд. Если немного включать голову, все получится.
>Чтобы программировать на этом говне так как надо, нужно быть избранным, брать лучшее в разных местах и объединять в одном.
Нужно чтобы в команде было 1-2 таких и чтобы они пиздили тех кто отходит от курса партии.
>Вариант 1
Узнал себя, с другой стороны нахуя котлин, если есть скала. Сомневаюсь что там все сильно пизже чем в скалке.
Чтоб стать избранным надо просто обмазаться хаскелем, на котором не сможешь писать как на уютной сишке\яве и научиться прогать чисто в функциональным стиле. Ну, а если пришел с качкеля, то "спуститься" на уровень индусов, облепиться императивом с сайд эффектами и спагетти, нырнуть в мир состояний, деадлоков и гонок.
В обоих случаях на выходе должен получиться тот самый избранный, который сможет в дуализм. Другое дело что типичный программист, который пошел в отрасль потому что платят на 50 зеленых больше чем санитарке в поликлинике, не захочет.
При этом вариант 1 - самый рабочий. Если взгнуть на код Kafka или Spark, то там именно что better java.
В спарках таки код оптимизируют по максимуму, там это важнее чем красивость и функциональность.
>самый лучший
>для JVM
Вообще-то самый лучший язык для JVM это Clojure. В вот тут любой адекватный анон скажет: "Да как же так, Clojure - это лиспоговно, лиспоговно в принципе не может быть хорошим!" И он будет прав, да, лиспоговно не может быть хорошим. Но ведь "самый лучший язык для JVM" не означает "самый лучший язык". И даже не означает "хороший язык". Для JVM в принципе нет хороших языков, это просто выбор между сортами говна. И ирония заключается в том, что среди этих сортов говна говнолисп, внезапно, оказался лучше говноскалы.
Я не призываю программировать на скобочном говне и не оправдываю его и не пытаюсь доказать, что оно достойно изучения. Просто в говноедском мирке JVM такая забавная фигня приключилась.
Если при тебе кто-то скажет, что бас-гитары "Урал" - это говно, которое подходит только для того, чтобы отбиваться от зомби в случае зомби-апокалипсиса, ты ответишь, что его изнасиловали разработчики бас-гитары "Урал"?
С чего ты взял, что JVM, мне не угодила? Я просто рассказал, как забавно там дело обстоит с языками.
затирает типы, фризит программу, отжирает дохуя памяти, всё валяется в одном хипе, не умеет в автоматическое распараллеливание чистого кода, уёбищный менеджмент памяти вообще, у тредов и объектов разное время жизни, вообще нихуя не сделано на уровне вмки для поддержки распределёнки/конкурентности, нет REPL'а и хот код реалоада из коробки, вообще какой-то неадекватный abstraction penalty, короче вмка для всего сразу и нихуя толком
понятно, что эти проблемы частично решаются на прикладном уровне написанием всяких костылей сериализаторов/десериализаторов, ринг-буферов деструпторов, фреймворков типа аки и прочим, но все равно обычно выходит говно
>не умеет в автоматическое распараллеливание чистого кода
И тут внезапно неуловимо запахло борщом.
>не умеет в автоматическое распараллеливание чистого кода
А кто умеет? Где можно на это посмотреть?
Да каким борщем блять. Просто модель памяти в жам построена таким образом, что ни о каких распараллеливания на уровне вмки речи быть не может. Потому что в флагманском языке даже не задумывалась семантика для определения куска данных как иммутабельного или каких-то там чистых функций.
Ну то есть какой нибудь компайлер скалы по идее может сгенерить явно параллельный код, так как в скалке то эта сематика есть, но всё это не так у просто, возможны множество багов и проёбов по скорости, т.к. не понятно как оно ляжет на вмку, особенно если в одной приле крутятся куски и явы и скалы.
Ну если он будет специально искать гитаристов использующих "Урал", чтобы прийти к ним на сходку, и долго рассказывать что они говноеды а "Урал" говно, то да.
>Скала тред
>Фанаты JVM, слепленной чтобы на ней крутить Кобол нашего времени
мда, дожили
Сдается мне вы беседу с философским зомби ведете.
Основные плюсовые компиляторы (clang, gcc, intelcpp) хотя и достаточно криво, код получается не переносимый между ними и писать всё равно код нужно как мультипоточный, что-то слышал про хацкел.
Слышал он. Слышал звон, да не знает где он.
Не мог бы уважаемый специалист указать поточнее - где можно посмотреть
> автоматическое распараллеливание чистого кода
с помощью
> плюсовые компиляторы (clang, gcc, intelcpp)
чего jvm
>не умеет в
?
>с помощью
Пишешь код без сайдэффектов, и смотришь как можно врубить автовекторизацию на твоём компиляторе в гугле.
>чего jvm
Не, вась, ты ебанутый или что? Жвм как не умела в фичи которые "просто работают" так и не умеет.
> >с помощью
> Пишешь код без сайдэффектов, и смотришь как можно врубить автовекторизацию на твоём компиляторе в гугле.
Ссылочку на пример пожалуйста
http://llvm.org/docs/Vectorizers.html
https://software.intel.com/ru-ru/articles/automatic-parallelization-with-intel-compilers
https://gcc.gnu.org/wiki/AutoParInGCC
Сам ковыряйся и ищи примеры, ахуевший блять.
В примерах куча тулз для си и фортрана.
Лично читал код jvm изучая какие конвеерные интринсики используются. Java умеет в оперативную трансляцию с использованием SIMD инструкций. Например http://bugs.java.com/view_bug.do?bug_id=6340864
Это если говорить про
> автоматическое распараллеливание
в таком контексте.
Возможности конечно не те что у GAP и вообще у нативных платформ - но это уже и не про автоматическое распараллеливание.
Eбанутый здесь ты маня. Охлади свой пыл, быдлан.
Почему? Вполне себе распараллеливание - на уровне обработки cpu.
Просто та маня чистоту кода приплела к чему - то и это могло ввести в заблуждение.
>Но ведь это не распараллеливание.
>Automatic parallelization distributes sequential code into multi-threaded code. It automatically generates parallel (multi-threaded) code for specific loop constructs using the gomp library.
>В дополнение к оптимизации кода высокого уровня, компиляторы Intel® позволяют проводить автоматическую параллелизацию с поддержкой OpenMP. При автоматической параллелизации компилятор находит циклы, которые могут безопасно и эффективно выполняться параллельно, и генерирует многопоточный код. OpenMP позволяет программистам выражать параллелизм с помощью директив компилятора и прагм С/С++.
> Java умеет в оперативную трансляцию с использованием SIMD инструкций.
>Eбанутый здесь ты маня. Охлади свой пыл, быдлан.
> specific loop constructs
> Many loops cannot be vectorized including loops with complicated control flow, unvectorizable types, and unvectorizable calls
Подставляй ротешник.
Покумекал тебе за щёку.
Отчего-то я не удивлён гибгостью манямирка жяважывотного, который приплёл к автораспаралеливанию SIMD и начал кукарекать что его жэвээм умеет в это особенно учитывая что компилятор его языка настолько убогий, что любой синтасический сахар убивает нахуй перформанс. А потом пытается аккуратно слиться. переведя стрелки, но ты обосрался вась. Будь добр аргументировать, либо не толстей.
А ты чего ожидал? Что он вообще всё за тебя напишет? Может у тебя ещё статические анализаторы кода любые ошибки в алгоритмах ловят?
Распараллеливание кода это например когда произвольный код размазан на %колво_ядер_цп% потоков, аля параллельные коллекции, акка, и т.п., а здесь всего лишь пачки чисел обрабатываются особым образом (оптимизация байтоебства), про код и параллельность и речи не идёт.
Поциент, никто в здоровом уме не пишет видеокодеки медиапроцессоры и тп на java.
Ровно как у жабы есть своя ниша. Для оптимизации работы в которой, вендор реализует векторизацию, там где выигрыш может быть значителен (например работа со строками).
Конечн, особо охочие товарищи могут на прикладном уровне использовать библиотеки векторизации - в том числе расчеты на gpu. Но это исключительное битоебство.
Тебе указали на твою некомпетентность - ты продолжаешь лезть в конкретику - упоминая то, чего в жабе нет и не должно быть.
Если ты это не способен понять - печально.
Я за того анончика. Или ты или другой анонас что - то мычал про чистый код - что дать впечатление о разговоре про параллельность за счет вычисления в отдельных потоках.
В процессе выпытывания сокровенных технологий автоматической параллелизации - выяснилось что речь о конвееризации.
За тем поциенту пояснили за то, что где её целесообразно просунуть - там она используется (в jvm).
>с что - то м
Сука, перестань ставить пробелы между тире для окончаний, у меня глаз заболел.
>За тем поциенту пояснили за то, что где её целесообразно просунуть - там она используется (в jvm).
Пояснили за акку и прочую еботу, автоматического разбора на потоки в "ванильной" жвм я что-то не нашёл.
Сука, беседа утонула в 10 непонятных анонах, путающих друг друга с другими анонами. Ладно, идите нахуй, тут не реально ссать прямиком кому-то на ебало, я закругляюсь.
Читать научись, дурень, и следить за нитью беседы.
Потом возвращайся за серебряной пулей автоматической параллелизации.
В вебе есть Play Framework например. На нем даже иногда фриланс какой-то можно найти. У него есть апи и под джаву, и под скалу.
С коре Ява хорстмана.
Затем его же скала для нетерпеливых.
Без кореявы в скале печально будет
Что за тупость если я хочу плюсы учить ты меня отправишь С учить? а если кложу тоже Джаву? или тебе Оракле проплотила чтоб их говно продвигать ?!?
Да ну? а может еще скажешь где она а то как то я не додумался да этого, а может еще скажешь как поставить скалу?
А если серьезно, читаю "Scala for the Impatient" если кто то знает что то еще годное кидайте
Дык он-то прав. Если ты нюфаг – лучше не смотри в сторону скалы, а иначе синтаксис особой роли не играет – самое главное это экосистема и тулкит, который весь явный.
Ну я же не без знаний вкатился, пишу на другиз ЯП, на говна джаве не хочу писать (бывала дело писал на этой шняги, но знать не знаю) из за этого выбрал Скалу (мог кложу выучить или груви)
Всё зависит от задач: планируешь писать хуйлоад/искать работу на скале – всё равно нужно дрочить именно явовские контейнеры и прочее г-но, учишь "для души" – можешь вообще на императивщинуб хуй класть.
Ну вот и соснешь, когда дойдешь до контейнеров.
>писать хуйлоад/искать работу на скале – всё равно нужно дрочить именно явовские контейнеры
Для хайлоада придется пидорасить байтики офф-хип, как байтослесари.
>на говна джаве не хочу писать
И не нужно. Учить нужно JVM, библиотеки и тулы для неё, а не джаву, грубо говоря. Лучший способ изучать - написать маленький проект, тесты, метрики для него, побенчмаркать что-то.
скалаёб-перекатился-из-сишарпа
Неа, она спит, я точно знаю.
Борду.
Лучше уж сначала поковырять на локалхосте
в это кстати уже играл, хотя сам Спар не поднимал но вот Hadoop собирал, и потом ставил разные сборки
Тинькофф, Qiwi делает потуги
Вернись в яву.
Скала говно без будущего.
В 9 явке закроют рефлексую и ансэйф и скалопидоры соснут
Зачем искать если уже есть котлин? В гугле просто батруд от того что они не смоги придумать котлин.
Котлин никому кроме авторов не нужен, не говоря уже о крупных компаниях.
Вам сплетню какую-то скинули, а вы и взбудоражились кококок замену кококок.
Еще неизвестно замена будет или дополнение, а может это вообще к NDK дополнение / замена. Если вообще что - то будет.
Пока харчанин кукарекает о болоте, инженеры оракл в Штатах и России пилят value types и прочие нештяки.
Видосики Одерского на курсере посмотри.
Хорстман - это книга для переквалификации яваиндусов. Читай Programming in Scala 2nd Edition Одерского, или подожди до 10 мая, будет 3d Edition.
Почти
Дак я тоже пол книги читаю, пол гуглю
Спасибо
>Идиоматик скала
Кстати, идиоматик Скала сходу в 10 раз проигрывает идиоматик Хаскелю. Причем, похуй, что там используешь, Списки, стримы, последовательности, в 10 раз - это на лучших из Скаловских структур, на остальных - еще хуже. А код на Хаскеле - самое тупое на базовой прелюдии, даже без попыток ручной оптимизации. Такие дела.
Кто тебе такое сказал?
В продакшен с этого.
https://github.com/scala-native/scala-native
Даже бенчмарк хэловорда дефолтный есть, лол.
Нет, лол. Кресты пытались сдвинуть десятки языков – все обосрались.
Это так, возможность написать какую нибудь десктопную/системную хуитку если у тебя основной/любимый язык скала.
Скорее порвут свой пердак от функционально-декларативного кода, заместо портянок. Сейчас рвутся и кукарекают что идеон показывает 300 метров сожранной памяти.
Нет слов. Ну охуеть теперь.
Тогда есть и смысл сразу с хачкелля начинать - только будешь чувствовать отвращение от убогости скалы.
Я тебя сейчас расстрою - этот компилятор точно так же написан на скале (как и оригинальный) и жрать будет точно столько же.
А скала уродливая пародия на эту хуйню.
>>756432
Прочитай сначала пост на который я отвечал. И нет – имеет.
Годно, схоронил.
Ну пиздос, вышла книга пол месяца назад, а нищий и наверное еще и тупой двачер уже хочет ее спиратить.
У меня денег нет на книгу, так бы купил
В Scala ты либо на передовой дрочишь Cats, Shapeless, spire, scalaz и прочий typelevel с остальными функциональщиками, либо деградируешь в Enterprise Quality™ с жаваиндусами. Судя по тому, что ты не видишь никакого развития с 2012, ты относишься ко вторым, и тогда справедливый вопрос - откуда твои претензии? Перечитай ещё разочек GoF, Patterns of Enterprise Application Architecture, бери котлин и еби мозги.
Тогда возникает вопрос: нахуя нужна Скала, если теперь это ещё один академический ЯП не использующийся в продакшене?
Нахуй не нужна.
Говно ебаное тормозное.
Есть груви, кложур и ява.
Остальные джвм языки ненужная хуита
Всмысле ещё один? Первый и неповторимый. Точнее первый настолько кривой академический язык, что даже в энтерпрайз пролез.
>>757366
>ты либо сосёшь хуй спонсору, и надеешься что завтра бывший тайплевел не пошлёт тебя жрать грязь из под ногтей
>либо мамакишьствуешь за стабильную еду
Трудный выбор скалаиндусов.
> ты либо на передовой дрочишь Cats, Shapeless, spire, scalaz и прочий typelevel
Вся эта мандула еще четыре года назад была.
В 2003 было маня поделие, "коммерческая" скала с тайпсейфом и яхтами Мартина началась только в 2011.
Ну вот и претензии что тайплевел либы были ещё 4 года назад - туда же.
Пруф пожалуйста
Нахрен они не нужны. Лучше бы писали удобные либы для разработки реальных приложений, а не эти зигохистоморфные препроморфизмы.
sources https://github.com/ornicar/lila
>бе-бе-беттер жява
Ты не ослышался. Весь сурьёзный продакшин и хуйлоад написан на скале которая именно "беттер жява", т.е. возможности скалы не использованы и на десятую часть.
Вопрос – нахуя использовать богатый язык, не используя все его фишки где богатость синтаксиса только помогает ошибиться макакам.
Тот же котлин – жява в которой реализованы все новые хотелки, без кучи ненужной (или немодной?) хуйни.
Весь продакшене написан на спринге или ЕЕ.
А ссаную костылепидорскую скалу засунь себе в анус пес.
Тинькофф с любым еу банком ссут тебе на ебало.
Ах, да, чистая жява – на ней как раз вся инфраструктура сбербанка, который на нг по 3 недели деньги переводил. Мб гц работал?
Ебать, какой же ахуенный язык, я прям кончил пока угорал.
Ты, блядь, на вывод посмотри – вот где весь фэйл.
> чем скала, изначально проектировавшаяся как жвм хаскелль.
Скала проектировалась как идеальный гибрид ООП и ФП, с компромиссами в обе стороны. А жвм хаскелль есть, называется Frege.
Уточню что основная работа деляется в обработке реляционных данных. Все прочее можно считать хоть скриптиком на пистоне. Это не реалтайм, считается несколько раз в день и складывается в другую БД/хранилище для посчитанных результатов, откуда пользователи могут выбирать результаты.
И да, базка не совсем ридонли, но обновляется она раз в сутки (сейчас 5-6 Гб/день).
Так этот компилятор точно так же на оригинальной скале написан, никуда не денутся 300мб при компиляции хэловорда.
В нормальном современном языке ожидается, что неполные паттерны приведут к ошибке компиляции, а не эксепшену.
http://try.haxe.org/#3218b - нажми 'build + run".
> @struct stackalloc[Vec] stdlib.malloc
1. Это уже другой язык.
2. Пилит его один студент Дима, так что будущее туманно.
3. Без жвм скала мало кому нужна.
Вообще, матчинг вполне себе полон - матчатся все возможные варианты опшена. От нормальных языков ожидается его спокойное прохождение, или хотя бы ошибку компиляции, как ты сказал.
http://ideone.com/MM0Zm8 - ржавый
http://swiftlang.ng.bluemix.net/#/repl/575263cf641e65e70fb09aa9 - свфит
http://ideone.com/ugKxRW - окамл (лол, да)
Кароче, думая вы поняли мой посыл. скала говно, гы
>Вообще, матчинг вполне себе полон
Нихуя не полон, переданное значение не удовлетворяет ни одному условию.
>>761053
>что неполные паттерны приведут к ошибке компиляции
Это неудобно нихуя же. В нормальных языках как раз принято писать что-то типа
ok, Socket = db.connect();
это неполный матчинг, но как бы и ожидается иксепшн если соединения нет.
>Нихуя не полон
Оно для этого типа может быть либо some(hui), либо none. Само значение проверяется уже вне матчинга, если ты не заметил.
так язря говном истекаю здеся, лол
>>761071
Нет, вась, в эрланге в отличие от говна так не делают.
>неудобно
Удобно. Добавил одно значение в тип, который матчишь - получай подсказку от компилятора, где надо поменять, чтобы заработало.
>это неполный матчинг
Это полный матчинг. Ты матчишь тупл и получаешь его компоненты. И какой тут нахрен может быть эксепшен, если ok явно возвращается?
То-то Джое в каждой книге пишет "Don't programming defensively" и призывается писать только happy case код.
>Это полный матчинг
Нет конечно, только один варик описан, а возвращать db.connect() может
ok, Result
error
error, Code
error, Code, Info
>>761076
>Удобно. Добавил одно значение в тип, который матчишь - получай подсказку от компилятора, где надо поменять, чтобы заработало.
Ты не понял. Специально добавляется только хэппи кейс. Потому что при нормальных условиях ожидается только он. Остальные - исключение.
Я, наверное, и правда что-то не понимаю.
Есть функция describeBodyPart: BodyPart -> String, и тип BodyPart = Head | Ass | Hand. Теперь добавим к типу Leg и получим ошибку компиляции. Чем это не хэппи кейс?
>а возвращать db.connect() может
Какое же говно в голове у тех, кто это дизайнил.
Мне лень с тобой спорить по этому поводу, если интересно сам подумай. Всё что я хотел сказать, что в скале/эралге/хаскеле/кложе паттерн-матчинг работает одинаково и везде при захуяривании unexpected значения в неполный матчинг тебя ждёт иксепшн в рантайме.
А я пока и не спорю. Пока я пытаюсь понять, что ты имеешь в виду под "хэппи кейс", и почему под него не подходит мой пример с бодипартами.
>везде при захуяривании unexpected значения в неполный матчинг тебя ждёт иксепшн в рантайме
Проблема только в том, что это анэкспектед значение большинство старается не допустить. Тот же окамл обсирается только, когда в дело вступают гварды. В хаскиле тоже что-то такое, вроде, было.
Алсо, в огромном количестве языков вообще динамическая типизация. Подумай над этим, ага.
Могут не совпадать степени уточнения типа в функции и матчинга внутри неё. Более того, матчинг может оперировать не только типами, но и конкретными значениями.
Не знаю что там в верблюде, я так понял с твоих слов, что на матчинге по конкретным значениям/типам там нужно прописывать все варианты/или использовать _ , задавая для него какую-то дефолтную обработку. Иметь дефолтную обработку для "всего стального" иногда удобно, а иногда нет. Описывая только хэппи кейс, ты отделяешь код по обработке исключительных ситуаций от бизнес логики, используя же дефолтные обработчики, ты по сути включаешь этот код в бизнес логику.
Во-вторых, описывая только хэппи кейс, ты можешь абстрагироваться от размышлений о типах исключительных ситуаций и попыток их все предотвратить. Если у тебя компилер заставляет описать все значения в матчинге, то единственный способ отложить изучение исключений на потом, это хуярить заглушку.
То есть для ситуаций A, B, C - нормальные виды поведения, а D - ошибка, действительно удобно описывать всё, но для ситуаций A - нормальное поведение, но B, C, D и ещё хуй знает сколько вариантов - исключительные, удобно использовать в матчинге только обработку А, а на все остальное забить и обработать где-то выше в трай-кетче, супервизором, процессом-монитором и т.д.
Во всяком случае в идеоматичном Erlang подход именно такой, так как там прилы по-дефолту конкурентные с овердохуя процессами, и какой-то иксепшн в одном из них не значит по большом счету ничего. Для однотредовых систем это может быть не оправдано, да.
В Scala же, неполный матчинг сделан скорее по той же причине, что и возможность создавать частично определённые функции, чтоб потом чейнить их через orElse и тому подобное.
http://goo.gl/7Boe2i
http://goo.gl/r0N8Pv
Не знаю, какие причины в Haskell, там действительно есть ключи компилера, чтоб проверить Non-exhaustive patterns. Основная причина, скорее, это нелюбовь к catch-all предикату, из-за которого, как раз твой предыдущий пример, с проверкой на новый тип не работал бы, но который тем не менее приходится применять, если тебя заставляет тайп-чекер.
http://goo.gl/syJPvR
Могут не совпадать степени уточнения типа в функции и матчинга внутри неё. Более того, матчинг может оперировать не только типами, но и конкретными значениями.
Не знаю что там в верблюде, я так понял с твоих слов, что на матчинге по конкретным значениям/типам там нужно прописывать все варианты/или использовать _ , задавая для него какую-то дефолтную обработку. Иметь дефолтную обработку для "всего стального" иногда удобно, а иногда нет. Описывая только хэппи кейс, ты отделяешь код по обработке исключительных ситуаций от бизнес логики, используя же дефолтные обработчики, ты по сути включаешь этот код в бизнес логику.
Во-вторых, описывая только хэппи кейс, ты можешь абстрагироваться от размышлений о типах исключительных ситуаций и попыток их все предотвратить. Если у тебя компилер заставляет описать все значения в матчинге, то единственный способ отложить изучение исключений на потом, это хуярить заглушку.
То есть для ситуаций A, B, C - нормальные виды поведения, а D - ошибка, действительно удобно описывать всё, но для ситуаций A - нормальное поведение, но B, C, D и ещё хуй знает сколько вариантов - исключительные, удобно использовать в матчинге только обработку А, а на все остальное забить и обработать где-то выше в трай-кетче, супервизором, процессом-монитором и т.д.
Во всяком случае в идеоматичном Erlang подход именно такой, так как там прилы по-дефолту конкурентные с овердохуя процессами, и какой-то иксепшн в одном из них не значит по большом счету ничего. Для однотредовых систем это может быть не оправдано, да.
В Scala же, неполный матчинг сделан скорее по той же причине, что и возможность создавать частично определённые функции, чтоб потом чейнить их через orElse и тому подобное.
http://goo.gl/7Boe2i
http://goo.gl/r0N8Pv
Не знаю, какие причины в Haskell, там действительно есть ключи компилера, чтоб проверить Non-exhaustive patterns. Основная причина, скорее, это нелюбовь к catch-all предикату, из-за которого, как раз твой предыдущий пример, с проверкой на новый тип не работал бы, но который тем не менее приходится применять, если тебя заставляет тайп-чекер.
http://goo.gl/syJPvR
Неполный матчинг там сделан из-за того, что exhaustiveness check сделать все равно нельзя.
По сути, матчинг — это обертка над instanceof с некоторыми хаками для примитивов/кейс-классов.
>Найс маневр
Ебанашка, а что по твоему показывает ideone? мне кажется явно не память необходимую для работы, лол
https://ideone.com/K25BWd
Если второй слэш убрать, то норм, но тогда у меня у IDEA батхерт.
scalaz
А ещё 30мб на хэловорлд?
Что значит "уныло"?
Что обычно пишут на скале?
Уважаемый дебил! Тот анончик весело и ненавязчиво пошутил, что Вы обосрались c оценкой в 300мб. С наилучшими пожеланиями, мимо крокодил.
Оправдывайтесь.
>тут две ынтырпрайзные джява-мартышки не осилили скалу, одна со смешным именем
Что тебе не ясно? Там прямым текстом написано
>для Enterprise-хардкора, чтобы гнать код в продакшн, он не подходит, потому что сложен для разработчиков, которые решают реальные бизнес-проблемы
"Мартышки не осиливают, пок-пок сириус бизнес, лучше наймём ещё десять индусов"
Барух - это который профессиональным клоуном на конференциях выступает?
Помню, помню изумление от просмотра на ютюбе какого-то доклада на тему то ли Spring Puzzlers то ли Groovy Puzzlers. Изумление как с другим клоуном они с какой то извращенной гордостью обсуждали велосипедствования, от которых их давно бы стоило гнать ссаными тряпками из индустрии.
Ну он так и говорит, что годный академический язык, но сложнее Джавы и не дает прям таких киллер фич, поэтому тырпрайз ебал его и уходит с него.
Не уходит, а _не переходит_, потому что мартышкам за 1$ в час больно без знакомых ПАТТЕРНОВ в жопе, и киллер фичами они воспользоваться не могут в виду того что они не разработчики а тырпрайз мартышки.
Проще говоря, Scala нахрен не нужна никому, кроме изучивших Scala разработчиков.
Ты хочешь сказать что Твиттер _не перешёл_ на Скалу? Или может всё-таки _ушёл_?
> В 8ой жабе появились лямбды
Может, кроме блямб еще и паттерн-матчинг, иммутабельность, алгебраические типы, вывод типов завезли? Ну тогда...
Вот - вот, чувакам синтаксического сахара к анонимным классам завезли, а они уже на радостях в штаны припустили.
А вывод типов кста обещают - лет через 5.
Тебе точно не нужна, не отвлекайся от РЕАЛЬНЫХ БИЗНЕС ЗАДАЧ и абстрактных фабрик бобов.
>>766297
С чего бы ему уходить, фантазер?
Ты так и не ответил кому нужна, кроме изучивших Scala разработчиков?
> абстрактных фабрик бобов
А что плохого в абстракциях? Хуячим по-хардкору сразу реализации и сильные связи между реализациями компонентов? Ведь главное написать и продать, а какой лох потом будет все это поддерживать или расширять функциональность не ебет?
Вне России - конечно никто, только в Сколково жулики и воры Twitter и Foursquare пилят на ней бюджет.
> иммутебальность
Чё-то кекнул со скалодебила. Как будто в Скале иммутабельные коллекции - это дефолт.
И да, никто не мешает использовать в Джаве хорошие иммутабельные коллекции из Clojure. Они, в отличии от скаловских, реализуют интерфейсы стандартной библиотеки и их реально можно вызывать из Джавы.
Вывод типов как бы уже есть в некоторых случаях.
ауе, братульцы!
будте аккуратней не встряньте в хуй пойми какие негодные проекты в банках типо Т и С на скале и спарке.
проекты конина блядская.
предупрежден - вооружен.
Как будто в банках бывает не говно.
Это копия, сохраненная 30 июня 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.