1. C# / Говнокод #25311

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    class PituhFazer{
        private Dictionary<string, ObservableCollection<SgnilPitushokViewModel>> Ghildren { get; } = new Dictionary<string, ObservableCollection<SgnilPitushokViewModel>>();
    
        // почему жаба может так а шарп нет?
        private Dictionary<string, ObservableCollection<SgnilPitushokViewModel>> Ghildren { get; } = new Dictionary();
    }

    Почему в питушарпе до сих пор нету выведения типов из под конструктора?
    меня заебало уже писать эти багры

    Запостил: Lorip1971, 15 Января 2019

    Комментарии (113) RSS

    • при чем, до недавних пор, в default тоже надо было весь этот багор писать, если хочешь параметр поумолчанию. наслаждайтесь:
      public void RunPituh(Maybe<Dictionary<string, ObservableCollection<SgnilPitushokViewModel>>> children = default(Maybe<Dictionary<string, ObservableCollection<SgnilPitushokViewModel>>>)) {
      
      }

      щас благо можно написать проще
      public void RunPituh(Maybe<Dictionary<string, ObservableCollection<SgnilPitushokViewModel>>> children = default) {
      
      }


      но естественно хуй тебе за щеку, мой питушок. ведь ты сидишь на легаси куче говно, которую еще мамонты клали на asp.net webforms и питух-студіо 2010, где о не то что о С#7, о С#5 даже и не слышали, так шо кушай говнеца.
      Ответить
      • >питух-студіо 2010,
        ну так и джава в 2010 тоже не могла new Dictionary<>() -- это в семерко завезли
        Ответить
        • пиздец. ты тред вообще читал? я не спрашивал, схуляи в 2010м не было. я спрашивал, какого хуя до сих пор нету?
          а про 2010 я говорю, что тебе связывают руки, и даже если что-то появится, то ты будешь сосать хуй, вместо каши гарбузовой, ибо твой прожект - легаси гавно, в котором ретаргет никому и сниться не может.
          Ответить
          • что мешает обновиться то?
            Ответить
            • садют тебя на легаси говно. которое сапортится уже 14 год. ты не имеешь права взять сделать ретаргет на новый фреймворк, ты обречен жрать говно пока не спрыгнешь из галеры/проекта. ты понимаешь это? тебе никто не позволит.
              ебаная вижуал студео не в состоянии (блять, это вообще смешно, жду когда продукты жыдбрейнс будут де факто для любого кодинга. мелкомягкие уже заебали), нормально открыть проекты старых студий. она что-то конвертирует, но в итоге тебе срет 100500 ошибок которые надо сидеть и руками править. а ты добавь к этому что проекта на 100+ тыс. строк кода. никакой человек не будет в здавом уме такого делать, лишь для того, чтобы написать Dictionary<string, Pituh> pituhi = default; вместо Dictionary<string, Pituh> pituhi = default(Dictionary<string, Pituh>);
              хуле не ясно?
              Ответить
              • Т.е. шарпик хуже крестов в этом плане? Пиздец.
                Ответить
                • Вероятно не шарпик, а студия.

                  Если ты попробуешь в VS 2017 открыть проект/солюшен на С++ из студии 6.0 то отсосешь боли и говна по самые корки
                  Ответить
                  • вот по этому я за "vim" и "Makefile".

                    Я могу открыть проект, который не менялся с 1996 и всё будет работаьть
                    Ответить
                  • Х.з., ладно в крестах там куча опций конпелятора да линкера. Но в шарпике то что вообще в проектах есть помимо списка файлов да ссылок на проекты с зависимостями? Что там вообще конвертировать?
                    Ответить
                    • В полном дотнете есть сраный "MSBuild", а в продовом коде обычно на него завязан миллион логики. Выглядит как говно, работает как говно и ломается каждую новую студию. На мсбилде кстати работает расовая дотнетная кодогенерация (TT шаблоны).

                      В ".NET Core" это всех заебало, и они, пока делали его первую версию, поменяли с десяток разных проектных систем, но в итоге вернулись назад к "MSBuild"
                      Но в отличие от полновесного дотнета, там они запихали под ковер хуеву тучу легаси говна, и проектная система стала намного проще и портируемее
                      По итогу ".NET Core" сейчас собирается чем угодно и где угодно и даже под прыщами, однако кровавый тырпрайз далеко не весь даже начинает думать о переходе на него
                      Ответить
                    • не в шарпике дело, в xmlе для сохранения конфига

                      ты в .sln и .cproj файлы зогляни
                      Ответить
                      • Т.е. для шарпика там такие же портянки хуйни, как и для крестов!?
                        Ответить
                        • Как Вы догадались, Ватсон?

                          Берём случайный проект с Гитхаба:
                          https://github.com/icsharpcode/SharpDevelop/blob/master/src/Automated.proj

                          https://github.com/icsharpcode/SharpDevelop/blob/master/SharpDevelop.sln
                          Ответить
                          • Шарпдевелоп - древнее стагнирующее говно мамонта со времен .NET 2.0, естественно там все плохо будет
                            Ответить
                        • От этой хуйни стараются уходить (выше писал), а кто-то еще юзает более другие билдсистемы, отличные от "MSBuild" ("Cake" или "Nuke", например, там вообще правила сборки прямо на C# пишутся)
                          Ответить
                          • Поэтому я за билдсистему, которая занимает одну строчку:
                            gcc -std=c11 -O3 -Wall $(find -name '*.c' -printf "%p ") -o main
                            Ответить
                            • говно это, а не билд система.
                              Она не собирает маны, не умеет инсталлировать программу, не учитывает ключи, не умеет дособирать измененные модули

                              Вот билдсистема:
                              $ cat Makefile
                              PROG=	foo
                              MAN=	foo.8
                              
                              .include <bsd.prog.mk>


                              Она все это делает и занимает 3 строки
                              Ответить

                            • На шарпе так тоже можно

                              csc $(find -name '*.cs' -printf "%p ") -out:app.exe -target:exe -optimize
                              Ответить
                        • Ттам всегда портянки, даже для Business Analyst проектов (таблицы для SQL, OLAP кубы итд)
                          где студия -- там треш
                          Ответить
                          • SQL таблицы то там нахуя? Им лень было отдельный файл завести?
                            Ответить
                            • Я имел ввиду тип проекта -- SQL project.

                              В нем хранится схема (структура базы) и информация о подключении к ms-sql.

                              Кстати, это очень удобно, потому что они умеют генерить diff (миграционные скрипты), и валидировать тоже умеют:

                              То-есть я храню в VCS схему базы. Вот я хочу добавить колонку и пишу в .sql файл новую колонку, студия проверяет что он корректный, сравнивает таблицу с таблицей в СУБД и выдает мне diff, который я выполняю на сервере.

                              Я не уверен что DataGrip так может
                              Ответить
                • это скорее убогость вижуал студио. до недавних пор, годной C# IDE, по сути то и не было. студия становится ИДЕ только после того, как на нее поставить решарпер.
                  сейчас жыдбрейнс клепают уже ИДЕ под все. даже под твои любимые плюсцы (да, да, зацени CLion), для шарпа - Rider. он правда еще в бэте, но он уже лучше студии в разы. (по сути та же студия с решарпером). в общем, он то уже по-людски могет в проекты разных версий.
                  Ответить
                  • А еще бывает Resharper++
                    Он делает нормальную IDE из VS для плюсов. Правда, я не понял как ему сказать что у меня чистые си а не плюсы, и он стал мне предлагать там auto использовать
                    Ответить
                  • > зацени CLion

                    Тормозное дерьмище на жабе, выжирающее дохера оперативки, да к тому же еще платное (по подписке) и проприетарное? Нет, спасибо. Если мне будет нужна тормозная говноиде на жабе для Си (на говноплюсах не пишу) - я возьму какой-нибудь эклипс (бесплатно при том).
                    Ответить
                    • да тормозное. но не дермище, отнюдь. и речь шла о замене нотпада с подсветкой, который майкрософт называет IDE, на нормальную среду разработки, которая помогает разработчику. вижуал студио тоже платная, но при том, что она стоит почти в два раза дороже, она может на порядок меньше чем райдер.
                      да и кто нахуй в здравом уме будет платить за ИДЕ, скачал кряки и ебашь. а если ты работаешь на галере, так и тебя вопрос цены вообще ебать не должен, галера все купит (наверное).

                      на счет проприетарности. я не шарю в этом, обьясни, почему это плохо?
                      Ответить
                      • > вижуал студио тоже платная
                        Редакция «Community» бесплатная уже года полтора. Причём по лицензии физики могут ебошить в ней любые приложения, в том числе и на продажу.
                        Ответить
                        • как бы для физиков больше и не надо. но мы жэ с вами в ынтырпрайзе. мне, например, приходилось сапортить говно мамонта, в котором тесты неписаны с участием ms fakes. так уот, без вижуал студио ынтырпрайз ты хуй запустишь эти тесты. т.к. fakes идет как часть ынтырпрайз пакета оной.

                          в жыдбрейс же, ты получаешь все и сразу. к слову, для жабы (увы, пока только для жабы) тоже есть есть комюнити версия intellij idea.

                          я не сказал бы что цена сильно кусючая. к тому же, всегда можно сбросить триалку, попросить у галеры лицуху или, на худой крайняк, самому купить. мы ведь все гребем за долары, и можем позволить себе. а если не за долары, то зачем грести тогда? в общем, выйти з положения можно.

                          можно еще долго кукарекать по поводу хуевости студии и хуйовости райдера. но я лично для себя решил, сравнивать студию (даже ынтырпрайс) с райдером - гиблое дело. в райдере просто хуева куча тулзов для рефакторинга и удобных встроеных утилит, даже не смотря на то, что он все еще в бэте. я очень сильно к ним привык (еще со времен когда я был на жаба EE и ведроиде). их либо нету, либо они хромают на обе ноги. так что я все равно выберу райдер ибо оно того стоит. имхо.
                          Ответить
                          • Студийный проект можно собрать с консоли или на CI через MSBuild.

                            А у Intellij с этим как? Я знаю что для джавы там есть gradle, а для .NET? Если у меня проект в Rider, то как я буду его на CI собирать?
                            Ответить
                            • если не ошибаюсь, он юзает тот же мс билд. ты можешь без проблем открывать один и тот же проект в райдере и студии, хоть через день менять иде. оно будет работать.
                              Ответить
                              • А этот формат документирован на MSDN?

                                Если да, то я понимаю как они эт делают. Если нет, то мне страшно. Но с другой стороны там может быть API какой-то чтобы читать эти файлы
                                Ответить
                        • >>полтора
                          лол
                          The Community edition was announced on 12 November 2014.

                          А Express был вообще черте когда, он он был для одного ЯП и на него не ставился R#, а без R# проще уж в Notepad++ писать
                          Ответить
                          • На «Экспресс» вообще не ставились никакие «vsix».

                            «Экспресс» для «C++» ещё был без «ATL» («ATL» приходилось откуда-нибудь пиратить, чтобы скококонпелировать серьёзные программы).
                            Ответить
                            • >>не ставились никакие «vsix».
                              Даже VsVim? ужас!

                              зы: у меня когда-то были спираченные диски с MSDN и Visual Studio 6.0, и там всё работало. Летала на WIn98, кстати. А VS 2017 мне кажется что грузится 4 минуты даже на бормадновом coffe lake с 32 гг памяти и ssd
                              Ответить
                      • И сколько же (и в чем конкретно?) я получу дополнительного удобства от использования Clion, если пишу я на Си, и всякие фичи, касаемые плюсов (всякие там автодополнения из неймспейсов с темплейтами) мне нахрен не нужны?

                        Я пока вижу, что в своём Clion они в основном затачивают всякую херню конкретно для плюсоебов, со всякими новыми говностандартов, а для сишников и так уже всё давно сделано в каком-нибудь Eclipse CDT, и Clion в этом отношении НИЧЕГО ОХУЕННОГО предоставить не может. Или я не прав?
                        Ответить
                        • на сях ты получишь довольно много инспекций, рефакторинг вроде rename, умный комплишен итд

                          но ты ведешь религиозный спор, и довольно понятно что ты всегда будешь считать джаву и проприетраный софт говном, хотя ты даже никогда в жизни clion в глаза не видел.
                          Ответить
                          • на сях инспекции (инспекции - встроенный статический недоанализатор, подсвечивающий ошибки), рефакторинг и комплишен есть в Eclipse CDT. В Clion это реализовано принципиально лучше?

                            Вообще, посмотри внимательно на этот коммит
                            https://github.com/radare/radare2/pull/6085/files?utf8=%E2%9C%93&diff=split#diff-7f6f82199b572cdbe767aa7a1ba9b436L380

                            и попробуй сказать, какой IDE всю эту херню можно автоматизировать? Внимательно так посмотри на кучу однотипных изменений. Знаешь как я это делал? Я написал говноскрипт которому скармливал исходник и он мне выплюнул обратно исходник с нужными заменами (потом еще пришлось некоторые места руками подправить, но то фигня). НИКАКАЯ СРАНАЯ IDE это делать не умеет. А если и умеет, то разве что через написание говноскрипта, но говноскрипт я и без IDE напишу
                            Ответить
                            • >В Clion это реализовано принципиально лучше?
                              да. Скачай и проверь.

                              >>попробуй сказать
                              https://www.jetbrains.com/help/idea/structural-search-and-replace.html
                              Ответить
                              • > да. Скачай и проверь.
                                Нет, я смотрел их рекламные видео, и нихрена полезного и охренительного для себя не увидел.

                                > https://www.jetbrains.com/help/idea/structural-search-and-replace.html
                                Ну так это и есть написание таких недоскриптов-регекспов. И у этого подхода есть достаточно очевидные ограничения, например что если мне надо не просто что-то заматчить, а провести какие-нибудь операции? Ну скажем, есть у меня куча кода вида
                                #define CRAP1 0xff
                                #define CRAP2 0xcc
                                #define CRAP3 0x33
                                
                                и надо это переделать в:
                                
                                #define CRAP1 0b11111111
                                #define CRAP2 0b11001100
                                #define CRAP3 0b00110011

                                Этот structural-search-and-replace мне поможет?
                                Ответить
                                • >Нет, я смотрел их рекламные видео
                                  ;)))ну-ну

                                  >Ну так это и есть написание таких недоскриптов-регекспов
                                  Ты даже не осилил прочитать первые три строчки ссылки.

                                  В структурном поиске ты работаешь с результатами парсинга, а регулярками ты парсишь сам.

                                  Ладно, я не собирался вступать в религиозный спор.

                                  Это всё равно что прийти на linux.org.ru, и рассказывать там про PowerShell.
                                  Ответить
                                  • > В структурном поиске ты работаешь с результатами парсинга, а регулярками ты парсишь сам.

                                    Один хрен это всё неуниверсальное говно, которое скриптами можно решать намного лучше, чем какими-то ограниченными говнофичами IDE.
                                    Ответить
                              • Кстати что там в Clion с профилированием, построением всяких там графиков красивых?
                                https://wiki.eclipse.org/Linux_Tools_Project/News/NewIn30#LTTng_CPU_Usage_View https://wiki.eclipse.org/images/f/fb/TimeAlignment_sash_scaled.png
                                что-нибудь такое есть?

                                https://blog.jetbrains.com/clion/2018/10/clion-2018-3-eap-profiler-multiline-todo/ что-то вроде делают, но как-то не впечатляет. Думаю, они там слишком заняты поддержкой всякой С++20 фигни и всяких автокомплитов
                                Ответить
                                • > но как-то не впечатляет
                                  Конечно не впечатляет, ведь это коммерческий софт, написанный на джаве.

                                  Если бы это был GNU софт под лицензией GPL написанный на Plain C, ты бы был в восторге
                                  Ответить
                                  • Тут GNU или не GNU совершенно ни при чем, в опенсорсном Eclipse это сделано лучше
                                    Ответить
                            • >В Clion это реализовано принципиально лучше?
                              да. Скачай и проверь.

                              >>попробуй сказать
                              https://www.jetbrains.com/help/idea/structural-search-and-replace.html
                              Ответить
                            • >В Clion это реализовано принципиально лучше?
                              да. Скачай и проверь.

                              >>попробуй сказать
                              https://www.jetbrains.com/help/idea/structural-search-and-replace.html
                              Ответить
                            • Это не программирование, это вышивание деревянными ложками какое-то
                              Ответить
                      • > на счет проприетарности. я не шарю в этом, обьясни, почему это плохо?

                        Это плохо уже хотя бы по той простой причине, что я не могу саму IDE под себя пропатчить (изменить некое дефолтное поведение, заложенное разработчиками, которое лично мне не нравится, и которое не может быть переконфигурировано никакими настройками, а может быть только исправлено через изменение кода IDE) или пофиксить какие-то баги самостоятельно, не дожидаясь момента, когда это соизволят сделать разрабы IDE, которые заняты в основном допиливанием поддержки автодополнений шаблонов через констэкспры в классах, которые мне нахрен не нужны.
                        Ответить
                        • сырцы intellij idea community есть, но конечно clionа нет
                          Ответить
                        • может я просто ебаная c# макака, но мне в жизни ни разу еще не понадобилось менять исходники IDE. да мне не хватает жутко функций у вижуал студио, но у IDE от жыдбрейнс есть ооочень много настроек и ооочень много плагинов, сказать что она сильно дохуя настраивается - не сказать ни чего. на худой крайняк можно всегда свой написать, у меня банально есть ВСЕ нужное мне, и я даже не представляю что еще ты хочешь менять в исходниках IDE.
                          Ответить
                      • > вижуал студио тоже платная, но при том, что она стоит почти в два раза дороже, она может на порядок меньше чем райдер.

                        Для вижуал студии хотя бы есть вариант купить лицензию один раз, а не платить ежемесячно или ежегодно. Но вообще эти ваши тормозные говноиде просто нахер не нужны, можно в швабодном емаксе обмазаться плагинами с CEDET. Или вообще в виме. Меня эти IDE бесят
                        Ответить
                        • вижуал студио тоже платная есть бесплатная
                          Ответить
                    • обожаю нытье про "жабатормозит"
                      Ответить
                      • Вот и я не понимаю, зачем ныть, когда можно выбрать то, что не тормозит.
                        Ответить
                        • у меня ничего не тормозит, кстати. Возможно, проблема не в жабе
                          Ответить
                          • У меня тоже эклипс не тормозит.
                            Ответить
                          • Возможно. Однако, у меня почти ничего не тормозит, кроме «Eclipse». Может быть, я просто не умею с ним пердолиться.
                            Ответить
                            • Что ты в нем открываешь? Ты блядь pycharm попробуй, потом про тормоза расскажешь. Тормозит у него, блядь.
                              Ответить
              • Я не понимаю почему ты на меня агришься. Я что ли тебя на легаси гавно сдаю?

                Я понял твою проблему. Кстати, у JB есть Rider: это IDE для .NET, но перейти на нее со студии в старом проекте примерно нереально, я понимаю
                Ответить
                • я агрюсь, потому что я тебе говорю про гандоны, а ты мне - про зонтик.
                  Ответить
    • действительно ацтой

      почему вывод типов (var) там не работает?

      зы в жабе
      new Dictionary<>(); а не new Dictionary();
      Ответить
      • да, сорян. давно уже на жабе не кодил. один хрен, это короче, чем вся та простыня.
        Ответить
    • Забыли меня наверное уже, уебки

      В C#8 обещали такую хуйню
      Dictionary<string, AbstractDelegatingFactoryFacadeFooBarPit uh> gay = new();
      Ответить
      • Я тебя помню. Это же тебе зубы багром выбили? Ты ещё потом пьяный в канаве лежал и орал.
        Ответить
      • а чем это отличется от
        var gay = new Dictionary<string, AbstractDelegatingFactoryFacadeFooBarPit uh>();
        Ответить
        • Тем, что твой вариант не канает в инициализации полей, свойств и прочей хуеты
          Ответить
          • а, это типа для

            class Petux{
             Dictionary<string, AbstractDelegatingFactoryFacadeFooBarPituh> gay = new()
            }


            А зачем так сложно сделали?
            Почему нельзя было сделать единообразно?

            Вот в кокококотлине синтаксис одинаков
            val petux = ArrayList<Petuh>()
            
            class Petux {
              val petux = ArrayList<Petuh>()
            }
            //но можно и в обратную сторону
            petux: List<Petuh> = ArrayList() //хотя просто () всё же нельзя
            Ответить
            • Ну, в "C#" уже сто лет есть синтаксис new с разными скобочками

              var a = new { pituh = 123; }; // анонимный класс
              var b = new[] { 1, 2, 3 }; // автовывод типа элемента массива
              std::vector<std::map<int, std::string>>::const_iterator c = new(); // новомодная хуета
              Ответить
              • >C#
                >std::vector<std::map<int, std::string>>::const_iterator c = new(); // новомодная хуета

                C##?
                Ответить
              • Кстати, оператор new не нужен. Обезьяны-повторюшки его скопировали из плюсов
                Ответить
                • Кроме new есть еще stackalloc
                  int *a = stackalloc int[228];

                  С классами не канает
                  Ответить
                  • обоже, это unsafe?
                    что тут a? указатель на reference type в стеке?
                    Ответить
                    • Ну это не совсем reference type
                      Это массив, настоящие рефтайпы на стеке не разместить
                      И массив из рефтайпов - тоже
                      На стеке можно разместить структуры, не содержащие внутри рефтайпов (и массивов тоже, причем уже из чего угодно), и массивы из них
                      VLA - поддерживается
                      Ответить
                      • а, то-есть на стеке реально лежит 228 интов а "a" на них указывает?
                        но если я обычный массив создаю то он создается на куче, верно?


                        блин, эти жабы и сишарпы и обжси сушат мой мозг.

                        Вот когда я пишу на сишечке я всегда четко понимаю где куча, где стек, где указатель, где сами данные.

                        А в этих управляемых япах нахуивертили
                        Ответить
                        • > а, то-есть на стеке реально лежит 228 интов а "a" на них указывает?
                          > но если я обычный массив создаю то он создается на куче, верно?
                          Да

                          > Вот когда я пишу на сишечке я всегда четко понимаю где куча, где стек, где указатель, где сами данные.
                          А тут чего не понятного? Классы и массивы - в куче, структы - на стеке (инт тоже структ)
                          Разве что с боксингом можно иногда охуеть, но это очень редко
                          От структов можно кстати тоже указатель взять, даже stackalloc писать не надо
                          public struct Pituh { public int x; }
                          
                          var a = new Pituh();
                          var b = (int*) &a;
                          *b = 228;
                          Console.WriteLine(a.x);
                          Ответить
                          • Да, я помню что валуе тайпы на стеке а классы на куче.

                            Но просто в си (не в плюсах!) я всегда понимаю по типу переменной что это: указатель или данные.

                            А в том же C# все выглядит одинаково.
                            Petux p; //что это? указатель на питуха или сам питух?
                            // А зависит от того, является ли питух валуе тайпом


                            Честнее сделано в Objc, там хотябы есть звездочка
                            GKPetux *petooh = [[GKPetuh alloc] init];
                            // видно что питух живет на куче
                            // кто-то может подумать что можно создать питуха на стеке без alloc и без звездочки
                            // но это не работает


                            Самый ужас в том что у структур можно вызвать ``new`` , но это просто вызов конструктора, и вовсе не говорит о том что структуру положат в кучу, верно?
                            Ответить
                            • > вовсе не говорит о том что структуру положат в кучу, верно?
                              Да

                              Ну и алсо структуры в дотнете не так часто употребимы, чтобы беспокоиться об одинаковости
                              Ответить
                              • А если я хочу передать два параметра в метод, то я не должен юзать структуру чтобы не срать в кучу?

                                или это за меня JIT порешает?
                                Ответить
                                • > А если я хочу передать два параметра в метод
                                  Делаешь два параметра у метода (???)
                                  > не должен юзать структуру чтобы не срать в кучу
                                  Структуры не аллоцируются в куче
                                  Ответить
                                  • ну блин, у меня есть пользователь с логином и ID.
                                    и 44 метода которые его получают

                                    разумеется, я хочу структуру с двумя полями

                                    вот тут-то структура и пригодится
                                    Ответить
                                    • Да, можешь юзать структуру (только обязательно ридонли, иначе найду и по еблу надаю)
                                      Ответить
                                      • Я вообще считаю что всё по максимуму должно быть ридонли.
                                        В котлине всё ридонли если явно не сказано другое, и потому я за

                                        даже блох писал про джаву что лучше все поля сделать final
                                        Ответить
                                        • Лет 15 назад мне пришлось кастрировать нескококолько приложений J2ME, чтобы они запустились на «Нокле» (на «Сименсе» они запускались, а вот с «Ноклой» были проблемы). Как ни странно, помогло добавление атрибута «final» к нескокококольким полям. Это почему-то уменьшило размер и требования к куче.
                                          Ответить
                                          • Забанить тебя? За пиздёж.
                                            Ответить
                                            • Извините, наврал. Не 15, а где-то 10.

                                              Один хрен, подробности уже с трудом вспомню.
                                              Ответить
                                          • вероятно, коспулятор смог что-то заинлайнить
                                            Ответить
                                      • Что ты мне сделаешь? Я в другом городе.
                                        Ответить
                                      • О, слушай, а меня найти можешь? А то я потерялся, и не знаю где я. Если найдёшь отведи меня по этому адресу: г. Верхнезалупинск ул. Пенина д. 0.217 кв. ⅓√2, у меня такая обоссаная дверь с чиркашами, я тебя со мной там буду ждать, если не найдёшь иди на местную помойку там спросишь у Сёмёна Петровича, он должен знать.
                                        Ответить
                                        • Он заблудится в саду, я сама его найду
                                          Ответить
    • В Java у дженериков type erasure, поэтому Dictionary и Dictionary<K, V> это по сути один и тот же тип. Параметризированные аргументы K и V это сахар времени компиляции и не более.

      Однако в C# такого нет; Dictionary и Dictionary<K, V> могут быть два совершенно разных типа (такое различение присутствует в базовой библиотеке, например IEnumerator и IEnumerator<T>; в рантайме это два типа IEnumerator и IEnumerator`1)

      Поэтому было бы неправильно делать так, как в Java (конструируем тип одного типа и приравниваем к переменной другого типа). Вообще подход в Java странный, можно было бы вместо это ввести var и покрыть куда большее число случаев, чем с этим странным синтаксисом HashMap<>
      Ответить
      • Джависты решили сохранить обратную совместимость, а .NETчики -- нет.
        В итоге дженерики в C# есть в рантайме.

        Забавно что они умеют инстанциироваться в разные классы (как шаблоны в С++), позволяя например иметь настоящий int в Dictionary<int, int>.
        В Java так нельзя.
        Ответить
        • Обратная совместимость-то на месте. Старый же код без проблем работает в новом рантайме. Тут скорее проблема в том, что происходит дублирование кода, т.к. есть два неймспейса: System.Collections (старые коллекции) и System.Collections.Generic (новые коллекции). Но это совсем небольшая цена для всех тех плюшек, которые вводят reified generics: производительность, адекватная поддержка в рефлексии, отсутствие хаков, если хочешь сделать new T[] и т.д.

          Всё равно синтаксис HashMap<> - странное решение. Его явно ввели, чтобы уменьшить копипаст при перечислении параметров, типа:

          было:
          HashMap<String, String> map = new HashMap<String, String>();

          стало:
          HashMap<String, String> map = new HashMap<>();


          Но ведь если бы был введён var, то покрылся бы и следующий случай, который до сих пор приходилось в Java копипастить:

          ObjectBuilderAdapterFactory objectBuilderAdapterFactory = new ObjectBuilderAdapterFactory();


          Похоже, что Oracle одумались и в Java 10 есть-таки var: https://dzone.com/articles/finally-java-10-has-var-to-declare-local-variables

          Не в первый раз замечаю, что история развития Java такая, что сначала пытаются сделать как-то по-странному, а затем в конце концов делают как в C#. Напр., изначально в Java авторы не хотели вводить подобие делегатов как в C#, потому что, дескать, анонимные классы и так хороши; а тут нате лямбды через какое-то время ввели. В итоге язык становится зачастую сложнее C#, хотя хотели наоборот: или приходится пилить странные хаки (чтобы сделать простейшее new T, например), или в языке существует двойственность синтаксиса, т.к. синтаксис версия "по-странному" и есть новый синтаксис "по-нормальному".
          Ответить
          • Код с генериками не работает в .NET 1.0 и 1.1.

            Про var согласен: вывод типов надо было сделать еще 15 лет назад, но в Java принято считать что программисты слишком глупы для такого.
            Ответить
            • Ну это уже не обратная совместимость (что новый фреймворк старые проги умеет), а прямая (что новые проги работают на старом).
              Ответить
            • >Код с генериками не работает в .NET 1.0 и 1.1.
              А зачем вообще лочиться в какую-то старую версию и не апгрейдить её? Как будто сами себе придумали проблему, сами и решили...
              Ответить
              • рискну предположить что на момент завоза генериков в Java на ней уже было миллион строк энтерпрайзкода стоимостью миллиард долларов

                в .net было проще
                Ответить
                • Так эти миллионы строк кода на новых версиях JVM что, не работали? Почему новая версия JVM не может быть надмножеством старой JVM+новые фичи?
                  Страх появления новых багов в новых JVM?
                  Ответить
                  • > страх
                    Ага, энтерпрайз же. У них и операционки по 10 лет только security фиксы получают.
                    Ответить
          • Вся философия джавы строится на изымании из языка полезного функционала потому что он "сложный". Джава это такой С++ для умственно неплоноценных.
            Ответить
            • Потому что энтерпрайзу нужно писать предсказуемую прикладнуху. А не открывать(!) новые возможности хитровыебанных языковых конструкций и ходить по минному полю из UBов.
              Ответить
              • Как-то в C# нету УБ, и в кокотлине нет, а писать полотны тупого бойлерплейта там нужно куда реже
                Ответить
            • >Вся философия джавы строится на изымании из языка полезного функционала потому что он "сложный"

              Но в конечном счёте, из-за переупрощения рантайма, пользоваться Джавой получается сложнее, чем в C#. Пример с new T[], T.class и т.д. в дженериках я приводил (нужно изголяться с рефлексией). В C# It Just Works (tm). Примитивные типы выбиваются из объектной иерархии и являются странным исключением (в C# valuetype - предсказуемая часть языка объектной иерархии), в итоге, например, boxing сделан через костыли со специальными wrapper'ами и т.д. В C# это опять It Just Works. В C# есть unsigned-типы, но никто не заставляет их использовать, поэтому проблем нет. В Java же, если вдруг нужна unsigned-логика, нужно изголяться пилить костыли. Простыни с checked-исключениями и т.д. и т.п.

              Хотели как лучше, а получилось как всегда.
              Ответить
    • asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf asdfasdf
      Ответить

    Добавить комментарий