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 даже и не слышали, так шо кушай говнеца.
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • пиздец. ты тред вообще читал? я не спрашивал, схуляи в 2010м не было. я спрашивал, какого хуя до сих пор нету?
          а про 2010 я говорю, что тебе связывают руки, и даже если что-то появится, то ты будешь сосать хуй, вместо каши гарбузовой, ибо твой прожект - легаси гавно, в котором ретаргет никому и сниться не может.
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • садют тебя на легаси говно. которое сапортится уже 14 год. ты не имеешь права взять сделать ретаргет на новый фреймворк, ты обречен жрать говно пока не спрыгнешь из галеры/проекта. ты понимаешь это? тебе никто не позволит.
              ебаная вижуал студео не в состоянии (блять, это вообще смешно, жду когда продукты жыдбрейнс будут де факто для любого кодинга. мелкомягкие уже заебали), нормально открыть проекты старых студий. она что-то конвертирует, но в итоге тебе срет 100500 ошибок которые надо сидеть и руками править. а ты добавь к этому что проекта на 100+ тыс. строк кода. никакой человек не будет в здавом уме такого делать, лишь для того, чтобы написать Dictionary<string, Pituh> pituhi = default; вместо Dictionary<string, Pituh> pituhi = default(Dictionary<string, Pituh>);
              хуле не ясно?
              Ответить
              • Т.е. шарпик хуже крестов в этом плане? Пиздец.
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                  • Х.з., ладно в крестах там куча опций конпелятора да линкера. Но в шарпике то что вообще в проектах есть помимо списка файлов да ссылок на проекты с зависимостями? Что там вообще конвертировать?
                    Ответить
                    • В полном дотнете есть сраный "MSBuild", а в продовом коде обычно на него завязан миллион логики. Выглядит как говно, работает как говно и ломается каждую новую студию. На мсбилде кстати работает расовая дотнетная кодогенерация (TT шаблоны).

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

                          Берём случайный проект с Гитхаба:
                          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# пишутся)
                          Ответить
                        • Ттам всегда портянки, даже для Business Analyst проектов (таблицы для SQL, OLAP кубы итд)
                          где студия -- там треш
                          Ответить
                          • SQL таблицы то там нахуя? Им лень было отдельный файл завести?
                            Ответить
                            • Я имел ввиду тип проекта -- SQL project.

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

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

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

                              Я не уверен что DataGrip так может
                              Ответить
                • это скорее убогость вижуал студио. до недавних пор, годной C# IDE, по сути то и не было. студия становится ИДЕ только после того, как на нее поставить решарпер.
                  сейчас жыдбрейнс клепают уже ИДЕ под все. даже под твои любимые плюсцы (да, да, зацени CLion), для шарпа - Rider. он правда еще в бэте, но он уже лучше студии в разы. (по сути та же студия с решарпером). в общем, он то уже по-людски могет в проекты разных версий.
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                  • > зацени 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 в этом отношении НИЧЕГО ОХУЕННОГО предоставить не может. Или я не прав?
                        Ответить
                        • показать все, что скрытоvanished
                          Ответить
                          • на сях инспекции (инспекции - встроенный статический недоанализатор, подсвечивающий ошибки), рефакторинг и комплишен есть в Eclipse CDT. В Clion это реализовано принципиально лучше?

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

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

                                > 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 мне поможет?
                                Ответить
                                • показать все, что скрытоvanished
                                  Ответить
                                  • > В структурном поиске ты работаешь с результатами парсинга, а регулярками ты парсишь сам.

                                    Один хрен это всё неуниверсальное говно, которое скриптами можно решать намного лучше, чем какими-то ограниченными говнофичами 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 фигни и всяких автокомплитов
                                Ответить
                            • показать все, что скрытоvanished
                              Ответить
                            • показать все, что скрытоvanished
                              Ответить
                            • Это не программирование, это вышивание деревянными ложками какое-то
                              Ответить
                      • > на счет проприетарности. я не шарю в этом, обьясни, почему это плохо?

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

                        Для вижуал студии хотя бы есть вариант купить лицензию один раз, а не платить ежемесячно или ежегодно. Но вообще эти ваши тормозные говноиде просто нахер не нужны, можно в швабодном емаксе обмазаться плагинами с CEDET. Или вообще в виме. Меня эти IDE бесят
                        Ответить
                    • показать все, что скрытоvanished
                      Ответить
              • показать все, что скрытоvanished
                Ответить
                • я агрюсь, потому что я тебе говорю про гандоны, а ты мне - про зонтик.
                  Ответить
    • показать все, что скрытоvanished
      Ответить
      • да, сорян. давно уже на жабе не кодил. один хрен, это короче, чем вся та простыня.
        Ответить
    • Забыли меня наверное уже, уебки

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

              var a = new { pituh = 123; }; // анонимный класс
              var b = new[] { 1, 2, 3 }; // автовывод типа элемента массива
              std::vector<std::map<int, std::string>>::const_iterator c = new(); // новомодная хуета
              Ответить
              • показать все, что скрытоvanished
                Ответить
              • Кстати, оператор new не нужен. Обезьяны-повторюшки его скопировали из плюсов
                Ответить
                • Кроме new есть еще stackalloc
                  int *a = stackalloc int[228];

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

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

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

                                или это за меня JIT порешает?
                                Ответить
                                • > А если я хочу передать два параметра в метод
                                  Делаешь два параметра у метода (???)
                                  > не должен юзать структуру чтобы не срать в кучу
                                  Структуры не аллоцируются в куче
                                  Ответить
    • В Java у дженериков type erasure, поэтому Dictionary и Dictionary<K, V> это по сути один и тот же тип. Параметризированные аргументы K и V это сахар времени компиляции и не более.

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

      Поэтому было бы неправильно делать так, как в Java (конструируем тип одного типа и приравниваем к переменной другого типа). Вообще подход в Java странный, можно было бы вместо это ввести var и покрыть куда большее число случаев, чем с этим странным синтаксисом HashMap<>
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • Обратная совместимость-то на месте. Старый же код без проблем работает в новом рантайме. Тут скорее проблема в том, что происходит дублирование кода, т.к. есть два неймспейса: 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, например), или в языке существует двойственность синтаксиса, т.к. синтаксис версия "по-странному" и есть новый синтаксис "по-нормальному".
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • Ну это уже не обратная совместимость (что новый фреймворк старые проги умеет), а прямая (что новые проги работают на старом).
              Ответить
            • >Код с генериками не работает в .NET 1.0 и 1.1.
              А зачем вообще лочиться в какую-то старую версию и не апгрейдить её? Как будто сами себе придумали проблему, сами и решили...
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • Так эти миллионы строк кода на новых версиях JVM что, не работали? Почему новая версия JVM не может быть надмножеством старой JVM+новые фичи?
                  Страх появления новых багов в новых JVM?
                  Ответить
                  • > страх
                    Ага, энтерпрайз же. У них и операционки по 10 лет только security фиксы получают.
                    Ответить
          • показать все, что скрытоvanished
            Ответить
            • Потому что энтерпрайзу нужно писать предсказуемую прикладнуху. А не открывать(!) новые возможности хитровыебанных языковых конструкций и ходить по минному полю из UBов.
              Ответить
            • >Вся философия джавы строится на изымании из языка полезного функционала потому что он "сложный"

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

              Хотели как лучше, а получилось как всегда.
              Ответить
    • показать все, что скрытоvanished
      Ответить

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