Дмитрий Завалишин - Java as a better C

  Рет қаралды 3,327

JPoint, Joker и JUG ru

JPoint, Joker и JUG ru

3 ай бұрын

Ближайшая конференция - Joker 2024, 9 октября (Online), 15-16 октября (Санкт-Петербург + трансляция).
Подробности и билеты: jrg.su/Ypf1HW
- -
В России да и, наверное, во всем мире Java воспринимается как яркий антагонист языка С. В среде разработчиков на С и С++ витает образ Java как языка, который во всем противоположен С. И для С-разработчика отсутствие ненависти к Java - практически признак профнепригодности.
Это отношение во многом эмоционально. Но, если говорить о рациональных основаниях нелюбви к Java в стане программистов на С, то будут названы несколько популярных утверждений, которые сильно дифференцируют С и Java. Яркий пример - отсутствие адресной арифметики. Кроме того, среди программистов на С принято считать, что Java - «интерпретируемый язык», и потому не может соперничать с С в плане быстродействия кода.
Как программист на С с 1985 года, написавший на этом языке несколько миллионов строк кода, спикер планирует разбить наголову практически все «противоречия» между С и Java и показать, что Java - это лучший С. В качестве доказательства - опыт переноса игрового движка объемом 300 тысяч строк с чистого С на чистую Java за один человеко-месяц работы.
Скачать презентацию с сайта Joker - jrg.su/z6wt06
#java #cprogramming

