#35 Почему Java остаётся топовым языком для бизнеса? | Тагир Велеев

Привет друзья с вами ведущий подкаста организованное программирование сегодняшняя тема нашего подкаста - это Java и обсудим её с Тагиром Валеевым. Я думаю что для большинства людей которые его смотрят представлять Тагира наверное особо не имеет смысла Но если вы никогда про него не слышали обязательно услышите Тагира более 15 лет разработки вве он занимается статическими анализаторами комит в ОК или кстати вот когда указал ты являешься членом комитета или непосредственно разработчик Привет Да там всё несколько сложная история то есть там есть и экспертные комитеты и собственно разработка Ну в принципе у меня и то и то то есть там есть разные статусы и вот у меня есть статус коммите то есть в этом плане я имею право свои коммиты после ревью собственно помещать в мастер в основную ветку Open gdk То есть если у человека статус ниже статус автора только то ему нужен спонсор нужен человек который за комитет за него я могу коммитить без такого спонсора мы это обсудим вообще мы когда про языки встречаемся разговариваем с разными ребятами это всегда очень интересный вопрос как Вообще процесс создания новых фич спецификации изменения внедрения всего этого добра как он происходит в разных языках и это довольно прикольно потому что очень много очень разных сложных бюрократических заморочек И что Только не

наслушавшись куда мы идём что-нибудь про котлин обязательно я тебя спрошу и про редакторы и про всякое разное что вообще Вокруг джавы существует Давай пару слов Про себя расскажи потому что я знаю у тебя недавно книжка вышла плюс меня всегда знаешь что интересовало Вот это двоя тема везде такие Java чемпион Я понимаю что это какой-то ваш внутренний термин Но для людей которые не в Джаве это выглядит странно Ну то есть это немножко так чемпион спортивное какое-то понятие да у вас там jav чемпион короче Дай чуть больше вот этот м вход так сказать в тему Да ты так прямо сразу много вопросов затронул и про себя и про два чемпиона и про книжку давай с жава чемпиона например начнём Давай это такое просто как бы звание такая лычка я не знаю вроде свадебного Генерала вот ну наверное есть вот Microsoft mvp это наверное чем-то похоже А то есть идея в том что есть некоторое сообщество два чемпионов - это люди которые что-то делают для джавы представители коммьюнити которые Ну как бы достаточно много сделали для популяризации джавы для того чтобы Java там была хорошим классным языком чтобы ей больше людей могли пользоваться это могут быть люди которые там а ведут Java User Group э которые там часто проводят какие-нибудь лекции на тпах участвуют либо организуют митапы или организуют конференции либо например контрибьютор

там очень какой-нибудь важный проект поддерживают Обязательно что они что-то делают вот такое для коммьюнити Если бы я только там какой-нибудь коммерческий продукт разрабатывал нажа это вот либо там какие-то образовательные ресурс

держат Вот его

не может быть даже

бывают Челове сжи это такая

и потом идт

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

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

консалтингова чемпион Ну к тебе чаще будут приходить Понятно Окей хотя бы Теперь понятно Надо подумать может быть нам что-нибудь такое же замутить в эту сторону и у тебя в че году вышла книга Да совершенно верно она у ме собой есть Слушай всегда хотел спросить вот этот вот дизайн он же просто вот идентичный да то есть это одна и та же получается компания которая выпускает подобные книжки А почему оно так работает они тебе говорят что смотри у нас есть готовый дизайн не придётся платить за него или наш аудитория к этому привыкла давай его использовать То есть почему они все в одном дизайне сделаны это издательство манг Ну и да у них такой собственно подход к выпуску книг то есть у рейли Ты знаешь что часто там животное ложки А у майнинга вот так вот у них э очень простая как бы решение вопросы с копирайта то есть они берут какие-то старые книги там X или XV века где иллюстрации различных нейтив людей там из разных стран Вот у меня по-моему это какой-то человек из Филиппин что ли Ну вот как бы какой-то там филиппинский а то есть вообще никакой связи просто вот никакой связи они берут несколько рандомных иллюстраций дают тебе на выбор вот Выбери из них Ну вот я выбрал то что мне из предложенного показалось наиболее нормальным и они его помещают такой вот фирменный стиль издательства Давай перейдём вот к истории про джаву А наверное одна из главных вещей про которую хочется поговорить вот в целом про язык как бы глобально да то есть вот понятно что он там появился решал определённые задачи трансформировался долго находился в стагнации и в какой-то момент прорвало Наверное ты скажешь какой и почему Ну и естественно в какой-то момент как бы насколько я понимаю сообщество немножко напрягло разделилось вот эти версии которые читали Как как в Хроме штамповать Да без остановки часть людей говорит нам только Java 8 Идите все лесом с этими всеми обновками при этом она продолжает бесконечно выходить я просто сюда ещё даже докинути котлин даже появился потому что Java Не развивалась ну одна из наверное причин Да но как И кстати многие языки обёртки видно что Java догоняет Ну как всегда конкуренция Подстепки Ну со многими языками очень похожая штука и тоже интересно про будущее вот на основе этого короче Вот мы сейчас в точке когда Java летит вперёд и куда-то собирается лететь дальше тут Да тут вопрос такой довольно сложный и долгая у джавы была история то есть языку то всё-таки уже 30 лет вот буквально на днях стукнуло серьёзная дата да отмечали же прямо 30 лет Джаве вот Ну понятно что День рождения джавы - это некая условность потому что там много можно событий притянуть к этому Вот но не суть то есть действительно одно время была довольно тяжёлая история у Сана Sun microsystems который собственно изначальной владелец джавы у них было и финансовые как бы трудности Ну и в итоге они продались оракулу и на это наложило вот такой период когда ресурсов развивать джаву активно Ну просто не было и соответственно Java 6 вышла по-моему в 2006 году и после этого было довольно долгое затишье тогда уже прям обещали что вот-вот мы выпустим лямбды мы над ними работаем Но на самом деле Java 7 вышла только через 5 лет и в ней лямбд не было не успели собственно сделать и Java 8 в которой они наконец-то появились вышло в 14 то есть прошло как бы 8 лет она была на самом деле таким довольно проходным релизом в которой не очень много чего изменилось там появились маленькие синтаксические штуки по сути дела Всё выглядело так будто Ну давайте задели верим хоть что-то чтобы ну совсем совсем пустой не был релиз после этого ну собственно восьмой уже вышел под эгидой оракла и тогда Oracle как бы всерьёз взялся за то чтобы джаву оживлять потому что реально в то время произошёл большой шиф то есть начали появляться другие языки на jvm потому что jvm очень хорошая платформа у неё много плюсов там быстрая безопасная и так далее И при этом на ней в принципе относительно несложно создать свой язык потому что есть как бы общий знаменатель - это байт-код вот компилирует код не очень сложно обычно написать компилятор в байт-код А дальше уже jvm будет твой язык выполнять и как бы появилась Скала появился там GR появился н такой функциональный язык и так далее ещё Некоторое количество кло где-то тогда наверно появился ло да появился появился в то время наверное Руби ещё то есть Руби который компилируется в jvm Ну и было ещё Некоторое количество языков которые какую-то популярность снискали и в основном это было именно из-за того что сама Java стагнировать

писать Типа все там делают в функциональном стиле какие-нибудь преобразования коллекци а вве тебе нужно написать метод на восем строчек чтобы просто там п какой-нибудь с фильтром сделать причём ещё с интерфейсом это ты comp наверно имеешь в виду компараторы Да вот эти супер такие в том числе Да что тебе или аноним анонимный класс нужно реализовать то есть вот это вот всё вот и котлин появился именно в то время и одна из причин была то есть он же был создан в компании jetbrains одна из причин была ну людям просто надоело писать наве они всерьёз рассматривали возможность писать на груви Вот Но к счастью они от этого отказались потому что у груви много других проблем он ну основная проблема то что он динамически типизированный Вот и соответственно решили В итоге делать свой язык ну и он собственно хорошо взлетел именно в то время когда Java стагнировать

релиза проекта проекта лямда когда они лямбды метод референсы Stream API Вот это всё добавили Java прямо стала сильно современнее и многие люди соответственно к ней вернулись вот а они сделали вот этот вот режим rele Train То есть им очень не понравилась эта идея с седьмой двой а потом она же в принципе повторилась с девятой когда Они пытались выпустить модульную систему разделить jdk на модули и соответственно позволить пользователям создавать свои модули с явным объявлением зависимости между ними и так далее Ну и как бы они объявили что это выйдет в девятой Джаве соответственно пока не готова модульная система Девятая Java выйти не могла и это в том числе сдвига сроки релиза то есть и Там возникли проблемы Когда уже было почти всё готово собственно через Java Community process было на голосовании принято что нет в таком виде джаву мы выпускать не будем им пришлось переделывать эту модульную систему и по сути дела Все остальные фичи которые делали параллельно им приходилось ждать всё дольше и дольше Вот они от этого полностью отказались и сказали что мы просто раз в полгода выпускаем новую джаву в марте в сентябре в марте в сентябре и так далее Что готово к текущему релизу то выпустим что не готово на следующий релиз пожалуйста И это позволяет в том числе какие-то маленькие вещи Деливери быстрее как коммьюнити восприняла коммьюнити в начале Мне кажется восприняла несколько настороженно я вот лично я присутствовал при этой истории я это воспринял скептически потому что я думал что ну как бы большая

неповоротливый версие выходит спецификация это прям полный документ для языка и для виртуальной машины кото полностью е описывает действительно апдейт спецификацию к каждому релизу То есть ни разу не было что они там как-то отложили не знаю вот стабильность более-менее нормальная то есть Понятно баги появляются в мажорных версиях но не сказать что их там стало больше как-то Java стала более какой-то глючный от этого в принципе они держат марку Ну и другая фича которая появилась это возможность превью фич то есть до сих пор для джавы обратная совместимость была Священной коровой и это один как бы из столпов Почему Java настолько популярным языком стала и как бы до сих пор все на ней пишут Несмотря на то что кто-то может решить что вот она уже устарела там но тем не менее обратная совместимость - это очень важно что то что ты написал там на Джаве 5 или даже на Джаве 1 оно будет работать или из коробки или там с какими-то минимальными изменениями на там самое новое две 24 которая выйдет вот скоро То есть если какая-то возможность появилась в Джаве её практически никто никогда не убирает чтобы там что-то взяло и исчезло из джавы это очень должны быть веские причины на это Но они сделали такую штуку как превью фичи ээ то есть какая-то возможность которая сделана она в Джаве присутствует но она не финальная сказано что она может измениться может исчезнуть если мы решили что она Ну как плохо сделано э но при этом ей можно пользоваться если там со специальным ключом компилировать и со специальным ключом запускать вот и это позволяет э делать движение быстрее То есть это во-первых позволяет им смелее что-то разрабатывать Потому что ты можешь что-то сделать и не бояться что ты накосячить ты можешь выпустить это в превью и если окажется там дизайн фичи плох можно переделать в следующей версии но при этом превью фичами всё-таки пользуются Энтузиаст какие-нибудь там девелопе адвокаты создатели иде в первую очередь там делают поддержку их и они получают достаточно много фидбека чтобы оценить собственно а не сделали ли мы плохо Вот и это позволяет двигаться быстрее конечно знаешь не могу не заметить что если бы ты не говорил слово Java то посмотрев вот этот кусок который ты сейчас рассказывал очень многие мои слушатели бы сказали О так он про ноду говорит Потому что же прямо Один в один модель J и мне кажется они одни из первых кто так начали делать штамповать эти версии просто там одну за одной И использ кстати у них даже ты не поверишь у них совпадение по-моему есть Вот потому что говоришь сейчас Java тре и нода сейчас дцать третья у них просто релизный циклы совпадают Я не знаю версионирование ноды Вполне возможно что многие Просто берут текущий год и текущий год - это версия вот в Джаве была тоже такая идея Ну просто видно для те кто для тех кто на ноде разрабатывает Если два релиза в год То Java вот буквально в этом году она обгонит годы А так это идея Не новая то есть возьми например убунта какую-нибудь в ней очень давно Лиз Train у них собственно номер версии это как раз год точка месяц там какая-нибудь Да я скорее не про только релизный цикл Я имею в виду вот всё вместе как концепция потому что вот эти флаги да то есть это просто я как человек который учил программирование Да и как бы немножко в каждом из этих миров Я прямо вижу что вот эта часть Она появилась где-то вот там и в джаву потому что ну всё-таки они подольше это берут и чуть попозже начали они это забрали вот то что ты с флагами рассказываешь мы потому что это очень активно используем опять же в ноде А понятно что в той же Джаве это невероятно важно для разработчиков редакторов и разных инструментарием Да чтобы потестить посмотреть совместимость новых фич и так далее да это всё очень классные схемы которые распространяются и даже знаешь что удивительно наоборот вот опять же я там встречался с ребятами там HP мы обсуждали ещё почему-то видно что они многие ещё ну не дошли до этой точки то есть Java которая казалась бы такая неповоротливые большая с таким Legacy с таким сложной короче историей и языки которые попроще в этом плане Ну наверное ресурсов за ними всё-таки поменьше Да они отстают в этом смысле то есть Java сейчас даст жару Мне кажется фору очень многим языкам по тому что они творят Ну на самом деле не факт у джавы всё-таки свой путь который отличается от той же ноды То есть она всё ещё осталось консервативное как язык наверное ближе всего сравнить с си Шарм потому что они в какой-то момент вообще э как бы си Sharp практически родился из джавы Да но потом он пошёл своим путём и вот си Sharp как раз более так динамично развивается То есть то что в Джаве каждый год теперь Две версии не значит что новые фичи на самом деле сильно быстрее стали появляться может быть они несколько быстрее появляются но это не так что там в каждой версии на

