1. Куча / Говнокод #27085

    −1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    Возможно, вы разделите мою точку зрения насчёт того документа. Судите сами:
    
    1. Это всё ещё Vue
    2. Он закрывает основные потребности разработчиков
    3. Разумеется, он избавляет от бойлерплейта
    4. Документация — огонь
    5. Большое, пассионарное сообщество

    Спирт:

    1. Его пьют
    2. Вызывает эйфорию
    3. Может использоваться в качестве жидкости

    https://m.habr.com/ru/company/vdsina/blog/525382/

    Запостил: Fike, 04 Ноября 2020

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

    • https://quasar.dev/

      2. What we want to achieve with Quasar is to raise the bar for web development as a whole. Make it go forward, evolve. Change minds. Point out when there’s a better alternative to current establishment. You deserve a stellar development experience.
      3. Your full focus is on your App's content rather than all other boilerplating stuff around it
      4. Great documentation
      5. Big community

      пиздец, он даже пять пунктов самостоятельно придумать не смог
      Ответить
    • У "ПХП" тоже большое пассионарное (блядь, ну что за слово?) сообщество. Один Ротоёб чего стоит.
      Ответить
    • По этому я за lua и за 1С
      Ответить
    • Предлагаю вместо спирта - дистиллированную воду
      Ответить
    • Предпочитаю кефирчик с орешком мускатным. Зимой ох хорошо идёт!..
      Ответить
      • Мне очень нравится кифир с гим.
        Ответить
      • тут в макдак наконец-то завезли осенний ягодный пунш, а кфц постоянно предлагает то мятное, то миндальное латте. мне вообще збс теперь.
        Ответить
        • проверил, не завезли
          Ответить
          • купил в офис овер десятка видов сиропов монин
            кфц и макдак соснулей
            Ответить
            • Все вы говорите про сиропы и печеньки

              И никто не говорит про кондиционер который хуярит в спину и то что сосед слева моется раз в три дня
              Ответить
              • Пни его по жопе и загони в душ. Или душа тоже нет?
                Ответить
                • Я бы скорее ему хуевое перформанс ревью накатал
                  Ответить
                  • В чем проблема сказать открыто и прямо в лицо и соседу и начальнику?

                    А кондей лучше когда есть, он инвертор и его достаточно с запасом, чем когда его нет или он не вывозит.
                    Ответить
                    • >В чем проблема сказать открыто и прямо в лицо и соседу и начальнику

                      Я вообще стесняша и даже не смотряна то что я работал над собой, говорить о том что чувак воняет мне страшно неудобно

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

                        У меня давно-давно был вонючий коллега, он умел настраивать IBM WebSphere
                        Ощути маштаб
                        https://ru.wikipedia.org/wiki/WebSphere#%D0%9F%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B_%D1%81%D0%B5%D0%BC%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B0
                        Ответить
                        • Его просто плохо забальзамировали.
                          Ответить
                          • Это действительно было давно. Вот специалист по вебсфере в 2020 действительно будет с пробкой сзади, чтобы не вытекло
                            Ответить
                        • есть кстати термин такой brilliant jerks, http://www.brendangregg.com/blog/2017-11-13/brilliant-jerks.html

                          но он про другие стороны личности скорее

                          вообще для меня это сводится к тому что есть чувак и его набор хороших и плохих качеств и умение охуенно кодить - просто одно из них. Менеджеры возможно смотрят на это со стороны того как человека можно получше приставить к работе, поэтому решения о найме или увольненни принимают они а не я
                          Ответить
                          • я со временем всё больше и больше понимаю совет спольски не нанимать людей, если хотя бы один член команды сказал "нет"
                            Ответить
                            • У нас не всех спрашивают "кого нанимать", решают лиды обычно. Правда, и ненужных мудаков на моей памяти они еще не нанимали
                              Ответить
              • переходи в офис с централизованным кондеем
                у меня кондей в полотке, а спина у меня сзади, а не над головой на расстоянии два метра
                Ответить
                • Я щас на ремоуте
                  Ответить
                  • а, так ты дома?

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

                      А коллеги из предыдущего офиса рассказывали как их раз в день утром выгоняли на 10 минут для обслуживания какой-то вентиляционной хуйни
                      Ответить
                      • Нас выгодняли, чтобы пол помыть и он высох.
                        Ответить
              • не понимаю проблемы. ты ведь тоже можешь не мыться.
                Ответить
                • а еще можно сделать чикагскую вафлю
                  Ответить
                • еще можно подходить к нему, чтобы посоветоваться. слушай, как ты думаешь, я уже достаточно давно не мылся, или стоит еще потерпеть? ха-ха, я тебя сегодня по вони обогнал. кстати, ты не знаешь как получить скидку на мыло в ленте? я в рот ебал сотню за эту хуйню выкладывать, хватит-то всего на год, не больше.
                  Ответить
              • Раз в три дня это ещё нормально. Если он приезжает на велосипеде, и моется раз в три дня, то очень хуево, конечно.
                Ответить
        • Парашат. Варенье, разведённой водой, которое хуево растворяется.
          Ответить
        • > миндальное латте.
          А у тебя MacBook Air с наклеечкой есть?
          Ответить
          • у меня сяомка про, которую все постоянно путают с маком. но кроме наклеечек там есть еще manjaro, что безусловно показывает всем мой элитный статус и превосходство.
            Ответить
            • разве миндальное латте дают без мака?

              Ну у тебя хотя бы есть убунту с красивой тян на рабочем столе?
              Ответить
              • > убунту с красивой тян

                Эй, прекрати подглядывать за моим компом.
                Ответить
                • У тебя небось анимешница?

                  Кстати, прыщебляди порой такие выебонщики: у них обязательно полупрозрачный терминал с htop есть в углу

                  А виндоблядь сидит с черным фоном и синим фаром
                  Ответить
                  • Да, но я её почти не вижу из-за непрозрачных окон.
                    Ответить
              • > manjaro
                Ответить
                • Попса для хипстеров.
                  Ответить
                • извини, я читаю жопой, и не очень разбираюсь в сортах прыщей кроме мейнстрима
                  Ответить
            • А тест на открытие одной рукой твоя сяомка проходит?
              Ответить
              • йеп, её на самом деле даже пакуют как макбук. но мне просто нужно было что-то более-менее удобное с 16г оперативы, 15" и корпусом из металла.
                Ответить
            • зарекся покупать ноуты сяоми, после того, как на 2 ноутах из 2 вздулась батарейка, и на том, который был мой, купленная оригинальная батарея на замену даже не работает, потому что уебанский разъем подключения батареи проектировал пиздоглазый уебан
              Ответить
              • Мне админы говорили, что некоторые модели сяоми у нас не обслуживаются, ибо серые.
                Так что они хоть и стоят дешевле, но если сломаются -- то официального суппорта тебе не видать: только гарантия из магазина

                А значит у мастера в сервис центре детали будут только с АлиЭкспресс, и некоторые мастера могут просто нахуй послать: будешь сам себе потом BGA пайку делать, лол
                Ответить
                • нахуй они и не нужны, сяоми соснул у прости господи хюлит пакард
                  когда за $900 получается нормальный ноут на 8 котлов, 32 рам, 512 ссд ево плюс, 14" FHD IPS и < 2кг
                  а, и это с НДС, в белую
                  Ответить
                  • Понятно)

                    HP мне нравится, кстати. У меня есть древний HP еще с sandy bridge i5, и он какой-то "крепкий" на ощупь, ничего не дребежжит, не смотря даже на множественные вскрытия не очень прямыми руками
                    Ответить
                    • капиталисты перестали делать расширяемые ноуты, к сожалению
                      вон то, что я написал выше, это какое-то исключение из тренда, мягко говоря
                      Ответить
                      • Угу, сейчас всё норовят напаять на плату, причем у некоторых вендоров тупо не найти нужную мне модель

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

                        Да и в десктопе свободы стало меньше: с момента завоза "северного моста" в проц, апгрейтить проц стало практически нереально: можно только i5 на i7 поменять, а следующее поколение часто уже не будет работать с этим чипсетом. Всегда вспоминаю 775, когда можно было через пять лет воткнуть новый проц, и он заводился
                        Ответить
                        • > следующее поколение часто уже не будет работать с этим чипсетом
                          продолжай заносить бабло в штеуд

                          но и частичный апгрейд в условиях, когда в штеуде < 5% прирост ежегодно, это бредятина

                          надеюсь, борманду стыдно
                          Ответить
                          • Частичный апгрейт иногда делают древнему говну, когда стоит выбор
                            * выкинуть на помойку
                            * потратить 3К и превратить в работающий девайс

                            Но в древнее говно обычно можно пихнуть памяти (ddr2 и те же Core 2 с рук продаются по цене бутылки пива примерно) и заменить hdd на ssd, и еще пять лет потом смотреть ютуб и читать почту.

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

                              я про 775 вспоминаю только то, что там был одноядерный пень-4 (прескот, чтоли), который раскалялся как ебаная сковорода
                              Ответить
                              • Это дело принципа скорее. Ну кроме того, мне нравится иногда возиться с железом.

                                >прескот
                                Верно: на 775-м первый проц был прескотт, и он был хуёвый (правда это был первый проц с SSE3). Но там же был Core 2 Yorkfield, который до сих пор можно использовать, если ты вдруг не собираешься писать на компилируемых языках:)

                                Вот собственно замена прескота (на котором хорошо работают только XP с шестым эксплорером) на йоркфилд, продающийся на авите за 800 рублей, и есть отличный апгрейт
                                Ответить
                                • > Но там же был Core 2 Yorkfield, который до сих пор можно использовать, если ты вдруг не собираешься писать на компилируемых языках:)

                                  Я сижу за компом с процом Intel Core 2 Quad Q9300 и мне это нихуя не мешает писать на компилируемых языках.
                                  Ответить
                                  • ого)) и как, быстро собирается?

                                    впрочем, если у тебя нету крестошаблонов и адских иде для джав, то может и не так все страшно
                                    Ответить
                                    • Конечно. Под контроллеры сишкокод достаточно быстро собирается, чтоб я из-за этого не покупал новый процессор. Я даже Gentoo компилировал когда-то на этом железе.
                                      Ответить
                                      • когда-то -- это когда?

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

                                        В общем, ты только подтверждаешь мою идею про апгрейтабилити 775-го сокета: в комп 2005-го года можно втыкнуть йоркфилд, ссд и 8гб ddr2, и потечь
                                        Ответить
                                        • > ссд

                                          по эзернету
                                          Ответить
                                          • по фибрачэнел тогда уж) SAN, оптические кабеля, все как в датацентре 2004-го года)

                                            ssd отлтчно втыкиывается даже во вторую сату, и хотя там он и не раскрывает своего потенцивала вероятно (интуитивно так кажется), все равно годно. главное, не забыть включить AHCI вместо эмуляции IDE, а то питухи забывают
                                            Ответить
                                            • > даже во вторую сату, и хотя там он и не раскрывает своего потенцивала вероятно

                                              там до подключения по PCI-E третья сата долго ограничивала скорость в районе ~600мб/с. а с учетом того, что сата еще и не умеет параллелить, становится совсем грустно.
                                              Ответить
                                              • это ты вроде бы про третью, а я про вторую: там скорость еще меньше, так что даже обыный sata3 ssd может работать не в полную силу

                                                но по сравнению с подключением по pci-e (nvme) обе саты страшно сосут, конечно.


                                                не очень понял про параллелить: SATA умеет NCQ (кажется и вторая) если работаешь через AHCI: там хост срет командами, а сата их распологает как ей удобно.

                                                Это было полезно и для hdd (чтоб не крутить туда сюда) и для веротяно для ssd(можно группировать доступ)
                                                Ответить
                                                • да, я уже исправил.

                                                  NCQ:

                                                  > queuing up to 32 commands can keep the drive busy during this time.

                                                  ну такое. я бы не надеялся что даже при хорошей загрузке это число будет утилизоваться полностью.
                                                  Ответить
                                                  • это все тяжелое наследние хдд (собссно NCQ подрезали у сказевого TCQ времен еще моего децтва, да и весь SATA с момента появления SSD стал напоминать костыль..

                                                    Я помню, что crystaldiskmark по хорошем последовательном чтении блоками на третьей сате давал где-то 500, на второй видимо дал бы 300, а на nvme давал типа 3000.

                                                    Так что разница очевидна

                                                    зы: гуглнул картику
                                                    https://i.redd.it/4t37x6aqq2v11.jpg

                                                    q - глубина очереди
                                                    t -- колво потоков


                                                    нет никаких причин не использовать nvme, если ваше железо позволяет
                                                    Ответить
                                        • > когда-то -- это когда?

                                          Да хуй его знает, вроде сразу после покупки что-то пытался экспериментировать, но меня в какой-то момент заебало ебаться с гентой, и я накатил кажется опенсусю. Ну и винт, где была вся эта хуйня (там отдельно я сделал раздел для генты, отдельно для опенсуси) в какой-то момент начал дохнуть, и я с него всю ценную хуйню через ddrescue перенес на другой винт, раздел с гентой я переносить не стал, потому что нахуй не надо. /home/ у меня в отдельном разделе было
                                          Ответить
                                          • >сусю
                                            охуясе, это где zypper?

                                            первый раз вижу живого сусера за много-много лет
                                            Ответить
                                            • > первый раз вижу живого сусера за много-много лет

                                              Сейчас-то я уже не сусер. Тут хубунта стоит.
                                              Ответить
                                    • > впрочем, если у тебя нету крестошаблонов

                                      и констэкспров. Они тоже могут медленно работать. Вся эта компилтайм-питушня работает через тупую интерпретацию, надо чтоб JIT https://govnokod.ru/25558#comment473371
                                      Ответить
                                      • джит для шаблонов это круто, и сразу на джаваскрпте
                                        Ответить
                            • У АМД вроде долго сокет не меняется. Можешь на них посмотреть.
                              Ответить
                              • Я последний раз интересовался ими во времена атлонов и дюронов, и совсем не знаю их номенклатуры

                                может, стоит почитать..
                                Ответить
                                • > во времена атлонов
                                  ты очень отстал

                                  с выпуском core 2 и далее (всякие бриджи и т.д.) амд затормозился, и штеуд с годами потерял чувство конкуренции, начал выпускать одно и то же из года в год, про пирформанс менее 5% из поколения в поколение выше это не шутка

                                  амд долгое время выпускал откровенный шлак, который еле конкурировал с аналогичным по современности core i3, пока не стрельнул со своими процами Zen (ryzen, уверен, слышал), которые с ходу были неплохими, дохуя дешевыми и тупо там где штеуд давал 4 физических ядра, рязань давала 8, будучи в 1.5-2 раза дешевле

                                  на текущий момент та же рязань уже 4 поколения зарелизена (серия 5ххх, на прилавки ещё не добралось), интел продолжает глотать пыль, даже просрав последние свои оплоты "производительность в однопотоке" или "посмотрите, вот в этих игорах на интеле пока ещё быстрее на 2 фпс"

                                  у амд есть 64-ядерные процы, у амд выходят всё более удачные (быстрые и энергоэффективные) мобильные процы (у которых и встроенный графоний изначально лучше интеловского), и сегмент в ноутах начинает расти с прежних 0%, у амд лучше техпроцесс, но теперь, пользуясь майкой лидера, амд начинает поднимать цены

                                  и всё это время амд старается менять сокеты пореже, в большинстве случаев на матери предыдущего поколения надо будет биос накатить, чтобы они поддерживали новое (но он вскоре всё же поменяется, в 21 или 22, ради поддержки DDR5)
                                  Ответить
                                  • Блядь, как всё сложно. Я вообще не понимаю, зачем производители процессоров делят их на кучу разновидностей, если в итоге разные процессоры одного производителя делаются из одного и того же количества металла? Почему один процессор продают за пять тысяч, другой - за сто? Разве нельзя просто выпускать самый лучший процессор и продавать его по средней цене (например, по двадцать тысяч)?
                                    Ответить
                                  • По этому у меня amd ryzen 7 3700
                                    Ответить
                • Я узнал, что сейчас есть несколько сетей магазинов (например, «Румиком»), которые торгуют исключительно «серыми» смартфонами «Сяоми», купленными где-то в Китае и кустарно русифицированными. В официальных сервис-центрах эти смартфоны не обслуживают, потому что диапазон IMEI только для продажи в Китае. У этих магазинов есть своя сеть сервис-центров. Попрошу не путать «серые» центры и официальные, а то могут и напутать.
                  Ответить
                  • Купить по дешевке серую технику а потом соснуть -- любимое развлечение многих людей

                    Я же рассказывал про телевизор самсунг, который в один прекрасный день перестал выходить в Интернет, потому что он сделан не для России, а самснуг видит российский ип?

                    Официальный сервис центр ожидаемо развел руками
                    В итоге его через ВПН пустили через восточную европу, и он успокоился
                    Ответить
                  • Ну, в серых вещах иногда бывает свой шарм. Китайцы некоторые роутеры поставляют нам без супермегатурбоусиления сигнала на две тысячи децибел, а у них таких ограничений в законодательстве нет, поэтому китайская версия того же самого с алиэкспресса может давать лучший результат. Именно поэтому я, наигравшись с Huawei AX3, взял себе Xiaomi AX6 и теку на свою рабочую машину со скоростью 1.2гбита|c но увы, это еще не дуплекс, как провод, а ждать что кто-то сделает стейшен больше чем 2х2 не приходится. Ну ничего, подождем 6Ггц, на которых все помчат из 160мгц делать 600.

                    Тут, конечно, вставить бы негодующий комментарий что мол хули ты соседей давишь, но у меня видны всего две 5ггц сетки, и соседская гораздо выше, вроде как во втором диапазоне, где можно разбежаться на 160. Какая беспроводная квазисингулярность )))
                    Ответить
    • неебических размеров статья, и ни одного примера кода

      пошел на сайт
      >Video Tutorials
      понятно

      а вы говорите "почему с++?"

      да потому что ебаная хипстота заебала
      Ответить
    • А я за язык "Euphoria". Програмистское сообщество этого языка состоит из меня одного, и я весьма пассионарен
      Ответить
    • >https://m.habr.com/ru/company/vdsina/blog/525738/
      надо путаться и рваться
      Ответить
      • Филлип-лайвкодер теперь самый популярный писатель на хабре?
        Ответить
        • театр одного актера просто

          чувак очень креативный

          >> Кроме хабра меня можно почитать в телеге: t.me/myobrechenychannel

          >>Король разработки
          блядь

          [quote]
          Субъект: Я вам не субъект, а король мятных лепёшек!..
          Барышня: Ну, вы полегче, полегче! Я сама королева собачей шерсти!
          [/quote]
          (c) Д. Хармс.

          В целом самокопание и рефлексия это хорошо, но лучше бы самому её как-то переваривать кмк
          Ответить
      • > как фронтендеры расставляют скобки
        > когда первая скобка на одной строке с декларацией

        > фронтендеры

        Сука!
        Ответить
        • Он знает два языка -- джаваскрипт и сишарп
          В сишарпе (и вообще у МС, в сишке с крестами тоже) их ставят на новой строке.

          Так что

          foo() {
          }

          для него это фронтэнд
          Ответить
          • называется египетский стиль
            самый норм, кстати
            Ответить
            • такой же принят в java и многих униксах вроде как, включая ядро
              Ответить
              • В крестах для классов и конструкторов с ним не особо удобно выходит. А для ифов и циклов - само то.
                Ответить
                • и для неймспейсов)

                  Пользуясь случаем, спрошу: как поместить дефлорацию в неймспейс "Foo::Bar::Baz" до версии C++17, и не умереть со смеху?
                  Ответить
                  • namespace Foo {
                    namespace Bar {
                    namespace Baz {

                    // но вопрос видимо риторический был?

                    } // namespace Baz
                    } // namespace Bar
                    } // namespace Foo
                    Ответить
                    • а потом придет решарпер, и аккуратненько отобьет мне их индентами отразив вложенностить, и я буду программировать в районе 80-й колонки)

                      Впрочем, это можно отвключить
                      Ответить
                      • Дык перенастрой стиль. Я реально не помню гайдлайна для крестов, в котором неймспейсы с индентацией.
                        Ответить
                  • З.Ы. На практике такие вот запихивания одной мелкой фигни в неймспейс очень редко нужны. Обычно в неймспейсе или тонна кода или всё и так работает за счёт ADL.
                    Ответить
                    • Я пытался немйспейсом отразить "пакетирование"

                      MyApp::MySubsystem::MyPublicFacadeClass
                      MyApp::MySubsystem::Impl::DoNotUseThisCl assPlz

                      Но верно это тупая жабья привычка, и так не нужно
                      Ответить
                      • Да не, тот же буст так и делает: boost::asio::io_context.
                        Ответить
                • почти всегда с ним нормально выходит, и с классами, и конструкторами, проверь

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

                  но лишь бы не как в M$ в 90е какой-то обмудок писал вот так (в MFC или ATL, уже не помню):
                  void foo()
                    {
                      ...;
                      ...;
                    }

                  вот такая херня вымораживает
                  Ответить
                  • их миллион
                    https://en.wikipedia.org/wiki/Indentation_style#Brace_placement_in_com pound_statements

                    см GNU, кстати
                    но это только для конструкицтй ВНУТРИ функции
                    Ответить
                  • Я вот про этот момент:
                    Foo::Foo()
                        : m_foo(42)
                        , // ... тут ещё дохуя ...
                        , m_bar(100500) {
                        doFoo(m_foo);
                        doBar(m_bar);
                    }
                    Приходится индент увеличивать или пустую строку оставлять чтобы инициализаторы визуально не слипались с кодом. Ну или всё-таки ставить скобку с новой строки.
                    Ответить
          • я в райдере так и не смог отключить один из переводов символов на новую строку. там тупо нет под это опции в code style.

            а вообще самое охуенное в этой конвенции - это

            hecking.LongLine.CloseTo.Wrapping(x =>
            {
              return x * 2;
            });


            вместо банального

            hecking.LongLine.CloseTo
              .Wrapping(x => x * 2);
            Ответить
            • зачем скобки в лямбде, и еще returnом насрали, Лол

              Я райдер видел пару раз всего: .net я юзаю в основном на винде и в студии
              Ответить
      • Я разрулился с названием очень просто. Я назвал класс ТОЧНО ТАК ЖЕ, как и интерфейс. Никогда так не делаете? Зря.

        Да я не могу уже. Чувак, кажется, никогда не работал с чужими библиотеками, где сотня вещей названа одними и теми же именами, и пыришь в IDE, пытаясь понять, что из автокомплита нужно подставить.

        Особенно хлёсткий багор будет, когда кто-то сядет, сделает

        public checkInvariants(Api api) {}


        и не будет понимать, почему у него не получается передать туда интерфейс.
        Ответить
        • Чувак просто не асилил почитать кодстайлы майкрософта
          Зачем выдумывать что-то свое, если кодстайлы есть? Их можно применять, и течь, если ты пишешь под винду
          Ответить
          • Везёт вам, единый кодстайл есть. Можно просто сесть и хуярить код.

            А я вот решил на крестах в кои то веки для души покодить. В итоге неделю крутил шланг формат как та мартышка с очками. То одно говно вылезет то другое. И все изкоробочные кодестайлы мне не нравятся.
            Ответить
            • У C#, Java и Kotlin очень жесткие кодстайлы, там можно не думать.

              А у C и C++ на каждой платформе свой, угу. Но удивительно: resharper поставляется с вполне внятным кодстайлом, и сам мне всё исправляет
              Ответить
              • > А у C и C++ на каждой платформе свой, угу.

                Нет. В исходниках каждой хуйни - свои.
                Ответить
                • А иногда и в разных файлах одной и той же хуйни.
                  Ответить
                • ну да, согласен: у nginx может быть свой кодстайл, у gnu другой, у модуля к ядру третий
                  Ответить
          • > кодстайлы майкрософта

            Надеюсь, ты не проВенгерскуюНотацию?
            Ответить
            • венгерская нотация в C# не используется: там слишком строгая типизация, вероятно.
              А в Win32API да. Все эти lp и dw

              Кстати, пися на сях под винду я часто на них сру.
              Я могу написать
              DWORD iq
              и потечь

              Хотя должен вероятно dwIq
              Ответить
    • Филипп продолжает самоуничтожение
      https://m.habr.com/ru/company/vdsina/blog/515954/
      [quote]
      В C# есть такие штуки — структуры. Это как классы, но хранятся на стеке, и работают не по ссылке, а по значению. В среднестатистической разработке их почти не используют. У структур много преимуществ, и я искренне топил за то, что их можно применять для улучшения кода. Типа, смотрите, мы можем использовать особенности структур, чтобы писать более безопасный и отказоустойчивый код.

      Такую чушь может сказать человек, который не знает, что у структур есть пустой конструктор по умолчанию, который нельзя ни убрать, ни переопределить. Знаете почему я этого не знал? Да, потому что я никогда их не использовал. Ведь хорошего разрабовского опыта у меня мизер. Я давно уже не хочу читать книжки про сишарп. Зачем, если мне и так платят?
      [/quote]
      Причем тут безопасность? И как бы твои сраные структуры копировались значению, если бы у них не было открытого конструктора? Копирующий конструктор бы делали, как в крестах? Или принимали бы все значенеия в конструкторе, как в датаклассах коклина?


      >хранятся на стеке
      видел структуру в куче, проверь) даже инт там видел
      Ответить
      • > Такую чушь может сказать человек, который не знает, что у структур есть пустой конструктор по умолчанию, который нельзя ни убрать, ни переопределить.

        Такую чушь может сказать только человек, который не знает, что у структуры пустого конструктора нет, и который не слышал про ключевое default. Так как структура это просто выделенный кусок адресного пространства, у которого не может быть специального значения (я говорю про возможность указателя быть null), то этот кусок просто зануляется при инициализации, и ничего, никогда и нихуя не вызывается. Нет, блядь, конструктора. Долбоёб, блядь. Мартин Алексеевич, покажите ему мое письмо от прошлого ноября.
        Ответить
        • эй эй эй, ты счейчас точно про c#/.net?
          Ответить
          • Да

            https://sharplab.io/#v2:C4LghgzgtgNAJiA1AHwAICYCMBYAUKgZgAIM iBhIgbzyNqImACcBXAY2CIGUqa6+AhAPaCANgFMw AOyJgRABwAWYANy8+tAJaSOAIzHAVa9XEHMd4ogH MwUKIdx8AvkaOESAFiIBZABQBKHgd1WlRMAE5/VSDgzgBtAF0iADdZZjEIIgBeIkkxAHcuWMwANnio 4JDwyKM+UIiUkTSIP3KKuuro9W4tDWANWQ0ALzE4 LOTU9NiABjKaunaevoHhuBa52jIwOWBmRjEfPYAz IkX+kSGRtc7nTtcSj3Itnb2DsWPuI7E9yVYxAOpO rUqp9vr8rk48I4gA==

            .method public hidebysig 
                    instance void M () cil managed 
                {
                    // Method begins at RVA 0x2050
                    // Code size 79 (0x4f)
                    .maxstack 2
                    .locals init (
                        [0] valuetype C/S[] values,
                        [1] valuetype C/S initialized,
                        [2] valuetype C/S again
                    )
            
                    IL_0000: nop
                    IL_0001: call void [System.Console]System.Console::WriteLine()
                    IL_0006: nop
                    IL_0007: ldc.i4.s 16
                    IL_0009: newarr C/S
                    IL_000e: stloc.0
                    IL_000f: call void [System.Console]System.Console::WriteLine()
                    IL_0014: nop
                    IL_0015: ldloc.0
                    IL_0016: call void [System.Console]System.Console::WriteLine(object)
                    IL_001b: nop
                    IL_001c: call void [System.Console]System.Console::WriteLine()
                    IL_0021: nop
                    IL_0022: ldloc.0
                    IL_0023: ldc.i4.0
                    IL_0024: ldelem C/S
                    IL_0029: stloc.1
                    IL_002a: ldloc.1
                    IL_002b: box C/S
                    IL_0030: call void [System.Console]System.Console::WriteLine(object)
                    IL_0035: nop
                    IL_0036: ldloca.s 1
                    IL_0038: call void C::Capture(valuetype C/S&)
                    IL_003d: nop
                    IL_003e: ldloca.s 2
                    IL_0040: initobj C/S
                    IL_0046: ldloca.s 2
                    IL_0048: call void C::Capture(valuetype C/S&)
                    IL_004d: nop
                    IL_004e: ret
                } // end of method C::M
            Ответить
            • .method private hidebysig static 
                      void Capture (
                          valuetype C/S& reference
                      ) cil managed 
                  {
                      // Method begins at RVA 0x20ab
                      // Code size 19 (0x13)
                      .maxstack 8
              
                      IL_0000: nop
                      IL_0001: ldarg.0
                      IL_0002: ldobj C/S
                      IL_0007: box C/S
                      IL_000c: call void [System.Console]System.Console::WriteLine(object)
                      IL_0011: nop
                      IL_0012: ret
                  } // end of method C::Capture


              https://docs.microsoft.com/en-us/dotnet/api/system.reflection.emit.opcodes.initobj?v iew=netcore-3.1
              OpCodes.Initobj
              Initializes each field of the value type at a specified address to a null reference or a 0 of the appropriate primitive type.

              то самое зануление, чтобы мы случайно не подобрали предыдущие значения

              L001e: cmp dword ptr [0x13d2c1a8], 0
                  L0025: je short L002c
                  L0027: call 0x72780140
                  L002c: nop
                  L002d: call System.Console.WriteLine()


              Я хуй знает что это за call, но к структурам он явно не относится, там массив-то еще не создан.
              Ответить
            • L003d: call 0x064f3214
                  L0042: mov [ebp-0x34], eax
                  L0045: mov eax, [ebp-0x34]
                  L0048: mov [ebp-0x10], eax
                  L004b: call System.Console.WriteLine()


              Здесь call - это создание массива. Можно конечно сказать, что там внутри вызываются конструкторы, но тогда мы должны увидеть такой же вызов ниже, где я вызываю new S()

              L0065: cmp ecx, [edx+4]
                  L0068: jb short L006f
                  L006a: call 0x727816d0
                  L006f: imul eax, ecx, 0x10
                  L0072: lea edx, [edx+eax+8]
                  L0076: vmovdqu xmm0, [edx]
                  L007a: vmovdqu [ebp-0x20], xmm0
                  L007f: lea edx, [ebp-0x20]
                  L0082: mov ecx, 0x13d2ca0c
                  L0087: call 0x064f3154
                  L008c: mov ecx, eax
                  L008e: call System.Console.WriteLine(System.Object)


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

              call 0x064f3154 - боксинг структуры
              Ответить
            • L0093: nop
                  L0094: lea ecx, [ebp-0x20]
                  L0097: call dword ptr [0x13d2c708]
                  L009d: nop
                  L009e: lea ecx, [ebp-0x30]
                  L00a1: vxorps xmm0, xmm0, xmm0
                  L00a5: vmovdqu [ecx], xmm0
                  L00a9: lea ecx, [ebp-0x30]
                  L00ac: call dword ptr [0x13d2c708]


              Два последовательных вызова через ref, первая структура точно инциализирована, вторая нет. Соответственно, между ними должен быть call на конструктор, которого нет.

              L000e: je short L0015
                  L0010: call 0x72780140
                  L0015: nop
                  L0016: mov edx, [ebp-4]
                  L0019: mov ecx, 0x13d2ca0c
                  L001e: call 0x064f3154
                  L0023: mov ecx, eax
                  L0025: call System.Console.WriteLine(System.Object)


              уже второй опциональный вызов хуй пойми куда, но во-первых передача идет по рефу, во-вторых там даже ecx не инциализируется, в-третьих initialized должен был быть проинициализирован снаружи метода.

              call 0x064f3154 - это еще один боксинг

              а больше вызовов и нету
              Ответить
      • Не знаю что там насчет сишарпов, но в Си я структуры могу и в стеке хранить, и в хипе, и даже просто как глобальные переменные (в .data, .bss и даже в .text сегменте (если структура у меня const) ). И конструкторов нихуя нет. Поэтому я за Си.
        Ответить
        • в си ты сам выбираешь что и где хранить

          в шарпе есть value types и reference types.
          Value types всегда создаются на стеке и копируются по значению.
          Reference types создаются в куче, и работаешь с ними по ссылке

          Но если у референс тайпа в поле лежит value type, то разумеется value type тоже окажется в куче.

          Если поле статическое, то он окажется вероятно в статической области.

          Но эти области -- они управляемые, не такие, как в нативном коде.

          Структура это value type.
          Class эт reference type.
          Ответить
          • В сишке есть только value type. Именно поэтому я за сишку.

            З.Ы. Хотя вот массив не хочет быть полноценным велью тайпом и не копируется :(
            Ответить
            • Вообще не понимаю, о чём вы тут пиздите. Не составит ли кому-нибудь труда пересказать мне суть комментариев выше так, как если бы речь шла о PHP?
              Ответить
            • но создается-то на стеке)
              Ответить
              • Где хочу - там и создаётся. Хоть вообще поверх видеопамяти.
                Ответить
                • ибо было сказано
                  >в си ты сам выбираешь что и где хранить


                  но ни в шарпе, ни в жабе ты н можешь сделать массив на стеке же
                  Ответить
                  • Эм, т.е. я в шарпе могу создать велью тайп в котором лежит массив фиксированной длины?

                    Какой анскилл )))
                    Ответить
                    • s/могу/не могу/
                      Ответить
                      • в нем будет лежать РЕФЕРЕНС на массив в куче, ведь массив эот РЕФЕРЕНС тайп
                        Ответить
                        • Какой анскилл )))
                          Ответить
                          • так и в джавке массивы на куче же, не?

                            Если бы массивы были на стеке и передавались бы по значению (а не как в сишечке), то питух бы возвращал бы массив на гигабайт, и ныл бы, что всё тормозит
                            Ответить
                            • Ну джавка и не претендует на наличие "структур", не?
                              Ответить
                              • да, в джаве есть примитивы, и это такие атомы типа int, bool, вот это всё.

                                В общем array это reference type, а следовательно ведет себя как обычный объект, и ничем от него не отличается, как я понимаю.


                                Есть вот такой хак
                                https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/operators/stackalloc

                                но он unsfae, и по идее нужен только для магии
                                алсо, In expression stackalloc T[E], T must be an unmanaged type
                                то есть всякие оьъекты там быть не могут
                                Ответить
                                • там недавно еще такую хуйню завезли, теперь без ансейфа

                                  https://docs.microsoft.com/en-us/dotnet/api/system.span-1?view=netcore-3.1

                                  upd: а не, там тоже стакаллок неужен. ну и нахуя тогда (((

                                  еще есть какие-то pinned-референсы, которые хранятся в куче, но гц их избегает, какая-то промежуточная хуйня
                                  Ответить
                  • > но ни в шарпе, ни в жабе ты н можешь сделать массив на стеке же

                    В шарпе можно: https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/operators/stackalloc
                    А вот в Java действительно никак (хотя я б не давал 100% гарантию, может через sun.misc.Unsafe что-то можно сделать)
                    Ответить
                    • В шарпе можно, но
                      * это убдет unsafe
                      * ты не можешь хранить в нем объекты: только валуе тайпы
                      https://govnokod.ru/27085#comment592699
                      Ответить
                      • > * ты не можешь хранить в нем объекты: только валуе тайпы

                        А в шарпе разве нельзя сделать какую-то такую хуйню:
                        struct someshit {
                           int a1;
                           int a2;
                        };
                        
                        char *my_stack_memory = alloca(sizeof(struct someshit));
                        struct someshit *shit = (struct someshit *)my_stack_memory;
                        shit->a1 = 666;

                        ?
                        Ответить
                        • ты получил указатель на говно на стеке и ловко по нему обращаешься к стеку?

                          В C# (во всяком случае без ансейфоф) так сделать нельзя. Чтобы получить ссылку(указатель) на валуе тайп (а структура это валуе тайп) , ты должен его бокснуть.

                          А Boxing is used to store value types in the garbage-collected heap.

                          Есть всякие урезанности типа ключ слвоа ref, но это только для передачи в функцию
                          Ответить
                          • Блядь, как всё сложно. "Boxing" какой-то, "garbage-collected heap". Понапридумывают хуйни какой-то, и потом нихуя нельзя из-за нее сделать. Именно поэтому я за Си.
                            Ответить
                            • всё это сделано ради того, чтобы мартышка случайно не получила болтающийся указатель
                              Ответить
                          • https://docs.microsoft.com/ru-ru/dotnet/api/system.runtime.interopservices.layoutkind?view=netcore-3.1

                            Есть такая вот хуйня для интертопа с сишкой (с сишными структурами, если точнее).
                            [StructLayout(LayoutKind.Sequential)]
                            public struct Point
                            {
                               public int x;
                               public int y;
                            }
                            
                            [StructLayout(LayoutKind.Explicit)]
                            public struct Rect
                            {
                               [FieldOffset(0)] public int left;
                               [FieldOffset(4)] public int top;
                               [FieldOffset(8)] public int right;
                               [FieldOffset(12)] public int bottom;
                            }

                            Наверняка указатель на такую поебень можно кастануть в адрес на стеке, выделенный через stackalloc

                            https://habr.com/ru/post/428676/ - вот еще нагуглил.
                            Ответить
                            • сломать можно, но я говорю про обычное поведение, без хаков

                              кста
                              а есть генератор этх StructLayout по .h файлам? или нужно вручную аккуратно всё переписать с одного языка на другой?
                              Ответить
                              • Да, есть всякая хуйня
                                https://stackoverflow.com/questions/2517557/
                                https://github.com/mono/CppSharp
                                Ответить
                                • мда. Вообще, интероп с нативным кодом везде связан с какими-то унылыми действами.
                                  именно потому я за С++

                                  У винды это раньше решалось COMом, атеперь WinRT: https://docs.microsoft.com/en-us/uwp/winrt-cref/winmd-files

                                  Но это конечно для высокоуровневного кода на крестах, Win32API так не обернешь автоматом
                                  Ответить
                                  • > Но это конечно для высокоуровневного кода на крестах, Win32API так не обернешь автоматом

                                    Наверняка такие говноврапперы уже кем-то написаны. Но нахуя вообще из шарпа ебаться с winapi? Кто-то сейчас что-то серьезное пилит на голом winapi? Может еще нативные сисколлы винды из шарпа надо подергать?
                                    Ответить
                                    • Некоторые вещи могут быть недоступны из .net, к сожалению, хотя для большинства вещей конечно есть обертки.


                                      Нативные сисколы винды никогда не нужно дергать: это вроде не стабильынй ABI, не как в Linux.
                                      Ответить
                                  • > именно потому я за С++

                                    Если у тебя есть бинарная либа, скомпилированная крестокомпилятором X, и соглашение вызовов в том компиляторе X не совпадает с тем компилятором, которым ты компилируешь какую-то хуйню, использующую эту либу, тебе тоже надо будет ебаться со всяким говном. Как минимум, делать какие-то переходники на ассемблере (или встроенными фичами какого-то компилятора).

                                    А что будешь делать, если какая-то там либа скомпилированная хуйпойми каким компилятором возвращает указатель на какой-нибудь std::map или еще какое-то говно из какой-то там блядь древней версии STL (типа stlport) и тебе это говно надо юзать из визуалстудии?
                                    Ответить
                                    • Если у меня есть бинарная либа, то я сделаю extern "C", лол

                                      Я о том, что в С++ я могу подключить .h файл со struct, и течь
                                      Ответить
                                      • > Я о том, что в С++ я могу подключить .h файл со struct, и течь

                                        Это только если layout структур (размеры типов, выравнивания всякого говна) совпадает.
                                        Ответить
                                        • Но ведь такая же проблема есть и в сишечке.
                                          Именно потому винда явно указывает call convention, например.
                                          И размеры типов не просто int там или long, а явный размер указан.

                                          Ну то есть сигнатура
                                          int foo(long bar)

                                          совершенно не дает однозначный abi, если ты не знаешь компилятора и платформы же
                                          Ответить
                                          • Да, в сишечке проблема с возможно разными ABI тоже есть, но в крестах эта проблема куда серьезнее, потому как есть разные C++ runtime с разной хуйней в реализации контейнеров и прочего говна.
                                            В сишечке же всё намного проще. Там всякая хуйня работает просто: память, там указатели, выделение хуйни на хипе и какая-то там ебля с этой памятью. А в крестах какой-то ебаный пиздец со всякими контейнерами, конструкторами-деструкторами, наследованием, таблицами виртуальных методов, исключениями и еще хуй пойми чем.
                                            Ответить
                                            • Именно поэтому я за "PHP".
                                              Ответить
                                            • и с таким вот символами в экспорте файла
                                              ?c@b@@AAGXM@Z

                                              именно потому я за extern "C"
                                              Ответить
                                • шарп кстати приятно удивил тем, что сишные структуры описываются вообще без каких-либо проблем прямо в самом шарпе. течешь себе и течешь. правда, я не знаю как там с юнионами, скорее всего уже не течешь.
                                  Ответить
                                  • Юнионы не нужны.
                                    Ответить
                                    • https://stackoverflow.com/questions/126781/c-union-in-c-sharp
                                      Какой бароп.
                                      Ответить
                                      • Петух ответил:
                                        Personally, I would ignore the UNION all together and implement Killroy and Fubar as separate fields
                                        public struct Foo
                                        {
                                            float bar;
                                            int Kilroy;
                                            float Fubar;
                                        }

                                        Using a UNION saves 32 bits of memory allocated by the int....not going to make or break an app these days.

                                        Блядь, это как "Конардо" советует арендовать сервер дороже.
                                        Ответить
                                        • > Блядь, это как "Конардо" советует арендовать сервер дороже.

                                          С точки зрения getting things done это в целом правильный подход. С точки зрения перфекциониста надо сделать один инт и потом кастовать его туда-сюда, но это чревато проблемами при работе анскилябров с этим подходом, да и это же время может быть вложено в более полезное русло.
                                          Ответить
                                      • > You can use explicit field layouts for that:
                                        ...
                                        > Note that this will work only if the types involved are primitive types (like int and float). Once objects are involved, it won't let you.

                                        Ну и хуйня.
                                        Ответить
                                        • так логично же, в сишке нет объектов, а передавать в нее указатели запрещает сама парадигма менеджед-языка. плюс непонятно когда такое гц должен собирать.
                                          Ответить
                                          • Важно не "логично-нелогично", важно что это мешает делать интертоп си/крестов и шарпа.
                                            Ответить
                                            • вы же сами тут постоянно жалуетесь, что у крестов нет нормального ABI, нет?
                                              а на раст потому что он как раз всё делает через жопу т.е. ансейф, нет?
                                              и нахуй нужен язык, который не следует своей же конвенции?
                                              Ответить
                                              • Ммм.... разве у шарпа есть какая-то стройная концепция типов, как в каком-нибудь хаскеле, которой стоит следовать? Может я фатально ошибаюсь, но в шарпе всё это выглядит как очередной ворох сраного говна, примерно того же уровня, что и в крестах.
                                                Ответить
                                                • у шарпа есть концепция "вы ничего не знаете про поинтеры и мы не дадим вас себя уебать". через ансейф в какой-нибудь ансейф наверняка можно кастануть в какой-нибудь IntPtr - но нахуя? Зачем? Чтобы сделать что?
                                                  Ответить
                                                  • > но нахуя? Зачем? Чтобы сделать что?

                                                    Чтоб работать с какой-нибудь сишколибой, где такая хрень есть.
                                                    Ответить
                                                    • какая? как сишка должна работать с указателем на шарповый объект?
                                                      Ответить
                                                      • А в чем проблема? Из шарпа разве нельзя выделить память на хипе и передать его в сишку?

                                                        https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal?view=netcore-3.1
                                                        Ответить
                                                        • Видимо можно, просто я не шарпист. Но если можно даже это, то нахуя плюсы?

                                                          И, опять же, зачем передавать в стороннюю либу, с которой идет интероп, что-либо кроме непосредственно данных (т.е. value type + массивы char)?
                                                          Ответить
                                                          • > Но если можно даже это, то нахуя плюсы?

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

                                                            > И, опять же, зачем передавать в стороннюю либу, с которой идет интероп, что-либо кроме непосредственно данных (т.е. value type + массивы char)?

                                                            Не очень понимаю вопрос. Я вполне могу представить себе ситуацию, когда в стороннюю либу надо передать выделенный на хипе кусок памяти какого-то размера, эта функция в сторонней либе чето с этой памятью делает (пишет-читает оттуда данные, вычисляет чето) и потом уже из сишарпа можно разгребать эти байтики из того куска памяти, который мы в ту функцию передавали.
                                                            Ответить
                                                            • > У плюсов с оптимизацией получше

                                                              Да камон, опять аот априори лучше жита? ну нихуя ж не так, зависит от случая к случаю

                                                              > и их как-то еще можно упихать в мелкоконтроллеры, если пообрезать всё дерьмо, а шарп без GC вообще не жилец.

                                                              Да ну камон! Обрезается как нехуй.

                                                              https://medium.com/@MStrehovsky/building-a-self-contained-game-in-c-under-8-kilobytes-74c3cf60ea04

                                                              > CoreRT comes with libraries that make CoreRT look like any other .NET runtime: there’s a library that adds GC, library that adds support for reflection, library that adds a JIT, library that adds an interpreter, etc. But all of those libraries are optional (and that includes the GC).

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

                                                              и поинтеры туда передаются без проблем, но нахуя повторять маршалинг и анмаршалинг в двух разных языках? почему либа не сама а) выделяет хип и б) не предоставляет апи, которое будет возвращать человеческие данные из этого хипа?
                                                              Ответить
                                                              • > Да камон, опять аот априори лучше жита?

                                                                Можно использовать profile-guided optimization. На контроллере у тебя тупо нет ресурсов, чтоб туда этот JIT пихать.

                                                                > Да ну камон! Обрезается как нехуй.

                                                                8 килобайт флеша по меркам некоторых контроллеров это более чем дохуя. Ну и еще там надо смотреть, сколько оно потребляет оперативы в процессе работы. Да, можно найти жирные микроконтроллеры, на которых этот шарп будет работать (.net micro framework), но это обычно нахрен не надо.

                                                                https://habr.com/ru/post/387333/ из комментариев
                                                                > Да, это сложно. Чтобы писать нормально на .Net Micro Framework нужно ставить внешнюю RAM и FLASH.
                                                                > Но это все вполне работоспособно. Я знаю успешный коммерческий проект, сделанный на этой технологии.

                                                                Ну т.е. купить сильно более дорогой контроллер, доставить туда еще внешней памяти, и вот тогда-то оно заработает по-человечески. Зато сэкономили на программистах.

                                                                > и поинтеры туда передаются без проблем, но нахуя повторять маршалинг и анмаршалинг в двух разных языках? почему либа не сама а) выделяет хип и б) не предоставляет апи, которое будет возвращать человеческие данные из этого хипа?

                                                                Ну а хуй знает, может авторы либы так решили запилить, исходников либы может не быть т.к. она проприетарная. А еще можно какую-то прослойку между этой либой и сишарпом сделать, которая будет более удобный вариант API предоставлять.
                                                                Ответить
                                                                • > Можно использовать profile-guided optimization. На контроллере у тебя тупо нет ресурсов, чтоб туда этот JIT пихать.

                                                                  Мы говорим про интероп шарпа и плюсов. Если нет ресурсов использовать шарп, то какой интероп?

                                                                  Сколько надо ебаться с PGO, а сколько с джитом? А то что он по факту там делает АОТ, который наверняка пролетает через версию того же майкрософтовского компилятора, что и майкрософтовские плюсы, не играет роли? Как у тебя PGO поможет с удалением чистой функции, если в одном инстансе в нее всегда приходит значение 1, а в другом - значение 2?

                                                                  > 8 килобайт флеша по меркам некоторых контроллеров это более чем дохуя. Ну и еще там надо смотреть, сколько оно потребляет оперативы в процессе работы.

                                                                  Он же не аллоцирует там вообще нихуя, всё на стеке.

                                                                  > Ну а хуй знает, может авторы либы так решили запилить, исходников либы может не быть т.к. она проприетарная. А еще можно какую-то прослойку между этой либой и сишарпом сделать, которая будет более удобный вариант API предоставлять.

                                                                  Если либу сделали пидарасы, то это проблема не шарпа, и наличие плюсов никак не уменьшит количество ебли.
                                                                  Ответить
                                                                  • Пока ваш жид просрётся, на кого-нибудь труба упадёт.

                                                                    Совсем поехали уже жида в реалтайм железки пихать...
                                                                    Ответить
                                                                    • да камон. комментарий про жит оставлен не к утверждению про железки, а к утверждению что плюсы-де лучше оптимизированы.
                                                                      Ответить
                                                                      • Плюсы лучше оптимизированы. У них стабильный, детерминированный пирфоманс. А не только на вырожденных кейсах после прогрева, как у жида.
                                                                        Ответить
                                                                        • >детерминированный
                                                                          если у меня тяжелый конструктор, то один компилятор может преминить оптимизации и вызвать конструктор меньшее кол-во раз. Всякие там RVO, move (которого нет в старых компиляторах), создание объекта прямо там, где нужно, без копирования итд

                                                                          Но я согласен, что "воткнуться вдруг иногда на пол секунды по причине GC" кресты не могут
                                                                          Ответить
                                                                          • Меньшее - не большее. Ну и эти оптимизации от запуска к запуску не меняются. Чего не скажешь о жиде.
                                                                            Ответить
                                                                            • я в целом согласен, угу. Я бы поспорил, если бы не разбирался на работе с дампами от польщователей у которых "все тормозит и греется" потому что много гц.
                                                                              Даже минорные гц -- не лучшая в мире вещь, когда их много
                                                                              Ответить
                                                                        • ой, ну давайте еще доебемся до вызовов brk, которые у менеджед языков происходят только пока хип не расширится, чтобы все вмещать, а плюсам на каждый new отрабатывать.
                                                                          Ответить
                                                                          • Пропагнда про "выделение памяти у джавки быстрее, чем у крестов" умалчивает один момент: а что случается потом, когда память кончается
                                                                            Ответить
                                                                            • Ну с тоннами короткоживущих объектов гц таки быстрее справляется.
                                                                              Ответить
                                                                              • попрофилируй как нить intellij idea, которая индексирует тяжелый проект, например, и посмотри сколько там бывает gc.
                                                                                Ответить
                                                                            • а что, кресты продолжают штатно работать, когда заняли всю доступную память?
                                                                              Ответить
                                                                              • Кресты не занимают память в тайне от пользователя обычно, кроме тех, кто выделяет ее динамически под капотом.

                                                                                В языках с RC (а современные кресты именно оно) памтяь у тебя или выделяется/удаляется вообще бесплатно (на стеке) или делает это детерминированно в момент освобождения объекта

                                                                                Ситуации "раз в пять минут все чего-то тупит" там не должно быть
                                                                                Ответить
                                                                      • Разумеется, плюсы лучше оптимизированы.

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

                                                                        А в крестах у меня всё предсказуемо, не говоря уже о том, что нет каких-то левых потоков с джитом.

                                                                        Другой вопрос, что для энтерпрайза это явялестя проблемой чуть менее, чем никогда.

                                                                        А вот для железок или игр очень важно.
                                                                        Ответить
                                                                        • если посмотреть выше про змейку, то там _нихуя_ нет классов. джита там кстати тоже нет, там АОТ.

                                                                          но вообще вся история про мимоконтроллеры началась с того, что иного кейса для преимущества плюсов над шарпом нет. правда, не очень понятно и почему там не стоит писать на обычной сишке.
                                                                          Ответить
                                                                          • Преимущество крестов перед шарпом в
                                                                            * шаблонах
                                                                            * отсутствии GC
                                                                            * бесплатным интеропом с сями

                                                                            >на обычной сишке
                                                                            хочу decltype, RAII, шаьблоны, лол
                                                                            Ответить
                                                                            • Зачем тебе шпблоны в змейке?
                                                                              Ответить
                                                                              • в змейке может и не нужно, но даже в сраном интерправйзе бы не помешали
                                                                                Ответить
                                                                            • окей, в чем преимущество темплейтов перед генериками?
                                                                              Ответить
                                                                              • в джаве генериков в рантайме нет, тут даже говорить смешно, особенно для примтивов

                                                                                в шарпе чуть лучше, но и там генерики не тюрингполные и передаваемый аргумент нормально не проверить, и не сделать разные реализации в зависимости от него

                                                                                Алсо, все генерики с объектами всегда раскрываются в одно и тоже, и хранят объект на куче, именя на него ссылку, но это уже проблемы шарпа, а не генериков
                                                                                Ответить
                                                                                • > в джаве

                                                                                  пиздец. пиздец. пиздец.

                                                                                  ОТКУДА вы это тащите? мы говорим про интероп шарпа с си-лайк коллинг конвеншн. При чем тут джава? Зачем вы постоянно притаскиваете не имеющее отношения к теме дерьмо? Зачем? Зачем? Зачем?

                                                                                  > в шарпе чуть лучше, но и там генерики не тюрингполные и передаваемый аргумент нормально не проверить, и не сделать разные реализации в зависимости от него

                                                                                  что значит не сделать разные реализации? where T : struct | where T : class | where T : InterfaceABC по-твоему не существует что ли?
                                                                                  Ответить
                                                                                  • Не нужно так бугурить:) У нас тут сайт друзей

                                                                                    Приведи мне пожалуйста код, который ведет себя по разному в зависимости от типа, которым параметризован.

                                                                                    Например, имеет разные методы.
                                                                                    Разумеется, все это должно делаться в компайл тайме

                                                                                    Вполне возможно, я не умею этого делать в шарпе: я не щарпей

                                                                                    Tmeplate specialization или как оно там
                                                                                    Ответить
                                                                                    • Оказалось, что для шарпа Create<T> where T : struct и Create<T> where T : class это всё-таки одно и то же, чему я удивлен - я был уверен, что он умеет, как и блядская жаба. Но никаких проблем с теоретической точки зрения здесь нет:

                                                                                      <N> void alpha(N in);
                                                                                          <N extends Number> void alpha(N in);
                                                                                          <N extends List<?>> void alpha(N in);


                                                                                      блядва на такое не ругнется даже при её тайп эрейже - она при компиляции на основе типа выберет нужный оверлоад и впишет его в байткод.
                                                                                      Ответить
                                                                                      • Я всё равно не понял как это перевести на php C#:
                                                                                        template <typename T>
                                                                                        class my_class
                                                                                        {
                                                                                        public:
                                                                                        	void doAll();
                                                                                        };
                                                                                        
                                                                                        template <>
                                                                                        class my_class<int>
                                                                                        {
                                                                                        public:
                                                                                        	void doAll(int all);
                                                                                        };
                                                                                        
                                                                                        
                                                                                        
                                                                                        int main()
                                                                                        {
                                                                                        	my_class<bool> a{};
                                                                                        	my_class<int> b{};
                                                                                        	a.doAll(); //разные сигнатуры в зависимости от типа
                                                                                        	b.doAll(12);
                                                                                        }
                                                                                        Ответить
                                                                                        • Эм, зачем тебе разные сигнатуры внутри одного типа? Но скорее всего с помощью extension methods можно наваять. Плюс сигнатуру дженерика определяет количество его параметров, т.е. Interface, Interface<A> и Interface<A, B> - это три разных типа, методы которых друг от друга не зависят.
                                                                                          Ответить
                                                                                          • >Эм, зачем тебе разные сигнатуры внутри одного типа?

                                                                                            чтобы делать разый код в зависимости от типа в компайл тайме, или например как в auto_ptr (изивините за упоминание его на людях. крестовики, заткните уши)
                                                                                            Specialization for type void is provided, it declares the typedef element_type, but no member functions.
                                                                                            Ответить
                                                                                            • Короче, в действительно высокоуровневых языках это решается через интерфейсы. Делаешь Processor<T1, T2> для всех, делаешь Processor<int, T1> для одного случая, Processor<T1, int> для второго, и так далее, всё это разрулится в компайл-тайме. Но вот делать какой-нибудь Concatenator, который при обработке интов будет возвращать инт, при обработке строк строку, а при обработке даблов будет возвращать пожатый гзипом стектрейс из интерпретатора пхп - нет, тут это моветон.
                                                                                              Ответить
                                                                                        • Какой же уебанский синтаксис. Почему нельзя было сделать

                                                                                          template<typename T1, typename T2>


                                                                                          а переопределения для него

                                                                                          template<int, T2>
                                                                                          template<T1, int>
                                                                                          template<int, int>

                                                                                          И какие угодно кобенации.
                                                                                          ?
                                                                                          Ответить
                                                                                          • чем template<T1, T2> семантически отличается от template<int, int>? разве второй не является частным случаем первого?
                                                                                            Ответить
                                                                                            • Я хочу отдельную логику для int, int.
                                                                                              Ответить
                                                                                              • если у тебя для одного из параметров отдельная логика - это уже другой тип, и это два разных класса.

                                                                                                Но никто не запрещает тебе сделать class X : Transformer<int, int>, Transformer<string, int> и имплементировать два метода. Я не удивлюсь, если он даже с X : Transformer<int, int>, Transformer<object, object> разберется и вызовет правильный метожд.
                                                                                                Ответить
                                                                                              • а вообще говоря, тут даже ебаные интерфейсы не нужны

                                                                                                public class X {
                                                                                                  public static void Log<T, V>(T a, V b) { System.Console.WriteLine("both parameters"); }
                                                                                                  public static void Log<T>(T a, int b) { System.Console.WriteLine("second int"); }
                                                                                                  public static void Log<T>(int a, T b) { System.Console.WriteLine("first int"); }
                                                                                                  public static void Log(int a, int b) { System.Console.WriteLine("both ints"); }
                                                                                                }

                                                                                                > X.Log(1, 2);
                                                                                                both ints
                                                                                                > X.Log("test", 2);
                                                                                                second int
                                                                                                > X.Log("test", "test");
                                                                                                both parameters
                                                                                                >

                                                                                                Ответить
                                                                  • > Мы говорим про интероп шарпа и плюсов. Если нет ресурсов использовать шарп, то какой интероп?

                                                                    Ну так-то да, тогда шарп нафиг не нужен.

                                                                    > Сколько надо ебаться с PGO, а сколько с джитом?

                                                                    Зависит от задачи. Иногда JIT просто не подходит. В какой-нибудь HotSpot JVM оно при каждом запуске будет с нуля разогреваться и поначалу тормозить (кстати, а можно ли как-нибудь сохранить "разогретое" состояние?), а предварительно скомпилированная через PGO (как бы статически сохраненное разогретое состояние, по которому код один раз заоптимизировали, и больше не трогаем) сразу работает ровно, хотя если поменяется сценарий использования, оно не перекомпилирует само себя в рантайме.

                                                                    > Как у тебя PGO поможет с удалением чистой функции, если в одном инстансе в нее всегда приходит значение 1, а в другом - значение 2?

                                                                    Да это всё понятно, иногда это лучше через JIT делать, а иногда через PGO. Вообще, если используется PGO, компилятор теоретически в одном месте может заинлайнить функцию так, что вот "там-то скорее всего приходит вот это", а в другом "там-то скорее всего приходит вот это", но если это вдруг внезапно поменяется, это будет тормозить, и тогда JIT в этой ситуации уделывает PGO. "Что круче, JIT или PGO?" - это довольно сложный дискуссионный вопрос, на который в общем случае ответить никак нельзя. В контроллерах, которыми я занимаюсь, какой-либо JIT использовать попросту неоправданно.

                                                                    Вообще, то что ты тут пишешь (про динамическую рекомпиляцию на основе профилирования в рантайме) - это фишка HotSpot JVM, в дотнетовском рантайме нет всей этой сложной херни (хотя может мои знания устарели)
                                                                    Ответить
                                                                    • > Зависит от задачи. Иногда JIT просто не подходит. В какой-нибудь HotSpot JVM оно при каждом запуске будет с нуля разогреваться и поначалу тормозить (кстати, а можно ли как-нибудь сохранить "разогретое" состояние?), а предварительно скомпилированная через PGO (как бы статически сохраненное разогретое состояние, по которому код один раз заоптимизировали, и больше не трогаем) сразу работает ровно, хотя если поменяется сценарий использования, оно не перекомпилирует само себя в рантайме.

                                                                      1. Почему ты думаешь, что я этого не знаю?
                                                                      2. На кой хуй тебе постоянно перезапускать жабу? Зачем ты берешь жабу и перезапускаешь её? Зачем? Зачем? Зачем ты это делаешь? Чтобы что? ЧТобы аргументировать потом руководству плюсы плюсов? А если ее не перезапускать? Ты пробовал её не перезапускать? Пробовал? Пробовал? Ну давай, признайся. Пробовал? Да нет, не пробовал.

                                                                      > Вообще, то что ты тут пишешь (про динамическую рекомпиляцию на основе профилирования в рантайме) - это фишка HotSpot JVM, в дотнетовском рантайме нет всей этой сложной херни (хотя может мои знания устарели)

                                                                      Tiered compilation уже завезли
                                                                      Ответить
                                                                      • > 1. Почему ты думаешь, что я этого не знаю?

                                                                        Ничего я не думаю. Я не могу точно знать, что ты знаешь, а чего нет.

                                                                        > 2. На кой хуй тебе постоянно перезапускать жабу? Зачем ты берешь жабу и перезапускаешь её? Зачем? Зачем?

                                                                        Потому что если я открываю какую-то говноIDE на жабе, она выжирает мне оперативную память, а мне память нужно под другую хуйню, и я закрываю жабу. Увы!

                                                                        > Tiered compilation уже завезли

                                                                        Ну и отлично.
                                                                        Ответить
                                                                        • таки своп есть, если оперативы мало. еще хип можно руками подрезать, если надо.
                                                                          Ответить
                                                                          • для жабы, кстати, тоже уже завезли АОТ в виде graalvm. но как и все в жабе после какого-нибудь 2010, это спизжено из шарпа, работает оно наполовину, и пользоваться этим практически невозможно.
                                                                            Ответить
                                                                          • >таки своп есть
                                                                            которым лучше никогда не пользоваться в 2020
                                                                            Ответить
                                                                          • > своп
                                                                            > в проге с gc

                                                                            И пусть весь мир подождёт.
                                                                            Ответить
                                                                            • ой, ну хорош до мышей доебываться. пока YG не в свапе, а его должно дёргать достаточно часто, ничего не будет.
                                                                              Ответить
                                                                              • А можно ли как-нибудь явно скомандовать ядру ОС, чтобы он такую-то хуйню в свап затолкал? Например, отправка SIGSTOP всем этим жрущим память процессам может помочь? А как быть в винде?
                                                                                Ответить
                                                                                • https://serverfault.com/a/938671

                                                                                  если у вас есть проблема, она уже решена сигруппами
                                                                                  Ответить
                                                                      • >Зачем ты берешь жабу и перезапускаешь её?

                                                                        Некоторые программы так работают: ты их запускаешь, оно что-то делают, и завершаются.


                                                                        Слышал про такие?
                                                                        Ответить
                                                                        • да, это консольные утилиты, на которые нам наплевать, либо какой-нибудь одноразовый подъем спарка у нищуков без денег на серверы, где нам тоже наплевать, потому что весь прогрев занимает ничего на фоне времени работы самой программы.

                                                                          про такие, чтобы их надо было так часто перезапускать, чтобы прогрев был заметен на фоне времени выполнения и это вызывало какие-то серьезные финасовые потери - нет.
                                                                          Ответить
                                                                          • Дочерние процессы серверов переодически перезапускаются на случай течки памяти или дыр в безопасности, например
                                                                            Ответить
                                                                            • ежеминутно? или с такой периодичностью, что нам всё-таки похуй? не говоря уж о том, что я и на плюсах могу с утечками написать.
                                                                              Ответить
                                                              • Error 1020
                                                                Ответить
                                                    • also, если хочется уж совсем уебаться, то там можно и с плюсами кодить, правда это майкрософтовские плюсы

                                                      https://docs.microsoft.com/en-us/cpp/dotnet/dotnet-programming-with-cpp-cli-visual-cpp?view=msvc-160

                                                      но я по-прежнему не понимаю зачем, потому что шарп позволяет писать практически всё тоже на самом шарпе, за исключением еботни с каким-нибудь unmanaged пулом памяти
                                                      Ответить
                                          • смотри-ка, а он и юнионы по-человечески умеет

                                            https://docs.microsoft.com/en-us/dotnet/framework/interop/marshaling-classes-structures-and-unions#unions-sample

                                            и двойные указатели aka массив указателей

                                            https://docs.microsoft.com/en-us/dotnet/framework/interop/marshaling-classes-structures-and-unions#outarrayofstructs-sample

                                            и конечно нестеды без проблем, потому что один хуй плоское пространство

                                            https://docs.microsoft.com/en-us/dotnet/framework/interop/marshaling-classes-structures-and-unions#findfile-sample
                                            Ответить
                                            • > смотри-ка, а он и юнионы по-человечески умеет

                                              Ну так а он умеет делать аналог
                                              struct str1
                                              {
                                                int a;
                                                float b;
                                              };
                                              
                                              struct str2
                                              {
                                                float a;
                                                int b;
                                              };
                                              
                                              union str12_union
                                              {
                                                struct str1 a;
                                                struct str2 b;
                                              };

                                              ?

                                              Аналогов такому я не увидел. Можно конечно оставить две структуры, и кастовать указатель или в такую структуру, или в сякую. Но при определенном уровне вложенности это уже будет неудобно (если там юнион двух структур, в структурах есть юнион тоже, и так далее). Можно конечно решать какими-то кастами в хуйню по таким-то смещениям, нагенерить это на основе типа, но это дополнительные телодвижения и сложности.
                                              Ответить
                                              • а чем это отличается от { union {int, float}, union {float, int} }?
                                                Ответить
                                                • Тем, что { union {int, float}, union {float, int} } состоит из двух четырехбайтных штук (первая их них это или int или float, вторая - или float или int). Я могу допустим первый union прочитать как int, второй тоже как int и мне за это ничего не будет.
                                                  А если {union { struct {int, float}, struct {float, int}}} - тут-то я сначала выбираю, смотрю ли я на это как на "cначала int потом float" или наоборот.

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

                                                  struct str1
                                                  {
                                                    uint16_t a;
                                                    uint8_t b[2];
                                                    uint32_t c;
                                                  };
                                                  
                                                  struct str2
                                                  {
                                                    uint32_t a;
                                                    uint16_t b;
                                                    uint8_t c[2];
                                                  };

                                                  И юнион из них.
                                                  Ответить
                    • > может через sun.misc.Unsafe что-то можно сделать

                      разве что написать через него better c и управлять памятью напрямую
                      Ответить
            • > Хотя вот массив не хочет быть полноценным велью тайпом и не копируется :(

              Если сделать массив известного размера внутри типа структуры, тогда будет велью тайп и всё там будет копироваться.
              Ответить
              • >внутри типа структуры
                отож

                Вообще адский багор, конечно. Зачем так сделали? Зачем? Зачем? Сколько багров словили нубы передавая и возвращая массивы
                Ответить
                • А если нубам написать
                  10[a] = 42;
                  Ответить
                • > Зачем так сделали? Зачем? Зачем?

                  Чтоб нубы поняли суть адресной арифметики. Что ptr[val], val[ptr], *(ptr+val), *(val+ptr) это та же самая хуйня. Вообще, настоящих массивов (как в паскале) в Си нет.
                  Ответить
    • сайт красивый
      https://i.postimg.cc/762vqL77/gafnpo.png
      Ответить
    • [quote]
      Я могу зафигачить целое приложение за месяц. Например, на последней работе я сделал прототип проекта за сутки — и это 60% всей работы, нужной для выхода на рынок. Но когда я начинаю делать пет-проект, мне сразу хочется все обсерьезить. Мы с пацанами создаем жиру, рубим все на спринты, заводим тикеты, настраиваем CI. Потому что со всеми этими церемониальными вещами пет-проект становится чем-то очень настоящим.
      [/quote]
      https://m.habr.com/ru/company/vdsina/blog/516970/

      Именно по этому Филипп за "ротоёб"
      Ответить
      • Филипп, что вы делаете?
        Ответить
      • Откуда такие ебланы вообще берутся? Спринты, жиры какие-то блядь, тикеты, хуикеты... да пошли вы нахуй. Я просто беру и хуячу код, тестирую, потом хуячу, тестирую, и так пока не заработает нужный функционал.
        Я под микроконтроллеры пишу без всяких жир и тикетов.
        Ответить
        • А как тебе сообщают об ошибке?
          Ответить
          • Тестируют хуйню и сообщают что вот тут ошибка, это переделай, это доделай.
            Ответить
            • куда сообщают?
              в ишьюс в гитхаб?
              Ответить
              • Ну можно ишьюсами, можно по почте. Это один хуй
                Ответить
                • ну вот у нас qa проверяет issue, потом его вносят в ченджлог, а в issues еще пасуца пользователи, и следят. И в комит меседжах issues тоже

                  так что почта не оч канает
                  Ответить
      • > У каждого проекта есть точка невозврата — момент, когда ответ на вопрос «а не полную ли хрень мы делаем» уже не имеет значения, потому что даже если и полную — делать с нуля уже не получится. Потому что пользователи привыкли именно вот к такому куску говна, который мы для них сделали, со всеми его багами и неочевидными поведениями — в этом и есть его уникальность, которую быстро и легко воспроизвести не получится.

        Совершенно очевидно, что он пишет какую-то типичную бекенд-фронтенд питушню, у меня такой хуйни нет
        Ответить
        • У тебя быстрые проекты, которые делаются до конца за три месяца, и больше не трогаются?

          В энтерпрайзе проекты живут годами иногда
          Ответить
          • > У тебя быстрые проекты, которые делаются до конца за три месяца, и больше не трогаются?

            Нет, прошивку под хуйню тоже теоретически можно пилить годами, можно дополнять там что-то и выпускать новую версию прошивки с немного другими опциями в менюшке для хуйни. Но под это хватает банального гитлаба или гитхаба с его issue-ами. Сложной хуйни как в Jira - не надо.
            Ответить
            • >гитхаба с его issue-ами.
              Так та же джира по сути)

              Просто джира была 15 лет назад, а гитхаба не было.
              Алсо, джира позволяет писать свои воркфлоу, но обычно это нужно когда у тебя сложный бизнесс процесс, и 20 разработчиков, Да и писать их на джаве -- то еще удовольствиие
              Ответить
              • Джира это перепитушня, там всякие спринты-хуинты, разбиение на какие-то тимы и еще какая-то поебень, которая по сути-то нахуй не нужна
                Ответить
                • она не нужна в твоих задачах, а в тяжелом ентерпрайзе очень даже нужна:)

                  но в целом я согласен, что джира это перепетушня даже по меркам интерпрайза
                  Ответить
                • > какие-то тимы

                  Не думаю, что тебе хотелось бы видеть баги и задачи для сотни других чуваков, которых ты даже не знаешь.
                  Ответить
              • Разрабы GCC и Clang-LLVM вообще bugzilla используют, и им заебись.
                https://bugs.llvm.org/
                https://gcc.gnu.org/bugzilla/
                И я б не назвал эти "проекты" простыми и маленькими
                Ответить
                • ну багзила достаточно сложная и расширяемая на самом деле, просто она на перле, а не на джаве)

                  Кроме того, административно эти проекты проще, чем энтерпрайз.

                  У них не прибегает заказчик с 20ю хотелками в день, и не спрашивает через неделю об эстимейтах
                  Ответить
                  • Багзилла (так, как ее используют те же GCC-шники) почти то же самое, что и issue в гитхабе. Да, может там есть какие-то плагины для канбан-доски, спритнов и тому подобных штук, но GCC-шники отлично справляются без этого.
                    Да, может для какой-то хуйни вся эта питушня с аджайлами действительно нужна, но не в моей области.
                    Ответить
                    • Я не сопрю, что для многих проектов вполне хватит github.

                      но Атсассиан это часть интерпрайз культуры: 15 лет назад не было гитхаба, и макаки на галерах всегда ставили jira и конфлюенс (ужасно тяжелый wiki) и написали кучу расширений (каждое по 24 класса на джаве, как ты понимаешь), и уже привыкли

                      Тебе какой-нить Team Foundation Server тоже наверное в страшном сне не приснится, а кому-то он нужен
                      Ответить
                    • Кабан-доска так то няшная штука, удобнее чем просто список.

                      Банально для себя пометить что хотелось бы пофиксить на этой неделе, а что потерпит.

                      Не обязательно же там все эти цифры проставлять и в покер играться.
                      Ответить
                      • Покер это скрам, а не канбан вроде бы

                        Канбан отвечает на два вопроса:
                        * сколько задач сейчас в какой стадии
                        * где у тебя боттлнек (QA, DEV, deploy итд)

                        Это такой микрофреймворк (в отличие от скрам и всяких рупов). Его идеология такова: ценность имеют только законченные фичи. Если ты хуячил три недели, и все фичи висят в QA, то с точки зрения заказчика ты ничего за 3 недели не сделал, и тратишь деньги. Или нанимай больше QA, или увольняй разрабов)
                        Ответить
                        • Где вы купили говорящего кабана?
                          Ответить
                          • Несмотря на связанные с ним легенды, вепрь Ы, вероятно, имеет прототипом реальное животное Запроливья. Обитает в Икающем лесу. Свиреп, в разъярённом состоянии громко рычит, в более спокойном — иногда издаёт бормочущие звуки. Неуязвим для железа, но легко пробивается костью. Также часто называется «голым вепрем Ы», вероятно, потому что практически лишён волосяного покрова. Согласно легендам, проклят святым Микой
                            Ответить
                        • > и все фичи висят в QA, то с точки зрения заказчика ты ничего за 3 недели не сделал

                          Так вот почему стали работать без qa
                          Ответить
                          • совершенно верно. QA только тормозят процесс. Я просто выствляю сразу все в продакшен, а если там какие-то баги -- так мне заказчик скажет
                            Ответить
                • зы:

                  багзила и интерпрайз (канбан -- сорт аджайла)
                  https://github.com/leif81/bzkanban
                  Ответить
                  • Я ядрёный как кабан
                    Я имею свой канбан
                    Я на нём аджайл хуярю
                    Не найти во мне изъян
                    Ответить
                    • Бюрократии за край
                      Фичи, борды, ки пи ай
                      Ай, ну и няхай
                      Ответить
              • > Так та же джира по сути)

                это тебе как разрабу так кажется. а если у тебя департамент с семью проектами в управлении, то хуй ты сможешь понять в каком они состоянии, где зависимости, на какие вещи надо подписаться, и где баги, которые должны быть решены вот вчера и по ним надо каждые полчаса спрашивать "ну как там", чтобы девелопер не начал строить самолет.
                Ответить
                • Я просто подумал, что циферки вообще против ишютреккеров

                  Я прекрасно знаю чем пахнет интерпрайз, и зачем придумали сложные воркфлоу в jira и зачем нужен скрам))

                  И кстати регулярно вижу чуваков, которые говорят "я пишу драйверы под линукс, и не понимаю зачем пидарасы придумали какие-то скрамы, BDD и прочих бизнес-аналитиков", лол)
                  Ответить
    • [mode=c++за24часа]У меня горит жопа от того, что в древнем API нету модификаторов const у параметров функций, которые принимают указатели.
      Это заставляет меня делать не const все мои методы, которые их вызывают, и передают туда поля. И сами поля тоже не могу сделать const.

      Могу взять static_const, но сцу: а вдруг там правда что-то не const?
      Хотя если питухи получают указатель на RECT (структура о четырех интах такая), и по ней что-то рисуют, то ведь стопудово не меняют её..

      Как быть?[/mode]
      Ответить
      • Я в такое говно обычно копию отдаю. Ну а если дорого и апи реально обещает не менять - конст каст. Не портить же остальной код.

        З.Ы. В винапи реально есть функции, которые срут в аргумент. Тот же CreateProcessW.
        Ответить
        • я не хочу копировать в общем случае: нахуя пидарасы получают указатель на структуру-квадрат, если я всё равно буду ее копировать? крестоблядь должна думать про пифоманс

          Из за этого мне пришлось снять const c поля и сделать его приватным (чтобы не насрать снаружи) и логику перенести внутрь класса (так как снаружи никто не мог поле видеть, а френдов я ебал)

          Дока по апи кажется что 2001-го года, и про конст там нет. На другом языке я бы попробовал конст ксат, и посмотрел бы -- не упадет-ли, но c таким подходом я точно не стану крестобялдью
          Ответить
          • Не-не-не. Снимать с поля конст и портить свой код из-за легаси говнища - это самый хуёвый вариант.

            Если оно реально срёт, то оно тебе испортит поле. Тут только копию подсовывать, как тому же CreateProcessW.

            Если оно не срёт - то const cast прям в вызове чтобы явно показать, что ты зовёшь легаси хуйню и она не срёт.

            Обычно в доке явно пишут куда функция срёт. Если нет доки и уверенности - выбрось нахуй такое апи, поищи что-то более свежее.
            Ответить
            • снял конст, все работает. Ну правда, RECT никто не портит.

              > более свежее.
              Я некрофилю принципиально, из спортивного интереса.

              Поел только что смешного говна:
              Есть COM интерфейс. Комы когда создаются (CoCreateInstance), у них счетчик равен 1. При копировании нужно делать AddRef, при удалении -- Release(). Последний релиз удаляет ком.

              Есть функция в API, которая получает указатель на COM, и заполняет его его свежим комом.

              Я обернул ком CComPtr, который умный поинтер для комов, и сунул ему в конструктор сырой поинтер, свежезаполненный.

              Когда CComPtr умер -- COM не умер!
              Думаю: что за хуйня?

              Оказывается,
              [msdn]
              The constructors that take an argument call AddRef on lp, if it isn't a null pointer.
              [/msdn]

              То есть этот питух вызвал AddRef у уже живого COMа, при смерти вызвал Release, остался понитер равен 1.

              Тогда я создал сразу CComPtr<IMyComInterface>, сунул его адрес в ту функцию, и она заполнила его значением (у него оператор присваиваня перегружен и AddRef он не делает) и всё стало заебись.

              Может быть приучусь читать доки)
              Ответить
              • > оператор присваиваня

                Оператор присваивания таки делает AddRef. Здесь у тебя сработал оператор "взятия адреса", который вернул адрес сырого внутреннего поинтера.
                Ответить
                • упс, я заглянул в сырец atl, ты прав: он вернул адрес сырого поинтера, и туда вписали нужное значение мимо эддрефа.
                  Ответить
                  • В "ATL" почти все смарт-штуки косплеят соответствующую сырую структуру. Тот же VARIANT, к примеру.
                    Ответить
                    • вариант похож на юнион, угу
                      Ответить
                    • ps: в ATL еще юзают, как пишут, CRTP, позволяющий делать полиморфизм в компайл тайме, без виртуальных методов.

                      class Petuh:Foo<Petuh>
                      Ответить
          • З.Ы. Ну и сишники же это апи как-то юзали. Значит по доке им было понятно срёт функция в этот аргумент или нет. Так что не сцы )))
            Ответить
          • > На другом языке я бы попробовал конст ксат, и посмотрел бы -- не упадет-ли

            Можешь еще дизассемблировать хуйню и посмотреть, не срет ли оно туда.

            Кстати, это одна из причин, почему я за опенсорс
            Ответить
            • В опенсорсе вообще можно попробовать расставить консты.
              Ответить
            • ох, я не хочу без необходимости читать асемблер виндовых либ, с моими скиллами это на три дня развлечение
              Ответить
    • фронтобляди не нужны
      https://www.quora.com/Why-do-front-end-developers-make-significantly-less-than-back-end-software-engineers
      Ответить
      • Выглядит как пиздеж
        Ответить
        • ...я знал, что тебе понравится)
          Ответить
          • Ну по-моему сравнивать сколько зарабатывают люди в вакууме это в принципе непродуктивно и я считаю что веб в большинстве своем это единая отрасль и там больших перекосов нет
            Ответить
            • да не, я согласен

              я не думаю, что пыхомакака богаче фронтера. Просто бекенд иногда бывает содержит всю логику, и она куда сложнее (ну типа поисковой машины гугла), но называть таких людей бекендом нельзя наверное
              Ответить
      • > Front-end developers with the right skills make a 30% premium over backend developers … but this premium will probably narrow in the near future.

        РЯЯЯЯЯЯЯЯЯЯЯ РЯЯЯЯЯ ДА МЫ НЕ ХУЖЕ ДА НЕТ ЖЕ НАМ ПЛАТЯТ БОЛЬШЕ [size=smaller than your achievement list]но только если ты гений и что-то забыл в этой профессии, да и сравнивают тебя со среднестатической макакой[/size] РЯЯЯЯЯ РЯЯЯЯ ЯРРЯРЯРЯРЯРЯРЯРЯРРЯРЯ

        хаааахахахах
        Ответить
    • давайте форсить олдскул
      https://sun9-71.userapi.com/c855332/v855332717/6243a/IrqYIeBK9j4.jpg
      Ответить

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