|
jdk17
|
|||
---|---|---|---|
#18+
Остался пустяк. Как всем впарить эту ссылку. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 21:39 |
|
jdk17
|
|||
---|---|---|---|
#18+
вадя mayton а ядра видяшки ферма из нескольких сотен самсунгов, или ксиоми компактно. Потому что люди попробовали и получилось грустно, в году эдак в 2010 еще можно было. но тогда не было arm72. Сейчас есть arm72 но уже нет 2010 года :) По той же причине почему и ложкой огород копать не стоит, а лопатой есть суп. Вроде можно, но целесообразность вызывает сомнения. Ферма из 300 сотен самсунгов ака samsum s20e например по 45тыр будет в 13_500_000 это гдето 65 видеокарт 3080 гдето по 200тыр Можно например зайти в ДНС и спросить почему samsung s20e а наличии имеется а видеокарты rtx3080 все еще нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2021, 00:48 |
|
jdk17
|
|||
---|---|---|---|
#18+
lleming, это конечно верно. но потребление видях намного больше. с другой стороны - если вмдяхи такие быстрые, почему на их основе нет материнок? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2021, 05:10 |
|
jdk17
|
|||
---|---|---|---|
#18+
вадя lleming, это конечно верно. но потребление видях намного больше. с другой стороны - если вмдяхи такие быстрые, почему на их основе нет материнок? По той же причине по которой суп не едят вилкой а огород не копают ложкой. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2021, 13:42 |
|
jdk17
|
|||
---|---|---|---|
#18+
вадя с другой стороны - если вмдяхи такие быстрые, почему на их основе нет материнок? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2021, 14:01 |
|
jdk17
|
|||
---|---|---|---|
#18+
lleming По той же причине по которой суп не едят вилкой а огород не копают ложкой. то что счас это не делают - не значит, что не будут делать. время покажет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2021, 14:03 |
|
jdk17
|
|||
---|---|---|---|
#18+
Никанор Кузьмич Процессор в видяхе заточен на проведение только этих операций и выполняет их на порядки быстрее, чем процессор общего назначения. Но любые другие операции он выполняет намного хуже. Нет. Он всё таки чуть более универсален. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2021, 17:17 |
|
jdk17
|
|||
---|---|---|---|
#18+
вадя это конечно верно. но потребление видях намного больше. с другой стороны - если вмдяхи такие быстрые, почему на их основе нет материнок? Они не быстрые. Там просто на одном кристалле собрано много мелких АЛУ (thread) которые делают простые операции. Они получают общее задание типа рендеринг 1 кадра изображения и далее распараллеливают его на всех. Кадр скорее всего бъётся на сегменты и каждый thread делает узкую задачу. Например красит полосочку полигона алгоритмом Гуро. Построить какую-либо универсальную архитектуру на таких мелких АЛУ вряд-ли получится. Тут скорее всего самая главная проблема как всегда лежит в нас. В разработчиках. Большинство алгоритмов для бизнеса например нихрена не параллелятся так чтобы получить одно задание и рендерить его со скоростью 120 fps. А рендеринг графики - это узкая задача. Которая имеет мало I/O и мало внутренних блокировок и синхронизаций. С генерацией подписей для битка - получилось удачно. А просто обобщённый алгоритм вы нихрена ни перенесете на графические процессоры. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2021, 17:25 |
|
jdk17
|
|||
---|---|---|---|
#18+
Я не в курсе на каких видяшках щас майнят. Но еще несколько лет назад слышал что не на видяшках а на таких себе узких устройствах типа такого https://www.ixbt.com/news/2021/04/25/asic-bitmain-antminer-e9-25-geforce-rtx-3090-115-cmp-30hx-240.html Они вроде эффективнее и экономнее ферм из видяшек - но есть другой недостаток. Обычно заточены на 1 алгоритм. И если биток провалится в какое-то дно-днищенское то заменить его оперативно на новую валюту будет либо сложно либо невозможно. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2021, 17:31 |
|
jdk17
|
|||
---|---|---|---|
#18+
мы попробовали на 17 залететь,сразу словили баг с десериализацей,понятно что виной всему jackson - но пока еще видимо рано - мало кто успел релизнутся на 17 версию месяца 2-3 наверно еще нужно подождать,хотя это конечно печаль - у меня сейчас например глобальный рефакторинг - и вот свитч с патерн матчингом + запечатнные классы это вот то что мне просто необходимо + рекоды делаю зачем то работу двойную ибо на 17 джаве все придется переписывать... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2021, 21:40 |
|
jdk17
|
|||
---|---|---|---|
#18+
Я как-то нейтрально отношусь ко всем этим синтаксическим изыскам. На Java 1.8 вполне комфортно, Stream API или Time API были действительно существенным улучшением. Всё равно до C# ещё очень далеко в плане всей этой синтаксической жести. Когда писал на C# я конечно всем этим пользовался, но не могу сказать, что в Java очень скучаю по этому. Мне вообще из языков больше всего нравится Lisp. Для Java и C# это недостижимый идеал. И, как это не удивительно, нравится JavaScript, потому что он духом напоминает Lisp. Какие-то извращенцы любители C#/Java/... придумали TypeScript, который нивелирует многие преимущества JavaScript. Ещё нравится Isabelle HOL, там фактически в каждой теории можно создавать свой язык со своим синтаксисом. А в Java/C#/... все эти синтаксические фишечки на мой взгляд особой погоды не делают. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 09:01 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb Я как-то нейтрально отношусь ко всем этим синтаксическим изыскам. все эти синтаксические фишечки на мой взгляд особой погоды не делают. Еще как делают- патерн матчинг не только синтаксический изыск - это реализация патерна посетитель,который широко применятеся везде ,где есть развитые иерархии классов ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 11:05 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb Мне вообще из языков больше всего нравится Lisp. Для Java и C# это недостижимый идеал. И, как это не удивительно, нравится JavaScript, потому что он духом напоминает Lisp. Какие-то извращенцы любители C#/Java/... придумали TypeScript, который нивелирует многие преимущества JavaScript. Ещё нравится Isabelle HOL, там фактически в каждой теории можно создавать свой язык со своим синтаксисом. А в Java/C#/... все эти синтаксические фишечки на мой взгляд особой погоды не делают. Common-Lisp, или какой-то коммерческий? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 11:27 |
|
jdk17
|
|||
---|---|---|---|
#18+
По хорошему завидую. Я единственное промышленное применение лиспу видел только в AutoCAD. Да и то там был какой-то свой собственный ограниченный лисп для чертежей. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 12:34 |
|
jdk17
|
|||
---|---|---|---|
#18+
вадя lleming По той же причине по которой суп не едят вилкой а огород не копают ложкой. то что счас это не делают - не значит, что не будут делать. время покажет. ну около тысячи лет прошло с момента появления вилки, а с момента появления ложки (ну или чтото ей подобное) наверное уже не одна тысяча лет. Думаешь будущее уже рядом? Совсем недолго осталось как ложки перекочуют в сельское хозяйство и они окончательно исчезнут из столовых приборов ? Не хочется тебя расстраивать и разрушать твой оптимизм ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 14:31 |
|
jdk17
|
|||
---|---|---|---|
#18+
mayton, к сожалению только Lisp как идея, потому что в коммерческой разработке я его никогда не использовал. Common Lisp слишком большой и там много странных вещей. Scheme нравится больше, он более компактный, но не нравятся гигиенические макросы (define-syntax и т.п.) или я их не понимаю, это кажется усложнением. Наверное больше всего нравится Arc, но он вообще нигде не используется. Clojure и Racket выглядят интересно, но их толком не смотрел. Конечно у меня есть и своя реализация Lisp :) По смыслу она похожа на Arc. В качестве среды разработки, файлового менеджера, NNTP-клиента, браузера и т.п. у меня был конечно Emacs, а в качестве оконного менеджера Sawfish. Мне в лиспе нравится минимализм, что в него не пытаются запихать всё, что только возможно. Всякие синтаксические вещи, проверки типов и т.п. добавляются самими программистами. Не нужно бороться с синтаксисом языка, ждать 10 лет, когда в него подвезут какой-нибудь pattern-matching. Придумывать всякие костыли, чтобы на этапе компиляции обойти ограничения языка или наоборот добавить какую-то логику (как только люди не исхищряются с template в C++). Мне когда-то очень давно нравился C++, потом я прочитал книгу Александреску, его Loki мне казалась чем-то очень клевым. А потом я познакомился с другими языками и понял, что всё это просто борьба с ограничениями языка. В итоге я пришёл к тому, что чем меньше всей этой фигни в языке (разные синтаксические конструкции, статическая типизация и т.п.), тем лучше. В JavaScript как-раз всего этого нет и код писать проще. Если где-то нужны проверки, то можно просто определить какую-нибудь функцию assert или несколько её вариантов для разных случаев и добавлять где требуется. Либо ошибки должны выявляться анализаторами кода. Хотя я не могу сказать, что и статическая типизация - абсолютное зло. Но просто если не получается сделать какую-нибудь специфическую иерархию классов с generic'ами и т.п., то и фиг с ней, можно и в рантайме проверять что требуется. Ещё одна идея, которая мне нравится в лиспе - это отношение к написанию кода как к созданию своего DSL. Скажем, у меня приложение работает с моделями. Для лиспа естественно определить несколько примитивных методов для запросов к этим моделям, для изменения моделей. На основе простейших функций определить более сложные и т.д. В итоге получится внутренне API, минифреймвок для работы с моделями. И всё приложение состоит из таких микрофреймвоков. Это звучит вроде совершенно логично. Но, блин, большинство Java- и других разработчиков, с которыми я сталкиваюсь, пишут код совершенно иначе. Обычно это какой-нибудь класс с кучей полей. В одном методе устанавливаем одно поле, потом вызываем другой метод, в котором читаем это поле и устанавливаем ещё какие-то поля. Сами методы - это куча вложенных циклов, if-ов. Полная каша, в которой вообще ничего невозможно понять. Если капнуть, то оказывается, что эти поля вообще не нужны (потому что они используются просто для передачи данных между методами, а не для хранения долговременного состояния объекта), все эти безумные вложенные циклы можно разбить на несколько повторно используемых методов. В общем что нравится: 1) Минимализм, пусть лучше в языке вообще ничего не будет, чем ждать какой-нибудь очередной синтаксический сахар годами. Например, в JavaScript нет ни Stream API, ни LINQ, но есть итераторы и этого достаточно, чтобы сделать своё Stream API. Или без классов вполне как-то обходились 2) Отношению к языку не как к данности, что если что-то нельзя написать, значит это что-то неправильное. Может просто язык стрёмный 3) Построение кода из небольших самостоятельных блоков (микро-DSL, микрофреймвоков, внутренних API). Люди, которые ни на чём кроме Java не писали, либо впадают в ступор, когда чего-то нет в стандартной библиотеке, либо пишут какой-то лапшакод 4) Конечно же уникальная штука - это макросы. В других языках это решается костылями в виде препроцессоров, шаблонов, рефлексии, аннотаций, кодогенерации, добавления синтаксического мусора, систем типов, а в лиспе всё это закрывается одной конструкцией ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 15:37 |
|
jdk17
|
|||
---|---|---|---|
#18+
localhost8080 патерн матчинг не только синтаксический изыск - это реализация патерна посетитель Например вот: 1) Есть модель . В виде XML-файла она выглядит страшно, но по сути это просто диаграмма классов с наследованием, атрибутами, связями между классами. 2) Из этой модели они сгенерили тонны Java-классов и интерфейсов. 3) В том числе сгенерили и такой класс . Да, в нём куча switch/case и if, но какая разница, сопровождать его всё равно не нужно. Если изменится модель, то все эти классы они просто перегенерят. Причём сейчас этот класс можно сгенерить с паттерн-мэтчингом вместо if. Достаточно чуток изменить шаблон кода и нажать кнопку. 4) Затем мы просто наследуемся от этого сгенеренного класса и переопределяем нужные case-методы. Если модель, для которой нужен visitor достаточно большая, то наверное, да, паттерн-матчинг позволит сделать visitor немного компактнее и надёжнее (мы на этапе компиляции будем знать, что не забыли в коде обойти какие-то классы). Но, на мой взгляд, visitor - это абсолютно типовой код, который нужно генерить и дописывать чего не хватает. Хотя, блин, на самом деле здесь не совсем visitor, а просто switch. И благодаря паттерн-матчингу этот Switch-класс больше не нужен, сейчас действительно этот код можно писать проще, хотя благодаря кодогенерации люди и раньше не особо напрягались, но сейчас и кодогенерация не нужна. Но если нам нужен не просто switch, а более сложный visitor, который рекурсивно обходит дерево, т.е. смотрит какие у объекта вложенные объекты, переходит к ним и так далее, то здесь кодогенерация может и пригодиться, а на голом паттерн-матчинге запаришься писать столько кода. Опять-таки, возвращаясь к лиспу, там вообще таких проблем нет. Не нужно ни ждать много лет паттерн-матчинга, ни генерить код, всё решается макросами. А в Java остаётся либо мучаться и ждать, либо просто генерить нужный код. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 17:14 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb В итоге я пришёл к тому, что чем меньше всей этой фигни в языке (разные синтаксические конструкции, статическая типизация и т.п.), тем лучше. В JavaScript как-раз всего этого нет и код писать проще. Если где-то нужны проверки, то можно просто определить какую-нибудь функцию assert или несколько её вариантов для разных случаев и добавлять где требуется. Либо ошибки должны выявляться анализаторами кода. Хотя я не могу сказать, что и статическая типизация - абсолютное зло. Но просто если не получается сделать какую-нибудь специфическую иерархию классов с generic'ами и т.п., то и фиг с ней, можно и в рантайме проверять что требуется. Да. В JavaScript есть memory-model напоминающая дерево объектов с полями и ссылками на функции. Есть в этом что-то от вложенных списков Lisp. Но наблюдая за тем как работают сами JS-разработчики я вижу что они практически не могут создать сколь-либо внятного фреймворка. Типичная ситуация - с утра фронт-кодер решает делать свой фреймворк на JS. И вечером он его уже заканчивает. И следующим утром он его выбрасывает в мусорное ведро и... садится писать новый. Тоесть я вижу что % повторного использования кода в JS очень низок. Или... очень низка культура передачи знаний на уровне библиотек и фреймворков. В Java к примеру есть абстракции такие как abstract class, interface, package, bundle, module(java9). Это всё способсвтует разделению декларативной части и реализации. И соблюсти этот баланс в языках - большое искусство. Чтоб интерфейс не был доминирующим или раздражающим (как в доисторических Java Beans). Вот мне сегодня если надо затащить в проект какую-то либу (ну например по работе с NoSQL БД) - лучше всего взять java реализацию. Потому-что я за 15 минут освою интерфейсы и уже буду видеть с helicopter-view то что мне надо для реализации. Подобный челлендж в С++ например чреват ковырянием в обще-системных вещах что отвлекает от главной задачи. Или в go или rust интерфейсная часть будет не так явно выражена и ее еще надо будет визуально найти и осмыслить. Сколько я ни ругал ООП а всё таки есть у него сильная сторона. Скорость освоения библиотеки. Как я буду осваивать новую библиотеку на JS - ХЗ. Мне - неудобно отсутствие типов. И мне нужно понимать где начинается контекст или жизненный цикл объектов с которыми я должен работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 17:19 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb Если капнуть, то оказывается, что эти поля вообще не нужны (потому что они используются просто для передачи данных между методами, а не для хранения долговременного состояния объекта), все эти безумные вложенные циклы можно разбить на несколько повторно используемых методов. Я думаю что насчет полей вы скорее всего ошибаетесь. А безумные вложенные циклы в Java-Enterprise разработке тоже являются анти-паттерном и от них избавляются. Возможно если вы покажете код - я пойму в чем было дело. Но вот другие практики - такие как инлайнинг или rollup циклов - в Java делать не принято. Также принято делать компактные строки кода (по 1 оператору на линию). Это упрощает дебаггинг и помогает при git merge. Тоесть такой кейс как написать лямбду в 80 символов длиной - это скорее плохой чем хороший кейс. Вообще главная цель - обеспечить читаемость кода другим человеком. А уж компиллятор как нибудь разберется. Это кстати сказал Мартин Фаулер. Код пишется человеком для людей. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 17:25 |
|
jdk17
|
|||
---|---|---|---|
#18+
mayton, я думаю, что подавляющее большинство JavaScript-библиотек - это просто ужас. Есть исключения типа d3, она построена на одной понятной идее и всё вокруг неё крутится. Вопрос нужны ли для JavaScript вообще какие-то фреймвоки. HTML, CSS, SVG и стандартные API (WebGL, ...) позволяют делать крутейшие вещи, которые на каком-нибудь SWT запаришься делать. На мой взгляд, приложение в принципе должно состоять из микрофреймвоков. Если нет хороших готовых, то остаётся писать свои. Правда нет гарантии, что получится лучше :) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 17:38 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb 1) Минимализм, пусть лучше в языке вообще ничего не будет, чем ждать какой-нибудь очередной синтаксический сахар годами. Например, в JavaScript нет ни Stream API, ни LINQ, но есть итераторы и этого достаточно, чтобы сделать своё Stream API. Или без классов вполне как-то обходились Я, читая книжку SICP изучал mit-scheme. Ни для какой-то цели. Просто так. Как забавный мозговой эксперимент. Тоесть я вообще не ставил цели использовать ским ни в какой продуктовой разработке. Просто проверял себя чтобы не заржавел. Так вот списки и ленивые списки всё таки различаются по конструированию. Обычное конструирование списков Код: java 1.
ленивое Код: java 1.
В противоположность в Haskell например все списки изначально декларированы как ленивые и stream api - органичен. Код: java 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 17:47 |
|
jdk17
|
|||
---|---|---|---|
#18+
mayton, я не могу показать код из-за NDA, но там эпичные вещи. Эпичные вещи долго описывать. Приведу такой пример (псевдокод): Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Ни selection, ни getName() нигде больше не используются. getName() однозначно не потребуется переопределять в дочерних классах, да, и дочерних классов тоже быть не должно. Зачем это поле? Зачем этот метод? Если так уж хочется сделать метод, то почему бы не передавать туда selection как аргумент? Ну, тут ещё ладно, глядя на этот код можно понять о чём он. Но когда таких полей и методов десятки, то вообще ничего не понять. Для начала что-нибудь такое (поля/методы желательно перемешать, чтобы было непонятно что в какой очередности вызывается, где и зачем используется): Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Сделать ещё несколько таких классов, чтобы они вызывали методы друг у друга. Ну, и сами методы, даже если в них есть очевидно повторно используемые вещи ни в коем случае нельзя этот повторяющийся код выносить в сервисные классы, нужно его обязательно дублировать или засирать этим кодом базовые классы, чтобы в них всё было в куче. И если тебе нужен этот код, то выбирай: либо наследуйся от этого безумного класса, либо дублируй код. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 18:02 |
|
jdk17
|
|||
---|---|---|---|
#18+
mayton в Haskell например все списки изначально декларированы как ленивые и stream api - органичен ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 18:09 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb Код: java 1. 2. 3.
Тут есть два варианта. Раньше этот метод был публичным. Потом его скрыли. Второй вариант - это плод неудачного рефакторинга. Раньше в методе было больше смысла. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 18:22 |
|
|
start [/forum/topic.php?fid=59&msg=40108463&tid=2120291]: |
0ms |
get settings: |
23ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
440ms |
get tp. blocked users: |
1ms |
others: | 305ms |
total: | 842ms |
0 / 0 |