вываливаются что практически ничего То есть там очень минимальные изменения именно вот ну там в синтаксисе в семантике языка там в библиотеках что-то поменялось в виртуальной машине что-то поменялось Но в языке почти ничего и они реально вот когда изнутри проект АБЕ проект АБЕ если кто не знает это именно проект который изучает и предлагает новые фичи самого языка джавы то есть новые какие-то синтаксические конструкции и так далее я вот в его экспертной группе слежу за обсуждениями и там реально иногда проходят просто годы перед тем как какая-то фича появится и многие люди с нетерпением такие смотрят Да что вы там сделайте как в шарпе уже сделали Просто скопируйте у них и всё будет нормально вот никто так не делает Они смотрят Как это сделано там в де разных языках смотрят как это будет действовать с существующими фичами джавы повлияет ли это на совместимость иногда что-то выкатывают потом нет Мы так делать не будем нам не нравится то есть в этом плане о всё-таки ещё довольно консервативно осталось но мне кажется это для джавы преимущество ну в конце концов нам не нужно много одинаковых языков правильно Нам нужны языки с разной философией чтобы человек мог выбрать и как раз вот у джавы такая философия что мы делаем медленно но если уж сделаем то сделаем навсегда и эта фича там будет с вами и Вы никуда от неё потом не денетесь я конкретно тебя спрошу Сколько интерполяцию мы ждали а мы её ещё не дождались интерполяция строк - это вообще смешная штука да её выкатили в превью в я сейчас могу соврать потому что вот в какой-то момент я гордился тем что Назови мне фичу джавы и я скажу точно В какой версия Она появилась К сожалению это пропало потому что версий как ты правильно заметил слишком много стало но по-моему в двадцать первой выкатили её в превью и в двадцать второй она ещё была в превью А в двадцать третьей её убрали совсем сказали что мы её переделаем нам не нравится как она выглядит и с тех пор тишина то есть двадцать третьей её нет двадцать четвёртой её нет про двадцать пятую мы пока не знаем так что хотя в принципе На мой взгляд было неплохо могли бы и залить в таком виде честно тебе скажу опять же после опыта вот с другими языками Я понял что Я не стал бы пользоваться интерполяции в Джаве из-за того как она была реализована но в целом знаешь самое забавное по поводу языков Да и вообще по поводу программирования в целом М не могу не заметить очень часто именно самые мелкие вещи такие вот синтаксический сахар являются самым большим предметом баталий подозреваю что интерполяция тоже наверное была такой Темой где там люди срали только в путь там да там много чего происходило а но про интерполяцию у джавы есть вот Краеугольный философский момент то что это не должен быть синтаксический сахар потому что синтаксический сахар Джаве не интересен хотите синтаксический сахар пишите там на питоне на каком-нибудь Java должна быть в первую очередь языком надёжным и безопасным и это самое главное То есть если вы хотите SQL инъекции везде иметь Пожалуйста пишите там на каком-нибудь питоне и интерполитех

возможность делать неправильную интерполяцию Например если ты действительно пытаешься вставить какие-то фрагменты в SQL запрос чтобы они автоматически квоти чтобы инъекция была невозможна в этом месте Вот и это накладывает некоторые усложнение на то как фича с дизайне и как ей пользоваться вот то есть они нарочно пытались её сделать так чтобы простая строковая интерполяция чтобы тебе не хотелось ей пользоваться ляция именно на строках когда у тебя это просто в конкатенацию превращается потому что за этим может стоять там и xxs вора ability и SQL injection И огромное количество других собственно уязвимостей То есть в принципе если начать думать начать разбираться Зачем человеку вообще нужна конкатенация строк то можно прийти к выводу что в большинстве случаев она не так уж и нужна и просто можно написать несколько сложнее код но зато более правильно То есть если это я не знаю если мы хотим HTML собрать из каких-то кусков но наверное нужна какая-то библиотека которая прям билдит тебе из кубиков как бы То есть ты не просто в строку вставляешь подстроки А ты именно вставляешь сразу же элементы дом дерево скажем вот и тогда это будет конечно безопаснее и структурне будет и так далее тоже самое ещё лучше дсч дадада всё правильно тоже самое с Джейсоном как бы то есть строить Джен как строку вставляя в него интерполирование куски это опасно Ну кстати да я так знаешь вспоминаю Какие C скрипты на осях на перле ранний pH нет PHP сразу всё нормально Как раз стало там там инъекций хватает Но я имею в виду что у тебя всё-таки HTML встроен поэтому он хотя бы не как строчка идёт ты нормально с этим можешь работать но и в Джаве тоже да такого кода я насмотрелся с этими плюсами там такие портянки Ну и скалы попытался это решить Ты не поверишь короче практика функционального программирования хрен знает какого года Я открываю значит я тогда читал все дела Я значит открываю и там рассказывают про скалу и там показывают что у тебя xml прямо часть языка и я такой там не надо скобки это вообще как английский язык и помнишь вот это Т пошло и всё вошло в тупик и наверное присмерти сейчас если я не ошибаюсь да это это взрыв мозга конечно то что xml в скале - это прямо First CL cen но когда Скала появилась ээ вероятно была Вера что xml - это будущее все будут на мле xml будет кмм погонять Джейсон тогда ещё Ну никто как бы его не использовал серьёзно вот поэтому э это может быть выглядело в то время хорошим решением вот интересно да что каждый раз когда ты пытаешься смотришь вот эти вот старые Legacy языки они всё сделали неправильно сейчас мы сделаем новый язык и точно всё сделаем правильно и смотришь там через 5-10 лет и понимаешь что блин тогда вот были приняты неправильные решения А тебя не этот не веселит ситуация с тем что вот Скала прошла этот путь наверное кто-то раньше что-то подобное делал всегда кто-то находится Да ну допустим Скала по крайней мере один из популярных языков который реально это сделал люди от этого тащились там по-разному потом относились а потом бум появляется реакт который делает очень похожую штуку и более того это в общем-то сейчас мейнстрим у тебя все а соответственно даже тайпскрипт просто тупо из коробки это поддерживает то фактически часть языка вот а то есть получается вроде как бы Концепция это очень похожая но так смогли её чуть повернуть что до сих пор нету отторжения что это какой-то злой надо идти в другую сторону Я думаю может быть это зависит от экосистемы потому что react он всё-таки для фронтенда а там буквально Ну HTML никто не вытеснил то есть там все продолжают использовать и собственно у тебя постоянно ты работаешь с этим xml деревом Ну HTML дерева вот а Скала она всё-таки для Кэн больше и на кде как-то это уже не сильно важно наверное да хорошо вот у меня про джаву ещё такой вопрос с точки зрения влияния языков Сейчас никто не может отрицать того что влияние большое оказывает на индустрию несколько вещей Go но Go наверное скорее просто как перетягивают ли он что-то Джаве предложит А вот тайпскрипт со своей системой типов конечно навёл шороху Вот скажи пожалуйста Я представляю сколько людей к вам наверное приходит и говорит ребята там вот смотрите в тайпскрипт литеральные типы тра-та-та и намы не нужны Ну ещё что-нибудь в таком духе и есть вот такой тенденция что блин мы отстаём или нет это специфическая штука и нам это не надо и мы вообще своим путём идём но регулярно приходят люди которые хотят расширить систему типов джавы тем или иным способом в том числе Да и указывают что вот смотрите в тайп скрипте так сделано и всё нормально но как я понимаю Java ВС ещ она достаточно консервативна и в том числе любая как бы кардинальная фича такая она приведёт к тому что придётся там переписывать огромное количество инструментов то есть на самом деле сильная сторона джавы как раз в её относительной простоте то что в неё не пихают фичи как не в себя и благодаря этому есть огромное количество там статических анализаторов огромное количество ча связанного свой каких-то там образова процессоров там IDE опять же для джавы они работают гораздо лучше чем для многих других языков в плане там код comp фатон более надёжный и так далее и любая такая вот новая фича она потребует поддержки со всей со всей экосистемы вот поэтому там не особо активно на это смотрят то есть какие-то вещи действительно разумно было бы добавить в Ну вот намети Да метод может возвращать экземпляры того же типа на котором он вызван что если ты вызываешь на под классе то он автоматически возвращает экземпляр под класса это полезно например для каких-нибудь библиотека типа А J она бы была очень рада потому что там у них огромная иерархия вот этих вот стра там не кастов много там из-за этого у них такой F F Bounce То есть каждый тип

[музыка]

параметризованный такой F boun Вот и возвращаемый тип он всегда этот тайп параметр А если бы ты мог просто явно сказать что это всегда просто тот же класс на экземпляре которого мы вызвали этот метод то это бы прямо работало хорошо вот ну и я не знаю с какими-нибудь там стримами например то есть там довольно много методов где Стрим просто возвращает тот же Стрим и если ты например расширяет У меня есть своя библиотека где я Стрим API расширил и мне по сути дела каждый метод стандартного интерфейса нужно переопределить даже если он делает тоже самое что стандартный потому что я уже возвращаю новый тип Я возвращаю свой тип в котом дополнительные методы есть вот я его не

переопределить потому что он бы вернул родительский интерфейс Ну это кстати очень неудобно Да вот невозможность встроить даже такую вещь Вот мне кажется было бы хорошо но никто не хочет ей заниматься Ну потому что непонятно как это Композит со всей остальной системой типов то есть система типов и так сложная она даже в Джаве сложная даже какие-то исследователи доказали что она unsound то есть это означает что ты можешь написать программу на Джаве в которая не будет ни ошибок ни предупреждений компилятора но при запуске этой программы у тебя будет CL Cast Exception и у тебя не будет ни одного каста явного в ней То есть по-хорошему если у тебя нет явных кастов И у тебя нет ни одного варнин и ни одной ошибки то при запуске у тебя не должно быть CL Cast Exception Но люди доказали что это возможно и когда ты добавляешь новую штуку она будет же в вст и снеками и СМИ всякими то есть там очень много взаимодействий которые трудно предсказать в Тап скрипте насколько я понимаю там этих проблем Очень много они просто не заворачиваются корректностью то есть есть вещи которые просто Ну никто не знает как должен вывести п в этом случае потому что собственно спецификации нормальной я юх по

у компилятора но никто не может сказать почему вот почему оно должно быть так то есть может оказаться что кажется что по логики Должен быть другой тип но Ну да там есть ещё довольно забавные моменты но я думаю мне знаешь кажется понятно что там сейчас существующая система меня ощущение всё-таки Когда будут строить новые языки Вот так вот просто такой диванный Эксперт Да мне кажется чтоп конечно его просто не вообрази то есть скорее всего Люди будут смореть на него в юче Когда будут думать про систему типов а не на jav Ну jav наверное тоже но в меньшей степени может быть но с другой стороны появился например Go сильно позже чем появилась Java Наверно я не знаю Был ли тогда уже typescript когда появился го но совершенно точно были и более продвинутые с точки зрения системы типов языки но го наоборот пошёл по пути давайте сделаем максимально простую систему типов чтобы люди просто не парились относительно типов потому что реально когда очень сложная система типов ты конечно когда ты её всю освоишь и в голову из себе помести ты сможешь делать невероятные какие-то очень крутые вещи и у тебя будет статически там доказывать корректность твоего кода во время компиляции но а с другой стороны разработчикам послабее тебя Возможно это будет выносить мозг и они просто не смогут поддерживать твой код не смогут его развивать нормально и в конце концов мы наверное ориентируемся на какой-то средний уровень опять есть там языки вроде хакель в которых очень интересная и мощная система типов но сколько программистов на Хаки или сколько программистов на Джаве порог входа сильно выше это правда Это правда и в этом отношении хорошо что Java действительно такая какая есть я скажу так когда мне приходится писать на Джаве особенно вот знаешь последними улучшениями всё-таки синтактический сахар там добавляется Очень приятно то есть вот по сравнению с тем как это было раньше ещё МБО конечно плохо потому что без ломбок местами грустно но в целом очень красиво и очень знаешь прям Я даже так тебе скажу у меня долгое время было ощущение что я на нём не смогу быть продуктивным но вот последний джавы который я у себя использую например ну классический веб-сервер Да у тебя там обработчики все дела Я понимаю что с двой я могу быть продуктивным на похожем уровне близком там правда ещё зависит того как фрон строить Но это неважно короче Смысл в том что Java сейчас вполне себе выбор стартапов я так считаю и можно фигачит её не только потому что знаешь есть представление только в банк не согласен А сейчас уже можно не только в банк хорошо у меня Мы ещё не закончили Потому что тут ещё есть несколько интересных моментов связанных с двой и с языками вокруг Давай вообще сначала в первую очередь посмотрим вообще Куда идёт Java глобально потому что ну всё-таки синтаксиса тоже бесконечно добавлять нельзя я так понимаю что сейчас очень точечно это делается аккуратненько Да и не то что там каждый раз что-то новое прилетает куда вот мы движемся то есть что будет то есть вот двадцать четвёртое там О'кей какие-то фичи небольшое количество А на горизонте 5 лет 7 лет да то есть как бы есть во-первых общая философия в рамках которой Java двигается и никуда наверное из неё не выйдет это желание сделать язык безопасным желание сделать его выразительным но при этом чтобы давать людям По рукам то есть давать возможность человеку писать код э таким образом чтобы он совершал как можно меньше ошибок и это как раз то что мне нравится в Джаве потому что ну на мой взгляд это самое важное характеристика современного языка уменьшать количество потенциальных ошибок которое человек может сделать на этом языке то есть Мы все знаем да что Java Когда появилась она например сделала некоторые классы ошибок практически невозможными Ну например то что у вас произойдёт в вашем нативном коде там на C или на c+ Plus обращение за пределы массива и это кшт Вашу программу или превратит это в sec в проблему безопасности в Джаве это невозможно потому что вы получите красивое исключение и у вас ничего не развалится то есть всё что направлено на то чтобы сделать язык безопаснее оно может и будет сделано вот например Мне очень нравится история силит типами и с паттерн мачин который у вас полный по типу тогда вы можете сказать что вот у меня интерфейс У него три реализации и других реализаций точно нет и потом вы можете сделать с по объекту типа этого интерфейса написать три кейса на все три реализации и вам не нужно никакого писать дефолта компилятор знает что реализации ровно три значит этот свич полный То есть если появится когда-нибудь четвёртый тип вы его не можете забыть потому что человек когда создаст четвёртый тип ваш свич написанный ранее перестанет корова скажет у ва там чет тип не обработан пожалуста обработайте его что собственно делает язык сильно безопаснее очень очень приятная фича но в этом плане паттерн матчинг в целом будет развиваться то есть там ещё довольно такой длинный roadmap К сожалению сейчас он немножко замедлился потому что мне кажется они все переключились на халу на Vu типы Вот но я думаю что в какой-то момент они вернутся к этому МПУ возможность э Объявлять собственные деконструктор собственные матче чтобы человек мог там Создать какие-то методы как бы это уже не методы А такие матче которые будут позволять автоматически