Пікірлер: 34
@TheDirt8
@TheDirt8 Ай бұрын
Отличный доклад! Матерый опытный специалист! Побольше бы подобного.
@user-md3xy2kc5l
@user-md3xy2kc5l 3 ай бұрын
Ютуб удалил прошлый комментарий (из-за кода на Си или из-за ссылки на фрагмент в ролике непонятно). Пишу второй раз. На слайде в ролике на 19:50 минуте приводится пример с кодом на Си с применением оператора "запятая", а далее какой-то страшный листинг кода на Java, который якобы его повторяет. Очень может быть это и так, но я попробовал переписать это используя механизмы функционального программирования в Java (Supplier'ы). Также мне пришлось обернуть в класс Box значение bonus, т.к. при передаче по ссылке в метод значение не изменится для ссылок, примитивов и финализированных объектов, типа Long, Integer, String и т.д. Зато, при передаче внутрь метода упаковки можно изменить значение в её поле, если конечно не используется структуры, типа record. Получился код примерно такого вида: private static int counter = 0; public static void main(String[] args) { int bonus = RandomGenerator.getDefault().nextInt(0, 100); int age = RandomGenerator.getDefault().nextInt(0, 15); System.out.printf(">>> bonus = %d, age = %d", bonus, age); Box box = new Box(bonus); boolean result = calc(() -> box.bonus += 10, () -> age > 10) || calc(() -> box.bonus += 20, () -> age > 5) || calc(() -> box.bonus += 40, () -> age > 2) || calc(() -> box.bonus += 100, () -> true); bonus = box.bonus; System.out.printf(">>>>> box = %s, result = %b, new bonus = %d, age = %d", box, result, bonus, age); } static boolean calc(Supplier supplier, BooleanSupplier booleanSupplier) { counter++; System.out.printf("Вызвали %d-й раз ", counter); supplier.get(); return booleanSupplier.getAsBoolean(); } Из минусов - лишний класс Box + анонимные классы спрятанные внутри лямбды, зато код получился максимально близким именно к оригиналу. А не такой, как в следующем слайде. Так, что даже на Java можно с некоторыми оговорками написать как в опереторе "запятая" из Си. Но вопрос надо ли оно?
@user-st3kb5oe2l
@user-st3kb5oe2l 3 ай бұрын
Очень круто) Куча новых для меня крутых мыслей)
@user-md3xy2kc5l
@user-md3xy2kc5l 3 ай бұрын
Глянул на код с "запятой" из Си (на kzfaq.info/get/bejne/o66VjMll2dGdgJs.html) и попробовал его тупо в лоб сделать на Java, пришлось правда применить обертку в виде класса Box с полем bonus + метод calc, который возвращает boolean значение с двумя входящими параметрами в виде обычного Supplier и BooleanSupplier. Получилось примерно вот так: public static void main(String[] args) { int bonus = 20; int age = 2; Box box = new Box(bonus); boolean result = calc(() -> box.bonus += 10, () -> age > 10) || calc(() -> box.bonus += 20, () -> age > 5) || calc(() -> box.bonus += 40, () -> age > 2) || calc(() -> box.bonus += 100, () -> true); bonus = box.bonus; System.out.printf(">>>>> box = %s, result = %b, new bonus = %d, age = %d", box, result, bonus, age); } static boolean calc(Supplier supplier, BooleanSupplier booleanSupplier) { supplier.get(); return booleanSupplier.getAsBoolean(); } Из минусов - лишний класс Box + анонимные классы спрятанные внутри лямбды, зато код получился максимально близким именно к оригиналу. А не такой, как в следующем слайде. Так, что даже на Java можно с некоторыми оговорками написать как в опереторе "запятая" из Си. Но вопрос надо ли оно? Проверил работу с Си-шной реализацией и вроде всё отрабатывает одинаково: #include #include #include int main() { int bonus = 20; int age = 2; bool result = (bonus+=10, age > 10) || (bonus+=20, age > 5) || (bonus+=40, age > 2)|| (bonus+=100, true); printf("result = %s, bonus = %d", result ? "true" : "false", bonus); return 0; }
@ansarozden5767
@ansarozden5767 3 ай бұрын
Крутой человек! Больше всего удивил тот факт, что он перенес работу с указателями просто на массивы.
@sweetcapitan5690
@sweetcapitan5690 3 ай бұрын
Короче можно вставить вместо "Явы" любой другой язык с СИ подобным синтаксисом и доклад ничуть не поменяется.
@triti77
@triti77 Ай бұрын
Не любой, а хотя бы язык с имеющимся бэком на популярную виртуалку.
@user-rx4vz7cb5w
@user-rx4vz7cb5w 3 ай бұрын
Отличный доклад! Хочется побольше такого)
@guai9632
@guai9632 3 ай бұрын
мощный чувак
@alws2532
@alws2532 3 ай бұрын
Доклад хороший, но, замечу, что мы - слушатели, говорю за своё окружение, кликбэйтные не отражающие содержания названия докладов не одобряем вообще никак.
@gingun95
@gingun95 3 ай бұрын
Если уж такую телегу и разгонять, то уже лучше про шарпы рассказывать, а не джаву. При сильном желании и сову на глобус натянуть можно. В принципе как развлечение может и ок, но смысла перегонять такие проекты именно на жава ваще смысла не вижу. Не зря тот же юнити с шарпами, а анриал с плюсами. Имхо...
@zeroanyway
@zeroanyway Ай бұрын
Что хорошего в шарпе? У него нет виртуальных потоков, нет ADT и паттерн матчинга с полнотой по ним же, нет всей полноты мощности дженериков жавы, да даже прокси объекты там нельзя создать не из интерфейсов. Плюс вм жавы >>>> шарпа.
@neshkeev
@neshkeev 3 ай бұрын
Люди, которые называют java явой, должны называть jazz яз
@turlir
@turlir 3 ай бұрын
Не представляю что испытали люди в зале, когда увидели на слайдах слово Ява. Мне в записи это читать неприятно. Можно было легко обойтись без этого дурновкусия. Не хочу делать преждевременных выводов, но для меня это признак того что конференция скатилась. После известных событий заметно что организаторы стараются заменить пропавших спикеров другими, не менее интересными. Раньше доклады были про Java, а не про Яву и более интересные.
@stariyczedun
@stariyczedun 3 ай бұрын
какой душный комментарий я по работе говорю в основном по английски и то меня это не парит. я каких только кривых произношений названий языка не слышал, особенно шведы отличаются со своей "йОва".
@user-pu7kb3il2y
@user-pu7kb3il2y 3 ай бұрын
даже если он будет говорить Джабба вместо Джавы это не умаляет того, насколько грамотный доклад и сколько человек положил труда для этого
@alws2532
@alws2532 3 ай бұрын
Её и сами джависты нет нет да и называют явой, не раз слышал. И вообще тупые попытки клеить ярлычки, как в притче про мудреца, палец и луну... как это на наполнение доклада и конференции повлияло... да никак почти.
@ITksh-zp1ob
@ITksh-zp1ob 3 ай бұрын
@@alws2532 13 лет пишу на яве, сейчас на котлине, никогда не парился говорить ява джава, какая разница.
@JLarky
@JLarky 3 ай бұрын
I agree. Why are people even trying to watch conferences where speakers are talking in Russian?
@AlexAlex-jk2tn
@AlexAlex-jk2tn 3 ай бұрын
Я сам разработчик С++ и меня тоже очень часто смущают, когда люди считают, что язык С++ сильно отличается от других ЯП, той же джавы. Вообще не вижу смысла, зачем что-то писать на джаве или C#, когда можно столь же легко и безопасно написать на С++. Почему некоторые люди упорно пытаются доказывать, что С++ - прошлый век, когда я бы сказал, что всё в точности до наоборот, в С++ у тебя никаких дополнительных абстракций в виде ява-машины нет, и поэтому код выполняется гораздо проще и производительней, а главное, что если следовать паттернам джавы, то никаких проблем с безопасностью не возникает, просто не нужно использовать низкоуровневые вещи (типа оператора new/delete), если вы не пишете что-то супер низкоуровневое с требованием к производительности и где вы бы и так без C++ не обошлись.
@alekseylebedev6278
@alekseylebedev6278 3 ай бұрын
Потому что людям нужно решать проблемы бизнеса здесь и сейчас, а не проблемы С++.
@AlexAlex-jk2tn
@AlexAlex-jk2tn 3 ай бұрын
@@alekseylebedev6278 У С++ проблем не больше чем у других языков, тут скорее от разработчика зависит, чтобы он не лез под капот языка и не использовал, то, что для него не делали (new, delete, raw-pointers, etc), а использовал то, что общепринято использовать.
@alws2532
@alws2532 3 ай бұрын
Может нужно сначала реально иметь серьёзный опыт реальной разработки в других языках перед таким высказыванием? Прошлый не прошлый век плевать, но плюсы имеют ряд своих проблем удорожающих разработку, иначе бы со столь мощной историей и багажом от фреймов до стандартов на которые многие как минимум смотрели при создании других ЯП бы правил половиной мира.
@alws2532
@alws2532 3 ай бұрын
С Java вообще странное сравнение, там макака(условно) парой кликов(почти буквально) в IDE может даже не написать, а уже поднять и настроить шаблонный кубернетис с флотом микро-сервисов от базы, шины сообщений, бэком со всеми слоями и системой тестирования, и т.д. Может я отстал и такое есть в C++?
@AlexAlex-jk2tn
@AlexAlex-jk2tn 3 ай бұрын
@@alws2532 Возможно вы действительно не осведомлены в современных IDE, т.к. тоже самое делается и для С++ и для Python. Но это же всё кодогенерация и она не делает того, что реально нужно заказчику, поэтому и нужны программисты, а в большинстве случаев вообще приходится работать существующим проектом, а не писать новый, и тогда кодогенерация почти не пригождается, разве что классы генерировать.
@ruff7209
@ruff7209 3 ай бұрын
С - си, Java - джава....нет бл "ява" Самоходный кринж и бедные слушатели в зале
@user-vg4sp9zo7f
@user-vg4sp9zo7f Ай бұрын
Открой окно душнила, у меня аж монитор от тебя запотел.
КАК ДУМАЕТЕ КТО ВЫЙГРАЕТ😂
00:29
МЯТНАЯ ФАНТА
Рет қаралды 10 МЛН
DAD LEFT HIS OLD SOCKS ON THE COUCH…😱😂
00:24
JULI_PROETO
Рет қаралды 16 МЛН
Inside Out Babies (Inside Out Animation)
00:21
FASH
Рет қаралды 16 МЛН
Fast and Furious: New Zealand 🚗
00:29
How Ridiculous
Рет қаралды 41 МЛН
Рёв Джигурды или Чубака возвращается
3:09
стас старовойтов
Рет қаралды 54 М.
Максим Дегтярёв - Лилипут на горизонте
43:42
JPoint, Joker и JUG ru
Рет қаралды 298
Java: что это и для чего нужен
4:58
Энциклопедия Айтишника
Рет қаралды 12 М.
Новинки года: Java 22
46:58
JPoint, Joker и JUG ru
Рет қаралды 6 М.
Алексей Шипилёв - Java-объекты наизнанку
1:08:03
JPoint, Joker и JUG ru
Рет қаралды 20 М.
Копия iPhone с WildBerries
1:00
Wylsacom
Рет қаралды 8 МЛН
Look, this is the 97th generation of the phone?
0:13
Edcers
Рет қаралды 7 МЛН
Tag him😳💕 #miniphone #iphone #samsung #smartphone #fy
0:11
Pockify™
Рет қаралды 2 МЛН