>>3540291 Какой смысл? Один пример ничего не докажет, да и ты всегда на все будешь говорить врети. Тем более спрашивать это в треде, где мало кто пишет на языке где много сахара. Иди в котлин тред, если интересно.
>>3540291 На джаве - создал объект и заполнил данными. Всё логично. На котлине вызвал очередную непонятную функцию val user = User().apply { name = "Pidor" age = 30 } Ещё лучше блять val user = User("Pidor", 30).also { println("User created: $it") } Геттеры и сеттеры под капотом, ну спасибо ебать user.name user.name = "Pidor blya" Ой, а откуда метод? Может это какой-то стандартный метод String? Нихуя. Это любитель скотлина где-то там его насрал. fun String.capitalize(): String { ... } myString.capitalize()
>>3540458 Тебе сколько лет? Нормальный код, все понятно. apply можно не использовать, передавай аргументы сразу в конструктор. С экстеншенами надо аккуратно, но так же можно засрать джава проект статическими методами, так что так себе доеб
>>3540684 так это даже не фича, это просто функция, которая принимает лямбду. Котлин хорош тем, что в нем кейвордов очень мало, пожалуй только suspend добавляется к джаве, а больше ничего на ум и не приходит.
>>3540797 >ваши паттерны Паттерн всегда где-либо будет. Явно или неявно - другой вопрос.
>геттеры-сеттеры Частично соглашусь, что можно писать код без геттеров и сеттеров. И в теории такой код может стать быстрее хотя бы по той причине, что изменение публичной ссылки напрямую(без вызова геттера/сеттера) не требует затрат на вызов метода.
>>3541063 >И в теории такой код может стать быстрее хотя бы по той причине, что изменение публичной ссылки напрямую(без вызова геттера/сеттера) не требует затрат на вызов метода Только Егорка топит за то, чтобы все поля в классе объявлять final, чтобы их вообще изменить нельзя было после создания.
>>3541063 > такой код может стать быстрее Да-да. Губами быстрее, ведь jvm не умеет инлайнить методы. Невероятные блять иновации. И типичная экономия на спичках. Почему у каждого второго жависта, руки блятб чешутся, чето пооптимизировать
Асинхронщину изучать надо? Сложная штука, чёрт побери. А реактивщина - вообще какая-то хуйня непонятная. В реактивщине отдельный тред делает только кусочек своей работы типа? Стрек-трейс состоит типа из пайплайнов или как?
>А реактивщина - вообще какая-то хуйня непонятная. Если вкрадце - реактивщина == асинхронщина + backpressure. Эдакий умный listener, который может сказать эмиттеру "горшочек - не вари", и тот - не будет.
>>3541493 Особо смысла нет, только если тебе интересно. Эта штука была раньше популярна в андроиде (RxJava), до корутин из котлина. Ничего сложного там нет, нужна такая же база, как и для написания обычного многопоточного кода. Но вся сложность в функциональном стиле - куча разных операторов, которые полностью никто не знает и юзают только маленькое множество этих операторов.
На бэке есть реактивная популярная либа Reactor, которая тесно связана с Spring WebFlux, но проектов, где такое используется очень мало. Рациональнее такое учить только тогда, когда попадешь на такой проект.
Виртуальные потоки/котлин корутины/горутины из котлина - это +- все одно и то же. Но главный плюс в них - это простота, потому что код выглядит как обычный код, а не лапша из реактивных операторов.
В снг на джаве в 99% пишут блокирующие сервисы, к ним вся это история с асинхронщиной практически неприминима
>>3541520 Спасибо за развёрнутый ответ. Думаю тогда отложу пока эту затею из изучением реактивщины, т.к. времени на это нужно не мало, а использовать его я вряд ли где-то буду. Ну или пройдусь по базе, чтобы было представление хотя бы.
>>3541605 А че, все non-blocking алгосы - это автоматом асинки? Я думал это строго спизженная из мира фп парадигма. Не очень удобно, когда один и тот же термин используется для разных вещей.
>>3541652 Это вообще про другое. Неблокирующие алгоритмы - это когда у тебя есть две версии данных - старая и новая - а потом ты через атомик делаешь свап указателя и дальше все работают с новыми данными. В классических алгоритмах кто-то один берет блокирвовку, остальные стоят и ждут под дверью туалета. Асинки тут вообще не при чем, асинки - это про экономию трех копеек на потоках, по сути просто модная хуита без какой-то реальной пользы.
>>3541715 Точно, решение проблемы 10к. А эти неблокриующие алгоритмы, их и только их можно использовать например в корутинах. Типа блокировка все разрушит. Поскольку там своя, крутая асинк блокировка - await. Которая позволяет что-то типа switch-context, но в рамках вм. Так, а реактивщина тут тогда что?
Хочу написать свой простой бэкэнд клона твиттера с микросервисами. Тут подошел бы и монолит, но сейчас модно делать микросервисы. Как можно спроектировать систему? Я хочу сделать так. Будет центральный сервис для работы с твитами, там follow, лайки. Микросервис авторизации с jwt токенами. Микросервис мультимедиа для работы с картинками (например, аватарки пользователей). У каждого микросервиса своя база данных, как утверждается в одном микросервисном паттерне. Через очередь RabbitMQ информация о пользователях и картинках переходит в центральный микросервис, так как надо связать твиты с юзерами и реализовать follow.
Пойдет такая система? Как можно улучшить?
Фреймворк для работы с БД будет, наверное, spring data jpa, а не MyBatis, потому что будут простые сущности со связями
Тут будет сложно, потому что доступ к ресурсам (картинки) должен быть при помощи jwt токена (только для авторизованных пользователей) и надо, чтобы сервис авторизации выдавал токены, которые может проверять другой сервис
>>3543511 >Микросервис авторизации Есть готовые. >Микросервис мультимедиа Также есть готовые. Зачем писать аналог amazon s3? >Через очередь RabbitMQ Зачем здеся очередь?
>>3540172 >>3540176 Короче чекнул я эту блокировку доменов жидбрейнсов. Енто дает возможность впихивать любой ключ, который был отозван после его выпуска. Таким образом можно использовать поюзанные юзерами ключи, но ограничение в том, что их надо будет искать каждый раз где-то. Т.е. должен быть человек, который их купил и слил соответсвенно. Не очень удобная хуйня.
Поэтому я таки еще поискал и нашел реальные исходники этого малваря. То был форк. Плюс также нашел плагины. А то меня всегда смущало, что там не один жарник, а целых пять и хуй пойми что они все делают. Насколько я теперь могу понять главный из них - это power.jar. Он подменяет сертификат что ли. Т.е. сменяет доверие с жидбрейнсов на то, что нагенерил ты, ну или сайты. Дальше мне было интересно, в теории, ведь этот малварь просто может не запустится без интернета, вдруг он подменил сервер проверки на свой и будет ровно также долбится до победного, пока не подтвердит, что все норм. Но судя по всему ему похуй, нормально работает в полностью изолированной сети (пик).
Я еще думал сделать вайт лист по доменам, но лишь понял что я пиздец не шарю в теории сетей. Это 7 лвл по сути, ты можешь ресолв днса заблочить, но если ты уже знаешь ip до домена, то на 3 уровне нет блокировки. И пакетик легко пролетит. И вот тут хуй знает как фильтровать, типа че распаковывать пакет вплоть до http и смотреть че там в хедере? Но тебе даст? В итоге забил, проще белые ip сделать, чем велосипед уровня ркн писать. Вот - https://pastebin.com/gWVakps4
И решил знания по сетям подтянуть, хз зачем, это зона девопсинга, но мне интересно чет стало. В итоге пару сайтов неплохих нашел, мб кому-то тоже интересно будет. http://www.tcpipguide.com/ http://linux-ip.net/
>>3543753 8.8.8.8 еще. Да и не факт что у таких больших сайтов ip один.
Я думал еще попробовать впихнуть небольшой сервер, aka nginx, который сидел бы на https://plugins.jetbrains.com/ и преобразовывал бы все обращения к себе в обращения в https://downloads.marketplace.jetbrains.com/ при условии, что спереди есть file, иначе просто обращался бы к внешнему plugin. Тяк можно будет без впнов качать плагины прям внутри жидеи. Ну по идее.
>>3543859 В идее можно указать прокси. Если он применяется для всех вызовов, в том числе и проверок лицензии что маловероятно можно все сделать через него.
>>3543895 А зачем собственно, если у меня ide в контейнере? Я могу на уровне ос настроить. Да и даже без контейнера как-то спокойнее/надежнее на уровне ос все сделать, чем доверять уровню приложений. У меня больше сомнений вызывает, а будет ли это работать и как лучше организовать все енти редиректы. Плюс сертификаты для https надо бы сделать.
>>3543511 >Тут подошел бы и монолит, но сейчас модно делать микросервисы.
Если ты это делаешь лишь затем, чтобы потом ссылку в резюме пихать, то здесь можно и закончить. Потому что на вопрос:
>Пойдет такая система? Как можно улучшить?
Тебе никто адекватно не ответит.
В этом вся бадяга с петоводингом микропенисов. Петоводить их - тупо бессмысленно, разве что ради того, чтоб апишки всяких штуковин пощупать (но для этого и проектировать особо ничего не нужно, равно как и в резюме постить бессмысленно). Ну еще разве что в качестве зачотного задания в унике или на курсах - но тогда тебе с твоим вопросом - к преподу.
У васяна на мамкином пособии все равно не наскребется ни бюджетов ни железа на то, чтобы их охуенная архитектура раскрылась и показала себя в действии, ни леммингов в нагрузку, под которой архитектура оправдала и окупила бы себя. Поэтому такие петы и не котируются никем - хуй ли толку от того, что васян вкорячил меж двух процессов кафку и попукивает туда какими то жсонами, если с тем же успехом эти два процесса у себя на компе он мог бы схлопнуть в один, кафку между ними выкинуть нахуй, и получить прирост по отзывчивости и уменьшение потребления ресурсов на триста процентов, с сохранением всех функциональных фич?
А между тем правильность архитектуры именно от таких вещей на практике и зависит. Пропускная способность. Футпринт. Количество девяток аптайма. Стоимость обслуживания, сопровождения. Вот это вот все.
В силу обстоятельств перекатываюсь с C# на джаву. На руках есть крупный бекендовый проект, который требуют взять в поддержку. Есть вопросы
Зачем нужен спринг? С виду какой-то мусор десятилетней давности, к тому же необновляемый, Как понять вообще, как это работает? Как будто у меня случайные куски кода запускаются, хвостов вообще не найти.
Почему так много xml-кода и аннотаций? Нельзя что-ли на джаве писать?
Есть шансы, что checked exceptions исправят или хотя бы введут структуры на стеке?
Есть шансы, что async/await завезут? На каждый http вызов гору кода писать надо?
Как устроены дженерики? Что такое стирание типов?
Нахуя вы транзакции открываете интерцептерами? Вы совсем ебанулись?
Это норм, что половина кода на джаве, а половина ка котлине? Как собирать проект правильно, у меня собирается градлом, затем надо другую часть собирать мавеном
>>3541519 >На бэке есть реактивная популярная либа Reactor, которая тесно связана с Spring WebFlux, но проектов, где такое используется очень мало. >Рациональнее такое учить только тогда, когда попадешь на такой проект. Я полтора года работал на проекте с вебфлаксом, и вообще ничего про рекативщину не изучал. Просто оборачивал ответы сервиса в Mono и хуй с ним.
Решил перекатиться в жабу. Это просто пиздец. Нахуя вам 100 систем сборки, каждя из которых работает через одно место? В этом даже разобраться невозможно
>>3545916 >>3546681 Так и быть, раскрою карты - вся эта сложность и нелогичность жава-экосистемы создана абсолютно искусственная. На жабе пишут серьезный банковский софт и чтобы откровенные дебилы не смогли попасть в компанию и набедокурить придумали спринги, грэдлы и прочие XML-конфигурации. Глупо было бы думать, что это всё нужно для написания типичных микрачей с rest-ручками, записью в бд и пуками в кафку. В середине 10-х пытались даже сделать ещё более жесткую фильтрацию внедряя Scala, но эпидемия ковида оказала серьезное воздействие на ментальные способности населения и пришлось возвращаться обратно на джаву.
>>3546752 Технически, это все еще одна система сборки. Просто в очередной раз кто-то все переусложнил, это не вина градла, а вина разрабов. Ровно также можно нахуевертить и на шарпе и где угодно еще.
>>3546767 >Легаси какое-то ебаное? вроде нет, просто у нас разные проекты на разных версиях котлина, некоторые обновить невозможно. Поэтому весь котлин собирается своими скриптами.
Джава проекты мавеном собираются, плюс на всё это есть сборочный оркестратор, который может симулировать запуск моков, чтобы конкретный проект в отладке запустить.
Такая же хуйня. кроме старожил никто не может проект собрать. Код пишется через хитрый паттерн, в который чтобы войти, нужно его самому написать. Уволить меня невозможно, так как без меня хуй кто код разберёт иразвалится просто нахуй. А вы так не делаете?
>>3546728 >Джереми писал, что если каждый десятый проект переписывают с джавы на сишарп, то обратного пути уже нет. Доказательств этого, как обычно, никто не привёл.
>>3546728 >Джереми писал, что если каждый десятый проект переписывают с джавы на сишарп, то обратного пути уже нет. Доказательств этого, как обычно, никто не привёл.
>чтобы откровенные дебилы не смогли попасть в компанию и набедокурить придумали спринги, грэдлы и прочие XML-конфигурации
Ага. Квадратно-гнездовая хуйня, которая изначально проектировалась и внедрялась для того, чтобы хайрить не дорогущих и редких академиков, а всякое лоускилльное пост-ЕГЭ-шное чмо, способное только на зубрежку. Спринг как барьер против дебилов - придумал тоже...
>В середине 10-х пытались даже сделать ещё более жесткую фильтрацию внедряя Scala, но эпидемия ковида оказала серьезное воздействие на ментальные способности населения и пришлось возвращаться обратно на джаву.
А че уж не на джаваскрипт, лол?
Скала сдохла по очень простой причине - потому что вышла тройка, несовместимая с двойкой. Все. Примерно с выходом тройки весь публичный дискус вокруг скалы и сходит на ноль. Такой трюк мог прокатить с питоном 15 лет назад, у которого порог входа ниже плинтуса. Но не с функциональным языком, которому дали небольшой шанс войти в кровавый энтерпрайз, и который этот шанс проебал.
>>3547516 Какой нах ф-шарп... Окстись, шарпей, в каждой жопе затычка. На скалу хоть немного, но вакансии были. На эту поделку вакансий никогда не было и нет по сей день, хоть сам язык и неплох.
>>3547309 Все движется в сторону ФП. В сторону ФП следовало двигаться еще в нулевых, когда многопоточка стала мейнстримом. Но хули делать - инертность и необучаемость самой прогрессивной профессии на свете, которая вдовесок требует от своих специалистов быстрой и постоянной переобучаемости, не знает дна.
>>3548220 Я думал это в основном потому, что фич именно для ооп особо-то и не придумаешь: часть недоступна из-за идеологии, а часть из-за обратной совместимости, другая очень сложно внедряется. А вот фп целая парадигма, которую можно потихоньку подпиливать и себе внедрять. Просто странно считать, что фп прям во всем лучше ооп и последнее просто тупиковая ветвь развития.
>>3548220 Оно начало двигаться еще до твоего рождения, да все никак. Единственную полезную фичу из ФП - замыкания - давно реализовали во всех языках, остальное дрочение никому не нужно.
Да кого когда либо волновала идеология, пф. Все современные языки - мультипарадигмальная солянка. Чистого ООП нет нигде, ибо нахуй не нужно.
Дело даже не в ФП и ООП. Холивар ФП/ООП просто всем привычен, потому что парадигмы на слуху. ИМХО, этот холивар - просто частный случай более общего холивара - "императивное vs декларативное программирование". И общий холивар ИМХО гораздо интереснее частного.
Пока проблем с concurrency не существовало, а многопоточку дрокали больше в академической среде, нежели в проде, императивка была целиком и полностью ок. Не ок она стала тогда, когда оказалось что одна глобальная переменная, пошаренная меж двух независимо исполняющихся потоков одного процесса с одном адресным пространством - это источник проблем, который в реалиях императивной разработки решается только через жопу, мемори-модели, самодисциплину разрабов и божью помощь. Декларативные подходы (включая тот же ФП) ту же проблему решают на порядки проще, но ценой отказа от устоявшихся практик прикладной разработки.
Последнее, видимо, оказалось ключевым шоустоппером на тот момент. Тратить бабло на переучивание своих крепостных с нуля капиталюги никогда не будут - лучше заплатят за мемори модели. Так родилась и расцвела джава.
>Просто странно считать, что фп прям во всем лучше ооп и последнее просто тупиковая ветвь развития.
Сам этот холивар туп по своей форме. Разница меж ФП и ООП на самом деле лишь в том, что используется в качестве first-class citizen. Все. Остальное - лирика и реалии на местах.
Что же касается более общего холивара - всю дорогу разработка двигалась в сторону все более и более высокоуровневых подходов. От ассемблера к фортрану и си, от сей к плюсам, от плюсов к джаве, и даже в джаве превалируеит спринг, который, хоть и тяжело язык повернуть чтоб назвать его так, но декларативен. Декларативка - это просто следующий шаг в этой эволюции. Все само туда придет рано или поздно.
>>3548259 >Да кого когда либо волновала идеология Ну архитекторов джавы. У них очень много решений именно на основе идеалогии. Типа нет перегрузки операторов, нет именнованных параметров и тд и тп. Да даже сама вот эта всепронизывающая обратная совместимость часть идеологии жабы. Ты не прав, я хуй знает, но мне кажется если ты почитаешь пару жепов и последишь хотя бы за развитием языка, то станет понятно, что там очень много вот таких вот решений. >ту же проблему решают на порядки проще Ты хоть знаешь как именно они её решают? Ну просто IO её скидывают и все. А там все та же мемори модель и прочее. Гениальное решение, ничего не скажешь. Ну может как с parallel стримами ты можешь распаралелить чистые функции ну и проблему 10к решить. >всю дорогу разработка двигалась в сторону все более и более высокоуровневых подходов. Я не знаю, если смотреть в историю, то фп родилось примерно тогда же, когда появилась машина тьюринга. Тут нет развития, что мол вот, эта следующая ступень или что-то подобное. Фп всегда было просто паралельным путем.
>>3548273 >Типа нет перегрузки операторов, нет именнованных параметров и тд и тп
Да приебались вам всем эти вшивые перегрузки операторов, господи... Идеология гришь? Да нихуя. Знаешь почему на самом деле в джаве нет перегрузок в-попу-раторов? Потому что разрабы тех времен сполна нахлебались этого говна в плюсах, и не захотели хлебать его дальше в джаве, вот и вся идеология. Джава во многом создавалась с оглядкой на опыт плюсов. И кто шарит, не станет их осуждать.
>Ну просто IO её скидывают и все. А там все та же мемори модель и прочее.
Пиздец ты душный. А ты каких чудес то ожидал?
Ну расскажи как ты бы делал, раз тебе такое неинтересно.
>Ну может как с parallel стримами ты можешь распаралелить чистые функции ну и проблему 10к решить.
Как ее решают остальные? Обычно - через асинхронку, наебнув дополнительный уровень абстракции в виде зеленой многопоточности, асинк/эвейтов или еще какой асинхронной лапши. Но в жосткой императивке такие мувы всегда имели побочки: асинк-эвейты "красят" функции, а асинхронная лапша - это трудноотлаживаемая параша по сути своей.
А тем временем декларативные подходы уже by-design сводятся именно к этому - к тому чтоб "наебнуть миллион слоев абстракции" никогда не было проблемой для разраба. Поэтому под декларативкой ты и не встретишь такую проблему. Do-нотации похуй, какие вычисления в цепочку связывать - синхронные или асинхронные.
>Я не знаю, если смотреть в историю, то фп родилось примерно тогда же, когда появилась машина тьюринга
Разделяй кровавый энтерпрайз и науку. Так то и многопоточка появилась задолго до нулевых. Просто она особо не нужна была никому до появления многоядерных процов.
>>3548313 >не захотели хлебать его дальше в джаве Это и есть идеология. Что вот, наша жавочка не потерпит эти ваши старые практики. Но и новые тоже, хуй вам, а не сахар. >А ты каких чудес то ожидал? Нет, ты просто так вкусно описываешь, что вот, в фп такииие решения. Что диву даешься, смотришь как там на деле, ну литерали жаба, только структурного канкаренси нет в жабке пока еще. А если еще посмотреть на историю, то JMM и вовсе самая первая из подобных моделей, получается жаба впереди всех вообще в этом плане. Невероятно. > никогда не было проблемой для разраба Если бы еще абстракции не протекали... >Разделяй кровавый энтерпрайз и науку. имхо, фп практически нет в энтерпрайзе. Зато вот именно оно двигает науку, по всяким теориям типов и прочей поеботе, которую потом языки типа жабы забирают себе как готовое решение.
Хера притянул за уши. Ты б еще Гойца фашистом обозвал. Жесть.
>Но и новые тоже, хуй вам, а не сахар.
В джаву без пяти минут паттерн матчинг завезли - чего тебе еще надо? Вечно один бугурт с двачей. И те же двачеры потом еще жалуются что не берут их никуда. Правильно, хули, работодатели пессимистов не любят.
>Если бы еще абстракции не протекали...
И к чему это было? В императивке они как раз и имеют тенденцию течь как суки. Что так то ожидаемо - многие абстрактные концепции на императивку изначально ложатся криво.
>Зато вот именно оно двигает науку, по всяким теориям типов и прочей поеботе, которую потом языки типа жабы забирают себе как готовое решение
Теперь тебя куда то в идеологию повело - капиталистическую пропаганду вон начал цитировать. Ты уж определись - мы что обсуждаем то? Идеологию, историю, или парадигмы?
>>3548377 >фашистом обозвал. Жесть. Эээ, ну может неудачный подбор термина, ну я думаю ты понял, что я имел ввиду. >И к чему это было? А ты ну.. Писал когда-нибудь на фп языке-то? Вот допустим возьмем самый абстрактный из абстрактных. Я вот когда еще начинал пробовать делать на нем всякое обнаружил интересную вещь - я не могу оценить насколько перфомансен мой код. Я даже больше скажу, я не могу сказать, а вот это вот чудо вообще tailrec для ghc или нет? И вот знаешь как именно оценивается производительность в хаскелле и как именно оптимизируются программы? Правильно, заходим в гит ghc и смотрим исходники компилятора и вот под него и его оптимизации пишем программы, если нам нужен перфоманс. Более того, из-за ленивости там обнаруживаются проблемы с thunk. Тоже та еще поебота, которую приходится решать черти как и очень, очень трудно отслеживать. Так вот, мы говорим про область, которая доавляют в это еще больше пиздеца - многопоточку. Она существует исключительно ради перфоманса. Я просто блять не представляю, как ты будешь оценивать вот все это абстрактное чудо, если когда-нибудь будешь писать. Но да, абстракции в фп не протекают, главное в это верить, броу. >капиталистическую пропаганду Не понял. >чего тебе еще надо Я просто констатирую факт, что не завозят фичи не только потому, что они устарели, но и новые в том числе, что мол они временем не проверены, а вот это будет костылем и вообще у нас есть более заебатое общее решение (как было с интерполяцией строк), поэтому ждите.
Ну мы его в основном для скриптов используем и если надо накидать прототип. Удобно, что собирается тем же компилятором и не надо ебаться с градлом и прочей поеботой
>>3548381 >Вот допустим возьмем самый абстрактный из абстрактных. Я вот когда еще начинал пробовать делать на нем всякое обнаружил интересную вещь - я не могу оценить насколько перфомансен мой код.
Пошел с темы на тему скакать. Выше ты чето насчет протекания абстракций затирал, а сейчас каким то образом на производительность вышел.
По теме - да, у декларативки есть такой побочный эффект. Ну так всегда так было. Всегда при переходе с низшего уровня разработки на высший ты терял толику контроля над тем, что ты делаешь с железом. Так было с сями при переходе с ассемблера, так было с джавой при переходе с сей. И всегда во все времена был аргумент, схожий вот с этим вот твоим "я хз че мне там мой компилятор/рантайм нагенерил, а вдруг он нагенерил мне говно, не верю".
Я как то на собесе в нулевых, будучи тогда еще пиздюком-стажером, со своим ментором сходил на первый собес в роли интервьюера. И там был дед, который забавно рассказывал, как он героически соревновался на ассемблере с сишным компилятором, и по итогу проебал ему и сдался. И не он один так делал - в стародавние времена многие так развлекались. Но компилятор все равно победил.
>Я просто блять не представляю, как ты будешь оценивать вот все это абстрактное чудо, если когда-нибудь будешь писать.
Твои проблемы. На меня то че пенять?
>Я просто констатирую факт, что не завозят фичи не только потому, что они устарели, но и новые в том числе
Да расслабься уже. Я почти на 100% уверен что в конечном итоге вы выклянчите у гойца эти многострадальные операторы. Завез же он питоняшам короткий мейн, в конце концов. Станете ли вы после этого меньше ныть и бугуртить? Скорее всего нет.
>>3547895 Я сам шарпомуха. Я уже шесть работ сменил с начала карьеры, и нигде не было ни одной строчки на фшарпе. Даже, прости г-ди, вижуал бейсик встречался, а фшарпа нигде не было совсем.
>>3548273 >>Да кого когда либо волновала идеология >Ну архитекторов джавы. У них очень много решений именно на основе идеалогии. Типа нет перегрузки операторов, нет именнованных параметров и тд и тп. Так тут вопрос двое не в перегрузке операторов, а вообще в их определении. Почему я могу через плюс сложить два числа, а две матрицы не могу? Это тупо, нельзя ставить идеологию во главу угла. Именованные параметры вообще по идее должны быть идеологически одним из столпов ООП, ведь методы это не функции, где аргументы порядком определяются, это вызов команды с данными, а данные сами как объект. У объекта же нет порядка полей и методов.
>>3549281 Адекватный лид такое говно не пропустит на ревью. А плюс б - это всегда сложение двух чисел и только, ты читаешь код и сразу понимаешь, что происходит. В плюсах наелись этих ебаных операторов, хватит. По этой же причине в сишарпе нет макросов, чтобы малолетние долбоебы не высирали свой синтаксис.
>>3549233 Насколько я понимаю, они не хотят вводить слишком инвазивные и общие решения, которые радикально изменят кодовые базы. Типа вот начнут использовать тот же оператор сдвига для in/out https://en.cppreference.com/w/cpp/io/cout.html и все, конец света случится. И поэтому они вот пишут ( https://openjdk.org/jeps/401 ): >In the future, this programming model will support new Java Platform APIs, such as classes that encode different kinds of integers and floating-point values, and new Java language features, such as user-defined conversions and mathematical operators for domain values. Но также, они не хотят вводить решения, которые слишком костыльные и не вписываются в существующую кодовую базу, а также решающие всего одну задачу, т.е. ad-hoc или сахар иными словами. Вот например ( https://mail.openjdk.org/pipermail/amber-spec-experts/2024-April/004106.html ): >In the course of using this feature in the `jextract` project, we did learn quite a few things we didn’t already know, and this was conclusive enough that it has motivated us to adjust our approach in this feature. Specifically, the role of processors is “outsized” to the value they offer, and, after further exploration, we now believe it is possible to achieve the goals of the feature without an explicit “processor” abstraction at all! This is a very positive development. Воот, как-то так. >>3548781 Ну я хз, по моему тот же sql проще оптимизировать, чем фп языки. >вы выклянчите Он же не сидит итт, не думаю.
>>3549334 >Адекватный лид такое говно не пропустит на ревью. На джаве не пропустит, конечно. Это будет ошибка компиляции, азаза. >А плюс б - это всегда сложение двух чисел и только, А строк? Напомню, в математике есть операция сложения строк, только она означает "или", а конкатенация — это умножение. >ты читаешь код и сразу понимаешь, что происходит. Ох ты ж блин, у тебя как будто у разных классов не бывает методов с одним и тем же названием. Просто делай сложение для типов, для которых очевидно, что оно означает. > В плюсах наелись этих ебаных операторов, хватит. Я больше 12 лет пишу на шарпе, и только один раз видел ебанутое использование операторов — в клиенте эластик сёрча. Всё. Зато неподдерживаемый говнокод без каких-либо перегрузок операторов я встречаю регулярно. Ну реально, ради качества кода нужно было запрещать совсем другие вещи. > По этой же причине в сишарпе нет макросов, чтобы малолетние долбоебы не высирали свой синтаксис. Блин, там опенсорсный компилятор. Форкаешь и перехуячиваешь синтаксис. Да и инструментов кодогенерации в дотнете полно. Можно просто полный пиздец наворотить прям в рантайме, и кстати, один такой пример я видел.
>>3549344 >Ты 12 лет пишешь на сишарпе и не знаешь, что строки надо складывать через StringBuilder? Ты из епама, что ли? Две строки быстрее и эффективнее складывать через плюс. >>Просто делай сложение для типов, для которых очевидно, что оно означает. >А потом получается джаваскрипт, где тоже все "очевидно". Нет, не получается. Ещё раз повторю, что дурацкое использование операторов я видел только один раз, во всех остальных случаях значение использования всех операторов было совершенно очевидным. Никто не делает оператор умножения массива интов и булеана.
>>3549345 >Никто не делает оператор умножения массива интов и булеана. Умножить вектор на скаляр - это валидная операция, кастануть булеан к инту 0/1 тоже, как и инт к булеану в ифах. Ну а че удобно же. В итоге получается джаваскрипт, где a + b может давать что угодно.
>>3549350 Слушай, а почему для конкатенации строк и сложения примитивов используется один и тот же оператор? Будь последовательным и введи для конкатенации например ++. Как тебе идея?
>>3550120 >Почему на Comparable не завязали операции сравнения?
очевидно, чтобы использование такого вызова найти было невозможно.
Долбоёбы джависты, не могут отдельные методы писать, им обязательно захуевертить всё в интерфейс Invokable, ValueProvider, Mapper, Mediator, и прочую поеботу, чтобы потом умного из себя строить
>>3549350 >>Никто не делает оператор умножения массива интов и булеана. >Умножить вектор на скаляр - это валидная операция, Да. Но вот произведения векторов уже два, поэтому нельзя. > кастануть булеан к инту 0/1 тоже, как и инт к булеану в ифах. Нет. Нельзя имплицитно конвертировать булеаны в числа и обратно. Это принципиально разные типы. > Ну а че удобно же. В итоге получается джаваскрипт, где a + b может давать что угодно. Проблема джаваскрипта как раз в неявной конвертации всего во всё по не очень корректным правилам. Такое разрешать нельзя. Ну или надо как в перле, где конкатенация строк через точку, а сложение как раз только для чисел. Хотя нет, не надо.
>>3550120 А там где ты это нашел разве не написано? Наверняка там какая-нибудь чушь, про то, что воот в comarable возможно 0, поэтому это poset, а вот наш ordered - это total order. Совершенно другое.
>>3541519 А теперь следи за руками - почему на эти корутины всем пох Кто работал на большом проекте с реактивщиной, тот знает, что это неподдерживаемое говно становится - его нельзя читать, его нельзя расширять, его нельзя дебажить, и сколько туда народу не вкидывай, он только хуже становится. Но тут происходит самое интересное - реактивщина не нужна в 99,999% проектов. Смысл ее появления был в том, что мы не могли масштабироваться и надо было выжимать максимум ресурсов из многоядерного проца (что и происходит на мобилах сейчас). Но у нас во-первых есть уже армы по 200 ядер и во-вторых горизонтально масштабироваться с балансерами можно как угодно. Да, 100 concurrent потоков не вытянет дохлый сервак, но ты одной кнопкой делаешь 10 серваков по 10 потоков и не ебешь себе мозги этими колбеками. Если прям очень надо, то теперь у тебя есть вирутальные потоки - сурпрайз сурпрайз, почему его сделали обычным императивным кодом
>>3551904 Виртуальные треды тоже надо уметь готовить, как и корутины. Если ни кому не нужен перформанс, почему сейчас го на лютом хайпе, там горутины и nio из коробки
>>3551919 Мм, твое мнение имеет место быть, только во всех бигкеках, где я работал, выбить доп ресурсы себе - это пиздец огромная задача на месяцы. Потому что когда у тебя один твой пет проект, то изи поднять хоть 10 сервисов, это копейки. А когда у тебя десятки тысяч сервисов и у каждой команды майндсет, как у тебя, то это выйдет в круглую сумму. Бизнес умеет считать деньги получше тебя. Плюс железки щас подорожали из-за параллельного импорта и всех этих приколов.
>>3551924 1. написать толковый код с многопоточкой, потом отревьюить, потом оттестировать - на это времени больше уйдёт и соответственно обойдётся дороже 2. по деньгам будет однохуйственно т.к. тарифицируется утилизация cpu. если один инстанс будет усираться на 100% и 10 на 10% то это плюс минус одни и те же деньги
>>3552063 Ты самый умный, а вокруг дураки и ничего не понимают, проходили.
Лишние треды - это лишняя память в первую очередь. Лучше утилизировать по максимуму, потому что если у тебя куча реплик, то их ещё надо поддерживать системе деплоя, на это тоже тратятся ресурсы. Смотри шире.
Сейчас асинхронщина с помощью корутин и горутин пишется очень просто, можно даже не вникать, как работает под капотом и всё будет работать четко, поэтому го и на хайпе - нанимаешь 1000 мидлов и они пишут максимально примитивный код, который ебет по перформансу блокирующие скуфоджава решения в очко, при этом нет лапши из реактивных операторов
>>3552183 реплики (инстансы) регулируются не деплоем, а в кубере на раз с помощью какой-нибудь хуйни.
ну у нас как вот - ночью нагрузка околонулевая - один инстанс. в 9 часов утра - штук 15. автоматом скейлится горизонтально. всё наглядно, всё видно охуенно даже самому тупому девопсу. а вот запрограммировать такую логику на гошечке конечно можно, но оно не будет так наглядно да и тестировать сложновато.
>>3552189 Кубер - это и есть система деплоя. Понятное дело, что всё настраивается какими-то чартами. Больше инстансов - больше работы для системы деплоя (мониторинг, дискавери и т.д.) Вот сейчас у вас в час пик поднимается 15 инстансов с блокирующим подходом. С неблокирующим подходом вам бы условно хватило 3-5. А если бы у вас был голый пхп, где каждый хттп реквест - это не просто отдельный поток, но и отдельный процесс, то думай сам. Вот в чём и вся разница. Хз с чем ты споришь, это очевидные вещи.
Понятное дело, что переписывать на корутины или вообще на го нет особого смысла, если бизнес все устраивает. На го переписывали как раз таки пхп проекты
>>3552217 Браток, у нас Quarkus, у нас всё летает. Поднималось бы 3-5 на горутинах (корутинах), но какой ценой? У нас многопоточка внутри инстанса + разные инстансы. Получается 2 уровня вложенности, если можно так сказать. Обычной девопсине это слишком сложно будет такое, да и типовому крудошлёпу тоже будет сложно такое поддерживать.
Ну это ИМХО всё конечно, пока консенсус у нас такой. Твоё мнение тоже уважаю.
>>3552183 >максимально примитивный код, который ебет по перформансу блокирующие скуфоджава решения в очко Это в теории. А на практике эти твои мидлы накрутили опыт и насрали горутинами так, что сервер надо рестартовать раз в сутки, а то память утекает нахуй. В итоге код на блокирующих вызовах работает быстрее, потому что ядро писали не дураки.
>>3552347 Чёт вспомнилось как майки насрали этими асинками и у них калькулятор не работал, лол. https://youtu.be/Z0KvEzgNzDc Ну главное помнить, что знать ничего не надо, а работает твоё говно или нет, проблема юзера
>>3552369 Я тоже думал, что это хрень какая-то, но вон проверил. Как он говорил, возможно там в отдельный тред запихивается таска и если она длится больше скажем 10 секунд, то все, делается вывод, что этот график невозможен и финито ля комедия. Вопрос возникает почему же такой по всем бенчмаркам крутой язык рисует график на порядки медленее дефолтного жс? Возможно проблема не в инструментах, а в руках тех, кто ими пользуется, хмхм. Хотя с другой стороны, это те, кто создали этот язык, эту платформу (uwp), кто как не они знают лучше, как им пользоваться?
>>3554677 Тоже нет. Если бы государства так легко можно было уничтожить... Все будет также как прежде, просто поймут, что байка про ядерку хрень и ядерное сдерживание перестанет действовать.
>>3554477 ну, геймдев это не микросервисы. по факту просто разбирайся, как деплоить свою хуйню в облаке через какой-нибудь CI, а там и микросервисы поймёшь
>>3554671 Наоборот, дс не тронут ну никак) потому что там бабки, и все это понимают, как бы там кто не относился, но торговля идет с Москвой, а дальше уже как то там куда нибудь. Пезнут по какому нибудь приграничью, и то подумают. Паритет работает, и проверять есть ли ядерка ил нет, никто не захочет
Я делаю LRU кэш, у меня есть список объектов в java HashMap, доступ к которым по ключу у меня почти всегда за O(1), так же эти же объекты хранятся в LinkedList, мне нужно взять этот объект из HashMap и передвинуть его с середины LinkedList в начало LinkedList, если бы у меня был самописный LinkedList я бы просто взял и поменял next, но как это сделать во встроенном в java LinkedList?
>>3555170 Вопрос в том, можешь ли ты добраться до элемента в линкед листе за O(1). Т.е. технически тебе надо было бы хранить в хэшмапе еще линку на ноду, тогда это было бы осуществимо. Иначе, допустим если бы ты проходился итератором по этому листу, то можно было бы ремовнуть https://docs.oracle.com/javase/8/docs/api/java/util/ListIterator.html#remove-- , а потом добавить вперед элемент.
По моему проще хуй на это забить и использовать банальный ArrayList и хранить индекс. Что ты там сэкономишь на линкед листе не совсем ясно.
>>3555390 Удаление всегда O(1). Как она вообще может быть линейной? Добавление тоже O(1): > The add operation runs in amortized constant time Просто там хитрят, но энивей.
>>3555394 >Удаление всегда O(1) Удали мне элемент из середины массива за константу >The add operation runs in amortized constant time Это из-за того, что у тебя удваивается массив, поэтому каждый элемент при удвоении массива ты вставляешь два раза (в старый массив и новый). То есть вставка n элементов в массив с удвоением = 2*n = O(n) >LinkedHashSet Там используется как раз таки двухсвязный список, а не массив
>>3555399 >Там используется как раз таки двухсвязный список, а не массив Так подходит или нет?
Я просто думаю, что ты хуйней занимаешься, делать кэши в языке, где есть gc какая-то хрень. Ну переведешь ты объекты из молодого поколения в старое, теперь будет требоваться fullgc и stw. Ну, заебись че.
>Удали мне элемент из середины массива за константу Ну ладно, ты прав. Думал там в теории, можно как с выколотыми точками, но это что-то к деревьям уже ближе и ребалансировке. >Это из-за того, что у тебя удваивается массив Ну и? У тебя он вообще планирует удваиваться-то?
>>3555403 Хм, ну извени. Люблю тупить в мелочах. А вообще, насколько я помню, в этом LinkedHashMap не только связный список, но и массив есть. Учитывая, что она наследник HashMap..
>>3555418 Ну массив там как раз таки для реализации обычной хэшмапы, да, но значение - это не просто значение, которое ты туда положил, а нода линкедлиста с after и before указателями и самим значением, ты так и писал
Посмотрел, как в джэве реализован LinkedHashMap, там есть LinkedHashMap.Entry, который наследуется от HashMap.Node, получается LinkedHashMap.Entry это как бы двумерный связный список, там 3 указателя: after, before - это для порядка вставки next - это следующий элемент в рамках бакета Они решили сэкономить на ссылках и объектах, но из-за этого LinkedHashMap наследуется от HashMap и там прям код жестко связный, хотя LinkedHashMap мог бы просто хранить инстанс HashMap и только управлять связным списком для поддержки порядка вставки
>>3555571 >и там прям код жестко связный Тебе-то от этого ни горячо ни холодно должно быть. Ты же не собираешься творить какую-то грязь и лезть в приватные методы..
К нам в айти отдел пришёл новый сотрудник. Нужно сказать, что у нас в отделе работают почтенные шарпогоспода. Новичка посадили за компьютер, но не успели даже дать задание, как он начал кодить. Начальник из любопытства подошёл посмотреть, что он там написал. В течении секунд тридцати он побледнел, затем посинел, затем покраснел, а потом трясущимся от нескрываемого гнева голосом сказал: - Это же Абстрактная фабрика! На чём ты кодил до этого? - На Джаве. - Жабапидор! - в один голос заорали все 20 человек. - Жабапидор! Жабапидор! Жабапидор! Кто-то включил сирену. Над дверьми замигали красные лампочки тревоги. На окнах мгновенно сомкнулись плотные жалюзи. В офисе одновременно бывает два отдела человек по сорок. На обеде вся эта толпа собирается на первом этаже, где яблоку негде упасть. А поэтому, как охранники ни пытались вырвать жабапидора из рук разъяренной толпы, им это не удалось. По всему офису стоял сплошной рев: - Жабапидор! В коридоре его сразу же сбили с ног. Используя галстук как поводок, его тащили через весь коридор, передавая из рук в руки. Поэтому получалось так, что никакого движения в коридоре не происходит, но и жабапидора тоже нет. Его заволокли в каптерку под лестницей, где хранятся ведра и швабры с тряпками, и там закрыли. Под конец рабочего дня он всё же появился. За получасовой обед его изнасиловали несколько человек. Сопротивляться было бы бесполезно. Через день на нем чистым оставалось одно лицо, а на теле не было живого места. Он превращался в мразь, в животное. Его били все, даже дизайнеры и уборщицы. Его заставляли есть говно и опарышей. В очко ему совали битые лампочки, живых птиц и змей. Он стал «дельфином» – в нужнике пятнадцать дырок, он ныряет в первую, выныривает, ныряет во вторую... И так – до конца. От него постоянно воняло. С ним невозможно было рядом находиться. Был такой случай: к нам устроился работать Степаныч. Степаныч сидит на толчке, а кто-то снизу через очко хватает его за яйца. Степаныч с воплем вылетает в коридор без штанов. Напротив - айти отдел. Смех не стихал долго... Потом Степаныч забил его кирзовым сапогом насмерть. Менты как узнали, что сдох жабапидор даже дело заводить не стали.