деконструктор сделать последовательность из нескольких шагов и не пропустить ничего Например если вы хотите в Джаве прочи регулярное выражение вам нужно сделать вызов метода там matcher find и если он прошёл успешно то вы можете доступа к группам можете сделать Match GR можно забыть сделать Mat и сразу обратиться к Mat GR Это

скомпилировать две вещи в определённом порядке вы об этом Надо думать если это будет паттен вы сможете это сделать в один вызов То есть у вас сразу же ваш прочит строку и одновременно из неё извлекут все группы они поместятся в локальные переменные и вам не надо будет собственно это вручную там все эти группы вытаскивать то есть или там тоже самое если optional Present вы сможете сразу же в один вызов достать из него значение вам не придётся изн Get делать цепочку то есть это всё такая история которую мы ждём Ну это кстати тоже получает такие твики как бы разного рода близки к апдейт системы типов но там где типа не можем систему типов поменять Давайте поменяем конструкцию поменяем там опять же какие-то подходы потому что то что ты рассказываешь тут есть Прямо целый набор вещей которые можно сказать да там например от ошибок дизайна когда у тебя йф объект с кми и поэтому у тебя проблема то есть её в принципе изначально Если бы спроектировали люди которые думали о состоянии они бы наверное по-другому просто спроектировали да А вот когда ты про интерфейсы сказал я сразу знаешь про что подумал это же классическая история про Expression problem Да когда у тебя либо полиморфизм реализует либо вот собственно в одном месте эти интерфейсы потому что это по сути противоречит Саб тайпинг Вот это концепция а то от чего в Джаве стараются уйти в смысле я имею в виду вот от таких свиче кейсов как раз собственно у нас же для этого интерфейс и есть но там довольно интересно это если копать Это я скорее не для тебя я для ребят рассказываю просто Кто не знает это очень классная вещь Прочитайте про Expression problem Потому что м это интересная концепция связаная с тем как мы организуем код либо по раскладываем по объектам либо вот через свич кейсы у вас в одном случае одни преимущества в другом случае другие преимущества но о чём я не могу сразу не подумать что такая концепция с одной стороны дают тебе гарантию как вот ты правильно сказал Да и проверяет и в принципе кстати люди на других языках с продвинутыми системами типами они к этому Привыкли что у тебя действительно он либо дефолт требует либо не требует зная там нужно тебе что-то или не нужно то есть это на самом деле сейчас в современном мире Это довольно привычная вещь но там прикол в том что если у тебя есть динамическое расширение Ну допустим ты не сам свой код дописывай интерфейс появился А ты отчуждать появиться новые ну расширения то такой подход использовать нельзя потому что они просто физически не смогут

докинути а не язык это всё делается на уровне виртуальной машины то есть вот когда в котлине появились силит типы они появились раньше но ты мог объявить там какой-нибудь сик у него сделать там энное количество наследников и если ты снаружи добавишь нового наследника то котлино ский компилятор гнётся но в Джаве тебе ничего не мешает в ран тайме там Создать класс лоадера сделать ло класс и соответственно в ран тайме сгенерировать нового наследника То есть тебе никто не запретит это сделать а если когда они появились в Джаве реально то там прямо модификатор силит у тебя в байт коде и виртуальная машина тебе даст по рукам просто всё у тебя объявлены все е одного неви поэтому тут уровень безопасности немножко другой ты мне одну тему очень напомнил интересную которая меня всегда волновала это немножко офтоп ну то есть про язык но такое более глубокое вот когда ты про это говоришь с одной стороны безопасность другой стоны знаешь что меня всегда напрягало меня напрягало когда вот Fin например да меня честно эта концепция бесит потому что представление создателей библиотек о том нужно ли делать что-то с их классами или нет Ну я считаю это вообще не их дело хочу ли я что-то делать с классами или нет потому что Сколько раз в своей жизни касаемо любых языков я натыкался на то что создатели библиотек значит в попытке сделать так чтобы кто-то что-то делал правильно у них например внутри баги Ну понимаешь в Всякое бывает да проблемы они так тебя ограничивают что ты не можешь залезть внутрь для того чтобы что-то изменить и ты из-за этого страдаешь Вот это только я такой проблемой сталкиваюсь или существует такая дилемма в сообществе к файлам И вообще к таким вот подходам когда вот мы запрещаем всё больше никак Вот это это кстати интересная тема потому что как раз путь джавы в этом плане он он противоречит тому что ты хочешь то есть Java наоборот идёт Всё больше к тому чтобы всё запретить что человек явно не разрешил чтобы собственно платформу делать более безопасной то есть они Запрещают ансе он всё больше и больше кейти и удаляется и В новых версиях вы не можете уже там залезть грязным грязными способами там достать Да достать приватное поле или тем более изменить финальное поле в более новых версиях они даже запретят G по дефолту То есть вы должны будете явно о говорить что вот этот модуль я ему разрешаю нативный код исполнять и соответственно Это последняя такая дыра То есть через нативный код понятно всё что угодно можно сделать вот и они его тоже будут запрещать основная идея джавы как раз да что автор API он как бы царь и Бог для этого API он имеет право сказать если он сказал Final то всё вы не имеете права если он сказал йт вы туда грязными ручками не лезете Если у вас есть какие-то возражение вы идёте к автору API и разговариваете с ним либо форка ете его библиотеку либо предлагаете ему патч но вы решаете этот вопрос легально законным способом а не там

огромная дискуссия в Джаве вот Многие не понимают этой философии и говорят Почему в Джаве до сих пор нет функции когда мы можем взять там стандартный класс и снаружи внешним образом объявить А вот в классе STR у нас будет ещё какой-нибудь метод leftpad например и потом Человек удобно будет на строке вызывать точка Left вот вот это как раз идт против философии и вве скорее всего функции не появится потому что это фактически означает что вы API другого класса который создатель этого класса аккуратно Ну надеемся что аккуратно вдумчиво надеемся что вдумчиво с дизайним вы берёте и грязными руками в этот API доки ды ете то что вы сами захотели и это против философии джавы про экстеншн Вообще вопросов нет согласен что тут вопрос действительно серьёзный То есть просто так расширить а потом как это аукнется везде да и это очень Неожиданное поведение вообще но вопросов согласен подход но когда те Запрещают наследоваться Ну по-моему это перебор реально знаешь вот самый главный кейс это постоянные какие-то баги ошибки изменения которые тебе прямо здесь прямо сейчас надо пофиксить И тебе не дают это сделать Ну наследование такая штука во-первых наследоваться ну в основном для фиксов то есть не в смысле я расширяю функциональность реально вот бывает часто что либо вот надо её пофиксить потому что что-то там не так и у тебя нет физической возможности рть остатся самое правильное На мой взгляд То есть если если есть библиотека с которой у тебя проблемы форка и тебе не придётся никакие грязные Хаки делать У меня такой опыт вполне есть то есть часто бывает что какая-то известная библиотека пытаешься им принести патч Потому что ты считаешь что она от этого выиграет они не хотят потому что этот патч он покрывает твой юзкейс и может быть ты единственный человек которому это надо они не хотят это поддерживать Ну ладно делаешь форк накладываешь свой па публику ешь в цен работаешь со своим форком это не великая проблема как бы поддерживать его некоторые дополнительные ресурсы Но это всё равно лучше чем грязными руками наследоваться потому что вот с этим у нас как раз много проблем то есть я часто видел что разрешаешь людям писать плагины к своему коду они пишут сторонние плагины Ты заранее не подумал объявил классы не фильми люди от них унаследовали и вот когда Лагин вызывает твой метод А ты хочешь что-то отф у тебя довольно много возможностей ты можешь там метод запретить вызвать какое-нибудь другое место или ещё что-то там Но когда человек унаследовал от твоего класса то пиши про пало очень сложно что-то зафак чтобы не сломать этого человека либо ты просто говоришь а этот плагин Бог с ним перепишут но помоему в этом случае лучше сразу зать людям то что ты ВС равно через некоторое время сломаешь ребят обязательно кто до этого места дослушал и так интересуется двой как вот мы сейчас Копаем напишите что вы по этому думаете потому что Понятно В одном случае У вас одни преимущества понятно что в другим тут в другом случае другие преимущ То есть тут нет идеального решения то есть либо ограничиваем разработчиков они страдают либо ограничиваем создателе pii и они страдают то есть кто-то страдать будет в любом случае короче Напишите Что вы об этом думаете я как чисто потребитель за отмену Тагир как человек который думает больше про экосистему он за то чтобы они были Вот это довольно интересно да хорошо а вот с точки зрения экосистемы Давай такой вытекающий из этого разговор у нас есть Ладно со слой наверное даже обсуждать особо нечего но она слишком сложная Академическая Сейчас особо никто не поддерживает да и смысла наверное нет Да она вот ушла со сцены на сцене У нас остался котлин при этом два с момента когда котлин появился сильно вырос и Вот я например для себя лично не вижу смысла писать на котлине если я под Android не разрабатываю там ну там скорее всего это просто как стандарт у тебя сейчас такая ситуация когда надо ты согласен со мной нет я думаю как многие разработчики нет то есть будущее котлино будущее вот этих всех обёрток и связь с двой не потерял не теряет ли э актуальность всё во-первых у котлина тоже свой путь и своя философия она отличается от философии всё-таки отдельный язык и может оказаться что в каких-то вещах он вам всё-таки нужен Я сам вообще большой сторонник джавы Хотя мне приходится писать на котлине и я уважаю котлин Это хороший язык он очень как бы современный он решил многие проблемы джавы его создатели вообще большие Молодцы что они его сделали таким популярным потому что далеко не каждому языку удаётся взлететь настолько как котлино вот но при этом я как бы не являюсь Что называется фан боем котлина и я новый код если у меня есть выбор писать на котлине или на Джаве я пишу на Джаве в том числе потому что Тулин лучше потому что Java проще как язык и Ну некоторые вещи мне просто больше нравятся Может быть потому что они более явные чтоли в Джаве но я также могу отметить объективные преимущества котлина которые в Джаве Ну по которым врядли догонит в ближайшие по край мере годы это естественно то есть в котлине Может ли быть в типе на или нет это включено в систему типов и при этом поддержано большим количеством опять же синтаксического сахара это и операторы вопросик точка всякие операторы вопросик двоеточия и так далее в Джаве лет п назад я бы точно сказал это невозможно никогда не будет

в Яре

потому что проект ти он прил к пониманию что без явного объявления набили в программе они далеко не уедут и скорее всего по крайней мере для типов сперва появится возможность Объявлять возможен на в этой переменной или нет а потом Возможно это расширится и для других

шаг ВД для вот тут конечно большие проблемы Что есть огромная экосистема Но это будет примерно тоже самое как дженерики которые появились вве 1.5 то есть было огромное количество кода написанное с типами но ничего Приехали и типы сейчас уже очень редко встречаются по сути дела текущие типы в которых на не объявлено они станут такими же типами с

точки все очень хотят потому чтоп всех забрали Да биллион долла йк всё такое действительно сейчас также сравнительно Недавно вышел новый проект J specify по спецификации аннотаций для определения набили Ну и Хотя попыток было очень много и до этого это пожалуй такой наиболее вдумчивый наиболее последовательный проект и сейчас его поддерживает как бы это в процессе идт поддерживает то есть станет весьма популярным Я думаю вот эти аннотации от jsfy которые позволят сказать что у меня по дефолту в этом пакете все типы Note Now Кроме тех что я специально помет как na Это станет более популярным стилем программирования то есть люди будут э как бы больше контролировать налы в Джаве а потом тогда уже если у них будет такой про аннотированный код его будет гораздо проще перевести если в Джаве как в языке появится набити вот а Но это как бы да это большая история про это можно долго говорить но двигаемся дальше другая вещь которая мне нравится в котлине это в систему типов внесена мутабельность коллекций с мутабельность коллекций в Джаве тоже такая большая и больная история Потому что есть коллекции которые изменяемые есть коллекции которые неизменяемые есть коллекции которые частично изменяемые например есть коллекции из которых можно только удалять но не добавлять элементы или есть коллекции в которых можно список в котором можно заменить Эмен можно отсортировать список но изменить размер нельзя то есть нельзя добавить или удалить звучит как фан Да звучит как фа есть есть например коллекции которые скажем есть такая штука Как Collection пустой список А есть и это тоже пустой список они оба неизменяемые но например на Collection emp можно вызвать метод который ничего не делает потому что это пустой список его отсортировать это ничего на нём Также можно вызвать кли очистить он тоже ничего не делает И эти методы просто успешно отрабатывают а если на результате list of вызвать те же самые методы тоже на пустом неизменяемой списке то они кинут Exception Вот и куча Вот таких вот нестыковок вообще в стандартной библиотеке они просто взрывают мозг то есть когда ты начинаешь думать про коллекции Ну как бы есть Понятно правила большого пальца Если тебе там из API метода Пришла коллекция Считай что она неизменяемая потому что если ты решишь что она изменяемая ты ищешь себе проблемы Даже если она реально окажется изменяемой они могут Завтра поменять реализацию сделать её неизменяемый Но в котлине это есть в системе типов у них есть отдельно там лист и mutable лист и по дефолту у тебя у листа просто нет методов которые позволяют То есть ты у листа точка Add не можешь вы я понял структуру Да да это прекрасно я за иму табельный коллекции Да ну и другая штука которая сразу приходит в голову - это вся история котле с рутина методами То есть у них свой подход к конкурентному программирования и подход довольно успешный Java делает подобную штуку с сей Ja У нас появился Project Когда вы можете делать виртуальные треды То есть можно легко создать Там миллион трев в своей программе и ей не станет Плохо от этого И вы можете писать такой линейный код и в точках наме обще ваш виртуальный тред автоматически запаркую физический тред освободится всё это будет работать но в котлине вся эта штука она сделана более гибко и вы можете больших вещей добиться скажем с помощью сопен функций То есть вы можете явно выбирать В какой тред пул в каких треда Какие вещи должны производиться там это очень важно Например если у вас какой-нибудь UI код перемещается с Бине логикой То есть вы можете что-то посчитать в бэкграунд треде потом что-то нарен дери в UI треде спросить У пользователя дальше что-то снова посчитать что-то снова спросить У пользователя это всё будет линейный код без всяких колков вот и всё будет в правильных треда выполняться то есть такую штуку в Джаве сделать наверное не так-то просто вот но есть ещё штуки синхронность Да за пределами языка это например то что котлин у них есть большая история multiplatform То есть если Java - это всё-таки jvm можно компилировать javu не под jvm Но это такой достаточно ограниченный опыт то cotl делает большую ставку на это у них есть cotl multiplatform вы можете писать Одно приложение которое у вас будет на Android iOS Web Desktop работать с вопросами потому что это сейчас всё в активной разработке а там вот сейчас библиотека compos мультф которая собственно UI делает для котли на кроссплатформенный который собственно на Android на iOS на вебе и на десктопе у вас будет один раз написанный uui работать одновременно это интересная очень классная история и если у вас котлен платформ приложения то Ну на Джаве вы не можете его писать Ну это кстати я обязательно буду проговаривать с кем-нибудь Надеюсь кто-нибудь из котлина посмотрит Наше видео но я в любом случае кого-то из разработчиков позову и мы прямо подробно подробно это обсудим единственное наверное там ещё много мелочей конечно то есть дель Ну таки боль синтетический сахар Да я когда с котлино знакомился Первое что я сделал это Ясный роутинг там написал мне очень понравилось например имплементация ДС в Руби намного более хитрая чем это сделано в котлине где это просто такой си токсический сахар над обычными лямда это очень классная концепция мне прямо я безумно был рад что можно так просто без заморочки всё это писать но есть ещё один моменти маленький который интересен всё-таки котлин же ещё знаешь вот как эппловские всякие штуки в мелочах Да у тебя там всякие есть элементи которые вот прям идеальный дизайн всё всё Красиво классно за что его любят вот вещи вокруг Лам Бока да вот Казалось бы ну да у нас генерация кода там редактор тебе много что делает но всё равно мне например без ламка на Джаве неприятно писать в котле у тебя там дата классы например есть там ну можно что-то ещё пошире посмотреть Это конечно не Ключевая история но всё же нету в Джаве вообще такой мысли о том что ну как-то внутрь это воткнуть или всё равно считаем что типа Гене всё ребят у вас редактор всё за вас делает вам не надо сокращать пытаться код во-первых есть более того много что внутрь воткнули и вообще есть довольно много историй последние годы когда большие проекты отказываются от мбокани прям выкидывают ломбок из зависимости переписывают весь код у Лам Бока есть классная фича это де ломбок То есть у них в комплекте идёт собственно программа которая позволяет от лом Бока избавиться и это очень классно потому что это позволяет действительно его легко избавиться вот ну дата классы же стрёмные в Джаве Они не работают нормально не скажи Ну во-первых да во-первых появились Вары То есть вы можете неявно Объявлять тип локальных переменных это фича которая была в мке то есть соответственно эта фича в мке становится не очень нужна Вот и появились рекорды рекорды - это собственно Ну то что ты называешь дата классами то что в котлине дата классы А в ломке они по-моему аннотации обозначаются у есть ограничение главное То что они италь то есть в них все поля и люди которые Привыкли что у них там Гетеры какие-нибудь какие-нибудь эти дто объекты которые там птся с базой данных вот в таком стиле им эти рекорды не очень помогают потому что они не могут его изменить Вот Но если вы какую-нибудь бизнес имму об купе сили тайпа что вам собственно реды плю сили typ вам дают алгебраические типы данных И это прям нереально круто даёт возможность моделировать ваш домен и я эти рекорды сейчас объявляю просто пачками в два коде то есть буквально там у меня есть метод Мне нужно вернуть два значения из него Я объявляю новый рекорд на два значения Это одна строчка кода и всё у меня два поля конструктор Гетеры equ STR всё автоматом есть мне в этом плане никакой ломк не нужен а если человеку Понадобился сер Ну может Стоит подумать может ему и не нужен изменяемый объект Может проще сделать вивер который ему новую копию этого объекта вернёт Вот и тогда собственно можно и да я прекрасно понимаю почему те рекорды хорошо у тебя твоя экосистема действительно ОТВ же от ба тея много-то два значения три как ты правильно говоришь Тут всё понятно есть просто особенность наверное с библиотеками с которой я сталкивался Я просто последний раз писал какое-то время назад поэтому могу сейчас тупанул был что я в какой-то момент попытался в д

тошкентли что там короче внутри когда у тебя код генерис там появляется наследование и у меня рекорды все в тыкву превратились потому что они его не поддерживают то есть там нету ни сеттеры вот ни изменяемости изменяемости там нет Там как бы при инициализации всё происходит но отсутствие наследования убирает как он ма абстракт или с что-то другое Я короче не помню короче какой-то из инструментов перестаёт работать я понял да это может кстати и помешать каким-нибудь МОК библиотекам потому что они тоже очень любят что-то от наследовать создать Ну как бы МОК вашего объекта и все методы переопределить и там возвращать то что ты сказал Вот но да это собственно сломает основную идею то есть идея рекордов - это данные ничего кроме данных а если Ты позволяешь наследовать то ты уже не контролируешь потому что в наследнике можно объявить изменяемое поле и всё твоя идея превратилась назад в тыкву Вот Но с другой стороны концепция Рекорда как раз в том что он

деконструктор конструктор который создаёт его из полей и всегда есть

соно на этой на этом протоколе строятся там и сериализации там какой-нибудь Джексон в него прикрутил и стандартная двоя сериализация строится и любая библиотека которая Ну например хочет что-то замокать или хочет как-то работать с этим рекордом ей наоборот должно быть проще то есть она должна просто специальным образом естественно поддержать эти рекорды но вы можете через рефлекшн всегда узнать что это у вас рекорд в руках и вы всегда его можете разобрать на кусочки забрать из акцессорные и собрать заново вызвав канонический конструктор более того даже требуется по спецификации джавы чтобы и канонический конструктор и

акцессорный рекорд с не публичным каноническим конструктором вы обязаны предоставить возможность его создать любому человеку который его видит и поэтому на самом деле с рекордами проще Просто к ним нужно адаптировать библиотеку свою Ну либо адаптировать либо Мне кажется всё равно получается как ни крути количество кейсов в этом плане ограниченное но теперь мы скажем убеждаемся что это бай дизайн то есть не надо думать что это реализация дата классов то есть рекорды решают часть задач которые решают в том числе дата классы но всё-таки они их не замена поэтому Ну в моём случае к всё-таки продолжает использоваться как ни крути то есть есть вещи где как ну ну блин удобно не хочу я генерировать миллионы этих Вот это всё так хорошо Кстати а выкидывают Почему ты имеешь то что просто нативные инструменты сейчас плюс-минус позволяют всё это делать а сете Гетеры Ну на генерис Да дело в том что МК - это по большому счёту Хак потому что он выглядит Как annotation процессор то есть annotation процессор - это легальная возможность расширять jav Вы можете сделать как бы к Java компилятор плагин и реагировать на какие-то аннотации и генерировать какой-то код в онлайне Это всё возможно но МК идёт Дальше он делает то что annotation процессором делать нельзя он реально лезет в внутренности Java jav C компилятора лезет в его структуры там что-то внутри него подменяет чтобы он компилировать по-другому Ваш код вот и это всё очень такое очень хрупкое то есть там с апдейта компилятора у вас ломбок может сломаться а я уж не говорю там про поддержку в ID в Intell ID вот J brains Молодцы они довольно долго работали вместе с создателем МК плагина а потом вообще как бы договорились и ну грубо говоря купили его этот МК плагин он сейчас часть Intell как бы как comunity Edition как вот основной поставки То есть это всё ещё отдельный плагин но он собирается вместе он тестируется вместе как бы и вы не можете сделать ломбок как бы он то сверху поддержки джавы в IDE Вы должны залезть в саму IDE и предоставить какие-то ручки поставить какие-то штуки к которым можно подключиться то есть там очень много взаимодействия для этого я смотрел как МК плагин реализован например для эклипса и там всё страшно он реально лезет внутрь эклипсо ских классов тоже грязным рефлекшн там что-то подменяет потому что иначе ну у вас просто будет всё Не всё неправильно вы напишите вызов метода а его в сортах нету потому что МК его генерирует у вас код будет красный и МК плагин там тоже очень страшно выглядит любые изменения внутри реализации джавы внутри эклипса они сломают и придётся всё переделывать можно Знаешь такое хочется мне тебе одну идею вкинуться ты скорее всего скажешь да об этом думали мне интересно я знаю что си шарпе есть Господи есть какое-то название у классов когда ты один класс тупо можешь в разных файлах определить Да парча клас на что-то Типа такого Да и я сначала когда первый раз про это услышал Ну знаешь такой типа ха-ха-ха Microsoft что там какую-то фигню сделали А потом мне объяснили говорят Слушай Кирилл ну ты забываешь это языки с генерацией То есть ты таким образом можешь просто на фоне на генерить то что тебе не надо самому писать я после этого подумал блин А реально это гениальная мысль вообще-то и вот конкретно в данном случае она бы полностью решила проблему То есть у тебя автоматика не просто работает у тебя ещё и лежит это где-то там внутри через како там Ай процессор Да как угодно и всё пожалуйста вот у тебя дополнение Как ты думаешь Хорошая идея нет а это тоже мне кажется идёт немножко против э как бы основной философии джавы то есть они всё-таки не хотят разделять Ну типа класс у тебя класс он вот у него начало вот конец Ты прочитал файл ты всё про этот класс знаешь и то что он ещё где-то там до определён это очень сильно усложнит плюс в Джаве ещё есть такая же штука Как раздельная компиляция Ты можешь по большому счёту каждый файл скомпилировать Независимо и у тебя получается файл и ты засти приложение в сть фа бы сгенерировано отдельно потом что-то перем что-то неком и это приложение оно может в принципе взлететь и они всё это сильно усложнять но процессоры здесь на самом деле спасают Если тебе отломка нужен только кажется есть попроще Решение вот по-моему есть библиотека от которая делает прино тоже самое она вот решает конкретную задачу с классами и без хаков это действительно честный annotation процессор вот может быть стоит посмотреть в эту сторону если просто МК - это тоже такая странная штука они в какой-то момент старались туда запихнуть очень много фич там даже extension методы есть это jquery вообще какой-то в мире д во вово да типа Давайте вот всё что нам придёт в голову мы запи в ЛОК все расширения джавы которые мы которое нам хочется и как-то не было вот такого критического подхода типа Ну может быть это нам не надо Может люди без этого обойдутся Вот то есть такой как-то вот такой мысли не но опять же я с разработчиками нка не общался я не могу знать наверняка что у них было в голове но выглядит это так что там слишком много каких-то вещей которые может быть и не стоило туда пихать Слушай эволюцион - это абсолютно нормальный процесс То есть когда ты что-то делаешь на тебя всё больше замыкаются ты всё больше хочешь делать Я считаю что это просто вообще естественная природа так же как блогер кто угодно начинает что-то делать Да он делает всё чтобы там привлекать другой вопрос что потом Ну появляется опыт То есть это такой необходимая часть ветка эволюции которая перешагивает потому что это плюс-минус всё это проходили во всех языках в том или ином виде вон возьми ла Даш тот же самый в дсе а он же какую-то безумную популярность имел он конечно уже круче чем двери потому что всё-таки это выделенная штука но уже половина методов там заехала в сам JavaScript соответственно lamb бок тоже дал Ну как бы многое Да даже знаешь то что люди им пользуются вообще вот мы про него столько с тобой говорим Есть же такая вещь что как правило те кто там стоят вот вот на входе на воротах типа не входи чтобы всё было правильно вот как ты постоянно говоришь там Безопасность тра-та-та это же тоже немножко перекос всегда потому что очень много людей которые блин модная современная Молодёжная хочу и поэтому такие проекты нужны они позволяют как бы так посмотреть думать Блин ну если там Миллионы людей в это про это думают может быть Ну имеет смысл как-то адаптироваться да это ты абсолютно правильные вещи говоришь и часто были истории что экосистема существующая она повлияла на дизайн самого языка вот совершенно точно библиотека гуава которая пыталась привнести функциональный стиль ещё там в jav 6 jav 7 это было такое превозмогание потому что у вас лямпы то есть нужно было анонимные функции писать но тем не менее в ней было много вот таких вот методов там для преобразования коллекций и так далее Она очень большое влияние оказала на дизайн библиотеки стримов и в том числе один из основных авторов этой библиотеки Кевин или он он был в экспертной группе проекта лямда и он привнёс вот хорошие идеи из гуавы в джаву а плохие идеи соответственно не принёс то есть собственно отработали так сказать на сторонние библиотеке относительно безопасно вот или та же самое был замечательный проект yoda Time библиотека для поддержки для работы с датой и временем потому что то что было в Джаве до восьмой джавы Ну смотреть без слёз невозможно причём был там Java у Date из первой джавы потом они попытались в пятой Джаве внести календарь чтобы сделать лучше и тоже сделали плохо может быть даже ещё хуже сделали Это сумасшедшая история Вот и вот в восьмой Джаве просто был взят за основу вот этот вот Y Time сторонняя библиотека сделанная сторонними людьми и её автор Стивен он один из как бы основных авторов Java Time который уже стал стандартом то есть тоже история что то что было просто сторонняя библиотека оно в очень близком виде вошло в Стандарт Кстати у этой истории есть продолжение то есть вот это большая тема с датами в Джаве которая длилось столько лет Да а соответственно Есть нормальная реализация ты знаешь что я не уверен на 100% но я уверен что это вот примерно оттуда же а сейчас в жесе внедряется нормальная работа с датами и я прямо уверен что они брали пример как jav она temporal называется что-то такое Вполне может быть потому что опять же в двой тоже не всё хорошо тоже есть за что критиковать но очень многие вещи сделаны Правильно Потому что их до этого обкатать сильно упариванием все подводные камни и так далее Ой жава конечно много начудила с её вот этой Мы привнесли ооп мутабельность и конечно это всегда страшная история когда у тебя там объект не в том порядке методы что-то там поменял это конечно приводит к большим проблемам это даже видно на примере многих библиотек работающими что все библиотеки которые делали старались делать максимально мутабельные потому что там в ад Это превращалось если ты начинаешь объектами рулить и я не просто так про это говорю Потому что мне хочется Сейчас мы перейдём к твоей книге потому что она как раз вытекает там вот ошибки вот то что мы сейчас обсуждали Но есть один маленький нюанс который мне хочется обсудить есть довольно смешная штука Java Когда появилась она у неё было некое позиционирование сильная которая ей помогала это автоматическое управление памятью да Один из таких ключевых аспектов второе типа ооп ооп оп вот ооп Понятное дело что это ооп никакого отношения к смал толку не имеет И вообще противоречит ему во многом тому что там Ланке Я просто Этой темой очень много там и увлекался и всем остальным там может бесконечно говорить но меня интересует кое-что другое значит когда к нам приходят наставники на Хех сете преподавать джаву и делают например какие-то доклады я знаешь чему удивлялся Каждый раз когда им нужно выступать с докладом преимущество джавы у меня ощущение что комьюнити Java замерла немножко в прошлом именно в плане объяснения то есть они начинают и есть ещё такая особенность Что именно в Джаве Я не знаю почему может быть это моя выборка но я за свою коммерческую жизнь вижу что именно двист очень сильно зациклены на своей экосистеме то есть они вот почему-то намного меньше видят других языков чем другие ребята вот у меня есть такое как бы наблюдение моё наблюдение и из-за этого Они часто Когда рассказывают новичкам про джаву знаешь что они рассказывают у нас автоматическая сборка мусора и у нас ооп Я говорю ребят ооп сейчас во-первых у всех во-вторых часто оно гораздо более продвинутое да у вас там в кло же есть

ка сечас идеология у джавы в этом смысле я думаю это вопрос к людям а не вопрос к Джаве то что они как бы застряли немножко в прошлом Ну действительно у джавы как бы у неё несколько снизилась популярность понятно что появились какие-то более новые языки на которых люди хотят писать всё-таки 30 лет не шутка и это возможно привело к тому что какое-то произошло снижение монументальных трудов в по Джаве Ну то есть есть вот извест книжки типа там eff Java например да вот или там какие-нибудь практики там программирования там что-нибудь паттерны Какие вот то что было написано вот в те времена когда Java прямо была на взлёте когда она была на таком на хайпе вот и это это вот сейчас считается классикой и возможно люди до сих пор вот как бы ссылаются на них Потому что чего-то другого что стало классикой и вот сейчас его Ну всё-таки наверное не появилось то есть конечно выходят новые книжки пожа регулярно но часто это вот не что-то такое монументальное на что вот прям все двист обязаны это прочитать и вот сейчас всё это наша Библия но я лет пять наверное в у нас такой был компьютер Science цента в России и я там преподавал джаву последний год это был наверное двадцать второ Да в двадцать втором Я закончил преподавать лекции Кстати на Ютюбе есть бесплатно абсолютно Вы можете найти я не помню были ли они за последний год преподавания но за предпоследний наверняка были Ты про шный Да центр нене не это не шный цент его делали вместе Яндек brains он назывался compter Science Cent csc у него бы да я просто помнишь их несколько было там был один от mailru и там от вас да там у Яндекса был шат школа анализа данных и вот как бы мы с ними сотрудничали в какой-то мере Короче у меня был курс пове для начинающих то есть для людей которые программисты они с программированием в принципе знакомы но с двой не знакомы Вот и я естественно на первой лекции должен был как-то прорекламировать А зачем вам вообще вот там я не знаю в двадцать первом двадцать втором году начинать изучать джаву и я какие-то плюсы приводил вот ну и я старался не говорить про вот это вот что она там оп или гарбич коллектор Я в первую очередь говорил что это безопасный язык Я говорил про то что он очень стабильный и вам не придётся париться что там через полгода вышла новая версия и вы можете вообще её проигнорировать потому что там скорее всего ничего не изменилось и то что вы пишите сейчас даже вот используя знания с Java 8 которые вышло уже 11 лет назад Они до сих пор довольно-таки актуальны Вот и Если уж Завра что-то делает то Она старается это делать хорошо Вот Но с другой стороны это простой язык то есть в ней очень мало фич по сравнению там с шарком по сравнению с котлино по сравнению с какими-то другими языками типа скалы и соотвественно её в состоянии её можно выучить полностью как язык понятно что вы не выучите всей библиотеке ОТП Да в отличие от плюсов например плюсы невозможно выучить полностью совершенно верно Вот и соответственно вы сможете понимать любой код на Джаве то есть сколько бы вы не изучали плюсы к вам придёт человек который пишет в каком-нибудь другом стиле используя другие концепции или человек там на скале и он всё настолько

обмазался таки есть относительно ограниченное количество стилей программирования и есть некий общий знаменатель Как правильно писать на Джаве поэтому вы легко разберётесь в любом коде в Джаве отличный Тулин в Джаве многие вещи вообще появились первыми например там мутационной тестирование в Джаве было одно из первых Там многие стати ализа лучше всего сделаны многие там штуки связанные с факторингом кода с каким-то его анализом кода тут справедливости ради Я не могу не добавить что с одной стороны технически ты прав но есть ещё и другие моменты Java всё-таки у неё шаблонного кода достаточно много всегда было и сейчас его конечно меньше Но он есть Поэтому генерация просто там необходимое свойство и наверное Ну опять же у тебя очень многие языки е Ты просто в основном про статику говоришь А в динамике у тебя много Мета программирования Да которые не требуют генерации например не требуют каких-то таких вещей поэтому Там просто местами где-то попроще и не надо вот а в Джаве очень надо и в Джаве собственно наверное один из немногих языков Таких вот где Без редактора ты вообще букашка Можно наверное так сказать Ну кстати это интересно потому что часто бывает что я хочу какой-нибудь СМЛ набросать на Джаве там что-нибудь быстренько проверить какую-то идею и Я часто это делаю в фаре наверное не все знают но есть такой фар менеджер под Винду и в нём есть редактор Вот и если вы там пишите на Джаве то у вас будет только базовая подсветка синтаксиса и ничего больше никакого кошена ничего но как бы если я хочу

однофазний то есть с каждым годом это делать всё проще они сделали sle Source фай что вам не нужно sle программы что вам не нужно компилировать Вы просто пишете Java и имя Java файла вам не нужно создавать клас файл он сразу запускается Как с питоном там и не могу не добавить большие молодцы потому что я это сразу начал использовать в курсе для объяснения новичкам Но вот и J Shell собственно мы начали использовать активно но описание типа когда Помнишь там была история что ну для новичков Давайте ещё определение класса уберём и просто сделаем функцию что вот прямо функцию описал и можно запускать да а это нини Поче пото это отличается от всего что те бук сразу на чеку показывать правильный вариант иначе он не сможет ни читать код ни книжки ничего остального поэтому получается с одной стороны вещии исторические некоторые уже не убрать Ну вскрытие покажет но мне кажется То есть как бы эта штука слишком новая Ну да в современной Джаве Вы можете объявить и кла то есть без что-то там вы можете также не писать ST Вы можете не Объявлять AR в методе Main если они Вам не нужны то есть по факту вам нужно написать vo Main скобочки скобочки и дальше вы пишете свою и это позволяет не объяснять людям концепцию классов с самого начала до тех пор пока она не потребуется я опять же я вот прямо сейчас не преподаю но в Линг листе люди которые преподают джаву они очень позитивно отзывались об этом об этих возможностях А в самых новых версиях там ещ явилось импорт модулей и он работает автоматически для implicit классов То есть фактически в implicit клас у вас импортируется весь jav Base и значит что например Вы можете писать list Вы можете писать там какой-нибудь eo Exception там files и вам не нужно ни одного ипор смен написать то есть у вас всё это автоматически будет работать это тоже прикольная штука Ты не поверишь Я пиш я вообще вимер такой со стажем понят что там эпишкола

и конечно Ну как минимум Автоимпорт - это очень важно потому что вот ты когда в фаре пишешь если что-то надо импортную как ты делаешь Я терпеть просто эту процедуру не могу и очень важно чтобы редактор это делал это наверное базовое что вот минимально даёт возможность писать Ну помимо подсветки какого-то там базового автокомплит Ну ладно В принципе наверное по редакторам особо копать не будем по разным причинам да Давай пойдём дальше вот твоя книжка она очень соприкасается с тем что мы говорили По поводу безопасности она у тебя называется там ошибок Да

кото Да вот честно скажу с точки зрения такого вот бум чтобы все захотели купить она не звучит да Но мне интересно то есть что это за 100 таких ошибок и на какой уровень рассчитана эта книга что вот прям чтобы книжку хотелось прочитать Ну вообще как бы она типа для широкого Круга читателей То есть я больше ориентируюсь на idle разработчиков которые уже джаву знают какой-то с ней имеют опыт но как бы они не настолько продвинутые скажем они не на все Грабли в своей жизни ещё наступили и как бы Зачем наступать если можно про них прочитать и не наступать вообще вот Ну также как бы это может быть и более ниор или даже там продвинутые студенты которые Ну единственное что я всё-таки синтаксис джавы не объясняю понятно То есть Я предполагаю что читатель всё-таки Как как язык жава уже выучил То есть это не может быть первой книго Вот но Синьор программистам наверное больше будет скучно хотя на самом деле её читали и такие довольно продвинутые люди которые Ну известные там какие-нибудь Ja программисты и в принципе отзывались что они что-то Новое из неё узнали то есть понятно что не в каждой главе наверно будет что-то новое но есть вероятность что чтото почер почему это особенно интересно подобных книжек Наверно я не припомню особо на других языках сл за нижу некий Мне кажется показатель да то есть есть Прямо какие-то типовые паттерны Да которые возможно вот у меня собственно и был вопрос Это люди недостаточно образованные это ошибки дизайна языка это что-то ещё вот можешь пару примеров привести И сказать в чём собственно суть всей этой истории это кстати прям хорошее слово потому что изначально у меня кодовое название книжки было Java ба то есть такие паттерны ошибок вве но как раз когда я пришёл к издательству оказалось что у них не так давно вышла книжка которая называется One Go mes 100 ошибок на Go Вот и они сказали что книжки которые называются похожие лучше продаются поэтому давай мы назовём твою книжку 100 Java mistakes с одной стороны это мне усложни жизнь потому что мне пришлось натянуть количество ошибок чтобы их стало ровно 100 и это иногда мешало в процессе там редактирования работы над кни что в какой-то момент я перечитываю книгу там с редакторами чтото обсуждаем я решаю что вот это вот ошибка но она недостойна внимания Давайте её выкинем из книги но у меня сразу появляется проблема что у меня теперь 99 ошибок я не могу просто взять и выкинуть вот Поэтому приходится где-то что-то натягивать сову на Глобус Что называется вот Но

вро Я знаю непонимание предметной области То есть это же тоже может привести к ошибке Да когда человек программирует а у меня ошибки обычно какие-то точечные там человек вместо можно угадаю я прям уверен знаешь одна из самых ключевых базовых ошибок по всем языкам это сборка строк в цикле вот интересно что такой ошибки у меня нету потому что я в книге стараюсь не касаться вопросов перформанса то есть в данном случае эта ошибка не Привет к проблемам с корректностью граммы она приведёт к перформанс проблемам может привести если у тебя цикл достаточно большой может и не привести может долго существовать никто не заметит но она не повлияет на результат того что ты сделаешь у меня в книге только ошибки которые влияют на результат вот Вот кстати мы недавно обсуждали дату время и то что оно было плохо сделано до этого одна из ошибок Например можно как раз на ней понять почему она происходит часто бывает что человек хочется форматировать дату в виде строки чтобы показать пользователю там я не знаю число месяц год там или наоборот год месяц число то есть с с каким-то конкретным форматом работать чтобы все даты выглядели одинаково для этого есть там класс что-то типа Simple Date формат в Джаве вот и ты в нём можешь там сказать Вот у меня такой-то шаблон я буду по этому шаблону все даты форматировать и кажется Ну у тебя шаблон константный Ты возьми это И заранее в Ну переменную засунь в каком-нибудь своём классе и потом Используй везде Хорошая идея Почему нет Проблема в том что этот класс мутабельный вот более того он интересно мутабельный то есть когда вы вызываете метод формат который собственно форматирует он внутренние поля меняет в процессе того как он Ваш объект даты превращает в строку То есть он вызывает какие-то промежуточные методы заполняет какие-то поля потом другие промежуточные методы эти поля читат и вы получаете результат Это означает что он не потокобезопасный Если вы эту же самую константу используете из двух потоков Вы можете получить любой бред В результате Ну хорошо если эп вот и это такой пример во-первых это косяк дизайна жестокий косяк дизайна потому что нет никаких причин делать

мутабельных соображений связанных с Форман типа давайте мы не будем новы обе Но эти соображения не актуальны уже лет 20 как потому что и компиляторы стали лучше и коллекторы стали лучше Вот то есть это абсолютно никого уже не волнует можем порекомендовать сразу ребятам Кто не знает почитайте про такую штуку как или задавай вопрос Не изменяй ответ Есть такая концепция Да хороший совет Вот Но в данном случае если я пользователь моя ошибка в том что не зна это что это написано в жава доке Но кто читает javadoc я увидел класс увидел пример мне чат gbt подсказал что я могу этот класс использовать Всё я его буду использовать Вот Но к счастью опять же в восьмой Джаве когда сделали новый datetime API появились новые daytime формати которые все им мутабельные если вы просто пользуетесь новым API у вас не будет таких проблем вот Ну вот это вот пример одной из ошибок которые описаны в книге А знаешь её Как можно было расширить эту ошибку сразу но она такая немножко смысловая особенно когда выводит в стандартном формате просто ДД мм там что-нибудь такое что если у вас международный проект у американцев там надо менять и поэтому фиг у вас тоже так получится Это не статическая штука Ну тут зависит я это просто постоянно Замечаю я потому что поскольку сейчас в Штатах живу я прям постоянно начал это замечать когда у тебя система не перестраивается и ты такой типа это вообще число или или месяц первым Идёт тут зависит Для какой цели то есть Может быть где-то там в каких-нибудь логах ты вообще всё выводишь в и формате год месяц день вот там кстати с этими формат модификаторами есть тоже совершенно Адская Бага То есть вы же этот шаблон описываете строчкой Такой типа и там важно что в каком регистре потому что выглядит как год но если вы его напишете большими буквами а не маленькими это будет и год это

будет короче

такой специальный год который похож на обычный но он всегда начинается типа в понедельник или в воскресенье я точно не помню но суть в том что для некоторых Дат в районе нового года он неправильный То есть вы можете написать четыре больших и он там в 99% случаев будет вам правильно рендерить и вы ничего не заметите но какого-нибудь там 2 января 2025 года он вам не ожиданно покажет что это 2 января 2024 года потому что это как бы е прошлогодний Вик год короче совершенно бредовая штука которая никому не нужна и люди постоянно на неё наступают вообще даты вот так вот даты таймзоны всё это большая тема Очень я знаешь что подумал Вот всегда же в языках как только ты доходишь до даты у тебя нету типа под даты Я имею в виду литораль Вот типа у тебя есть понятное дело там классы всякие А вдруг знаешь с точки зрения популяризации языка вот популярности представляешь какой-нибудь язык придумывает вот чтобы вот это всё добро ты мог видеть прямо вот в редакторе без особой специальной поддержки встроить прямо в сам язык специальный литеральные образом форматы сдавать и он бы тебе всё прямо выводил подсказывал и это превратилось бы просто в радость Интересно насколько бы это могло повлиять знаешь на таких ребят кто Ну таких много которые типа о прикольный язык прикольная фича интересно вообще кто-нибудь думал в эту сторону Ну наверное думали но никто не сделал Я по крайней мере не знаю таких языков кстати интересно Можно попробовать в ваших любимых ID Мне кажется там есть какая-то фича когда вы определяете в Джаве по крайней мере вот это вот формат Да можно там или навести или какой-то экшн вызвать и он покажет текущую дату вот в этом формате То есть он распознает что это определение фр есть такая поддержка Да и тогда можно по крайней мере проконтролировать как это будет выглядить но опять же вот такую ошибку Вы только статическим анализом найдёте то есть конечно хороший редактор вам Её сразу подсвет но если Вы посмотрите текущую дату то вы можете этого не заметить Если вы прое сразу после Нового года Вот кстати ты затронул очень важную тему с региональными особенностями И это прям тоже боль большая есть вот очень популярная штука которая выносит всем мозг Это преобразование регистра большой в маленький многие люди тоже не задумываются над этим и Ну типа вызвал там STR Мне нужно что-то из маленького регистра превратить в большой но есть особенности у вас дефолтная локаль в системе это турецкая локаль то вы когда Превратите И точкой вке она останется с точкой это будет большая и с точкой это будет не символ из базового латинского алфавита А какой-то вот другой Никой символ который с гораздо большим кодом и дальше зависит от того что вы с этой строчкой будете делать то есть если вы её там сравниваете с каким-то эталоном у вас может сравнение не пройти и может быть очень много интересных эффектов я в какой-то момент просто брал например ию трекер языка котлин скажем и вводишь просто кишлаке в поиск и ты находишь там штук 20 тикетов потому что у тебя всё работает на твоей нормальной машине у тебя там проходят все тесты всё нормально и Ты вообще думаешь что у тебя программа отлично написана приходит первый турецкий пользователь и у него всё ломается потому что в турецкой локали неожиданно у тебя возникают эти точкой вообще где никто их не ожидал то есть ну правильное решение Конечно если ты не хочешь specific преобразования если у тебя это внутренний идентификатор который никак не завязан на язык на пользовательской машине то конечно тебе нужно явно указать LR то есть сказать что меня не волнует пользовательская локаль локали да Я предпочитаю не пересекаться с этой темой если возможно Проблема в том что невозможно

самое знаешь смешное самые сложные штуки не алгоритмические какие-нибудь А вот именно вот эти вот нудные муд таймзоны локали даты такой Капец какой-то там вот эти вот нюанси копаться чтобы там всё сошлось и поэтому никто этого не знает то есть все методам тыка Мне кажется плюс-минус работают с этой штукой тут на днях Был совершенно Весёлый твит я могу его найти там в какой-нибудь добавить в какой-то компьютерной игре по-моему она сдела у героев крутятся волосы короче вот крутятся волосы они должны происходит какая-то шиза Вот и причём это проявляется в России на российских компьютерах Вот и чтобы это исправить Ну на винде Хотя может быть и не только на винде но там было на винде пример чтобы это исправить нужно пойти в региональные настройки своего компютера короче десятичный разделитель запятой и если у тебя русская локаль там запятая стоит десятичный разделитель чисел и вот если эту запятую на точку исправить как в американской например локали то баг исчезает в игре то есть косички перестают крутиться ты Ты не поверишь я вчера сидел с дочкой делал математику но она ей 12 час и она в принципе математику сама делает Я редко с ней делаю но Понятное дело что поскольку она 6 лет в Америке живёт Она американка и она даже не знает русских там понятий в плане математики всего и мы с ней обсуждаем дам какой-то пример и я говорю 0 зап 5 она такая что то есть для них вообще я такой я про себя думаю да они же вообще не понимают они говорят 0.5 и тогда она понимает что это такое этот бак он работает и на обычном вот таком восприятии конечно И люди просто вот из-за того что ты живёшь там в одной стране работаешь с одной культурой тебе даже в голову не придёт что оно может быть абсолютно по-другому там огромное количество багов Когда приходят ара и у них текст вводится справа налево это Это совершенно выносящая мозг штука да и соответственно вообще вся компьютерная индустрия когда-то началась с семи битов Да никаких те Юни кодов и Ой мы настра дались все потому что был только английский язык О'кей Но это немножко уже атоп Хотя тоже прикольные темы по поводу языка есть ещё две темы которые я с тобой хотел обсудить про Open jdk мы хотели поговорить да и про ии давай сначала я тебя про ии спрошу просто в целом не знаю насколько ты с этой темой связаны или нет это как-то на J вообще влияет или Вот ребята там койт сделали но кто-то юзает и юзает кто не юзает не юзает или как-то глубже может быть это идёт ну интересно что вообще вся тема машинного обучения влияет на джаву то есть там появляются разговоры Что надо в джаву как в язык вносить например шестнадцати битные флоты Потому что часто для обучения всяких моделек для обучения нейросетей тебе нужны флоты Но на битных флотах всё медленно и людям не нужна такая точность Но им нужна скорость вот там много идёт разговоров про то что Java должна на ГПУ запускаться и Есть проекты позволяющие запускать Java код на ГПУ и в этой области много активной работы и это всё тоже связано там с машинным обучением с нейросетями потому что ну как бы да это горячая Тема и если на Джаве нельзя будет обучать нети то конечно jav останется за вот а в плане использования и для Ну да я использую ин как и использую вот помогает не сильно помогает пока мне по крайней мере Она за меня очень мало пишет кода далеко не всегда пишет идеально Но по крайней мере вот в прошлом году прол такой кайто н я чувствую что есть

больше помогает чем мешает ты имеешь больше именно скорее наверное в разговорах Да что с ним можно что-то быстро обсудить найти решение варианты покрутить Я вот в этом плане я всё-таки наверно несколько консервативный человек я если у меня есть вариант типа погуглить Или спросить чат для меня первая опция - Это погуглить потому что я мне лучше найти статью написанную человеком разобраться даже если мне придётся больше прочитать чем просто найти когда я задам вопрос я получу конкретный ответ но я возможно не узнаю как-то тему глубже и возможно мне придётся валидировать потому что кто его знает что его там на галлюциноз консервативен я не буду рекламировать свой подход Может быть я устарел да е за пару лет просто на о свалку истории Да знаешь что самое забавное А вот как бы дети это уже получается даже через поколение Вот моя дочка пото что у нас разница у меня 39 ей 12 у неё знаешь какая есть штука у неё во-первых они в принципе никогда поисковиками не пользовались потому что у тебя поиск в строен в эти Господи редакторы что я несу в браузеры То есть сразу ты адресная строка и я ей просто объяснял что там встроен поисковик ей было вообще сложно эту концепцию понять она даже не знала что так можно делать второе Ты знаешь Да они все голосом пользуются то есть они не набирают ничего руками а сейчас я ещё научил пользоваться чатом gpt в том числе у меня там жена им пользуется чтобы решать свои вос и поиск просто ул из нашего из нашей жизни То есть у меня знаешь какой приоритет у меня приоритет - это ча gpt второе - это поиск но на реддите конкретно то есть я ищу в Гугле но я ищу через т потому что там ответ на все вопросы и только в третий момент когда я такой Так Сейчас

засумской сейчас паттерн да мир меняется причём меняется очень быстро вать сейчас начал поскольку много на машине приходится ездить там кого-то детей отвезти куда-нибудь там в магазин я начал практиковать следующую вещь Они же помнишь сделали апдейт Сейчас последний Когда ты уже можешь разговаривать и не ждать пока он там что-то будет говорить А ты можешь его перебивать ты можешь очень сильно ускорять процесс делая его более естественным с точки зрения получения ответов которые тебе нужны я стал практиковать такую вещь Я прямо в машине у меня там какой-то топик есть который Надо разобрать Ну например бизнесов там не знаю там какой-то часть Надо с отчётностью какой-то или там ещё с каким-то направлением разобраться Я открываю говорю так Давай обсудим вот эту штуку у меня такие-то показатели что там по рынку как Давай расскажи какие видишь варианты и мы едем прямо сейчас gpt всё это дело в процессе обсуждаем и для меня конечно такой ну типа это новый мир вообще это же сумасшествие Да так если подумать это да ну тут как бы есть разные концерны Во что это может вылиться там один концерн Да что программисты останутся без работы например другой конн что нас просто всех поработить Вот Но есть какие-то более такие при штуки есть такая компания gitc которая проводит исследования качества кода то есть они Дамп коммиты с гитхаба и с Возможно с каких-то других сервисов и оценивают там некоторые метрики прям даже не слепки кода а именно новые коммиты Вот и они смотрят Как меняется структура кода который появляется в публичных репозитория со временем Вот и они заметили например такое изменение которое очень статистически значимо Там прям на десятки процентов А по некоторым показателям даже в разы что стало гораздо больше копипасты котится то есть кода который уже очень похож на код который уже есть в проекте и стало гораздо меньше происходить рефакторинга то есть перемещение кода когда у тебя в коммите ты в одном месте убрал в другом добавил Вот и они это связывают именно с тем что гораздо больше стало асист от кода который пишет койт и другие такие инструменты но они очень легко генерируют новый код но они им трудно переиспользовать код им проще сгенерировать алгоритм с нуля чем найти в твоём большом проекте метод который уже делает этот алгоритм Вот и они сейчас по крайней мере не очень адаптированы под то чтобы зафак твой проект Вот и в ито скажем с абстрагирование у них пря скажем беда но не могу не пошутить что это вне себе Шни нет реворков нет абстракций наш подход Так что во все поля Гош Приве люблю ва так сказать те я до сих пор ещ сторонник такого кода который аккуратно сделан там за

рефакторинга вот ну посмотрим насколько я смогу с таким подходом продержаться насколько это будет Да это интересно я пока наверное тоже вот в твоём лагере но при этом а когда мы вот об этом с ребятами говорим есть концепция в том что Фактори этот код почти становится нереально Ну то есть он всё равно уже всё это приходит просто к портянка Да и опять же асли ты типы генерирует с его помощью у тебя какой-нибудь тайпскрипт там такое может тебе сделать Там просто без поллитра не разобраться и всё это будет работать когда у тебя Ну есть такая типа идея что это будут wr Only сервисы То есть ты не будешь вообще думать о факторинге то есть весь подход должен свистить к тому что ты генерирует рабочее если надо ты его перег нери с нуля Аля докер на уровне сервисов Вот вот типа в эту сторону мы и придём А вот так чтобы ты прямо работаешь над кодовой базовой плотной за ней реально надо следить то вот вот такой подход Скорее Скорее наоборот Может в какой-то момент сделал так что будут очень востребованы люди которые могут писать нормальный код строить абстракции и делать так чтобы потом там на Большой объём большой обм кода с этим можно было работать ну это так заодно мы с тобой подискутировать посмотрим что будет через 5 лет я думаю даже через год-два это уже так поменяется сколько будет исследований офи интересный пример на тему того что ты сказал что такие приложения это уже прямо сейчас в какой-то мере работает есть вот тут Экспериментальный проект который умеет делать веб-приложение по описанию просто буквально ты с одного промпто он тебе полностью его делает плот там и ты можешь сразу пользоваться буквально там за 10 минут или даже быстрее это всё происходит вот это Экспериментальный внутренний проект пока что не релиз нутый и коллега вот им пользовался Он сидел с ребёнком и они что-то обсуждали животные у него маленький ребёнок животные какие они голоса как они выглядят там коровка Муму вот это вот всё Свинка хаю-хаю и он такой подумал и за промтис делай мне игру там для малыша который будет показывать карточки с животными и давать угадать там что оно говорит и у него вот буквально на телефоне через 5 минут готовая игра которая То есть он не нашёл существующее он прямо ему запрограммировал которая Реально работает её не пришлось ни дебажить ниче там дополнительные проты какие-то делать они просто с ребёнком сразу стали ей пользоваться да да как минимум эта часть она для экспериментов для всего решена А ты пойди потом базу Обнови так чтобы ВС было

хорошо кивать можно приходит говорит всё я скажу Ага а ты вот это вот сделай ещё посмотрим как потом поговорим Вот хорошо Давай последний Тогда момент последний вопрос который мы с тобой разберём Я знаю что вот про Open jdk И вообще вот глобально про виртуальную машину джавы в двух словах потому что мы когда говорим про язык Мы вроде как бы про джаву говорим Да А ведь на самом деле не всегда про джаву то есть вот есть виртуальная машина в этом плане кстати для меня Java всегда немножко таким отдельным миром была потому что мне кажется вот мало в каких языках ещё вот так разговаривают так как в Джаве разговаривают про происходящее там чётко делят У тебя есть виртуальная машина ты там что на ней можешь делать У тебя есть язык там другие языки все дела Вот и более того У тебя же имплементации ещё дофига их не настолько дофига и в принципе в этом в этом месте Мы тоже довольно похожи на мирт нета Хотя наверное в Джаве это более ярко выражено то есть в Доне тоже есть ранта там CL есть соответственно Собственно как платформа то есть мы можем говорить о языке там CSP или о языке fsp или о языке там vb.net но dnet - это платформа собственно у них есть промежуточное представление в виде какого-то там байт кода Вот и в Джаве в принципе похожая история то есть да виртуальная машина она хотя и связана с языком но Существует несколько Независимо и у неё есть своя спецификация То есть по-хорошему вы можете реализовать свою виртуальную машину Независимо и Java приложения будут на ней работать так же хорошо или лучше как собственно работают на существующий То есть сейчас на рынке есть штуки которые в разной степени растут из одного и того же э или где-то совсем не растут или растут частично то есть есть собственно проект openjdk это такая вот самая базовая реализация джавы она в себя включает и виртуальную машину и стандартную библиотеку то есть всякие классы типа string list и так далее и компилятор то есть инструменты для получения by кода из Java программ это всё вместе называется Java development Kit jdk раньше была такая штука Как jre Java runtime environment когда всё Вот это но без инструментов для разработки сейчас его по факту не существует потому что по факту Вы должны всё это иметь в куче Вот и стандартна реализация включает в себя виртуальную машину которая называется Hotspot то есть виртуальная машина - Это что такое Это Т компиляция это сборка мусора Ну вообще менеджмент памяти в более широком смысле это э менеджмент потоков это собственно запуск всего этого добра это serviceability отладка то есть возможность каким-то внешним агентам сервисам подключаться и какую-то им информацию предоставлять о работе этой машины возможность взаимодействия с нативным кодом Вот это всё части виртуальной машины и какие-то из этих частей они заменяемые Ну вот популярная часть которая заменяемые - это Garbage колектор есть стандартные там G1 сейчас наиболее популярные есть zgc и есть например такой gage колектор разработанный в компании Red Hat как shanda который в какой-то момент был прям таким очень передовым Но потом zgc от or его в некотором смысле догнал То есть тут тоже в пределах одного проекта ЖДК есть два гач коллектора которые по сути дела конкурируют между собой там по разным Метрика и конкуре прости А я думал они для разных задач для разных задач используются то есть типа специализированные или ты хочешь сказать что просто всегда есть конкуренция за лучший но есть Garbage коллекторы которые действительно для других задач то есть есть например обычный самый сериа Garbage колектор который однопоточный который всегда ST the world То есть как когда он начинает работать всё ваше приложение останавливается вот им Обычно никто не пользуется но он Зато самый абсолютно предсказуемый То есть если вы хотите заде бажи какую-нибудь проблему с виртуальной машиной то в первую очередь можно переключиться на се gc и посмотреть там исчезнет ли проблема И по крайней мере дебажить будет гораздо проще потому что у вас не будет в параллель там происходить сборка мусора вот есть там parallel gc который быстрый но он тоже stop the world То есть каждый раз когда у вас происходит сборка мусора всё останавливается А все более современные сборщики мусора они конкурентные это собственно когда они работают параллельно с вашим приложением то есть приложение пишет читает создаёт объекты удаляет объекты и в это же время Garbage колектор пытается объекты которые не используются удалять и это была какая-то совершенно невероятная Инженерная проблема потому что пока там ч коллектор ищет есть ссылки на этот объект естественно в этот же момент может появиться новая ссылка и ты можешь думать что на него ссылок Нет но ты только его начал удалять как хоп там всё сломалось короче это была очень такая серьёзная Инженерная проблема но её решили и мне кажется что вот в Джаве впервые Ну по крайней мере такой Production Ready появились полностью конкурентные гарбич коллекторы которые и пометку и удаление объектов делают конкурент с вашим приложением но не будем этом Да прям вот да я знаю что тут можно коне но всё-таки один момент это же никогда не бывает бесплатно потому что вот честно я это пропустил поскольку я в Джаве не пишу постоянно у меня до сих пор вот представление там что ST the world происходит но то что ты говоришь это конечно прорыв то есть такого вроде как бы ни у кого нет и пони в это вложено много сил Я примерно представляю как мог бы быть такое реализовано но Неужели это бесплатно сделано это абсолютно не бесплатно то есть Ной вы получаете ультракороткие паузы ваше приложение не встаёт больше чем там на 10-20 микросекунд вообще даже если у вас куча на десятки гигабайт но цена этого - это общее замедление приложения потому что у вас появляются так называемые й барьеры и даже барьеры То есть это значит что каждый раз когда у вас происходит запись в кучу или чтение из кучи происходят дополнительные действия например может оказаться что вы пытаетесь обратиться к объекту который в процессе перемещения в другой блок памяти потому что в этот момент Garbage колектор работает с этим объектом тогда у этого объекта есть две копии там есть forwarding Pointer из одной копии в другую и любая запись она должна как минимум это проверить что объект не в процессе перемещения А если он в процессе перемещения то она должна поэтому forwarding поту пройти и может быть даже какой-то буккинг сделать чтобы помочь гарбич коллектору сказать что вот Хорошо я буду писать в Новую копию а не в старую пока она в процессе то есть общее замедление приложения происходит Может быть там на 5-10 опять же да это может оказаться неприемлемо может оказаться что в вашем кде Вы готовы терпеть длительные паузы но при этом общая работа приложения станет быстрее Например у вас приложение исключительно в бач режиме вы его запускаете оно обрабатывает там кучу данных выплёвывает результат завершается то есть оно не работает интерактивно никак Тогда скорее всего вам

нужен быст То есть тут Да тут нужно думать с одной стороны тик тут помог рж колектор тут вроде и помог и не помог и такой там Конечно я представляю вот эта история с чуваками которые занимаются

консалтинговых свой вообще вот с этим всем добром Да да конечно вот ну ж колектор - это одна огромная история другая огромная История это ДТ компиляторы потому что изначально ва ругали самая первая Java 1.0 она была только интерпретируемый и естественно все сказали а это очень медленный язык мы не будем на нём программировать и до сих пор вот эти нарративы с двы 1.0 они иногда транслируются Но с тех пор произошла огромная вообще Прогресс в т компиляции там совершенно невероятные оптимизации делаются и есть даже вот в hotp jvm там в комплекте идут два компилятора C1 и C C попроще но он компилируется то есть сперва ваш код обычно компилируется в C1 а потом если выясняется что он выполняется очень долго то он пере компилируется в C2 и причём скомпилированный просто код он ещё автоматически

профилирующий тысячи запусков никогда не выполнила и можете её в депт засунуть Вы можете полагаться что она скорее всего дальше тоже не будет выполняться и оптимизации построить на этом основании но также есть ль VM это тоже такой Т компилятор от orac в котором ещё сделано огромное количество совершенно немыслимых оптимизаций в частности Ну вот чем они хваля то что вы можете написать очень сложный Stream API Call там с лямда с какими-то там преобразованиями с какими-нибудь фт МПа там и чем угодно и в gral VM он с оптимизирует его так же хорошо как если бы вы написали там старый уродливый for loop и это может работать с одинаковой абсолютно скоростью ни одного промежуточного объекта у вас не будет создано вот эти вот все стримы которые один Стрим другой Стрим там сплиттера торы внутри и чёрт знает что там какие-то пайплайн reference pipeline ни одного промежуточного объекта не будет создано Вот то есть там очень очень крутой компилятор сколько людей над этим всем работает добром Я не знаю но это не огромные команда это десятки людей я думаю и это только то что ОТК есть альтернативные jvm есть например jvm от IBM Open j9 в которой свой Т компилятор в котором тоже свои оптимизации есть jvm от az которая называется и в ней свой который использует lvm То есть он компилирует в lvm бит код и дальше вся мощь lvm все его оптимизации они позволяют дальше работать там тоже на некоторых кладах он даёт гораздо лучше результаты чем на хотс То есть в принципе если вы хотите ваше Java приложение ускорить У вас есть выбор из чего выбирать не всё это конечно бесплатно то есть аулов ский например для коммерческого использования он достаточно дорогой но Если для вас миллисекунды производительности стоят больших денег вы можете конечно его купить Вот это очень важный момент да хочется уточнить Потому что я не знаю других языков где вот так же как в Джаве такой конструктор с огромным количеством элементов заменяемых То есть это кстати же сразу говорит о том что там сложность повышенная Да в этом всём разбираться всё это делать Мне кажется в современном мире всё-таки большинство вещей решаются Ну как-то там масштабированием машин и так далее То есть Правильно я понимаю что всё-таки это для не знаю может быть специфических кейсов там биржа где там супер там миллисекунды долж быть ещё что-то или я вс-таки неправильно понимаю потому что во всех остальных местах Ну типа ты пиши либо на совсем чём-то низкоуровневого да либо Ну давайте пять серверов новых нём Но вот выжимать что у тебя пять видов там ДТ компиляторов но мне кажется никто в эту сторону не идёт Ну на самом деле идут ну во-первых это какой-то со бизнесы то есть естественно люди занимаются этим за зарплату в коммерческих компаниях и бы бизнес не шёл но они бы явно закрылись то есть понятно что кто-то с этого зарабатывает Вот и часто бывает да что у тебя стоит выбор Я не знаю ты можешь поставить 20 серверов А ты можешь посадить одного инженера который разберётся с вот этой вот инфраструктурой посмотрит свой Клод на разных jm с разными параметрами и выяснит Что например если мы там возьмём такой-то Т компилятор то для нашего кода потребуется там в полтора раза меньше памяти и в полтора раза меньше цпу ресурсов и у нас уже будет не 20 серверов а 14 серверов и это экономия денег если это облако если какой-нибудь Amazon это может быть экономия больших денег вот то есть вы можете на этом в принципе неплохо выиграть Ну опять же если у вас есть деньги купить 20 серверов вы можете больше избыточность Вы можете снизить respon Time вашего сервиса снизить латентность Боше клиентов то есть быть более устойчивыми в случае наплыва клиентов и так далее То есть это производительности никогда не бывает слишком много мне кажется всё равно речь идт о каких-то супер крупных бизнесах потому что Ну для того чтобы это было заметно и тратить вот прямо время на эти оптимизации А это же ещё надо постоянно поддерживать оно может поменяться и глубокие дорогие чуваки Ну кто это есть просто можеш назвать примеры бизне для которых это ти норма вообще вот сонно как сейчас но очень долго Twitter был большим пропонент ль VM и они совершенно точно на бэнде использовали ль VM Почему Потому что на Терский кнд был написан на скале опять же я не знаю что что там сейчас лет пять назад он точно там очень много было скалы а Скала как функциональный язык она создаёт много маленьких объектов То есть у вас функции на функциях функциями погоняю у вас там замыкания у вас там какие-нибудь маленькие монады которые там одни в другие превращаются создаётся огромное количество маленьких объектов и естественно это и нагрузка на кучу нагрузка на Garbage колектор большое выделение памяти и в этом плане ль VM с его агрессивными оптимизация то есть там очень агрессивный иланг очень агрессивный Escape анализи и Это позволяет избавиться от огромного количества локаций то есть часто бывает да что очень такой замученный функциональный код с кучей индикт непрямых вызовов с кучей там лям он просто превратится в простой императивный код который ни одну эту лямда не лоцируется и можно получить прямо огромный Привоз скорости поэтому они и контрибуций в граль VM и очень сильно его пиарить его сами конечно Ну кстати довольно специфический кейс он классный Он прямо показательный но он специфический именно потому что сами себе создали проблему а то есть очевидно что не надо было скалу брать для таких задач Ну как сейчас очевидно Да понятно что непонятно было что со скалой будет но Скала была

переусердствовать потому что ты не знаешь какие типы и какие методы возвращают и в итоге они написали совершенно гениальную штуку которая называется сорбет это такой статистический анализатор с Атар для Руби кода который позволяет собственно выводить типы в огромных Руби приложениях в таком escale Что называется в большом масштабе там огромное количество сложной математики там прямо научные статьи поэтому написаны то есть по сути дела если бы люди сразу писали на статически Типи языке не потребовалось бы вот этого вот большого рча Но вот создали проблему и отважно её решили ну тут я тебе так скажу я всё-таки Руби разработчик и это моя в том числе Тема просто рельсы слишком хороши были то есть они настолько опередили своё время и Дали такие вещи даже вот то есть я очень хорошо знаю разные фреймворки на них пишу и постоянно кстати про это рассказываю то есть мой интерес он в области фреймворков и там есть такой прикол что очень многие вещи которые там ещё хрен знает когда сделали до сих пор не завезли во многие языки и самое главное что в ой во многие фреймворки И самое главное что до сих пор периодически завозят Вот и знаешь Каждый раз когда попадаешь куда-то в другое место Это же частая история люди говорят мы типа Rails like Вот потому что ну не просто так это Но даже до сих пор Я когда Как пример в спринг буд ныряю в целом всё хорошо до тех пор пока ты миграции не касаешься и ты такой Ну как так можно ребят столько лет вот так что да с этой точки зрения ни в коем случае не критикую как бы есть много подхода программированию дадада то есть понятно что Руби же во многом ещё взял из сл толка тоже У тебя же вот эта супер динамика метапрограммирование это кстати очень классно с точки зрения развития инженерного мышления но я например сейчас сам конечно такой как язык Ну блин дайте мне некий микс между двой и тайп скриптом Я где-то наверное в этом сейчас области нахожусь но как инструмент рельсе в плане фреймворков честно говоря до сих пор никто не подвинулся я знаю что сейчас мне накидаю в комментариях за это Но я

привык для Гру был который

назвался Да есть такой проект в Штатах Ты может быть даже про него слышал его сделал мой

знакомый он

изде В чём История это ребята которые духи по подписке продают То есть ты прям Он кстати у меня с ним был второй или третий подкаст вот там в чём прикол обычно банками продаются духи ты его покупаешь и полгода там или год должен им пользоваться людям надоедает они придумали вот мы маленькие штучки но по подписки каждый месяц присылаем и Это огромный проект у него там 700.000 подписчиков или больше в Штатах Ну ты представляешь какие объёмы там денег чтобы ты понимал у них логистика своя Параллельная стандартом Штатов Ским это вообще-то серьёзно да так вот Угадай что они когда он только начинал он со мной тогда советовался и он выбрал сам на тот момент писать на grails Вот и они долгое время как бы всё это использовали понятно что там у них сейчас уже давно микросервисы там разъехались Но вот да была такая история а О'кей то есть вот и Open jdk - это проект собственно оракла который вбуд кучу денег и правильно я понимаю что по большому счёту честно говоря когда говорится про разработку джавы основное всё разработка Open Или я не прав Ну во-первых это не совсем проект это отдель Я полагаю что как некоммерческая организация но я как бы структуру собственно не знаю как оно там с юридической точки зрения оформлено Но это совершенно точно проект в котором участвует много компаний там штук 20 наверно вот там есть и так далее понятно что занимает большую его часть То есть как speciation Le и соответственно как собственно владелец джавы владелец торговых Мак на джаву но тем не менее там много контрибьютор

и Компания за ними а Китайская у них очень много Наде и естественно тоже вот как раз пример большой компании который не безразлична производительность джавы они пытаются что-то исправлять в том числе в стриме чтобы у них там какие-то свои проблемы с производительностью решить Microsoft приносит свои патчи и так далее То есть Open gdk - это такой довольно как бы разнородная система там есть люди как бы которые принимают решение и они при этом не изорок ну и да как бы разработка джавы она э когда люди говорят про разработку джавы это практически всегда подразумевается разработка Open gdk то есть этот проект появился где-то в районе наверное шестой джавы и изначально всё-таки была как бы открытая Java в которой чего-то не хватало Ну например каких-то криптографических алгоритмов в ней не было То есть вы не могли там запросить какой-нибудь хэш скажем Если вы соберёте Open gdk сборку а были сборки ОТК в которой были закрытые части и в них вот всё это было но со временем как можно больше закрытых частей оно ВС перека ВДК То есть это в основном были юридические проблемы потому что чтобы открыть какой-то код он не всегда ты им напрямую владеешь Иногда ты лицензиат его и ты должен Договариваться с авторами этого кода Вот Но тем не менее сейчас по факту вся разработка джавы Она идёт в открытую там есть особенности например они не открыты То есть у есть открытый трекер там borg наверно Но если ты ре портишь Security понятно что его видят только Oracle там и возможно какие-то причастные люди но есть объективные причины для того чтобы его сразу не показывать всему миру о да вот а так много что открыто причём не только собственно разработка то есть разработка ведётся на гитхабе там реквесты оно весьма специфично там не такой вот стандартный gitflow Как вы можете представить в осном проекте там э и не то что там Любой человек с улицы может прийти Там есть процессы свои с которыми нужно ознакомиться и не так-то просто сделать свой первый комит скорее всего вас заруб вот но тем не менее в этот процесс влезть можно то есть я как Независимый контрибьютор довольно давно начал что-то контрибьютор

возможно человеку снаружи прийти и что-то там делать Я только сейчас понял А на чём J написано а Хороший вопрос Да тут возникает вопрос а а что конкретно вы имеете в виду то есть виртуальная машина большая её часть написана на c+ Plus причём как я понимаю это далеко не самый современный c+ Plus у них какой-то там общий знаменатель Потому что им нужно собираться под разные платформы под какие-то специфические компиляторы поэтому Возможно это c+ Plus 11 причём в какой-то момент это ещё был вообще c+ Plus прошлого века И у них там был очень большой эффорт чтобы перейти на c+ Plus 11 но понятно что компилятор джавы и практически вся стандартная библиотека кроме небольшого количества нативного кода она написана на самой две естественно то есть чтобы собрать Open gdk вам нужна bootstrap jdk Это обычно gdk прошлой версии соответственно вы не можете такую сделать Clean Room сборку чтобы собрать jav вам нужна предыдущая Java чтобы её собрать нужна предыдущая Java и так далее в какой-то момент вы упрётся просто что самую раннюю сборку Open gdk вы не можете собрать потому что она для До этого была не Open Вот то есть тут такой бустра проблема такая есть Забавно Да но и плюс например GR VM То есть это тоже Т компилятор и вот этот Т компилятор он тоже написан на две то есть в Джаве есть такой jvm C Java Vir Machine comper interf и вы можете реально написать к виртуальной машине плагин который тоже написан на две Вот Но это не страшно потому что в Джаве есть интерпретатор то есть даже если это единственный Т компилятор в первое время просто этот Т компилятор будет интерпретироваться пока он сам себя не

саму компилировать двой У меня есть тебе последний блиц вопрос мавин или грал да Это интересный вопрос потому что и тот и другой имеют свои недостатки но я всё-таки с точки зрения давай так перспективы Вот вот мы идём вперёд что имеет смысл выбирать я на самом деле наверное у меня нет общей картины Потому что есть люди которые гораздо более опытные в том и в другом то есть мой на оп с гм обычно происходит так у меня есть какая-то проблема Я не знаю как е решить в гред Я иду на Да я старомодный человек я не иду в Ча иду на я гор У меня такая-то проблема Я получаю какой-то вопрос ответ я копирую кусок г кода в свой проект вроде работает нормально Вот и у меня

такой у меня несколько глубже знания мейна по крайней мере я понимаю там лай сайкл понимаю фазы там что-то вот такое вот понимаю как там эти мож там плагины немножко э мне мейвин больше нравится потому что он такой более декларативный то есть мы можем читать ээ проектную модель собственно это его как бы изначальная философи мы можем читать проектную модель не исполняя фактически кода можем понять о том как устроен проект где у него там сорц где у него что куда он будет собираться там какие у него зависимости ВС это можно вытянуть фактически не собирая вле ВС равно придется исполнить этот bule срит чтобы получить конфигурацию Когда вы его исполняете может произойти всё что угодно потому что это императивный код и в этом плане поддержка гла в ID например значительно сложнее потому что вы не можете просто взглянуть нари понять структуру вашего проекта Где у вас лежат сорц Где у вас лежат бите и так далее Потому что вы можете одно и тоже миллионом способов написать вы фактически ваша ID при импорте она обязана исполнить этот л спт там может быть уязвимость вы можете скачать проект с гитхаба и тут же на локальной машине посадить вируса себе Вот то есть в этом плане н выглядит несколько надёжнее Мне кажется это философия двоя Она не только в языке прослеживается Да но и люди которые там находят у них такой знаешь определённого майндсет потому что даже когда ты говоришь там видно что ты действительно Java Чемпион Да у тебя вот в эту сторону всё потому что я конечно оперирую местами там другими понятиями Но кстати вот эту штуку можно было бы решить Ну хотя бы частично тем что ты когда у тебя много динамики вот рельс классный пример в этом плане например роутинг там роутинг такой деско задаётся когда ты не прямо пишешь конкретный маршрут А у тебя определяется ресурс да то есть а он раскрывается уже в роуты Поэтому если ты хочешь посмотреть роуты У тебя есть команда ты её вызвал он тебе прямо показал что в реальности получается здесь в принципе тоже самое можно вывести было причём чуть ли не в манос формате чтобы привычней было и понятней может быть кстати такое есть не знаю фактически когда создаёшь библиотеку на ле и лоиш её в C Тебе же автоматически пом с неё генерируется потому что в C ты обязан поку положить Вот и так что по Г скрипту у тебя делается пока ты её никогда не видишь Но у тебя по факту есть проек твоему проекту те Большое спасибо Мне было очень интересно Много всяких ты нюанси ков рассказал и современных штук которые происходят в Джаве и я надеюсь те Ребята кто нас смотрит и в том числе пишет на Джаве возможно знаешь этот сместили своё представление о том какая два Да чуть-чуть в будущее потому что ощущение что действительно иногда отстаёт у джавы есть наверное да какой-то флр такой немножко Олд ску но мне кажется мы сегодня немножко развеяли Да спасибо большое что позвали и Кстати чуть не забыл моя книжка сейчас существует на английском но готовится русский перевод издательством эмо Я не знаю ничего по срокам Это от них зависит Но возможно через пару месяцев будет русский перевод Так что если вам интересно Вы можете его ждать Спасибо тебе большое ребят если вам понравился подкаст обязательно Поставьте лайк нас можно смотреть Не только на тубе Но и на всех остальных площадках в том числе в аудио ссылка есть в описании по смотрите удобно Если вы где-то бегаете ходите едете на машине то можно слушать в Яндекс музыке и других а подкаст площадках Спасибо всем пока

[музыка]

Creators and Guests

Тагир Валеев
Guest
Тагир Валеев
занимается Java более 15 лет, Java Champion, коммитер проекта OpenJDK, член экспертной группы проекта Amber, разработчик IDE и статических анализаторов для Java, автор книги "100 ошибок Java"
#35 Почему Java остаётся топовым языком для бизнеса? | Тагир Велеев
Broadcast by